
    ib                        d dl mZmZmZmZmZ d dlmZmZm	Z	 d dl
mZmZ d dlmZmZmZ d dlmZ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 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+Z+d dl,Z,d dl-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:	  e/j;        e/j<        d           n8# e/j=        $ r+ 	  e/j;        e/j<        d           n# e/j=        $ r Y nw xY wY nw xY w	 d Z>	 d Z?	 d Z@	 d ZA	 d  ZB	 d! ZC	 d" ZD	 d# ZE	 d$ ZF	 d% ZG	 d& ZH	 d' ZI	 d( ZJ	 d) ZK	 d* ZL	 d+ ZM	 d, ZN	 d- ZO	 d. ZPd/ ZQd7d1ZRd8d3ZSd4 ZTd5 ZUd6 ZVdS )9    )SimpleDocTemplateTable
TableStyle	ParagraphSpacer)
HRFlowable	PageBreakImage)getSampleStyleSheetParagraphStyle)TA_LEFTTA_RIGHT	TA_CENTER)EmailMessageget_connection)render_to_string)ReceiptTransaction)sync_playwright)get_object_or_404)ContentFile)TTFont)
pdfmetrics)A4)inch)colors)settingsN198753198750198751198752198754PEApz1UNdI2KToYWBS5O0Fl4QDM8G6jxvi97PgaRhLqHrfwyeZuMsG2LUHqg6ZQoCKhbwXBz71pi9vANVKDIGCFz#https://www.fast2sms.com/dev/bulkV2z
en_IN.utf8en_INc                     dddS )NsuccesszSMS sentstatusmessage 	new_replys    >C:\Users\anoop\OneDrive\Desktop\AspireAid\adminModule\utils.pysms_send_responser/   1   s    J777    c                     dS )N)Tz
Email sentr+   r,   s    r.   email_send_responser2   6   s    r0   c                     dddS )Nr'   zWhatsApp sentr(   r+   r,   s    r.   whatsapp_send_responser4   ;   s    O<<<r0   c                 \   	 | j         j         }| j        j        }| j         j        }| d| d| d}t
          dt          t          |d|d}t          j	        t          |          }|j        dk    r
d|j        dS d	|j        dS # t          $ r}d	t          |          d
cY d }~S d }~ww xY wN|dlt0authorizationroute	sender_idr*   variables_valuesflashnumbersparams   r'   r)   responseerrorr(   )sender	full_nameprojecttitlephoneauthorization_key	header_idSMS_INITIATE_TEMPLATE_IDrequestsgetSMS_DLT_APIstatus_codetext	Exceptionstr)	transactionurluser_full_nameproject_titlephone_numberr>   rB   rE   es	            r.   sms_send_initiatedr\   @   s    6'.8:#+1")/,EE}EEsEEE.Y/EU\3 3
 <F;;;3&&'X]CCC%8=AAA 6 6 6!c!ff555555556s$   A8B ;	B 
B+B& B+&B+c                 j   	 | j         j         }| j        }| j        j        }| j         j        }| d| d| d}t          dt          t          |d|d}t          j
        t          |          }|j        dk    r
