
    i4                         d dl m Z mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
  ee	      Zee
   Zed   Zed   Zed   Zed	   Zed
   Zed   Zed   Zed   ZddgZ G d d      Zy)    )datetimetimezoneN)ObjectId)MongoClient)	MONGO_URIDB_NAMEaction_logsordersticketstransactionsusersproducts
categoriesbannersadminstaffc                      e Zd Zedefd       Zedefd       Zeddddddeded	edz  d
edz  dedz  dedz  fd       Z	edefd       Z
ed        Zed        Zed        ZedEd       Zed        Zed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"efd#       Zedefd$       Zed%        Zed&efd'       Zed(efd)       Zed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d0       Z"ed(efd1       Z#eded(efd2       Z$edefd3       Z%ed(efd4       Z&ed(efd5       Z'ed(efd6       Z(ed(efd7       Z)ed(efd8       Z*ed(efd9       Z+edefd:       Z,eded;efd<       Z-e	 	 	 	 	 	 	 	 dFd=ed>ed?edz  d@edz  dAedz  dedz  dBedz  dCedz  fdD       Z.y)GActionLogModeldatac                 ~   t        |j                  d      xs d      j                         j                         }t        |j                  d      xs d      j                         }|t        vry|sydt        j                  t        j                        j                  d      i|}t        j                  |       y)N	actorRole actorIdF	createdAtz%Y-%m-%dT%H:%M:%S.000ZT)strgetstriplowerALLOWED_ACTOR_ROLESr   nowr   utcstrftime
collection
insert_one)clsr   
actor_roleactor_iddocuments        7/var/www/pod-logistic/pod-api/model/action_log_model.py	write_logzActionLogModel.write_log   s    +.4"5;;=CCE
txx	*0b177900 hll3<<=UV

 	h'    rowc                 L    |j                  d      }t        |t              r|S i S )Nbody)r   
isinstancedict)r%   r,   r.   s      r)   
_safe_bodyzActionLogModel._safe_body*   s#    wwv!$-t525r+   N)action_countaction_rowsaction_statusaction_params
action_keyaction_summaryr2   r3   r4   r5   c                H    ||d}|||d<   |||d<   |||d<   |r||d<   |S )N)	actionKeyactionSummaryactionCount
actionRowsactionStatusactionParams )r%   r6   r7   r2   r3   r4   r5   payloads           r)   _build_action_payloadz$ActionLogModel._build_action_payload/   sU     $+

 #%1GM""$/GL!$&3GN#&3GN#r+   valuec                     t        |xs d      j                         j                         }t        j                  d|      }dj                  d |D              }|j                  dd      }|S )Nr   NFDc              3   R   K   | ]  }t        j                  |      d k7  s| ! yw)MnN)unicodedatacategory).0chs     r)   	<genexpr>z8ActionLogModel._normalize_search_text.<locals>.<genexpr>Q   s"     MbK,@,@,D,LrMs   ''u   đd)r   r   r   rG   	normalizejoinreplace)r%   rB   texts      r)   _normalize_search_textz%ActionLogModel._normalize_search_textM   s]    5;B%%'--/$$UD1wwMDMM||D#&r+   c                 x    	 t        |xs d      j                         }|sy t        |      S # t        $ r Y y w xY w)Nr   )r   r   r   	Exception)r%   	raw_valuerB   s      r)   _parse_object_idzActionLogModel._parse_object_idU   s@    		R(..0EE?" 		s   - 
