
    i                         d dl Z d dl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  ej                  d      Zd Z G d	 d
e      Z G d de      Z G d d      Zy)    N)datetime	timedelta)	BaseModel)Optional)ObjectId)transactions_collectionusers_collectionzAsia/Ho_Chi_Minhc                     | j                   t        j                  j                  |       } | j	                  t
              j                  d      S )u2   Đảm bảo format Ngày/Tháng/Năm (DD/MM/YYYY)z%d/%m/%Y %H:%M:%S)tzinfopytzutclocalize
astimezoneVN_TZstrftime)dt_objs    2/var/www/pod-logistic/pod-api/model/topup_model.pyformat_to_vn_strr      s=    }}""6*U#,,-@AA    c                   T    e Zd ZU eed<   eed<   eed<   dZee   ed<   eed<   eed<   y)TopUpRequestpaymentMethodreferenceIdamountN
receiptUrlid_khach_hangten_khach_hang)__name__
__module____qualname__str__annotations__floatr   r    r   r   r   r      s-    M $J$r   r   c                   J    e Zd ZU eed<   eed<   eed<   eed<   dZee   ed<   y)TopUpUpdateRequestticketIdtypestatusprocessedByNrejectReason)r   r   r    r!   r"   r+   r   r$   r   r   r&   r&      s%    M
IK"&L(3-&r   r&   c            
           e Zd Zeddedee   defd       Zedefd       Z	eded	ed
e
dee   fd       Zedd       Zedefd       Zy)
TopupModelNprefixvn_nowreturnc           	         |xs t        j                  t              }|j                  d      |j                  dz  dz   }|  d| d}t        j                  dt        j                  |       d      }t        j                  dddt        j                  |       d	iidd
i      }d}|D ]X  }t        |j                  d      xs d      }|j                  |      }	|	s5t        |t        |	j                  d
                  }Z |d
z   }
	 | t        |
      j!                  d       }t        j"                  d|idd
i      }|s|S |
d
z  }
B)Nz%Y%m%d%H%M%Si  03d-^z(\d{4})$idz$regexz\d{4}$   r       _id)r   nowr   r   microsecondrecompileescaper   findr!   getmatchmaxintgroupzfillfind_one)r.   r/   timestamp_partbase_prefixregexlatest_docsmax_seqdoctx_idrA   next_seq	generatedexisteds                r   _generate_transaction_idz#TopupModel._generate_transaction_id'   s]   .8<<.  8f>P>PTX>XY\=]^.!13

a		+ 67zBC-22H299[#9":(CDE1I

  	<C+,EKK&Egs5;;q>':;		< Q;&-H(;(;A(>'?@I-66i7H5RS*UG  MH r   requestc                    t        j                  t              }t        j	                  d|      }||dd| j
                  d| j
                  dd| j                   | j                  | j                  | j                  | j                  | j                  d}t        j                  |       |j                         }t        |      |d<   d	|v r|d	= |S )
NTUDPDepositz+$,.2fPendingu   Nạp tiền qua r5   dater(   r   numericAmountr)   	reasonKeyr   r   r   r   r   rY   r9   )r   r:   r   r-   rQ   r   r   r   r   r   r   r   
insert_onecopyr   )rR   now_vnrM   new_docresponse_datas        r   create_topupzTopupModel.create_topupF   s    e$33FFC 7>>$/0$^^,W-B-B,CD"..$22!,,$22%44
 	 **73 0 8fM!e$r   r   r   r   	order_idsc                 &   t        j                  t              }t        j	                  d|      }dj                  |      }||dd|d|dd| |dd | |d	}t        j                  |       |j                         }t        |      |d
<   d|v r|d= |S )NTUDDz, 	Deductionz-$rV   	Completedu   Thanh toán đơn hàng BalancerX   rY   r9   )
r   r:   r   r-   rQ   joinr   r\   r]   r   )	r   r   r   rb   r^   rM   	order_refr_   r`   s	            r   create_deduction_transactionz'TopupModel.create_deduction_transactiona   s    e$33FFCIIi(	 6$-(#!3I;?$&*,
 	 **73 0 8fM!e$r   c                    i }|r||d<   | dk(  rd|d<   n
| dk(  rd|d<   |r&|j                         dk7  r|j                         |d<   |s|rwi }|r.t        j                  t	        j
                  |d	            }	|	|d
<   |r<t        j                  t	        j
                  |d	      t        dd      z         }
|
|d<   |r||d<   t        j                  |      j                  dd      j                  |dz
  |z        j                  |      }t        |      }t        j                  |      }g }|D ]  }|j                  d      }d|d<   |r8	 t        j                   dt#        |      i      }|r|j                  dd      |d<   t'        |j                  d      t              rt)        |d         |d<   d|v r|d= |j+                  |        ||fS # t$        $ r d|d<   Y ^w xY w)Nr   depositsrU   r(   
deductionsre   allr)   z%Y-%m-%dz$gter6   )dayssecondsz$lterY   u   Không rõ emailemailr9   u   ID không hợp lệ)lower
capitalizer   r   r   strptimer   r   r?   sortskiplimitlistcount_documentsr@   r	   rF   r   	Exception
isinstancer   append)tx_typepagepageSizer   r)   dateFromdateToquery
date_querydt_fromdt_tocursorresultstotal_countformatted_datarL   user_id_str	user_infos                     r   
get_topupszTopupModel.get_topups~   s   %2E/"j %E&M$'E&Mflln-$//1E(OvJ..):):8Z)PQ%,
6"x'8'8'Ly^_ikOl'lm%*
6" *f $((/T&"T4!8x'(U8_	 	 v,-==eD 	'C''/2K-CL: 0 9 95(;BW:X YI '0}}W>P'QG #''&/84.s6{;F|J!!#&	'" {** ! :#9CL:s   7GG! G!reqc                 |   t        j                  d| j                  i      }|sy| j                  dk(  r_|j	                  d      dk(  rK|j	                  dd      }|j	                  d      }|r&	 t        j                  d	t        |      id
d|ii       | j                  dk7  r| j                  j                         nd| j                  d}| j                  dk(  r| j                  r| j                  |d<   t        j                  d| j                  id|i       y# t        $ r}t        d|        Y d }~d }~ww xY w)Nr5   )Fu   Không tìm thấy giao dịchi  approvedr)   rW   rZ   r   r   r9   z$incbalanceu   Lỗi khi cộng tiền: resolvedResolved)r)   r*   rejectedr+   z$set)Tu*   Đã duyệt và cập nhật thành công   )r   rF   r'   r)   r@   r	   
update_oner   r{   printrt   r*   r+   )r   ticketamount_to_addr   eupdate_fieldss         r   update_ticketzTopupModel.update_ticket   s$   (1142FG?::#

8(<	(I"JJ:M **_5K;$// 56)]!;< 25z1Icjj++-z??

 ::#(8(8,/,<,<M.)**D#,,+?&-AXYF ! ;5aS9::;s   .%D 	D;#D66D;)N)rn   r6   
   NNNN)r   r   r    staticmethodr!   r   r   rQ   r   ra   r#   ry   rj   r   r&   r   r$   r   r   r-   r-   &   s     hx6H TW  < l  4 C  V[ hlmphq  8 3+ 3+j G- G Gr   r-   )r<   r   r   r   pydanticr   typingr   bsonr   MongoDBConnectionr   r	   timezoner   r   r   r&   r-   r$   r   r   <module>r      sW    	  (    G()B9 ' 'iG iGr   