d|j        dS d	|j        dS # t          $ r}d	t          |          d
cY d }~S d }~ww xY wr6   )rG   rH   tracking_idrI   rJ   rK   rL   rM   SMS_PROOF_TEMPLATE_IDrO   rP   rQ   rR   rS   rT   rU   )	rV   rX   r^   rY   rZ   r>   rB   rE   r[   s	            r.   sms_send_proofr`   W   s    6'.8:!-#+1")/,MM}MM{MMM.Y,BR\4 4 <F;;;3&&'X]CCC%8=AAA 6 6 6!c!ff555555556s$   A?B 	B 
B2B-'B2-B2c                    	 t          t          |           }| j        j         }| j        j        }|j        r.t          j        	                    |j        j
                  |_        | j        j        }| d| d|j         d}t          dt          t          |d|d}t!          j        t$          |          }|j        dk    r
d|j        d	S d
|j        d	S # t*          $ r}d
t-          |          dcY d }~S d }~ww xY w)NrV   r7   r8   r9   r:   rA   rC   r'   rD   rF   r(   )r   r   rG   rH   rI   rJ   receipt_pdfospathbasenamenamefilenamerK   rL   rM   SMS_APPROVE_TEMPLATE_IDrO   rP   rQ   rR   rS   rT   rU   )	rV   receiptrX   rY   rZ   r>   rB   rE   r[   s	            r.   sms_send_approverk   n   s-   6#GEEE'.8:#+1 	J!w//0C0HIIG")/,RR}RRw?ORRR.9.CSL3 3
 <F;;;3&&'X]CCC%8=AAA 6 6 6!c!ff555555556s$   CC 	C 
C;C60C;6C;c                 V   	 | j         j         }| j        j        }| j         j        }| d| d}t
          dt          t          |d|d}t          j	        t          |          }|j        dk    r
d|j        dS d	|j        dS # t          $ r}d	t          |          d
cY d }~S d }~ww xY wr6   )rG   rH   rI   rJ   rK   rL   rM   SMS_REJECT_TEMPLATE_IDrO   rP   rQ   rR   rS   rT   rU   rV   rX   rY   rZ   r>   rB   rE   r[   s           r.   sms_send_rejectro      s    6'.8:#+1")/,??}???.9-BRL3 3
 <F;;;3&&'X]CCC%8=AAA 6 6 6!c!ff555555556$   A5B 8	B 
B(B#B(#B(c                 V   	 | j         j         }| j        j        }| j         j        }| d| d}t
          dt          t          |d|d}t          j	        t          |          }|j        dk    r
d|j        dS d	|j        dS # t          $ r}d	t          |          d
cY d }~S d }~ww xY wr6   )rG   rH   rI   rJ   rK   rL   rM   SMS_UNVERIFY_TEMPLATE_IDrO   rP   rQ   rR   rS   rT   rU   rn   s           r.   sms_send_unverifyrs      s    6'.8:#+1")/,??}???.9/DTL3 3
 <F;;;3&&'X]CCC%8=AAA 6 6 6!c!ff555555556rp   c           	         	 | j         j         d| j        j         d| j         d| }t
          j        t
          j        t
          j        | j         j	        dt
          j
        t
          j        |d}t          j        t
          j        |          }|j        dk    r
d|j        dS d|j         d	|j         }d
|dS # t"          $ r!}dt%          |           }d
|dcY d }~S d }~ww xY w)N,cf_payment_initiated_v2userpassrG   rK   rS   prioritystypeParamsrA   rC   r'   rD   "API returned non-200 status code: . Response: rF   r(   ,An exception occurred during WhatsApp send: )rG   rH   rI   rJ   r^   r   WHATSAPP_BHASHSMS_API_USERWHATSAPP_BHASHSMS_API_PASSWHATSAPP_BHASHSMS_API_SENDERrK   WHATSAPP_BHASHSMS_API_PRIORITYWHATSAPP_BHASHSMS_API_STYPErO   rP   WHATSAPP_BHASHSMS_APIrR   rS   rT   rU   )rV   rW   params_string
api_paramsrE   error_messager[   s          r.   whatsapp_send_initiatedr      s,   =&-7uu+:M:SuuVaVmuupsuu7@cnv  oT '-6O\d  ]D9MS S

 < >zRRR3&&'X]CCCrAUrrckcprrM%-@@@ = = =Os1vvOO!m<<<<<<<<=s$   B!B; $B; ;
C&C!C&!C&c           	         	 | j         j         d| j         d| j        j         }t
          j        t
          j        t
          j        | j         j	        dt
          j
        t
          j        |d}t          j        t
          j        |          }|j        dk    r
d|j        dS d	|j         d
|j         }d|dS # t"          $ r!}dt%          |           }d|dcY d }~S d }~ww xY w)N, ru   cf_successful_proofrw   rA   rC   r'   rD   r}   r~   rF   r(   r   )rG   rH   r^   rI   rJ   r   r   r   r   rK   r   r   rO   rP   r   rR   rS   rT   rU   rV   r   r   rE   r   r[   s         r.   whatsapp_send_proofr      s   =&-7pp;;RppU`UhUnpp77; '-) ?9#& &
 < >zRRR3&&'X]CCCrAUrrckcprrM%-@@@ = = =Os1vvOO!m<<<<<<<<=s$   BB8 !B8 8
C#CC#C#c           	      b   	 t          t          |           }|j        r.t          j                            |j        j                  |_        | j        j	         d| j
        j         d|j         }t          j        t          j        t          j        | j        j        dt          j        t          j        |d}t'          j        t          j        |          }|j        dk    r
