Ë
     ±´j© ã                   ó
  — d dl mZmZmZmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZmZm Z  ed   Z! ejD                  d«      Z#dZ$dZ% G d„ d«      Z&y)é    )ÚdbÚusers_collectionÚtransactions_collectionÚproducts_collectionN)ÚquoteÚurlparseÚparse_qs)ÚdatetimeÚ	timedelta)Úsync_playwrightÚTimeoutError)ÚObjectId)Ú	UserModel)Ú
TopupModel)Úensure_design_localÚis_local_design_value)Úextract_design_file_nameÚindex_design_fileÚdelete_design_fileÚorderszAsia/Ho_Chi_Minhzhttps://www.ups.com/trackiÈ¯  c                   óÎ	  — e Zd Zededefd„«       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Z	ed„ «       Z
ed	„ «       Zed¡dedefd„«       Zedefd„«       Zed„ «       Zed„ «       Zedefd„«       Zed„ «       Zed„ «       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd„«       Zedefd „«       Zed!„ «       Zed¡d"efd#„«       Zed$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¢d.ededed*ed/ed0e"d1e"fd2„«       Z#eded.ed&efd3„«       Z$e	 d£d4ed5ed6ed7efd8„«       Z%ed9e"ded:ed;efd<„«       Z&ed=efd>„«       Z'ed?efd@„«       Z(ed=efdA„«       Z)ed,efdB„«       Z*ed¡dCefdD„«       Z+ed,efdE„«       Z,edF„ «       Z-ed¤dG„«       Z.e	 	 	 	 	 	 d¥dedededHedIed0e"d1e"fdJ„«       Z/ededefdK„«       Z0edededLefdM„«       Z1ededNe2fdO„«       Z3ed£dededPefdQ„«       Z4edR„ «       Z5edSed&efdT„«       Z6edUe"dSedVed&efdW„«       Z7edXedYedSed&efdZ„«       Z8ed[ed\ed]ed^ed&e2f
d_„«       Z9eded`e"daedSedVef
db„«       Z:edcedefdd„«       Z;edeedefdf„«       Z<edeedefdg„«       Z=edh„ «       Z>ediefdj„«       Z?ededNe2fdk„«       Z@e	 	 	 	 	 	 d¢dededHedIed0e"d1e"fdl„«       ZAe	 	 	 	 	 	 d¢dededHedIed0e"d1e"fdm„«       ZBe	 	 	 	 	 	 d¢dnedededHedIed0e"d1e"fdo„«       ZCe	 	 	 	 	 	 d¦dHedIedpe"dqe"dredsefdt„«       ZDe	 	 d¤duedvedwedxefdy„«       ZEe	 	 d¤dzedvedwedxefd{„«       ZFedeefd|„«       ZGe	 	 	 d§dzed}ed~edPefd„«       ZHedzefd€„«       ZIedzefd�„«       ZJedwefd‚„«       ZKed£dwedxefdƒ„«       ZLedxefd„„«       ZMed¤dwedxefd…„«       ZNed£dwedxefd†„«       ZOed‡„ «       ZPed£dwedxefdˆ„«       ZQed‰efdŠ„«       ZRed‹efdŒ„«       ZSed£dwedxefd�„«       ZTedefdŽ„«       ZUe	 	 	 d¨d�e"dued�e"fd‘„«       ZVed©d’„«       ZWedªd“„«       ZXed¤d”„«       ZYededefd•„«       ZZed$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«d.ededed0e"d1e"f
d™„«       Z^eded.ed&efdš„«       Z_e	 	 	 	 	 	 d¢dededHedIed0e"d1e"fd›„«       Z`edzed&efdœ„«       Zaedzed�ed}ed~efdž„«       ZbedededŸefd „«       Zcy
)¬Ú
OrderModelÚorder_idÚid_khach_hangc                 ó   — |d| id| igdœS )NÚorderIdÚid)r   ú$or© )r   r   s     ú8/var/www/pod-logistic/pod-api-clone/model/order_model.pyÚ_order_matchzOrderModel._order_match   s&   € ð +à˜HÐ%Ø�xÐ ðñ
ð 	
ó    c                  ó   — ddddddœS )NÚ ©ÚstreetÚcityÚstateÚcountryÚzipCoder   r   r"   r    Ú_blank_addresszOrderModel._blank_address'   s   € ð ØØØØñ
ð 	
r"   c                 ó*  — t        | t        «      rX| j                  dd«      | j                  dd«      | j                  dd«      | j                  dd«      | j                  dd«      dœS t        | t        «      r| dddddœS t        j                  «       S )Nr&   r$   r'   r(   r)   r*   r%   )Ú
isinstanceÚdictÚgetÚstrr   r+   )Úaddresss    r    Ú_normalize_addresszOrderModel._normalize_address1   s’   € ä�gœtÔ$à!Ÿ+™+ h°Ó3ØŸ™ F¨BÓ/Ø Ÿ™ W¨bÓ1Ø"Ÿ;™; y°"Ó5Ø"Ÿ;™; y°"Ó5ñð ô �gœsÔ#à!ØØØØñð ô ×(Ñ(Ó*Ð*r"   c                 ó  — | j                  d«      }t        |t        «      rŠ|j                  dd«      |j                  d| j                  dd«      «      |j                  d| j                  dd«      «      t        j	                  |j                  d| j                  di «      «      «      dœS |xs | j                  dd«      | j                  dd«      | j                  dd«      t        j	                  | j                  di «      «      dœS )	NÚcustomerÚnamer$   ÚphoneÚemailr1   ©r5   r6   r7   r1   ÚcustomerName)r/   r-   r.   r   r2   )Údocr4   s     r    Ú_normalize_customerzOrderModel._normalize_customerG   sß   € à—7‘7˜:Ó&ˆä�h¤Ô%à Ÿ™ V¨RÓ0Ø!Ÿ™ g¨s¯w©w°wÀÓ/CÓDØ!Ÿ™ g¨s¯w©w°wÀÓ/CÓDÜ%×8Ñ8Ø—L‘L ¨C¯G©G°I¸rÓ,BÓCóñ	ð ð Ò; §¡¨¸Ó ;Ø—W‘W˜W bÓ)Ø—W‘W˜W bÓ)Ü!×4Ñ4°S·W±W¸YÈÓ5KÓLñ	
ð 	
r"   c                 ó„  — t        | t        «      syd}| D ]�  }t        |t        «      sŒt        |j	                  dd«      xs d«      }t        |j	                  dd«      xs d«      }t        |j	                  dd«      xs d«      }t        |j	                  dd«      xs d«      }|||z  |z   |z   z  }ŒŸ t        |d«      S )Nç        Úquantityr   ÚpriceÚshippingÚtaxé   )r-   Úlistr.   Úfloatr/   Úround)ÚitemsÚtotalÚitemr>   r?   r@   rA   s          r    Ú_calculate_totalzOrderModel._calculate_total\   s¿   € ä˜%¤Ô&ØàˆØò 	7ˆDÜ˜d¤DÔ)Øä˜TŸX™X j°!Ó4Ò9¸Ó:ˆHÜ˜$Ÿ(™( 7¨AÓ.Ò3°!Ó4ˆEÜ˜TŸX™X j°!Ó4Ò9¸Ó:ˆHÜ˜Ÿ™ ¨Ó*Ò/¨aÓ0ˆCØ�X Ñ%¨Ñ0°3Ñ6Ñ6‰Eð	7ô �U˜A‹Ðr"   c                 óÄ   — | j                  d«      }	 t        t        |«      d«      S # t        t        f$ r( t
        j                  | j                  dg «      «      cY S w xY w)NrG   rB   rF   )r/   rE   rD   Ú	TypeErrorÚ
ValueErrorr   rI   )r:   rG   s     r    Ú_resolve_order_totalzOrderModel._resolve_order_totaln   sY   € à—‘˜Ó ˆð	EÜœ˜u› qÓ)Ð)øÜœ:Ð&ò 	EÜ×.Ñ.¨s¯w©w°wÀÓ/CÓDÒDð	Eús   “( ¨4AÁAc                 óÌ   — | sdddœS | j                  dd«      › d| j                  dd«      › �j                  «       }|xs | j                  dd«      | j                  dd«      dœS )Nr$   ©ÚuploadedByNameÚuploadedByEmailÚ	firstNameú ÚlastNamer7   )r/   Ústrip)Úuser_docÚ	full_names     r    Ú_build_uploader_info_from_userz)OrderModel._build_uploader_info_from_userv   sv   € áà"$Ø#%ñð ð
  —|‘| K°Ó4Ð5°Q°x·|±|ÀJÐPRÓ7SÐ6TÐU×[Ñ[Ó]ˆ	ð (ÒD¨8¯<©<¸ÀÓ+DØ'Ÿ|™|¨G°RÓ8ñ
ð 	
r"   NÚuser_idÚcachec                 óÆ   — t        | xs d«      j                  «       } | sdddœS |�	| |v r||    S t        j                  | «      }t        j                  |«      }|�||| <   |S )Nr$   rO   )r0   rU   r   Úget_user_by_idr   rX   )rY   rZ   ÚuserÚinfos       r    Ú_get_uploader_infozOrderModel._get_uploader_info…   sy   € ä�g’m Ó$×*Ñ*Ó,ˆÙà"$Ø#%ñð ð
 Ð ¨EÑ!1Ø˜‘>Ð!ä×'Ñ'¨Ó0ˆÜ×8Ñ8¸Ó>ˆàÐØ!ˆE�'‰Nàˆr"   Úkeywordc                 ó°  — | xs dj                  «       }|sg S t        «       }t        j                  |«      ddœ}t	        j
                  dd|id|id|igdœd	d
i«      }|D ]  }|j                  t        |d	   «      «       Œ! |j                  «       }d|v r¶t	        j
                  ddid
d
d
d
dœ«      }|D ]”  }|j                  dd«      › d|j                  dd«      › �j                  «       j                  «       }t        |j                  dd«      «      j                  «       }	||v s||	v sŒx|j                  t        |d	   «      «       Œ– t        |«      S )Nr$   Úi©z$regexz$optionsr]   r7   rR   rT   )Úroler   Ú_idé   rS   rd   )re   rR   rT   r7   )rU   ÚsetÚreÚescaper   ÚfindÚaddr0   Úlowerr/   rC   )
r`   Úcleaned_keywordÚmatched_idsÚregexÚdirect_matchesr]   Úlowered_keywordÚname_matchesrW   r7   s
             r    Ú_find_uploader_ids_by_keywordz(OrderModel._find_uploader_ids_by_keyword™   sq  € à"š= b×/Ñ/Ó1ˆÙØˆIä“eˆäŸ9™9 _Ó5À3ÑGˆÜ)×.Ñ.àà˜eÐ$Ø  %Ð(Ø Ð'ðñð �AˆJó

ˆð #ò 	.ˆDØ�O‰OœC  U¡Ó,Õ-ð	.ð *×/Ñ/Ó1ˆØ�/Ñ!Ü+×0Ñ0Ø˜Ð Ø¨°qÀ1ÑEóˆLð
 %ò 6�Ø#Ÿx™x¨°RÓ8Ð9¸¸4¿8¹8ÀJÐPRÓ;SÐ:TÐU×[Ñ[Ó]×cÑcÓe�	Ü˜DŸH™H W¨bÓ1Ó2×8Ñ8Ó:�à" iÑ/°?ÀeÒ3KØ—O‘O¤C¨¨U©Ó$4Õ5ð6ô �KÓ Ð r"   c                 óŠ  — | j                  d«      }t        |t        «      r]g }t        «       }|D ]H  }t	        |xs d«      j                  «       }|r||v rŒ'|j                  |«       |j                  |«       ŒJ |r|S t	        | j                  d«      xs | j                  d«      xs d«      j                  «       }|r|gS g S )NÚsourceOrderIdsr$   r   r   )r/   r-   rC   rg   r0   rU   rk   Úappend)r:   Úraw_idsÚresultÚseenÚrawÚvalueÚfallback_order_ids          r    Ú_normalize_source_order_idsz&OrderModel._normalize_source_order_idsÁ   s¹   € à—'‘'Ð*Ó+ˆä�gœtÔ$ØˆFÜ“5ˆDàò %�Ü˜CšI 2›×,Ñ,Ó.�Ù ¨¡ØØ—‘˜”Ø—‘˜eÕ$ð%ñ Ø�ä §¡¨	Ó 2Ò I°c·g±g¸d³mÒ IÀrÓJ×PÑPÓRÐÙØ%Ð&Ð&àˆ	r"   c                 ó  — t        | j                  d«      xs d«      j                  «       }t        | j                  d«      xs | j                  d«      xs d«      j                  «       }|dv xr |dk(  xr t        j	                  | «       S )NÚstatusr$   Ú
canceledByÚcancelledBy©ÚCanceledÚ	Cancelledr]   )r0   r/   rU   r   Ú_is_user_processing_cancel)r:   r   Úcanceled_bys      r    Ú_is_hidden_from_adminz OrderModel._is_hidden_from_adminÙ   sƒ   € ä�S—W‘W˜XÓ&Ò,¨"Ó-×3Ñ3Ó5ˆÜ˜#Ÿ'™' ,Ó/ÒO°3·7±7¸=Ó3IÒOÈRÓP×VÑVÓXˆàÐ/Ð/ò ?Ø˜vÑ%ò?ä×9Ñ9¸#Ó>Ð>ð	
r"   r   c                 ó@   — t        | xs d«      j                  «       dv S )Nr$   r‚   ©r0   rU   )r   s    r    Ú_is_canceled_statuszOrderModel._is_canceled_statusã   s    € ä�6’<˜RÓ ×&Ñ&Ó(Ð,EÐEÐEr"   c                 óÜ  — t        | j                  d«      xs | j                  d«      xs d«      j                  «       }|dk7  ryt        | j                  d«      xs | j                  d«      xs d«      j                  «       }|dk(  ry	t        j	                  | j                  d
«      d«      }t        | j                  d«      xs d«      j                  «       }|dkD  xs t        |«      S )Nr€   r�   r$   r]   FÚcanceledFromStatusÚcancelledFromStatusÚ
ProcessingTÚrefundAmountr   Ú
refundTxId)r0   r/   rU   r   Ú_safe_numberÚbool)r:   r†   Úfrom_statusÚrefund_amountÚrefund_tx_ids        r    r…   z%OrderModel._is_user_processing_cancelç   s×   € ä˜#Ÿ'™' ,Ó/ÒO°3·7±7¸=Ó3IÒOÈRÓP×VÑVÓXˆØ˜&Ò ØäØ�G‰GÐ(Ó)ò Ø�w‰wÐ,Ó-òàó
÷ ‰%‹'ð	 	ð
 ˜,Ò&Øä"×/Ñ/°·±¸Ó0GÈÓKˆÜ˜3Ÿ7™7 <Ó0Ò6°BÓ7×=Ñ=Ó?ˆØ˜qÑ Ò6¤D¨Ó$6Ð6r"   c                 ó‚   — t        j                  ddt        | xs d«      «      j                  «       j	                  «       S )Nú\s+rS   r$   )rh   Úsubr0   rU   rl   )r{   s    r    Ú_normalize_variant_textz"OrderModel._normalize_variant_textù   s0   € ä�v‰v�f˜c¤3 u¢{°Ó#3Ó4×:Ñ:Ó<×BÑBÓDÐDr"   Úvariantc                 ó�   — t        | xs i j                  d«      xs | xs i j                  d«      xs d«      j                  «       S )NÚtierÚmaterialr$   ©r0   r/   rU   )rš   s    r    Ú_get_variant_tierzOrderModel._get_variant_tierý   s?   € ä�G’M˜r×&Ñ& vÓ.ÒW°7²=¸b×2EÑ2EÀjÓ2QÒWÐUWÓX×^Ñ^Ó`Ð`r"   Úsourcec                 ó¾   — t        | xs i j                  d«      xs0 | xs i j                  d«      xs | xs i j                  d«      xs d«      j                  «       S )NÚappliedTierrœ   r�   r$   rž   ©r    s    r    Ú_get_item_applied_tierz!OrderModel._get_item_applied_tier  sb   € äØŠ\�r×Ñ˜}Ó-ò Ø’˜"×!Ñ! &Ó)òà’˜"×!Ñ! *Ó-òð ó	
÷
 ‰%‹'ð	r"   c                 ó¾   — t        | xs i j                  d«      xs0 | xs i j                  d«      xs | xs i j                  d«      xs d«      j                  «       S )NÚdesignOriginalÚdesignDriveÚdesignr$   rž   r£   s    r    Ú_get_design_drivezOrderModel._get_design_drive
  sc   € äØŠ\�r×ÑÐ/Ó0ò Ø’˜"×!Ñ! -Ó0òà’˜"×!Ñ! (Ó+òð ó	
÷
 ‰%‹'ð	r"   c                 ó�   — t        | xs i j                  d«      xs | xs i j                  d«      xs d«      j                  «       S )NÚdesignLocalr¨   r$   rž   r£   s    r    Ú_get_design_localzOrderModel._get_design_local  s?   € ä�F’L˜b×%Ñ% mÓ4ÒZ¸ºÀ2×8JÑ8JÈ8Ó8TÒZÐXZÓ[×aÑaÓcÐcr"   Ú	order_docc                 ó†  — g }| xs i j                  dg «      xs g D ]Z  }t        |t        «      sŒdD ]B  }t        |j                  |«      xs d«      j	                  «       }|sŒ2|j                  |«       ŒD Œ\ t        «       }g }|D ]6  }t        |«      }|r||v rŒ|j                  |«       |j                  |«       Œ8 |S )NrF   )r«   Ú
designFileÚ	designUrlr$   )	r/   r-   r.   r0   rU   rv   rg   r   rk   )	r­   ÚvaluesrH   Úkeyrz   ry   rx   r{   Ú	file_names	            r    Ú_extract_order_design_valuesz'OrderModel._extract_order_design_values  sÊ   € àˆà’_ "×)Ñ)¨'°2Ó6Ò<¸"ò 	'ˆDÜ˜d¤DÔ)ØàAò '�Ü˜$Ÿ(™( 3›-Ò-¨2Ó.×4Ñ4Ó6�ÚØ—M‘M #Õ&ñ'ð		'ô ‹uˆØˆØò 	%ˆEÜ0°Ó7ˆIÙ 	¨TÑ 1ØØ�H‰H�YÔØ�M‰M˜)Õ$ð	%ð ˆr"   c                 óR   — t         j                  | «      }|D ]  }t        |«       Œ y ©N)r   r´   r   )r­   Ú
file_namesr³   s      r    Ú_cleanup_order_design_assetsz'OrderModel._cleanup_order_design_assets/  s)   € ä×<Ñ<¸YÓGˆ
à#ò 	*ˆIÜ˜yÕ)ñ	*r"   rH   c                 óf  — t        | t        «      s| S t        | «      }t        j                  | «      }|r||d<   t        j	                  | «      }t        | xs i j                  d«      xs d«      j                  «       }|r)||d<   |j                  d|«       |j                  d|«       |r||d<   |S )Nr¢   r«   r$   r¨   r¦   r§   )	r-   r.   r   r¤   r©   r0   r/   rU   Ú
setdefault)rH   Ú
normalizedÚapplied_tierÚdesign_driveÚdesign_locals        r    Ú_normalize_order_itemz OrderModel._normalize_order_item6  s¯   € ä˜$¤Ô%ØˆKä˜$“Zˆ
ä!×8Ñ8¸Ó>ˆÙØ(4ˆJ�}Ñ%ä!×3Ñ3°DÓ9ˆÜ˜DšJ B×+Ñ+¨MÓ:Ò@¸bÓA×GÑGÓIˆáØ#/ˆJ�xÑ Ø×!Ñ!Ð"2°LÔAØ×!Ñ! -°Ô>áØ(4ˆJ�}Ñ%àÐr"   c                 ó”   — | j                  d«      }t        |t        «      sg S |D �cg c]  }t        |t        «      sŒ|‘Œ c}S c c}w )NÚissueDetails)r/   r-   rC   r.   )r:   rz   rH   s      r    Ú_normalize_issue_detailsz#OrderModel._normalize_issue_detailsN  s<   € à�g‰g�nÓ%ˆÜ˜#œtÔ$ØˆIØ!$Ö?˜¬
°4¼Õ(>’Ò?Ð?ùÒ?s
   ¨A¾AÚerrorsc                 óú   — | xs g D �cg c]  }t        |t        «      sŒ|‘Œ } }t        | «      dkD  }||rdnd|rdnd|rdnd| t        | «      |r$t        j                  «       j                  «       dœS ddœS c c}w )Nr   ÚIMPORT_ERRORr$   Ú	needs_fixu€   Ä�Æ¡n nÃ y Ä‘ang cÃ³ sáº£n pháº©m hoáº·c áº£nh thiáº¿t káº¿ khÃ´ng há»£p lá»‡. Vui lÃ²ng chá»‰nh sá»­a trÆ°á»›c khi thanh toÃ¡n.)ÚpaymentBlockedÚ	issueTypeÚissueStatusÚissueSummaryrÁ   Ú
issueCountÚissueUpdatedAt)r-   r.   Úlenr
   ÚutcnowÚ	isoformat)rÃ   rH   Úblockeds      r    Ú_build_issue_statezOrderModel._build_issue_stateU  sŽ   € à$*¢L¨bÖL˜4´ZÀÄdÕ5K’$ÐLˆÐLÜ�f“+ ‘/ˆà%Ù+2™¸Ù*1™;°rñ ñ Sàà"Ü˜f›+Ù?FœhŸo™oÓ/×9Ñ9Ó;ñ
ð 	
ð MOñ
ð 	
ùò Ms
   ‰A8ŸA8ÚdataÚactorÚreturnc                 óè  — t        | j                  d«      xs d«      j                  «       }|st        d«      ‚t        | j                  d«      xs d«      j                  «       j	                  «       }|dv �rˆ| j                  d«      xs i }ddd	d
dddœ}|j                  «       D ]?  \  }}t        |j                  |«      xs d«      j                  «       rŒ3t        |› d�«      ‚ | j                  d«      xs g }|st        d«      ‚t        |d¬«      D ]æ  \  }	}
t        |
j                  d«      xs d«      j                  «       st        d|	› d�«      ‚t        |
j                  d«      xs d«      dk  rt        d|	› d�«      ‚t        |
j                  d«      xs d«      j                  «       st        d|	› d�«      ‚t        |
j                  d«      xs d«      j                  «       rŒÙt        d|	› d�«      ‚ t        j                  t        «      }|j                  d«      |j                  dz  d›z   }t        j                  «       j                  d d  }|› d!|› d!|› �}| j                  d«      xs i }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                  «       t        |j                  d'«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       d(œd)œ}g }| j                  d«      xs g D �]_  }
|j!                  t        |
j                  d«      xs d«      j                  «       t        |
j                  d«      xs 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                  «       d.œ«       �Œb |j#                  «       }i d/|“d|“dt        | j                  d«      xs d«      j                  «       “d0t        | j                  d0«      xs d«      j                  «       “d1t        | j                  d1«      xs d«      j                  «       “d2t        | j                  d2«      xs d«      j                  «       “d3t        | j                  d3«      xs d«      j                  «       “d4t        | j                  d4«      xs d«      j                  «       “d|“d5t        | j                  d5«      xs d«      j                  «       “d-t        | j                  d-«      xs d«      j                  «       “d+t        | j                  d+«      xs d«      j                  «       “d,t        | j                  d,«      xs d«      j                  «       “d6t        | j                  d6«      xs d«      j                  «       “d|“d7d8“d9d:“i d;d“d<d“d=d“d>d“d?d“d@d“dAd“dBd“dCg “dDt        |j                  d"«      xs d«      j                  «       “dEt        |j                  dF«      xs d«      j                  «       “dGt        |j                  dH«      xs d«      j                  «       “dIdJ“dKd“dLd“dMd“dNg “¥dd||dOœ¥}t$        j'                  |«       t        |dP   «      |dP<   |S )QNÚorderNumberr$   úorderNumber is requiredÚchannelType)ÚepacketÚtiktokr4   zcustomer namez	address 1r'   r(   zpostal coder)   )r5   Úaddress1r'   r(   Ú
postalCoder)   z is requiredrF   zat least one item is requiredrf   ©ÚstartÚ	skuNumberzitem z: SKU number is requiredr>   r   z$: quantity must be greater than zeroÚdescriptionz: description is requiredÚsaleUrlz: sale URL is requiredú%Y%m%d%H%M%Séè  Ú03dé   Ú_r5   r6   Ú	taxNumberrÛ   Úaddress2rÜ   ©r&   rè   r'   r(   r*   r)   ©r5   r6   rç   r1   ÚgrossWeightÚwidthÚheightÚlength)rß   r>   rà   rë   rì   rí   rî   rá   r   ÚshippingPartnerÚshipAddressÚbarcodeÚlabelUrlÚsellerAddressÚweightÚchargeableWeightr   õ
   LiÃªn Há»‡rG   r=   Ú
offerSetByÚofferSetByIdÚ
offerSetAtÚofferApprovedAtÚofferRejectedAtÚtrackingÚtrackingNumberÚtrackingLinkru   rP   rQ   r7   ÚuploadedByIdr   rÇ   FrÈ   rÉ   rÊ   rÁ   )rË   rÌ   Ú	createdAtÚ	updatedAtre   )r0   r/   rU   rL   rl   rF   Ú	enumerateÚintr
   ÚnowÚVN_TZÚstrftimeÚmicrosecondÚuuidÚuuid4Úhexrv   rÏ   Úorders_collectionÚ
insert_one)rÒ   rÓ   Úorder_numberÚchannel_typeÚcustomer_dataÚrequired_customer_fieldsÚfieldÚlabelÚsource_itemsÚindexrH   r  Ú	timestampÚrandom_partr   r4   rF   Únow_isor:   s                      r    Úcreate_orderzOrderModel.create_orderg  s-  € ä˜4Ÿ8™8 MÓ2Ò8°bÓ9×?Ñ?ÓAˆÙÜÐ6Ó7Ð7ä˜4Ÿ8™8 MÓ2Ò8°bÓ9×?Ñ?ÓA×GÑGÓIˆØÐ0Ò0Ø ŸH™H ZÓ0Ò6°BˆMà'Ø'ØØ Ø+Ø$ñ(Ð$ð !9× >Ñ >Ó @ò =‘��uÜ˜=×,Ñ,¨UÓ3Ò9°rÓ:×@Ñ@ÕBÜ$¨ w¨lÐ%;Ó<Ð<ð=ð  Ÿ8™8 GÓ,Ò2°ˆLÙÜ Ð!@ÓAÐAÜ(¨¸QÔ?ò L‘��tÜ˜4Ÿ8™8 KÓ0Ò6°BÓ7×=Ñ=Ô?Ü$ u¨U¨GÐ3KÐ%LÓMÐMÜ�t—x‘x 
Ó+Ò0¨qÓ1°QÒ6Ü$ u¨U¨GÐ3WÐ%XÓYÐYÜ˜4Ÿ8™8 MÓ2Ò8°bÓ9×?Ñ?ÔAÜ$ u¨U¨GÐ3LÐ%MÓNÐNÜ˜4Ÿ8™8 IÓ.Ò4°"Ó5×;Ñ;Õ=Ü$ u¨U¨GÐ3IÐ%JÓKÐKðLô �l‰lœ5Ó!ˆØ—L‘L Ó0°c·o±oÈÑ6MÈcÐ5RÑSˆ	Ü—j‘j“l×&Ñ& r¨Ð*ˆØ"�^ 1 Y K¨q°°Ð>ˆàŸ™ Ó,Ò2°ˆä˜×)Ñ)¨&Ó1Ò7°RÓ8×>Ñ>Ó@Ü˜×*Ñ*¨7Ó3Ò9°rÓ:×@Ñ@ÓBÜ˜]×.Ñ.¨{Ó;ÒA¸rÓB×HÑHÓJä˜m×/Ñ/°
Ó;ÒA¸rÓB×HÑHÓJÜ × 1Ñ 1°*Ó =Ò CÀÓD×JÑJÓLÜ˜M×-Ñ-¨fÓ5Ò;¸Ó<×BÑBÓDÜ˜]×.Ñ.¨wÓ7Ò=¸2Ó>×DÑDÓFÜ˜}×0Ñ0°Ó>ÒDÀ"ÓE×KÑKÓMÜ˜}×0Ñ0°Ó;ÒA¸rÓB×HÑHÓJññ	
ˆð ˆØ—X‘X˜gÓ&Ò,¨"ó 
	ˆDØ�L‰LÜ  §¡¨+Ó!6Ò!<¸"Ó=×CÑCÓEÜ §¡¨Ó 4Ò 9¸Ó:Ü" 4§8¡8¨MÓ#:Ò#@¸bÓA×GÑGÓIÜ" 4§8¡8¨MÓ#:Ò#@¸bÓA×GÑGÓIÜ˜TŸX™X gÓ.Ò4°"Ó5×;Ñ;Ó=Ü˜dŸh™h xÓ0Ò6°BÓ7×=Ñ=Ó?Ü˜dŸh™h xÓ0Ò6°BÓ7×=Ñ=Ó?Ü˜tŸx™x¨	Ó2Ò8°bÓ9×?Ñ?ÓAñ	ö 	ð
	ð —-‘-“/ˆð'
Ø�xð'
à˜<ð'
ð œ3˜tŸx™x¨Ó6Ò<¸"Ó=×CÑCÓEð'
ð œs 4§8¡8Ð,=Ó#>Ò#DÀ"ÓE×KÑKÓMð	'
ð
 œ3˜tŸx™x¨Ó6Ò<¸"Ó=×CÑCÓEð'
ð ”s˜4Ÿ8™8 IÓ.Ò4°"Ó5×;Ñ;Ó=ð'
ð œ˜DŸH™H ZÓ0Ò6°BÓ7×=Ñ=Ó?ð'
ð œS §¡¨/Ó!:Ò!@¸bÓA×GÑGÓIð'
ð ˜ð'
ð ”c˜$Ÿ(™( 8Ó,Ò2°Ó3×9Ñ9Ó;ð'
ð ”c˜$Ÿ(™( 8Ó,Ò2°Ó3×9Ñ9Ó;ð'
ð ”S˜Ÿ™ 'Ó*Ò0¨bÓ1×7Ñ7Ó9ð'
ð ”c˜$Ÿ(™( 8Ó,Ò2°Ó3×9Ñ9Ó;ð'
ð ¤ D§H¡HÐ-?Ó$@Ò$FÀBÓ G× MÑ MÓ Oð'
ð �Uð'
ð  �lð!'
ð" �Sñ#'
ð$ ˜"ð%'
ð& ˜Bð''
ð( ˜"ð)'
ð* ˜rð+'
ð, ˜rð-'
ð. ˜ð/'
ð0 ˜bð1'
ð2 ˜Bð3'
ð4 ˜bð5'
ð6 œc %§)¡)¨FÓ"3Ò"9°rÓ:×@Ñ@ÓBð7'
ð8 œs 5§9¡9¨WÓ#5Ò#;¸Ó<×BÑBÓDð9'
ð: œC §	¡	¨$£Ò 5°2Ó6×<Ñ<Ó>ð;'
ð< ˜eð='
ð> ˜ð?'
ð@ ˜2ðA'
ðB ˜BðC'
ðD ˜BñE'
ðF Ø Ø Ø òM'
ˆôR 	×$Ñ$ SÔ)Ü˜˜U™“_ˆˆE‰
Øˆ
r"   Ú	db_statusc                 óv   — t        | xs d«      j                  «       }|dv ry|dk(  ry|dk(  ry|dv ry	|d
v r|S y)Nr$   ©rŽ   ÚPrintingÚ
processingÚShippedÚ	processedÚ	DeliveredÚ	deliveredr‚   Úfailed©rö   ÚOfferÚRejectedÚUnpaidr‰   )r  Úss     r    Ú_map_db_status_to_fezOrderModel._map_db_status_to_feØ  sW   € ä�	’˜RÓ ×&Ñ&Ó(ˆØÐ*Ñ*ØØ�	Š>ØØ�ÒØØÐ)Ñ)ØàÐ=Ñ=ØˆHØr"   Úchannelc                 óh   — ddddœ}|j                  t        | xs d«      j                  «       | «      S )NÚePacketÚTikTokz	Buy Label)rÙ   rÚ   Úbuylabelr$   )r/   r0   rl   )r)  Úmappings     r    Ú_map_channel_to_shipping_methodz*OrderModel._map_channel_to_shipping_methodè  s9   € ð !ØØ#ñ
ˆð
 �{‰{œ3˜wš}¨"Ó-×3Ñ3Ó5°wÓ?Ð?r"   r:   c                 óˆ  — | j                  d«      xs! | j                  d«      xs t        | d   «      }| j                  d«      xs i }t        |t        «      r|j                  dd«      nt        |xs d«      }t        | j                  d«      xs d«      j	                  «       }| j                  dd«      }|rt        |«      d d	 }|t        | d   «      | j                  d
«      xs |||t
        j                  |«      t
        j                  | j                  dd«      «      t        | j                  d«      xs | j                  d«      xs d«      || j                  dd«      | j                  dd«      t        t        | j                  d«      xs d«      d«      | j                  dd«      | j                  dd«      dœS )Nr   r   re   r4   r5   r$   rØ   r   é
   rÖ   r   rô   rõ   Ú
importTyperG   r   rB   r÷   rù   )r   ÚdocIdrÖ   r4   rØ   ÚshippingMethodr   rô   r   r2  Ú	rawStatusrG   r÷   rù   )
r/   r0   r-   r.   rU   r   r/  r(  rE   rD   )r:   r   r4   Úcustomer_namer)  Ú
created_ats         r    Ú_sanitize_my_orderzOrderModel._sanitize_my_orderñ  s|  € à—7‘7˜9Ó%ÒI¨¯©°«ÒI¼#¸cÀ%¹j»/ˆØ—7‘7˜:Ó&Ò,¨"ˆÜ4>¸xÌÔ4N˜Ÿ™ V¨RÔ0ÔTWÐX`ÒXfÐdfÓTgˆÜ�c—g‘g˜mÓ,Ò2°Ó3×9Ñ9Ó;ˆØ—W‘W˜[¨"Ó-ˆ
ÙÜ˜Z›¨¨"Ð-ˆJàÜ˜˜U™“_ØŸ7™7 =Ó1Ò=°XØ%Ø"Ü(×HÑHÈÓQÜ ×5Ñ5°c·g±g¸hÈÓ6KÓLÜ˜#Ÿ'™' (Ó+ÒP¨s¯w©wÐ7IÓ/JÒPÈbÓQØ#ØŸ'™' ,°Ó3ØŸ™ ¨2Ó.Üœ5 §¡¨Ó!1Ò!6°QÓ7¸Ó;ØŸ'™' ,°Ó3ØŸ'™' ,°Ó3ñ
ð 	
r"   Úactor_idÚ
date_rangeÚpageÚ	page_sizec           
      óz  — t        |d«      }t        |d«      }d| i}t        j                  t        «      }d }	d }
