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/widgets/__pycache__/views.cpython-310.pyc
o

�we�?�@sddlmZddlmZddlmZddlmZddlZddl	Z	ddl
Z
ddlZddl
mZddlZddlZddlmZmZddlmZddlmZmZmZmZmZmZmZmZm Z m!Z!dd	l"m#Z$dd
l%m&Z&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-dd
l.m/Z/ddl0m1Z1m2Z2m3Z3ddl4m5Z5ddl6m7Z7ddl8m9Z9ddl:m;Z;ddl<m=Z=ddl>m?Z?m@Z@ddlAmBZBmCZCedeDdd�ZEdZFeEjGdddgd�e3jHe'e5dd d!�d"d#�����ZIeE�Gd$�e'e5dd d!�d%d&����ZJeE�Gd'�e'e/e5d�d(d)�����ZKeE�Gd*�e'e/e5dd d!�d+d,�����ZLeEjGd-dgd�e'e5d�d.d/����ZMeEjGd0dgd�e'e/e5dd d!�d1d2�����ZNeEjGd3dgd�d4d5��ZOeE�Gd6�e'e/e5d�d7d8�����ZPeEjGd9dgd�e'e5d�d:d;����ZQeEjGd<dgd�e'e5d�d=d>����ZReE�Gd?�e'd@dA���ZSdS)B�)�closing)�StringIO)�date)�urlopenN)�
DataTables�ColumnDT)�	safe_join)
�	Blueprint�current_app�redirect�request�render_template�flash�jsonify�
make_response�url_for�	send_file)�gettext)�current_user�login_required)�and_�func)�	load_only�Load)�subscription_required)�webpack�db�csrf)�
role_required)�_try_renderer_template)�send_ses_email)�Lead)�Phone�)�Widget�
WidgetFile)�Partnership�PartnershipAccount�widgets�	templates)�template_folderi z/outbound_onboarding�GET�POST)�methods�admin�partner�sysadmincCsBtjdkr
dt_tj��tjrttd�d�t	t
d��Std�S)Nr,Tz�Great, you are ready to get started with the Outbound Routing Wizard feature. Remember to checkout the support section or FAQ if you have any additional outbound routing questions.�success�widgets.listz"widgets/outbound_onboarding.jinja2)r�methodr�outbound_onboardr�session�commitr�_rrr
�r8r8�D/home/arjun/projects/buyercall/buyercall/blueprints/widgets/views.py�onboarding_outbound1s

��r:z	/outboundc
Cs�tjs	ttd��Stj}tj}|rtj}tj�	t
jt
jt
j
t
jt
jt�t
j��d���t��t
j|k��t
j���}td|d�S)Nzwidgets.onboarding_outbound�
lead_countzwidgets/list.jinja2)r()rr4rr�partnership_account_id�is_viewing_partnership�'get_user_viewing_partnership_account_idrr5�queryr$�id�name�
created_on�
updated_on�enabledr�count�leads�label�	outerjoinr!�filter�group_by�allr
)r<�!partnership_account_group_viewingr(r8r8r9�listEs.����rMz
/outbound/newcCsvtj}tj}tj}|r|rtj}n
|s|rttd��Stj�	tj|k��
�}|s5ttd�d�ttd��St
ddd�S)N�partnership.company_accountsz@You must add an inbound routing before creating an outbound one.�warningzphonenumbers.inbound_list�widgets/edit.jinja2zNew Call Widget)�title)rr<�is_admin_user_with_groupsr=r>rrr"r?rIrErr7r
)r<�is_admin_in_group�viewing_partnership_account�
inbound_countr8r8r9�newes*����rVz/outbound/<int:id>c
Cs�z'tj}tj}|rtj}tj�tj|ktj|k���}t	d|j
t�|j
�d�WStyO}zt�t���ttd�|���ttd��WYd}~Sd}~ww)NrP)rQ�widget_data�&Outbound routing with ID {} not found.r2)rr<r=r>r$r?rIr@�firstr
rA�json�dumps�options�	Exception�log�error�	traceback�
format_excrr7�formatrr)r@r<rL�widget�er8r8r9�edit�s*��
���rez
/outbound/csvc	s�gd�}ttj�ttj�ttj�ttj�ttj�ttj�g}tj	}tj
}tj}|r/|r/tj}n
|s9|r9t
td��Stdd�tj��D��}d|d<tj���t��tt��ddd	d
d���tj��tj	|k�}t|||�}|��}|dD]
��d
dk�d
<qud}	tt���R}
t �!|
�}|�"|�|dD]��fdd�t#����D�}|	d7}	|	|d<|�"|�q�d�$t%�&��'d��}
t(|
�)��}d|j*d<d�$|
�|j*d<|Wd�S1s�wYdS)zM
    Retrieves all outbound routings for the current user in CSV format.
    )�No�Namez
