Ë
    a%9jù@  ã                  ón  — d Z ddl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
 ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZmZ  ej4                  d«      Zd„ Zd%d„Zd&d„Zd'd„Zd(d„Z d„ Z!d„ Z"d)d„Z#d*d„Z$e
jJ                  d+d„«       Z&e
jJ                  d,d„«       Z'e
jJ                  d-d„«       Z(e
jJ                  	 	 	 	 	 	 	 	 	 	 d.d„«       Z)e
jJ                  d/d„«       Z*d0d„Z+d1d„Z,ddœd2d„Z-e
jJ                  d3d„«       Z.e
jJ                  d4d „«       Z/e
jJ                  d4d!„«       Z0d"d#œd5d$„Z1y)6uE   Wallet, payments, invoices â€” shared shipper/transporter settlement.é    )ÚannotationsN)ÚDecimal)Úsettings)Útransaction)ÚF)Útimezone)ÚShipperProfile)ÚInvoiceÚLedgerEntryÚPaymentÚWalletAccountÚWithdrawalRequest)ÚBidÚTripÚapic                 ó$   — t        t        dd«      S )NÚDEFAULT_WALLET_CURRENCYÚUSD)Úgetattrr   © ó    ú*/var/www/html/truck-me/billing/services.pyÚ	_currencyr      s   € Ü”8Ð6¸Ó>Ð>r   c                óJ   — | j                   �| j                   S | j                  S )N)Úcounter_amountÚamount)Úbids    r   Úsettlement_amount_for_bidr      s$   € Ø
×ÑÐ%Ø×!Ñ!Ð!Ø�:‰:Ðr   c                ó8  — t        | dd «      }|�'d|v r#| j                  j                  «       D ]  }|c S  y t        j                  j                  | ¬«      j                  t        j                  j                  ¬«      j                  d«      j                  «       S )NÚ_prefetched_objects_cacheÚpayments©Útrip©Ústatusú-id)r   r!   Úallr   ÚobjectsÚfilterÚexcludeÚStatusÚFAILEDÚorder_byÚfirst)r#   Ú
prefetchedÚpayments      r   Ú"latest_non_failed_payment_for_tripr1      s‚   € Ü˜Ð:¸DÓA€JØÐ *°
Ñ":Ø—}‘}×(Ñ(Ó*ò 	ˆGØŠNð	àä�‰×Ñ DÐÓ)ß	‰œŸ™×-Ñ-ˆÓ	.ß	‰�%‹ß	‰‹ð	r   c           
     óÆ  — t        | «      }d}t        | dd«      }|�t        t        |«      «      }|€ddd|dddddœS |j                  t
        j                  j                  k(  }|rdnd|j                  |j                  t        |j                  «      |j                  |j                  t
        j                  j                  k(  xr' |j                  t
        j                  j                  k(  |j                  t
        j                  j                  k(  xr@ |j                  t
        j                  j                  t
        j                  j                   fv t#        |«      dœS )zn
    High-level payment state for transporter UIs (completed trips list).
    status: pending | completed
    NÚaccepted_bidÚpendingFT)r%   Ú
raw_statusÚmethodr   Ú
payment_idÚcan_confirm_cashÚcan_confirm_cardÚawaiting_shipper_paymentÚ	completed)r1   r   Ústrr   r%   r   r+   ÚCAPTUREDr6   r   ÚidÚMethodÚCASHÚPENDING_CODÚCARDÚREQUIRES_ACTIONÚ
PROCESSINGÚ_awaiting_shipper_payment)r#   r0   Úexpected_amountr   r;   s        r   Ú'trip_payment_settlement_for_transporterrG   ,   s,  € ô
 1°Ó6€GØ€OÜ