- 	99c                     g }t        |t              s|S t               }|D ]H  }| j                  |      }|st	        |      }||v r'|j                  |       |j                  |       J |S )N)r/   listsetrU   r   addappend)r%   
raw_valuesidsseenrawobj_idkeys          r)   _parse_object_idsz ActionLogModel._parse_object_ids_   ss    *d+Ju 	C))#.Ff+Cd{HHSMJJv	 
r+   c                 H    	 dt        |xs d      dS # t        $ r Y yw xY w)N$r   z,.2fz$0.00)floatrS   )r%   rB   s     r)   _moneyzActionLogModel._moneyq   s2    	uUZa(.// 		s    	!!c                 L   g }t               }|xs g D ]H  }t        |xs d      j                         }|r||v r'|j                  |       |j	                  |       J |syt        |      |k  rdj                  |      S dj                  |d |        dt        |      |z
   dS )Nr   N/A, z +z more)rX   r   r   rY   rZ   lenrN   )r%   valueslimitcleanedr]   r^   rB   s          r)   _short_joinzActionLogModel._short_joinx   s    u<R 	"C	rN((*EETMHHUONN5!	" w<5 99W%%))GFUO,-RGu0D/EUKKr+   c                     t        |t              r|sydj                  |D cg c]5  }t        |      j	                         st        |      j	                         7 c}      xs dS c c}w )Nnonerh   )r/   rW   rN   r   r   )r%   permissionsps      r)   _format_permissionsz"ActionLogModel._format_permissions   sJ    +t,Kyy+PQQ#a&,,.PQ[U[[Ps   A(A(pathpatternc                 X    t        j                  ||      }|r|j                  d      S dS )N   r   )researchgroup)r%   rs   rt   matchs       r)   _extract_path_idzActionLogModel._extract_path_id   s'    		'4(!&u{{1~.B.r+   user_idc                 t   t        |xs d      j                         }|sy| j                  |      }g }|r|j                  d|i       |j                  d|i       |D ]X  }t        j                  |ddi      }|s|j                  d      s0t        |j                  d            j                         c S  y)Nr   _ididemailrv   )r   r   rU   rZ   users_collectionfind_oner   )r%   r|   r_   query_candidatesqueryusers         r)   _get_user_email_by_customer_idz-ActionLogModel._get_user_email_by_customer_id   s    gm$**,%%g.##UFO4w0% 	6E#,,UWaLAD)488G,-3355	6
 r+   staff_idc                     t        |xs d      j                         }|sy | j                  |      }g }|r|j                  d|i       |j                  d|i       |D ]  }t        j                  |      }|s|c S  y )Nr   r~   r   )r   r   rU   rZ   r   r   )r%   r   r_   r   r   r   s         r)   _find_staff_by_identifierz(ActionLogModel._find_staff_by_identifier   s    x~2&,,.%%h/##UFO4x 01% 	E#,,U3D	
 r+   	ticket_idc                 p    t        |xs d      j                         }|sy t        j                  d|i      S Nr   r   )r   r   transactions_collectionr   r%   r   s     r)   _find_topup_by_idz ActionLogModel._find_topup_by_id   s5    	R(..0	&//y0ABBr+   c                 p    t        |xs d      j                         }|sy t        j                  d|i      S r   )r   r   tickets_collectionr   r   s     r)   _find_ticket_by_idz!ActionLogModel._find_ticket_by_id   5    	R(..0	!**D)+<==r+   
identifierc                 $   t        |xs d      j                         }|sy | j                  |      }g }|r|j                  d|i       |j                  d|i       |j                  d|i       |D ]  }t        j                  |      }|s|c S  y )Nr   r~   	productIdr   )r   r   rU   rZ   products_collectionr   )r%   r   r_   r   r   products         r)   _find_product_by_identifierz*ActionLogModel._find_product_by_identifier   s    )r*002
%%j1##UFO4j 9:z 23% 	E)2259G	
 r+   c                 $   t        |xs d      j                         }|sy | j                  |      }g }|r|j                  d|i       |j                  d|i       |j                  d|i       |D ]  }t        j                  |      }|s|c S  y )Nr   r~   slug)r   r   rU   rZ   categories_collectionr   )r%   r   r_   r   r   rH   s         r)   _find_category_by_identifierz+ActionLogModel._find_category_by_identifier   s    )r*002
%%j1##UFO4
 34 45% 	 E,55e<H	 
 r+   	banner_idc                 p    t        |xs d      j                         }|sy t        j                  d|i      S r   )r   r   banners_collectionr   )r%   r   s     r)   _find_banner_by_identifierz)ActionLogModel._find_banner_by_identifier   r   r+   c                     t        |xs d      j                         }|sy d|id|ig}| j                  |      }|r|j                  dd|i       t        j                  d|i      S )Nr   orderIdr   r   r~   z$or)r   r   rU   insertorders_collectionr   )r%   r   
conditionsr_   s       r)   _find_order_by_identifierz(ActionLogModel._find_order_by_identifier   sx    )r*002
 
#:


 %%j1a%1 ))5**=>>r+   c                     | j                  |      }|sg S t        t        j                  dd|iiddddddddd            S )Nr~   $inrv   )r   r   statustrackingtrackingNumbertrackingLinkrefundAmount
