Ë
    Ì…†iÛ'  ã                   óà   — d 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 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 ddlmZ ddlmZ ddededefd„Zddededededef
d„Z d„ Z!d„ Z"y)u]   GÃ©nÃ©ration PDF pour facture extraite â€“ prÃ©sentation type FACTURE DE VENTE (modÃ¨le RDC).é    )ÚBytesIO)ÚDecimal)Úcolors)ÚA4)ÚgetSampleStyleSheetÚParagraphStyle)Úmm)Úcanvas)ÚSimpleDocTemplateÚ	ParagraphÚSpacerÚTableÚ
TableStyle)Ú	renderPDF)ÚQrCodeWidget)ÚDrawingÚqr_rawÚsize_mmÚreturnc                 ó>  — t        |«      t        z  }t        | «      }|j                  «       \  }}}}||z
  }||z
  }	|dk  s|	dk  rt	        ||«      }
|
j                  |«       |
S ||z  }||	z  }t	        |||dd|| |z  | |z  g¬«      }
|
j                  |«       |
S )u8  
    GÃ©nÃ¨re un QR code (Drawing) via ReportLab sans dÃ©pendances externes.

    IMPORTANT :
    - QrCodeWidget n'a pas de .scale() sur certaines versions
    - donc on applique la transformation sur le Drawing (transform matrix)
    - et on translate pour remettre l'origine visible (bounds[0], bounds[1])
    r   )Ú	transform)Úfloatr	   r   Ú	getBoundsr   Úadd)r   r   ÚsizeÚwidgetÚx1Úy1Úx2Úy2ÚwÚhÚdÚsxÚsys                úK/home/exaucensingi/Documents/ProjectPython/factures/extratfile/pdf_utils.pyÚ_qr_flowabler'      s¾   € ô �‹>œBÑ€DÜ˜&Ó!€Fð ×%Ñ%Ó'�N€BˆˆB�Ø
ˆR‰€AØ
ˆR‰€Að 	ˆA‚v��a’Ü�D˜$ÓˆØ	�‰ˆfŒØˆð 
�‰€BØ	�‰€Bô 	��d r¨1¨a°°b°S¸2±XÀ¸sÀR¹xÐ&HÔI€AØ‡E�Eˆ&„MØ€Hó    Úx_mmÚy_mmc                 ó2  — t        «       }t        j                  |t        ¬«      }t        \  }}|t        z  }|t        z  }	t        | |¬«      }
t        j                  |
|||	«       |j                  «        |j                  «        |j                  d«       |S )uÏ   
    CrÃ©e un PDF d'une page A4 contenant uniquement le QR Ã  la position (x_mm, y_mm) depuis le bas-gauche.
    UtilisÃ© pour superposer le QR sur un PDF xhtml2pdf (sans fond, seul le QR est dessinÃ©).
    )Úpagesize©r   r   )r   Ú
pdf_canvasÚCanvasr   r	   r'   r   ÚdrawÚshowPageÚsaveÚseek)r   r   r)   r*   ÚbufÚcÚw_pageÚh_pageÚx_ptÚy_ptÚ
qr_drawings              r&   Úmake_qr_overlay_pdfr;   5   sx   € ô
 ‹)€CÜ×Ñ˜#¬Ô+€AÜ�N€FˆFà”"‰9€DØ”"‰9€DÜ˜f¨gÔ6€JÜ‡N�N�:˜q $¨Ô-Ø‡J�J„LØ‡F�F„HØ‡H�HˆQ„KØ€Jr(   c                 óª   — | €yt        | t        «      rt        | «      } | d›}|j                  d«      }|d   j	                  dd«      }|d   }|› d|› �S )uM   Format nombre style CDF : 10.000,00 (point = milliers, virgule = dÃ©cimales).õ   â€”z,.2fú.r   ú,é   )Ú