|dk(  r#|j	                  d«      }	|j	                  d«      }
n>|dv r:t        |«      }|t        |¬«      z
  j	                  d«      }	|j	                  d«      }
t        j                  |«      }t        j                  d|dd	d
dgiigi«      }t        j                  d|dd	ddgiigi«      }t        j                  d|dd	ddgiigi«      }|g}|rDt        j                  |j                  «       «      }|ddœ}|j                  dd|id|id|igi«       |r9|dvr5d
dgdgdgddgdœ}|j                  |«      }|r|j                  dd	|ii«       |r1|dvr-|j                  ddt        j                  |«      › d�ddœi«       t        j                  |	|
«      }|r|j                  |«       t!        |«      dkD  rd|in|d   }t        j                  |«      }|dkD  rt#        j$                  ||z  «      nd}|dz
  |z  }t        j'                  |«      j)                  dg«      j+                  |«      j-                  |«      }|D �cg c]  }t        j/                  |«      ‘Œ }}|||||||||dœdœS c c}w )Nrf   rÿ   Útodayú%Y-%m-%d)Ú7Ú30)Údaysú$andr   ú$inrŽ   r  r  r   rƒ   r„   rb   rc   r   r   rÖ   úcustomer.name)Úallr$   )r  r  r!  r"  rØ   ú^ú$r   ©r   éÿÿÿÿ)rG   r  Úshippedr"  )rÒ   rG   r;  ÚpageSizeÚ
totalPagesÚsummary)Úmaxr
   r  r  r  r  r   r  Úcount_documentsrh   ri   rU   rv   r/   r   Ú_build_date_filterrÍ   ÚmathÚceilrj   ÚsortÚskipÚlimitr8  )r9  r`   r   r)  r:  r;  r<  Úbaser  Ú	date_fromÚdate_torB  Úsummary_totalÚsummary_processingÚsummary_shippedÚsummary_failedÚ
conditionsÚescapedro   Údb_statusesÚmappedÚdate_filterÚqueryrG   Útotal_pagesrU  Úcursorr:   rÒ   s                                r    Úget_my_orderszOrderModel.get_my_orders  s%  € ô �4˜‹|ˆÜ˜	 1Ó%ˆ	à Ð)ˆô �l‰lœ5Ó!ˆØˆ	ØˆØ˜Ò ØŸ™ ZÓ0ˆIØ—l‘l :Ó.‰GØ˜;Ñ&Ü�z“?ˆDØœy¨dÔ3Ñ3×=Ñ=¸jÓIˆIØ—l‘l :Ó.ˆGô *×9Ñ9¸$Ó?ˆÜ.×>Ñ>ÀÈÐPXÐ[`ÐcoÐq{Ðb|ÐZ}ÐO~ÐHð  @Aó  BÐÜ+×;Ñ;¸VÀdÈXÐX]Ð`iÐkvÐ_wÐWxÐLyÐEzÐ<{Ó|ˆÜ*×:Ñ:¸FÀTÈHÐW\Ð_iÐkvÐ^wÐVxÐKyÐDzÐ;{Ó|ˆð �Vˆ
áÜ—i‘i §¡£Ó0ˆGØ&°CÑ8ˆEØ×Ñ˜uØ˜EÐ"Ø Ð&Ø  %Ð(ð'ð ô ñ �f KÑ/à+¨ZÐ8Ø'˜[Ø)˜]Ø% {Ð3ñ	ˆKð !—_‘_ VÓ,ˆFÙØ×!Ñ! 8¨e°V¨_Ð"=Ô>á�w kÑ1Ø×Ñ˜}¸1¼R¿Y¹YÀwÓ=OÐ<PÐPQÐ9RÐ`cÑ.dÐeÔfä ×3Ñ3°I¸wÓGˆÙØ×Ñ˜kÔ*ä(+¨J«¸!Ò(;�˜Ñ$ÀÈAÁˆä!×1Ñ1°%Ó8ˆØ6;¸a²i”d—i‘i ¨	Ñ 1Ô2ÀQˆØ�q‘˜IÑ%ˆô ×"Ñ" 5Ó)ß‰TÐ$Ð%Ó&ß‰T�$‹Zß‰U�9Óð	 	ð ?EÖE°s”
×-Ñ-¨cÕ2ÐEˆÐEð ØØØ!Ø%à&Ø0Ø*Ø(ñ	ñ
ð 	
ùò Fs   ÊJ8c                 óx  — d|idd| idt        | «      dk(  rt        | «      nd igig}t        j                  | |dœ«      }|s"	 t        j                  t        | «      |dœ«      }|st        d«      ‚|j                  d«      xs! |j                  d	«      xs t        |d   «      }|j                  d
«      xs i }d}d}i }t        |t        «      rL|j                  dd«      }|j                  dd«      }|j                  d«      xs i }	t        |	t        «      r|	}nt        |«      }t        |j                  d«      xs d«      j                  «       }
t        |j                  dd«      «      d d }|j                  d«      xs g }|D �cg c]�  }t        |t        «      r‹|j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      dœ‘ŒŸ }}i d	|“dt        |d   «      “d|j                  d«      xs |“d|
“dt        j                  |
«      “d |j                  d d«      “d!|j                  d!d«      “d"|j                  d"d«      “d#|j                  d#d«      “d$|j                  d$d«      “d%t        j                  |j                  d%d«      «      “d&|j                  d%d«      “d'|j                  d'd«      “d|j                  dd«      “d|j                  dd«      “d|j                  dd«      “d(|j                  d(d«      “|j                  d)«      xs |j                  d*d«      |j                  d+d«      ||||d,œ|d-œ¥S # t        $ r Y �ŒOw xY wc c}w ).Nrÿ   r   r   re   é   )r   rÿ   )re   rÿ   úOrder not foundr   r4   r$   r5   r6   r1   rØ   r   r1  rF   rß   r>   rf   rà   rë   rî   rì   rí   rá   )rß   r>   rà   rë   rî   rì   rí   rá   r3  rÖ   r4  rï   rð   ró   rñ   rò   r   r5  rô   rõ   rü   rý   rþ   )r5   r6   r1   )rü   rþ   r   r4   rF   )rÍ   r   r  Úfind_oneÚ	ExceptionrL   r/   r0   r-   r.   rU   r   r/  r(  )r   r9  r^  r:   Úorder_id_valÚcustomer_rawr6  Úcustomer_phoneÚcustomer_addressÚaddrr)  r7  Ú	raw_itemsrH   rF   s                  r    Úget_my_order_detailzOrderModel.get_my_order_detailg  s  € ð ˜XÐ&Ø�i Ð*¨UÌ#ÈhË-Ð[]ÒJ]´H¸XÔ4FÐcgÐ,hÐiÐjð
ˆ
ô
  ×(Ñ(°XÈxÑ)XÓYˆÙðÜ'×0Ñ0¼À(Ó9KÐ]eÑ1fÓg�ñ ÜÐ.Ó/Ð/à—w‘w˜yÓ)ÒM¨S¯W©W°T«]ÒM¼cÀ#ÀeÁ*»oˆØ—w‘w˜zÓ*Ò0¨bˆØˆØˆØÐÜ�l¤DÔ)Ø(×,Ñ,¨V°RÓ8ˆMØ)×-Ñ-¨g°rÓ:ˆNØ×#Ñ# IÓ.Ò4°"ˆDÜ˜$¤Ô%Ø#'Ñ ä Ó-ˆMä�c—g‘g˜mÓ,Ò2°Ó3×9Ñ9Ó;ˆÜ˜Ÿ™ ¨bÓ1Ó2°3°BÐ7ˆ
à—G‘G˜GÓ$Ò*¨ˆ	ð "ö
ð ¤Z°´dÔ%;ð "ŸX™X k°2Ó6Ø ŸH™H Z°Ó3Ø#Ÿx™x¨°rÓ:Ø#Ÿx™x¨°rÓ:ØŸ(™( 8¨RÓ0ØŸ™ '¨2Ó.ØŸ(™( 8¨RÓ0ØŸ8™8 I¨rÓ2ó	ð
ˆð 
ð
Ø�,ð
à”S˜˜U™“_ð
ð ˜3Ÿ7™7 =Ó1ÒA°\ð
ð ˜7ð	
ð
 œj×HÑHÈÓQð
ð ˜sŸw™wÐ'8¸"Ó=ð
ð ˜3Ÿ7™7 =°"Ó5ð
ð ˜SŸW™W _°bÓ9ð
ð �s—w‘w˜y¨"Ó-ð
ð ˜Ÿ™ 
¨BÓ/ð
ð ”j×5Ñ5°c·g±g¸hÈÓ6KÓLð
ð ˜Ÿ™ ¨2Ó.ð
ð �c—g‘g˜h¨Ó+ð
ð �c—g‘g˜h¨Ó+ð
ð �S—W‘W˜W bÓ)ð
ð  �c—g‘g˜h¨Ó+ð!
ð"  §¡Ð(:¸BÓ ?ð#
ð$ Ÿ™ 
Ó+ÒL¨s¯w©wÐ7GÈÓ/LØŸG™G N°BÓ7Ø#à%Ø'Ø+ñð
 ò5
ð 	
øôK ò Úðüò.
s   Á!N' Æ
B"N7Î'	N4Î3N4ÚvariantsÚrequested_styleÚrequested_sizeÚpreferred_tierc                 ó
  — t         j                  |«      }t         j                  |«      }t         j                  |«      }g }g }| xs g D ]©  }	t         j                  |	j                  d«      «      }
t         j                  |	j                  d«      «      }t         j                  t         j                  |	«      «      }|
|k(  sŒy||k(  sŒ|j	                  |	«       |sŒ“||k(  sŒ™|j	                  |	«       Œ« |r|d   S |r|d   S y )NÚstyleÚsizer   )r   r™   r/   rŸ   rv   )rs  rt  ru  rv  Únormalized_styleÚnormalized_sizeÚnormalized_tierÚexact_tier_matchesÚfallback_matchesrš   Úvariant_styleÚvariant_sizeÚvariant_tiers                r    Ú_find_matching_variantz!OrderModel._find_matching_variant´  sù   € ô &×=Ñ=¸oÓNÐÜ$×<Ñ<¸^ÓLˆÜ$×<Ñ<¸^ÓLˆàÐØÐà’~ 2ò 	7ˆGÜ&×>Ñ>¸w¿{¹{È7Ó?SÓTˆMÜ%×=Ñ=¸g¿k¹kÈ&Ó>QÓRˆLÜ%×=Ñ=¼j×>ZÑ>ZÐ[bÓ>cÓdˆLàÐ 0Ó0°\À_Ó5TØ ×'Ñ'¨Ô0Ú" |°Ó'FØ&×-Ñ-¨gÕ6ð	7ñ Ø% aÑ(Ð(ÙØ# AÑ&Ð&Ør"   ÚidxÚreasonÚmessagec                 ó¼  — | ||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œS )NÚ	productIdr$   ÚproductNamerx  ry  r¨   ©Úrowr„  r…  r‡  rˆ  rx  ry  r¨   rž   ©rƒ  rH   r„  r…  s       r    Ú_build_design_error_detailz%OrderModel._build_design_error_detailÒ  s²   € ð ØØÜ˜TŸX™X kÓ2Ò8°bÓ9×?Ñ?ÓAÜ˜tŸx™x¨Ó6Ò<¸"Ó=×CÑCÓEÜ˜Ÿ™ 'Ó*Ò0¨bÓ1×7Ñ7Ó9Ü˜Ÿ™ Ó(Ò.¨BÓ/×5Ñ5Ó7Ü˜$Ÿ(™( 8Ó,Ò2°Ó3×9Ñ9Ó;ñ	
ð 		
r"   rF   c           
      ó  — g }g }t        | xs g d¬«      D ]ê  \  }}t        |t        «      s|j                  |«       Œ(t        |«      }t        j                  |«      }t        |d|› �¬«      }|d   r&||d<   ||d<   |d   |d	<   ||d
<   t        |d   «       nW||d
<   |j                  d|«       |j                  d|«       |j                  t        j                  |||d   |d   ¬«      «       |j                  |«       Œì ||fS )Nrf   rÝ   Úorder_item_)Úfilename_prefixÚsuccessr¦   r§   Ú	publicUrlr«   r¨   r„  r…  r‹  )
r  r-   r.   rv   r   r©   r   r   rº   rŒ  )rF   Únormalized_itemsÚdesign_errorsrƒ  rH   Ú	next_itemÚdesign_valuerx   s           r    Ú_prepare_items_for_storagez%OrderModel._prepare_items_for_storageß  s>  € àÐØˆä" 5¢;¨B°aÔ8ò "	/‰IˆC�Ü˜d¤DÔ)Ø ×'Ñ'¨Ô-Øä˜T›
ˆIÜ%×7Ñ7¸	ÓBˆLä(ØØ"-¨c¨UÐ 3ôˆFð
 �iÒ Ø.:�	Ð*Ñ+Ø+7�	˜-Ñ(Ø+1°+Ñ+>�	˜-Ñ(Ø&2�	˜(Ñ#ô " &¨Ñ"5Õ6à&2�	˜(Ñ#Ø×$Ñ$Ð%5°|ÔDØ×$Ñ$ ]°LÔAØ×$Ñ$Ü×9Ñ9ØØ&Ø% hÑ/Ø & yÑ 1ð	 :ó ôð ×#Ñ# IÕ.ðE"	/ðH   Ð.Ð.r"   r4   c                 ó:  ‡— g }| xs i } t         j                  | j                  di «      «      Št        | j                  d«      xs d«      j	                  «       s|j                  ddddœ«       t        ˆfd„d	D «       «      }|s|j                  dd
ddœ«       |S )Nr1   r5   r$   r   ÚMISSING_CUSTOMERu   Thiáº¿u tÃªn khÃ¡ch hÃ ng.©rŠ  r„  r…  c              3   óv   •K  — | ]0  }t        ‰j                  |«      xs d «      j                  «       –— Œ2 y­w)r$   Nrž   )Ú.0r²   r1   s     €r    ú	<genexpr>z<OrderModel._validate_customer_for_payment.<locals>.<genexpr>  s5   øè ø€ ò 
àô �—‘˜CÓ Ò& BÓ'×-Ñ-×/ñ
ùs   ƒ69r%   ÚMISSING_ADDRESSu   Thiáº¿u Ä‘á»‹a chá»‰.)r   r2   r/   r0   rU   rv   Úany)r4   rÃ   Úhas_any_addressr1   s      @r    Ú_validate_customer_for_paymentz)OrderModel._validate_customer_for_payment
  s¤   ø€ àˆØ’>˜rˆÜ×/Ñ/°·±¸YÈÓ0KÓLˆä�8—<‘< Ó'Ò-¨2Ó.×4Ñ4Ô6Ø�M‰MØØ,Ø7ñô ô ó 
