HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/buyercall/blueprints/contacts/__pycache__/endpoints.cpython-310.pyc
o


�e0��@s�ddlZddlmZddlmZddlmZddl	m
Z
ddlmZddlm
Z
mZddlmZmZmZmZmZmZdd	lmZdd
lm
Z
mZddlmZmZmZddlmZdd
lmZm Z m!Z!m"Z"m#Z#m$Z$ddl%m&Z&ddl'mZm(Z(mZmZm)Z)m*Z*m+Z+mZm,Z,m-Z-ddl.m/Z/ddl0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddlmZddl9Z9ddl3m4Z4m:Z:ddl5m6Z6m;Z;ddl<m=Z=e9�>d�Z?e9�>d�Z@ddlAmBZBe
deCdd�ZDe�EeC�ZFedd ��ZGed!d"d#d$�d%d&��ZHed!d"d#d$�d'd(��ZIed!d"d#d$�d)d*��ZJd+d,�ZKed!d"d#d$�d-d.��ZLed/d0��ZMed1d2��ZNd3d4�ZOed5d6��ZPed7d8��ZQed9d:��ZRd;d<�ZSed=d>��ZTdCd?d@�ZUedAdB��ZVdS)D�N)�login_required)�current_app)�api_role_required)�api_jsonify)�current_user)�	Blueprint�request)�Contact�ContactChannelTie�ContactTags�Lead�Message�Status)�ContactTagSchema)r�jsonify)�datetime�date�	timedelta)�rrule)�extract�or_�and_�desc�func�text)�timezone�)
r	�ContactNotesrr
�
CreditReports�	Campaigns�BdcStatusesr�MarketingSources�ContactVehicle)�Agent)�FormLead�
FormLeadField)�contains_eager)�format_phone_number)�	AESCipher)r&�	load_only)r'�format_phone_number_bracket)�tza_to_leadtimez\S+@\S+\.\S+z^\+?[0-9]{10,12}$)�db�contactsapiz
/api/contacts)�
url_prefixcCs�d}d}d}g}tjpd}tj�tj|k���}|D]O}|j|j�d|j��ddgdg|j	d	�}g}t
j�t
j|jk���}	|	D]}
|�
|
j�q@tt|��}g}|D]}
|�
|
j|
jd
��qS||d<|�
|�qt||||�S)NTz#Account leads fetched successfully!��r� �HotzQualified LeadzPre-approved)�leadId�name�primaryTags�
secondaryTags�manualStatus)�idr3�sources)r�partnership_account_idr	�query�filter�all�sid�	firstname�lastname�statusr
�contactr7�append�
source_obj�list�setr3r)�success�message�status_code�datar9�leads�lead�_lead�contact_sources�contact_channel_ties�cct�unique_contact_sources�_sources�source�rS�I/home/arjun/projects/buyercall/buyercall/blueprints/contacts/endpoints.py�
account_leads%s6
�
�rU�agent�admin�partner�sysadmincCs:d}tj�tjdktjdk���}ttdd��|�|d�S)Nz!Contact tags fetched successfullyT�	secondary��many�rIrG)	rr:r;�	is_active�tag_typer<rr�dump)rG�contact_tagsrSrSrT�get_contact_tagsGsrbcCs^d}t�|�}|r%tj�tjdktjj|jd��}t	t
dd��|�|d�Sd}t	id|dd	�S)
Nz)Tags of the contact fetched successfully!T�r7r[r]�Contact not found�F�rHrGrF)r	�
get_by_sidrr:r;r^�contacts�anyr7rrr`)�contact_sidrGrArarSrSrT�get_tags_by_contactNs
 rkcCszd}d}d}t��pi}|�dd�}|r0t�|�}|s%tj|��dd�}nd|�d	�}d
}d}nd}d
}d}t|||d
�S)Nz Contact tag created successfully��Tr3�rZ)r3r_z	The tag 'z' already existsi�FzInvalid parameters)rGrHrF)r�get_json�getr�get_by_name�create�lowerr)rGrHrF�receivedr3�existing_tag�contact_tagrSrSrT�create_contact_tagYs 
rvcCs&t�|d�}t�|d�}t||j�S)N�%m%d%Y)r�strptime�abs�days)�d1�d2rSrSrT�days_betweenosr}cCsfd}t�|�}|r)t��}|�dg�}|r&t�|�}||_|��t	|d�Sd}nd}t	id|dd�S)	Nz)Tags of the contact updated successfully!�tags)rGz
No tags foundrdreFrf)
r	rgrrnror�get_by_sidsra�saver)rjrGrArsr~rarSrSrT�manage_tag_by_contactts


r�cc
sg}g}g}g}g}g}g}g}tj}tj}	t|�t|	�|	r#tj}tj�dd��ttj�dd��}
tj�dd�}ttj�dd��}ttj�d	d
��}
t	tj�d��}t	tj�d��}t||d
�tj�d�}t|d�t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t	tj�d��}t|||||d�t|||||�t||�t
||�}t|d�td�}td�}td�} d}!td�}"td�}#td�}$td�}%td�}&td�}'td�}(td�})td�}*d}+td�},td�}-td�}.td�}/td�}0td�}1td�}2t�
|d�jtd �d!�}3t�
|d�jtd �d!�}4tt�tj�|3kt�tj�|4k�}5tt�tj�|3kt�tj�|4k�}6tt�tj�|3kt�tj�|4k�}7tt�tj�|3kt�tj�|4k�}8tj|k}9|�r�|d"k�r�|d#k�r�|�d$�d%k�r�td&|d'�},ntd(|�},tj�tj��tj��ttj�� d)d*�ttj�� d)d+���!t��"|9��"|,��#d,��$��%�}|d-u�r�ttj&�'|��}0|�rB|d"k�rB|d#k�rBtd.�(|��}-tj)|k}.tj�tj��ttj�� d)���!t��"|9��"|-��#d/��$��%�}|d-u�rBttj&�'|��}1|�r�|d"k�r�|d#k�r�td0�(|��}&td1�(|��}/tj�tj*��ttj*�� d)���!t��"|9��"|/��#d2��$��%�}|d-u�r�ttj&�'|��}2|d"k�r�|�r�|�d'd3�}:ttd4|:d'��}%t+j�"tt+j|kt+j,�-|����#d)��.�}+|+d-u�r�ttd5t	|+d���}*|d6k�s�|d7k�r�ttj/dk�} |d6k�s�|d7k�r�ttj0dk�}|d6k�s�|d7k�r�ttj1dk�}|d6k�s|d7k�r|d6k�s|d7k�r|d6k�s7|d7k�s7|d8k�s#|dk�r9|d8k�s-|dk�r9|d8k�s7|dk�r9d9}!|d"k�rJ|�rJttd:�(|���}'tj2�r_|d"k�r_|�r_ttd;�(|���}(|d"k�r�|�r�|d<k�r�|�d'd3�};tt3td=|;d'�td>���})n
ttd=|d'��})|d6k�s�|d7k�r�ttj4d?k�}"|d6k�s�|d7k�r�ttj4d@k�}#|d6k�s�|d7k�r�ttj4dAk�}$tj&tj5tj6tj7tj8t9j:tj;g}<tj&tj5tj7tj8tj<tjtjtj:tj;tj=tj6tj>g}=tj&g}>tj�"|9��"|5��"|��"|��"| ��"|'��"|(��"|)��"|%��"|0��"|1��"|2��"|"��"|#��"|$�}?|?}@��rK|?j#|<��%�}A�fdBdC�|AD�}BdDdC�|BD�}Ctj�!t9tj:t9j:k��"tj&�'|C��}@|@j#|=�}D|
t?t@|=��v�rk|=|
}E|dEk�rftA|E�}E|D�B|E�}D|D�C|��D|
�}DdFdC�|D�%�D�}Ft|FdG�z'|FD]"}G|GdHd-u�r�tEjFdI}HtG|H�}I|I�H|GdH�|GdH<�q�dJ|GdH<�q�WntI�y�}Jz
t|J�WYd-}J~Jnd-}J~Jwwt|FdG�t}Kd-}L|KjJ�r�|KjJj�r�|KjJjdKk�r�dL}Ln |KjJjdMk�r�dN}Ln|KjJjdOk�r�dP}Ln|KjJjdQk�r�dR}Lnd-}L|FD]I}K|K�dS��rtK|KdS�|KdS<|K�d%��r|Kd%�d$dT�|Kd%<|K�dU��r2|KdU�LdV��dT|L��|KdU<|K�dW��rF|KdW�LdV��dT|L��|KdW<�q�t|FdG�|@j#|>�}M|M�%�D]
}N|�M|Nd��qVt@|�}O|d6k�sr|d7k�sr|!�r�tj�tj��tj��ttj�� d)d*�ttj�� d)d+���"tj|k��"|,��#tjN��"|6��"|*�}P|P��}Q|P�$���}R|P�#tj&��%�D]
}S|�M|Sd��q�nd}Qd}R|d6k�s�|d7k�s�|!�r
tj�"tjtjk��"|.��#tjO��"|7�}T|Td-u�r|T��}U|T�$���}V|T�#tj&��%�D]
}W|�M|Wd��q�n	d}Ud}Vnd}Ud}V|d6k�s|d7k�s|!�r�tj�"tj|k��"|8��"|&��"tjPdk��#tjQ�}X|X��}Y|X�#tj&��%�D]
}Z|�M|Zd��qCtRj�"t3tRjSdXktRjSdYk���"tRjT�'|���#tRjU��$��%�}[g}\|[D]}]|]d-u�r�tV|]d�}^|^|\v�r�|\�M|^��qpt@|\�}_nd}Yd}_g}`|dZk�r�t?|4|3jWd7�D]}]|`�M|3tX|]d[��Ld\���q�nLd]|k�r�d^k�r�nn|3tX|d[�}atYjYtYjZ|3|ad_�D]}b|`�M|b�Ld`���q�n!|d^k�r|3tX|d[�}atYjYtYj[|3|ad_�D]}b|`�M|b�Lda���q�t\|O|O|F|O|Q|R|U|V|Y|_|db�S)czReturn server side data.z
search[value]rmzorder[0][column]z-1z
order[0][dir]�asc�startr�length�c�df�dtz#######�aaz#######--assigned_agent�stf�stp�sts�sis�sas�sais�ps�ms�mks�fs�cs�cbsz++++++++++++++F���rw�UTC)�tzinfo�null�None�-�zwidgets.guid = '�'zphonenumbers.id = r7r3�
friendly_namezleads.contact_idNzphonenumbers.id = {}zmessages.contact_idzform_leads.id = {}zexternal_forms.id = {}zform_leads.contact_idz''zcontacts.agent_assigned = 'zleads.agent_assigned_id = �1r�0Tzcontacts.status = '{}'zcontacts.bdc_status = '{}'�	no_sourcezcontacts.marketing_source = 'zcontacts.marketing_source = ''�api�
adf_import�importcs�g|]B}|j��d|j�����ksB|j�����ksB|j�����ksB|j�����ksB|j�ksB|j�����ksB|j�kr|�qS)r0)r>rrr?�email�
phonenumber_1r@�agent_assigned��.0�x��searchrSrT�
<listcomp>�s 