isinstancer   r   ÚsplitÚreplace)ÚvalueÚsÚpartsÚintegerÚdecimals        r&   Ú_fmt_cdfrI   H   sc   € à€}ØÜ�%œÔ!Ü�e“ˆØ�ˆ,€AØ�G‰G�C‹L€EØ�A‰h×Ñ˜s CÓ(€GØ�A‰h€GØˆY�a˜�yÐ!Ð!r(   c                 óØ  — | }|j                   }t        «       }t        |t        dt        z  dt        z  dt        z  dt        z  ¬«      }t        «       }t        d|d   ddd¬«      }g }g }|�rS|j                  |j                  xs d	j                  «       xs d
«       t        |dd «      r|j                  d|j                  › �«       |j                  r|j                  d|j                  › �«       |j                  r^|j                  j                  «       j                  d«      D ]2  }	|	j                  «       sŒ|j                  |	j                  «       «       Œ4 t        |dd «      r$|j                  t!        |j"                  «      «       t        |dd «      r6|j                  t!        |j$                  «      «       n|j                  d
«       t        ddt&        j(                  t'        j*                  d«      d¬«      }
t        |dd	«      xs d
}dj-                  |«      }d|› d|j.                  xs d
› d|j0                  xs d
› d|j2                  xs d
› d|j4                  xs d
› �
}t7        |j9                  dd«      |d   «      t7        d|
«      gd	t7        ||d   «      gg}t;        |dt        z  dt        z  g¬ «      }|j=                  t?        d!d"d#d$d%d&d&t'        j*                  d«      fd'd&d&t&        j(                  fd(d)d*d+t&        j@                  fd,d)d*d-t&        jB                  fg«      «       |j                  |«       |j                  tE        dd.t        z  «      «       |j                  t7        |jF                  xs d/j                  «       |«      «       |jH                  xs t!        |jJ                  «      }|j                  t7        d0|› �t        d1|d   d2dd.¬«      «      «       |j                  tE        ddt        z  «      «       d.t        z  d3t        z  d4t        z  d5t        z  d6t        z  g}g d7¢g}tM        |jN                  jQ                  «       d«      D ]|  \  }}	|j                  t!        |«      |	jR                  xs d
d d3 tU        |	jV                  «      |	jX                  �tU        |	jX                  «      nd
tU        |	jZ                  «      g«       Œ~ t;        ||¬ «      }|j=                  t?        d%d)d8t'        j*                  d9«      fd:d$d;d<d=d>d)d*d+t&        j@                  fd?d@g	«      «       |j                  |«       |j                  tE        dd.t        z  «      «       dA|j\                  xs d
› �dB|j^                  xs d
› �g}dCtU        |j`                  «      › �dDtU        |jb                  «      › �dEtU        |jb                  «      › �d	dFtU        |jd                  «      › �g}|jf                  �'|j                  dGtU        |jf                  «      › �«       |jh                  �@|jj                  r4|j                  dHtU        |jh                  «      › dI|jj                  › �«       t7        dj-                  |«      |d   «      t7        dj-                  |«      t        dJddK¬L«      «      gg}t;        |dt        z  dt        z  g¬ «      }|j=                  t?        g dM¢«      «       |j                  |«       |j                  tE        ddNt        z  «      «       |jd                  �tU        |jd                  «      nd
}|j                  t7        dO|› dP�t        dQddKd.¬R«      «      «       |j                  tE        ddNt        z  «      «       |j                  t7        dSt        dTdKt&        j@                  d¬U«      «      «       g }|jl                  r|j                  dV|jl                  › �«       |jn                  r|j                  dW|jn                  › �«       |jp                  r|j                  dX|jp                  › �«       |jr                  r|j                  dY|jr                  › �«       |jt                  r|j                  dZ|jt                  › �«       |rf|j                  t7        dj-                  |«      t        d[d.t&        j@                  ¬\«      «      «       |j                  tE        ddt        z  «      «       |jv                  r(	 |j                  ty        |jv                  d]¬^«      «       n5|j                  t7        dat        d`d.t&        j@                  ¬\«      «      «       |j}                  |«       |j                  db«       |S # tz        $ rE |j                  t7        d_|jv                  › �t        d`d.t&        j@                  ¬\«      «      «       Y Œqw xY w)cNé   )r,   ÚrightMarginÚ
leftMarginÚ	topMarginÚbottomMarginÚInvoiceTitleÚNormalé   r@   é   )ÚnameÚparentÚfontSizeÚ	alignmentÚ
spaceAfterÚ r=   Úpoint_de_ventezPoint de vente : zNIF : ú
Ú	telephoneÚemailÚCBé
   z#505050é   )rT   rV   Ú	textColorÚ	backColorrW   Úclient_typezType : z<br/>Nom : z<br/>NIF : z<br/>Adresse : z<br/>Contact : z<br/>z<b>CLIENT</b>é_   éZ   )Ú	colWidths©ÚALIGN©r   r   ©r   éÿÿÿÿÚLEFT©rh   ©r@   r   ©r@   rk   ÚRIGHT)ÚVALIGNri   ©rk   rk   ÚTOP©ÚFONTSIZEri   rr   é	   Ú