àHô
ó 
ˆñ Ø�M‰MØØ+Ø2ñô ð ˆr"   c                 ó4
  — g }t        | t        «      rt        | «      dk(  rddddœgS t        | d¬«      D �]Ë  \  }}t        |t        «      s|j                  |dd|› d	�dœ«       Œ1t        |j                  d
«      xs d«      j                  «       }t        |j                  d«      xs d«      j                  «       }t        |j                  d«      xs d«      j                  «       }t        j                  |«      }t        j                  |«      }|rt        j                  d
|i«      nd }	t        |	xs i j                  d«      xs |j                  d«      xs |xs d«      j                  «       }
t        j                  |j                  d«      d«      }|dk  r3|j                  |dd|
xs |› d�||
|||j                  d«      dœ«       �Œž|s|j                  |ddd|
||dœ«       �Œ»|	s'|j                  |dd|
xs |› d�||
xs |||dœ«       �Œä|s|j                  |dd|
› d�||
||dœ«       �Œ|s|j                  |dd|
› d�||
||dœ«       �Œ&|	j                  d«      xs g }|s|j                  |d d|
› d!�||
||dœ«       �Œ\t        |D �ch c]Z  }t        |j                  d«      xs d«      j                  «       r,t        |j                  d«      xs d«      j                  «       ’Œ\ c}«      }t        |D �ch c]Z  }t        |j                  d«      xs d«      j                  «       r,t        |j                  d«      xs d«      j                  «       ’Œ\ c}«      }t        j!                  |«      }t        j!                  |«      }|D �ch c]  }t        j!                  |«      ’Œ }}|D �ch c]  }t        j!                  |«      ’Œ }}||vr#|j                  |d"d|
› d#|› d�||
|||d$œ«       �ŒÏ||vr#|j                  |d%d|
› d&|› d�||
|||d'œ«       �Œöd }|D ]Y  }t        j!                  |j                  d«      «      }t        j!                  |j                  d«      «      }||k(  sŒQ||k(  sŒW|} n |s%|j                  |d(d|
› d)|› d*|› d�||
||dœ«       �Œ}|s |j                  |d+d|
› d,�||
|||d-œ«       �ŒŸ|rt#        |«      r�Œ®|j                  |d.d|
› d/�||
|||d-œ«       �ŒÎ |S c c}w c c}w c c}w c c}w )0Nr   ÚNO_ITEMSu;   Ä�Æ¡n hÃ ng khÃ´ng cÃ³ sáº£n pháº©m nÃ o Ä‘á»ƒ thanh toÃ¡n.r™  rf   rÝ   ÚINVALID_ITEMu   DÃ²ng u    khÃ´ng há»£p lá»‡.r‡  r$   rx  ry  Útitlerˆ  r>   ÚINVALID_QUANTITYu   Sáº£n pháº©m "u&   " cÃ³ sá»‘ lÆ°á»£ng khÃ´ng há»£p lá»‡.)rŠ  r„  r…  r‡  rˆ  rx  ry  r>   ÚMISSING_PRODUCT_IDu   Thiáº¿u mÃ£ sáº£n pháº©m.)rŠ  r„  r…  r‡  rˆ  rx  ry  ÚPRODUCT_NOT_FOUNDu!   KhÃ´ng tÃ¬m tháº¥y sáº£n pháº©m "z".ÚMISSING_STYLEu   " Ä‘ang thiáº¿u style.ÚMISSING_SIZEu   " Ä‘ang thiáº¿u size.rs  ÚNO_VARIANTSu,   " hiá»‡n táº¡i khÃ´ng cÃ²n máº·t hÃ ng nÃ y.ÚSTYLE_NOT_FOUNDu3   " hiá»‡n táº¡i Ä‘Ã£ háº¿t hoáº·c khÃ´ng cÃ³ style ")rŠ  r„  r…  r‡  rˆ  rx  ry  ÚavailableStylesÚSIZE_NOT_FOUNDu2   " hiá»‡n táº¡i Ä‘Ã£ háº¿t hoáº·c khÃ´ng cÃ³ size ")rŠ  r„  r…  r‡  rˆ  rx  ry  ÚavailableSizesÚVARIANT_NOT_FOUNDu!   " khÃ´ng cÃ³ biáº¿n thá»ƒ style "z
" - size "ÚDESIGN_MISSINGu#   " Ä‘ang thiáº¿u áº£nh thiáº¿t káº¿.r‰  ÚDESIGN_NOT_READYug   " chÆ°a cÃ³ áº£nh thiáº¿t káº¿ trong há»‡ thá»‘ng hoáº·c Design URL hiá»‡n táº¡i khÃ´ng táº£i Ä‘Æ°á»£c.)r-   rC   rÍ   r  r.   rv   r0   r/   rU   r   r©   r¬   r   rj  Ú	_safe_intÚsortedr™   r   )rF   rÃ   rƒ  rH   Ú
product_idrt  ru  Úrequested_designÚrequested_design_localÚproduct_docÚproduct_namer>   rs  ÚvÚavailable_stylesÚavailable_sizesÚnormalized_requested_styleÚnormalized_requested_sizer{   Únormalized_available_stylesÚnormalized_available_sizesÚmatched_variantrš   r  r€  s                            r    Ú_validate_items_for_paymentz&OrderModel._validate_items_for_payment$  s@  € àˆä˜%¤Ô&¬#¨e«*¸ª/àØ$ØXñð ð ô # 5°Ô2ó @	‰IˆC�Ü˜d¤DÔ)Ø—‘ØØ,Ø!'¨ uÐ,?Ð@ñô ð
 ä˜TŸX™X kÓ2Ò8°bÓ9×?Ñ?ÓAˆJÜ! $§(¡(¨7Ó"3Ò"9°rÓ:×@Ñ@ÓBˆOÜ  §¡¨&Ó!1Ò!7°RÓ8×>Ñ>Ó@ˆNÜ)×;Ñ;¸DÓAÐÜ%/×%AÑ%AÀ$Ó%GÐ"áU_Ô-×6Ñ6¸ÀZÐ7PÔQÐeiˆKÜØÒ" ×'Ñ'¨Ó0ò Ø—8‘8˜MÓ*òàòð ó	÷
 ‰e‹gð ô "×+Ñ+¨D¯H©H°ZÓ,@À!ÓDˆHØ˜1Š}Ø—‘ØØ0Ø!/°Ò0JÀ
Ð/KÐKqÐrØ!+Ø#/Ø,Ø*Ø $§¡¨Ó 4ñ	ô 	ñ áØ—‘ØØ2Ø:Ø!#Ø#/Ø,Ø*ñô ñ áØ—‘ØØ1Ø!BÀ<ÒC]ÐS]ÐB^Ð^`ÐaØ!+Ø#/Ò#=°:Ø,Ø*ñô ñ á"Ø—‘ØØ-Ø!/°¨~Ð=SÐTØ!+Ø#/Ø,Ø*ñô ñ á!Ø—‘ØØ,Ø!/°¨~Ð=RÐSØ!+Ø#/Ø,Ø*ñô ñ à"—‘ zÓ2Ò8°bˆHÙØ—‘ØØ+Ø!/°¨~Ð=iÐjØ!+Ø#/Ø,Ø*ñô ñ ä%à!ö'àÜ�q—u‘u˜W“~Ò+¨Ó,×2Ñ2Ô4ô �A—E‘E˜'“NÒ( bÓ)×/Ñ/Õ1ò'ó  Ðô
 %à!ö&àÜ�q—u‘u˜V“}Ò*¨Ó+×1Ñ1Ô3ô �A—E‘E˜&“MÒ' RÓ(×.Ñ.Õ0ò&ó ˆOô *4×)KÑ)KÈOÓ)\Ð&Ü(2×(JÑ(JÈ>Ó(ZÐ%ð HXö+Ø>C”
×2Ñ2°5Õ9ð+Ð'ð +ð HWö*Ø>C”
×2Ñ2°5Õ9ð*Ð&ð *ð *Ð1LÑLØ—‘ØØ/Ø!/°¨~Ð=pð  rAð  qBð  BDð   EØ!+Ø#/Ø,Ø*Ø'7ñ	ô 	ñ à(Ð0JÑJØ—‘ØØ.Ø!/°¨~Ð=oÐp~Ðoð  @Bð   CØ!+Ø#/Ø,Ø*Ø&5ñ	ô 	ñ à"ˆOØ#ò �Ü *× BÑ BÀ7Ç;Á;ÈwÓCWÓ X�Ü)×AÑAÀ'Ç+Á+ÈfÓBUÓV�Ø Ð$>Ó>À<ÐSlÓClØ&-�OÙðñ #Ø—‘ØØ1Ø!/°¨~Ð=^Ð_nÐ^oÐoyð  {Ið  zJð  JLð   MØ!+Ø#/Ø,Ø*ñô ñ á#Ø—‘ØØ.Ø!/°¨~Ð=`ÐaØ!+Ø#/Ø,Ø*Ø.ñ	ô 	ñ á)Ô1FÐG]Ö1^Ø—‘ØØ0à(¨¨ð 7Pð Pð ",Ø#/Ø,Ø*Ø.ñô ñ ðA@	ðD ˆùòA'ùò
&ùò+ùò*s   ÊAT
Ì	AT
ÎTÎ?Tc                 óø   — t         j                  | xs i «      }| xs i j                  dg «      }g }|j                  t         j	                  |«      «       |j                  t         j                  |«      «       |S )NrF   )r   r;   r/   Úextendr   rÁ  )r:   r4   rF   rÃ   s       r    Ú_validate_order_for_paymentz&OrderModel._validate_order_for_paymentó  sb   € ä×1Ñ1°#²)¸Ó<ˆØ’˜—‘ ¨Ó,ˆØˆØ�‰”j×?Ñ?ÀÓIÔJØ�‰”j×<Ñ<¸UÓCÔDØˆr"   Úuploader_cachec                 ó–  — | j                  d«      xs! | j                  d«      xs t        | d   «      }t        j                  | «      }| j                  dd«      }| j                  dd«      }|s1|s/t        j	                  | j                  d«      |«      }|d   }|d   }| j                  dg «      }t        |t        «      r#|D �cg c]  }t        j                  |«      ‘Œ c}ng }	t        |	«      }
t        j                  | «      }t        j                  | «      }i d|“d	t        | d   «      “d
| j                  d
«      xs( | j                  d«      r| j                  dd«      d d nd“d|j                  dd«      “d| j                  d«      xs | j                  dd«      “d| j                  dd«      “d| j                  dd«      “d|“d|“dt        j                  | «      “d| j                  d«      xs | j                  dd«      “d| j                  d«      xs | j                  dd«      “d| j                  dd«      “d| j                  d«      xs | j                  dd«      “d|
“d|“dt        | j                  d«      «      “| j                  dd«      | j                  dd«      | j                  dd«      t        | j                  d t        |«      «      xs d!«      t        j                  | «      t        j                  | «      | j                  d"d«      | j                  d#d«      | j                  d$d«      d%œ	¥S c c}w )&Nr   r   re   rP   r$   rQ   r   rF   r3  Údater   r1  r4   r5   rü   rý   rþ   r   r&  ru   r€   r�   Ú
canceledAtÚcancelledAtÚcancelReasonÚ	itemCountrG   rÇ   rÈ   rÉ   rÊ   rË   r   r2  r÷   rù   )	rÈ   rÉ   rÊ   rË   ÚpreviewImageÚmatchedImager2  r÷   rù   )r/   r0   r   r;   r_   r-   rC   r¿   rÍ   rM   rÂ   r}   r’   r  Ú_get_order_preview_image)r:   rÅ  r   r4   Úuploaded_by_nameÚuploaded_by_emailÚuploader_inforq  rH   rF   Ú
item_countrG   Úissue_detailss                r    Ú_sanitize_order_listzOrderModel._sanitize_order_listü  sI  € à—7‘7˜9Ó%ÒI¨¯©°«ÒI¼#¸cÀ%¹j»/ˆÜ×1Ñ1°#Ó6ˆàŸ7™7Ð#3°RÓ8ÐØŸG™GÐ$5°rÓ:ÐáÑ(9Ü&×9Ñ9¸#¿'¹'À/Ó:RÐTbÓcˆMØ,Ð-=Ñ>ÐØ -Ð.?Ñ @Ðà—G‘G˜G RÓ(ˆ	ÜR\Ð]fÔhlÔRmÀIÖN¸D”×1Ñ1°$Õ7ÓNÐsuˆÜ˜“Zˆ
ä×/Ñ/°Ó4ˆÜ"×;Ñ;¸CÓ@ˆð
Ø�(ð
à”S˜˜U™“_ð
ð �C—G‘G˜F“OÒfÈÏÉÐQ\ÔI]¨¯©°¸RÓ(@ÀÀ"Ñ(EÐceð
ð ˜Ÿ™ V¨RÓ0ð	
ð
 ˜Ÿ™ 
Ó+ÒL¨s¯w©wÐ7GÈÓ/Lð
ð ˜CŸG™G N°BÓ7ð
ð �c—g‘g˜h¨Ó1ð
ð Ð.ð
ð Ð0ð
ð œj×DÑDÀSÓIð
ð ˜#Ÿ'™' ,Ó/ÒM°3·7±7¸=È"Ó3Mð
ð ˜#Ÿ'™' ,Ó/ÒM°3·7±7¸=È"Ó3Mð
ð ˜CŸG™G N°BÓ7ð
ð ˜3Ÿ7™7 =Ó1ÒN°S·W±W¸\È2Ó5Nð
ð ˜ð
ð  �Uð!
ð" œd 3§7¡7Ð+;Ó#<Ó=ð#
ð$ Ÿ™ ¨bÓ1ØŸ7™7 =°"Ó5ØŸG™G N°BÓ7Ü˜cŸg™g l´C¸Ó4FÓGÒLÈ1ÓMÜ&×?Ñ?ÀÓDÜ&×?Ñ?ÀÓDØŸ'™' ,°Ó3ØŸ'™' ,°Ó3ØŸ'™' ,°Ó3ò5
ð 	
ùò Os   ÃMc                 óô  — | j                  dg «      }t        |t        «      sy|D ]Ð  }t        |t        «      sŒ|j                  d«      xs‡ |j                  d«      xst |j                  d«      xsa |j                  d«      xsN |j                  d«      xs; |j                  d«      xs( |j                  d	«      xs |j                  d
«      xs d}t	        |xs d«      j                  «       }|sŒÎ|c S  y)NrF   r$   r«   r°   r¯   r¨   r¦   r§   ÚimageÚimageUrl)r/   r-   rC   r.   r0   rU   )r:   rF   rH   r•  s       r    rÎ  z#OrderModel._get_order_preview_image-  s  € à—‘˜ Ó$ˆä˜%¤Ô&Øàò 	$ˆDÜ˜d¤DÔ)Øð —‘˜Ó'ò Ø—8‘8˜KÓ(òà—8‘8˜LÓ)òð —8‘8˜HÓ%òð —8‘8Ð,Ó-ò	ð
 —8‘8˜MÓ*òð —8‘8˜GÓ$òð —8‘8˜JÓ'òð ð ô ˜|Ò1¨rÓ2×8Ñ8Ó:ˆLâØ#Ò#ð'	$ð* r"   c                 óÚ  — | j                  d«      xs! | j                  d«      xs t        | d   «      }t        j                  | «      }| j                  dg «      }t	        |t
        «      r#|D �cg c]  }t        j                  |«      ‘Œ c}ng }| j                  d«      }	 t        |«      }| j                  dd«      | j                  dd«      d	œ}|d   s)|d   s$t        j                  | j                  d
«      «      }t        j                  | «      }i d|“dt        | d   «      “d|“d|“d| j                  dd«      “dt        |d«      “d| j                  d«      xs | j                  dd«      “d| j                  dd«      “d|d   “d|d   “dt        j                  | «      “d| j                  d«      xs | j                  dd«      “d| j                  d«      xs | j                  dd«      “d| j                  dd«      “d| j                  d«      xs | j                  dd«      “d| j                  dd«      “dt        | j                  d«      «      “i d| j                  dd«      “d| j                  dd«      “d| j                  dd«      “dt!        | j                  dt#        |«      «      xs d«      “d |“d!| j                  d!d«      “d"| j                  d"d«      “d#| j                  d#d«      “d$| j                  d$d«      “d%| j                  d%d«      “d&| j                  d&d«      “d'| j                  d'd«      “d(| j                  d(d«      “d)| j                  d)d«      “d*| j                  d*d«      “d+| j                  d+d«      “d,| j                  d,d«      “¥d-| j                  d-d«      i¥S c c}w # t        t        f$ r t        j                  |«      }Y �Œ;w xY w).Nr   r   re   rF   rG   rP   r$   rQ   rO   r   r3  r4   r   r&  rB   rü   rý   rþ   ru   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/   r0   r   r;   r-   rC   r¿   rD   rK   rL   rI   r_   rÂ   rE   r}   r’   r  rÍ   )	r:   r   r4   rq  rH   rF   rG   rÑ  rÓ  s	            r    Ú_sanitize_order_detailz!OrderModel._sanitize_order_detailK  sc  € à—7‘7˜9Ó%ÒI¨¯©°«ÒI¼#¸cÀ%¹j»/ˆÜ×1Ñ1°#Ó6ˆà—G‘G˜G RÓ(ˆ	ÜR\Ð]fÔhlÔRmÀIÖN¸D”×1Ñ1°$Õ7ÓNÐsuˆà—‘˜Ó ˆð	7Ü˜%“LˆEð
 "Ÿg™gÐ&6¸Ó;Ø"Ÿw™wÐ'8¸"Ó=ñ
ˆð
 Ð-Ò.°}ÐEVÒ7WÜ&×9Ñ9¸#¿'¹'À/Ó:RÓSˆMä"×;Ñ;¸CÓ@ˆð&
Ø�xð&
à”S˜˜U™“_ð&
ð ˜ð&
ð �Uð	&
ð
 �c—g‘g˜h¨Ó1ð&
ð ”U˜5 !“_ð&
ð ˜Ÿ™ 
Ó+ÒL¨s¯w©wÐ7GÈÓ/Lð&
ð ˜CŸG™G N°BÓ7ð&
ð ˜mÐ,<Ñ=ð&
ð ˜}Ð->Ñ?ð&
ð œj×DÑDÀSÓIð&
ð ˜#Ÿ'™' ,Ó/ÒM°3·7±7¸=È"Ó3Mð&
ð ˜#Ÿ'™' ,Ó/ÒM°3·7±7¸=È"Ó3Mð&
ð ˜CŸG™G N°BÓ7ð&
ð ˜3Ÿ7™7 =Ó1ÒN°S·W±W¸\È2Ó5Nð&
ð  ˜CŸG™G N°AÓ6ð!&
ð" œd 3§7¡7Ð+;Ó#<Ó=ñ#&
ð$ ˜Ÿ™ ¨bÓ1ð%&
ð& ˜3Ÿ7™7 =°"Ó5ð'&
ð( ˜CŸG™G N°BÓ7ð)&
ð* œ#˜cŸg™g l´C¸Ó4FÓGÒLÈ1ÓMð+&
ð, ˜Mð-&
ð0 ˜3Ÿ7™7 =°"Ó5ð1&
ð2 ˜sŸw™wÐ'8¸"Ó=ð3&
ð4 ˜3Ÿ7™7 =°"Ó5ð5&
ð6 ˜SŸW™W _°bÓ9ð7&
ð8 �s—w‘w˜y¨"Ó-ð9&
ð: ˜Ÿ™ 
¨BÓ/ð;&
ð< �c—g‘g˜h¨Ó+ð=&
ð> �c—g‘g˜h¨Ó+ð?&
ð@ �S—W‘W˜W bÓ)ðA&
ðB �c—g‘g˜h¨Ó+ðC&
ðD  §¡Ð(:¸BÓ ?ðE&
ðH ˜#Ÿ'™' ,°Ó3ñI&
ðJ ˜#Ÿ'™' ,°Ó3ñK&
ð &	
ùò% Oøô
 œ:Ð&ò 	7Ü×/Ñ/°Ó6‹Eð	7ús   Á0N=Â#O Ï$O*Ï)O*c                 ó¶   — | s|sy i }i }| r| |d<   | › d�|d<   |r||d<   |› d�|d<   g }|r|j                  d|i«       |r|j                  d|i«       |sy d|iS )Nú$gtez	T00:00:00ú$ltezT23:59:59.999999rÇ  r   r   )rv   )rX  rY  Údate_conditionÚcreated_at_conditionÚor_conditionss        r    rQ  zOrderModel._build_date_filter‹  s—   € á¡ØàˆØ!ÐáØ%.ˆN˜6Ñ"Ø.7¨[¸	Ð+BÐ  Ñ(áØ%,ˆN˜6Ñ"Ø.5¨YÐ6FÐ+GÐ  Ñ(àˆáØ× Ñ  &¨.Ð!9Ô:áØ× Ñ  +Ð/CÐ!DÔEáØà�}Ð%Ð%r"   ÚdateFromÚdateToc           	      ó  — | st        d«      ‚t        |d«      }t        |d«      }d| ig}|r'|ddœ}|j                  dd|id|id	|id
|id|igi«       |rE|dk7  r@t        j	                  |«      r|j                  ddddgii«       n|j                  d|i«       t        j                  ||«      }	|	r|j                  |	«       t        |«      dk(  r|d   nd|i}
t        j                  |
«      }|dkD  rt        j                  ||z  «      nd}|dz
  |z  }t        j                  |