�z!contacts_data.<locals>.<listcomp>cSsg|]}|j�qSrSrcr�rSrSrTr��srcs&g|]��fdd�tt���D��qS)csi|]}|�|�qSrSrS)r��i��rowrSrT�
<dictcomp>�sz,contacts_data.<locals>.<listcomp>.<dictcomp>)�range�len)r�rSr�rTr��s��z	+++++data�	�CRYPTO_SECRET_KEY�Unknownz
US/Eastern�ESTz
US/Central�CSTzUS/Mountain�MSTz
US/Pacific�PST�r0�z%b %d, %I:%M %p ��
phonefield�phonenumber�)rzz%d/%m� in)�dtstart�untilz%m/%Yz%Y)�recordsFiltered�recordsTotalrI�
totalLeads�
totalPhone�totalUniquePhone�
totalMessages�totalUniqueMessages�totalFormLeads�totalUniqueFormLeads�offset)]rr9�is_viewing_partnership�print�'get_user_viewing_partnership_account_idr�argsro�int�strr}rrrx�replacerrrrr	�
updated_onr�
created_onr
r$�countr:�	outerjoin�widget�inbound�optionsr&r)�joinr;�
with_entities�distinctr<r7�in_�format�
inbound_id�formr#�	full_name�like�first�
form_count�	sms_count�phone_count�is_bdc_userr�external_source_typer>r?r�r�rr@r�rR�credit_scorer=r�r�r�order_byr��limit�app�configr(�decrypt�	ExceptionrVr*�strftimerBr��from_�
contact_id�form_idr%�field_id�lead_id�field_valuer'rzrr�MONTHLY�YEARLYr)c�
phone_list�	lead_list�	form_list�message_list�filtered_contact_list�filtered_phone_list�filtered_message_list�filtered_form_listr9�!partnership_account_group_viewing�order�	directionr�r��	date_from�date_to�assigned_agent�
form_check�phone_check�	sms_check�import_check�	api_check�adf_import_check�phone_source�
sms_source�marketing_source�form_source�call_status�call_bdc_status�date_difference�filter_by_phone_check�filter_by_sms_check�filter_by_form_check�	all_check�filter_by_api_check�filter_by_adf_import_check�filter_by_import_check�filter_by_assigned_agent�filter_by_form�filter_by_call_status�filter_by_call_bdc_status�filter_by_marketing_source�filter_by_assigned_agent_id�assigned_agent_id�filter_by_phone_source�filter_by_sms_source�filter_by_sms_inbound_source�filter_by_form_source�filter_by_phone_complete_source�filter_by_sms_complete_source�filter_by_form_complete_source�converted_dateFrom�converted_dateTo�filter_by_date�lead_filter_by_date�message_filter_by_date�form_filter_by_date�	filter_by�formatted_assigned_agent�formatted_marketing_source�columns_search�columns_window�
columns_total�total�filtered�
total_list�searched_result_list�searched_result_ids�sorted_�
order_predrI�lp_data�encrypt_key�cipher�e�user�value�filtered_total�c�total_leads�phone_query�total_phone�total_unique_phone�phone�messages_query�total_messages�total_unique_messagesrG�
form_query�total_formleadsr��total_unique_formleads_query�total_unique_formleads_listr��formatted_phonenumber�total_unique_formleads�graph_labels�	daysLaterr�rSr�rT�
contacts_data�s�



����
��

�����
	���
	�
((
�������


�

���

�

������
���


�

��
�rUc
Cs6td�tj}tj}g}g}g}d}|rtj}t��}|�r�|�d�}t|�|�d�}|�d�}	|�d�}
|�d�}|�d�}|�d	�}
|�d
�}|�d�}|�d�}|�d
�}|�d�}|�d�}|�d�}|�d�}|�d�}|�d�}|�d�}d}d}|
r�|
dkr�|�d	�nEzt	j
�t	j|k��tt	j
t|
�kt	j
|
k����}Wnty�}zt|d�WYd}~nd}~ww|r�|�d�n
t�|
�s�|�d�|	dkr�|	dkr�|	}	nd}	|
dks�|
dkr�d}
|dkr�|dkr�|}|}|�r|dk�rzt�|d�Wnt�y|�d �Ynw|�s�|�s�|�s�t	�}||_|	|_|
|_||_||_t|
�|_
||_||_||_||_||_||_||_ ||_!||_"||_#||_$||_%d!|_&t'j(�)|�t'j(�*�d"d#l+m,}||�|�r�t-�.||j/t�0�t�0�t1tj/�d$t1|�d%��d$}nt2�3d&�t4||||d'��S)(N�------------Fr>r?r@r�agent_assigned_id�agent_assigned_textr�r��note�address1�address2�city�state�country�zip�birthday�	donotcall�unsubscribedz+1z------zPhonenumber already exists.zPhonenumber is invalid.zSelect status...rmz	no statuszSelect marketing source...z	no sourcezSelect agent...z%m/%d/%Yz7Birthday is invalid, it should be in mm/dd/yyyy format.r�r)�send_agent_push_notificationT)rr�r�r��user_id�
is_enabledr9z+No request parameters received to add lead.��
error_message�missing_message�invalid_messagerF)5r�rr9r�r�rrnrorBr	r:r;rr�r'r�r��phone_regex�matchrrx�
ValueErrorr�r@rr>r?r��agent_id�	address_1�	address_2r\r]r^r_r`�is_do_not_call�is_unsubscriber�r,�session�add�commit�!buyercall.blueprints.mobile.utilsrcrrqr7�nowr��log�errorr)r9�viewing_partnership_accountrhrirgrFrI�request_firstname�request_lastname�request_status�request_marketing_source�request_agent_assigned_id�request_agent_assigned_text�request_phonenumber�
request_email�request_contact_note�request_address_1�request_address_2�request_city�
request_state�request_country�request_zip�request_birthday�request_do_not_call�request_unsubscribedr�rW�phonenumber_existsr@�new_contactrcrSrSrT�contacts_addLs�

















����

�

�	�
�r�cCs�td�tj}tj}g}g}g}d}|rtj}t��}|r�|�d�}|r�|D]�}|�d�}	|�d�}
|�d�}|�d�}|�d�}
|�d	�}|�d
�}|�d�}|�d�}|�d
�}|�d�}|�d�}|�d�}|�d�}|�d�}|�d�}|�d�}|�d�}d}d}|s�|s�|s�t�}||_	||_
||_|	|_|
|_
t|�|_||_||_||_||_||_||_||_||_||_||_||_||_d|_tj�|�q&tj��d}n|� d�n|� d�t!||||d��S)NrVFrhr>r?r@rrWrXr�r�rYrZr[r\r]r^r_r`rarbr�TzNo contact data provided.zNo data received.rf)"r�rr9r�r�rrnror	r�r@rr>r?r'r�r�rmrnror\r]r^r_r`rprqr�r,rrrsrtrBr)r9ryrhrirgrFrIrU�contact_datarzr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�rWr�rSrSrT�contacts_add_bulk�s�



