�$˜¨Ó
-€CØ
€ÜÔ7¸Ó<Ó=ˆà€àØØØ%ØØ %Ø %Ø(,ñ	
ð 		
ð —‘¤'§.¡.×"9Ñ"9Ñ9€Iá!*‘+°	Ø—n‘nØ—.‘.Ü�g—n‘nÓ%Ø—j‘jà�N‰NœgŸn™n×1Ñ1Ñ1ò =Ø—‘¤'§.¡.×"<Ñ"<Ñ<ð �N‰NœgŸn™n×1Ñ1Ñ1ò Ø—‘Ü—‘×.Ñ.Ü—‘×)Ñ)ð#ð ô
 %>¸gÓ$Fñ#ð r   c                ó"  — | j                   t        j                  j                  k(  r(| j                  t        j
                  j                  k(  ry| j                   t        j                  j                  k(  rA| j                  t        j
                  j                  t        j
                  j                  fv ry| j                  t        j
                  j                  t        j
                  j                  t        j
                  j                  fv S )zPFalse once shipper has chosen a method awaiting driver/transporter confirmation.F)r6   r   r?   r@   r%   r+   rA   rB   rC   rD   ÚPENDING©r0   s    r   rE   rE   Y   s³   € à‡~�~œŸ™×,Ñ,Ò,°·±Ä7Ç>Á>×C]ÑC]Ò1]ØØ‡~�~œŸ™×,Ñ,Ò,°·±Ü�‰×&Ñ&Ü�‰×!Ñ!ðDñ 2ð Ø�>‰>Ü�‰×ÑÜ�‰×!Ñ!Ü�‰×&Ñ&ðð ð r   c                ób   — t         j                  j                  | dt        «       i¬«      \  }}|S )NÚcurrency)ÚuserÚdefaults)r   r(   Úget_or_creater   )rM   ÚwÚ_s      r   Úget_or_create_walletrR   i   s/   € Ü× Ñ ×.Ñ.°DÀJÔPYÓP[ÐC\Ð.Ó]�D€A€qØ€Hr   c                 ó®   — dt        j                  «       j                  d«      › dt        j                  «       j
                  d d j                  «       › �S )NzINV-z%Y%m%dÚ-é
   )r   ÚnowÚstrftimeÚuuidÚuuid4ÚhexÚupperr   r   r   Úgenerate_invoice_numberr\   n   sD   € Ø”(—,‘,“.×)Ñ)¨(Ó3Ð4°A´d·j±j³l×6FÑ6FÀsÈÐ6K×6QÑ6QÓ6SÐ5TÐUÐUr   c           
     ód   — t         j                  j                  t        «       | ||||||¬«      }|S )N)Únumberr#   ÚshipperÚ
line_itemsÚtaxÚtotalr%   r0   )r
   r(   Úcreater\   )r#   r_   r0   r`   ra   rb   r%   Úinvs           r   Ú_issue_invoice_for_tripre   r   s=   € Ü
�/‰/×
 Ñ
 Ü&Ó(ØØØØØØØð !ó 	€Cð €Jr   c                óT   — d| j                   › d| j                  › �t        |«      dœgS )Nz
Shipment #z	 / Trip #)Údescriptionr   )Úshipment_idr>   r<   )r#   r   s     r   Ú_build_trip_invoice_line_itemsri   €   s/   € Ø(¨×)9Ñ)9Ð(:¸)ÀDÇGÁGÀ9ÐMÔY\Ð]cÓYdÑeÐfÐfr   c           	     óÒ  — t         j                  j                  «       j                  | ¬«      j	                  dd«      j                  «       }|r|S | j                  t        j                  j                  k7  rt        d«      ‚t        | j                  «      }t        | | j                  j                  dt!        | |«      t#        d«      |t         j                  j$                  ¬«      S )z¨
    Requirement sequence: invoice is generated after trip completion and before payment.
    Idempotent: reuses latest invoice for the trip if one already exists.
    r"   ú
-issued_atr&   z<Invoice can only be generated when trip status is COMPLETED.NÚ0©r#   r_   r0   r`   ra   rb   r%   )r
   r(   Úselect_for_updater)   r-   r.   r%   r   r+   Ú	COMPLETEDÚ