d|j        dS d	|j         d
|j         }d|dS # t0          $ r!}dt3          |           }d|dcY d }~S d }~ww xY w)Nrb   r   cf_transaction_approvedrw   rA   rC   r'   rD   r}   r~   rF   r(   r   )r   r   rc   rd   re   rf   rg   rh   rG   rH   rI   rJ   r   r   r   r   rK   r   r   rO   rP   r   rR   rS   rT   rU   )rV   rj   r   r   rE   r   r[   s          r.   whatsapp_send_approver      sW   =#GEEE 	J!w//0C0HIIG&-7jj;;N;TjjX_Xhjj77; '-- ?9#% %
 < >zRRR3&&'X]CCCrAUrrckcprrM%-@@@ = = =Os1vvOO!m<<<<<<<<=s$   C)D ,D 
D.D)#D.)D.c           	         	 | j         j         d| j        j         }t          j        t          j        t          j        | j         j        dt          j	        t          j
        |d}t          j        t          j        |          }|j        dk    r
d|j        dS d|j         d	|j         }d
|dS # t           $ r!}dt#          |           }d
|dcY d }~S d }~ww xY w)Nr   cf_transaction_rejectedrw   rA   rC   r'   rD   r}   r~   rF   r(   r   rG   rH   rI   rJ   r   r   r   r   rK   r   r   rO   rP   r   rR   rS   rT   rU   r   s         r.   whatsapp_send_rejectr     s   =&-7VV;;N;TVV77; '-- ?9#% %
 < >zRRR3&&'X]CCCrAUrrckcprrM%-@@@ = = =Os1vvOO!m<<<<<<<<=$   BB0 B0 0
C:CCCc           	         	 | j         j         d| j        j         }t          j        t          j        t          j        | j         j        dt          j	        t          j
        |d}t          j        t          j        |          }|j        dk    r
d|j        dS d|j         d	|j         }d
|dS # t           $ r!}dt#          |           }d
|dcY d }~S d }~ww xY w)Nr   cf_transaction_unverifiedrw   rA   rC   r'   rD   r}   r~   rF   r(   r   r   r   s         r.   whatsapp_send_unverifyr     s   =&-7VV;;N;TVV77; '-/ ?9#% %
 < >zRRR3&&'X]CCCrAUrrckcprrM%-@@@ = = =Os1vvOO!m<<<<<<<<=r   c                     	 t          dd| j        | j        dd          }d|fS # t          $ r}d| }d|fcY d }~S d }~ww xY w)Nzsmtp.gmail.comiK  TF)hostportusernamepassworduse_tlsuse_sslzPCould not establish email connection. Please check the SMTP credentials. Error: )r   emailemail_app_passwordrT   )institution
connectionr[   r   s       r.   get_email_connectionr   5  s    $#)9sKL]-8-KTXafh h h
Z $ $ $nklnnm#######$s   "% 
A=AAc           
         	 | j         j        }t          |          \  }}|sd|fS d| j         j         d}d| j        j         d| j         j         d| j         d| d|j         
}| j         j        j        }| j        j        }t          ||||g|	          }	|	
                    d
           dS # t          $ r}
d|
 }d|fcY d }
~
S d }
~
ww xY w)NFzPayment Initiated for ""Dear ",

Your donation for the project "z3" has been successfully recorded with tracking id: zd. You can track the status using your mobile number.
You can upload proof or track the status here: z	