«      j                  ddg«      j                  |«      j                  |«      }|D �cg c]  }t        j                  |«      ‘Œ }}|||||dœS c c}w )NúMissing id_khach_hangrf   r   rb   rc   r   r   r   rü   rE  r4   ÚAllr   rD  rƒ   r„   r   rC  rI  ©rÇ  rJ  ©rÒ   rG   r;  rL  rM  )rL   rO  rv   r   rŠ   rQ  rÍ   r  rP  rR  rS  rj   rT  rU  rV  rÔ  )r   r`   r   rà  rá  r;  r<  r^  ro   rb  rc  Útotal_itemsrd  rU  re  r:   r   s                    r    Úget_all_orderszOrderModel.get_all_orders¨  sÂ  € ñ ÜÐ4Ó5Ð5ä�4˜‹|ˆÜ˜	 1Ó%ˆ	à&¨Ð6Ð7ˆ
áØ&°CÑ8ˆEØ×ÑàØ" EÐ*Ø˜u˜Ø# UÐ+Ø(¨%Ð0Ø# UÐ+ððô
ñ �f ’oÜ×-Ñ-¨fÔ5Ø×!Ñ! 8¨e°jÀ+Ð5NÐ-OÐ"PÕQà×!Ñ! 8¨VÐ"4Ô5ä ×3Ñ3°H¸fÓEˆÙØ×Ñ˜kÔ*ä!$ Z£°AÒ!5�
˜1’¸FÀJÐ;Oˆä'×7Ñ7¸Ó>ˆØ<GÈ!ºO”d—i‘i ¨iÑ 7Ô8ÐQRˆØ�q‘˜IÑ%ˆô ×"Ñ" 5Ó)ß‰TÐ$ lÐ3Ó4ß‰T�$‹Zß‰U�9Óð	 	ð CIÖI¸3”*×1Ñ1°#Õ6ÐIˆÐIð Ø ØØ!Ø%ñ
ð 	
ùò Js   ÅFc                 ó˜   — t         j                  t        j                  | |«      «      }|st	        d«      ‚t        j                  |«      S ©Nri  )r  rj  r   r!   rL   rÙ  )r   r   Úorders      r    Úget_order_detailzOrderModel.get_order_detailé  s?   € ä!×*Ñ*¬:×+BÑ+BÀ8È]Ó+[Ó\ˆáÜÐ.Ó/Ð/ä×0Ñ0°Ó7Ð7r"   Úupdate_datac                 ó’  — t         j                  t        j                  | |«      «      }|st	        d«      ‚|j                  d«      dvrt	        d«      ‚i }t        j                  |«      }t        |j                  dg «      t        «      rt        |j                  dg «      «      ng }d|v rv|j                  d«      xs i }|j                  d|d   «      |j                  d|d   «      |j                  d	|d	   «      i |d
   ¥|j                  d
«      xs i ¥dœ}|}||d<   g }	d|v r:t        j                  |d   «      \  }
}	|
}|
|d<   t        j                  |
«      |d<   t        j                  i |¥||dœ¥«      }|	r3|D �cg c]  }|j                  d«      dvr|‘Œ }}|j                  |	«       |j                  t        j                  |«      «       |r,t         j                  t        j                  | |«      d|i«       t         j                  t        j                  | |«      «      }t        j!                  |«      S c c}w )Nri  r   ©r&  rŽ   z/Only Unpaid or Processing orders can be updatedrF   r4   r5   r6   r7   r1   r8   rG   )r4   rF   r„  >   r°  r±  ú$set)r  rj  r   r!   rL   r/   r;   r-   rC   r–  rI   rÄ  rÃ  ÚupdaterÑ   Ú
update_onerÙ  )r   r   rí  rë  ÚpayloadÚcandidate_customerÚcandidate_itemsÚincoming_customerÚmerged_customerr“  Úprepared_itemsÚvalidation_errorsÚerrÚupdated_orders                 r    Úupdate_orderzOrderModel.update_orderò  sh  € ä!×*Ñ*¬:×+BÑ+BÀ8È]Ó+[Ó\ˆÙÜÐ.Ó/Ð/à�9‰9�XÓÐ&>Ñ>ÜÐNÓOÐOàˆÜ'×;Ñ;¸EÓBÐÜ:DÀUÇYÁYÈwÐXZÓE[Ô]aÔ:bœ$˜uŸy™y¨°"Ó5Ô6Ðhjˆà˜Ñ$Ø +§¡°
Ó ;Ò A¸rÐð *×-Ñ-¨fÐ6HÈÑ6PÓQØ*×.Ñ.¨wÐ8JÈ7Ñ8SÓTØ*×.Ñ.¨wÐ8JÈ7Ñ8SÓTðØ(¨Ñ3ðà(×,Ñ,¨YÓ7Ò=¸2ðñ	ˆOð "1ÐØ"1ˆG�JÑàˆà�kÑ!Ü,6×,QÑ,QÐR]Ð^eÑRfÓ,gÑ)ˆN˜MØ,ˆOØ-ˆG�GÑÜ)×:Ñ:¸>ÓJˆG�GÑä&×BÑBð D
ØðD
à*Ø$òD
ó Ðñ à0ö!ØØ—7‘7˜8Ó$Ð,RÑRò ð!Ðð !ð ×$Ñ$ ]Ô3à�‰”z×4Ñ4Ð5FÓGÔHáÜ×(Ñ(Ü×'Ñ'¨°-Ó@Ø˜Ð!ôô
 *×2Ñ2´:×3JÑ3JÈ8ÐUbÓ3cÓdˆÜ×0Ñ0°Ó?Ð?ùò!s   ÆIÚamountc                 ó~  — dt        j                  «       j                  d d j                  «       › �}t	        j
                  t        «      }t        | j                  d«      xs$ | j                  d«      xs | j                  d«      «      }t        j                  | j                  d«      «      }d}|rM|j                  dd	«      › d
|j                  dd	«      › �j                  «       xs |j                  dd	«      xs d}||dd|d›�|dd|› d�|dd | j                  dd	«      |dœ}t        j                  |«       |S )NúTX-rå   r   r   re   r   úUnknown UserrR   r$   rS   rT   r7   ÚDepositú+$ú,.2fÚ	Completedõ   HoÃ n tiá»�n Ä‘Æ¡n hÃ ng u    (user huá»·)úBalance Refund©r   rÇ  Útyperý  ÚnumericAmountr   Ú	reasonKeyÚreferenceIdÚpaymentMethodÚ
receiptUrlr   Úten_khach_hang©r  r	  r
  Úupperr
   r  r  r0   r/   r   r\   rU   r   r  ©r­   rý  Útx_idÚnow_vnÚ	order_refÚcustomer_docr  Únew_docs           r    Ú_create_user_refund_transactionz*OrderModel._create_user_refund_transaction/  s?  € à”d—j‘j“l×&Ñ& r¨Ð*×0Ñ0Ó2Ð3Ð4ˆÜ—‘œeÓ$ˆÜ˜	Ÿ™ iÓ0Ò_°I·M±MÀ$Ó4GÒ_È9Ï=É=ÐY^ÓK_Ó`ˆ	ä ×/Ñ/°	·±¸oÓ0NÓOˆØ'ˆáà×#Ñ# K°Ó4Ð5°Q°|×7GÑ7GÈ
ÐTVÓ7WÐ6XÐY×_Ñ_Óaò "Ø×#Ñ# G¨RÓ0ò"à!ð ð ØØØ˜6 $˜-Ð(Ø#Ø!Ø4°Y°K¸}ÐMØ$Ø-ØØ&Ÿ]™]¨?¸BÓ?Ø,ñ
ˆô 	 ×*Ñ*¨7Ô3Øˆr"   Úcancel_reasonc                 óÀ  — t         j                  t        j                  | |«      «      }|st	        d«      ‚|j                  d«      }|dvrt	        d«      ‚t        j                  «       j                  «       }|j                  «       xs d}d}d }d}|dk(  rlt        j                  |«       t         j                  i t        j                  | |«      ¥ddi¥«      }	|	j                  d	k7  rt	        d
«      ‚dddddddd|d|dœS t        |j                  d«      xs d«      j                  «       }
|
st	        d«      ‚t        j                  |«      }|dk  rt	        d«      ‚	 t        j                   |
|«      }|st	        d«      ‚d}t        j#                  ||«      }t         j%                  i t        j                  | |«      ¥ddi¥ddd||d|d||ddd||t        j                  «       j                  «       dœi«      }	|	j&                  d	k7  rt	        d«      ‚t         j                  t        j                  | |«      «      }t        j                  |«       ddd||dd|d|dœ
S # t(        $ ro}|r'	 t        j*                  |
|«       n# t(        $ r Y nw xY w|r(	 t-        j                  d|i«       n# t(        $ r Y nw xY wt	        dt        |«      › �«      ‚d }~ww xY w)Nri  r   rï  z%This order can no longer be canceled.zCanceled by customerr=   Fr&  rf   zOrder could not be deletedTr   r$   rƒ   r]   )ÚcanceledÚ	cancelledÚdeletedÚhiddenFromUserr�   r�   r   r€   rÈ  rŒ   rÊ  r   úMissing customer id for refundúInvalid refund amountú)Refund failed while updating user balancerŽ   rð  )r   r€   ÚcanceledByUserIdrÈ  rŒ   rÊ  r�   ÚcancelledByUserIdrÉ  r�   r  ÚhiddenFromUserAtr�   r�   Ú
refundedAtúOrder could not be cancelled)
r  r  r  r�   r�   r   r€   rÈ  rŒ   rÊ  r   zCancel refund failed: )r  rj  r   r!   rL   r/   r
   rÎ   rÏ   rU   r¸   Ú
delete_oneÚdeleted_countr0   rM   r   Úadd_balancer  rò  Úmodified_countrk  Údeduct_balancer   )r   r   r  rë  Úcurrent_statusÚcanceled_atr”   r•   Úbalance_refundedrx   rY   Ú	refund_okrû  Úes                 r    Úcancel_orderzOrderModel.cancel_orderQ  s+  € ä!×*Ñ*¬:×+BÑ+BÀ8È]Ó+[Ó\ˆáÜÐ.Ó/Ð/àŸ™ 8Ó,ˆàÐ!9Ñ9ÜÐDÓEÐEä—o‘oÓ'×1Ñ1Ó3ˆØ%×+Ñ+Ó-ÒGÐ1GˆàˆØˆØ Ðà˜XÒ%ä×3Ñ3°EÔ:ä&×1Ñ1ðÜ ×-Ñ-¨h¸ÓFðà˜hñóˆFð ×#Ñ# qÒ(Ü Ð!=Ó>Ð>ð !Ø!ØØ"&Ø !Ø Ø$Ø$Ø)Ø&.Ø -ñð ô �e—i‘i Ó0Ò6°BÓ7×=Ñ=Ó?ˆÙÜÐ=Ó>Ð>ä"×7Ñ7¸Ó>ˆØ˜AÒÜÐ4Ó5Ð5ðC	@Ü!×-Ñ-¨g°}ÓEˆIÙÜ Ð!LÓMÐMà#ÐÜ%×EÑEÀeÈ]Ó[ˆLä&×1Ñ1ðÜ ×-Ñ-¨h¸ÓFðà˜lñð
 Ø",Ø&,Ø,9Ø&1Ø.:Ø(5Ø'-Ø-:Ø'2Ø/;Ø*/Ø,.Ø(5Ø&2Ü&.§o¡oÓ&7×&AÑ&AÓ&CñðóˆFð4 ×$Ñ$¨Ò)Ü Ð!?Ó@Ð@ä-×6Ñ6´z×7NÑ7NÈxÐYfÓ7gÓhˆMÜ×3Ñ3°MÔBð !Ø!Ø"'Ø -Ø*Ø$Ø$Ø)Ø&2Ø -ñð øô ò 	@áðÜ×,Ñ,¨W°mÕDøÜ ò Ùðúñ ðÜ+×6Ñ6¸¸lÐ7KÕLøÜ ò Ùðúô Ð5´c¸!³f°XÐ>Ó?Ð?ûð	@úsa   Å#DI% É%	KÉ.KÉ1JÊKÊ	JÊKÊJÊKÊJ2Ê1KÊ2	J>Ê;KÊ=J>Ê>KËKc                  ó.   — ddl m}  | j                  «       S )Nr   ©ÚTierSettingsModel)Úmodel.tier_settings_modelr3  Úget_settingsr2  s    r    Ú_get_tier_settingszOrderModel._get_tier_settingsÒ  s   € å?Ø ×-Ñ-Ó/Ð/r"   Útiersc           
      óø   — | xs g D �ci c]f  }t        |j                  d«      xs d«      j                  «       r8t        |j                  d«      xs d«      t        |j                  dd«      «      “Œh c}S c c}w )NÚcoder$   rë  r   )r0   r/   rU   r  )r7  rH   s     r    Ú_tier_rank_mapzOrderModel._tier_rank_map×  so   € ð š ö
àÜ�4—8‘8˜FÓ#Ò) rÓ*×0Ñ0Ô2ô �—‘˜Ó Ò& BÓ'¬¨T¯X©X°g¸qÓ-AÓ)BÑBò
ð 	
ùò 
s   ‰A+A7Úpaid_qtyÚdefault_tierc                 ó¶   — |}t        |xs g d„ ¬«      }|D ]?  }| t        |j                  dd«      «      k\  sŒ"t        |j                  d«      xs |«      }ŒA |S )Nc                 ón   — t        | j                  dd«      «      t        | j                  dd«      «      fS )Nrë  r   Ú
minPaidQty)r  r/   ©Úxs    r    ú<lambda>z8OrderModel._resolve_tier_from_paid_qty.<locals>.<lambda>ä  s+   € œ3˜qŸu™u W¨aÓ0Ó1´3°q·u±u¸\È1Ó7MÓ3NÐO€ r"   ©r²   r?  r   r9  )r³  r  r/   r0   )r;  r7  r<  ÚmatchedÚsorted_tiersrH   s         r    Ú_resolve_tier_from_paid_qtyz&OrderModel._resolve_tier_from_paid_qtyß  sc   € àˆÜØŠK�RÙOô
ˆð
 !ò 	;ˆDØœ3˜tŸx™x¨°aÓ8Ó9Ó9Ü˜dŸh™h vÓ.Ò9°'Ó:‘ð	;ð ˆr"   Útier_aÚtier_bc                 ó~   — t         j                  |«      }|j                  | d«      |j                  |d«      k\  r| S |S ©Nr   )r   r:  r/   )rG  rH  r7  Úrank_maps       r    Ú_higher_tierzOrderModel._higher_tierí  s;   € ä×,Ñ,¨UÓ3ˆØ!Ÿ™ f¨aÓ0°H·L±LÀÈÓ4KÒKˆvÐWÐQWÐWr"   r·  rx  ry  Ú	tier_codec           
      ó–  — | j                  d«      xs g }d }d }t        j                  |«      }t        j                  |«      }t        j                  |«      }	|D ]�  }
t        j                  |
j                  d«      «      }t        j                  |
j                  d«      «      }t        j                  t        j                  |
«      «      }||k(  sŒy||k(  sŒ|xs |
}|	sŒˆ||	k(  sŒŽ|
} n |xs |}|s&t	        d| j                  d«      › d|› d|› d|› �«      ‚t        |j                  d	| j                  d	d
«      «      xs d
«      S )Nrs  rx  ry  u-   KhÃ´ng tÃ¬m tháº¥y price variant cho product=r‡  z style=z, size=z, tier=r?   r   )r/   r   r™   rŸ   rL   rD   )r·  rx  ry  rM  rs  Úexact_matchÚfallback_matchrz  r{  r|  rš   r  r€  r�  Úchosens                  r    Ú_find_variant_price_for_tierz'OrderModel._find_variant_price_for_tierò  sX  € à—?‘? :Ó.Ò4°"ˆàˆØˆä%×=Ñ=¸eÓDÐÜ$×<Ñ<¸TÓBˆÜ$×<Ñ<¸YÓGˆàò 		ˆGÜ&×>Ñ>¸w¿{¹{È7Ó?SÓTˆMÜ%×=Ñ=¸g¿k¹kÈ&Ó>QÓRˆLÜ%×=Ñ=¼j×>ZÑ>ZÐ[bÓ>cÓdˆLàÐ 0Ó0°\À_Ó5TØ!/Ò!:°7�Ú" |°Ó'FØ")�KÙð		ð Ò. ˆÙÜØ?ÀÇÁÐP[Ó@\Ð?]Ð]dÐejÐdkÐkrÐswÐrxÐxð  AJð  @Kð  Lóð ô �V—Z‘Z ¨¯©¸À!Ó)DÓEÒJÈÓKÐKr"   Úrunning_paid_qtyÚbaseline_tierc           	      ó$  — t        | j                  d«      xs d«      j                  «       }t        j                  d|i«      }|st        d|› �«      ‚t        t        | j                  dd«      xs d«      «      }|dk  rg |fS t        |xs |xs d«      j                  «       }g }d }	t        |«      D ]Ã  }
|dz   }t        j                  |||«      }t        j                  |||«      }t        j                  || j                  dd«      | j                  d	d«      |¬
«      }|	r0|	d   |k(  r(t        |	d   «      t        |«      k(  r|	dxx   dz  cc<   n|	r|j                  |	«       i | ¥d|||dœ¥}	|dz  }ŒÅ |	r|j                  |	«       ||fS )Nr‡  r$   u    KhÃ´ng tÃ¬m tháº¥y sáº£n pháº©m r>   r   ÚSilverrf   rx  ry  )r·  rx  ry  rM  r¢   r?   )r>   r?   r¢   rœ   )r0   r/   rU   r   rj  rL   r  rD   Úranger   rF  rL  rR  rv   )rH   rS  rT  r7  r<  r´  r·  ÚqtyÚsegmentsÚcurrent_segmentræ   Úqty_after_this_itemÚcurrent_month_tierÚeffective_tierÚ
unit_prices                  r    Ú_expand_item_with_dynamic_tierz)OrderModel._expand_item_with_dynamic_tier  sÌ  € ô ˜Ÿ™ +Ó.Ò4°"Ó5×;Ñ;Ó=ˆ
Ü)×2Ñ2°KÀÐ3LÓMˆÙÜÐ?À
¸|ÐLÓMÐMä”%˜Ÿ™ ¨QÓ/Ò4°1Ó5Ó6ˆØ�!Š8ØÐ'Ð'Ð'ä˜MÒE¨\ÒE¸XÓF×LÑLÓNˆàˆØˆä�s“ò -	"ˆAØ"2°QÑ"6Ðô ",×!GÑ!GØ#ØØó"Ðô (×4Ñ4ØØ"ØóˆNô $×@Ñ@Ø'Ø—h‘h˜w¨Ó+Ø—X‘X˜f bÓ)Ø(ð	 Aó ˆJñ  Ø# MÑ2°nÒDÜ˜/¨'Ñ2Ó3´u¸ZÓ7HÒHà 
Ó+¨qÑ0Ô+á"Ø—O‘O OÔ4ð#Øð#à !Ø'Ø#1Ø*ò#�ð  Ñ!Ñð[-	"ñ^ Ø�O‰O˜OÔ,àÐ)Ð)Ð)r"   Ú
order_docsc           
      ó¢  — t         j                  «       }|j                  dg «      }|j                  dd«      }t        j                  |«      }t        |j                  d«      xs |j                  d«      xs |«      j                  «       }t        |j                  d«      xs |xs |«      j                  «       }t        |j                  d«      xs d«      }|}	g }