refundTxId)ra   rW   r   find)r%   raw_doc_ids
object_idss      r)   _find_orders_by_doc_idsz&ActionLogModel._find_orders_by_doc_ids  s_    **;7
I""
+,  !&'$%$%"#	
 	
r+   docc                     |syt        |j                  d      xs( |j                  d      xs |j                  d      xs d      j                         S )Nr   r   r   r~   )r   r   r   )r%   r   s     r)   _order_labelzActionLogModel._order_label!  sD    3779%NN#''%.NBOUUWWr+   r.   c                 V   | j                  |j                  d            }|D cg c]  }| j                  |       }}| j                  |      }t	        |      }t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }	|dk(  r| j                  dd| d	| ||||d
      S |dk(  ro|r)|	r'| j                  dd| d| d| d|	 ||||||	d      S |r#| j                  dd| d| d| |||||d      S | j                  dd| d| ||||d
      S | j                  dd| d|xs d d| ||xs d ||xs d|d      S c c}w )NdocIdsr   r   r   r   PrintinglogMoveToPrintingDetailedzMove z order(s) to Printing | IDs: countr\   r2   r4   r5   Shipped,logConfirmShippedDetailedWithTrackingAndLinkzConfirm shipment for  order(s) | IDs:  | tracking: 	 | link: r   r\   r   link%logConfirmShippedDetailedWithTrackingr   r\   r   logConfirmShippedDetailedlogUpdateOrderStatusDetailedzUpdate z order(s) to Unknown | IDs: r   r   r\   )r   r   r   rm   ri   r   r   rA   )
r%   r.   docsr   	order_idsids_textr   
new_statustracking_numbertracking_links
             r)   _build_order_batch_summaryz)ActionLogModel._build_order_batch_summary'  sP   **488H+=>6:;sS%%c*;	;??9-I(+1r288:
dhh'78>B?EEGDHH^4:;AAC#,,+w;H:F"("# - 	 	 "=00B+E72CH:][jZkkt  vC  uD  E!&",!&'$3 -	# 1   00;+E72CH:][jZkl!&",!&'$3# 1 
 
 ,,+'w.?zJ"("# - 	 	 ((*eWM**A	)B(8*U$,$1	 ) 

 
	
u <s   F&c                    | j                  |d      }| j                  |      }| j                  |      xs |xs d}t        |j	                  d      xs d      j                         }t        |j	                  d      xs d      j                         }t        |j	                  d      xs d      j                         }|dk(  r| j                  dd	| d
|d
|d      S |dk(  rf|r&|r$| j                  dd| d| d| d
|d
|||d      S |r | j                  dd| d| d
|d
||d      S | j                  dd| d
|d
|d      S | j                  dd|xs d d| d
|xs d d
|xs d|d      S )Nz!/api/orders/admin/([^/]+)/status$rg   r   r   r   r   r   r   z#Move 1 order(s) to Printing | IDs: rv   r   r   r   r   z'Confirm shipment for 1 order(s) | IDs: r   r   r   r   r   r   r   zUpdate 1 order(s) to r   r   r   )r{   r   r   r   r   r   rA   )	r%   rs   r.   r   orderorder_idr   r   r   s	            r)   "_build_order_single_status_summaryz1ActionLogModel._build_order_single_status_summaryp  s   ))$0TU
--j9##E*AjAE(+1r288:
dhh'78>B?EEGDHH^4:;AAC#,,+5hZ@(# - 	 	 "=00B=hZ}UdTeeno|n}~!"",!"'$3 -	# 1   00;=hZ}UdTef!"",!"'$3# 1 
 
 ,,+9(D(# - 	 	 ((*#J$;)#<HXJO$,$1	 ) 

 
	
r+   c           
         | j                  |d      }| j                  |      }| j                  |      xs |xs d}| j                  |r|j	                  dd      nd      }|r,t        |j	                  d      xs d      j                         nd}|r#| j                  dd| d	| d
| dd|||d      S | j                  dd| d	| dd||d      S )Nz!/api/orders/admin/([^/]+)/cancel$rg   r   r   r   r   logCancelOrderDetailedWithTxzCancel order z | refund: z | refundTx: rv   	Cancelled)r   refundrefundTxr   logCancelOrderDetailed)r   r   )r{   r   r   re   r   r   r   rA   )r%   rs   r   r   r   refund_amountrefund_tx_ids          r)   _build_order_cancel_summaryz*ActionLogModel._build_order_cancel_summary  s
   ))$0TU
--j9##E*AjAE