�

�r�c#CsRi}i}i}i}i}i}i}tj}tj}|rtj}ttj|ktjtjktj|k�}	tt	j|kt	jtjktj|k�}
tt
j|kt
jtjktj|k�}ttj|ktjdk�}tj�
td���|���}
|
D]}|rw|drw|d}|d}|||<qctj�tj��tj��ttj���
td�td�td���|	���}tj�tj��tj��ttj���
td�td���|	���}|D]&}|r�|dr�|d	r�t|d�}t|d	�}t|d
�}d�||�||<q�|D]}|r�|dr�|d
r�t|d�}t|d
�}|||<q�t	j�t	j��t	j��tt	j���
td�td�td���|
���}|D]*}|�rK|d�rK|d	�rKt|d�}t|d	�}t|d
�}d�||�||<�q"t
j�t
j��t
j��tt
j���
td�td
���|���}|D] }|�r�|d�r�|d
�r�t|d�}t|d
�}|||<�qmt�|�}|D]}|j}|j||<�q�t�|�}|D]}|j}|j||<�q�t �!|�}|D]}|j"}|j||<�q�dd�t#j�t#j|kt#j$�%d���&d�D�}i}t �!|�}|D]}|j"}|j||<�q�i}t�|�}|D]}|j}|j||<�q�t'�(|�\}}|||||||d�} |||||d�}!|!| d�}"t)|"�S)zReturn server side filter data.rmzcontacts.agent_assignedrzphonenumbers.idzphonenumbers.friendly_namezphonenumbers.phonenumberzwidgets.guidzwidgets.namer�rz{} ({})zexternal_forms.idzexternal_forms.display_namecSsg|]}|j|jf�qSrS)r7r�)r��grSrSrTr��sz-contacts_advanced_filters.<locals>.<listcomp>Fr>)�phone_source_data�message_source_data�form_source_data�assigned_agent_data�bdc_status_data�status_data�marketing_data)�
status_choice�agents_list�marketing_result_list�
campaign_list�default_campaign)rJ�filters)*rr9r�r�rrr�r	r7r
r$r�r:r�rr;r�r�rAr�r�r�r&r�r�r�r�r �get_assigned_status_listr@�display_namerr!�get_assigned_source_listrRr#�is_deactivated�is_r�r�"get_assigned_campaign_list_as_dictr)#�phone_source_result�message_source_result�form_source_result�
status_result�bdc_status_result�marketing_result�assigned_agent_resultr9r�filter_by_lead�
filter_by_smsr�filter_by_partnership_account�
agent_datar�r7r3�inbound_data�
outbound_datar��message_data�	form_data�bdc_status_list�item�status_list�marketing_list�agentsr��marketing_id�	status_idr�r��filters_result�leads_result�responserSrSrT�contacts_advanced_filters+s(
�
�
���
��
�	
����
��
��
���




��

�
�
r�c Cs~tj}tj}g}g}g}d}|rtj}ddlm}|j�|j|k��	�}t
��}	|	�r1t�
|�}
|
�r+tj�tj|
jk��	�}|	�d�}|	�d�}
|	�d�}|	�d�}|	�d�}|	�d	�}|	�d
�}|	�d�}|	�d�}|	�d
�}|	�d�}|	�d�}|	�d�}|	�d�}|	�d�}|	�d�}|	�d�}|	�d�}|	�d�}|	�d�}|r�||
_|r�||
_|r�||
_|r�||
_|
r�|
|
_|r�||
_|r�||
_|r�||
_|r�||
_|r�||
_|r�||
_|r�||
_|r�||
_|r�||
_|dur�||
_|dur�||
_ |�rzt!|�|
_"Wnt#�y|�$d�Ynw|�r||
_%|j&dk�r#t'|
|	|�t(j)�*�d}n|�$d�n|�$d�t+||||d��S)NFr���PartnershipAccountr>r?r@rrWrXr�r�rYrZr[r\r]r^r_r`rarb�
campaignId�social_securityzInvalid campaign ID.�
automotiveT�Contact not found.z/No request parameters received to edit contact.rf),rr9r�r��partnership.modelsr�r:r;r7r�rrnr	rgr"r�ror�r@rr>r?r�rmrnror\r]r^r_r`rprqr��campaign_idrlrBr��
business_type�update_contact_vehicler,rrrtr) rjr9ryrhrirgrFr��partnership_accountrI�existing_contact�contact_vehiclerzr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�rSrSrT�
contacts_edit�s��




