ValueErrorr   r3   re   Úshipmentr_   ri   r   ÚISSUED)r#   Úexistingr   s      r   Ú!ensure_invoice_for_completed_triprt   „   s¶   € ô �‰×0Ñ0Ó2×9Ñ9¸tÐ9ÓD×MÑMÈlÐ\aÓb×hÑhÓj€HÙØˆØ‡{�{”d—k‘k×+Ñ+Ò+ÜÐWÓXÐXÜ& t×'8Ñ'8Ó9€FÜ"ØØ—‘×%Ñ%ØÜ1°$¸Ó?Ü�C‹LØÜ�~‰~×$Ñ$ôð r   c                óŠ   — | j                   r| S d| _         t        j                  «       | _        | j	                  ddg¬«       | S )NTÚis_archivedÚarchived_at©Úupdate_fields)rv   r   rV   rw   Úsave©Úinvoices    r   Úarchive_invoice_after_paymentr}   ›   s>   € à×ÒØˆØ€GÔÜ"Ÿ,™,›.€GÔØ‡L�L ¨}Ð=€LÔ>Ø€Nr   c           	     ó4  — t        | «       t        |«       t        j                  j                  «       j	                  | ¬«      }t        j                  j                  «       j	                  |¬«      }|j
                  |k  rt        d«      ‚d|j                  › d|› �}	d|j                  › d|› �}
t        j                  j                  | |	¬«      j                  «       s…t        j                  j                  | | t        j                  j                  |||	d¬«       t        j                  j                  |j                  ¬	«      j                  t!        d
«      |z
  ¬«       t        j                  j                  ||
¬«      j                  «       s…t        j                  j                  ||t        j                  j"                  |||
d¬«       t        j                  j                  |j                  ¬	«      j                  t!        d
«      |z   ¬«       yy)z@Debit payer wallet, credit payee wallet; idempotent ledger rows.©rM   úInsufficient wallet balance.z
pay-debit-rT   zpay-credit-©rM   Úidempotency_keyzShipment payment©rM   r   Ú
entry_typer#   r0   r‚   Únote©ÚpkÚbalance©rˆ   zTrip earningN)rR   r   r(   rn   Úgetrˆ   rp   r>   r   r)   Úexistsrc   Ú	EntryTypeÚWALLET_DEBIT_PAYMENTr‡   Úupdater   ÚWALLET_CREDIT_EARNING)ÚpayerÚpayeer   rL   r#   r0   Ú
idem_partsÚpayer_walletÚpayee_walletÚ	debit_keyÚ
credit_keys              r   Ú_apply_wallet_transferr—   ¥   sÈ  € ô ˜ÔÜ˜ÔÜ ×(Ñ(×:Ñ:Ó<×@Ñ@ÀeÐ@ÓL€LÜ ×(Ñ(×:Ñ:Ó<×@Ñ@ÀeÐ@ÓL€LØ×Ñ˜fÒ$ÜÐ7Ó8Ð8à˜WŸZ™Z˜L¨¨*¨Ð6€IØ˜wŸz™z˜l¨!¨J¨<Ð8€Jä×Ñ×%Ñ%¨5À)Ð%ÓL×SÑSÔUÜ×Ñ×"Ñ"ØØ�7Ü"×,Ñ,×AÑAØØØ%Ø#ð 	#ô 	
ô 	×Ñ×$Ñ$¨¯©Ð$Ó8×?Ñ?ÌÈ)ËÐW]ÑH]Ð?Ô^ä×Ñ×%Ñ%¨5À*Ð%ÓM×TÑTÔVÜ×Ñ×"Ñ"ØØÜ"×,Ñ,×BÑBØØØ&Øð 	#ô 	
ô 	×Ñ×$Ñ$¨¯©Ð$Ó8×?Ñ?ÌÈ)ËÐW]ÑH]Ð?Õ^ð Wr   c           	     ó  — t        | «       t        j                  j                  «       j	                  | ¬«      }d|j
                  › d|› �}t        j                  j                  | |¬«      j                  «       ryt        j                  j                  | |t        j                  j                  ||||¬«       t        j                  j                  |j                  ¬«      j                  t        d«      |z   ¬	«       y)