BACKGROUNDrn   Ú	TEXTCOLORÚBOXri   rr   g      à?Ú	INNERGRIDg      Ð?é   zFACTURE DE VENTEu   Facture nÂ° ÚInvNumé   é<   é#   é   é%   )ú#u   DÃ©signationzPrix unitaire (TTC)u	   QuantitÃ©zMontant (TTC)©rk   r   z#E8E8E8)ÚFONTNAMEri   rƒ   úHelvetica-Bold)rh   ri   rj   ÚCENTER)rh   )r`   r   rr   rp   )rh   rn   ro   rl   ÚGRID)Ú
TOPPADDINGri   rr   é   )ÚBOTTOMPADDINGri   rr   r‰   zNombre d'articles : zMode de paiement : zH.T. [B] Taxable 16,00% : zTVA [B] Taxable 16,00% : zTOTAL TVA : zTotal TTC : CDF zMontant TTC : USD zCours de change z du ÚRecapRrv   )rT   rW   rV   )rg   rm   rt   )r„   ri   rn   r…   é   u0   ArrÃªtÃ© la prÃ©sente facture Ã  la somme de <b>z-</b> francs congolais toutes taxes comprises.ÚArrete)rT   rW   rV   rX   u:   --- Ã‰LÃ‰MENTS DE SÃ‰CURITÃ‰ DE LA FACTURE NORMALISÃ‰E ---ÚSecTitle)rT   rV   ra   rX   zISF : zCode DEF/DGI : z
DEF NID : zDEF Compteurs : zDEF Heure : ÚSecBody)rT   rV   ra   é   r-   u   QR (donnÃ©es) : ÚSecBody2u   QR : â€”r   )@Úsocieter   r   r   r	   r   r   ÚappendÚnomÚupperÚgetattrrZ   ÚnifÚadresseÚstriprB   Ústrr\   r]   r   ÚwhiteÚHexColorÚjoinÚ
client_nomÚ
client_nifÚclient_adresseÚclient_telephoner   rC   r   ÚsetStyler   ÚgreyÚ	lightgreyr   Úinvoice_typeÚinvoice_numberÚidÚ	enumerateÚlinesÚallÚdesignationrI   Úunit_price_ttcÚquantityÚ
amount_ttcÚnb_articlesÚpayment_modeÚht_taxable_16Útva_16Útotal_ttc_cdfÚtotal_ttc_usdÚexchange_rateÚexchange_rate_dateÚisfÚcode_def_dgiÚdef_nidÚdef_compteursÚdef_datetimer   r'   Ú	ExceptionÚbuildr3   )Únormalized_invoiceÚinvÚsocÚbufferÚdocÚstylesÚtitle_styleÚstoryÚcompany_linesÚlineÚclient_label_stylerc   Úheader_leftÚheader_right_bodyÚheader_final_dataÚt_headÚinv_noÚ
col_widthsÚdataÚiÚt_linesÚ
recap_leftÚrecap_rightÚ
recap_dataÚt_recapÚ	total_strÚ	sec_liness                              r&   Úrender_extracted_invoice_pdfrØ   U   sÞ  € Ø
€CØ
�+‰+€Cä‹Y€FÜ
ØÜØœ‘GØœ‘7Ø”r‘'Øœ"‘Wô€Cô !Ó"€FÜ ØØ�hÑØØØô€Kð €Eð €MÚ
Ø×Ñ˜cŸg™gšm¨×2Ñ2Ó4Ò=¸Ô>Ü�3Ð(¨$Ô/Ø× Ñ Ð#4°S×5GÑ5GÐ4HÐ!IÔJØ�7Š7Ø× Ñ  6¨#¯'©'¨Ð!3Ô4Ø�;Š;ØŸ™×)Ñ)Ó+×1Ñ1°$Ó7ò 7�Ø—:‘:•<Ø!×(Ñ(¨¯©«Õ6ð7ô �3˜ TÔ*Ø× Ñ ¤ S§]¡]Ó!3Ô4Ü�3˜ Ô&Ø× Ñ ¤ S§Y¡Y£Õ0à×Ñ˜UÔ#ä'ØØÜ—,‘,Ü—/‘/ )Ó,ØôÐô ˜#˜}¨bÓ1Ò:°U€KØ—)‘)˜MÓ*€Kà
�+�ð Ø—‘Ò( 5Ð)ð *Ø—‘Ò( 5Ð)ð *Ø×(Ñ(Ò1¨EÐ3ð 4Ø×)Ñ)Ò2¨UÐ3ð		5ð ô �k×)Ñ)¨$°Ó8¸&ÀÑ:JÓKÜ�oÐ'9Ó:ð	
ð
 ÜÐ'¨°Ñ)9Ó:ð	
