Ë
    †=Kj9  ã                   ób   — d dl Z d dlmZ d dlmZ d dlmZ ed   Zd„ Z e«         G d„ d«      Zy)	é    N)Údatetime)Ú	ASCENDING)ÚdbÚemail_recordsc                  óÜ   — 	 t         j                  dt        fgddd¬«       t         j                  dt        fgd¬«       t         j                  dt        fgd	¬«       y # t        $ r Y y w xY w)
NÚemailNormalizedTÚuniq_email_normalized)ÚuniqueÚsparseÚnameÚlastOrderAtÚidx_last_order_at)r   ÚhasOrderÚidx_has_order)Úemail_records_collectionÚcreate_indexr   Ú	Exception© ó    ú9/var/www/pod-logistic/pod-api/model/email_record_model.pyÚ_ensure_indexesr      sˆ   € ðÜ ×-Ñ-Ø¤Ð+Ð,ØØØ(ð	 	.ô 	
ô 	!×-Ñ-ØœYÐ'Ð(Ø$ð 	.ô 	
ô 	!×-Ñ-Øœ)Ð$Ð%Ø ð 	.õ 	
øô ò áðús   ‚AA Á	A+Á*A+c            
       óÎ   — e Zd Zededefd„«       Zededefd„«       Zededefd„«       Z	ededefd„«       Z
ed	„ «       Zedded
ededefd„«       Zedefd„«       Zed„ «       Zy)ÚEmailRecordModelÚemailÚreturnc                 óX   — t        | xs d«      j                  «       j                  «       S )NÚ )ÚstrÚstripÚlower)r   s    r   Únormalize_emailz EmailRecordModel.normalize_email%   s#   € ä�5’;˜BÓ×%Ñ%Ó'×-Ñ-Ó/Ð/r   c                 ój   — t         j                  | «      }t        t        j                  d|«      «      S )Nz^[^@\s]+@[^@\s]+\.[^@\s]+$)r   r!   ÚboolÚreÚmatch)r   Ú
normalizeds     r   Úis_valid_emailzEmailRecordModel.is_valid_email)   s)   € ä%×5Ñ5°eÓ<ˆ
Ü”B—H‘HÐ:¸JÓGÓHÐHr   Ú	order_docc                 ó\   — | xs i j                  d«      xs i }t        |t        «      r|S i S )NÚcustomer©ÚgetÚ
isinstanceÚdict)r(   r*   s     r   Ú_get_customerzEmailRecordModel._get_customer.   s/   € à’O ×(Ñ(¨Ó4Ò:¸ˆÜ% h´Ô5ˆxÐ=¸2Ð=r   r*   c                 ó\   — | xs i j                  d«      xs i }t        |t        «      r|S i S )NÚaddressr+   )r*   r1   s     r   Ú_get_customer_addressz&EmailRecordModel._get_customer_address3   s/   € à’>˜r×&Ñ& yÓ1Ò7°RˆÜ$ W¬dÔ3ˆwÐ;¸Ð;r   c                 ó¨   — t        | t        «      r| S | sy 	 t        j                  t        | «      j	                  dd«      «      S # t
        $ r Y y w xY w)NÚZz+00:00)r-   r   Úfromisoformatr   Úreplacer   )Úvalues    r   Ú_parse_datetimez EmailRecordModel._parse_datetime8   sP   € ä�eœXÔ&ØˆLÙØð	Ü×)Ñ)¬#¨e«*×*<Ñ*<¸SÀ(Ó*KÓLÐLøÜò 	Ùð	ús   —-A Á	AÁAÚsourceÚcustomer_nameÚphonec                 ó®  — t         j                  | «      }t         j                  |«      syt        j                  «       }t
        j                  d|i||ddg g dœt        | xs d«      j                  «       |t        |xs d«      j                  «       t        |xs d«      j                  «       t        |xs d«      j                  «       dœdœd¬	«       y)
