o
    ÕKœh  ã                   @   sh   d dl Z d dlmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ G dd	„ d	eƒZdS )
é    N)ÚBaseCommand)Útimezone)ÚPaymentÚUnreconciledPayment)ÚCustomer)ÚSystemSettings)ÚMpesaServicec                   @   s   e Zd ZdZdd„ ZdS )ÚCommandzDebug M-Pesa payment issuesc                 O   sš  | j  d¡ | j  d¡ t ¡ }g d¢}g }|D ]}| |¡s$| |¡ q|r>| j  | j dd |¡› ¡¡ | j  d¡ n$| j  | j 	d¡¡ | j  d| d	¡› ¡ | j  d
| dd¡› d¡ | j  d¡ z t
ƒ }| ¡ }|r}| j  | j 	d¡¡ n
| j  | j d¡¡ W n! ty© }	 z| j  | j dt|	ƒ› ¡¡ W Y d }	~	nd }	~	ww | j  d¡ tjjdt ¡ tjdd d d¡d d… }
|
rñ| j  d|
 ¡ › d¡ |
D ]}| j  d|j› d|j› d|j› d|j› ¡ q×n
| j  | j d¡¡ | j  d ¡ tjjd!d" ¡ }|d#kr$| j  | j d$|› d%¡¡ | j  d&¡ n
| j  | j 	d'¡¡ | j  d(¡ tjjd)d*jd+d,}i }|D ]F}|j}| d-¡rZ| d.d#¡d/ |d.< qC| d0¡rl| d1d#¡d/ |d1< qC| d2¡r~| d3d#¡d/ |d3< qC| d4d#¡d/ |d4< qC| j  d5¡ |  ¡ D ]\}}| j  d|› d6|› d7¡ q”| j  d8¡ | j  d9¡ | j  d:¡ | j  d;¡ | j  d<¡ | j  d=¡ d S )>Nz*=== M-Pesa Payment System Diagnostics ===
z#1. Checking M-Pesa Configuration...)Úconsumer_keyÚconsumer_secretÚbusiness_short_codeÚpasskeyÚcallback_urlu   âŒ Missing M-Pesa settings: z, z5Please configure these in Settings > System Settings
u!   âœ… M-Pesa configuration completezCallback URL: r   zEnvironment: ÚenvironmentÚsandboxÚ
z%2. Testing M-Pesa API Connectivity...u$   âœ… M-Pesa API connection successfulu%   âŒ Failed to get M-Pesa access tokenu   âŒ M-Pesa API Error: z
3. Recent Payment Activity...Úmpesaé   )Údays)Úpayment_methodÚcreated_at__gtez-created_até   u
   âœ… Found z recent M-Pesa payments:z  - z: KES z (z) - u&   âš ï¸ No recent M-Pesa payments foundz%
4. Checking Unreconciled Payments...Úpending)Ústatusr   u   âš ï¸ z% unreconciled payments need attentionzCheck: /payments/unreconciled/u$   âœ… No pending unreconciled paymentsz1
5. Checking Customer Phone Format Consistency...T)Úphone__isnullÚ )Úphonez+254Úinternationalé   Ú254Úcountry_codeÚ0ÚlocalÚotherz!Phone number formats in database:z: z
 customersz
=== Diagnostics Complete ===z"If payments are still not working:z/1. Check server logs for M-Pesa callback errorsz-2. Verify callback URL is publicly accessiblez33. Test STK push with a known customer phone numberz54. Check /payments/unreconciled/ for pending payments)!ÚstdoutÚwriter   Úget_mpesa_settingsÚgetÚappendÚstyleÚERRORÚjoinÚSUCCESSr   Úget_access_tokenÚ	ExceptionÚstrr   ÚobjectsÚfilterr   ÚnowÚ	timedeltaÚorder_byÚcountÚ
payment_idÚamountr   Ú
created_atÚWARNINGr   r   Úexcluder   Ú
startswithÚitems)ÚselfÚargsÚoptionsÚmpesa_settingsÚrequired_settingsÚmissing_settingsÚsettingÚmpesa_serviceÚaccess_tokenÚeÚrecent_paymentsÚpaymentÚunreconciledÚcustomers_with_phonesÚphone_formatsÚcustomerr   Úformat_typer5   © rN   úQ/var/www/html/optinet_system/payments/management/commands/debug_mpesa_payments.pyÚhandle   s†   

€ €*€ÿþý.ÿ
zCommand.handleN)Ú__name__Ú
__module__Ú__qualname__ÚhelprP   rN   rN   rN   rO   r	   
   s    r	   )ÚjsonÚdjango.core.management.baser   Údjango.utilsr   Úpayments.modelsr   r   Úcustomers.modelsr   Úsettings.modelsr   Úpayments.servicesr   r	   rN   rN   rN   rO   Ú<module>   s   