5599^Q#?aPEJs599\28b9??APR,,.z]O=Q]P^_)"+ , - 
 
 (($H:[@%' ) 	
 		
r+   c                    t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         j                         }t        |j                  d      xs d      j                         }| j	                  |      }|r | j                  |j                  d            nd}| j                  |r|j                  dd      nd      }|dk(  r-| j                  d	d
| d| d|xs d d|d| |xs dd      S |dk(  rf|xs0 |r,t        |j                  d      xs d      j                         nd}| j                  dd| d|xs d d|xs d d||xs d|xs dd      S |r0t        |j                  d      xs |xs d      j                         n|}	| j                  dd| d|	xs d d| d|xs d |	xs d ||	xs d||xs dd      S )NticketIdr   r   rejectReasonid_khach_hangnumericAmountr   approvedlogApproveTopupDetailedzApprove topup z | amount: +
 | email: rg   Approved+)r   amountr   r4   r5   rejectedlogRejectTopupDetailedzReject topup  | reason: Rejected)r   r   reasonlogUpdateTopupDetailedzUpdate topup  | status: z | amount: )r   r   r   r   )r   r   r   r   r   r   re   rA   )
r%   r.   r   r   reject_reasontxr   r   reason_textfinal_statuss
             r)   _build_topup_summaryz#ActionLogModel._build_topup_summary  s:   ,2399;	TXXh'-2.446<<>DHH^4:;AAC""9-OQ22266/3JKWY"BFF?A6!DZ,,) <xz%.SXIYZ(# !&l"^e	 - 	 	 Z'dY[C~0F0L",M,S,S,UacK,,(	{*U^e4DKP[Pd_dOef(#"^e)2U	 - 	 	 IKs266(+;v;<BBDPV(($I;k,2G%1HTZS[[efkftoteuv&.$&/% %		 ) 

 
	
r+   c                    t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         j                         }t        |j                  d      xs d      j                         }| j	                  |      }|r,t        |j                  d      xs d      j                         nd}|r | j                  |j                  d            nd}|dk(  rr|xs0 |r,t        |j                  d      xs d      j                         nd}| j                  dd	| d
|xs d d|xs d d|xs d d||xs d|xs d|xs dd      S |dv r@| j                  dd| d
|xs d d|xs d |j                         ||xs d|xs dd      S | j                  dd| d
|xs d d|xs d d|xs d |r|j                         nd ||xs d|xs d|xs dd      S )Nr   r   r   r   r   r   r   logRejectComplaintDetailedzReject complaint z
 | order: rg   r   r   r   )r   r   r   r   r   )resolvedr   logResolveComplaintDetailedzResolve complaint )r   r   r   logUpdateTicketzUpdate complaint r   )r   r   r   r   )r   r   r   r   r   r   rA   
capitalize)	r%   r.   r   r   r   ticketr   r   r   s	            r)   _build_ticket_summaryz$ActionLogModel._build_ticket_summary	  s_   ,2399;	TXXh'-2.446<<>DHH^4:;AAC''	2?E3vzz),2399;2SY226::o3NO_aZ'l]cC