d}| D ]Ù  }g }|j                  d	g «      xs g }|D ]R  }t         j                  |||||¬
«      \  }}d}|D ],  }t        |«      }|s
d|d<   d|d<   d}|j                  |«       Œ. ŒT t         j                  |«      }||z  }|
j                  t        |d   «      |j                  d«      xs |j                  d«      |t        |d«      dœ«       ŒÛ |
t        |d«      |||	dœS )Nr7  ÚdefaultTierrV  ÚbaselineTierÚtierCurrentÚcurrentMonthPaidQtyr   r=   rF   )rH   rS  rT  r7  r<  Tr@   rA   Fre   r   r   rB   )r3  r   rF   rG   )r   ÚtotalAmountrc  ÚtierBeforePaymentÚ currentMonthPaidQtyBeforePayment)r   r6  r/   r   Úget_tier_snapshotr0   rU   r  r_  r.   rv   rI   rE   )r`  rY   Úsettingsr7  r<  ÚsnapshotrT  Útier_before_paymentrS  Ú%current_month_paid_qty_before_paymentÚquoted_ordersÚgrand_totalr­   Úpriced_itemsrq  rH   rY  Úfirst_segmentÚsegmentÚclonedÚorder_totals                        r    Ú_build_payment_quotezOrderModel._build_payment_quoteZ  s  € ä×0Ñ0Ó2ˆØ—‘˜W bÓ)ˆØ—|‘| M°8Ó<ˆä×.Ñ.¨wÓ7ˆäØ�L‰L˜Ó(ò Ø�|‰|˜MÓ*òàó
÷ ‰%‹'ð	 	ô "Ø�L‰L˜Ó'ò Øòàó
÷ ‰%‹'ð	 	ô ˜xŸ|™|Ð,AÓBÒGÀaÓHÐØ0@Ð-àˆØˆà#ò 	ˆIØˆLØ!Ÿ™ g¨rÓ2Ò8°bˆIà!ò 0�Ü-7×-VÑ-VØØ%5Ø"/ØØ!-ð .Wó .Ñ*�Ð*ð !%�Ø'ò 0�GÜ! '›]�FÙ(Ø-.˜˜zÑ*Ø()˜˜u™Ø$)�MØ ×'Ñ'¨Õ/ñ0ð0ô$ %×5Ñ5°lÓCˆKØ˜;Ñ&ˆKà× Ñ Ü˜Y uÑ-Ó.Ø$Ÿ=™=¨Ó3ÒJ°y·}±}ÀTÓ7JØ%Ü˜{¨AÓ.ñ	"õ ð3	ðB $Ü  ¨aÓ0Ø)Ø!4Ø0Uñ
ð 	
r"   Ú	order_idsc                 ó–
  — |st        d«      ‚|ddd| iidd| iigdœ}t        t        j                  |«      «      }|j	                  d„ ¬«       |st        d	«      ‚g }|D �]  }t        |j                  d
«      «      }|rŒ!t        j                  |«      }t        j                  |«      }t        |j                  d«      «      |d   k7  xs5 |j                  dd«      |d   k7  xs t        j                  |«      |d   k7  }	|	rt        j                  d|d   id|i«       |d   sŒÇ|j                  t        |j                  d«      xs$ |j                  d«      xs |j                  d«      «      «       �Œ |r t        ddj                  |«      z   dz   «      ‚t        j                   |«      }
|
st        d«      ‚|D �cg c]  }|j                  d
«      sŒ|‘Œ }}|D �cg c]  }|j                  d
«      rŒ|‘Œ }}t#        d„ |D «       «      }|rt        j%                  ||«      ndg dœ}|d   }t'        ||z   d«      }|dk  rt        d«      ‚t        j(                  ||«       g }d}	 |D ]™  }t'        t+        |j                  d«      xs d«      d«      }t        j                  |d   ddœddddddg ddd œi«      }|j,                  d!k(  sŒb|j                  |j                  d«      xs |j                  d«      «       ||z  }Œ› |d"   D �ci c]  }|d#   |“Œ
 }}|D ]¸  }t        |d   «      }|j                  |«      }|st        d$|› �«      ‚t        j                  |d   ddœd|d%   |d   dddddg ddd&œ
i«      }|j,                  d!k(  sŒq|j                  |j                  d«      xs |j                  d«      «       |t+        |d   xs d«      z  }Œº 	 t'        |d«      }|s!t        j0                  ||«       t        d(«      ‚t'        ||z
  d«      }|dkD  rt        j0                  ||«       t        j2                  |«      }|
j                  d)d«      › d*|
j                  d+d«      › �j5                  «       xs |
j                  d,d«      xs d-}	 t7        j8                  ||||¬.«       t=        |«      ||d0   d1œS c c}w c c}w c c}w # t.        $ rF}t'        ||z
  d«      }|dkD  rt        j0                  ||«       t        d't        |«      › �«      ‚d }~ww xY w# t.        $ r}t;        d/|› �«       Y d }~Œ�d }~ww xY w)2Nrã  r&  r   rD  r   )rÿ   r   r   c                 ó¾   — t        | j                  d«      xs d«      t        | j                  d«      xs$ | j                  d«      xs | j                  d«      «      fS ©Nr   r$   r   r   re   ©r0   r/   ©r:   s    r    rB  z'OrderModel.pay_orders.<locals>.<lambda>¬  óJ   € Ü�C—G‘G˜KÓ(Ò.¨BÓ/Ü�C—G‘G˜IÓ&ÒI¨#¯'©'°$«-ÒI¸3¿7¹7À5»>ÓJð€ r"   rC  ú"No unpaid orders found for paymentr÷   rÇ   rÊ   r$   rÁ   re   rð  õd   KhÃ´ng thá»ƒ thanh toÃ¡n vÃ¬ cÃ³ Ä‘Æ¡n Ä‘ang bá»‹ lá»—i hoáº·c sáº£n pháº©m khÃ´ng cÃ²n há»£p lá»‡: ú, õ2   . Vui lÃ²ng chá»‰nh sá»­a Ä‘Æ¡n rá»“i thá»­ láº¡i.úUser not foundc              3   ól   K  — | ],  }t        t        |j                  d «      xs d«      d«      –— Œ. y­w)rG   r   rB   N)rE   rD   r/   )r›  r:   s     r    rœ  z(OrderModel.pay_orders.<locals>.<genexpr>Ý  s/   è ø€ ò 
Ø7:ŒE”%˜Ÿ™ Ó(Ò-¨AÓ.°×2ñ
ùs   ‚24r=   )rf  r   rf  rB   r   u=   KhÃ´ng tÃ¬m tháº¥y tá»•ng tiá»�n há»£p lá»‡ Ä‘á»ƒ thanh toÃ¡nrG   ©re   r   rŽ   F)r   rÇ   rÈ   rÉ   rÊ   rÁ   rË   rÌ   rf   r   r3  u   Thiáº¿u quote cho order rF   )
rF   rG   r   rÇ   rÈ   rÉ   rÊ   rÁ   rË   rÌ   u   Thanh toÃ¡n tháº¥t báº¡i: u=   Thanh toÃ¡n tháº¥t báº¡i. Sá»‘ dÆ° Ä‘Ã£ Ä‘Æ°á»£c hoÃ n láº¡i.rR   rS   rT   r7   r   )r   r  rý  rv  u!   Lá»—i ghi transaction deduction: rd  )Ú	paidCountrf  rd  )rL   rC   r  rj   rT  r’   r/   r   rÄ  rÑ   rÂ   rò  rv   r0   Újoinr   r\   Úsumru  rE   r*  rD   r)  rk  r(  Úsync_user_tierrU   r   Úcreate_deduction_transactionÚprintrÍ   )rv  r   Ú
base_queryÚmatched_ordersÚblocked_order_idsr:   Úis_offer_orderrù  Úissue_stateÚshould_update_issuer]   Úoffer_ordersÚregular_ordersÚoffer_totalÚregular_quoteÚregular_totalÚpotential_totalÚpaid_ordersÚ
paid_totalrt  rx   rH   Ú	quote_mapÚdoc_idÚ	quote_docr/  r”   Útier_snapshotr  s                                r    Ú
pay_orderszOrderModel.pay_ordersœ  só  € áÜÐ4Ó5Ð5ð *Øà˜U IÐ.Ð/Ø˜˜yÐ)Ð*ðñ
ˆ
ô Ô/×4Ñ4°ZÓ@ÓAˆØ×Ññð 	ô 	
ñ ÜÐAÓBÐBàÐØ!ó 	eˆCä! #§'¡'¨,Ó"7Ó8ˆNÙØä *× FÑ FÀsÓ KÐÜ$×7Ñ7Ð8IÓJˆKô �S—W‘WÐ-Ó.Ó/°;Ð?OÑ3PÑPò [Ø—7‘7˜>¨2Ó.°+¸nÑ2MÑMò[ä×6Ñ6°sÓ;¸{È>Ñ?ZÑZð  ñ #Ü!×,Ñ,Ø˜C ™JÐ'Ø˜[Ð)ôð
 Ð+Ó,Ø!×(Ñ(¬¨S¯W©W°YÓ-?Ò-bÀ3Ç7Á7È4Ã=Ò-bÐTW×T[ÑT[Ð\aÓTbÓ)cÖdð-	eñ0 ÜØvØ—)‘)Ð-Ó.ñ/àFñGóð ô ×'Ñ'¨Ó6ˆÙÜÐ-Ó.Ð.ð (6ÖO ¸¿¹ÀÕ9NšÐOˆÐOØ)7ÖU #¸s¿w¹wÀ|Õ?Tš#ÐUˆÐUô ñ 
Ø>Jô
ó 
ˆñ
 [iœ
×7Ñ7¸ÈÔVð  Bð  NPñ  oQˆØ% mÑ4ˆä ¨mÑ ;¸QÓ?ˆà˜aÒÜÐ\Ó]Ð]ä× Ñ  °Ô@àˆØˆ
ð8	Dà#ò .�Ü#¤E¨#¯'©'°'Ó*:Ò*?¸aÓ$@À!ÓD�Ü*×5Ñ5Ø ™J°(Ñ;àØ&2Ø.3Ø)+Ø+-Ø,.Ø,.Ø*+Ø.0ñ	!ðó�ð ×(Ñ(¨AÓ-Ø×&Ñ& s§w¡w¨yÓ'9Ò'J¸S¿W¹WÀT»]ÔKØ +Ñ-‘Jð'.ð, :GÀxÑ9PÖQ°˜˜g™¨Ñ,ÐQˆIÐQØ%ò A�Ü˜S ™Z›�Ø%ŸM™M¨&Ó1�	Ù Ü$Ð'?À¸xÐ%HÓIÐIä*×5Ñ5Ø ™J°(Ñ;àØ%.¨wÑ%7Ø%.¨wÑ%7Ø&2Ø.3Ø)+Ø+-Ø,.Ø,.Ø*+Ø.0ñ!ðó�ð" ×(Ñ(¨AÓ-Ø×&Ñ& s§w¡w¨yÓ'9Ò'J¸S¿W¹WÀT»]ÔKØ¤%¨	°'Ñ(:Ò(?¸aÓ"@Ñ@‘Jñ3AôB ˜: qÓ)ˆ
áÜ×!Ñ! -°ÔAÜÐ\Ó]Ð]ä˜o°
Ñ:¸AÓ>ˆØ˜1ÒÜ×!Ñ! -°Ô?ä!×0Ñ0°Ó?ˆð �x‰x˜ RÓ(Ð)¨¨4¯8©8°JÀÓ+CÐ*DÐE×KÑKÓMò Ø�x‰x˜ Ó$òàð 	ð	;Ü×3Ñ3Ø+Ø-Ø!Ø%õ	ô ˜[Ó)Ø%Ø(¨Ñ7ñ
ð 	
ùòY PùÚUùòZ Røô8 ò 	DÜ! /°JÑ">ÀÓBˆMØ˜qÒ Ü×%Ñ% m°]ÔCÜÐ9¼#¸a»&¸ÐBÓCÐCûð		Dûô> ò 	;ÜÐ5°a°SÐ9×:Ñ:ûð	;úsk   ÇSÇSÇ"SÇ9SÉ-A#S ËAS ÌSÌA4S ÎA
S ÒT' ÓS Ó	T$ÓATÔT$Ô'	UÔ0UÕUc                 óž  — |st        d«      ‚|ddd| iidd| iigdœ}t        t        j                  |«      «      }|j	                  d„ ¬«       |st        d	«      ‚g }|D ]�  }t
        j                  |«      }t
        j                  |«      }|d
   sŒ3|j                  t        |j                  d«      xs$ |j                  d«      xs |j                  d«      «      «       Œƒ |r t        ddj                  |«      z   dz   «      ‚t        j                  |«      }|st        d«      ‚t
        j                  ||«      }	i |	¥dt        |«      i¥S )Nrã  r&  r   rD  r   )r   r   r   c                 ó¾   — t        | j                  d«      xs d«      t        | j                  d«      xs$ | j                  d«      xs | j                  d«      «      fS ry  rz  r{  s    r    rB  z)OrderModel.quote_orders.<locals>.<lambda>[  r|  r"   rC  r}  rÇ   re   r~  r  r€  r�  Ú
orderCount)rL   rC   r  rj   rT  r   rÄ  rÑ   rv   r0   r/   r…  r   r\   ru  rÍ   )
rv  r   rŠ  r‹  rŒ  r:   rù  rŽ  r]   r   s
             r    Úquote_orderszOrderModel.quote_ordersK  s}  € áÜÐ4Ó5Ð5ð +Øà˜U IÐ.Ð/Ø˜˜yÐ)Ð*ðñ
ˆ
ô Ô/×4Ñ4°ZÓ@ÓAˆØ×Ññð 	ô 	
ñ ÜÐAÓBÐBàÐØ!ò 	ˆCÜ *× FÑ FÀsÓ KÐÜ$×7Ñ7Ð8IÓJˆKàÐ+Ó,Ø!×(Ñ(Ü˜Ÿ™ 	Ó*ÒM¨c¯g©g°d«mÒM¸s¿w¹wÀu»~ÓNõð	ñ ÜØvØ—)‘)Ð-Ó.ñ/àFñGóð ô ×'Ñ'¨Ó6ˆÙÜÐ-Ó.Ð.ä×/Ñ/°ÀÓNˆð
Øð
àœ#˜nÓ-ñ
ð 	
r"   c                  óz   — dddg d¢iiddg d¢iidddddgiidd	d
diidd
diiddiddidddiidddd giigigigigS )Nr   r   rD  ©rŽ   r  r  r   r#  rC  rƒ   r„   r€   ú$ner]   r�   rŒ   rŽ   r�   r�   ú$gtr   r�   ú$ninr$   r   r   r"   r    Ú_admin_base_conditionsz!OrderModel._admin_base_conditions  s¨   € ð Ø Ò'YÐZÐ[Ø Ò'TÐUÐVàØ%¨°
¸KÐ/HÐ'IÐJà %Ø%1°E¸6°?Ð$CØ%2°U¸F°OÐ$DØ%9¸<Ð$HØ%:¸LÐ$IØ%3°e¸Q°ZÐ$@Ø%1°F¸RÀ¸JÐ3GÐ$Hð("ð	ð!ðððð
ð 	
r"   r+  c                 ó.   — dddœ}|j                  | «      S )Nr  r  r  ©r/   )r+  Úflows     r    Ú_allowed_next_statuszOrderModel._allowed_next_status™  s"   € ð %Ø!ñ
ˆð �x‰x˜Ó'Ð'r"   c                 ó~  — dt        j                  «       j                  d d j                  «       › �}t	        j
                  t        «      }t        | j                  d«      xs$ | j                  d«      xs | j                  d«      «      }t        j                  | j                  d«      «      }d}|rM|j                  dd	«      › d
|j                  dd	«      › �j                  «       xs |j                  dd	«      xs d}||dd|d›�|dd|› d�|dd | j                  dd	«      |dœ}t        j                  |«       |S )Nrÿ  rå   r   r   re   r   r   rR   r$   rS   rT   r7   r  r  r  r  r  u    (admin huá»·)r  r  r  r  s           r    Ú _create_admin_refund_transactionz+OrderModel._create_admin_refund_transaction¡  s?  € à”d—j‘j“l×&Ñ& r¨Ð*×0Ñ0Ó2Ð3Ð4ˆÜ—‘œeÓ$ˆÜ˜	Ÿ™ iÓ0Ò_°I·M±MÀ$Ó4GÒ_È9Ï=É=ÐY^ÓK_Ó`ˆ	ä ×/Ñ/°	·±¸oÓ0NÓOˆØ'ˆÙà×#Ñ# K°Ó4Ð5°Q°|×7GÑ7GÈ
ÐTVÓ7WÐ6XÐY×_Ñ_Óaò "Ø×#Ñ# G¨RÓ0ò"à!ð ð ØØØ˜6 $˜-Ð(Ø#Ø!Ø4°Y°K¸~ÐNØ$Ø-ØØ&Ÿ]™]¨?¸BÓ?Ø,ñ
ˆô 	 ×*Ñ*¨7Ô3Øˆr"   c                 óz  — t        |d«      }t        |d«      }t        j                  «       }| r�t        j                  | j                  «       «      }|ddœ}t        j                  | «      }	d|id|id|id|id|id	|id
|id|ig}
|	r|
j                  dd|	ii«       |j                  d|
i«       g d¢}|r•|dk7  r�||vrg d||ddœS t        j                  |«      r|j                  ddddgii«       n|j                  d|i«       t        j                  |«      r/|j                  ddddiidddiiddiddidddiidd d!d giigi«       t        j                  ||«      }|r|j                  |«       t        |«      dk(  r|d   nd"|i}t        j                  |«      }|dkD  rt        j                  ||z  «      nd}|dz
  |z  }t        j                  |«      j!                  d#d$g«      j#                  |«      j%                  |«      }i }|D �cg c]  }t        j'                  ||«      ‘Œ }}|||||dœS c c}w )%Nrf   rb   rc   r   r   rü   rý   rE  r4   rP   rQ   r   rD  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¥  r$   rC  rI  rå  )rO  r   r¦  rh   ri   rU   rs   rv   rŠ   rQ  rÍ   r  rP  rR  rS  rj   rT  rU  rV  rÔ  )r`   r   rà  rá  r;  r<  r^  Úescaped_keywordro   Úmatched_uploader_idsÚkeyword_conditionsÚallowed_admin_statusesrb  rc  rç  rd  rU  re  rÅ  r:   r   s                        r    Úadmin_get_all_orderszOrderModel.admin_get_all_ordersÂ  s³  € ô �4˜‹|ˆÜ˜	 1Ó%ˆ	ä×6Ñ6Ó8ˆ
áÜ Ÿi™i¨¯©«Ó8ˆOØ.¸CÑ@ˆEÜ#-×#KÑ#KÈGÓ#TÐ ð ˜EÐ"Ø�u�Ø˜UÐ#Ø! 5Ð)Ø  %Ð(Ø˜UÐ#Ø! 5Ð)Ø" EÐ*ð	"Ðñ $Ø"×)Ñ)¨?¸UÐDXÐ<YÐ*ZÔ[à×Ñ˜uÐ&8Ð9Ô:ò"
Ðñ
 �f ’oØÐ3Ñ3àØØ Ø )Ø"#ñð ô ×-Ñ-¨fÔ5Ø×!Ñ! 8¨e°jÀ+Ð5NÐ-OÐ"PÕQà×!Ñ! 8¨VÐ"4Ô5ä×-Ñ-¨fÔ5Ø×!Ñ!ØØ%¨¨v Ð7Ø&¨°¨Ð8Ø-¨|Ð<Ø.°Ð=Ø'¨%°¨Ð4Ø%¨°°T°
Ð';Ð<ðð	#ô 	ô !×3Ñ3°H¸fÓEˆÙØ×Ñ˜kÔ*ä!$ Z£°AÒ!5�
˜1’¸FÀJÐ;Oˆä'×7Ñ7¸Ó>ˆØ<GÈ!ºO”d—i‘i ¨iÑ 7Ô8ÐQRˆØ�q‘˜IÑ%ˆô ×"Ñ" 5Ó)ß‰TÐ$ lÐ3Ó4ß‰T�$‹Zß‰U�9Óð	 	ð ˆØRXÖYÈ3”*×1Ñ1°#°~ÕFÐYˆÐYð Ø ØØ!Ø%ñ
ð 	
ùò Zs   ÈH8c           	      óÄ  — t        |d«      }t        |d«      }t        j                  «       }g d¢}|r%|dk7  r ||vrg d||ddœS |j                  d|i«       n|j                  dd|ii«       | r�t	        j
                  | j                  «       «      }|dd	œ}	t        j                  | «      }
d
|	id|	id|	id|	id|	id|	id|	id|	ig}|
r|j                  dd|
ii«       |j                  d|i«       t        j                  ||«      }|r|j                  |«       t        |«      dk(  r|d   nd|i}t        j                  |«      }|dkD  rt        j                  ||z  «      nd}|dz
  |z  }t        j                  |«      j                  ddg«      j!                  |«      j#                  |«      }i }|D �cg c]  }t        j%                  ||«      ‘Œ }}|||||dœS c c}w )Nrf   ©rŽ   r  r  rä  r   ræ  r   rD  rb   rc   r   r   rü   rý   rE  r4   rP   rQ   r   r   rC  rI  rå  )rO  r   r¦  rv   rh   ri   rU   rs   rQ  rÍ   r  rP  rR  rS  rj   rT  rU  rV  rÔ  )r`   r   rà  rá  r;  r<  r^  Úallowed_image_statusesr®  ro   r¯  r°  rb  rc  rç  rd  rU  re  rÅ  r:   r   s                        r    Úadmin_get_image_search_ordersz(OrderModel.admin_get_image_search_orders!  s0  € ô �4˜‹|ˆÜ˜	 1Ó%ˆ	ä×6Ñ6Ó8ˆ
ò "GÐá�f ’oØÐ3Ñ3àØØ Ø )Ø"#ñð ð ×Ñ˜x¨Ð0Õ1à×Ñ˜x¨%Ð1GÐ)HÐIÔJáÜ Ÿi™i¨¯©«Ó8ˆOØ.¸CÑ@ˆEÜ#-×#KÑ#KÈGÓ#TÐ ð ˜EÐ"Ø�u�Ø˜UÐ#Ø! 5Ð)Ø  %Ð(Ø˜UÐ#Ø! 5Ð)Ø" EÐ*ð	"Ðñ $Ø"×)Ñ)¨?¸UÐDXÐ<YÐ*ZÔ[à×Ñ˜uÐ&8Ð9Ô:ä ×3Ñ3°H¸fÓEˆÙØ×Ñ˜kÔ*ä!$ Z£°AÒ!5�
˜1’¸FÀJÐ;Oˆä'×7Ñ7¸Ó>ˆØ<GÈ!ºO”d—i‘i ¨iÑ 7Ô8ÐQRˆØ�q‘˜IÑ%ˆô ×"Ñ" 5Ó)ß‰TÐ$ lÐ3Ó4ß‰T�$‹Zß‰U�9Óð	 	ð ˆØRXÖYÈ3”*×1Ñ1°#°~ÕFÐYˆÐYð Ø ØØ!Ø%ñ
ð 	
ùò Zs   Æ6GÚmatchesc                 ó¶  — t        t        |xs d«      d«      }t        t        |xs d«      d«      }g }i }| xs g D ]c  }	t        |	j                  d«      «      }
|
sŒ t	        |	j                  d«      xs d«      }|
|vs	|||
   kD  sŒK|||
<   |j                  |
|dœ«       Œe |sg d||ddœS |D �	cg c]  }	|	d   ‘Œ	 }}	t        j                  «       }g d¢}|r%|d	k7  r ||vrg d||ddœS |j                  d
|i«       n|j                  d
d|ii«       g }|D ]C  }
t        j                  |
«      ddœ}|j                  d|id|id|id|id|id|id|id|ig«       ŒE |j                  d|i«       |r�t        j                  |j                  «       «      }|ddœ}t        j                  |«      }d|id|id|id|id|id|id|id|ig}|r|j                  dd|ii«       |j                  d|i«       t        j                  ||«      }|r|j                  |«       t        |«      dk(  r|d   nd |i}t        t         j#                  |«      «      }i }g }|D ]¦  }d!}d"}|j                  d#g «      xs g D ]K  }	t%        |	t&        «      sŒd$D ]3  }t        |	j                  |«      «      }
|
|v sŒ"|r	||
   |kD  sŒ-|
}||
   }Œ5 ŒM |sŒnt        j)                  ||«      }||d%<   d&|› �|d'<   ||d(<   |j                  |«       Œ¨ |j+                  d)„ d*¬+«       t        |«      }|dkD  rt-        j.                  ||z  «      nd}|dz
  |z  } | |z   }!|| |! ||||dœS c c}	w ),Nrf   r1  r³   Úscorer   )r³   r¹  ræ  r´  rä  r   rD  rb   rc   zitems.designLocalzitems.designFilezitems.designUrlzitems.designzitems.designOriginalzitems.designDrivezitems.imagezitems.imageUrlr   r   r   rü   rý   rE  r4   rP   rQ   r   rC  r$   r=   rF   )r«   r¯   r°   r¨   r¦   r§   rÖ  r×  ÚmatchedFileNamez/pod-api/design/rÍ  Ú
matchScorec                 ó&   — | j                  dd«      S )Nr»  r   r¨  )rH   s    r    rB  z?OrderModel.admin_get_orders_by_visual_matches.<locals>.<lambda>ü  s   €  4§8¡8¨L¸!Ó#<€ r"   T©r²   Úreverse)rO  r  r   r/   rD   rv   r   r¦  rh   ri   rÃ  rU   rs   rQ  rÍ   rC   r  rj   r-   r.   rÔ  rT  rR  rS  )"r·  r`   r   rà  rá  r;  r<  Úclean_matchesÚscore_by_filerH   r³   r¹  r·   r^  rµ  Úfile_conditionsro   r®  r¯  r°  rb  rc  ÚdocsrÅ  Úrowsr:   Úmatched_fileÚmatched_scorer²   rŠ  rç  rd  rÞ   Úends"                                     r    Ú"admin_get_orders_by_visual_matchesz-OrderModel.admin_get_orders_by_visual_matchesq  sN  € ô ”3�t’y˜q“> 1Ó%ˆÜœ˜IšO¨Ó,¨aÓ0ˆ	àˆØˆà’M˜rò 	ˆDÜ0°·±¸+Ó1FÓGˆIÙØä˜$Ÿ(™( 7Ó+Ò0¨qÓ1ˆEØ Ñ-°¸ÀyÑ9QÓ1QØ+0�˜iÑ(Ø×$Ñ$Ø!*Ø"ñ&õ ð	ñ àØØØ%Øñð ð 5BÖB¨D�d˜;Ó'ÐBˆ
ÐBä×6Ñ6Ó8ˆ
ò "GÐá�f ’oØÐ3Ñ3àØØ Ø )Ø"#ñð ð ×Ñ˜x¨Ð0Õ1à×Ñ˜x¨%Ð1GÐ)HÐIÔJàˆØ#ò 	ˆIÜ!Ÿy™y¨Ó3ÀÑEˆEØ×"Ñ"Ø$ eÐ,Ø# UÐ+Ø" EÐ*Ø Ð'Ø'¨Ð/Ø$ eÐ,Ø Ð&Ø! 5Ð)ð	$õ 	ð	ð 	×Ñ˜5 /Ð2Ô3áÜ Ÿi™i¨¯©«Ó8ˆOØ.¸CÑ@ˆEÜ#-×#KÑ#KÈGÓ#TÐ ð ˜EÐ"Ø�u�Ø˜UÐ#Ø! 5Ð)Ø  %Ð(Ø˜UÐ#Ø! 5Ð)Ø" EÐ*ð	"Ðñ $Ø"×)Ñ)¨?¸UÐDXÐ<YÐ*ZÔ[à×Ñ˜uÐ&8Ð9Ô:ä ×3Ñ3°H¸fÓEˆÙØ×Ñ˜kÔ*ä!$ Z£°AÒ!5�
˜1’¸FÀJÐ;OˆäÔ%×*Ñ*¨5Ó1Ó2ˆàˆØˆàò 	ˆCØˆLØˆMàŸ™ ¨Ó,Ò2°ò E�Ü! $¬Ô-Øð	ò E�Cô !9¸¿¹À#»Ó G�IØ  MÒ1Ù+¨}¸YÑ/GÈ-Ó/WØ+4˜LØ,9¸)Ñ,D™MñEð	Eñ(  Øä×1Ñ1°#°~ÓFˆCØ%1ˆCÐ!Ñ"Ø$4°\°NÐ"CˆC�ÑØ -ˆC�ÑØ�K‰K˜Õð?	ðB 	�	‰	Ñ<Àdˆ	ÔKä˜$“iˆØ<GÈ!ºO”d—i‘i ¨iÑ 7Ô8ÐQRˆØ˜‘˜YÑ&ˆØ�iÑˆð ˜˜s�OØ ØØ!Ø%ñ
ð 	
ùòY Cs   Â1MÚ	salesPageÚsalesPageSizeÚsalesSortByÚsalesSortOrderc                 ó  — t        dt        |«      «      }t        dt        dt        |«      «      «      }t        |xs d«      j	                  «       }t        |xs d«      j	                  «       j                  «       }|dvrd}|dvrd}t        j                  | |«      }ddg d	¢iig}ddg d	¢iig}|r"|j                  |«       |j                  |«       t        |«      dk(  r|d
   nd|i}	t        |«      dk(  r|d
   nd|i}
d}i }i }t        j                  |	dddœ«      }|D �]J  }|t        j                  |«      z  }|j                  dg «      }t        |t        «      sŒ?|D �]  }t        |t         «      sŒt        j#                  |j                  d«      d
«      }|d
k  rŒ@t        j%                  |j                  d«      d
«      }t        j%                  |j                  d«      d
«      }t        j%                  |j                  d«      d
«      }t'        ||z   |z   |z  d«      }t        j)                  ||«      }||vr	|d
ddœ||<   ||   dxx   |z  cc<   ||   dxx   |z  cc<   �Œ	 �ŒM g }|j+                  «       D ]3  }|j                  |d   t        |d   «      t'        |d   d«      dœ«       Œ5 |dk(  r|j-                  d„ |dk(  ¬«       n|j-                  d„ |dk(  ¬«       t        |«      }|d
kD  rt/        j0                  ||z  «      nd}|dz
  |z  }||z   }||| }t3        d„ |D «       «      }t'        t3        d„ |D «       «      d«      } t        j5                  |