�

�r�cCs�td�tj}tj}g}d}ddlm}|j�|j|k��	�}|r$tj
}t�|�}ddl
}zitj�tj|jk��	�}	id|	j�d��d|	j�d��d	|	j�d
|	j�d|	j�d|	j�d
|	j�d|	j�d|	j�d|	j�d|	j�d|	j�d|	j�d|	j�d|	j�d|	j�d|	j�|	j |	j!|	j"|	j#|	j$d��}
|
}	Wnt%y�}z
i}	t|d�WYd}~nd}~ww|�r�id	|j�d|j&�d|j'�d|j(�d|j)�d|j*�d|j+�d |j,�d!|j-�d"|j.�d#|j/�d$|j0�d%|j1�d&|j2�d'|j3�d(|j4�d)|j5�|j6t7|j�|j8|j9d*��}zt:j�;t��t:j|jkt:j|kt:j<d+k��=t>t:j���?�}
Wnt%�y>}zg}
t|�WYd}~nd}~wwz#t@j�t@j|kt@j|jk��AtBddd,d-d���=tCd.���Dd/��?�}Wnt%�y|}z
g}t|d0�WYd}~nd}~wwz�tEj�tEj|ktEj|jk��=tCd1���Dd2��?�}g}|D]�}|jF�r�|jFdd3�d4k�r�tG|jF��Hd4d5��Hd6d5��Hd7d5�}|�Id8�}||_F|�J|��q�|jF�r�|jFdd3�d9k�r�tG|jF��Hd9d5��Hd:d5��Hd7d5�}|�Id8�}||_F|�J|��q�|jF�r%|jFdd3�d;v�r%tG|jF��Id8�}g}|D]}|�J|��q||_F|�J|��q�|�J|��q�Wnt%�yG}z
g}t|d<�WYd}~nd}~wwztKj�tKj|ktKj|jk��=tCd=���Dd/��?�}Wnt%�y|}z
g}t|d>�WYd}~nd}~wwztL�M|j|�}d?d@�|D�}Wnt%�y�}z
g}t|dA�WYd}~nd}~wwdB}n|�JdC�tN|||�r�|nd|�r�|
nd|�r�|nd|�r�|nd|�r�|nd|�r�|nd|�r�|	dD�	�SddD�	�S)ENrVFr�r�rr�z%Y-%m-%d %H:%M:%Sr�r7r��current_vin�current_make�
current_model�current_year�current_mileage�current_condition�
current_value�interest_vin�
interest_make�interest_model�
interest_trim�interest_stock�
interest_year)�interest_price�interest_status�interest_mileage�interest_condition�interest_listing_urlzcontact_vehicle=======r>r?r�r�r@rrWrXrZr[r\r]r^r_r`�do_not_call)rb�
contact_notesr�r��t�	starttime�	call_typezstarttime desc�
�previous_callszmessages.created_on desc�dr�[rm�]r0�,�{�})r�r��previous_messageszform_leads.created_on desc�previous_formscS�g|]}|���qSrS��to_dict�r��reportrSrSrTr���z$contacts_details.<locals>.<listcomp>�credit_reportsTr�)	rgrFrAr�r�r��previous_messages_rawr�r�)Or�rr9r�r�r�r:r;r7r�r�r	rg�jsonr"r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r>r?r�r�r@rrmr�rnror\r]r^r_r`rprq�get_contact_notesr�r�rr�rer�rr<rr�r)rr�r
�	media_urlr�r��splitrBr$r�contact_credit_score_objectr)rjr9ryrgrFr�r�r�r�r��contact_vehicle_datar@r��all_contact_notesr�r�r��msg�bracket_msg_list�bracket_msg_list_split�replace_msg_str�media_str_links�single_link�single_link_list�sr��credit_reports_datar�rSrSrT�contacts_detailsKs��
��������	�
���
����������������	�
���
������
����
�����
��"
"
���
������
�	�rcCs tjj|d���}|r|jSdS)N)r�)rr:r0r�r)r��contact_noterSrSrTr��sr�cCs�d}tj}tj}|r
tj}t��}|�dd�}|�dd�}t|d�t|�dkr4t|d�t	�
||�}nt	�|||�}td|i�S)NFr7rmrzcampaign_id------r�result)
rr9r�r�rrnror�r�r�add_campaign�update_campaignr)rr9rrIr��
campaign_textrSrSrT�
set_campaigns�s 