NFr   r   )r   Ú	createdAtr   Ú
orderCountÚorderIdsÚrecentOrdersr   )r   Ú	updatedAtr9   ÚcustomerNamer;   )ú$setOnInsertú$setT©Úupsert)	r   r!   r'   r   Úutcnowr   Ú
update_oner   r   )r   r9   r:   r;   Úemail_normalizedÚnows         r   Úupsert_emailzEmailRecordModel.upsert_emailC   sÔ   € ä+×;Ñ;¸EÓBÐÜ×.Ñ.Ð/?Ô@Øä�o‰oÓˆÜ ×+Ñ+ØÐ 0Ð1ð (8Ø!$Ø %Ø"#Ø "Ø$&ñ!ô ! ¢¨"Ó-×3Ñ3Ó5Ø!$Ü! &¢,¨BÓ/×5Ñ5Ó7Ü$'¨Ò(;¸Ó$<×$BÑ$BÓ$DÜ  ¢¨"Ó-×3Ñ3Ó5ññð" ð' 	,ô 	
ð* r   c                 ó  — t         j                  | «      }|j                  d«      xs | xs i j                  d«      xs d}t         j                  |«      }t         j	                  |«      syt        j                  «       }t         j                  | xs i j                  d«      «      xs |}t        | xs i j                  d«      xs | xs i j                  d«      xs d«      j                  «       }t         j                  |«      }||t        | xs i j                  d«      xs d«      t        | xs i j                  d«      xs d	«      t        | xs i j                  d
«      xs d«      dœ}|||dœt        |xs d«      j                  «       |d||t        |j                  d«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       dœt        | xs i j                  d«      xs d«      j                  «       t        | xs i j                  d«      xs d«      j                  «       t        | xs i j                  d«      xs d«      j                  «       dœddidœ}	|rd|i|	d<   d|gd	d d!œi|	d"<   t        j                  d#|i|	d¬$«       y)%Nr   r   Fr=   ÚorderIdÚidÚstatusÚtotalr   ÚimportSource)rM   r=   rO   rP   r9   )r   r=   ÚfirstOrderAtTr   r;   ÚstreetÚcityÚstateÚcountryÚzipCode)rS   rT   rU   rV   rW   Úid_khach_hangÚuploadedByEmailÚuploadedByName)r   rA   r   r   ÚlastOrderIdrB   r;   r1   rX   rY   rZ   r>   é   )rC   rD   z$incr?   z	$addToSetr@   é   )z$eachz	$positionz$slicez$pushr   rE   )r   r/   r,   r!   r'   r   rG   r8   r   r   r2   Úfloatr   rH   )
r(   r*   Ú	raw_emailrI   rJ   Ú
created_atÚorder_idr1   Ú	order_refÚupdates
             r   Úupsert_from_orderz"EmailRecordModel.upsert_from_ordera   s4  € ä#×1Ñ1°)Ó<ˆØ—L‘L Ó)ÒQ¨iªo¸2×-BÑ-BÀ7Ó-KÒQÈrˆ	Ü+×;Ñ;¸IÓFÐÜ×.Ñ.Ð/?Ô@Øä�o‰oÓˆÜ%×5Ñ5°y²ÀB×6KÑ6KÈKÓ6XÓYÒ`Ð]`ˆ
Ü˜	š R×,Ñ,¨YÓ7Ò\¸IºOÈ×;PÑ;PÐQUÓ;VÒ\ÐZ\Ó]×cÑcÓeˆÜ"×8Ñ8¸ÓBˆð  Ø#Ü˜9š?¨×/Ñ/°Ó9Ò?¸RÓ@Ü˜IšO¨×0Ñ0°Ó9Ò>¸QÓ?Ü˜9š?¨×/Ñ/°Ó?ÒEÀ2ÓFñ
ˆ	ð $4Ø Ø *ñô ˜Yš_¨"Ó-×3Ñ3Ó5Ø Ø Ø)Ø'Ü # H§L¡L°Ó$8Ò$>¸BÓ ?× EÑ EÓ GÜ˜XŸ\™\¨'Ó2Ò8°bÓ9×?Ñ?ÓAä! '§+¡+¨hÓ"7Ò"=¸2Ó>×DÑDÓFÜ §¡¨FÓ 3Ò 9°rÓ:×@Ñ@ÓBÜ  §¡¨WÓ!5Ò!;¸Ó<×BÑBÓDÜ" 7§;¡;¨yÓ#9Ò#?¸RÓ@×FÑFÓHÜ" 7§;¡;¨yÓ#9Ò#?¸RÓ@×FÑFÓHñô "% i¢o°2×%:Ñ%:¸?Ó%KÒ%QÈrÓ!R×!XÑ!XÓ!ZÜ#&¨	ª°R×'<Ñ'<Ð=NÓ'OÒ'UÐSUÓ#V×#\Ñ#\Ó#^Ü"% y¢°B×&;Ñ&;Ð<LÓ&MÒ&SÐQSÓ"T×"ZÑ"ZÓ"\ñ#ð& " 1Ð%ñ3
ˆñ8 Ø#-¨xÐ"8ˆF�;ÑàØ'˜[Ø!"Ø ñ!ðˆF�7‰Oô 	!×+Ñ+ØÐ 0Ð1ØØð 	,ô 	
ð
 r   c                 ó–   — t         j                  i «       d}| j                  i «      D ]  }t        j	                  |«      sŒ|dz  }Œ |S )Nr   r\   )r   Údelete_manyÚfindr   rd   )Úorders_collectionÚcountr(   s      r   Úrebuild_from_ordersz$EmailRecordModel.rebuild_from_orders£   sM   € ä ×,Ñ,¨RÔ0ØˆØ*×/Ñ/°Ó3ò 	ˆIÜ×1Ñ1°)Õ<Ø˜‘
‘ð	ð ˆr   N)r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r!   r#   r'   r.   r/   r2   r8   rK   rd   rj   r   r   r   r   r   $   s  „ Øð0˜sð 0 sò 0ó ð0ð ðI˜cð I dò Ió ðIð ð> ð >¨$ò >ó ð>ð ð<¨ð <°ò <ó ð<ð ñó ðð ñ˜Cð ¨ð À#ð ÐSVò ó ðð: ð? Tò ?ó ð?ðB ñó ñr   r   )	r$   r   Úpymongor   ÚMongoDBConnectionr   r   r   r   r   r   r   ú<module>rq      s7   ðÛ 	Ý å å  ð ˜oÑ.Ð òñ* Ô ÷Fò Fr   