ð	Ðô Ð$°´b±¸"¼r¹'Ð0BÔC€FØ
‡O�O”JØ*Ø+Ø+Ø)Ø	�v˜v¤v§¡°yÓ'AÐBØ	�f˜f¤f§l¡lÐ3Ø	�˜ #¤v§{¡{Ð3Ø	�f˜h¨¬f×.>Ñ.>Ð?ð	 ó 	ô 	ð 
‡L�L�ÔØ	‡L�L”˜˜1œr™6Ó"Ô#ð 
‡L�L”˜C×,Ñ,ÒBÐ0B×IÑIÓKÈ[ÓYÔZØ×ÑÒ.¤3 s§v¡v£;€FØ	‡L�L”Ø
�v�hÐÜ˜H¨V°HÑ-=ÈÐVWÐdeÔfóô ð 
‡L�L”˜˜1œr™6Ó"Ô#ð ”b‘&˜"œr™' 2¬¡7¨B´©G°R¼"±WÐ=€JÚVÐW€DÜ˜SŸY™YŸ]™]›_¨aÓ0ò ‰ˆˆ4Ø�‰Ü�‹FØ×ÑÒ& ¨¨Ð,Ü�T×(Ñ(Ó)Ø'+§}¡}Ð'@ŒH�T—]‘]Ô#ÀeÜ�T—_‘_Ó%ð
õ 	ðô �D JÔ/€GØ×Ñ”ZØ	�v˜w¬¯©¸	Ó(BÐCØ7Ø)Ø,Ø,Ø*Ø	�˜ 3¬¯©Ð4Ø+Ø.ð
!ó 
ô 
ð 
‡L�L�ÔØ	‡L�L”˜˜1œr™6Ó"Ô#ð ˜sŸ™Ò7°%Ð8Ð9Ø
˜c×.Ñ.Ò7°%Ð8Ð9ð€Jð
 %¤X¨c×.?Ñ.?Ó%@Ð$AÐBØ
#¤H¨S¯Z©ZÓ$8Ð#9Ð:Ø
”x §
¡
Ó+Ð,Ð-Ø
Ø
œ8 C×$5Ñ$5Ó6Ð7Ð8ð€Kð ×ÑÐ$Ø×ÑÐ/´¸×9JÑ9JÓ0KÐ/LÐMÔNØ
×ÑÐ$¨×)?Ò)?Ø×ÑÐ-¬h°s×7HÑ7HÓ.IÐ-JÈ$Ès×OeÑOeÐNfÐgÔhô 	�'—,‘,˜zÓ*¨F°8Ñ,<Ó=Ü�'—,‘,˜{Ó+¬^ÀÐUVÐabÔ-cÓdðð €Jô �J¨2´©7°B¼±GÐ*<Ô=€GØ×Ñ”Zò !ó ô ð 
‡L�L�ÔØ	‡L�L”˜˜1œr™6Ó"Ô#ð 03×/@Ñ/@Ð/L”˜×*Ñ*Ô+ÐRW€IØ	‡L�L”Ø
:¸9¸+ÐErÐsÜ˜H°¸AÈ!ÔLóô ð 
‡L�L”˜˜1œr™6Ó"Ô#ð 
‡L�L”ØDÜ˜J°¼f¿k¹kÐVWÔXóô ð
 €IØ
‡w‚wØ×Ñ˜6 #§'¡' Ð+Ô,Ø
×ÒØ×Ñ˜?¨3×+;Ñ+;Ð*<Ð=Ô>Ø
‡{‚{Ø×Ñ˜: c§k¡k ]Ð3Ô4Ø
×ÒØ×ÑÐ+¨C×,=Ñ,=Ð+>Ð?Ô@Ø
×ÒØ×Ñ˜<¨×(8Ñ(8Ð'9Ð:Ô;áØ�‰”Y˜wŸ|™|¨IÓ6¼ÈIÐ`aÔms×mxÑmxÔ8yÓzÔ{Ø�‰”V˜A˜q¤2™vÓ&Ô'ð ‡z‚zð	Ø�L‰Lœ c§j¡j¸"Ô=Õ>ð 	�‰”Y˜z¬>¸zÐTUÔag×alÑalÔ+mÓnÔoà‡I�IˆeÔØ
‡K�K�„NØ€Møô ò 	Ø�L‰LœØ" 3§:¡: ,Ð/Ü J¸ÄfÇkÁkÔRóö ð	ús   ä&f æAg)ç(g)N)é   )r€   r_   éd   )#Ú__doc__Úior   rH   r   Úreportlab.libr   Úreportlab.lib.pagesizesr   Úreportlab.lib.stylesr   r   Úreportlab.lib.unitsr	   Úreportlab.pdfgenr
   r.   Úreportlab.platypusr   r   r   r   r   Úreportlab.graphicsr   Úreportlab.graphics.barcode.qrr   Úreportlab.graphics.shapesr   rš   r   r'   r;   rI   rØ   © r(   r&   ú<module>rç      s|   ðÙ cÝ Ý å  Ý &ß DÝ "Ý 1ß VÕ VÝ (å 6Ý -ñ!˜ð ! uð !°gó !ñH ð ¨eð Àð ÐRWð Ðbió ò&
"óBr(   