>0J0Pb,Q,W,W,YikK,,,#I;j9JU8K:V[Vd_dUeepq|  rF  AF  qG  H(#'05"^e)2U		 - 
 
 --,,-$YKz(:Ke9LJW\We`eVfg$//1#'05"^e	 - 	 	 ((	{*X5F4GzRWR`[`Qaalmsm|w|l}~17&++-T#,u% /E		 ) 

 
	
r+   c                 2   t        |j                  d      xs |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }| j                  dd|xs d d|xs d |xs d|xs dd	
      S )Nr   r   r   titlelogAddProductDetailedzAdd product rg   
 | title: r   r  r5   r   r   r   rA   )r%   r.   
product_idr  s       r)   _build_product_add_summaryz)ActionLogModel._build_product_add_summary9  s    $F488K+@FBGMMO
DHHW%+,224((#:./z%.59IJ )E% ) 
 	
r+   c                 >   | j                  |d      }| j                  |      }|r"t        |j                  d      xs |xs d      n|xs d}|r,t        |j                  d      xs d      j	                         nd}| j                  dd| d| ||xs dd	
      S )N/api/products/([^/]+)$r   rg   r  r   logUpdateProductDetailedzUpdate product r  r  r  r{   r   r   r   r   rA   r%   rs   r   r   r  r  s         r)   _build_product_update_summaryz,ActionLogModel._build_product_update_summaryF      ))$0IJ
11*=MTS[1HZH5I[e[nin
;BGKK(.B/557((&j\E7; % ) 
 	
r+   c                 >   | j                  |d      }| j                  |      }|r"t        |j                  d      xs |xs d      n|xs d}|r,t        |j                  d      xs d      j	                         nd}| j                  dd| d| ||xs dd	
      S )Nr
  r   rg   r  r   logDeleteProductDetailedzDelete product r  r  r  r  r  s         r)   _build_product_delete_summaryz,ActionLogModel._build_product_delete_summaryV  r  r+   c                 2   t        |j                  d      xs |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }| j                  dd|xs d d|xs d |xs d|xs dd	      S )
Nr   namer   logAddCategoryDetailedzAdd category rg   	 | name: r   r  r  r  )r%   r.   category_idr  s       r)   _build_category_add_summaryz*ActionLogModel._build_category_add_summaryf  s    $((6*Ddhhv.>D"EKKM488F#)r*002(($K0514=5/J!*U ) 
 	
r+   c                    | j                  |d      }| j                  |      }d}|r6t        |j                  d      xs |j                  d      xs |xs d      }n&|xs" t        |j                  d      xs d      xs d}t        |j                  d      xs |r|j                  d      ndxs d      j	                         }| j                  dd| d	|xs d ||xs dd
      S )N/api/admin/categories/([^/]+)$r   r~   r   rg   r  logUpdateCategoryDetailedzUpdate category r  r  r  r{   r   r   r   r   rA   )r%   rs   r.   r   rH   r  r  s          r)   _build_category_update_summaryz-ActionLogModel._build_category_update_summarys  s    ))$0QR
33J?hll51`X\\&5I`Z`[`aK$LDHHV,<,B(CLuKDHHV$Rf)=rYWYZ``b(('{m9T]UOD! ) 
 	
r+   c                 d   | j                  |d      }| j                  |      }|r5t        |j                  d      xs |j                  d      xs |xs d      n|xs d}|r,t        |j                  d      xs d      j	                         nd}| j                  dd| d	| ||xs dd
      S )Nr  r~   r   rg   r  r   logDeleteCategoryDetailedzDelete category r  r  r  r  )r%   rs   r   rH   r  r  s         r)   _build_category_delete_summaryz-ActionLogModel._build_category_delete_summary  s    ))$0QR
33J?aic(,,u-\f1E\\W\]pz  qD  D:Bs8<<'-2.446(('{m9TF;! ) 
 	
r+   c                 "   t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }| j                  |j                  d            }t        j                  |dd      }d}|r?t        |j                  d      xs |j                  d      xs d      j                         }| j                  d	d
|xs d d|xs d d|xs d d| |xs d|xs d|xs d|d      S )Nr   r   r  rp   r   )r   roler~   r   logAddStaffDetailedz
Add staff rg   r   r   | permissions: )r   r   r  rp   r  )r   r   r   rr   r   r   rA   )r%   r.   r   r  rp   r   r   s          r)   _build_staff_add_summaryz'ActionLogModel._build_staff_add_summary  s   DHHW%+,224488F#)r*002--dhh}.EF ))E7*KL599U+DuyyD"EKKMH((!*U+:enu5EYt}W\o]mnymz{'%%*	 ) 	
 		
r+   c                 F   t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }| j                  |j                  d            }| j	                  |      }|r.|s,t        |j                  d      xs d      j                         }| j                  dd|xs d d	|xs d d
|xs d d| |xs d|xs d|xs d|d      S )NstaffIdr   r   r   rp   logUpdateStaffDetailedzUpdate staff rg   r   r   r%  )r   r   r   rp   r  )r   r   r   rr   r   rA   )r%   r.   r   r   r   rp   r   s          r)   _build_staff_update_summaryz*ActionLogModel._build_staff_update_summary  s*   txx	*0b1779DHHW%+,224TXXh'-2.446--dhh}.EF--h7		'*0b1779E(($H-.j%8HTZTc^cSddt  vA  uB  C'%% /E*	 ) 	
 		
r+   c                 6   t        |j                  d      xs d      j                         }| j                  |      }|r,t        |j                  d      xs d      j                         nd}| j	                  dd|xs d d|xs d |xs d|xs dd	      S )
Nr(  r   r   logResetStaffPasswordDetailedzReset password for staff rg   r   r   r   r  r   r   r   r   rA   r%   r.   r   r   r   s        r)   #_build_staff_reset_password_summaryz2ActionLogModel._build_staff_reset_password_summary  s    txx	*0b1779--h79>EIIg&,"-335B((+'(9E':*U^eDTU'%% ) 
 	
r+   c                 6   t        |j                  d      xs d      j                         }| j                  |      }|r,t        |j                  d      xs d      j                         nd}| j	                  dd|xs d d|xs d |xs d|xs dd	      S )
Nr(  r   r   logChangePasswordDetailedzChange password | staff: rg   r   r-  r  r.  r/  s        r)   _build_change_password_summaryz-ActionLogModel._build_change_password_summary  s    txx	*0b1779--h79>EIIg&,"-335B((''(9E':*U^eDTU'%% ) 
 	
r+   c                    t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }|sA|r?| j                  |      }|r,t        |j                  d      xs d      j                         }| j	                  dd|xs d d|xs d |xs d|xs dd	      S )
NbannerIdr   r  logUpdateBannerDetailedzUpdate banner rg   r  r  r  )r   r   r   r   rA   )r%   r.   r   r  banners        r)   _build_banner_update_summaryz+ActionLogModel._build_banner_update_summary  s    ,2399;	DHHW%+,22433I>FFJJw/526<<>((%Y/%0
5>E:JK(5% ) 
 	
r+   c                    t        |j                  d      xs d      j                         }|j                  d      }t        |t              rt        |      nd}| j                  dd|xs d d| |dkD  r|nd |xs d|d	
      S )NfileNamer   rowsr   logImportOrdersDetailedzImport orders | file: rg   z	 | rows: )r:  r;  )r3   r5   )r   r   r   r/   rW   ri   rA   )r%   r.   	file_namer;  	row_counts        r)   _build_import_orders_summaryz+ActionLogModel._build_import_orders_summary  s    ,2399;	xx!+D$!7CIQ	((%$Y%7%$8	)M%.]	%.!	 ) 
 	
r+   c                    t        |j                  dd      xs d      j                         }t        |j                  dd      xs d      }| j                  |      }t        |j                  dd      xs d      j	                         }|dk(  r|dk(  r| j                  |      S |dk(  r(t        j                  d|      r| j                  ||      S |dk(  r't        j                  d	|      r| j                  |      S |dk(  ru|d
k(  rpt        |j                  d      t              r|j                  d      ng }| j                  |      }t        |      xs d}| j                  dd| d| |||d      S |dk(  r|dk(  r| j                  |      S |dk(  r|dk(  r| j!                  |      S |dk(  r|dk(  r| j#                  |      S |dk(  r|dk(  r| j%                  |      S |dk(  r|dk(  r| j'                  |      S |dk(  r"|j)                  d      r| j+                  |      S |dk(  r"|j)                  d      r| j-                  |      S |dk(  r|dk(  r| j/                  |      S |dk(  r#|j)                  d      r| j1                  ||      S |dk(  r"|j)                  d      r| j3                  |      S |dk(  r|dk(  r| j5                  |      S |dk(  r|dk(  r| j7                  |      S |dk(  r|dk(  r| j9                  |      S |dk(  r|dk(  r| j;                  |      S dd d!d"}	||	v r|	|   \  }
}| j                  |
|      S |r| j                  ||      S |r|r| j                  d#| d$|       S | j                  d#d%      S )&Nmethodr   rs   requiredPermissionPUTz/api/orders/admin/batch-statusz/api/orders/admin/[^/]+/status$POSTz/api/orders/admin/[^/]+/cancel$z/api/orders/payorderIdsrv   logPayOrdersDetailedzPay r   r   )r2   r5   z/api/import/ordersz/api/topups/update-ticketz/api/tickets/update-ticketz/api/update-bannerz/api/admin/add-productz/api/products/DELETEz/api/admin/categoriesz/api/admin/categories/z/api/add-staffz/api/update-staffz/api/reset-passwordz/api/change-password)logOrderOperationzOrder operation)logOrderSearchActionzOrder search)logAuditLogsActionzView action logs)order_operationsorder_search
audit_logslogActionSystem zSystem action)r   r   upperr1   r   r   rw   rx   r   r   r/   rW   rm   ri   rA   r?  r   r   r8  r  
startswithr  r  r  r  r!  r&  r*  r0  r3  )r%   r,   rA  rs   r.   required_permissionr   r   r   permission_mapr6   r7   s               r)   _build_action_infoz!ActionLogModel._build_action_info  s   SWWXr*0b177937762&,"-~~c"!#''*>"C"IrJPPRU?t'GG11$77U?ryy)KTR99$EEV		*Ld S22488V(9 90:488J;OQU0V,\^Iy1H	N'aE,,&ug.xj9""#	 -   V(< <33D99U?t'BB++D11U?t'CC,,T22U?t';;33D99V(@ @11$77U?t/?@44T::X$//2B"C44T::V(? ?22488U?t/GH55dDAAX$//2J"K55d;;V(8 8//55U?t'::22488V(= =::4@@U?t'==55d;; !IDD
 .0)78K)L&J,,ZHH,,-@BUVVd,,->6(!D6@RSS(():OLLr+   keywordc                    |sy| j                  |      }|sy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      t        |j                  dd      xs d      t        |j                  dd      xs d      t        |j                  d	d      xs d      g}|j                  d
      }t        |t              r:|j                  |j                         D cg c]  }t        |xs d       c}       dj                  |      }| j                  |      }||v S c c}w )NT	actorNamer   r   rB  r:   r9   r=   rs   r>   rO  )rQ   r   r   r/   r0   extendrj   rN   )	r%   r,   rU  normalized_keyword	haystacksr5   vcombinednormalized_combineds	            r)   _matches_keywordzActionLogModel._matches_keyword`  sF    77@! R(.B/R(.B/,b17R8,23R(.B/+1r2#)r*
	 /mT*M4H4H4JKqc!'rlKL88I&!88B!%888 Ls   *E-page	page_sizerA  outcome
actor_name	date_fromdate_toc	           	         t        dt        |            }t        dt        dt        |                  }dt        idd dgid}	|r&|j	                         dk7  r|j                         |	d<   |r|j	                         dk7  r||	d	<   |r|d
d|	d<   |s|ri }
|r||
d<   |r| d|
d<   |
|	d<   t        t        j                  |	ddi      j                  dd            }g }|D ]A  }| j                  |      }i ||}| j                  ||xs d      s1|j                  |       C t        |      }|dz
  |z  }||z   }||| }|||||dkD  r||z   dz
  |z  dS ddS )Nrv   d   r   z$ninr   )r   r   allrA  ra  i)z$regexz$optionsrs   z$gtezT23:59:59.999Zz$lter   r~   r   )r   totalr_  pageSize