zXTransporter credited after in-person cash/card collected; shipper wallet is not debited.r   zin-person-earn-rT   r�   Nrƒ   r†   rˆ   r‰   )rR   r   r(   rn   rŠ   r>   r   r)   r‹   rc   rŒ   r�   r‡   rŽ   r   )r‘   r   r#   r0   r’   r…   r”   r–   s           r   Ú#_apply_in_person_collection_earningr™   Ë   sØ   € ô
 ˜ÔÜ ×(Ñ(×:Ñ:Ó<×@Ñ@ÀeÐ@ÓL€LØ" 7§:¡: ,¨a°
¨|Ð<€JÜ×Ñ×!Ñ! u¸jÐ!ÓI×PÑPÔRØÜ×Ñ×ÑØØÜ×(Ñ(×>Ñ>ØØØ"Øð ô ô ×Ñ× Ñ  L§O¡OÐ Ó4×;Ñ;ÄAÀiÃLÐSYÑDYÐ;ÕZr   c           	     ó  — t        | «       t        j                  j                  «       j	                  | ¬«      }d|j
                  › d|› �}t        j                  j                  | |¬«      j                  «       ryt        j                  j                  | |t        j                  j                  |||d¬«       t        j                  j                  |j                  ¬«      j                  t        d	«      |z   ¬
«       y)zATransporter credited on credit terms; no shipper wallet movement.r   zcredit-earn-rT   r�   NzCredit terms earningrƒ   r†   rˆ   r‰   )rR   r   r(   rn   rŠ   r>   r   r)   r‹   rc   rŒ   ÚCREDIT_EARNINGr‡   rŽ   r   )r‘   r   r#   r0   r’   r”   r–   s          r   Ú_apply_credit_earning_onlyrœ   á   sØ   € ô ˜ÔÜ ×(Ñ(×:Ñ:Ó<×@Ñ@ÀeÐ@ÓL€LØ §
¡
˜|¨1¨Z¨LÐ9€JÜ×Ñ×!Ñ! u¸jÐ!ÓI×PÑPÔRØÜ×Ñ×ÑØØÜ×(Ñ(×7Ñ7ØØØ"Ø#ð ô ô ×Ñ× Ñ  L§O¡OÐ Ó4×;Ñ;ÄAÀiÃLÐSYÑDYÐ;ÕZr   c                óv   — d}| �-| j                   j                  d«      xs dj                  «       }|sd|› �}|S )NÚ ÚHTTP_IDEMPOTENCY_KEYzserver-)ÚMETArŠ   Ústrip)ÚrequestÚsuffixÚraws      r   Ú	_idem_keyr¥   õ   sD   € Ø
€CØÐØ�|‰|×ÑÐ 6Ó7Ò=¸2×DÑDÓFˆÙØ˜�xÐ ˆØ€Jr   c                ó4   — |j                   | j                  k(  S )zVOnly the trip transporter (bid winner / fleet owner or individual driver) may confirm.)r>   Útransporter_id©r#   rM   s     r   Úuser_can_confirm_trip_paymentr©   þ   s   € à�7‰7�d×)Ñ)Ñ)Ð)r   )r¢   c                óF  — | j                   j                  |j                  k7  rt        d«      ‚| j                  t
        j                  j                  k7  rt        d«      ‚| j                  }| j                  }t        |«      }t        «       }t        || j                  › d|› �«      }t        | ¬«      }	|	j                  t        j                  j                  t        j                  j                   fv rt        d«      ‚t"        j$                  j'                  | ||¬«      j)                  t"        j                  j*                  ¬«      j-                  «       }
