§
    úG‡iƒ1  ã                   óî   — d dl mZ d dlZd dlZd dlmZ d dlmZ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mZ d	dlmZ d	dlmZ d	dlmZ d„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"dZ#dZ$dZ%d„ Z&d„ Z'dS )é    )ÚBytesION)ÚQ)ÚrenderÚredirectÚget_object_or_404)Úmessages)ÚHttpResponse)Úrender_to_string)ÚDecimalé   )ÚNormalizedInvoiceÚTauxDeChange)ÚExtractInvoiceUploadForm)Úingest_invoice_file)Úmake_qr_overlay_pdfc                 óô   — | €dS |r|dk    rdS 	 t          t          | ¦  «        ¦  «        t          t          |¦  «        ¦  «        z                       t          d¦  «        ¦  «        S # t          $ r Y dS w xY w)zTConvertit un montant CDF en USD (amount_cdf / rate). Retourne None si rate invalide.Nr   z0.01)r   ÚstrÚquantizeÚ	Exception)Ú
amount_cdfÚrates     ú2D:\djangoapp\venvfact\factures\extratfile\views.pyÚ_to_usdr      s…   € àÐØˆtØð �4˜1’9�9ØˆtðÝ�˜J™œÑ(Ô(­7µ3°t±9´9Ñ+=Ô+=Ñ=×GÒGÍÐPVÉÌÑXÔXÐXøÝð ð ð Øˆtˆtðøøøs   �AA) Á)
A7Á6A7c           
      ó¦  — d}t          | dd¦  «        r,t          | j        ¦  «        dk    rt          | j        ¦  «        }|dk    r–|r|dk    rŽt          j                             d¬¦  «                             ¦   «         }|s2t          j                             dd¦  «                             ¦   «         }|r&|j        r|j        dk    rt          |j        ¦  «        }|dk    o|o|dk    }|s<d	„ | j	         
                    ¦   «         D ¦   «         }|| j        | j        | j        d
dddœS g }| j	         
                    ¦   «         D ]L}|                     |j        |j        t#          |j        |¦  «        t#          |j        |¦  «        dœ¦  «         ŒM|t#          | j        |¦  «        t#          | j        |¦  «        t#          | j        |¦  «        ddddœS )uy  
    Construit le contexte d'affichage des montants selon la devise (cdf ou usd).
    Si devise == 'usd' et que invoice.exchange_rate est renseignÃ©, convertit tous les montants en USD.
    Sinon affichage en CDF.
    Retourne: dict avec lines_display, total_ttc_display, ht_taxable_16_display, tva_16_display,
    currency_label, phrase_currency, devise (rÃ©el utilisÃ©).
    NÚexchange_rater   ÚusdT)Úactifz