Lead Countz
Created Onz
Updated On�EnabledrNcssD�|]}|ttj�|��dkrtj�|�ntj�|�dfVqdS)r#rN)�lenr�args�getlist��.0�keyr8r8r9�	<genexpr>�s����
�zoutbound_csv.<locals>.<genexpr>�0�startr@rArBrCrD�data�5�Truercsg|]}�|�qSr8r8rl��rowr8r9�
<listcomp>�sz outbound_csv.<locals>.<listcomp>r#z$Buyercall Outbound Routings - {}.csvz%Y-%m-%dztext/csvzContent-Typezattachment; filename="{}"zContent-DispositionN)+rr$r@rAr;rBrCrDrr<rRr=r>rr�dictrrj�keysrr5r?�select_fromr\rrrJrIr�
output_resultrr�csv�writer�writerow�sortedrbr�today�strftimer�getvalue�headers)�header�columnsr<rSrTrjr?�	row_table�results�row_no�outr}�csv_row�filename�respr8rur9�outbound_csv�sh�	�����

�

�$�r�z/outbound/imagec
Cs<dd�}tjd}t�|j���d}|stdd�S||�s%td|d�S|jr2|jtkr2tdd�St	j
}t	j}|r=t	j}t
t���}t�tjd	|�}|�|�t�|�tkr]tdd�Sd
dlm}|j�|j|k���}|j}	ddlm}
|
|	||||�}t�d
� |��t!|||d�}t"j#�$|�t"j#�%�t&|d�S)NcSs|dvS)N)z.jpgz.gifz.pngr8)�file_extr8r8r9�allowed_file�sz"upload_image.<locals>.allowed_file�filer#zError uploading file.i�zFile extension not allowed: zFile too large.�
UPLOAD_FOLDERr)r')�upload_widget_imagezThe mms url is {})�guidr<�url)r�)'r�files�path�splitextr��lowerr�content_length�
MAX_FILE_SIZErr<r=r>�str�uuid�uuid4�join�app�config�save�getsize�'buyercall.blueprints.partnership.modelsr'r?rIr@rYrA�tasksr�r^�inforbr%rr5�addr6r)
r�r�r�r<rLr��	file_pathr'r/�partner_namer��	image_url�widget_imager8r8r9�upload_image�s8






