o
    Ó:j
(  ã                   @   s`  d dl Z d dlmZ d dlmZ dZdZdZddd	d
œZg d
¢Z	g d¢Z
			d;dedededeeef dB dedB deeef dB fdd„Z			d;dedededeeef dB dedB ddfdd„Z			d;dededededeeef dB dedB deeef dB fdd„ZdedB deeef defdd„Zd<dededB deeef fd d!„Zdeeef defd"d#„Zd$ededB fd%d&„Zd'ededB fd(d)„Zdedefd*d+„Zdedefd,d-„Zd.edededB deeef fd/d0„Zd.ed1eeef dededB ddf
d2d3„Zd$edeeef fd4d5„Zd$edefd6d7„Zdeeef d8edefd9d:„ZdS )=é    N)ÚAny)ÚCustomerStateServicezâComo equipo de MacroBase, agradecemos sinceramente la oportunidad de apoyarte. Para nosotros es muy importante mejorar continuamente nuestro servicio. Podrias responder 3 preguntas breves acerca de tu experiencia en este chat?zVGracias por comunicarte con MacroBase. Fue un gusto atenderte; quedamos a tus ordenes.zÔComo equipo de MacroBase, agradecemos sinceramente tu participacion en la encuesta. Valoramos mucho tus comentarios, ya que son de gran importancia para nuestro proceso de mejora continua. Fue un gusto atenderte.z.La respuesta del agente en el chat fue rapida?z;El agente fue amable y profesional durante la conversacion?zAComo calificarias la resolucion de tu conversacion con el agente?)ÚrapidezÚ
amabilidadÚ
resolucion)õ   â­�u   â­�â­�u	   â­�â­�â­�u   â­�â­�â­�â­�u   â­�â­�â­�â­�â­�ÚsqliteÚ
store_pathÚconversation_idÚbackendÚmysql_configÚcustomer_keyÚreturnc           
      C   s–   |sd S t || |d�}| t|ƒ¡}t| d¡ƒ}| d¡r d S |r<| t|ƒ¡}t| d¡ƒ}	|	 d¡r<|	 d¡s<d S dtdddgt› d	�d
ddœS )N©r   Úsqlite_pathr   ÚdataÚclosure_survey_sentÚsurvey_completeÚquick_repliesúSelecciona una opcionÚSiÚNoz

Responde Si o No.TÚstart©ÚtypeÚtextÚ	help_textÚbuttonsÚfallback_textÚsurveyÚsurvey_action)r   ÚloadÚ_survey_keyÚ_ensure_dataÚgetÚ_survey_customer_keyÚSURVEY_TEXT)
r	   r
   r   r   r   ÚserviceÚstater   Úcustomer_stateÚcustomer_data© r+   úL/var/www/html/macrobase-freshchat-api/app/services/closure_survey_service.pyÚ build_closure_survey_start_reply    s(   
ùr-   c              	   C   s\   |sd S t || |d�}| t|ƒ¡}t| d¡ƒ}| dd d i ||dœ¡ t||||ƒ d S )Nr   r   T)r   Úclosure_survey_answerÚsurvey_stepÚratingsÚsurvey_conversation_idÚsurvey_customer_key)r   r!   r"   r#   r$   ÚupdateÚ_save_survey_data)r	   r
   r   r   r   r'   r(   r   r+   r+   r,   Úmark_closure_survey_startedA   s   úÿ
r5   Úmessage_textc                    sÆ  |sd S t || |d�}t|||ƒ}| d¡sd S | d¡rd S ||d< |r)||d< t|ƒ}| d¡ss|dv rLd|d< d	|d< t||||ƒ d
td	ddœS |dv rgd|d< td |d< t||||ƒ ttd ƒS dddddgdd	ddœS | d¡}	|	tvr~d S t|ƒ}
|
d u rŒt|	dd�S | 	di ¡‰ t
ˆ tƒs�i ‰ ˆ |d< |
ˆ |	< t|	ƒ}|r¶||d< t||||ƒ t|ƒS d |d< d	|d< tt‡ fdd„tD ƒƒttƒ dƒ|d< t||||ƒ d
td	d |d d!œS )"Nr   r   r   Úlatest_conversation_idr2   r.   >   ÚnÚnor9   Tr   Údeclined)r   r   r   r    >   ÚsÚyÚsiÚyesr=   r   r/   r   z?Para confirmar, deseas responder la encuesta breve de servicio?r   r   r   zPor favor responde Si o No.Úconfirmr   z<Selecciona una calificacion del 1 al 5 usando las estrellas.)Úintror0   c                 3   s   � | ]	}t ˆ | ƒV  qd S ©N)Úint)Ú.0Ústep©r0   r+   r,   Ú	<genexpr>¨   s   € z4build_closure_survey_answer_reply.<locals>.<genexpr>é   ÚpromedioÚ	completed)r   r   r   r    rH   )r   Ú_load_survey_datar$   Ú
_normalizer4   ÚSURVEY_NO_TEXTÚSURVEY_STEPSÚ_rating_payloadÚ_parse_ratingÚ
setdefaultÚ
isinstanceÚdictÚ
_next_stepÚroundÚsumÚlenÚSURVEY_FINAL_TEXT)r	   r
   r6   r   r   r   r'   r   Ú
normalizedÚcurrent_stepÚratingÚ	next_stepr+   rE   r,   Ú!build_closure_survey_answer_reply[   s€   


üù

þ
(ûr\   Ú
event_typeÚpayloadc                 C   s0   t | pdƒ}|dv rt|ƒsd|v rdS t|ƒS )NÚ >   Úconversation_updateÚonconversationupdateÚconversation_resolvedÚconversation_resolutionÚ
resolutionT)rK   Ú_payload_has_resolved_status)r]   r^   Únormalized_eventr+   r+   r,   Úis_resolution_event´   s
   rg   rD   r@   c              	   C   s:   t |  }|r|› d|› �n|}d|dt|› d�dd| dœS )Nz

ÚdropdownzCalifica de 1 a 5uT   

Responde con un numero del 1 al 5 o envia estrellas, por ejemplo: â­�â­�â­�â­�â­�.TrZ   )r   r   r   r   r   r   r    r/   )ÚSURVEY_QUESTIONSÚSTAR_RATINGS)rD   r@   Úquestionr   r+   r+   r,   rN   Á   s   õrN   c                 C   sš   |   d¡t| dƒt| dƒt| dƒt| dƒg}|D ]}tt|pdƒƒdkr' dS qt| d	ƒ}t|tƒr;td
d„ |D ƒƒS t|tƒrKtdd„ | ¡ D ƒƒS dS )NÚstatuszdata.statuszconversation.statuszdata.conversation.statusz data.resolve.conversation.statusr_   ÚresolvedTzchanges.model_changes.statusc                 s   ó    � | ]}t t|ƒƒd kV  qdS ©rm   N©rK   Ústr©rC   Úvaluer+   r+   r,   rF   á   ó   € z/_payload_has_resolved_status.<locals>.<genexpr>c                 s   rn   ro   rp   rr   r+   r+   r,   rF   ã   rt   F)	r$   Ú	_get_pathrK   rq   rQ   ÚlistÚanyrR   Úvalues)r^   Ú
candidatesrs   Ústatus_changer+   r+   r,   re   Ó   s    ûÿ


re   rs   c                 C   sn   t | ƒ}|dv rt|ƒS | pd dd¡ dd¡}|r5t|ƒ ddh¡r5dt|ƒ  kr2dkr5t|ƒS  d S d S )	N>   Ú1Ú2Ú3Ú4Ú5r_   ú u   ï¸�r   u   â˜…é   é   )rK   rB   ÚreplaceÚsetÚissubsetrV   )rs   rX   Úcompactr+   r+   r,   rO   è   s   ,ÿrO   rY   c                 C   s*   t  | ¡}|d }|tt ƒkrd S t | S )Nr�   )rM   ÚindexrV   )rY   r‡   Ú
next_indexr+   r+   r,   rS   ô   s
   
rS   c                 C   ó
   d| › �S )Nzclosure_survey:r+   )r
   r+   r+   r,   r"   ü   ó   
r"   c                 C   r‰   )Nzclosure_survey_customer:r+   )r   r+   r+   r,   r%      rŠ   r%   r'   c                 C   sT   t |  t|ƒ¡ d¡ƒ}| d¡r|S |r(t |  t|ƒ¡ d¡ƒ}| d¡r(|S i S )Nr   r   )r#   r!   r"   r$   r%   )r'   r
   r   r   r+   r+   r,   rJ     s   

rJ   r   c                 C   sj   |   t|ƒd d |¡ t| d¡pdƒ ¡ }|r%||kr%|   t|ƒd d |¡ |r3|   t|ƒd d |¡ d S d S )Nr1   r_   )Úsaver"   rq   r$   Ústripr%   )r'   r   r
   r   Úoriginal_conversation_idr+   r+   r,   r4     s   ÿr4   c                 C   s   t | tƒr| S i S rA   )rQ   rR   )rs   r+   r+   r,   r#   !  s   r#   c                 C   s:   t  d| pd¡}d dd„ |D ƒ¡}d | ¡  ¡  ¡ ¡S )NÚNFKDr_   c                 s   s   � | ]
}t  |¡s|V  qd S rA   )ÚunicodedataÚ	combining)rC   Úcharr+   r+   r,   rF   '  s   € z_normalize.<locals>.<genexpr>r€   )r�   Ú	normalizeÚjoinÚlowerrŒ   Úsplit)rs   rX   r+   r+   r,   rK   %  s   rK   Úpathc                 C   s2   | }|  d¡D ]}t|tƒs d S | |¡}q|S )NÚ.)r•   rQ   rR   r$   )r^   r–   ÚcurrentÚkeyr+   r+   r,   ru   +  s   
ru   )r   NNrA   )r�   Útypingr   Ú#app.services.customer_state_servicer   r&   rL   rW   ri   rM   rj   rq   rR   r-   r5   r\   Úboolrg   rN   re   rB   rO   rS   r"   r%   rJ   r4   r#   rK   ru   r+   r+   r+   r,   Ú<module>   s¾    ÿÿÿýûÿþýüû
ú$ûÿþýüû
úúÿþýüûú
ù"Y$ÿþý

üÿ
þýü
û"