-date_tauxz-idc                 óD   — g | ]}|j         |j        |j        |j        d œ‘ŒS )©ÚdesignationÚquantityÚ
unit_priceÚamount)r    r!   Úunit_price_ttcÚ
amount_ttc)Ú.0Úlines     r   ú
<listcomp>z-_invoice_display_currency.<locals>.<listcomp>3   sG   € ð 
ð 
ð 
ð ð  $Ô/Ø œMØ"Ô1Øœ/ð	ð ð
ð 
ð 
ó    ÚCDFzfrancs congolaisÚcdf)Úlines_displayÚtotal_ttc_displayÚht_taxable_16_displayÚtva_16_displayÚcurrency_labelÚphrase_currencyÚdeviser   ÚUSDu   dollars amÃ©ricains)ÚgetattrÚfloatr   r   ÚobjectsÚfilterÚfirstÚorder_byÚtauxÚlinesÚallÚtotal_ttc_cdfÚht_taxable_16Útva_16Úappendr    r!   r   r$   r%   )Úinvoicer2   r   Útaux_objÚuse_usdr,   r'   s          r   Ú_invoice_display_currencyrD      s  € ð €DÝˆw˜¨Ñ.Ô.ð ,µ5¸Ô9NÑ3OÔ3OÐRSÒ3SÐ3SÝ�WÔ*Ñ+Ô+ˆØ�‚€ €¨°ª	¨	ÝÔ'×.Ò.°TÐ.Ñ:Ô:×@Ò@ÑBÔBˆØð 	RÝ#Ô+×4Ò4°\À5ÑIÔI×OÒOÑQÔQˆHØð 	(˜œð 	(¨(¬-¸!Ò*;Ð*;Ý˜œÑ'Ô'ˆDØ˜ŠoÐ3 $Ð3¨4°!ª8€Gàð 
ð
ð 
ð  œ×)Ò)Ñ+Ô+ð
ñ 
ô 
ˆð +Ø!(Ô!6Ø%,Ô%:Ø%œnØ#Ø1Øð
ð 
ð 	
ð €MØ”×!Ò!Ñ#Ô#ð ð ˆØ×ÒØÔ+ØœÝ! $Ô"5°tÑ<Ô<Ý˜dœo¨tÑ4Ô4ð	
ð 
ñ 	ô 	ð 	ð 	ð 'Ý$ WÔ%:¸DÑAÔAÝ!(¨Ô)>ÀÑ!EÔ!EÝ! '¤.°$Ñ7Ô7ØØ0Øðð ð r)   c                 ó(  — t          | dd¦  «        sdS 	 ddl}|                     ddd¬¦  «        }|                     | j        ¦  «         |                     d	¬
¦  «         |                     dd¬¦  «        }t          j        dd¬¦  «        5 }| 	                    |d¬¦  «         |j
        }ddd¦  «         n# 1 swxY w Y   t          j                             |¦  «                             dd¦  «        }d| j        › �|fS # t           $ r Y dS w xY w)u‘   GÃ©nÃ¨re l'image QR et la sauvegarde dans un fichier temporaire. Retourne (uri pour le template, path absolu pour link_callback) ou (None, None).Úqr_rawN)NNr   r   é   é   ©ÚversionÚbox_sizeÚborderT©ÚfitÚblackÚwhite©Ú
