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/form_leads/__pycache__/models.cpython-310.pyc
o

�we)�@sXddlZddlmZmZddlZddlZddlmZddlm	Z	ddl
mZddlm
ZddlmZddlmZmZmZdd	lmZdd
lmZddlmZddlmZGd
d�de	ej�ZGdd�de	ej�ZGdd�dej�ZGdd�de	ej�Z Gdd�dej�Z!Gdd�dej�Z"Gdd�dej�Z#Gdd�de	ej�Z$Gdd�de	ej�Z%dS)�N)�date�datetime)�uuid4)�
ResourceMixin)�db)�
postgresql)�hybrid_property)�select�func�and_)�UUID)�tzware_datetime)�
AwareDateTime)�or_c@s�eZdZdZeje��dd�Zeje��dd�Zejej	dd�Z
e�ej	ejddd��Ze�ej	ejd	d
d��Z
e�ej	ejddd��Zeje�d
�dd�Zedd��Zedd��Zedd��ZdS)�ExternalApiFormLeadPostTie�external_api_form_lead_post_tieF��nullableT��primary_key�external_forms.id�form_id_form_lead_post_tie_fkey��name�
form_leads.id�$form_lead_id_form_lead_post_tie_fkey�!external_api_service_providers.id�+service_provider_id_form_lead_post_tie_fkey�cCsTt�}||_||_||_||_t�tj�|_	t�tj�|_
tj�
|�tj��dS)z4
        Sets a form/external service post.
        N)r�form_id�form_lead_id� external_api_service_provider_id�external_api_lead_idr�now�pytz�utc�
created_on�
updated_onr�session�add�commit)�clsrr r!r"�new_post�r-�H/home/arjun/projects/buyercall/buyercall/blueprints/form_leads/models.py�set_external_api_form_lead_post%sz:ExternalApiFormLeadPostTie.set_external_api_form_lead_postcCs.d}tj�tj|ktj|k���}|rd}|S)z;
        Returns whether or not leads posts exist.
        FT)r�query�filterr r!�first)r+r r!�result�lead_post_existsr-r-r.�existing_posts_for_lead5s
��z2ExternalApiFormLeadPostTie.existing_posts_for_leadcCs�i}ddlm}m}|j�|��|j|k��|j��|j	��
�}|rmtj�tj|ktj
�|���tj
tj��
�}|D]2}	|D]-}
|	j|
j	krk|	j
|vrZg||	j
<||	j
�|
j	�q>|
j	||	j
vrk||	j
�|
j	�q>q:|S)ze
        Returns a dictionary/map of external service provider posts associated to the lead.
        ���0ExternalApiServiceProvidersPartnershipAccountTie�ExternalApiServiceProviders)�partnership.modelsr8r9r0�joinr1�partnership_account_id�active�
with_entities�id�allrrr �in_r!�append)r+r�
form_lead_idsr<r3r8r9�service_providers�posts�post�providerr-r-r.�existing_posts_for_leadsFs>�

���

��	z3ExternalApiFormLeadPostTie.existing_posts_for_leadsN)�__name__�
__module__�__qualname__�
__tablename__r�Column�DateTimer&r'�Integerr?�
ForeignKeyrr r!�Stringr"�classmethodr/r5rHr-r-r-r.rs&��

rc@s�eZdZdZeje��dd�Zeje��dd�Zejej	ej
ddd�ddd�Zejej	ej
d	d
d�dd�Zejde�
�dd
d�Zedd��Zedd��Zedd��ZdS)�ExternalApiFormAutoPostTie�external_api_form_auto_post_tieFrr�form_id_form_auto_post_tie_fkeyrT)r�indexr�+service_provider_id_form_auto_post_tie_fkeyr�is_automatically_sent�0�r�server_defaultcCstj�tj|k���}|S)z�
        Returns a list of existing form/external service provider ties.

        :return: list of form/external api service provider tie objects
        )rSr0r1rr@)r+r�tiesr-r-r.�get_existing_tieszsz,ExternalApiFormAutoPostTie.get_existing_tiescCsjd}ddlm}m}tj�|��|��|j|k��|j	|k��
�}|r3tj�tj|ktj
|jk��
�}|S)z�
        Returns an existing form/external service provider tie.

        :return: a form/external api service provider tie object
        Nr6r7)r:r8r9rr(r0r;r1rr<r2rSrr!r?)r+rr<�service_provider_name�service_provider_tier8r9�service_providerr-r-r.�get_service_provider_send_state�s$�

��z:ExternalApiFormAutoPostTie.get_service_provider_send_statec
Cs�ddlm}m}tj�|��|��|j|k��|j	|k��
�}|rftj�tj|ktj
|jk��
�}|r>||_t�tj�|_n!t�}	||	_|j|	_
||	_t�tj�|	_t�tj�|	_tj�|	�tj��dSdS)z<
        Sets a form/external service provider tie.
        r6r7N)r:r8r9rr(r0r;r1rr<r2rSrr!r?rXrr#r$r%r'r&r)r*)
r+rr<r^�valuer8r9r`r_�new_tier-r-r.�!set_service_provider_access_state�s8�

���z<ExternalApiFormAutoPostTie.set_service_provider_access_stateN)rIrJrKrLrrMrNr&r'rOrPrr!�BooleanrXrRr]rardr-r-r-r.rSks*����


rSc@s�eZdZdZeje�d�dd�Zeje�d�ddd�Ze�e�d��Z	ejej
dd	�Zejej
dd	�Zejej
ddd�Zeje�d
�dd	�Zeje�d�ddd�Zejej
ddd�Zejej
dd	�Zedd
��Zedd��Zedd��Zedd��ZdS)�ExternalFormFieldDefinition�external_form_field_definitions�2Tr�
FrYrZrr�cCs*i}tj����}|D]}|||j<q|S)z�
        Return a dictionary containing all the form field definitions.
        Key - field id
        Value - external form field definition object

        :return: dictionary object
        )rfr0r1r@�field_id)r+r3�form_fields�
form_fieldr-r-r.�api_get_field_definitions�s
	z5ExternalFormFieldDefinition.api_get_field_definitionscCs0tj�tj��tjdk���}dd�|D�}|S)zl
        Return a list of the required fields for a form.

        :return: list of required fields
        TcS�g|]}|j�qSr-�rk��.0�xr-r-r.�
<listcomp>��zGExternalFormFieldDefinition.api_get_required_fields.<locals>.<listcomp>)rr(r0rfrkr1�requiredr@)r+rl�	field_idsr-r-r.�api_get_required_fields�s�z3ExternalFormFieldDefinition.api_get_required_fieldscCs^||krdS|dur-dt|�vr||krdSdSt|��d�}|D]	}||kr*dSq!dSdS)zp
        Return whether or not a field id provided matches a field definition

        :return: boolean
        TN�,F)�str�split)r+rk�definition_field_id�definition_old_field_id�split_old_fields�fieldr-r-r.�check_field_id_match�s�z0ExternalFormFieldDefinition.check_field_id_matchcCsg}|r~|D]w}|rD|jrD|j|krD|�|j�|jrAdt|j�vr;t|j��d�}|D]}||vr7|�|�q,|S|�|j�|S|jr}dt|j�vrit|j��d�}||vrh|�|j�|�|�|Sq|j|kr}|�|j�|�|j�|Sq|S)z�
        Return a list of related fields (there can be several fields for the sa,e type."

        :return: string array
        ry)rkrB�old_field_idrzr{�extend)r+rk�field_definitionsr3rr~�	old_fieldr-r-r.�get_all_related_fieldssB
���
�
�z2ExternalFormFieldDefinition.get_all_related_fieldsN)rIrJrKrLrrMrQrkr��typerO�
min_length�
max_lengthrerv�display_name�category�
show_in_table�positionrRrnrxr�r�r-r-r-r.rf�s(


rfc@sDeZdZdZejddd�Zejddd�Ze�d�Zej	ej
dd�Zej	e�d	�d
dd�Z
ej	e�d	�d
dd
�Zej	ej
e�d�dd�Ze�	ej
ejdddd��Zej	ejd
dd
�Zej	ejd
dd
�Zej	ejd
dd
�Zej	e�d�d
dd
�Zej	ejd
dd
�Zej	ejd
dd
�Zej	ejd
dd
�Zej	e�d�d
dd
�Zej	e�d�d
dd
�Zej	ejd
dd
�Zej	ej
ejddddd�ddd�Zej	e�d�d
dd
�Z ej	e��d
d
d �Z!ej	ejd
dd
�Z"ej	e�#�dd!�Z$ej	e��d
dd
d"�Z%ej	ejd
dd
�Z&e'd#d$��Z(e'd%d&��Z)e'd'd(��Z*e+d)d*��Z,e+d+d,��Z-e+d-d.��Z.d/S)0�ExternalForm�external_forms�FormLead�form��backref�ExternalFormField�WidgetTrrhF�rrVrjrZ�partnership_accounts.id�rVz
widgets.id�CASCADEzSET NULL)�onupdate�ondeleterYz{}z{"emails": ""}�@�1�izphonenumbers.id�auto_sms_message_inbound_fkey�rr�r��rVri�r�defaultr)rr[r�cC�|j�d�S)z4 Return the date/time this form was created
        �%Y-%m-%d %H:%M:%S�r&�strftime��selfr-r-r.�created_datetimew�zExternalForm.created_datetimecCr�)z4 Return the date/time this form was updated
        r��r'r�r�r-r-r.�updated_datetime}r�zExternalForm.updated_datetimecCs$|jdur|jdur|j�d�SdS)z= Return the date/time this phone was deactivated on.
        Nrjr�)�deactivated_onr�r�r-r-r.�deactivated_on_datetime�sz$ExternalForm.deactivated_on_datetimec
Cs�d}d}z�i}i}|dur|�dd�|d<nd|d<|dur'|�dd�|d<nd|d<id|�dd�d|�d	|�d
|�d|�d|�d
|�d|�d|	�d|
�d|�d|�d|
�d|�d|�d|�}tdi|��}tj�|�tj��t��}|dur�g}|D] }||}d}|jdur�|j}|�	t
|j|j|j
|j|d��q~t|�dkr�tj�|�tj��|j}n|j}W||fSW||fSd}t�dt���Y||fS)zy
        Return the id of the new form that was created. If positive, then successful.

        :return: integer
        ���rjN� �emailsr<�	public_idr��
routing_id�is_external_api_auto�email_addresses�adf_email_addresses�
email_subject�partial_data_email�full_submit_email�send_auto_email�send_auto_email_subject�send_auto_email_msg�
send_auto_sms�send_auto_sms_inbound_id�send_auto_sms_msg�auto_prequalify_credit)rr�rkr�r�rzUnable to create form.zError creating form. r-)�replacer�rr(r)r*rfrnr�rBr�r?r�rkr��len�bulk_save_objects�log�error�	traceback�
format_exc)r+r<r��	widget_idr�r�r�r�r�r�r�r�r�r�r�r�r�r3�
error_message�adf_email_dict�
email_dict�form_params�new_formr��fields_to_insert�	field_key�field_valuer-r-r.�
api_create�s�
��������	�
���
�����


�
���zExternalForm.api_createcCs�d}d}z�tj�ttj|ktj|ktjdk����}|dur�i}i}|dur1|�dd�|d<||_	|dur@|�dd�|d<||_
|durG||_|durN||_|durU||_
|dur\||_|	durc|	|_|
durj|
|_|durq||_|durx||_|dur||_|
dur�|
|_|dur�||_|dur�||_|dur�||_tj��d}nd}W||fSW||fSty�d}d}t�d	t�����Y||fSw)
za
        Return whether or not the form was updated successfully.

        :return: bool
        FrjNr�r�TzForm not found.zUnable to update form.zError updating form. ) r�r0r1rr?r<�is_deactivatedr2r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr(r*�	Exceptionr�r�r�r�)r+r<rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r3r�r�r�r�r-r-r.�
api_update�sr
��
�	��zExternalForm.api_updatecCsPd}tj�ttj|ktj|k����}|dur&d|_t�	�|_
tj�
�d}|S)ze
        Return whether or not the form was deactivated successfully.

        :return: bool
        FNT)r�r0r1rr?r<r2r�rr#r�rr(r*)r+r?r<r3r�r-r-r.�api_deactivate2s�

zExternalForm.api_deactivateN)/rIrJrKrLr�relationship�leads�fields�routingrMrOr?rQr�r�rPr<r�rer��pg�JSONr�r�r�r�r�r�r�r�r�r�r��is_conditional_notification�conditional_criteriarNr�r�r��propertyr�r�r�rRr�r�r�r-r-r-r.r�=sb
����



R
Rr�c@s�eZdZdZejeje�d�dd�Zejejdd�Z	eje�
d�dd�Zejej
dd�Zejej
ddd	�Z	ed
d��Zedd
��ZdS)r��external_form_fieldsrTrFrrhrYrZcCs(tj�tj|k���}dd�|D�}|S)zM
        Return a list form fields for a form

        :return: list
        cSror-rprqr-r-r.rtdruz5ExternalFormField.get_form_fields.<locals>.<listcomp>)r�r0r1rr@)r+rr�rwr-r-r.�get_form_fieldsYs�z!ExternalFormField.get_form_fieldscCs,tj�t�tj���tj|k��	�pd}|S)zX
        Return the largest position for a form field

        :return: integer
        r)
rr(r0r
�maxr�r�r1r�scalar)r+rr3r-r-r.�get_form_field_max_positionhs��z-ExternalFormField.get_form_field_max_positionN)rIrJrKrLrrMrOrPrr�rQrkr�rer�rRr�r�r-r-r-r.r�Hs�
r�c@s�eZdZdZejejdd�Zejeje�d�dd�Z	ejeje�d�dd�Z
ejeje�d�dd�Zeje�d�d	d
d�Z
eje�d�d	d
d�Zeje�d	ed�Zedd��Zedd��ZdS)�FormLog�	form_logsTrrr�rr� F�failedrZirjr�c
Cszd}tj�ttj|ktj|k����}|dks|dkrd}nd}|dur;t|j||||d�}	t	j
�|	�t	j
��dSdS)z%
        Create a form log.

        rj�����successr�N)rr �status�descriptionr!)
r�r0r1rr?r<r2r�rrr(r)r*)
r+r<r r�r��provider_idrG�formatted_status�	form_lead�new_form_logr-r-r.�create�s(����zFormLog.createcCs.tj�ttj|ktj|k����}|rdSdS)z[
        Check whether or not the lead was posted to a specified provider before.

        TF)r�r0r1rr r!r2)r+r r!r3r-r-r.�logs_exist_for_lead�s��zFormLog.logs_exist_for_leadN)rIrJrKrLrrMrOr?rPrr r!rQr�r�rr
�	posted_onrRr�r�r-r-r-r.r�vs�
r�c@sPeZdZdZejeje�d�dd�Zeje�	d�dd�Z
e�ej	�Zdd�ZdS)	�
FormLeadField�form_lead_fieldsrTrrhcCs||_||_dS)N)rkr�)r�rkr�r-r-r.�__init__�s
zFormLeadField.__init__N)
rIrJrKrLrrMrOrP�lead_idrQrkr�r�r-r-r-r.r��s�r�c@s.eZdZdZejddd�Zejejdd�Z	eje
dd�dedd�Zejeje�
d	�d
d�Zejeje�
d�dd
�Zeje�d�dd�Zejejd
dd�Zejejej
ddddd�ddd�Zedd��Zedd��Zedd��Zedd��Zejdd��Zedd ��Zed!d"��Zed#d$��Zed(d%d&��Z d'S))r��
form_leadsr��leadr�Tr)�as_uuid)�uniquer�rVrFrr�r�rhrYrZ�contacts.id�form_lead_contact_fkeyr�r�r�cCsLtj�t��ttj�d�tj�d��tj|j	k��
�}|dur$|j}|SdS)Nz%privacypolicyfield%z%privacypolicy%rj)r�r0r;r�r1rrk�liker�r?r2r�)r��
tos_resultr3r-r-r.�tos�s
�
��zFormLead.toscCr�)z1 Return the date/time this lead occurred
        r�r�r�r-r-r.�interaction_time�r�zFormLead.interaction_timecCr�)z4 Return the date/time this lead was updated
        r�r�r�r-r-r.r��r�zFormLead.updated_datetimecCs|jo|jjpdS�Nrj)r�r�r�r-r-r.�sources��zFormLead.sourcecCs&ttjg��tj|jk��d��d�S)N�r�)r	r�r��wherer?r�limit�label)r+r-r-r.rs�
��cCs|jo|jpdSr)r�rr�r-r-r.�	source_ids
��zFormLead.source_idcCsTd}d}ztj�|�tj��d}Wnd}d}t�dt���Y|||fS)za
        Return whether or not the lead was created successfully.

        :return: lead
        FrjTzUnable to create lead.�Error creating lead. )rr(r)r*r�r�r�r�)r+r�r3r�r-r-r.r�s

zFormLead.api_createc
Cspd}d}|D]~}|}||}	|jD]r}
|
j|kr�|	r|	|
_|
jdks'|
jdkr1	t�d�|
j��|
jdkr@	t�d�|
j��|
jdksJ|
jd	krT	t�d
�|
j��|
jdkrc	t�d�|
j��|
jd
kr�ddlm}|j�	|j
|jk���}|
j|_
tj��qqztj��d}W||fSty�}
ztj��d}t�dt�����WYd}
~
||fSd}
~
ww)zi
        Return whether or not the form lead was updated successfully.

        :return: boolean
        Frj�
cumemberfield�ssnfieldz.The updated encoded form lead ssn number is {}�cosignerssnfieldz7The updated encoded form lead cosigner ssn number is {}�
datepicker�dobfieldz/The updated encoded form lead updated dob is {}�cosignerdateofbirthfieldz0The updated encoded form lead cosigner dob is {}�repfieldr6)�ContactTr	N)r�rkr�r��info�format�contacts.modelsrr0r1r?�
contact_idr2�agent_assignedrr(r*r��rollbackr�r�r�)r+rr��posted_form_lead_fieldsr�r3r��posted_fieldrkr�rr�contact�er-r-r.r�+sN





��
�
��zFormLead.api_updatecCs&tj�tj|k�}|r|��S|��S)z�
        Get the form_leads in a particular partnership account of id: `paid`.
        if count_only = True, return the count instead of objects.
        )r�r0r1r<�countr@)r+�paid�
count_onlyr�r-r-r.�get_by_partnership_account[s�z#FormLead.get_by_partnership_accountN)F)!rIrJrKrLrr�r�rMrOr?rr�sidrPrr<rQr"re�
email_sentrr�rrr�rr�
expressionrrRr�r�rr-r-r-r.r��sT����







/r�c@s�eZdZdZejejdd�Zejejejddd�ddd�Z	ejejejd	d
d�ddd�Z
eje�d�dd
�Zejej
dd
�Zejejejddd�ddd�ZdS)�FormLeadReporting�form_leads_reportingTrr� form_lead_reporting_form_id_fkeyrFr�r��,form_lead_reporting_partnership_account_fkeyr�rhrr��#form_lead_reporting_contact_id_fkeyN)rIrJrKrLrrMrOr?rPrr<rQr"rer!rr-r-r-r.r#gs$���
�r#)&�loggingr�rrr�r$�uuidr�buyercall.lib.util_sqlalchemyr�buyercall.extensionsr�sqlalchemy.dialectsrr��sqlalchemy.ext.hybridr�sqlalchemy.sqlr	r
r�sqlalchemy.dialects.postgresqlr�buyercall.lib.util_datetimer
r�
sqlalchemyr�ModelrrSrfr�r�r�r�r�r#r-r-r-r.�<module>s4YXz
.A"