r�z/outbound/image/<guid>cCs�tj�tdd���tj|k���}|jdurt|j�St	t
jd|�}|durVd}t|d��}|�
d�}|dkr;d}n|d	krAd
}Wd�n1sKwYt||d�St�d�|��S)
Nr�r�r�z
image/jpeg�rb�u‰PNGz	image/png�GIF8z	image/gif)�mimetypez9There seems to be no widget image file for guid: {} on S3)r%r?r\rrIr�rYr�rrr�r��open�readrr^r�rb)r��widget_image_urlr�r��f�bytesr8r8r9�	get_images(��


��r�z'/outbound/install-instructions/<int:id>c

Cs<d\}}}zVtj}tj}tj}|r|rtj}n|s"|r"ttd��WStj�	t
tj|ktj|k����}t
dt�d�|jd�}|j�dd�rLt
d|jd	�}|j�d
d�rZt
d|jd	�}Wn(ty�}zt�t���ttd�|���ttd
��WYd}~Sd}~ww|jdus�|jdur�d}	n|j}	t
d|||||	d�S)N)�NNrNz$widgets/install_script_widget.jinja2�call_widget_external.js��
script_src�widget_guid�
typeButtonFz$widgets/install_script_button.jinja2)r��typeLinkz"widgets/install_script_link.jinja2rXr2r�z,No email has been generated for this widget.z#widgets/install_instructions.jinja2)r@�script�
button_script�link_script�email)rr<rRr=r>rrr$r?rIrr@�oner
r�
asset_url_forr�r\�getr]r^r_r`rarr7rbr�)
r@r�r�r�r<rSrTrcrd�widgetemailr8r8r9�install_instructions.s^
���������r�z-/outbound/install-instructions/<int:id>/emailc	sFtj}tj}tj}|r|rtj}n
|s|rttd��Stj�	t
tj|ktj|k�����t
j�	t
j�jk���}tj�	tj|jk���}�fdd�dD�}�jdsU|d=�jds]|d=|j|d	<|j|d
<tj�dd�}tj�d
�|��|r�tdddi|��}t|g|jd|d�ttd�d�nttd�d�ttd|d��S)NrNcs*i|]}|td�|�t�d��jd��qS)zwidgets/install_{}.jinja2r�r�)r
rbrr�r�)rm�template�rcr8r9�
<dictcomp>�s���z&email_instructions.<locals>.<dictcomp>)�
script_widget�
script_button�script_linkr�r�r�r��partner_logo�companyr�r�zSending email to <{}>�!widgets/mail/install_instructions�ext�htmlz Call Widget Install Instructions)�
recipients�p_id�subjectr�zEmail successfully sent.r1z Please provide an email address.�danger�.install_instructions�r@)r�)rr<rRr=r>rrr$r?rIrr@r�r'rYr&�partnership_idr\�logorAr�formr�r��loggerr�rbrr rr7)	r@r<rSrT�partner_accountr/�ctxr��widget_email_templater8r�r9�email_instructionsisF��
�



�r�z./outbound/install-instructions/<int:id>/verifyc
Cstjd}tj}tj}|rtj}tj�t	tj
|ktj|k����}z7t|dd�}t
�|��dd�}|�d�dkr@td|d�n|�|j�dkrPtd	|d
�ntd|d�Wn!tyy}zt�t���td
�|�d�WYd}~nd}~wwttd|d��S)Nr���ascii�ignore�CallWidgetView���z&Could not find the buyecall widget on r�z9A different buyercall widget appears to be configured on rOz1The buyercall widget appears to be configured on r�zSite {} could not be opened.r�r�)rr�rr<r=r>r$r?rIrr@rYr�codecs�decoder��findrr�r]r^rOr`rarbrr)r@�site_urlr<rLrc�site�	site_datardr8r8r9�
verify_widget�sB

��������r�z/widgetscCstd�S)Nzwidgets/demo-omni.jinja2)r
r8r8r8r9�user_source_demo_omni�sr�)T�
contextlibr�ior�datetimer�urllib.requestrrZr�r|�loggingr^�os.pathr�r`r��
datatablesrr�werkzeug.utilsr�flaskr	r
r�rrr
rrrrr�flask_babelrr7�flask_loginrr�
sqlalchemyrr�sqlalchemy.ormrr�'buyercall.blueprints.billing.decoratorsr�buyercall.extensionsrrr�$buyercall.blueprints.user.decoratorsr�buyercall.lib.flask_mailplusr�buyercall.lib.util_ses_emailr �!buyercall.blueprints.leads.modelsr!�(buyercall.blueprints.phonenumbers.modelsr"�modelsr$r%r�r&r'�__name__r(r��route�exemptr:rMrVrer�r�r�r�r�r�r�r8r8r8r9�<module>s�0


E
,
7�3�)