fill_colorÚ
back_colorFú.png©ÚdeleteÚsuffixÚPNG©Úformatú\ú/zqr:)r4   ÚqrcodeÚQRCodeÚadd_datarF   ÚmakeÚ
make_imageÚtempfileÚNamedTemporaryFileÚsaveÚnameÚosÚpathÚabspathÚreplaceÚpkr   )rA   r]   ÚqrÚimgÚtmprg   Úabs_paths          r   Ú_write_qr_temp_filero   Y   s^  € å�7˜H dÑ+Ô+ð ØˆzðØˆˆˆØ�]Š] 1¨q¸ˆ]Ñ;Ô;ˆØ
�Š�G”NÑ#Ô#Ð#Ø
�Š�DˆÑÔÐØ�mŠm w¸7ˆmÑCÔCˆÝÔ(°¸fÐEÑEÔEð 	ÈØ�HŠH�S ˆHÑ'Ô'Ð'Ø”8ˆDð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ ”7—?’? 4Ñ(Ô(×0Ò0°°sÑ;Ô;ˆØ!�W”ZÐ!Ð! 8Ð+Ð+øÝð ð ð Øˆzˆzðøøøs7   •A9D ÂB9Â-D Â9B=Â=D Ã B=ÃAD Ä
DÄDc                 ó  — t          | j        pd| j        pd¦  «        }|                     ¦   «         �r¼|j        d         }|j                             ¦   «                              d¦  «        s(t          j	        | d¦  «         t          | dd|i¦  «        S 	 t          j        dt          j                             |j        ¦  «        d         ¬	¦  «        5 }|                     ¦   «         D ]}|                     |¦  «         Œ|j        }ddd¦  «         n# 1 swxY w Y   	 |j                             d
¦  «        }t'          ||j        d         j        |rt+          |¦  «        nd|j                             d¦  «        pd                     ¦   «         |j                             d¦  «        pd|j                             d¦  «        pd|j                             d¦  «        pd|j                             d¦  «        pd|¬¦	  «	        }t          j        | d¦  «         t1          d|j        ¬¦  «        	 t          j        |¦  «         S # t4          $ r Y S w xY w# 	 t          j        |¦  «         w # t4          $ r Y w w xY wxY w# t4          $ rb}t+          |¦  «        }	d|	                     ¦   «         v sd|	                     ¦   «         v r|	› d�}	t          j	        | d|	› �¦  «         Y d}~nd}~ww xY wt          | dd|i¦  «        S )u`   Formulaire : sociÃ©tÃ©, client, upload PDF/image â†’ extraction â†’ redirection vers impression.NÚfile)ú.pdfrT   z.jpgz.jpegz.gifz.bmpz.tiffu0   Format acceptÃ© : PDF ou image (PNG, JPG, etc.).zextratfile/upload.htmlÚformFr   rU   Úclient_typeÚsocieteÚ Úpayment_modeÚ
client_nomÚ
client_nifÚclient_telephoneÚclient_adresse)Ú
societe_idrt   rw   rx   ry   rz   r{   Úsource_file_fieldz'Facture extraite. Vous pouvez imprimer.úextratfile:print©rj   zno such tableÚ
extratfileu)    â€” ExÃ©cutez : python manage.py migratezErreur lors de l'extraction : )r   ÚPOSTÚFILESÚis_validÚcleaned_datare   ÚlowerÚendswithr   Úerrorr   rb   rc   rf   rg   ÚsplitextÚchunksÚwriteÚgetr   rj   r   ÚstripÚsuccessr   Úunlinkr   )
Úrequestrs   Úfrm   ÚchunkÚtmp_pathÚclient_type_objrA   ÚeÚ
err_details
             r   Úextract_uploadr–   m   st  € å# G¤LÐ$8°D¸'¼-Ð:OÈ4ÑPÔP€DØ‡}‚}�„ñ %SØÔ˜fÔ%ˆØŒv�|Š|‰~Œ~×&Ò&Ð'aÑbÔbð 	MÝŒN˜7Ð$VÑWÔWÐWÝ˜'Ð#;¸fÀd¸^ÑLÔLÐLð	SÝÔ,°EÅ"Ä'×BRÒBRÐSTÔSYÑBZÔBZÐ[\ÔB]Ð^Ñ^Ô^ð $ÐbeØŸXšX™ZœZð %ð %�EØ—I’I˜eÑ$Ô$Ð$Ð$Øœ8�ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð
Ø"&Ô"3×"7Ò"7¸Ñ"FÔ"F�Ý-ØØ#Ô0°Ô;Ô>Ø8GÐ O¥ OÑ 4Ô 4Ð 4ÈRØ"&Ô"3×"7Ò"7¸Ñ"GÔ"GÐ"MÈ2×!TÒ!TÑ!VÔ!VØ#Ô0×4Ò4°\ÑBÔBÐHÀbØ#Ô0×4Ò4°\ÑBÔBÐHÀbØ%)Ô%6×%:Ò%:Ð;MÑ%NÔ%NÐ%TÐRTØ#'Ô#4×#8Ò#8Ð9IÑ#JÔ#JÐ#PÈbØ&'ð
ñ 
ô 
�õ Ô  Ð*SÑTÔTÐTÝÐ 2°w´zÐBÑBÔBðÝ”I˜hÑ'Ô'Ð'Ð'øÝ ð ð ð Ø�DðøøøøðÝ”I˜hÑ'Ô'Ð'Ð'øÝ ð ð ð Ø�Dðøøøøøøøõ ð 	Sð 	Sð 	SÝ˜Q™œˆJØ *×"2Ò"2Ñ"4Ô"4Ð4Ð4¸È
×HXÒHXÑHZÔHZÐ8ZÐ8ZØ *ÐUÐUÐU�
ÝŒN˜7Ð$QÀZÐ$QÐ$QÑRÔRÐRÐRÐRÐRÐRÐRøøøøð		Søøøõ �'Ð3°f¸d°^ÑDÔDÐDs’   Â>J Ã4DÄJ ÄDÄJ ÄDÄJ Ä DI È2IÉ
IÉJ ÉIÉJ ÉI>ÉI.É-I>É.
I;É8I>É:I;É;I>É>J Ê
K-ÊAK(Ë(K-c                 ó@  — t          t          j                             d¦  «        |¬¦  «        }| j                             d¦  «        pd                     ¦   «                              ¦   «         }|dvrd}t          ||¦  «        }t          | d||d         |dœ¦  «        S )u\   AperÃ§u facture extraite + bouton Imprimer PDF. ?devise=cdf|usd pour afficher en CDF ou USD.r;   r   r2   r+   ©r+   r   zextratfile/print.html)rA   r2   Údisplay)
r   r   r6   Úprefetch_relatedÚGETr‹   rŒ   r…   rD   r   )r�   rj   rA   r2   r™   s        r   Úextract_printrœ   š   s¥   € åÕ 1Ô 9× JÒ JÈ7Ñ SÔ SÐXZÐ[Ñ[Ô[€GØŒk�oŠo˜hÑ'Ô'Ð0¨5×7Ò7Ñ9Ô9×?Ò?ÑAÔA€FØ�^Ð#Ð#ØˆÝ'¨°Ñ8Ô8€GÝ�'Ð2ØØ˜(Ô#Øð5ð 5ñ ô ð r)   c                 óä	  ‡‡‡— t          t          j                             d¦  «        |¬¦  «        }d|j        p|j        › d�}| j                             d¦  «        pd                     ¦   «          	                    ¦   «         }|dvrd}t          ||¦  «        }t          |¦  «        \  ŠŠdŠt          |d	d¦  «        rt          |j        d
d¦  «        ri|j        j        r]	 t          j                             |j        j        j        ¦  «                             dd¦  «        Šn# t&          t(          f$ r dŠY nw xY wˆˆˆfd„}|‰t+          ‰¦  «        |dœ}t-          d|| ¬¦  «        }t/          ¦   «         }		 ddlm}
 |
                     ||	d|¬¦  «        }|j        r¯t          |dd¦  «        pg }|r'd                     d„ |dd…         D ¦   «         ¦  «        nd}t;          j        | d|› �¦  «         t?          d|¬¦  «        ‰rEt          j                              ‰¦  «        r'	 t          j!        ‰¦  «         S # t(          $ r Y S w xY wS S nˆ# tD          $ r{}t;          j        | d|› �¦  «         t?          d|¬¦  «        cY d}~‰rEt          j                              ‰¦  «        r'	 t          j!        ‰¦  «         S # t(          $ r Y S w xY wS S d}~ww xY w	 ‰rEt          j                              ‰¦  «        r&	 t          j!        ‰¦  «         n^# t(          $ r Y nRw xY wnM# ‰rEt          j                              ‰¦  «        r'	 t          j!        ‰¦  «         w # t(          $ r Y w w xY ww w xY w|	 #                    d¦  «         |	 $                    ¦   «         }|s&t;          j        | d¦  «         t?          d|¬¦  «        S t          |dd¦  «        �r	 ddl%m&}m'}  |t/          |¦  «        ¦  «        }tQ          |j)        d ¬!¦  «        } ||¦  «        } |¦   «         }tU          |j+        ¦  «        D ]G\  }}|dk    r'|j+        r | ,                    |j+        d         ¦  «         | -                    |¦  «         ŒHt/          ¦   «         }| .                    |¦  «         | #                    d¦  «         | $                    ¦   «         }n# tD          $ r Y nw xY wt_          |d"¬#¦  «        }d$|› d%�|d&<   |S )'ud   GÃ©nÃ¨re le PDF Ã  partir du HTML (xhtml2pdf). ?devise=usd pour imprimer en USD (taux dans l'admin).r;   r   zfacture-rr   r2   r+   r˜   Nru   Úlogor[   r\   c                 ó0   •— | ‰k    r‰r‰S | dk    r‰r‰S d S )Nzlogo:header© )ÚuriÚ	_basepathÚ	logo_pathÚqr_srcÚqr_temp_paths     €€€r   Úlink_callbackz"extract_pdf.<locals>.link_callback¹   s1   ø€ Ø�&Š=ˆ=˜\ˆ=ØÐØ�-ÒÐ IÐØÐØˆtr)   )rA   r¤   Úhas_logor™   zextratfile/invoice_print.html©r�   r   )Úpisazutf-8)ÚdestÚencodingr¦   Úlogz ; c              3   ó4   K  — | ]}t          |¦  «        V — Œd S )N)r   )r&   r”   s     r   ú	<genexpr>zextract_pdf.<locals>.<genexpr>Ö   s(   è è € Ð =Ð =¨A¥ Q¡¤Ð =Ð =Ð =Ð =Ð =Ð =r)   é   u(   Erreur inconnue (vÃ©rifier le HTML/CSS).zErreur PDF : r~   u!   Impossible de gÃ©nÃ©rer le PDF : u   Le PDF gÃ©nÃ©rÃ© est vide.rF   )Ú	PdfReaderÚ	PdfWriteréd   )Úy_mmzapplication/pdf©Úcontent_typezinline; filename="ú"zContent-Disposition)0r   r   r6   rš   Úinvoice_numberÚidr›   r‹   rŒ   r…   rD   ro   r4   ru   rž   rf   rg   rh   ri   Ú
