o
    7›h\#  ã                   @   sP   d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 G dd„ deƒZdS )é    )ÚBaseCommand)ÚMpesaService)ÚMpesaB2CTransactionÚMpesaB2BTransactionÚMpesaReversalÚMpesaBalanceInquiry)ÚDecimalc                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚCommandz<Test advanced M-Pesa features (Balance, B2C, B2B, Reversals)c                 C   st   |j dddd |j dddd |j dddd |j d	dd
d |j dtdd |j dtdd |j dtdd d S )Nz--test-balanceÚ
store_truezTest balance inquiry)ÚactionÚhelpz
--test-b2cúTest B2C paymentz
--test-b2búTest B2B paymentz--test-reversalzTest transaction reversalz--phonezPhone number for B2C test)Útyper   z--amountzAmount for testsz--transaction-idz Transaction ID for reversal test)Úadd_argumentÚstr)ÚselfÚparser© r   úP/var/www/html/optinet_system/payments/management/commands/test_mpesa_advanced.pyÚadd_arguments
   s   zCommand.add_argumentsc                 O   sÚ   t ƒ }| j d¡ | j d¡ | j d¡ |d r|  |¡ |d r5| dd¡}| dd¡}|  |||¡ |d	 rE| dd¡}|  ||¡ |d
 rk| d¡}| dd¡}|r_|  |||¡ d S | j | j 	d¡¡ d S d S )Nú<============================================================zM-PESA ADVANCED FEATURES TESTÚtest_balanceÚtest_b2cÚphoneÚ
0700000000ÚamountÚ10Útest_b2bÚtest_reversalÚtransaction_idu-   âŒ Transaction ID required for reversal test)
r   ÚstdoutÚwriteÚtest_balance_inquiryÚgetÚtest_b2c_paymentÚtest_b2b_paymentr   ÚstyleÚERROR)r   ÚargsÚoptionsÚmpesa_servicer   r   r    r   r   r   Úhandle   s(   

úzCommand.handlec              
   C   sþ   | j  d¡ zV| ¡ }| j  d|› ¡ | d¡dkrC| d¡}| d¡}tjj||d}| j  | j d¡¡ | j  d	|› ¡ W d S | d
| dd¡¡}| j  | j 	d|› ¡¡ W d S  t
y~ } z| j  | j 	dt|ƒ› ¡¡ W Y d }~d S d }~ww )Nu    
ðŸ” Testing Balance Inquiry...ú
Response: ÚResponseCodeÚ0ÚConversationIDÚOriginatorConversationID)Úconversation_idÚoriginator_conversation_idu*   âœ… Balance inquiry initiated successfullyú   Conversation ID: ÚerrorMessageÚResponseDescriptionúUnknown erroru   âŒ Balance inquiry failed: u   âŒ Balance inquiry error: )r!   r"   Úcheck_account_balancer$   r   ÚobjectsÚcreater'   ÚSUCCESSr(   Ú	Exceptionr   )r   r+   Úresponser2   r3   Úbalance_inquiryÚ	error_msgÚer   r   r   r#   .   s&   

þ ,€ÿzCommand.test_balance_inquiryc           
   
   C   s*  | j  d|› d|› d¡ ze|j||dddd}| j  d|› ¡ | d	¡d
krY| d¡}| d¡}tjj||dtt|ƒƒ|ddd}| j  | j	 
d¡¡ | j  d|› ¡ W d S | d| dd¡¡}| j  | j	 d|› ¡¡ W d S  ty” }	 z| j  | j	 dt|	ƒ› ¡¡ W Y d }	~	d S d }	~	ww )Nu   
ðŸ’¸ Testing B2C Payment to z	 for KES ú...ÚBusinessPaymentr   ÚTesting)Úphone_numberr   Ú
command_idÚremarksÚoccasionr-   r.   r/   r0   r1   )r2   r3   rE   r   rD   rF   rG   u&   âœ… B2C payment initiated successfullyr4   r5   r6   r7   u   âŒ B2C payment failed: u   âŒ B2C payment error: )r!   r"   Úb2c_paymentr$   r   r9   r:   r   r   r'   r;   r(   r<   )
r   r+   r   r   r=   r2   r3   Úb2c_transactionr?   r@   r   r   r   r%   I   s<   û


ù
 ,€ÿzCommand.test_b2c_paymentc           	   
   C   s(  | j  d|› d¡ zg|jd|dddd}| j  d|› ¡ | d	¡d
krX| d¡}| d¡}tjj||dtt|ƒƒ|j	dddd}| j  | j
 d¡¡ | j  d|› ¡ W d S | d| dd¡¡}| j  | j
 d|› ¡¡ W d S  ty“ } z| j  | j
 dt|ƒ› ¡¡ W Y d }~d S d }~ww )Nu"   
ðŸ¢ Testing B2B Payment for KES rA   Ú600000ÚTEST123ÚBusinessPayBillr   )Úreceiver_partyr   Úaccount_referencerE   rF   r-   r.   r/   r0   r1   )r2   r3   rE   r   Úparty_aÚparty_brN   rF   u&   âœ… B2B payment initiated successfullyr4   r5   r6   r7   u   âŒ B2B payment failed: u   âŒ B2B payment error: )r!   r"   Úb2b_paymentr$   r   r9   r:   r   r   Úbusiness_short_coder'   r;   r(   r<   )	r   r+   r   r=   r2   r3   Úb2b_transactionr?   r@   r   r   r   r&   p   s>   û


ø ,€ÿzCommand.test_b2b_paymentc           
   
   C   sH  | j  d|› d¡ zd|j|||jddd}| j  d|› ¡ | d¡dkrV| d	¡}| d
¡}tjj|||tt	|ƒƒ|jddd}| j  | j
 d¡¡ | j  d|› ¡ n| d| dd¡¡}| j  | j
 d|› ¡¡ W n! ty }	 z| j  | j
 dt	|	ƒ› ¡¡ W Y d }	~	nd }	~	ww | j  d¡ | j  d¡ | j  d¡ d S )Nu'   
ðŸ”„ Testing Transaction Reversal for rA   zTest reversalrC   )r    r   rM   rF   rG   r-   r.   r/   r0   r1   )r2   r3   Úoriginal_transaction_idr   rM   rF   rG   u/   âœ… Transaction reversal initiated successfullyr4   r5   r6   r7   u!   âŒ Transaction reversal failed: u    âŒ Transaction reversal error: z=
============================================================zTEST COMPLETEDr   )r!   r"   Úreverse_transactionrR   r$   r   r9   r:   r   r   r'   r;   r(   r<   )
r   r+   r    r   r=   r2   r3   Úreversalr?   r@   r   r   r   r   ™   sD   û


ù
€*€ÿzCommand.test_reversalN)
Ú__name__Ú
__module__Ú__qualname__r   r   r,   r#   r%   r&   r   r   r   r   r   r	      s    	')r	   N)Údjango.core.management.baser   Úpayments.servicesr   Úpayments.modelsr   r   r   r   Údecimalr   r	   r   r   r   r   Ú<module>   s
   