- Team subjectbody
from_emailtor   fail_silentlyTzEmail sent successfully.2An error occurred while sending the email. Error: )rI   
created_byr   rJ   rG   rH   r^   institution_namer   r   sendrT   )rV   rW   r   r'   r   r   plain_text_messagesender_emailreceiver_emailemail_messager[   r   s               r.   email_send_initiatedr   @  sZ   $!)42;?? 	%*$$HK,?,EHHH5K&0 5 5.9.A.G5 5 }H  }T5 5>A5 5 "25 5 	 #*5;$+1$W;MZf)7(8ZQ Q Q 	///// $ $ $PQPPm#######$s#   #B/ BB/ /
C9CCCc                    	 | j         j        }t          |          \  }}|sd|fS d| j         j         d}d| j        j         d| j         j         d| j         d|j         }| j         j        j        }| j        j        }t          ||||g|          }|
                    d	           d
S # t          $ r }	dt          |	           }
d|
fcY d }	~	S d }	~	ww xY w)NFzProof upload for "r   r   z@,
Thank you for submitting your donation proof for the project "z. Your tracking ID is zV.
Verification is in progress, and you will be notified once it is completed.

- Team r   r   r   r   )rI   r   r   rJ   rG   rH   r^   r   r   r   r   rT   rU   rV   r   r'   r   r   r   r   r   r   r[   r   s              r.   email_send_proofr   ]  sT   $!)42;?? 	%*$$C{':'@CCC5K&0 5 5MXM`Mf5 5 J  V5 5 "25 5 	 #*5;$+1$W;MZf)7(8ZQ Q Q 	///// $ $ $USQRVVUUm#######$s#   #B, BB, ,
C6CCCc                 <   	 | j         j        }t          |          \  }}|sd|fS d| j         j         d}d| j        j         d| j         j         d|j         }| j         j        j        }| j        j        }t          ||||g|          }	 t          j
                            |           }	|	j        j        }
|                    |
           n# t          $ r
}Y d }~nd }~ww xY w|                    d	           d
S # t          $ r}d| }d|fcY d }~S d }~ww xY w)NFz#Payment successfully verified for "r   r   r   zo" has been successfully verified, and the transaction is now complete.
Your receipt is attached below.

- Team r   rb   r   r   r   )rI   r   r   rJ   rG   rH   r   r   r   r   objectsrP   rc   re   attach_filerT   r   )rV   r   r'   r   r   r   r   r   r   rj   pdf_pathr[   r   s                r.   email_send_approver   {  s   $!)42;?? 	%*$$T8K8QTTT5K&0 5 5.9.A.G5 5 "25 5 	 #*5;$+1$W:LXd:7 7 7	o))k)BBG*/H%%h//// 	 	 	DDDD	 	///// $ $ $PQPPm#######$sH   #C> A&C> AC C> 
C#C> C##C> >
DDDDc                    	 | j         j        }t          |          \  }}|sd|fS d| j         j         d}d| j        j         d| j         j         d|j         }| j         j        j        }| j        j        }t          ||||g|          }|	                    d           d	S # t          $ r}	d
|	 }
d|
fcY d }	~	S d }	~	ww xY w)NFz#Payment Verification Rejected for "r   r   zF,

We regret to inform you that, your donation proof for the project "z" has been rejected.
Please contact the admin to resolve the issue and submit a valid proof to complete the transaction.

- Team r   r   r   r   rI   r   r   rJ   rG   rH   r   r   r   r   rT   r   s              r.   email_send_rejectr     s2   $!)42;?? 	%*$$T8K8QTTT5K&0 5 5R]ReRk5 5 "25 5 	 #*5;$+1$W:LXd:7 7 7 	///// $ $ $PQPPm#######$#   #B$ A<B$ $
C.B<6C<Cc                    	 | j         j        }t          |          \  }}|sd|fS d| j         j         d}d| j        j         d| j         j         d|j         }| j         j        j        }| j        j        }t          ||||g|          }|	                    d           d	S # t          $ r}	d
|	 }
d|
fcY d }	~	S d }	~	ww xY w)NFzPayment Status Unverified for "r   r   r   z" remains unverified. Use your registered number to track the current status.
Our team is reviewing it and will verify soon.