�rcCsB|��D]\}}|dkrd||<q|r�|r�|�d�}|dkr d}|�d�}|dkr+d}tjdid|j�d|�d��d|�d��d|�d��d|�d	|�d	��d
|�d
��d|�d��d|�d��d
|�d
��d|�d��d|�d|�d��d|�d��d|�d��d|�d��d|�d��d|�d��d|�d���dSdStdid|j�d|�d��d|�d��d|�d��d|�d��d	|�d	��d
|�d
��d|�d��d|�d��d
|�d
��d|�d��d|�d��d|�d��d|�d��d|�d��d|�d��d|�d��d|�d��d|�d���}tj�|�tj��dS)Nrmr�rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rS)	�itemsror"�updater7r,rrrsrt)rArIr��keyrB�edit_current_year�edit_interest_year�new_contact_vehiclerSrSrTr�s��


�
�
��
�
�
�
�
	�

��
�

�
�
�
�
�
���
�
�
�
�
�
�
�
	�

�
�
�

�
�
�
�
�
�
�r�c
Cs�t�|�}tj}zt�|j|�}dd�|D�}d}Wnty5}zg}t|d�d}WYd}~nd}~wwt	||r?|d��Sdd��S)NcSr�rSr�r�rSrSrTr�Vr�z+contacts_credit_details.<locals>.<listcomp>Tr�F)rFr�)
r	rgrr9rr�r7r�r�r)rjr�r9rr�rFr@rSrSrT�contacts_credit_detailsPs$

����r)N)W�loggingrw�flask_login.utilsr�flaskrr��$buyercall.blueprints.user.decoratorsr�buyercall.lib.util_restr�flask_loginrrr�$buyercall.blueprints.contacts.modelsr	r
rrr
r�)buyercall.blueprints.contacts.serializersrrrrr�dateutilr�
sqlalchemyrrrrrr�pytzr�modelsrrrr r!r"�"buyercall.blueprints.agents.modelsr#�&buyercall.blueprints.form_leads.modelsr$r%�sqlalchemy.ormr&�buyercall.blueprints.filtersr'�buyercall.lib.util_cryptor(�rer)r*�buyercall.lib.util_datetimer+�compile�email_regexrj�buyercall.extensionsr,�__name__�contact_api�	getLogger�loggerrUrbrkrvr}r�rUr�r�r�r�rr�rr�rrSrSrSrT�<module>s�  0



!





F

U
,
s
'

@