|
r¶|
j                  t"        j                  j.                  t"        j                  j0                  t"        j                  j2                  t"        j                  j4                  fv rD|
t        j$                  j'                  |
¬«      j7                  d	«      j-                  «       xs |	d
œS t"        j$                  j'                  | t"        j                  j.                  t"        j                  j0                  t"        j                  j4                  t"        j                  j2                  f¬«      j)                  |¬«      }|j9                  «       rt        d«      ‚|t"        j:                  j<                  k(  rnt>        j$                  j'                  |¬«      j-                  «       }|r3|j@                  t>        jB                  jD                  k7  s|jF                  st        d«      ‚tI        jJ                  «       5  t"        j$                  jM                  | |||||t"        j                  jN                  |¬«      }|t"        j:                  jP                  k(  r™t"        j                  j.                  |_        |jS                  ddg¬«       tU        ||||| ||¬«       ||	_+        t        j                  j                  |	_        |	jS                  ddg¬«       tY        |	¬«       ||	d
œcddd«       S |t"        j:                  jZ                  k(  r[t"        j                  j0                  |_        |jS                  ddg¬«       ||	_+        |	jS                  dg¬«       ||	d
œcddd«       S |t"        j:                  j<                  k(  r—t"        j                  j.                  |_        |jS                  ddg¬«       t]        ||| ||¬«       ||	_+        t        j                  j                  |	_        |	jS                  ddg¬«       tY        |	¬«       ||	d
œcddd«       S |t"        j:                  j^                  k(  r[t"        j                  j4                  |_        |jS                  ddg¬«       ||	_+        |	jS                  dg¬«       ||	d
œcddd«       S 	 ddd«       t        d«      ‚# 1 sw Y   t        d«      ‚xY w)u#  
    Create/update payment for trip (WALLET, CARD, CASH, CREDIT â€” ledger in database).
    CARD and CASH require trip transporter confirmation after shipper selects the method.
    Returns dict with keys: payment, invoice (optional).
    Raises ValueError on business rule violations.
    z%Trip does not belong to this shipper.z6Payment can only be processed after trip is COMPLETED.rT   r"   z)Invoice is already settled for this trip.)r#   r�   r‚   r$   rJ   rk   )r0   r|   )r#   Ú
status__in)r‚   z'A payment already exists for this trip.r   z1Credit payment is not available for this account.)r#   r�   r‘   r6   r   rL   r%   r‚   r%   Ú
updated_atrx   )r�   r‘   r   rL   r#   r0   r’   r0   r{   N)r‘   r   r#   r0   r’   zUnsupported payment method.)0rq   Ú
shipper_idr>   rp   r%   r   r+   ro   Útransporterr3   r   r   r¥   rt   r
   ÚPAIDÚVOIDr   r(   r)   r*   r,   r.   r=   rA   rD   rC   r-   r‹   r?   ÚCREDITr	   Úaccount_typeÚAccountTypeÚBUSINESSÚcredit_approvedr   Úatomicrc   rI   ÚWALLETrz   r—   r0   r}   r@   rœ   rB   )r#   r_   r6   r¢   r‘   r   r   rL   Úidemr|   rs   ÚblockingÚprofiler0   s                 r   Úprocess_shipper_trip_paymentr»     s×  € ð ‡}�}×Ñ 7§:¡:Ò-ÜÐ@ÓAÐAØ‡{�{”d—k‘k×+Ñ+Ò+ÜÐQÓRÐRØ×Ñ€EØ