- Team r   r   r   r   r   r   s              r.   email_send_unverifyr     s2   $!)42;?? 	%*$$PK4G4MPPP5K&0 5 5.9.A.G5 5 "25 5 	 #*5;$+1$W:LXd:7 7 7 	///// $ $ $PQPPm#######$r   c                      t           j        t           j        z   	 d                    fdt	          d          D                       } t
          j                            |                                           s| S c)NT c              3   @   K   | ]}t          j                  V  d S )N)secretschoice).0_
characterss     r.   	<genexpr>z)get_unique_tracking_id.<locals>.<genexpr>  s-      LLQgnZ88LLLLLLr0      )r^   )	stringascii_lettersdigitsjoinranger   r   filterexists)r^   r   s    @r.   get_unique_tracking_idr     sv    %5JggLLLL%))LLLLL"))k)BBIIKK 	r0   regularc                    |dk    rdddddddddd}n|dv rd	d
d
d
d
ddd}ndd	i}	 t                      5 }|j                                        }|                                }|                    | d           t          j        d            |j        di |}|                                 |cd d d            S # 1 swxY w Y   d S # t          $ r}t          d|             d }~ww xY w)N80mm195mm1mm)toprightbottomleftTF)widthheightmarginprint_backgrounddisplay_header_footer)r   reportr   20mm)formatr   r   r   networkidle)
wait_untilg      ?z"Playwright PDF generation failed: r+   )r   chromiumlaunchnew_pageset_contenttimesleeppdfcloserT   print)html_contentpdf_typepdf_optionspbrowserpage	pdf_bytesr[   s           r.   _render_html_to_pdf_bytesr     s   6#eueTT $%*
 
 
*	*	*$vQWXX $
 
  & 	!j''))G##%%D\mDDDJsOOO //;//IMMOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	    6166777s;   C A;C 3C  CC CC 
C/C**C/   ₹c                 l    	 t          j        | dd          }| | S # t          $ r
 | | dcY S w xY w)NFT)symbolgroupingz,.2f)localecurrencyrT   )amountcurrency_symbol	formatteds      r.   format_currencyr    sc    1OF54HHH	!.9... 1 1 1!060000001s    33c           	         | j         j                            d          }t          |          }t	          | j        j                  }||z  }d}t          t	          | j                  |          }t          ||          }t          ||          }t          j	        
                                                    d          }	| |||||||	d}
t          d|
          }t          |d          }d| j         d	}t          ||
          S )N-r   %Y-%m-%d %H:%M:%S)rV   rupee	num_tiles	row_totalformatted_amountformatted_tile_valueformatted_row_totalformatted_datezpdf/receipt_regular.htmlr   r   regular_receipt_.pdfrg   )tiles_boughttilessplitlenfloatrI   