ValueErrorÚOSErrorÚboolr
   r   Ú	xhtml2pdfr©   Ú	CreatePDFÚerrÚjoinr   r‡   r   ÚisfilerŽ   r   ÚseekÚgetvalueÚpypdfr°   r±   r   rF   Ú	enumerateÚpagesÚ
merge_pageÚadd_pagerŠ   r	   )r�   rj   rA   Úfilenamer2   r™   r¦   ÚcontextÚhtml_stringÚresultr©   Úpisa_statusÚerr_logÚerr_msgr”   Ú	pdf_bytesr°   r±   Úbase_readerÚoverlay_bufÚoverlay_readerÚwriterÚiÚpageÚoutÚresponser£   r¤   r¥   s                             @@@r   Úextract_pdfrØ   ¨   sö  øøø€ åÕ 1Ô 9× JÒ JÈ7Ñ SÔ SÐXZÐ[Ñ[Ô[€GØD˜'Ô0Ð>°G´JÐDÐDÐD€HØŒk�oŠo˜hÑ'Ô'Ð0¨5×7Ò7Ñ9Ô9×?Ò?ÑAÔA€FØ�^Ð#Ð#ØˆÝ'¨°Ñ8Ô8€Gå.¨wÑ7Ô7Ñ€FˆLØ€IÝˆw˜	 4Ñ(Ô(ð ­W°W´_ÀfÈdÑ-SÔ-Sð ÐX_ÔXgÔXlð ð	ÝœŸš¨¬Ô(<Ô(AÑBÔB×JÒJÈ4ÐQTÑUÔUˆIˆIøÝ�GÐ$ð 	ð 	ð 	ØˆIˆIˆIð	øøøðð ð ð ð ð ð ð ØÝ˜‘O”OØð	ð €Gõ #Ø'ØØðñ ô €Kõ
 ‰YŒY€FðØ"Ð"Ð"Ð"Ð"Ð"Ø—n’nØØØØ'ð	 %ñ 
ô 
ˆð Œ?ð 	7Ý˜k¨5°$Ñ7Ô7Ð=¸2ˆGØAHÐx�e—j’jÐ =Ð =°¸¸!¸´Ð =Ñ =Ô =Ñ=Ô=Ð=ÐNxˆGÝŒN˜7Ð$=°GÐ$=Ð$=Ñ>Ô>Ð>ÝÐ.°2Ð6Ñ6Ô6ð
 ð 	�BœGŸNšN¨<Ñ8Ô8ð 	ðÝ”	˜,Ñ'Ô'Ð'Ð'øÝð ð ð Ø�ðøøøð	ð 	ð	7øõ
 ð 3ð 3ð 3ÝŒ�wÐ GÀAÐ GÐ GÑHÔHÐHÝÐ*¨rÐ2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2àð 	�BœGŸNšN¨<Ñ8Ô8ð 	ðÝ”	˜,Ñ'Ô'Ð'Ð'øÝð ð ð Ø�ðøøøð	ð 	øøøøð	3øøøð	7ð ð 	�BœGŸNšN¨<Ñ8Ô8ð 	ðÝ”	˜,Ñ'Ô'Ð'Ð'øÝð ð ð Ø�ðøøøøøð ð 	�BœGŸNšN¨<Ñ8Ô8ð 	ðÝ”	˜,Ñ'Ô'Ð'Ð'øÝð ð ð Ø�ðøøøð	ð 	øøøð
 ‡K‚K��N„N€NØ—’Ñ!Ô!€IØð 3ÝŒ�wÐ <Ñ=Ô=Ð=ÝÐ*¨rÐ2Ñ2Ô2Ð2õ ˆw˜ $Ñ'Ô'ñ ð	Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø#˜)¥G¨IÑ$6Ô$6Ñ7Ô7ˆKÝ-¨g¬nÀ3ÐGÑGÔGˆKØ&˜Y {Ñ3Ô3ˆNØ�Y‘[”[ˆFÝ$ [Ô%6Ñ7Ô7ð &ð &‘��4Ø˜’6�6˜nÔ2�6Ø—O’O NÔ$8¸Ô$;Ñ<Ô<Ð<Ø—’ Ñ%Ô%Ð%Ð%Ý‘)”)ˆCØ�LŠL˜ÑÔÐØ�HŠH�Q‰KŒKˆKØŸš™œˆIˆIøÝð 	ð 	ð 	ØˆDð	øøøõ ˜IÐ4EÐFÑFÔF€HØ&F¸8Ð&FÐ&FÐ&F€HÐ"Ñ#Ø€Os·   Ã"AD% Ä%D;Ä:D;Å:BI È(H=È=
I
É	I
ÉL! É
KÉ(KÊKÊL! Ê)J>Ê>
KË
KËKËL! Ë;L Ì
LÌLÌ!"M+ÍMÍM+Í
M&Í#M+Í%M&Í&M+ÏC3S Ó
SÓSc                 óž  — | j                              d¦  «        pd                     ¦   «         }t          j                             d¦  «                             d¦  «                             d¦  «        }|rE|                     t          |¬¦  «        t          |¬¦  «        z  t          |¬¦  «        z  ¦  «        }t          | d	||d
œ¦  «        S )uC   Liste des factures extraites avec actions RÃ©imprimer et Supprimer.Úqrv   ru   r;   z-created_at)Úinvoice_number__icontains)Úclient_nom__icontains)Úsource_filename__icontainszextratfile/invoice_list.html)Úinvoice_listrÚ   )r›   r‹   rŒ   r   r6   Úselect_relatedrš   r9   r7   r   r   )r�   rÚ   Úqss      r   Úextract_listrá      sÆ   € à	Œ�Š˜Ñ	Ô	Ð	# ×*Ò*Ñ,Ô,€AÝ	Ô	"×	1Ò	1°)Ñ	<Ô	<×	MÒ	MÈgÑ	VÔ	V×	_Ò	_Ð`mÑ	nÔ	n€BØð 
Ø�YŠYÝ¨Ð*Ñ*Ô*Ý aÐ(Ñ(Ô(ñ)å¨1Ð-Ñ-Ô-ñ.ñ
ô 
ˆõ
 �'Ð9ÈBÐUVÐ;WÐ;WÑXÔXÐXr)   c                 óÚ   — t          t          |¬¦  «        }| j        dk    r8|                     ¦   «          t	          j        | d¦  «         t          d¦  «        S t          | dd|i¦  «        S )z:Suppression d'une facture extraite (confirmation requise).r   r�   u   Facture extraite supprimÃ©e.zextratfile:listz&extratfile/invoice_confirm_delete.htmlrA   )r   r   ÚmethodrV   r   r�   r   r   )r�   rj   rA   s      r   Úextract_deleterä     sn   € åÕ 1°bÐ9Ñ9Ô9€GØ„~˜ÒÐØ�ŠÑÔÐÝÔ˜Ð"@ÑAÔAÐAÝÐ)Ñ*Ô*Ð*Ý�'ÐCÀiÐQXÐEYÑZÔZÐZr)   z&https://sygdef.dgirdc.cd/Account/LoginÚ	A2424493AÚ12345c                 óP   — t          | dt          dz   t          t          dœ¦  «        S )uI   Page SYGDEF : bouton pour ouvrir la connexion dans une nouvelle fenÃªtre.zextratfile/sygdef_login.htmlz?ReturnUrl=%2F)Ú