«      }!ddddid œ}"t        j7                  | |«      }#|#r|#|"d!<   d}$t9        j                  |"d"di«      }%|%D ]*  }&|$t        j%                  |&j                  d"«      d
«      z  }$Œ, t'        |d«      t        |!«      t'        |$d«      ||||||| ||d#œS )$Nrf   éd   ÚrevenueÚdesc)rÎ  ÚqtySold)ÚascrÏ  r   rD  r¢  r   rC  r=   )rF   rG   rF   r>   r?   r@   rA   rB   )r5   rÐ  rÎ  rÐ  r5   c                 ó:   — | d   | d   | d   j                  «       fS )NrÐ  rÎ  r5   ©rl   r@  s    r    rB  z8OrderModel.admin_get_dashboard_summary.<locals>.<lambda>g	  ó    € ˜q ™|¨Q¨y©\¸1¸V¹9¿?¹?Ó;LÐM€ r"   r½  c                 ó:   — | d   | d   | d   j                  «       fS )NrÎ  rÐ  r5   rÓ  r@  s    r    rB  z8OrderModel.admin_get_dashboard_summary.<locals>.<lambda>l	  rÔ  r"   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)rÐ  Nr   ©r›  rŠ  s     r    rœ  z9OrderModel.admin_get_dashboard_summary.<locals>.<genexpr>v	  s   è ø€ ÒC°˜c )�nÑCùó   ‚c              3   ó&   K  — | ]	  }|d    –— Œ y­w)rÎ  Nr   r×  s     r    rœ  z9OrderModel.admin_get_dashboard_summary.<locals>.<genexpr>w	  s   è ø€ Ò'M¸3¨¨I­Ñ'MùrØ  r  ÚApprovedr£  r  )r  r   r  rÇ  r	  )ÚtotalRevenueÚtotalOrdersÚ
totalTopupÚsalesByProductrÈ  rÉ  Ú
salesTotalÚsalesTotalPagesÚsalesGrandQtyÚsalesGrandRevenuerÊ  rË  )rO  r  Úminr0   rU   rl   r   rQ  rv   rÍ   r  rj   rM   r/   r-   rC   r.   r²  r‘   rE   Ú_resolve_sales_product_namer±   rT  rR  rS  r†  rP  Ú_build_transaction_date_filterr   )'rà  rá  rÈ  rÉ  rÊ  rË  Úorder_date_filterÚpaid_conditionsÚactive_order_conditionsÚ
paid_queryÚactive_order_queryÚtotal_revenueÚ	sales_mapÚproduct_name_cachere  r:   rF   rH   r>   r?   r@   rA   Úline_revenuer¸  Ú
sales_rowsrŠ  Úsales_totalÚsales_total_pagesrÞ   rÆ  Úpaged_salesÚsales_grand_qtyÚsales_grand_revenueÚtotal_ordersÚtopup_queryÚtransaction_date_filterÚtotal_topupÚ	tx_cursorÚtxs'                                          r    Úadmin_get_dashboard_summaryz&OrderModel.admin_get_dashboard_summary	  sŠ  € ô ˜œ3˜y›>Ó*ˆ	Ü˜Aœs 3¬¨MÓ(:Ó;Ó<ˆä˜+Ò2¨Ó3×9Ñ9Ó;ˆÜ˜^Ò5¨vÓ6×<Ñ<Ó>×DÑDÓFˆàÐ4Ñ4Ø#ˆKà Ñ0Ø#ˆNä&×9Ñ9¸(ÀFÓKÐà$ uÒ.`Ð&aÐbÐcˆØ$,¨uÒ6hÐ.iÐ#jÐ"kÐáØ×"Ñ"Ð#4Ô5Ø#×*Ñ*Ð+<Ô=ä+.¨Ó+?À1Ò+D�_ QÒ'È6ÐSbÐJcˆ
ô Ð*Ó+¨qÒ0ð $ AÒ&àÐ1Ð2ð 	ð ˆØˆ	ØÐä"×'Ñ'ØàØñó
ˆð ó 	CˆCØœZ×<Ñ<¸SÓAÑAˆMà—G‘G˜G RÓ(ˆEÜ˜e¤TÔ*Øàó C�Ü! $¬Ô-Øä%×/Ñ/°·±¸Ó0DÀaÓH�Ø˜q’=Øä"×/Ñ/°·±¸Ó0AÀ1ÓE�Ü%×2Ñ2°4·8±8¸JÓ3GÈÓK�Ü ×-Ñ-¨d¯h©h°u«o¸qÓA�ä$ e¨hÑ&6¸Ñ&<ÀÑ%HÈ!ÓL�ä)×EÑEÀdÐL^Ó_�à yÑ0à ,Ø#$Ø#&ñ/�I˜lÑ+ð ˜,Ñ'¨	Ó2°hÑ>Ó2Ø˜,Ñ'¨	Ó2°lÑBÕ2ò1Cð	CðB ˆ
Ø×#Ñ#Ó%ò 	ˆCØ×ÑØ˜F™Ü˜s 9™~Ó.Ü   Y¡°Ó3ñõ ð	ð ˜)Ò#Ø�O‰OÙMØ'¨6Ñ1ð õ ð
 �O‰OÙMØ'¨6Ñ1ð ô ô
 ˜*“oˆØFQÐTUÂoœDŸI™I k°MÑ&AÔBÐ[\ÐØ˜Q‘ -Ñ/ˆØ�mÑ#ˆØ   sÐ+ˆäÑC¸
ÔCÓCˆÜ#¤CÑ'MÀ*Ô'MÓ$MÈqÓQÐä(×8Ñ8Ð9KÓLˆð Ø Ø#Ð%5Ð6ñ
ˆô #-×"KÑ"KÈHÐV\Ó"]ÐÙ"Ø"9ˆK˜ÑàˆÜ+×0Ñ0°¸ÐPQÐ>RÓSˆ	Øò 	OˆBØœ:×2Ñ2°2·6±6¸/Ó3JÈAÓNÑN‰Kð	Oô " -°Ó3Ü˜|Ó,Ü ¨QÓ/Ø)Ø"Ø*Ø%Ø0Ø,Ø!4Ø&Ø,ñ
ð 	
r"   Údoc_idsÚ
new_statusÚtracking_numberÚtracking_linkc                 óÐ  — | st        d«      ‚g }t        «       }| D ]R  }t        |xs d«      j                  «       }|r||v rŒ'	 |j	                  t        |«      «       |j                  |«       ŒT |st        d«      ‚t        t        j                  dd|ii«      «      }t        |«      t        |«      k7  rt        d«      ‚|dk(  rt        |«      d	k7  rt        d
«      ‚|D ]q  }	|	j                  dd«      }
|
dk(  st        j                  |
«      rt        d«      ‚t        j                  |
«      }|st        d«      ‚||k7  sŒbt        d|
› d|› �«      ‚ d|i}|dk(  r&|j!                  t        j#                  ||¬«      «       t        j%                  dd|iid|i«      }|j&                  ||D �cg c]  }t        |«      ‘Œ c}dœS # t        $ r t        d|› �«      ‚w xY wc c}w )NzNo orders selectedr$   zInvalid docId: zNo valid orders selectedre   rD  zOne or more orders not foundr  rf   z)Shipped can only update 1 order at a timer   r&  zBOne or more selected orders are not available for admin operationsz4One or more selected orders can no longer be updatedúInvalid status transition: ú -> ©rþ  rÿ  rð  )ÚupdatedCountr   ÚdocIds)rL   rg   r0   rU   rv   r   rk   rk  rC   r  rj   rÍ   r/   r   rŠ   rª  rñ  Ú_normalize_tracking_payloadÚupdate_manyr)  )rü  rý  rþ  rÿ  Úunique_doc_idsry   Úraw_idr™  r   rë  r+  Úallowed_nextró  rx   rA  s                  r    Úadmin_batch_update_order_statusz*OrderModel.admin_batch_update_order_status™	  s  € ñ ÜÐ1Ó2Ð2àˆÜ‹uˆàò 		=ˆFÜ˜š 2Ó&×,Ñ,Ó.ˆFÙ˜V t™^Øð=Ø×%Ñ%¤h¨vÓ&6Ô7Ø—‘˜Õ ð		=ñ ÜÐ7Ó8Ð8äÔ'×,Ñ,¨e°e¸^Ð5LÐ-MÓNÓOˆÜˆv‹;œ#˜nÓ-Ò-ÜÐ;Ó<Ð<à˜Ò"¤s¨>Ó':¸aÒ'?ÜÐHÓIÐIàò 	aˆEØ"ŸY™Y x°Ó4ˆNà Ò)¬Z×-KÑ-KÈNÔ-[Ü Ð!eÓfÐfä%×:Ñ:¸>ÓJˆLÙÜ Ð!WÓXÐXà˜\Ó)Ü Ð#>¸~Ð>NÈdÐS]ÐR^Ð!_Ó`Ð`ð	að ˜ZÐ(ˆà˜Ò"Ø�N‰NÜ×6Ñ6Ø$3Ø"/ð 7ó ôô #×.Ñ.Ø�U˜NÐ+Ð,Ø�WÐó
ˆð #×1Ñ1Ø Ø'5Ö6 !”s˜1•vÒ6ñ
ð 	
øôS ò =Ü  ?°6°(Ð!;Ó<Ð<ð=üòX 7s   Á+GÆ1G#ÇG Ú
identifierc                 ój  — t         j                  t        j                  | «      «      }|rt        j	                  |«      rt        d«      ‚|j                  dd«      }|dk(  st        j                  |«      rt        d«      ‚t        j                  |«      }|st        d«      ‚||k7  rt        d|› d|› �«      ‚d|i}|d	k(  r&|j                  t        j                  ||¬
«      «       t         j                  d|d   id|i«       t         j                  d|d   i«      }t        j                  |«      S )Nri  r   r$   r&  z0This order is not available for admin operationsz#This order can no longer be updatedr  r  r  r  re   rð  )r  rj  r   Ú_admin_order_matchr‡   rL   r/   rŠ   rª  rñ  r  rò  rÙ  )	r  rý  rþ  rÿ  rë  r+  r
  ró  rû  s	            r    Úadmin_update_order_statusz$OrderModel.admin_update_order_statusÝ	  s4  € ô "×*Ñ*¬:×+HÑ+HÈÓ+TÓUˆáœ
×8Ñ8¸Ô?ÜÐ.Ó/Ð/àŸ™ 8¨RÓ0ˆà˜XÒ%¬×)GÑ)GÈÔ)WÜÐOÓPÐPä!×6Ñ6°~ÓFˆÙÜÐBÓCÐCà˜Ò%ÜÐ:¸>Ð:JÈ$ÈzÈlÐ[Ó\Ð\à˜ZÐ(ˆà˜Ò"Ø�N‰NÜ×6Ñ6Ø$3Ø"/ð 7ó ôô 	×$Ñ$Ø�E˜%‘LÐ!Ø�WÐô	
ô
 *×2Ñ2°E¸5À¹<Ð3HÓIˆÜ×0Ñ0°Ó?Ð?r"   c                 óî  — | st        d«      ‚g }t        «       }| D ]H  }t        |xs d«      j                  «       }|r||v rŒ'|j	                  |«       |j                  |«       ŒJ |st        d«      ‚g }g }|D �]t  }t        j                  t        j                  |«      «      }|rt        j                  |«      r|j	                  |ddœ«       ŒXt        |j                  d«      xs |j                  d«      xs |«      }t        |j                  d«      xs d«      j                  «       }	|	dk7  r|j	                  |d	dœ«       ŒÏt        j                  |d
   ddœddt        j                  «       j                  «       dœi«      }
|
j                   dk(  rB|j	                  |«       t        j                  d
|d
   i«      }t        j#                  |«       �Œa|j	                  |d	dœ«       �Œw ||dœS )NzorderIds is requiredr$   ri  )r   r„  r   r   r   r  zOrder is not shippedre   rƒ  rð  r   )r   ÚdeliveredAtrf   )ÚupdatedÚskipped)rL   rg   r0   rU   rv   rk   r  rj  r   r  r‡   r/   rò  r
   rÎ   rÏ   r)  r¸   )rv  Úunique_order_idsry   r	  r   r  r  rë  Údisplay_order_idr+  rx   rû  s               r    Úadmin_mark_orders_as_deliveredz)OrderModel.admin_mark_orders_as_delivered
  sõ  € áÜÐ3Ó4Ð4àÐÜ‹uˆàò 	ˆFÜ˜6š< RÓ(×.Ñ.Ó0ˆHÙ˜x¨4Ñ/ØØ×#Ñ# HÔ-Ø�H‰H�XÕð	ñ  ÜÐ3Ó4Ð4àˆØˆà(ó &	ˆHÜ%×.Ñ.¬z×/LÑ/LÈXÓ/VÓWˆEáœJ×<Ñ<¸UÔCØ—‘Ø'Ø/ñ ô ð ä" 5§9¡9¨YÓ#7Ò#V¸5¿9¹9ÀT»?Ò#VÈhÓWÐÜ  §¡¨8Ó!4Ò!:¸Ó;×AÑAÓCˆNà Ò*Ø—‘Ø/Ø4ñ ô ð ä&×1Ñ1Ø˜e™°	Ñ:àØ"-Ü'/§¡Ó'8×'BÑ'BÓ'DñðóˆFð ×$Ñ$¨Ò)Ø—‘Ð/Ô0Ü 1× :Ñ :¸EÀ5ÈÁ<Ð;PÓ Q�Ü×7Ñ7¸ÖFà—‘Ø/Ø4ñ ö ðG&	ðR Øñ
ð 	
r"   Úadmin_idÚ
admin_namec                 ón  — t         j                  t        j                  | «      «      }|rt        j	                  |«      rt        d«      ‚|j                  dd«      }|dvrt        d«      ‚t        |j                  d«      xs d«      j                  «       }|st        d«      ‚t        j                  |«      }|dk  rt        d	«      ‚t        j                  «       j                  «       }t         j                  |d
   dddgidœddd|xs d|xs d||j                  «       xs ddœi«      }	|	j                  dk7  rt        d«      ‚d}
d }	 t        j                   ||«      }|st        d«      ‚d}
t        j#                  ||«      }t         j                  d
|d
   id||t        j                  «       j                  «       dœi«       t         j                  d
|d
   i«      }t        j%                  |«       t        j'                  |«      ||dœS # t(        $ r™}d|iddddddddœdœ}t         j                  d
|d
   i|«       |
r'	 t        j*                  ||«       n# t(        $ r Y nw xY w|r(	 t-        j.                  d|i«       n# t(        $ r Y nw xY wt        dt        |«      › �«      ‚d }~ww xY w)Nri  r   r$   r  z<Only Processing or Printing orders can be cancelled by adminr   r  r   r  re   rD  rŽ   r  rƒ  rð  r„   ÚadminzCancelled by admin)r   r�   ÚcancelledByAdminIdÚcancelledByAdminNamerÉ  rÊ  rf   r%  Fr   T)r�   r�   r$  )rë  r�   r�   )r�   r  r  rÉ  r�   r�   r$  )rð  z$unsetr   zAdmin cancel refund failed: )r  rj  r   r  r‡   rL   r/   r0   rU   rM   r
   rÎ   rÏ   rò  r)  r   r(  r¬  r¸   rÙ  rk  r*  r   r&  )r  r  r  r  rë  r+  rY   r”   Úcancelled_atÚupdate_resultr-  r•   r.  rû  r/  Úrollback_updates                   r    Úadmin_cancel_orderzOrderModel.admin_cancel_orderI
  sã  € ô "×*Ñ*¬:×+HÑ+HÈÓ+TÓUˆáœ
×8Ñ8¸Ô?ÜÐ.Ó/Ð/àŸ™ 8¨RÓ0ˆàÐ!;Ñ;ÜÐ[Ó\Ð\ä�e—i‘i Ó0Ò6°BÓ7×=Ñ=Ó?ˆÙÜÐ=Ó>Ð>ä"×7Ñ7¸Ó>ˆØ˜AÒÜÐ4Ó5Ð5ä—‘Ó(×2Ñ2Ó4ˆä)×4Ñ4Ø˜%‘L¨U°\À:Ð4NÐ,OÑPàØ)Ø#*Ø*2ª.°bØ,6Ò,<¸"Ø#/Ø$1×$7Ñ$7Ó$9Ò$QÐ=Qñð	ó
ˆð ×'Ñ'¨1Ò,ÜÐ;Ó<Ð<à ÐØˆð9	FÜ!×-Ñ-¨g°}ÓEˆIÙÜ Ð!LÓMÐMà#ÐÜ%×FÑFÀuÈmÓ\ˆLä×(Ñ(Ø˜˜e™Ð%àØ(5Ø&2Ü&.§o¡oÓ&7×&AÑ&AÓ&Cñðô	ô .×6Ñ6¸¸uÀU¹|Ð7LÓMˆMÜ×3Ñ3°MÔBä#×:Ñ:¸=ÓIØ -Ø*ñð øô ò 	Fð ˜nðð $&Ø*,Ø,.Ø#%Ø$&Ø"$Ø"$ññ	ˆOô ×(Ñ(¨%°°u±Ð)>ÀÔPáðÜ×,Ñ,¨W°mÕDøÜ ò Ùðúñ ðÜ+×6Ñ6¸¸lÐ7KÕLøÜ ò Ùðúô Ð;¼CÀ»F¸8ÐDÓEÐEûð=	Fúsa   ÅCH È	J4È,J/ÉIÉJ/É	I+É(J/É*I+É+J/É1J	ÊJ/Ê		JÊJ/ÊJÊJ/Ê/J4c                 óÀ   — t         j                  t        j                  | «      «      }|rt        j	                  |«      rt        d«      ‚t        j                  |«      S rê  )r  rj  r   r  r‡   rL   rÙ  )r  rë  s     r    Úadmin_get_order_detailz!OrderModel.admin_get_order_detail³
  sJ   € ä!×*Ñ*¬:×+HÑ+HÈÓ+TÓUˆÙœ
×8Ñ8¸Ô?ÜÐ.Ó/Ð/ä×0Ñ0°Ó7Ð7r"   c                 óz   — d| id| ig}	 |j                  ddt        | «      i«       d|iS # t        $ r Y d|iS w xY w)Nr   r   r   re   r   )Úinsertr   rk  )r  r^  s     r    r  zOrderModel._admin_order_match»
  sf   € ð ˜
Ð#Ø�:Ðð
ˆ
ð
	Ø×Ñ˜a %¬°*Ó)=Ð!>Ô?ð �zÐ"Ð"øô ò 	Øà�zÐ"Ð"ð	ús   Š+ «	:¹:c                 ól   — t        | xs d«      j                  «       } | syt        › dt        | «      › d�S )Nr$   ú
?tracknum=ú
&loc=en_US)r0   rU   ÚUPS_TRACK_BASE_URLr   )rþ  s    r    Ú_build_ups_tracking_linkz#OrderModel._build_ups_tracking_linkÉ
  s:   € ä˜oÒ3°Ó4×:Ñ:Ó<ˆÙØÜ$Ð% Z´°oÓ0FÐ/GÀzÐRÐRr"   c                 óª  ‡‡— g Št        «       Šdt        fˆˆfd„}t        | xs d«      j                  «       j                  dd«      j	                  «       } t        |xs d«      j                  «       }| r |t
        › dt        | «      › d�«       |r ||«       | r6 |t
        › dt        | «      › d�«        |t
        › dt        | «      › d�«       ‰S )	NÚurlc                 ó’   •— t        | xs d«      j                  «       } | r| ‰v ry ‰j                  | «       ‰j                  | «       y )Nr$   )r0   rU   rk   rv   )r+  Ú
candidatesry   s    €€r    rk   z7OrderModel._build_candidate_tracking_links.<locals>.addÕ
  s>   ø€ Ü�c’i˜R“.×&Ñ&Ó(ˆCÙ˜# ™+ØØ�H‰H�SŒMØ×Ñ˜cÕ"r"   r$   rS   r&  r'  z&loc=en_US&requester=STz$&loc=en_US&requester=ST/trackdetails)rg   r0   rU   Úreplacer  r(  r   )rþ  rÿ  rk   r-  ry   s      @@r    Ú_build_candidate_tracking_linksz*OrderModel._build_candidate_tracking_linksÐ
  sÓ   ù€ àˆ
Ü‹uˆð	#”Sö 	#ô ˜oÒ3°Ó4×:Ñ:Ó<×DÑDÀSÈ"ÓM×SÑSÓUˆÜ˜MÒ/¨RÓ0×6Ñ6Ó8ˆáÙÔ%Ð& j´°Ó1GÐ0HÈ
ÐSÔTáÙ�ÔáÙÔ%Ð& j´°Ó1GÐ0HÐH_Ð`ÔaÙÔ%Ð& j´°Ó1GÐ0HÐHlÐmÔnàÐr"   c                 ó”  — t        | xs d«      j                  «       } | sy	 t        | «      }t        |j                  «      }dD ]r  }|j                  |«      xs g }|sŒt        |d   «      j                  «       sŒ8t        |d   «      j                  «       j                  dd«      j                  «       c S  	 y# t        $ r Y yw xY w)Nr$   )ÚtracknumÚ	trackNumsrý   r   rS   )	r0   rU   r   r	   rc  r/   r.  r  rk  )rÿ  ÚparsedÚparamsr²   r±   s        r    Ú"_extract_tracking_number_from_linkz-OrderModel._extract_tracking_number_from_linkë
  s¿   € ä˜MÒ/¨RÓ0×6Ñ6Ó8ˆÙØð	Ü˜mÓ,ˆFÜ˜fŸl™lÓ+ˆFØBò K�ØŸ™ C›Ò.¨B�Úœc &¨¡)›n×2Ñ2Õ4Ü˜v a™y›>×/Ñ/Ó1×9Ñ9¸#¸rÓB×HÑHÓJÒJñKð øô ò 	Øàð	ús#   ¢<B; ÁB; Á<;B; Â8B; Â;	CÃCc                 óV  — t        |xs d«      j                  «       }t        | xs d«      j                  «       j                  dd«      j                  «       }|s|rt        j                  |«      }|s|rt        j                  |«      }|st        d«      ‚|st        d«      ‚|||dœS )Nr$   rS   z[trackingNumber is required or must be extractable from trackingLink when confirming shippedzFtrackingLink is required or could not be generated from trackingNumber)rý   rü   rþ   )r0   rU   r.  r  r   r5  r)  rL   )rþ  rÿ  Úfinal_tracking_linkÚfinal_tracking_numbers       r    r  z&OrderModel._normalize_tracking_payloadý
  s®   € ä! -Ò"5°2Ó6×<Ñ<Ó>ÐÜ # OÒ$9°rÓ :× @Ñ @Ó B× JÑ JÈ3ÐPRÓ S× YÑ YÓ [Ðá$Ñ)<Ü$.×$QÑ$QÐReÓ$fÐ!á"Ñ'<Ü",×"EÑ"EÐF[Ó"\Ðá$ÜÐzÓ{Ð{á"ÜÐeÓfÐfð 4Ø-Ø/ñ
ð 	
r"   c                 óÖ   — t        | xs d«      j                  «       } t        |xs d«      j                  «       xs t        j                  | «      }d| j	                  «       gdd|dd dœS )Nr$   Úen_USFzst/trackdetails)ÚLocaleÚTrackingNumberÚisBarcodeScannedÚ	RequesterÚ	ClientUrlÚreturnToValueÚAssociatedBcdnNumber)r0   rU   r   r)  rl   r  s     r    Ú_build_ups_status_api_payloadz(OrderModel._build_ups_status_api_payload  sp   € ä˜oÒ3°Ó4×:Ñ:Ó<ˆÜ˜MÒ/¨RÓ0×6Ñ6Ó8Òp¼J×<_Ñ<_Ð`oÓ<pˆð Ø.×4Ñ4Ó6Ð7Ø %Ø*Ø&ØØ$(ñ
ð 	
r"   c                 ó¸  — g }t        | t        «      r| j                  d«      xs g }t        |t        «      r|r|d   ni }t        |t        «      si }t	        |j                  d«      xs d«      j                  «       }|j                  d«      xs i }d}t        |t        «      r,t	        |j                  d«      xs d«      j                  «       }d}t	        |j                  d«      xs d«      j                  «       dk(  s|j                  d«      d	u r|xs |xs d
}nµ|j                  «       dk(  r|}nŸ|j                  «       dk(  r|}n‰|j                  d«      xs g }t        |t        «      rdt        |«      D ]V  }t        |t        «      sŒt	        |j                  d«      xs d«      j                  «       }	|	j                  «       dk(  sŒT|	} n |xs0 |xs, t	        |j                  d«      xs d«      j                  «       }
||j                  d«      |j                  d«      |j                  d«      |dœ}t        |«      ||
t	        |«      d d |dœS )NÚtrackDetailsr   ÚpackageStatusr$   ÚcurrentMilestoner5   ÚisDeliveredÚtrueTr   r!  Ú
milestonesÚprogressBarTypeÚ
receivedByÚleftAt)rE  rG  rK  rL  rF  é¸  )rG  ÚdeliveredLabelTextÚ
statusTextÚtextPreviewÚdetail)	r-   r.   r/   rC   r0   rU   rl   Úreversedr’   )rÒ   Útrack_detailsrQ  Úpackage_statusÚcurrent_milestoneÚcurrent_milestone_nameÚdelivered_label_textrI  Ú	milestoneÚmilestone_nameÚstatus_textÚpreviews               r    Ú&_extract_tracking_status_from_ups_jsonz1OrderModel._extract_tracking_status_from_ups_json#  s:  € àˆÜ�dœDÔ!Ø ŸH™H ^Ó4Ò:¸ˆMä%/°¼tÔ%DÉ�˜qÒ!Ð\^ˆÜ˜&¤$Ô'ØˆFä˜VŸZ™Z¨Ó8Ò>¸BÓ?×EÑEÓGˆØ"ŸJ™JÐ'9Ó:Ò@¸bÐØ!#ÐÜÐ'¬Ô.Ü%(Ð):×)>Ñ)>¸vÓ)FÒ)LÈ"Ó%M×%SÑ%SÓ%UÐ"à!ÐÜˆv�z‰z˜-Ó(Ò.¨BÓ/×5Ñ5Ó7¸6ÒAÀVÇZÁZÐP]ÓE^ÐbfÑEfØ#1Ò#ZÐ5KÒ#ZÈ{Ñ Ø×!Ñ!Ó# {Ò2Ø#1Ñ Ø#×)Ñ)Ó+¨{Ò:Ø#9Ñ àŸ™ LÓ1Ò7°RˆJÜ˜*¤dÔ+Ü!)¨*Ó!5ò �IÜ% i´Ô6Ø Ü%(¨¯©°vÓ)>Ò)DÀ"Ó%E×%KÑ%KÓ%M�NØ%×+Ñ+Ó-°Ó<Ø/=Ð,Ùðð %ÒrÐ(>ÒrÄ#ÀfÇjÁjÐQbÓFcÒFiÐgiÓBj×BpÑBpÓBrˆð ,Ø!Ÿ:™: mÓ4Ø Ÿ*™* \Ó2Ø—j‘j Ó*Ø 6ñ
ˆô  Ð 4Ó5Ø"6Ø%Ü˜w›<¨¨Ð.Øñ
ð 	
r"   c                 ó’  — t        | xs d«      j                  «       } | st        d«      ‚t        |xs d«      j                  «       xs t        j	                  | «      }d}t        j                  | |¬«      }t        j                  ||dddd|d	d
œd¬«      }|j                  «        |j                  «       }|||j                  |dœS )Nr$   úMissing tracking numberz;https://webapis.ups.com/track/api/Track/GetStatus?loc=en_USr  úMozilla/5.0z!application/json, text/plain, */*zapplication/json;charset=UTF-8zhttps://www.ups.comúen-US,en;q=0.9)ú
User-AgentÚAcceptzContent-TypeÚOriginÚRefererúAccept-Languageé   )ÚjsonÚheadersÚtimeout)rg  ÚfinalUrlÚ
httpStatusÚendpoint)r0   rU   rL   r   r)  rB  ÚrequestsÚpostÚraise_for_statusrg  Ústatus_code)rþ  rÿ  Ú
client_urlrl  ró  ÚresponserÒ   s          r    Ú_fetch_ups_tracking_jsonz#OrderModel._fetch_ups_tracking_jsonW  sÙ   € ä˜oÒ3°Ó4×:Ñ:Ó<ˆÙÜÐ6Ó7Ð7ä˜Ò,¨"Ó-×3Ñ3Ó5Òm¼×9\Ñ9\Ð]lÓ9mˆ
ØPˆÜ×:Ñ:Ø+Ø$ð ;ó 
ˆô
 —=‘=ØØà+Ø=Ø @Ø/Ø%Ø#3ñð ô