tile_valuer  r  datetimenowstrftimer   r   r^   r   )rV   	tile_listr  r  r  r  r  r  r  r  contextr   r   rh   s                 r.   generate_receipt_pdfr"    s   (.44S99III{*566JJ&IE&u[-?'@'@%HH*:u==))U;;&**,,556IJJN #, 42(	 	G $$>HHL),KKKI?+"9???Hyx0000r0   c                    | j         j        }|r|                    d          ng }t          |          }t	          | j        j                  }||z  }d}t          ||          }t          ||          }| j        	                    d          }	| ||||||	d}
t          d|
          }t          |d          }d| j         d	}t          ||
          S )Nr
  r   r  )rV   r  r  item_total_valuer  formatted_item_totalreceipt_datetime_strzpdf/receipt_80mm.htmlr   r  80mm_receipt_r  r  )r  r  r  r  r  rI   r  r  transaction_timer  r   r   r^   r   )rV   tiles_stringr   r  r  r$  r  r  r%  r&  r!  r   r   rh   s                 r.   generate_80mm_receipt_pdfr*  %  s    +1L+7?""3'''RIII{*566J :-E*:u==*+;UCC&7@@ATUU #, 4 4 4 G $$;WEEL),HHHI<{6<<<Hyx0000r0   c                    t          | j                  }t          | j                  }t          | j                  }|rt	          ||z            nd}d}t          ||          }t          ||          }t          ||          }	| j        rd||k    rdnd }
nd||dz  k    rdnd	 }
g }| j                            d
          	                                D ]\}|
                    |j        j                  }|                    ||j        j                            d          d         d           ]g }| j                            d
                              d                              d          }t'          |          D ]q\  }}t          |j                  }|rt	          ||z            nd}|                    |dz   |j        j        |j        |j        ||t          ||          d           r| | j        j        |j        |||||	|
||d}t9          d||          }t;          |d          }d| j         d}t?          ||          S )Nr   r   z	Closed - zExceeded GoalzGoal Not Metz	Active - g      ?zOn TrackUnderwayT)table_status/)rW   captionrG   r(     )sl_no
donor_namer^   r   r  r  r  )rI   	inst_bankrequest_userr  formatted_funding_goalformatted_current_amounttotal_required_tilesr  funding_status_textproject_images_listtransactions_listzpdf/project_report.html)requestr   r  project_report_r  r  ) r  funding_goalcurrent_amountr  intr  	closed_byimagesr   allbuild_absolute_uriproject_imgrW   appendrg   r  transaction_setselect_relatedorder_by	enumerater  rG   rH   r^   r(  r   default_bankrx   r   r   idr   )rI   r<  r>  r?  r  r8  r  r6  r7  r  r9  r:  imageabsolute_urlr;  transactionsitxn
txn_amountnum_tiles_boughtr!  r   r   rh   s                           r.   generate_report_pdfrT  C  s   -..L7122Nw)**J=GN3|j8999QE,\5AA.~uEE*:u== pq^|=[=[//aoqqo,Y]J]8]8]**cmoo&&D&99==??  11%2C2GHH""(-33C88<$
 $
 	 	 	 	
 *11t1DDSST\]]ff L L))  33:&&
;EL3zJ67771  U*.?()  /
E B B"
 "
 	 	 	 	 '4 #9$< 4 42  3 /# G, $$=wPWXXXL),JJJI 2111Hyx0000r0   )r   )r   )Wreportlab.platypusr   r   r   r   r   reportlab.platypus.flowablesr   r	   r
   reportlab.lib.stylesr   r   reportlab.lib.enumsr   r   r   django.core.mailr   r   django.template.loaderr   userModule.modelsr   r   playwright.sync_apir   django.shortcutsr   django.core.files.baser   reportlab.pdfbase.ttfontsr   reportlab.pdfbaser   reportlab.lib.pagesizesr   reportlab.lib.unitsr   reportlab.libr   django.confr   rO   r  r   r   r  r   iord   rN   r_   ri   rm   rr   rL   rM   rQ   	setlocaleLC_ALLErrorr/   r2   r4   r\   r`   rk   ro   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r"  r*  rT  r+   r0   r.   <module>ri     sO   V V V V V V V V V V V V V V E E E E E E E E E E D D D D D D D D < < < < < < < < < < 9 9 9 9 9 9 9 9 3 3 3 3 3 3 2 2 2 2 2 2 2 2 / / / / / / . . . . . . . . . . . . , , , , , , ( ( ( ( ( ( & & & & & & $ $ $ $ $ $                               				 				 $   " ! # f 	3FV]L1111|   0000<    @8 8 8 :      == = = 96 6 6, 46 6 6, ?6 6 68 =6 6 6, ?6 6 6, 6= = =& 1= = =0 <= = =8 := = =0 <= = =0 #$ $ $ ,$ $ $8 '$ $ $: ? $  $  $F 0$ $ $8 2$ $ $8     >1 1 1 11 1 1<1 1 1<F1 F1 F1 F1 F1s6   (B? ?
C4
C! C4!
C.+C4-C..C43C4