×
Ñ
€CÜ& sÓ+€FÜ‹{€HÜ�W §¡ 	¨¨6¨(Ð3Ó4€DÜ/°TÔ:€GØ‡~�~œ'Ÿ.™.×-Ñ-¬w¯~©~×/BÑ/BÐCÑCÜÐDÓEÐEô 	�‰×Ñ D°ÈÐÓNß	‰œŸ™×-Ñ-ˆÓ	.ß	‰‹ð ñ
 �H—O‘OÜ�‰×ÑÜ�‰×"Ñ"Ü�‰×!Ñ!Ü�‰×&Ñ&ð	(ñ ð  Ü—‘×-Ñ-°hÐ-Ó?×HÑHÈÓV×\Ñ\Ó^ÒiÐbiñ
ð 	
ô
 �‰×%Ñ%Øä�N‰N×#Ñ#Ü�N‰N×&Ñ&Ü�N‰N×*Ñ*Ü�N‰N×%Ñ%ð	
ð &ó ÷ �g˜d€gÓ#ð ð ‡�ÔÜÐBÓCÐCà”—‘×&Ñ&Ò&Ü ×(Ñ(×/Ñ/°WÐ/Ó=×CÑCÓEˆÙ˜'×.Ñ.´.×2LÑ2L×2UÑ2UÒUÐ]d×]tÒ]tÜÐPÓQÐQä	×	Ñ	Ó	ñ /<Ü—/‘/×(Ñ(ØØØØØØÜ—>‘>×)Ñ)Ø ð )ó 	
ˆð ”W—^‘^×*Ñ*Ò*Ü$Ÿ^™^×4Ñ4ˆGŒNØ�L‰L¨°,Ð'?ˆLÔ@Ü"Ø U°6ÀHØ 7°tõð &ˆGŒOÜ$Ÿ^™^×0Ñ0ˆGŒNØ�L‰L¨	°8Ð'<ˆLÔ=Ü)°'Õ:Ø&°7Ñ;÷//<ñ /<ð2 ”W—^‘^×(Ñ(Ò(Ü$Ÿ^™^×7Ñ7ˆGŒNØ�L‰L¨°,Ð'?ˆLÔ@Ø%ˆGŒOØ�L‰L¨	 {ˆLÔ3Ø&°7Ñ;÷=/<ñ /<ð@ ”W—^‘^×*Ñ*Ò*Ü$Ÿ^™^×4Ñ4ˆGŒNØ�L‰L¨°,Ð'?ˆLÔ@Ü&¨U¸6ÈÐV]ÐjnÕoØ%ˆGŒOÜ$Ÿ^™^×0Ñ0ˆGŒNØ�L‰L¨	°8Ð'<ˆLÔ=Ü)°'Õ:Ø&°7Ñ;÷Q/<ñ /<ðT ”W—^‘^×(Ñ(Ò(Ü$Ÿ^™^×;Ñ;ˆGŒNØ�L‰L¨°,Ð'?ˆLÔ@Ø%ˆGŒOØ�L‰L¨	 {ˆLÔ3Ø&°7Ñ;÷_/<ñ /<ðT )÷U/<ôb Ð2Ó
3Ð3÷c/<ôb Ð2Ó
3Ð3ús"   ÍC,XÑA.XÓB*XÖA.XØX c           	     óª  — | j                   j                  }|j                  }|j                  xs t	        |j
                  «      }t        j                  j                  |_	        |j                  ddg¬«       t        | j                  || ||› d|› �|¬«       t        j                  j                  | |¬«      j!                  «       }|r@t        j                  j"                  |_	        |j                  dg¬«       t%        |¬«       |S t'        | ||t)        | |«      t+        d«      |t        j                  j"                  ¬	«      }t%        |¬«       |S )
zGMark payment captured, credit payee wallet, settle and archive invoice.r%   r¬   rx   rT   )r‘   r   r#   r0   r’   r…   )r#   r0   r{   rl   rm   )rq   r_   r   r‚   r<   r>   r   r+   r=   r%   rz   r™   r®   r
   r(   r)   r.   r¯   r}   re   ri   r   )	r#   r0   Úidem_suffixÚearning_noter_   r   r¸   rd   Úissueds	            r   Ú_finalize_in_person_paymentrÀ   l  s  € ð �m‰m×#Ñ#€GØ�^‰^€FØ×"Ñ"Ò5¤c¨'¯*©*£o€DÜ—^‘^×,Ñ,€G„NØ‡L�L ¨,Ð7€LÔ8Ü'Ø×ÑØØØØ�V˜1˜[˜MÐ*Øõô �/‰/×
 Ñ
  d°GÐ
 Ó