ˆð 	×!Ñ!Ô#à�}‰}‹ˆàØ"Ø"×.Ñ.Ø ñ	
ð 	
r"   Úhtmlc                 óÚ  — t        | xs d«      }|sdddddœS t        j                  dd|«      j                  «       }t        j                  dd|«      }t        j                  dd|«      j                  «       }|› d|› �}|j	                  «       }d}d}g d¢}	|	D ]  \  }
}|
j	                  «       |v sŒ|}|} n |sVg d¢}|D ]M  }t        j
                  ||t        j                  «      }|sŒ+|j                  d	«      }|j                  d	«      } n |sEg d
¢}|D ]<  }t        j
                  ||t        j                  «      }|sŒ+|j                  d	«      } n t        |«      |||d d dœS )Nr$   F)rG  rN  rO  rP  r—   rS   z<[^>]+>))zdelivered onzDelivered On)zproof of deliveryzProof of Delivery)z"deliverystatus":"delivered"údeliveryStatus=Delivered)z"deliveryStatus":"Delivered"rv  )z"status":"Delivered"zstatus=Delivered)z"currentstatus":"Delivered"zcurrentStatus=Delivered)z"packageStatus":"Delivered"zpackageStatus=Delivered)z"milestonestatus":"Delivered"zmilestoneStatus=Delivered)z\bdelivered\s+on\bz\bproof\s+of\s+delivery\bz\breceived\s+by\s*:z"\bdelivered\b.{0,200}\bcharlotte\bz&Thursday,\s+March\s+26.{0,80}at\s+Dockr   )z\bOn\s+the\s+Way\bz\bIn\s+Transit\bz\bOut\s+for\s+Delivery\bz\bLabel\s+Created\brM  )	r0   rh   r˜   rU   rl   ÚsearchÚ
IGNORECASEÚgroupr’   )rt  Úraw_htmlÚcollapsed_htmlÚ	text_onlyÚcollapsed_textÚ
searchableÚsearchable_lowerrW  rZ  Ústrong_delivered_checksÚneedler  Údelivered_regexesÚpatternÚmatchÚin_transit_patternss                   r    Ú"_extract_tracking_status_from_htmlz-OrderModel._extract_tracking_status_from_html{  s™  € ä�t’z˜r“?ˆÙà$Ø&(Ø Ø!ñ	ð ô Ÿ™ ¨¨XÓ6×<Ñ<Ó>ˆÜ—F‘F˜: s¨HÓ5ˆ	ÜŸ™ ¨¨YÓ7×=Ñ=Ó?ˆØ&Ð' q¨Ð(8Ð9ˆ
Ø%×+Ñ+Ó-Ðà!ÐØˆò	#
Ðð 5ò 	‰MˆF�EØ�|‰|‹~Ð!1Ò1Ø',Ð$Ø#�Ùð		ñ $ò!Ðð -ò �ÜŸ	™	 '¨:´r·}±}ÓE�ÚØ+0¯;©;°q«>Ð(Ø"'§+¡+¨a£.�KÙðñ ò#Ðð /ò �ÜŸ	™	 '¨:´r·}±}ÓE�ÚØ"'§+¡+¨a£.�KÙð	ô  Ð 4Ó5Ø"6Ø%Ø% e tÐ,ñ	
ð 	
r"   Úcandidate_linkc                 óü   — t        j                  | dddœdd¬«      }|j                  «        |j                  xs |j                  xs d|_        |j
                  xs d}||j                  xs | |j                  d	œS )
Nr_  r`  )ra  re  rf  T)rh  ri  Úallow_redirectszutf-8r$   )rt  rj  rk  )rm  r/   ro  ÚencodingÚapparent_encodingÚtextr+  rp  )r‡  rr  rt  s      r    Ú_fetch_partial_tracking_htmlz'OrderModel._fetch_partial_tracking_htmlÃ  s„   € ä—<‘<Øà+Ø#3ñð Ø ô
ˆð 	×!Ñ!Ô#Ø$×-Ñ-ÒV°×1KÑ1KÒVÈwˆÔØ�}‰}Ò" ˆð Ø Ÿ™Ò6¨Ø"×.Ñ.ñ
ð 	
r"   c           
      óÊ  — t        | xs d«      j                  «       j                  dd«      j                  «       } t        |xs d«      j                  «       }| s|rt        j                  |«      } | st        d«      ‚d}	 t        j                  | |¬«      }t        j                  |j                  d«      xs i «      }|j                  dd«      |j                  dd«      |j                  d	d«      |j                  d
d«      |j                  d|xs t        j                  | «      «      |j                  dd«      |j                  dd«      ddœS # t        $ r}t        |«      }Y d }~nd }~ww xY wt        j                  | |¬«      }|D ]Æ  }	 t        j                  |«      }t        j                  |j                  dd«      «      }	|	j                  dd«      |	j                  dd«      |	j                  d	d«      |	j                  d
d«      |j                  d|«      |j                  dd«      |ddœc S # t        $ r}|› d|› �}Y d }~ŒÀd }~ww xY w t        |xs d«      ‚)Nr$   rS   r^  r  rg  rG  FrN  rO  rP  rj  rk  r   rl  Úups_json_endpoint)rG  rN  rO  rP  rj  rk  rl  r    rt  Úrequests_html_fallbackz :: z!Failed to fetch UPS tracking page)r0   rU   r.  r  r   r5  rL   rs  r\  r/   r)  rk  r/  r�  r†  )
rþ  rÿ  Ú
last_errorÚfetched_jsonÚparsed_jsonÚexcÚcandidate_linksr‡  Úfetchedr3  s
             r    Ú!_check_delivered_on_with_requestsz,OrderModel._check_delivered_on_with_requestsØ  sX  € ä˜oÒ3°Ó4×:Ñ:Ó<×DÑDÀSÈ"ÓM×SÑSÓUˆÜ˜MÒ/¨RÓ0×6Ñ6Ó8ˆÙ¡=Ü(×KÑKÈMÓZˆOáÜÐ6Ó7Ð7àˆ
ð	"Ü%×>Ñ>Ø /Ø+ð ?ó ˆLô %×KÑKØ× Ñ  Ó(Ò.¨BóˆKð  +Ÿ™¨}¸eÓDØ&1§o¡oÐ6JÈBÓ&OØ)Ÿo™o¨l¸BÓ?Ø*Ÿ™¨}¸bÓAØ(×,Ñ,¨Z¸Ò9~Ì*×JmÑJmÐn}ÓJ~ÓØ*×.Ñ.¨|¸QÓ?Ø(×,Ñ,¨Z¸Ó<Ø-ñ	ð 	øô ò 	"Ü˜S›�Jûð	"úô %×DÑDØ+Ø'ð Eó 
ˆð
 .ò 	:ˆNð:Ü$×AÑAÀ.ÓQ�Ü#×FÑFÀwÇ{Á{ÐSYÐ[]ÓG^Ó_�ð $*§:¡:¨m¸UÓ#CØ*0¯*©*Ð5IÈ2Ó*NØ"(§*¡*¨\¸2Ó">Ø#)§:¡:¨m¸RÓ#@Ø '§¡¨J¸Ó GØ")§+¡+¨l¸AÓ">Ø .Ø6ñ	ò 	øô ò :Ø .Ð/¨t°C°5Ð9•
ûð:úð	:ô$ ˜ÒJÐ'JÓKÐKs2   ÂCE Å	E1ÅE,Å,E1ÆB$H8È8	IÉIÉIc                 ó´  — t        | t        «      sdddœS t        | j                  d«      xs d«      j	                  «       dk7  rdddœS t        | j                  d«      xs d«      j	                  «       }t        | j                  d	«      xs | j                  d
«      xs d«      j	                  «       }|s|rt
        j                  |«      }|s|rt
        j                  |«      }|sdddœS |sdddœS 	 t
        j                  ||¬«      }|||t        j                  «       j                  «       d|j                  dd«      |j                  dd«      |j                  dd«      |j                  d|«      dœ	}|j                  d«      rkd|d<   t        j                  «       j                  «       |d<   t        j                  | d   ddœd|i«      }|j                  dk(  d|j                  dd«      dœS t        j                  | d   ddœd|i«      }|j                  dk(  }|r/t        j                  d| d   i«      }t
        j!                  |«       |d|j                  dd«      dœS # t"        $ re}t        j                  d| d   id|||t        j                  «       j                  «       t        |«      ddœi«       dt        |«      dœcY d }~S d }~ww xY w)NFÚinvalid_order)r  r„  r   r$   r  Ústatus_not_shippedrþ   rý   rü   Úmissing_tracking_linkÚmissing_tracking_numberr  r    Úrequests_htmlrP  rN  rj  )	rü   rý   rþ   ÚlastTrackingCheckedAtÚlastTrackingSyncErrorÚlastTrackingSourceÚlastTrackingTextPreviewÚlastTrackingDeliveredLabelÚlastTrackingFinalUrlrG  r   r  re   rƒ  rð  rf   Úups_delivered_found)r  r„  rN  Úrequests_html_error)rü   rý   rþ   rž  rŸ  r   )r-   r.   r0   r/   rU   r   r5  r)  r—  r
   rÎ   rÏ   r  rò  r)  rj  r¸   rk  )	r­   rÿ  rþ  Útracking_resultÚbase_payloadrx   Ú
updated_okrû  r/  s	            r    Ú#sync_one_shipped_order_to_deliveredz.OrderModel.sync_one_shipped_order_to_delivered  só  € ä˜)¤TÔ*Ø$°Ñ@Ð@äˆy�}‰}˜XÓ&Ò,¨"Ó-×3Ñ3Ó5¸ÒBØ$Ð0DÑEÐEä˜IŸM™M¨.Ó9Ò?¸RÓ@×FÑFÓHˆÜ˜iŸm™mÐ,<Ó=Ò`ÀÇÁÈzÓAZÒ`Ð^`Óa×gÑgÓiˆá¡=Ü(×KÑKÈMÓZˆOá¡Ü&×?Ñ?ÀÓPˆMáØ$Ð0GÑHÐHáØ$Ð0IÑJÐJðB	Ü(×JÑJØ /Ø+ð Kó ˆOð ,Ø"1Ø -Ü)1¯©Ó):×)DÑ)DÓ)FØ)+Ø&5×&9Ñ&9¸(ÀOÓ&TØ+:×+>Ñ+>¸}ÈbÓ+QØ.=×.AÑ.AÐBVÐXZÓ.[Ø(7×(;Ñ(;¸JÈÓ(Vñ
ˆLð ×"Ñ" =Ô1Ø)4�˜XÑ&Ü.6¯o©oÓ.?×.IÑ.IÓ.K�˜]Ñ+ä*×5Ñ5Ø% eÑ,¸	ÑBØ˜\Ð*ó�ð  &×4Ñ4¸Ñ9Ø3Ø*9×*=Ñ*=Ð>RÐTVÓ*Wñð ô '×1Ñ1Ø! %Ñ(°IÑ>Ø˜Ð&óˆFð
  ×.Ñ.°!Ñ3ˆJÙÜ 1× :Ñ :¸EÀ9ÈUÑCSÐ;TÓ U�Ü×7Ñ7¸ÔFð &Ø/Ø&5×&9Ñ&9Ð:NÐPRÓ&Sñð øô ò 	Ü×(Ñ(Ø˜	 %Ñ(Ð)àØ$3Ø*9Ø(5Ü19·±Ó1B×1LÑ1LÓ1NÜ14°Q³Ø.Cñð	ôð !Ü˜a›&ñõ ûð	ús'   Ã6C>I) Ç5A3I) É)	KÉ2AKËKËKrV  Úmin_age_secondsc           	      óº  — t        t        | xs d«      d«      } t        t        |xs d«      d«      }dddddœiddddœid	dddœigi}d
|gdœ}|dkD  rRt        j                  «       t	        |¬«      z
  }|d   j                  ddddiiddidd|j                  «       iigi«       |rAg }|D ]&  }	 |j                  t        t        |«      «      «       Œ( |st        d«      ‚d|i|d<   t        j                  |«      j                  ddg«      j                  | «      }d}	d}
g }|D ]ž  }|	dz  }	t        j!                  |«      }|j#                  d«      r|
dz  }
|j                  t        |j#                  d«      xs$ |j#                  d«      xs |j#                  d«      «      t        |j#                  d«      «      dœ|¥«       Œ  |	|
|dœS # t        $ r Y �Œ-w xY w)Nr   rf   r   rþ   Tr$   )ú$existsr£  rý   rü   r  )r   rC  )ÚsecondsrC  rž  r¬  Fz$ltzNo valid docIds providedrD  re   )rž  rf   )r   rf   r  r   r   )r   r3  )Úcheckedr  Úresults)rO  r  r
   rÎ   r   rv   rÏ   r   r0   rk  rL   r  rj   rT  rV  r   r©  r/   )rV  rü  rª  Útracking_ready_conditionrc  Ústale_beforeÚ
object_idsr	  re  r®  r  r¯  r­   Úsync_results                 r    Ú sync_shipped_orders_to_deliveredz+OrderModel.sync_shipped_orders_to_deliveredm  s4  € ô ”C˜š
 “O QÓ'ˆÜœc /Ò"6°QÓ7¸Ó;ˆð Ø¨T¸"Ñ!=Ð>Ø!¨t¸BÑ#?Ð@Ø¨°bÑ9Ð:ðð$
Ð ð  Ø-Ð.ñ
ˆð
 ˜QÒÜ#Ÿ?™?Ó,¬yÀÔ/QÑQˆLØ�&‰M× Ñ àØ0°9¸eÐ2DÐEØ0°"Ð5Ø0°5¸,×:PÑ:PÓ:RÐ2SÐTððôñ ØˆJØ!ò �ðØ×%Ñ%¤h¬s°6«{Ó&;Õ<ðñ
 Ü Ð!;Ó<Ð<Ø! :Ð.ˆE�%‰Lô ×"Ñ" 5Ó)ß‰TÐ/Ð1AÐBÓCß‰U�5‹\ð 	ð ˆØˆØˆàò 		ˆIØ�q‰LˆGÜ$×HÑHÈÓSˆKØ�‰˜yÔ)Ø˜1‘�Ø�N‰NÜ˜yŸ}™}¨YÓ7Òf¸9¿=¹=ÈÓ;NÒfÐR[×R_ÑR_Ð`eÓRfÓgÜ˜YŸ]™]¨5Ó1Ó2ñð ðõ ð		ð #¨wÀ7ÑKÐKøô7 !ò Úðús   Â0#GÇ	GÇGc                 ób   — 	 t        | xs d«      S # t        t        f$ r t        |«      cY S w xY wrJ  )rD   rK   rL   ©r{   Údefaults     r    r‘   zOrderModel._safe_number±  s4   € ð	"Ü˜š !Ó$Ð$øÜœ:Ð&ò 	"Ü˜“>Ò!ð	"ús   ‚ ‘.­.c                 ót   — 	 t        t        | xs d«      «      S # t        t        f$ r t        |«      cY S w xY wrJ  )r  rD   rK   rL   r¶  s     r    r²  zOrderModel._safe_int¸  s9   € ð	 Ü”u˜UšZ aÓ(Ó)Ð)øÜœ:Ð&ò 	 Ü�w“<Òð	 ús   ‚ š7¶7c                 óð   — | s|sy i }| r,t         j                  t        j                  | d«      «      |d<   |r:t         j                  t        j                  |d«      t	        dd¬«      z   «      |d<   |xs d S )Nr?  rÛ  rf   rJ  )rB  r­  rÜ  )r  Úlocalizer
   Ústrptimer   )rX  rY  Ú
date_querys      r    rå  z)OrderModel._build_transaction_date_filter¿  sr   € á¡Øàˆ
ÙÜ!&§¡´×0AÑ0AÀ)ÈZÓ0XÓ!YˆJ�vÑÙÜ!&§¡Ü×!Ñ! '¨:Ó6¼ÈÐSUÔ9VÑVó"ˆJ�vÑð Ò!˜TÐ!r"   c                 ó¸  — t        | j                  d«      xs( | j                  d«      xs | j                  d«      xs d«      j                  «       }|r|S t        | j                  d«      xs d«      j                  «       }|sy||vrMt        j                  d|iddi«      }t        |xs i j                  d«      xs |«      j                  «       ||<   ||   S )Nrˆ  r¤  r5   r$   r‡  zUnknown Productrf   )r0   r/   rU   r   rj  )rH   rZ   Údirect_namer´  r:   s        r    rä  z&OrderModel._resolve_sales_product_nameÎ  sÏ   € äØ�H‰H�]Ó#ÒR t§x¡x°Ó'8ÒR¸D¿H¹HÀVÓ<LÒRÐPRó
ç
‰%‹'ð 	ñ ØÐä˜Ÿ™ +Ó.Ò4°"Ó5×;Ñ;Ó=ˆ
ÙØ$à˜UÑ"Ü%×.Ñ.°¸ZÐ/HÈ7ÐTUÈ,ÓWˆCÜ # S¢Y¨B§O¡O°GÓ$<Ò$JÀ
Ó K× QÑ QÓ SˆE�*Ñà�ZÑ Ð r"   c                 ó  — t        | j                  d«      xs d«      j                  «       }|st        d«      ‚t	        j
                  t        «      }|j                  d«      |j                  dz  d›z   }t        j                  «       j                  d d }|› d|› d|› �}| j                  d	«      xs i }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                  «       t        |j                  d«      xs d«      j                  «       t        |j                  d«      xs d«      j                  «       dœdœ}g }	| j                  d«      xs g D ]Š  }
|	j                  t        |
j                  d«      xs d«      j                  «       t        |
j                  d«      xs d«      t        |
j                  d«      xs d«      j                  «       ddddœ«       ŒŒ |j                  «       }i d|“d|“dd“dd “d!t        |j                  d"«      xs d«      j                  «       “d	|“d|	“d#d“d$d%“d&d“d'd“d(d“d)g “d*t        |j                  d
«      xs d«      j                  «       “d+t        |j                  d,«      xs d«      j                  «       “d-t        |j                  d"«      xs d«      j                  «       “d.d/“dddg d0d||d1œ¥}t        j!                  |«       t        |d2   «      |d2<   |S )3NrÖ   r$   r×   râ   rã   rä   rå   ræ   r4   r5   r6   rç   rÛ   rè   r'   r(   rÜ   r)   ré   rê   rF   rß   r>   rf   rà   r=   ©rß   r>   rà   r?   r@   rA   r   rØ   Úfba_fbtr2  úFBA&FBTr   r   rG   r   rö   rü   rý   rþ   ru   rP   rQ   r7   rÿ   rÇ   Fr   )rÈ   rÉ   rÊ   rÁ   rË   rÌ   r   r  re   )r0   r/   rU   rL   r
   r  r  r  r  r  r	  r
  rv   r  rÏ   r  r  )rÒ   rÓ   r  r  r  r  r   r  r4   rF   rH   r  r:   s                r    Úcreate_fba_fbt_orderzOrderModel.create_fba_fbt_orderâ  sø  € ä˜4Ÿ8™8 MÓ2Ò8°bÓ9×?Ñ?ÓAˆÙÜÐ6Ó7Ð7ä�l‰lœ5Ó!ˆØ—L‘L Ó0°c·o±oÈÑ6MÈcÐ5RÑSˆ	Ü—j‘j“l×&Ñ& r¨Ð*ˆØ"�^ 1 Y K¨q°°Ð>ˆàŸ™ Ó,Ò2°ˆä˜×)Ñ)¨&Ó1Ò7°RÓ8×>Ñ>Ó@Ü˜×*Ñ*¨7Ó3Ò9°rÓ:×@Ñ@ÓBÜ˜]×.Ñ.¨{Ó;ÒA¸rÓB×HÑHÓJä˜m×/Ñ/°
Ó;ÒA¸rÓB×HÑHÓJÜ × 1Ñ 1°*Ó =Ò CÀÓD×JÑJÓLÜ˜M×-Ñ-¨fÓ5Ò;¸Ó<×BÑBÓDÜ˜]×.Ñ.¨wÓ7Ò=¸2Ó>×DÑDÓFÜ˜}×0Ñ0°Ó>ÒDÀ"ÓE×KÑKÓMÜ˜}×0Ñ0°Ó;ÒA¸rÓB×HÑHÓJññ	
ˆð ˆØ—X‘X˜gÓ&Ò,¨"ò 	ˆDØ�L‰LÜ  §¡¨+Ó!6Ò!<¸"Ó=×CÑCÓEÜ §¡¨Ó 4Ò 9¸Ó:Ü" 4§8¡8¨MÓ#:Ò#@¸bÓA×GÑGÓIØØØñõ ð	ð —-‘-“/ˆð
Ø�xð
à˜<ð
ð ˜9ð
ð ˜)ð	
ð
 œS §¡¨4£Ò!6°BÓ7×=Ñ=Ó?ð
ð ˜ð
ð �Uð
ð �Sð
ð �lð
ð ˜ð
ð ˜bð
ð ˜Bð
ð ˜bð
ð œc %§)¡)¨FÓ"3Ò"9°rÓ:×@Ñ@ÓBð
ð œs 5§9¡9¨WÓ#5Ò#;¸Ó<×BÑBÓDð
ð  œC §	¡	¨$£Ò 5°2Ó6×<Ñ<Ó>ð!
ð" ˜eð#
ð$ ØØØØØ Ø Ø ò3
ˆô8 	×$Ñ$ SÔ)Ü˜˜U™“_ˆˆE‰
Øˆ
r"   c                 ót  — | j                  d«      xs! | j                  d«      xs t        | d   «      }| j                  d«      xs i }t        |t        «      r|j                  dd«      nt        |xs d«      }|t        | d   «      | j                  d«      xs ||| j                  dd	«      t	        t        | j                  d
«      xs d«      d«      t        | j                  dd«      «      d d | j                  dd«      | j                  dd«      | j                  dd«      | j                  dd«      dœS )Nr   r   re   r4   r5   r$   rÖ   r   rö   rG   r   rB   r   r1  rù   r÷   rP   rQ   )r   r3  rÖ   r4   r   rG   r   rù   ÚofferSetByNamerP   rQ   )r/   r0   r-   r.   rE   rD   )r:   r   r4   r6  s       r    Ú_sanitize_fba_fbt_order_listz'OrderModel._sanitize_fba_fbt_order_list(  s  € à—7‘7˜9Ó%ÒI¨¯©°«ÒI¼#¸cÀ%¹j»/ˆØ—7‘7˜:Ó&Ò,¨"ˆÜ4>¸xÌÔ4N˜Ÿ™ V¨RÔ0ÔTWÐX`ÒXfÐdfÓTgˆàÜ˜˜U™“_ØŸ7™7 =Ó1Ò=°XØ%Ø—g‘g˜h¨Ó5Üœ5 §¡¨Ó!1Ò!6°QÓ7¸Ó;Ü˜SŸW™W [°"Ó5Ó6°s¸Ð;ØŸ'™' ,°Ó3Ø!Ÿg™g l°BÓ7Ø!Ÿg™gÐ&6¸Ó;Ø"Ÿw™wÐ'8¸"Ó=ñ
ð 	
r"   c                 ó&  — | j                  d«      xs! | j                  d«      xs t        | d   «      }| j                  d«      xs i }t        |t        «      si }|j                  dd«      |j                  dd«      |j                  dd«      |j                  d	d«      |j                  d
d«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      dœ	}| j                  dg «      xs g }g }|D �]@  }t        |t        «      sŒ|j	                  |j                  d«      xs8 |j                  d«      xs% |j                  d«      xs i j                  dd«      |j                  dd«      |j                  d«      xs8 |j                  d«      xs% |j                  d«      xs i j                  dd«      t        t        |j                  d«      xs d«      d«      t        t        |j                  d«      xs d«      d«      t        t        |j                  d«      xs d«      d«      dœ«       �ŒC i d|“dt        | d   «      “d | j                  d «      xs |“d|“d|“d!t        t        | j                  d!«      xs d«      d«      “d"| j                  d"d#«      “d$| j                  d$d«      “d%| j                  d%d«      “d&| j                  d&d«      “d'| j                  d'd«      “d(| j                  d(«      xs | j                  d)d«      “d*| j                  d*d«      “d+| j                  d+d«      “d,| j                  d,d«      “d-| j                  d-d«      “d.| j                  d.d«      “S )/Nr   r   re   r4   r5   r$   r6   r7   rÛ   rè   r'   r(   rÜ   r)   )	r5   r6   r7   rÛ   rè   r'   r(   rÜ   r)   rF   rß   r‡  Ú
fbaRequestÚskur>   rf   rà   rˆ  r?   r   rB   r@   rA   rÀ  r3  rÖ   rG   r   rö   r÷   rù   rú   rû   rü   rý   rþ   rÊ  r   rP   rQ   )r/   r0   r-   r.   rv   rE   rD   )r:   r   Úraw_customerr4   rq  rF   rH   s          r    Ú_sanitize_fba_fbt_order_detailz)OrderModel._sanitize_fba_fbt_order_detail;  s¹  € à—7‘7˜9Ó%ÒI¨¯©°«ÒI¼#¸cÀ%¹j»/ˆØ—w‘w˜zÓ*Ò0¨bˆÜ˜,¬Ô-ØˆLà ×$Ñ$ V¨RÓ0Ø!×%Ñ% g¨rÓ2Ø!×%Ñ% g¨rÓ2Ø$×(Ñ(¨°RÓ8Ø$×(Ñ(¨°RÓ8Ø ×$Ñ$ V¨RÓ0Ø!×%Ñ% g¨rÓ2Ø&×*Ñ*¨<¸Ó<Ø#×'Ñ'¨	°2Ó6ñ