totalPages)maxintminr   r   rP  rW   r#   r   sortrT  r^  rZ   ri   )r%   r_  r`  rA  ra  rb  rs   rc  rd  r   created_queryr;  normalized_rowsr,   action_infomergedrj  startend
paged_rowss                       r)   get_logszActionLogModel.get_logs|  s    1c$i 3sC	N34	  !45r
+

 flln-$llnE(Ow}}%/&E)'+=E&MM(1f%+2)>(Bf%!.E+OOEE1:.T+r"

  	/C005KF
 ##FJ,<"=&&v.	/ O$Y&i$U3/
 !BG!)59,q0Y>
 	

 RS
 	
r+   )   )rv      NNNNNN)/__name__
__module____qualname__classmethodr0   r*   r1   r   rn  rA   rQ   rU   ra   re   rm   rr   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  r3  r8  r?  rT  r^  rx  r?   r+   r)   r   r      s   T  " 6T 6 6  $("&$(%) 
 Dj 4Z Tz d{ : 3      "   L L& \ \
 /C /# / / S  $   $ C# C C >3 > > S  & c  & >3 > > ?3 ? ?  
 
* Xt X X
 F
d F
 F
P E
c E
 E
 E
N 
s 
 
@ -
 -
 -
^ -
 -
 -
^ 

d 

 

 
 
 
 
 
 
 

t 

 

 
# 
T 
 
* 
# 
 
 
D 
 
* 
t 
 
* 
t 
 
 
$ 
 
 
 
 
$ 
 
 
 WMT WM WMr 94 9# 9 96  !"!% $"?
?
 ?
 d
	?

 t?
 $J?
 Dj?
 :?
 t?
 ?
r+   r   )r   r   rw   rG   bsonr   pymongor   MongoDBConnectionr   r   clientdbr#   r   r   r   r   r   r   r   r   r   r?   r+   r)   <module>r     s    ' 	    0	Y	G_
xL 	] ^, g; n <( 	] ( e
 e
r+   