sygdef_urlÚsygdef_userÚsygdef_password)r   ÚSYGDEF_LOGIN_URLÚSYGDEF_DEFAULT_USERÚSYGDEF_DEFAULT_PASSWORDr¨   s    r   Úsygdef_loginrî     s3   € åØØ&å*Ð-=Ñ=Ý.Ý6ð	
ð 	
ñô ð r)   c                 ó  — t          t          |¬¦  «        }|j        st          d¬¦  «        S 	 ddl}|                     ddd¬	¦  «        }|                     |j        ¦  «         |                     d
¬¦  «         |                     dd¬¦  «        }t          ¦   «         }| 
                    |d¬¦  «         |                     d¦  «         t          |                     ¦   «         d¬¦  «        S # t          $ r t          d¬¦  «        cY S w xY w)uM   Retourne l'image PNG du QR rÃ©gÃ©nÃ©rÃ© Ã  partir de qr_raw (pour l'aperÃ§u).r   i”  )Ústatusr   Nr   rG   rH   rI   TrM   rO   rP   rQ   rX   rY   z	image/pngr´   iô  )r   r   rF   r	   r]   r^   r_   r`   ra   r   rd   rÁ   rÂ   r   )r�   rj   rA   r]   rk   rl   Úbuffers          r   Úextract_qr_imagerò   )  s  € åÕ 1°bÐ9Ñ9Ô9€GØŒ>ð (Ý 3Ð'Ñ'Ô'Ð'ð(ØˆˆˆØ�]Š] 1¨q¸ˆ]Ñ;Ô;ˆØ