ˆð —G‘G˜G RÓ(Ò.¨Bˆ	ØˆØó 		ˆDÜ˜$¤Õ%Ø—‘Ø!%§¡¨+Ó!6ò  "A¸$¿(¹(À;Ó:Oò  "AÐTX×T\ÑT\Ð]iÓTjÒTpÐnp×SuÑSuÐv{Ð}ó  TAØ $§¡¨°QÓ 7Ø#'§8¡8¨MÓ#:ò  $O¸d¿h¹hÀ}Ó>Uò  $OÐZ^×ZbÑZbÐcoÓZpÒZvÐtv×Y{ÑY{ð  }Jð  LNó  ZOÜ"¤5¨¯©°'Ó):Ò)?¸aÓ#@À!ÓDÜ %¤e¨D¯H©H°ZÓ,@Ò,EÀAÓ&FÈÓ JÜ ¤ t§x¡x°£Ò';¸!Ó!<¸aÓ@ñö ð		ð
Ø�(ð
à”S˜˜U™“_ð
ð ˜3Ÿ7™7 =Ó1Ò=°Xð
ð ˜ð	
ð
 �Uð
ð ”Uœ5 §¡¨Ó!1Ò!6°QÓ7¸Ó;ð
ð �c—g‘g˜h¨Ó5ð
ð ˜#Ÿ'™' ,°Ó3ð
ð ˜#Ÿ'™' ,°Ó3ð
ð ˜sŸw™wÐ'8¸"Ó=ð
ð ˜sŸw™wÐ'8¸"Ó=ð
ð ˜Ÿ™ 
Ó+ÒL¨s¯w©wÐ7GÈÓ/Lð
ð ˜CŸG™G N°BÓ7ð
ð ˜CŸG™G N°BÓ7ð
ð ˜Ÿ™ ¨bÓ1ð
ð  ˜cŸg™gÐ&6¸Ó;ð!
ð" ˜sŸw™wÐ'8¸"Ó=ð#
ð 	
r"   c                 ó‚  — t        |d«      }t        |d«      }d| ig}|rDt        j                  |j                  «       «      }|ddœ}|j	                  dd|id|id|igi«       |r|d	vr|j	                  d
|i«       t        |«      dkD  rd|in|d   }t        j                  |«      }	|	dkD  rt        j                  |	|z  «      nd}
|dz
  |z  }t        j                  |«      j                  dg«      j                  |«      j                  |«      }|D �cg c]  }t        j                  |«      ‘Œ c}|	|||
dœS c c}w )Nrf   rÿ   rb   rc   r   r   rÖ   rE  )rF  rä  r$   r   rC  r   rI  ræ  )rO  rh   ri   rU   rv   rÍ   r  rP  rR  rS  rj   rT  rU  rV  r   rÆ  )r9  r`   r   r;  r<  r^  r_  ro   rc  rG   rd  rU  re  r:   s                 r    Úget_my_fba_fbt_ordersz OrderModel.get_my_fba_fbt_ordersl  sa  € ô �4˜‹|ˆÜ˜	 1Ó%ˆ	ð ˜XÐ&ð
ˆ
ñ Ü—i‘i §¡£Ó0ˆGØ&°CÑ8ˆEØ×Ñ˜uØ˜EÐ"Ø Ð&Ø  %Ð(ð'ð ô ñ �fÐ$6Ñ6Ø×Ñ˜x¨Ð0Ô1ä(+¨J«¸!Ò(;�˜Ñ$ÀÈAÁˆÜ!×1Ñ1°%Ó8ˆØ6;¸a²i”d—i‘i ¨	Ñ 1Ô2ÀQˆØ�q‘˜IÑ%ˆô ×"Ñ" 5Ó)ß‰TÐ$Ð%Ó&ß‰T�$‹Zß‰U�9Óð	 	ð NTÖTÀc”Z×<Ñ<¸SÕAÒTØØØ!Ø%ñ
ð 	
ùÚTs   ÄD<c                 óŠ   — t         j                  |d| id| igdœ«      }|st        d| › d�«      ‚t        j	                  |«      S )Nr   r   ©rÿ   r   úOrder 'ú' not found)r  rj  rL   r   rË  )r   r9  rë  s      r    Úget_my_fba_fbt_order_detailz&OrderModel.get_my_fba_fbt_order_detail›  sV   € ä!×*Ñ*Ø$Ø Ð)¨D°(Ð+;Ð<ñ,
ó ˆñ Ü˜w x j°Ð<Ó=Ð=Ü×8Ñ8¸Ó?Ð?r"   c           	      óì  — t        |d«      }t        |d«      }ddig}| rJt        j                  | j                  «       «      }|ddœ}|j	                  dd|id|id	|id
|id|igi«       |r|dk7  r|j	                  d|i«       n|j	                  ddg d¢ii«       t
        j                  ||«      }	|	r|j	                  |	«       d|i}
t        j                  |
«      }|dkD  rt        j                  ||z  «      nd}|dz
  |z  }t        j                  |
«      j                  dg«      j                  |«      j                  |«      }|D �cg c]  }t
        j                  |«      ‘Œ c}||||dœS c c}w )Nrf   r2  rÂ  rb   rc   r   r   rÖ   rE  rP   rQ   rä  r   rD  )rö   r$  r%  r&  rŽ   r  r  r   rC  r   rI  ræ  )rO  rh   ri   rU   rv   r   rQ  r  rP  rR  rS  rj   rT  rU  rV  rÆ  )r`   r   rà  rá  r;  r<  r^  r_  ro   rb  rc  rç  rd  rU  re  r:   s                   r    Úadmin_get_fba_fbt_ordersz#OrderModel.admin_get_fba_fbt_orders¥  sŸ  € ô �4˜‹|ˆÜ˜	 1Ó%ˆ	à# YÐ/Ð0ˆ
áÜ—i‘i §¡£Ó0ˆGØ&°CÑ8ˆEØ×Ñ˜uØ˜EÐ"Ø Ð&Ø  %Ð(Ø! 5Ð)Ø" EÐ*ð'ð ô ñ �f ’oØ×Ñ˜x¨Ð0Õ1à×Ñ˜x¨%ò 2ð *ð ô ô
 !×3Ñ3°H¸fÓEˆÙØ×Ñ˜kÔ*à˜Ð$ˆÜ'×7Ñ7¸Ó>ˆØ<GÈ!ºO”d—i‘i ¨iÑ 7Ô8ÐQRˆØ�q‘˜IÑ%ˆô ×"Ñ" 5Ó)ß‰TÐ$Ð%Ó&ß‰T�$‹Zß‰U�9Óð	 	ð NTÖTÀc”Z×<Ñ<¸SÕAÒTØ ØØ!Ø%ñ
ð 	
ùÚTs   ÅE1c                 ó  — ddl m} d }	 t        j                  t	        | «      ddœ«      }|s#t        j                  dddidd| id	| igigi«      }|st        d
«      ‚t        j                  |«      S # |t
        f$ r Y ŒTw xY w)Nr   )Ú	InvalidIdrÂ  )re   r2  rC  r2  r   r   rÖ   ri  )	Úbson.errorsrÖ  r  rj  r   rk  rL   r   rË  )r  rÖ  r:   s      r    Úadmin_get_fba_fbt_order_detailz)OrderModel.admin_get_fba_fbt_order_detailÞ  s¦   € å)Øˆð	Ü#×,Ñ,´X¸jÓ5IÐYbÑ-cÓdˆCñ Ü#×,Ñ,ØØ! 9Ð-Ø˜i¨Ð4°}ÀjÐ6QÐRÐSðð.ó ˆCñ ÜÐ.Ó/Ð/Ü×8Ñ8¸Ó=Ð=øð œ9Ð%ò 	Ùð	ús   Š!A2 Á2B Á?B Úoffer_itemsc                 óÜ  — 	 t        | «      }d|i}t        j                  |«      }|st	        d| › d�«      ‚|j                  d«      dvrt	        d	|j                  d«      › �«      ‚t        |j                  d
g «      «      }g }|D ]®  }	t        |	j                  dd«      «      }
d|
cxk  rt        |«      k  sŒ3n Œ6t        ||
   «      }t        |	j                  dd«      «      |d<   t        |	j                  dd«      «      |d<   t        |	j                  dd«      «      |d<   |j                  |«       Œ° |st	        d«      ‚t        j                  |«      }t        j                  «       j!                  «       }t        j#                  d|d   idd|||||ddddg ddœi«       t        j                  d|d   i«      }t        j%                  |«      S # t        $ r dd| id| igi}Y �ŒÙw xY w)Nre   r   r   r   rÐ  rÑ  r   )rö   r$  r%  u…   Chá»‰ Ä‘Æ¡n cÃ³ tráº¡ng thÃ¡i 'LiÃªn Há»‡', 'Offer' hoáº·c 'Rejected' má»›i cÃ³ thá»ƒ nháº­n giÃ¡ offer. Tráº¡ng thÃ¡i hiá»‡n táº¡i: rF   r  r   r?   r@   rA   u(   Danh sÃ¡ch offer_items khÃ´ng há»£p lá»‡rð  r$  Fr$   )r   rF   rG   r÷   rø   rù   rÇ   rÈ   rÉ   rÊ   rÁ   rË   )r   rk  r  rj  rL   r/   rC   r  rÍ   r.   rD   rv   r   rI   r
   rÎ   rÏ   rò  rË  )r  rÙ  r  r  Úobj_idrc  rë  Úcurrent_itemsÚupdated_itemsÚ
offer_itemÚitem_idxÚupdated_itemrG   r  rû  s                  r    Úadmin_set_offerzOrderModel.admin_set_offerñ  s  € ð	KÜ˜jÓ)ˆFØ˜F�OˆEô "×*Ñ*¨5Ó1ˆÙÜ˜w z l°+Ð>Ó?Ð?à�9‰9�XÓÐ&IÑIÜð/Ø/4¯y©y¸Ó/BÐ.CðEóð ô
 ˜UŸY™Y w°Ó3Ó4ˆØˆà%ò 	3ˆJÜ˜:Ÿ>™>¨'°1Ó5Ó6ˆHØ�HÔ1œs =Ó1Ö1Ü# M°(Ñ$;Ó<�Ü(-¨j¯n©n¸WÀaÓ.HÓ(I�˜WÑ%Ü+0°·±À
ÈAÓ1NÓ+O�˜ZÑ(Ü&+¨J¯N©N¸5À!Ó,DÓ&E�˜UÑ#Ø×$Ñ$ \Õ2ð	3ñ ÜÐGÓHÐHä×+Ñ+¨MÓ:ˆÜ�o‰oÓ×)Ñ)Ó+ˆä×$Ñ$Ø�E˜%‘LÐ!àØ%Ø*Ø"Ø",Ø$,Ø"%Ø&+Ø!#Ø#%Ø$&Ø$&Ø"#ñðô	
ô( *×2Ñ2°E¸5À¹<Ð3HÓIˆÜ×8Ñ8¸ÓGÐGøôi ò 	KØ˜i¨Ð4°t¸ZÐ6HÐIÐJ‹Eð	Kús   ‚G ÇG+Ç*G+Úactionc                 óö  — t         j                  |d| id| igdœ«      }|st        d| › d�«      ‚|j                  d«      dk7  rt        d«      ‚t	        j
                  «       j                  «       }|d	k(  r!t         j                  d
|d
   idd|dœi«       n5|dk(  r!t         j                  d
|d
   idd|dœi«       nt        d|› d�«      ‚t         j                  d
|d
   i«      }t        j                  |«      S )Nr   r   rÏ  rÐ  rÑ  r   r$  u_   Chá»‰ Ä‘Æ¡n cÃ³ tráº¡ng thÃ¡i 'Offer' má»›i cÃ³ thá»ƒ Ä‘Æ°á»£c cháº¥p nháº­n hoáº·c tá»« chá»‘iÚapprovere   rð  r&  )r   rú   Úrejectr%  )r   rû   u   Action khÃ´ng há»£p lá»‡: 'u(   '. Pháº£i lÃ  'approve' hoáº·c 'reject'.)
r  rj  rL   r/   r
   rÎ   rÏ   rò  r   rË  )r   r   râ  rë  r  rû  s         r    Úuser_respond_offerzOrderModel.user_respond_offer,  s  € ä!×*Ñ*Ø)Ø Ð)¨D°(Ð+;Ð<ñ,
ó ˆñ Ü˜w x j°Ð<Ó=Ð=à�9‰9�XÓ 'Ò)ÜÐ~ÓÐä�o‰oÓ×)Ñ)Ó+ˆà�YÒÜ×(Ñ(Ø˜˜e™Ð%Ø HÀÑEÐFõð �xÒÜ×(Ñ(Ø˜˜e™Ð%Ø JÀ3ÑGÐHõô
 Ð:¸6¸(ÐBjÐkÓlÐlä)×2Ñ2°E¸5À¹<Ð3HÓIˆÜ×8Ñ8¸ÓGÐGr"   r¶   )NNNNrf   r1  )r$   )NN)NNNNrf   é   )NNrf   é   rÎ  rÏ  )r$   r$   r$   )rÍ  Nr   )r=   )r   )NNrf   r1  )dÚ__name__Ú
__module__Ú__qualname__Ústaticmethodr0   r!   r+   r2   r;   rI   rM   rX   r.   r_   rs   r}   r‡   rŠ   r…   r™   rŸ   r¤   r©   r¬   r´   r¸   r¿   rÂ   rC   rÑ   r  r(  r/  r8  r  rf  rr  r‚  rŒ  r–  r   rÁ  rÄ  rÔ  rÎ  rÙ  rQ  rè  rì  rü  rD   r  r0  r6  r:  rF  rL  rR  r_  ru  rœ  r   r¦  rª  r¬  r²  r¶  rÇ  rû  r  r  r  r   r"  r  r)  r/  r5  r  rB  r\  rs  r†  r�  r—  r©  r´  r‘   r²  rå  rä  rÃ  rÆ  rË  rÍ  rÒ  rÔ  rØ  rá  ræ  r   r"   r    r   r      s\  „ Øð
˜sð 
°3ò 
ó ð
ð ñ
ó ð
ð ñ+ó ð+ð* ñ
ó ð
ð( ñó ðð" ñEó ðEð ñ
ó ð
ð ñ Cð °ò ó ðð& ð%!¨sò %!ó ð%!ðN ñó ðð. ñ
ó ð
ð ðF Cò Fó ðFð ñ7ó ð7ð" ñEó ðEð ða 4ò aó ðað ð tò ó ðð ð $ò ó ðð ðd $ò dó ðdð ð°ò ó ðð. ð*°ò *ó ð*ð ð Dò ó ðð. ñ@ó ð@ð ñ
 4ò 
ó ð
ð" ðn˜4ð n¨ð n°ò nó ðnð` ð¨ð °ò ó ðð ð@°ð @¸ò @ó ð@ð ð
 ð 
¨ò 
ó ð
ð2 ð ØØØØØñY
ØðY
àðY
ð ðY
ð ð	Y
ð
 ðY
ð ðY
ð òY
ó ðY
ðv ðJ
 cð J
°Sð J
¸Tò J
ó ðJ
ðX ð
 !ñ	Øðàðð ðð ò	ó ðð: ð

¨ð 

°4ð 

Àð 

Èsò 

ó ð

ð ð(/¨$ò (/ó ð(/ðT ð°ò ó ðð2 ðL¨4ò Ló ðLð\ ð¨ò ó ðð ñ.
°$ò .
ó ð.
ð` ð dò ó ðð: ñ=
ó ð=
ð~ ò&ó ð&ð8 ð ØØØØØñ>
Øð>
àð>
ð ð>
ð ð	>
ð
 ð>
ð ð>
ð ò>
ó ð>
ð@ ð8 3ð 8°sò 8ó ð8ð ð:@˜sð :@°3ð :@ÀTò :@ó ð:@ðx ð°4ð Àò ó ððB ñz@˜sð z@°3ð z@Àsò z@ó ðz@ð@ ñ0ó ð0ð ð
˜dð 
 tò 
ó ð
ð ð¨cð ¸$ð Ècð ÐVYò ó ðð ðX˜Sð X¨#ð X°dð X¸sò Xó ðXð ðL°$ð L¸sð LÈ#ð LÐZ]ð LÐbgò Ló ðLð: ðG*ØðG*àðG*ð ðG*ð ð	G*ð
 òG*ó ðG*ðR ð?
¨ð ?
¸ò ?
ó ð?
ðB ðl
˜dð l
°3ò l
ó ðl
ð\ ð1
 ð 1
°Sò 1
ó ð1
ðf ñ
ó ð
ð2 ð(¨Sò (ó ð(ð ð°Dð À%ò ó ðð@ àØØØØØñ\
Øð\
àð\
ð ð\
ð ð	\
ð
 ð\
ð ò\
ó ð\
ð| àØØØØØñM
ØðM
àðM
ð ðM
ð ð	M
ð
 ðM
ð òM
ó ðM
ð^ ð ØØØØØñW
ØðW
àðW
ð ðW
ð ð	W
ð
 ðW
ð ðW
ð òW
ó ðW
ðr àØØØØ$Ø$ñK
ØðK
àðK
ð ðK
ð ð	K
ð
 ðK
ð òK
ó ðK
ðZ ð  $Ø!ñ	A
ØðA
àðA
ð ðA
ð ò	A
ó ðA
ðF ð  $Ø!ñ	'@Øð'@àð'@ð ð'@ð ò	'@ó ð'@ðR ð?
°$ò ?
ó ð?
ðB ð ØØñ	gFØðgFàðgFð ðgFð ò	gFó ðgFðR ð8¨3ò 8ó ð8ð ð# sò #ó ð#ð ðS°#ò Só ðSð ñ¸ð ÈSò ó ðð4 ð¸#ò ó ðð" ñ
°Sð 
ÐPSò 
ó ð
ð, ñ
°sð 
È3ò 
ó ð
ð ñ1
ó ð1
ðf ñ!
°#ð !
Àcò !
ó ð!
ðF ðE
°ò E
ó ðE
ðN ð
°Sò 
ó ð
ð( ñ7L¸3ð 7LÈsò 7Ló ð7Lðr ðX°tò Xó ðXðt àØØ ñALØðALàðALð òALó ðALðF ò"ó ð"ð ò ó ð ð ò"ó ð"ð ð!¨$ð !°tò !ó ð!ð& ðC 4ð C°ð C¸ò Có ðCðJ ð
¨$ð 
°4ò 
ó ð
ð$ ð.
¨Dð .
°Tò .
ó ð.
ð` ð ØØØñ,
Øð,
àð,
ð ð,
ð ð	,
ð
 ò,
ó ð,
ð\ ð@¨cð @¸Sð @ÀTò @ó ð@ð àØØØØØñ6
Øð6
àð6
ð ð6
ð ð	6
ð
 ð6
ð ò6
ó ð6
ðp ð>°3ð >¸4ò >ó ð>ð$ ð8H Cð 8H°dð 8HÀcð 8HÐWZò 8Hó ð8Hðt ðH Sð H¸ð HÀcò Hó ñHr"   r   )'ÚMongoDBConnectionr   r   r   r   rR  rh   r  Úpytzrm  Úurllib.parser   r   r	   r
   r   Úplaywright.sync_apir   r   ÚPlaywrightTimeoutErrorÚbsonr   Úmodel.user_modelr   Úmodel.topup_modelr   Úutils.design_helperr   r   Úutils.ai_visual_helperr   r   r   r  Útimezoner  r(  ÚPLAYWRIGHT_TIMEOUT_MSr   r   r"   r    ú<module>rù     ss   ðß `Ó `Û Û 	Û Û Û ß 2Ñ 2ß (ç WÝ å &Ý (ß J÷ñ ð �x‘LÐ Øˆ�‰Ð(Ó)€Ø0Ð ØÐ ÷l8Hò l8Hr"   