<×
BÑ
BÓ
D€CÙ
Ü—^‘^×(Ñ(ˆŒ
Ø�‰ ˜zˆÔ*Ü%¨cÕ2ð €Nô )Ø˜w°Ü5°d¸FÓCÜ˜“ØÜ—>‘>×&Ñ&ô
ˆô 	&¨fÕ5Ø€Nr   c                ód  — t        | |¬«      st        d«      ‚t        j                  j	                  «       j                  | t        j                  j                  t        j                  j                  ¬«      j                  d«      j                  «       }|st        d«      ‚t        | |dd¬«      S )	zZTrip transporter confirms physical cash received; credit transporter platform wallet only.r¨   úNot your trip.)r#   r6   r%   r&   z&No pending cash payment for this trip.ÚcodzCash on delivery collected©r#   r0   r½   r¾   )r©   rp   r   r(   rn   r)   r?   r@   r+   rA   r-   r.   rÀ   ©r#   Útransporter_userr0   s      r   Úconfirm_cash_collectionrÇ   �  sŒ   € ô )¨dÐ9IÕJÜÐ)Ó*Ð*ä�‰×)Ñ)Ó+ß	‰�T¤'§.¡.×"5Ñ"5¼g¿n¹n×>XÑ>XˆÓ	Yß	‰�%‹ß	‰‹ð	 ñ ÜÐAÓBÐBÜ&Ø˜7°ÐD`ôð r   c                ó˜  — t        | |¬«      st        d«      ‚t        j                  j	                  «       j                  | t        j                  j                  t        j                  j                  t        j                  j                  f¬«      j                  d«      j                  «       }|st        d«      ‚t        | |dd¬«      S )	zZTrip transporter confirms in-person card payment; credit transporter platform wallet only.r¨   rÂ   )r#   r6   r«   r&   z&No pending card payment for this trip.ÚcardzCard payment collectedrÄ   )r©   rp   r   r(   rn   r)   r?   rB   r+   rC   rD   r-   r.   rÀ   rÅ   s      r   Úconfirm_card_collectionrÊ   Ÿ  s¥   € ô )¨dÐ9IÕJÜÐ)Ó*Ð*ä�‰×)Ñ)Ó+ß	‰ØÜ—>‘>×&Ñ&ÜŸ™×6Ñ6¼¿¹×8QÑ8QÐRð 
ó 

÷
 
‰�%‹ß	‰‹ð ñ ÜÐAÓBÐBÜ&Ø˜7°ÐE]ôð r   rž   )r…   c                óø   — t        | «      }|dk  rt        d«      ‚|j                  |k  rt        d«      ‚t        j                  j                  | ||j                  |t        j                  j                  ¬«      S )z[Record a payout request; balance is unchanged until admin/process marks PAID (out of band).r   zAmount must be positive.r€   )rM   r   rL   r…   r%   )	rR   rp   rˆ   r   r(   rc   rL   r+   rI   )rM   r   r…   Úwallets       r   Úcreate_withdrawal_requestrÍ   µ  sq   € ä! $Ó'€FØ�‚{ÜÐ3Ó4Ð4Ø‡~�~˜ÒÜÐ7Ó8Ð8Ü×$Ñ$×+Ñ+Ø˜&¨6¯?©?ÀÔN_×NfÑNf×NnÑNnð ,ó ð r   )r   r   )r#   r   ÚreturnúPayment | None)r#   r   rÎ   Údict)r0   r   rÎ   Úbool)r#   r   r0   rÏ   ra   r   rb   r   )r#   r   r   r   )r#   r   rÎ   r
   )r|   r
   )
r   r   rL   r<   r#   r   r0   r   r’   r<   )
r   r   r#   r   r0   r   r’   r<   r…   r<   )r   r   r#   r   r0   r   r’   r<   )r£   r<   rÎ   r<   )r#   r   rÎ   rÑ   )r#   r   r6   r<   rÎ   rÐ   )r#   r   r0   r   r½   r<   r¾   r<   )r#   r   )r   r   r…   r<   rÎ   r   )2Ú__doc__Ú
__future__r   ÚloggingrX   Údecimalr   Údjango.confr   Ú	django.dbr   Údjango.db.modelsr   Údjango.utilsr   Úaccounts.modelsr	   Úbilling.modelsr
   r   r   r   r   Úcore.modelsr   r   Ú	getLoggerÚloggerr   r   r1   rG   rE   rR   r\   re   ri   r¶   rt   r}   r—   r™   rœ   r¥   r©   r»   rÀ   rÇ   rÊ   rÍ   r   r   r   ú<module>rß      s—  ðÙ KÝ "ã Û Ý å  Ý !Ý Ý !å *ß ZÕ Zß !à	ˆ×	Ñ	˜5Ó	!€ò?óóó*óZò ò
Vóógð ×Ñòó ðð, ×Ñòó ðð ×Ñò"_ó ð"_ðJ ×Ñð[Øð[Ø%)ð[Ø4;ð[ØILð[ØTWò[ó ð[ð* ×Ñò[ó ð[ó&ó*ð
 OSõ f4ðR ×Ñòó ðð@ ×Ñòó ðð" ×Ñòó ðð* EGö 	r   