�Š�G”NÑ#Ô#Ð#Ø
�Š�DˆÑÔÐØ�mŠm w¸7ˆmÑCÔCˆÝ‘”ˆØ�Š� ˆÑ&Ô&Ð&Ø�Š�A‰ŒˆÝ˜FŸOšOÑ-Ô-¸KÐHÑHÔHÐHøÝð (ð (ð (Ý 3Ð'Ñ'Ô'Ð'Ð'Ð'ð(øøøs   ¯B?C/ Ã/DÄD)(Úior   rf   rb   Údjango.db.modelsr   Údjango.shortcutsr   r   r   Údjango.contribr   Údjango.httpr	   Údjango.template.loaderr
   Údecimalr   Úmodelsr   r   Úformsr   Úservicesr   Ú	pdf_utilsr   r   rD   ro   r–   rœ   rØ   rá   rä   rë   rì   rí   rî   rò   r    r)   r   ú<module>rþ      s²  ðØ Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€à Ð Ð Ð Ð Ð Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à Ð Ð Ð Ð Ð à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø +Ð +Ð +Ð +Ð +Ð +Ø )Ð )Ð )Ð )Ð )Ð )Ø *Ð *Ð *Ð *Ð *Ð *ð	ð 	ð 	ð7ð 7ð 7ðtð ð ð(*Eð *Eð *EðZð ð ðUð Uð Uðp
Yð 
Yð 
Yð[ð [ð [ð <Ð Ø!Ð Ø!Ð ð
ð 
ð 
ð(ð (ð (ð (ð (r)   