Ë
     èj& ã                   óÐ  — 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mZmZmZ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mZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d
dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d
dl7m8Z8 d dl9mZm:Z: d dl;m<Z<m=Z= d dl>m>Z> d dl?m@Z@mAZA d dlBZBd dlCZCd dlDZD eDjŠ                  eF«      ZGee:j�                  d„ «       «       ZId dlJmKZK d dlLmMZM d dl;m<Z< d dlNZNd dlOmPZP d dlQmRZR d„ ZSd dlTZTd dlUZUd dlVmWZW  G d„ de	e«      ZXed„ «       ZY G d„ de	e«      ZZ G d „ d!e	e«      Z[ G d"„ d#e	e«      Z\ G d$„ d%e	e«      Z] G d&„ d'e	e«      Z^ G d(„ d)e	e«      Z_ G d*„ d+e	e«      Z` G d,„ d-e	e«      Za G d.„ d/e	e«      Zb G d0„ d1e	e«      Zc G d2„ d3e	e«      Zd G d4„ d5e	e«      Zeed6„ «       Zf G d7„ d8e	e«      Zg G d9„ d:e	e«      Zhed;„ «       Zi G d<„ d=e	e«      Zj G d>„ d?e	e«      Zk G d@„ dAe	e«      Zl G dB„ dCe	e«      ZmedD„ «       Zn G dE„ dFe	e«      Zo G dG„ dHe	e«      Zp G dI„ dJe	e«      Zq G dK„ dLe	e«      ZredM„ «       Zs G dN„ dOe	e«      Zt G dP„ dQe	e«      ZuedR„ «       Zv G dS„ dTe	e«      Zw G dU„ dVe	e«      ZxedW„ «       Zy G dX„ dYe	e«      Zzd dZlm{Z{m|Z| d d[l}m~Z~ d dlZ€d\„ Z�ed]„ «       Z‚d^„ Zƒd_„ Z„ed`„ «       Z…eda„ «       Z†db„ Z‡edc„ «       Zˆedd„ «       Z‰ede„ «       ZŠy)fé    )ÚrenderÚget_object_or_404Úredirect)Úmessages)Úlogin_required)ÚLoginRequiredMixin)Úreverse_lazy)ÚListViewÚ
CreateViewÚ
UpdateViewÚ
DetailViewÚViewÚ
DeleteView)ÚSumÚQÚF)Útimezone©ÚDecimalé   )ÚClientÚDossierÚProformaÚFactureÚ	FactureM2Ú	FactureM3ÚPaiementÚLigneDossierÚLigneProformaÚFraisStandardÚTypeServiceÚServiceÚSocieteÚProforma_model2ÚLigneProforma_model2ÚProforma_model3ÚLigneProforma_model3)	ÚDossierFormÚPaiementFormÚ
ClientFormÚProformaFormÚLigneProformaFormSetÚProformaM2FormÚLigneProformaM2FormSetÚProformaM3FormÚLigneProformaM3FormSet)ÚBillingService)ÚmodelsÚtransaction)ÚHttpResponseÚJsonResponse)Ú	num2words)Ú
EdefClientÚEdefClientErrorNc                 ó–  — | j                   j                  d«      }| j                   j                  dd«      }|st        ddid¬«      S 	 t        j                  j                  d«      j                  |¬	«      }|j                  rt        ddid¬«      S |j                  s,d|_        ||_	        |j                  «        t        dddœ«      S t        j                  j                  «       }t        «       }g }d}|j                  j                  j!                  «       D ]ê  }|j"                  sŒ|j"                  j$                  r |j"                  j$                  j&                  nd}	|j"                  j(                  r |j"                  j(                  j&                  nd}
|j+                  |j"                  j&                  |j"                  j,                  |
dt/        |j0                  «      |	dœ«       |t/        |j0                  «      z  }Œì |j                  j2                  }|j4                  xs |j6                  xs ddt9        |dd «      xs |j:                  t9        |dd «      xs |j<                  dœ}|j>                  r|j>                  |d<   |r|j>                  ndd|j@                  › dtC        tE        jD                  «       «      › �|r|jF                  xs dnd|r|jH                  ndd |j                  d!|xs d"||d#|d$œgd%dtK        jL                  «       jO                  d&«      tQ        | jR                  jT                  r| jR                  j@                  nd'«      | jR                  jT                  r| jR                  jV                  nd(d)œd*œ}	 |jY                  |«      }|j                  d+«      }|st[        d,|› �«      ‚|j                  d-|«      }|j                  d.d/«      }|j]                  |||d0œ«      }t        j                  j_                  t`        j                  j_                  |j                  d1d2tC        tE        jD                  «       «      › �| jR                  ¬3«      |j                  |tK        jL                  «       | jR                  ||j                  d4«      xs |j                  d5«      |j                  d6«      |j                  d7«      |j                  d8«      |j                  d9«      d:|d ¬;«      }d|_1        d|_        ||_	        |j                  «        t        d|j@                  |j                  |jd                  d<œ«      S # t        j                  $ r t        dd
id¬«      cY S w xY w# tZ        $ rC}tf        ji                  d=tQ        |«      › �«       t        dtQ        |«      id>¬«      cY d }~S d }~ww xY w)?NÚ
facture_idÚmotifÚ ÚerrorzFacture manquantei�  ©ÚstatusÚdossier__client)ÚidzFacture introuvablei”  u   Facture dÃ©jÃ  supprimÃ©eTu(   Facture supprimÃ©e logiquement (Non DGI))ÚsuccessÚmessageç        ÚAÚSERr   )ÚcodeÚnameÚtypeÚquantityÚpriceÚtaxGroupzCLIENT DIVERSÚPMÚaddressÚcontact)rH   rI   rN   rO   ÚnifÚ	A1116228CzFA-ú-ÚttcÚNONÚFAÚRAMzAnnulation de factureÚESPECES)rH   ÚamountÚUSDz%Y-%m-%d %H:%M:%SÚ1ÚSYSTEM)rA   rH   )rP   ÚrnÚmodeÚisfrI   Ú	referenceÚreferenceTypeÚreferenceDescÚitemsÚclientÚpaymentÚcurCodeÚcurRateÚcurDateÚoperatorÚuidzUID FA manquant: ÚtotalÚvtotalr   )rj   rk   ÚVALIDEEzPROF-FA-)ÚdossierÚstatutÚnumeroÚ
created_byÚ
codeDEFDGIÚmtnÚqrCodeÚnimÚcountersÚdateTimeF)Úproformarm   Úfacture_originaleÚdate_emissionrp   ri   Ú
codedefdgirs   rt   ru   ÚdateTimedgiÚest_annuleeÚmotif_annulationÚtype_facture)rB   Úfacture_fa_idÚcodeDEFDGI_FArs   z[ANNULATION DGI] éô  )5ÚPOSTÚgetr5   r   ÚobjectsÚselect_relatedÚDoesNotExistÚ
is_deletedrz   r}   Úsaver#   Úfirstr7   rm   ÚlignesÚallÚserviceÚtaxgrouprG   ÚtypeartÚappendÚdesignationÚfloatÚmontantrc   rH   ÚnomÚgetattrÚadresseÚ	telephonerP   rA   ÚintÚtimeÚmode_dgiÚisf_dgir   ÚnowÚstrftimeÚstrÚuserÚis_authenticatedÚusernameÚcreate_invoiceÚ	ExceptionÚconfirm_invoiceÚcreater   r|   rs   Úloggerr=   )Úrequestr:   r;   Ú
facture_fvÚsocieteÚ
client_apirb   Útotal_amountÚligneÚ	tax_groupÚ	item_typeÚ
client_objÚ
client_dgiÚpayloadÚresp_createri   Úinvoice_totalÚinvoice_vtotalÚresp_confirmÚ
facture_faÚes                        ú`/home/exaucensingi/Documents/ProjectPython/FacControl_Version_Muni/cetek_projet/billing/views.pyÚannulation_facture_dgir¸      s.  € ð —‘×!Ñ! ,Ó/€JØ�L‰L×Ñ˜W bÓ)€EáÜ˜WÐ&9Ð:À3ÔGÐGðJÜ—_‘_×3Ñ3Øó
ç
‰#�ˆ#Ó
ð 	ð ×ÒÜ˜WÐ&AÐBÈ3ÔOÐOð × Ò à $ˆ
ÔØ&+ˆ
Ô#Ø�‰ÔÜØØAñ
ó ð 	ô
 �o‰o×#Ñ#Ó%€GÜ“€Jð
 €EØ€Là×#Ñ#×*Ñ*×.Ñ.Ó0ò -ˆØ�}Š}Øà38·=±=×3IÒ3I�E—M‘M×*Ñ*×/Ò/Èsˆ	Ø27·-±-×2GÒ2G�E—M‘M×)Ñ)×.Ò.ÈUˆ	à�‰Ø—M‘M×&Ñ&Ø—M‘M×-Ñ-ØØÜ˜5Ÿ=™=Ó)Ø!ñ
ô 	ð 	œ˜eŸm™mÓ,Ñ,‰ð!-ð, ×#Ñ#×*Ñ*€Jð —‘ÒD :§>¡>ÒD°_ØÜ˜: y°$Ó7ÒM¸:×;MÑ;MÜ˜: y°$Ó7ÒO¸:×;OÑ;Oñ	€Jð ‡~‚~Ø&ŸN™Nˆ
�5Ññ &ˆw�{Š{¨;Ø�J—M‘M�? !¤C¬¯	©	«Ó$4Ð#5Ð6Ù-4�× Ñ Ò)¡E¸%Ù")ˆw�Š¨uØð  ×*Ñ*ØØÒ9Ð"9àØð Ø"ñ
ð ð
 ØÜ—<‘<“>×*Ñ*Ð+>Ó?ä¨¯©×)FÒ)F�g—l‘l—o’oÈCÓPØ-4¯\©\×-JÒ-J�G—L‘L×)Ò)ÐPXñ
ñ/€Gð:I;ð !×/Ñ/°Ó8ˆØ�o‰o˜eÓ$ˆÙÜÐ/°¨}Ð=Ó>Ð>ð $Ÿ™¨°Ó>ˆØ$Ÿ™¨°1Ó5ˆð "×1Ñ1°#Ø"Ø$ñ8
ó ˆô —_‘_×+Ñ+ô  ×'Ñ'×.Ñ.Ø"×*Ñ*Ø Ø!¤#¤d§i¡i£kÓ"2Ð!3Ð4Ø"Ÿ<™<ð	 /ó ð ×&Ñ&Ø(Ü"Ÿ,™,›.Ø—|‘|ØØ#×'Ñ'¨Ó5ÒP¸×9IÑ9IÈ%Ó9PØ×#Ñ# HÓ-Ø× Ñ  Ó'Ø!×%Ñ% jÓ1Ø$×(Ñ(¨Ó4ØØ"Øð- ,ó 
ˆ
ð8 "&ˆ
ÔØ $ˆ
ÔØ&+ˆ
Ô#Ø�‰ÔäØØ'Ÿ]™]Ø'×2Ñ2Ø ×'Ñ'ñ	
ó ð 	øôu ×Ñò JÜ˜WÐ&;Ð<ÀSÔIÒIðJûôB ò ;Ü�‰Ð(¬¨Q«¨Ð1Ô2ä˜W¤c¨!£fÐ-°cÔ:Õ:ûð;ús1   Á
/U ÎGU< Õ"U9Õ8U9Õ<	WÖ8WÖ=W×W)Úget_template)Úpisa)r4   )Úsettings)Úfindersc                 óz  — t         j                  }t         j                  }t         j                  }t         j                  }|j                  d«      sd|z   }|j                  d«      sd|z   }| }| j                  |«      r2t        j                  j                  || j                  |dd«      «      }n^| j                  |«      rM| j                  |dd«      }t        j                  |«      }|r|}n t        j                  j                  ||«      }t        j                  j                  |«      sŒt         j                  r|| j                  |«      rkt         j                  D ]X  }	| j                  |dd«      }t        j                  j                  |	|«      }
t        j                  j                  |
«      sŒV|
c S  |S )z`
    Convert HTML URIs to absolute system paths so xhtml2pdf can access those
    resources
    ú/r<   r   )r»   Ú
STATIC_URLÚSTATIC_ROOTÚ	MEDIA_URLÚ
MEDIA_ROOTÚ
startswithÚosÚpathÚjoinÚreplacer¼   ÚfindÚisfileÚSTATICFILES_DIRS)ÚuriÚrelÚsUrlÚsRootÚmUrlÚmRootrÅ   Úrelative_pathÚ
found_pathÚ
static_dirÚpotential_paths              r·   Úlink_callbackrÕ   Ò   s\  € ô
 ×Ñ€DÜ× Ñ €EÜ×Ñ€DÜ×Ñ€Eð �?‰?˜3ÔØ�T‰zˆà�?‰?˜3ÔØ�T‰zˆà€Dð ‡~�~�dÔÜ�w‰w�|‰|˜E 3§;¡;¨t°R¸Ó#;Ó<‰ð 
�‰˜Ô	àŸ™ D¨"¨aÓ0ˆô
 —\‘\ -Ó0ˆ
áØ‰Dô —7‘7—<‘<  }Ó5ˆDô �7‰7�>‰>˜$ÔÜ×$Ò$¨¯©¸Ô)=Ü'×8Ñ8ò +�Ø!$§¡¨T°2°qÓ!9�Ü"$§'¡'§,¡,¨z¸=Ó"I�Ü—G‘G—N‘N >Õ2Ø*Ò*ð	+ð €Kó    )ÚBytesIOc                   ó   — e Zd Zd„ Zy)ÚDashboardViewc           
      óf  — t         j                  j                  «       j                  d«      d d }t        j                  j                  «       j                  d«      d d }t         j                  j                  «       }t        j                  j                  «       }t        j                  j                  «       }ddlm} ddl	m
} t        j                  «       j                  }	t        j                  j                  |	d¬«      j!                   |d«      ¬	«      j#                  d
«      j!                   |d«      ¬«      j                  d
«      }
g }g }i }|
D ]'  }|d
   j%                  d«      }t'        |d   «      ||<   Œ) g d¢}|D �cg c]  }|j)                  |d«      ‘Œ }}t*        j                  j#                  d«      j!                  t-        j.                  d«      ¬«      }|D �cg c]  }|d   ‘Œ	 }}|D �cg c]  }|d   ‘Œ	 }}|||||||||dœ	}t1        |d|«      S c c}w c c}w c c}w )Nú-date_emissioné   r   )Ú
TruncMonth)r   rY   )Údate_paiement__yearÚdeviseÚdate_paiement)Úmonthrá   r’   ©rj   z%brj   )ÚJanÚFebÚMarÚAprÚMayÚJunÚJulÚAugÚSepÚOctÚNovÚDecrn   rA   )Úcountrï   )	Úrecent_proformasÚrecent_facturesÚproforma_countÚfacture_countÚclient_countÚrevenue_labelsÚrevenue_dataÚstatus_labelsÚstatus_datazbilling/dashboard.html)r   r„   r‹   Úorder_byr   rï   r   Údjango.db.models.functionsrÝ   Údjango.db.modelsr   r   r›   Úyearr   ÚfilterÚannotateÚvaluesrœ   r‘   rƒ   r   r2   ÚCountr   )Úselfr¦   rð   rñ   rò   ró   rô   rÝ   r   Úcurrent_yearÚmensuel_paiementsÚmonths_labelsrö   Údata_mapÚentryÚmÚ
all_monthsÚdossier_statsÚdr÷   rø   Úcontexts                         r·   rƒ   zDashboardView.get  s  € Ü#×+Ñ+×/Ñ/Ó1×:Ñ:Ð;KÓLÈRÈaÐPÐÜ!Ÿ/™/×-Ñ-Ó/×8Ñ8Ð9IÓJÈ2ÈAÐNˆô "×)Ñ)×/Ñ/Ó1ˆÜŸ™×-Ñ-Ó/ˆÜ—~‘~×+Ñ+Ó-ˆõ 	:Ý(ä—|‘|“~×*Ñ*ˆô %×,Ñ,×3Ñ3Ø ,Øð 4ó 
÷ ‰(™ OÓ4ˆ(Ó
5·f±f¸W³oÇhÁhÑUXÐYbÓUcÀhÓFd×emÑemÐnuÓevð 	ð ˆØˆð
 ˆØ&ò 	0ˆEØ�g‘×'Ñ'¨Ó-ˆAÜ  g¡Ó/ˆH�QŠKð	0ò jˆ
Ø4>Ö?¨q˜Ÿ™ Q¨Õ*Ð?ˆÐ?ô  Ÿ™×.Ñ.¨xÓ8×AÑAÌÏÉÐUYÓHZÐAÓ[ˆØ.;Ö<¨˜˜8›Ð<ˆÐ<Ø+8Ö9 a�q˜“zÐ9ˆÐ9ð !1Ø.Ø,Ø*Ø(Ø(Ø(Ø*Ø&ñ

ˆô �gÐ7¸ÓAÐAùò% @ùò =ùÚ9s   Æ
H$Ç+H)Ç=H.N©Ú__name__Ú
__module__Ú__qualname__rƒ   © rÖ   r·   rÙ   rÙ     s   „ ó8BrÖ   rÙ   c                 ó^  — | j                   dk(  rz| j                  j                  d«      }|r]t        j                  j                  d¬«      j                  «       }|r-||_        |j                  «        t        j                  | d«       t        | j                  j                  dd«      «      S )Nr‚   ÚtauxT©Ú	est_actifu3   Le taux de change a Ã©tÃ© mis Ã  jour avec succÃ¨s.ÚHTTP_REFERERzbilling:dashboard)Úmethodr‚   rƒ   r#   r„   rý   r‰   r  rˆ   r   rB   r   ÚMETA)r¦   Únouveau_tauxr¨   s      r·   Úupdate_taux_globalr  G  s†   € à‡~�~˜ÒØ—|‘|×'Ñ'¨Ó/ˆÙÜ—o‘o×,Ñ,°tÐ,Ó<×BÑBÓDˆGÙØ+�”Ø—‘”Ü× Ñ  Ð*_Ô`Ü�G—L‘L×$Ñ$ ^Ð5HÓIÓJÐJrÖ   c                   ó   — e Zd ZeZdZdZy)ÚClientListViewzbilling/client_list.htmlÚclientsN)r  r  r  r   ÚmodelÚtemplate_nameÚcontext_object_namer  rÖ   r·   r  r  T  s   „ Ø€EØ.€MØ#ÑrÖ   r  c                   ó:   ‡ — e Zd ZeZeZdZ ed«      Z	ˆ fd„Z
ˆ xZS )ÚClientCreateViewúbilling/client_form.htmlúbilling:client_listc                 ób   •— t        j                  | j                  d«       t        ‰| �  |«      S )Nu   Client crÃ©Ã© avec succÃ¨s©r   rB   r¦   ÚsuperÚ
form_valid©r  ÚformÚ	__class__s     €r·   r'  zClientCreateView.form_valid_  s(   ø€ Ü×Ñ˜Ÿ™Ð'CÔDÜ‰wÑ! $Ó'Ð'rÖ   )r  r  r  r   r  r*   Ú
form_classr  r	   Úsuccess_urlr'  Ú__classcell__©r*  s   @r·   r!  r!  Y  s'   ø„ Ø€EØ€JØ.€MÙÐ4Ó5€K÷(ð (rÖ   r!  c                   ó(   — e Zd ZeZeZdZ ed«      Z	y)ÚClientUpdateViewr"  r#  N)
r  r  r  r   r  r*   r+  r  r	   r,  r  rÖ   r·   r0  r0  c  s   „ Ø€EØ€JØ.€MÙÐ4Ó5�KrÖ   r0  c                   ó$   — e Zd ZeZdZ ed«      Zy)ÚClientDeleteViewz"billing/client_confirm_delete.htmlr#  N)r  r  r  r   r  r  r	   r,  r  rÖ   r·   r2  r2  i  s   „ Ø€EØ8€MÙÐ4Ó5�KrÖ   r2  c                   ó   — e Zd ZeZdZdZdgZy)ÚDossierListViewzbilling/dossier_list.htmlÚdossiersz-created_atN)r  r  r  r   r  r  r  Úorderingr  rÖ   r·   r4  r4  o  s   „ Ø€EØ/€MØ$ÐØˆ�HrÖ   r4  c                   ó:   ‡ — e Zd ZeZeZdZ ed«      Z	ˆ fd„Z
ˆ xZS )ÚDossierCreateViewúbilling/dossier_form.htmlúbilling:dossier_listc                 ób   •— t        j                  | j                  d«       t        ‰| �  |«      S )Nu   Dossier ouvert avec succÃ¨sr%  r(  s     €r·   r'  zDossierCreateView.form_valid{  s(   ø€ Ü×Ñ˜Ÿ™Ð'DÔEÜ‰wÑ! $Ó'Ð'rÖ   ©r  r  r  r   r  r(   r+  r  r	   r,  r'  r-  r.  s   @r·   r8  r8  u  ó'   ø„ Ø€EØ€JØ/€MÙÐ5Ó6€K÷(ð (rÖ   r8  c                   ó:   ‡ — e Zd ZeZeZdZ ed«      Z	ˆ fd„Z
ˆ xZS )ÚDossierUpdateViewr9  r:  c                 ób   •— t        j                  | j                  d«       t        ‰| �  |«      S )Nu    Dossier mis Ã  jour avec succÃ¨sr%  r(  s     €r·   r'  zDossierUpdateView.form_valid…  s(   ø€ Ü×Ñ˜Ÿ™Ð'IÔJÜ‰wÑ! $Ó'Ð'rÖ   r<  r.  s   @r·   r?  r?    r=  rÖ   r?  c                   ó0   ‡ — e Zd ZeZdZdZˆ fd„Zd„ Zˆ xZ	S )ÚDossierDetailViewzbilling/dossier_detail.htmlrm   c           
      ó  •— t        ‰| �  di |¤Ž}t        j                  | j                  «      }||d<   g }t
        j                  j                  d¬«      }| j                  j                  j                  «       D �ci c]  }|j                  |“Œ }}|D ]­  }t        j                  j                  |d¬«      }	g }
|	D ]l  }|j                  |j                  «      }|
j                  ||r|j                  nd|r|j                   nd|r|j"                  nd|r|j$                  nddœ«       Œn |
sŒš|j                  ||
dœ«       Œ¯ ||d	<   t&        j                  j                  d¬
«      j)                  «       }||d<   |S c c}w )NÚtotalsT©Úactif©Útype_servicerF  r   rY   )rŒ   r’   rß   r  Úmontant_conversion)rI   ÚservicesÚgrouped_servicesr  r¨   r  )r&  Úget_context_datar1   Úcalculate_dossier_totalsÚobjectr!   r„   rý   rŠ   r‹   Ú
service_idr"   rƒ   rA   r�   r’   rß   r  rI  r#   r‰   )r  Úkwargsr  rD  rK  Útype_servicesÚlineÚexisting_linesÚtsrJ  Úservice_listÚsvcr¨   r*  s                €r·   rL  z"DossierDetailView.get_context_dataŽ  sy  ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆä×8Ñ8¸¿¹ÓEˆØ"ˆ�Ñð ÐÜ#×+Ñ+×2Ñ2¸Ð2Ó>ˆà=A¿[¹[×=OÑ=O×=SÑ=SÓ=UÖW°T˜4Ÿ?™?¨DÑ0ÐWˆÐWàò 	ˆBÜ—‘×-Ñ-¸2ÀTÐ-ÓJˆHØˆLØò �Ø%×)Ñ)¨#¯&©&Ó1�Ø×#Ñ#Ø"Ù/3˜tŸ|š|¸Ù-1˜dŸkšk°uÙ)-˜DŸIšI°1ÙEI¨$×*AÒ*AÈqñ%õ ðò Ø ×'Ñ'ØØ ,ñ)õ ð	ð& '7ˆÐ"Ñ#ô —/‘/×(Ñ(°4Ð(Ó8×>Ñ>Ó@ˆØ$ˆ�	Ñàˆùò7 Xs   Á=E?c           
      óØ  — | j                  «       }d|j                  v �rŽt        j                  j	                  d¬«      }d}|D �]6  }	 |j                  j                  d|j                  › �d«      }|j                  j                  d|j                  › �d«      }	|j                  j                  d	|j                  › �d«      }
|j                  j                  d
|j                  › �d«      }|rt        |«      nd}|
rt        |
«      nd}|rt        |«      nd}|dkD  r-t        j                  j                  ||||	||dœ¬«       |dz  }n/t        j                  j	                  ||¬«      j                  «        �Œ9 t        j                  ||› d�«       t        d|j                  ¬«      S d|j                  v rO	 t!        j"                  ||j$                  ¬«       t        j                  |d«       t        d|j                  ¬«      S d|j                  v rw|j                  j                  d«      }t        j                  j	                  ||¬«      j                  «        t        j                  |d«       t        d|j                  ¬«      S t        d|j                  ¬«      S # t        $ r Y �Œow xY w# t&        $ r)}t        j(                  |t+        |«      «       Y d }~Œðd }~ww xY w)NÚsave_servicesTrE  r   Úmontant_Ú0Údevise_rY   Útaux_Úmontant_conversion_rD   )r’   rß   r  rI  )rm   rŒ   Údefaultsr   )rm   rŒ   u    services mis Ã  jour.zbilling:dossier_detail©ÚpkÚcreate_proforma©rž   u    Proforma gÃ©nÃ©rÃ©e avec succÃ¨sÚdelete_lineÚline_id)rA   rm   u   Ligne supprimÃ©e)Ú
get_objectr‚   r"   r„   rý   rƒ   rA   r‘   r   Úupdate_or_createÚdeleteÚ
ValueErrorr   rB   r   r`  r1   ra  rž   r¢   r=   r�   )r  r¦   ÚargsrP  rm   rJ  Úcount_updatedrV  Úmontant_strrß   Útaux_strÚmontant_conversion_strr’   r  rI  r¶   rd  s                    r·   ÚpostzDossierDetailView.postµ  s‘  € Ø—/‘/Ó#ˆà˜gŸl™lÒ*ä—‘×-Ñ-°DÐ-Ó9ˆHØˆMàó �ðØ")§,¡,×"2Ñ"2°X¸c¿f¹f¸XÐ3FÈÓ"L�KØ$Ÿ\™\×-Ñ-°¸¿¹°xÐ.@À%ÓH�FØ&Ÿ|™|×/Ñ/°%¸¿¹°xÐ0@À#ÓF�HØ-4¯\©\×-=Ñ-=Ð@SÐTW×TZÑTZÐS[Ð>\Ð^aÓ-bÐ*á4?œe KÔ0ÀS�GÙ.6œ5 œ?¸C�DÙJ`¬Ð/EÔ)FÐfiÐ&à ’{ä$×,Ñ,×=Ñ=Ø$+Ø$'à+2Ø*0Ø(,Ø6Hñ	&ð >ô 	ð &¨Ñ*™ô %×,Ñ,×3Ñ3¸GÈSÐ3ÓQ×XÑXÔZùð7ô@ ×Ñ˜W¨¨Ð7MÐ&NÔOÜÐ4¸¿¹ÔDÐDà '§,¡,Ñ.ð0Ü×.Ñ.¨w¸W¿\¹\ÕJÜ× Ñ  Ð*LÔMô Ð4¸¿¹ÔDÐDà˜gŸl™lÑ*Ø—l‘l×&Ñ& yÓ1ˆGÜ× Ñ ×'Ñ'¨7¸GÐ'ÓD×KÑKÔMÜ×Ñ˜WÐ&8Ô9ÜÐ4¸¿¹ÔDÐDäÐ0°W·Z±ZÔ@Ð@øô) "ò Úðûô ò 0Ü—‘˜w¬¨A«×/Ñ/ûð0ús+   Á	D2J'Æ=7J7 Ê'	J4Ê3J4Ê7	K)Ë K$Ë$K))
r  r  r  r   r  r  r  rL  rn  r-  r.  s   @r·   rB  rB  ‰  s   ø„ Ø€EØ1€MØ#Ðô%öN9ArÖ   rB  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaCreateViewúbilling/proforma_form.htmlc           	      óú   — |j                   j                  dd«      }t        |¬«      }t        «       }t        j
                  j                  d¬«      j                  «       }t        || j                  ||||dœ«      S )NrI   ÚFV)Úinitial_typeTr  )r)  Úformsetrt  r¨   )
ÚGETrƒ   r+   r,   r#   r„   rý   r‰   r   r  )r  r¦   rt  r)  ru  r¨   s         r·   rƒ   zProformaCreateView.getô  su   € Ø—{‘{—‘ v¨tÓ4ˆÜ¨Ô6ˆÜ&Ó(ˆÜ—/‘/×(Ñ(°4Ð(Ó8×>Ñ>Ó@ˆÜ�g˜t×1Ñ1¸DÈWÐfrð  @Gñ  4Hó  Ið  	IrÖ   c                 ó2  — t        |j                  «      }t        |j                  «      }t        j                  j                  d¬«      j                  «       }|j                  «       r•|j                  «       r…|j                  d¬«      }|j                  |_
        |j                  «        ||_        |j                  «        t        j                  |d|j                  › d�«       t        d|j                   ¬«      S t#        || j$                  |||d	œ«      S )
NTr  F©Úcommitú	Proforma õ    crÃ©Ã© avec succÃ¨s.úbilling:proforma_detailr_  )r)  ru  r¨   )r+   r‚   r,   r#   r„   rý   r‰   Úis_validrˆ   rž   rp   Úinstancer   rB   ro   r   r`  r   r  )r  r¦   r)  ru  r¨   rw   s         r·   rn  zProformaCreateView.postû  sÖ   € Ü˜GŸL™LÓ)ˆÜ& w§|¡|Ó4ˆÜ—/‘/×(Ñ(°4Ð(Ó8×>Ñ>Ó@ˆØ�=‰=Œ?˜w×/Ñ/Ô1Ø—y‘y¨�yÓ.ˆHØ")§,¡,ˆHÔØ�M‰MŒOØ'ˆGÔØ�L‰LŒNÜ×Ñ˜W¨	°(·/±/Ð1BÐBWÐ&XÔYÜÐ5¸(¿+¹+ÔFÐFÜ�g˜t×1Ñ1¸DÈWÐahÑ3iÓjÐjrÖ   N©r  r  r  r  rƒ   rn  r  rÖ   r·   rp  rp  ñ  s   „ Ø0€MòIókrÖ   rp  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaUpdateViewrq  c           	      óè   — t        t        |¬«      }t        |¬«      }t        |¬«      }t        j
                  j                  d¬«      j                  «       }t        || j                  ||||dœ«      S )Nr_  ©r~  Tr  ©r)  ru  rw   r¨   )
r   r   r+   r,   r#   r„   rý   r‰   r   r  ©r  r¦   r`  rw   r)  ru  r¨   s          r·   rƒ   zProformaUpdateView.get  sh   € Ü$¤X°"Ô5ˆÜ XÔ.ˆÜ&°Ô9ˆÜ—/‘/×(Ñ(°4Ð(Ó8×>Ñ>Ó@ˆÜ�g˜t×1Ñ1¸DÈWÐbjÐw~Ñ3ó  Að  	ArÖ   c           	      ó‚  — t        t        |¬«      }|j                  dk7  r-t        j                  |d«       t        d|j                  ¬«      S t        |j                  |¬«      }t        |j                  |¬«      }t        j                  j                  d¬«      j                  «       }|j                  «       rk|j                  «       r[|j                  «        |j                  «        t        j                   |d|j"                  › d	�«       t        d|j                  ¬«      S t%        || j&                  ||||d
œ«      S )Nr_  Ú	BROUILLONõ4   Impossible de modifier une proforma dÃ©jÃ  validÃ©e.r|  rƒ  Tr  rz  õ    mis Ã  jour.r„  )r   r   rn   r   r=   r   r`  r+   r‚   r,   r#   r„   rý   r‰   r}  rˆ   rB   ro   r   r  r…  s          r·   rn  zProformaUpdateView.post  s÷   € Ü$¤X°"Ô5ˆØ�?‰?˜kÒ)Ü�N‰N˜7Ð$ZÔ[ÜÐ5¸(¿+¹+ÔFÐFÜ˜GŸL™L°8Ô<ˆÜ& w§|¡|¸hÔGˆÜ—/‘/×(Ñ(°4Ð(Ó8×>Ñ>Ó@ˆØ�=‰=Œ?˜w×/Ñ/Ô1Ø�I‰IŒKØ�L‰LŒNÜ×Ñ˜W¨	°(·/±/Ð1BÀ-Ð&PÔQÜÐ5¸(¿+¹+ÔFÐFÜ�g˜t×1Ñ1¸DÈWÐbjÐw~Ñ3ó  Að  	ArÖ   Nr  r  rÖ   r·   r�  r�  
  s   „ Ø0€MòAóArÖ   r�  c                   ó   — e Zd ZeZdZdZdgZy)ÚProformaListViewzbilling/proforma_list.htmlÚ	proformasrÛ   N)r  r  r  r   r  r  r  r6  r  rÖ   r·   r‹  r‹  $  s   „ Ø€EØ0€MØ%ÐØ Ð!�HrÖ   r‹  c                   ó0   ‡ — e Zd ZeZdZdZˆ fd„Zd„ Zˆ xZ	S )ÚProformaDetailViewzbilling/proforma_detail.htmlrw   c                 óØ  •— t        ‰
| �  di |¤Ž}| j                  «       }t        j                  j                  d¬«      j                  «       }||d<   t        d«      }|j                  j                  «       D ]  }||j                  z  }Œ |t        d«      z  }||z   }|r!|j                  rt        |j                  «      n
t        d«      }	||d<   ||d<   ||d	<   ||	z  |d
<   |	|d<   |S )NTr  r¨   rZ  ú0.16Ú2800Útotal_htÚtvaÚ	total_ttcÚmontant_cdfr  r  )r&  rL  re  r#   r„   rý   r‰   r   rŠ   r‹   r’   r  )r  rP  r  rw   r¨   r’  r«   r“  r”  r  r*  s             €r·   rL  z#ProformaDetailView.get_context_data/  sí   ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆØ—?‘?Ó$ˆÜ—/‘/×(Ñ(°4Ð(Ó8×>Ñ>Ó@ˆØ$ˆ�	Ñô ˜3“<ˆØ—_‘_×(Ñ(Ó*ò 	&ˆEØ˜Ÿ™Ñ%‰Hð	&àœ ›Ñ(ˆØ˜s‘Nˆ	Ù(/°G·L²LŒw�w—|‘|Ô$ÄgÈfÃoˆØ&ˆ�
ÑØˆ�‰Ø(ˆ�ÑØ!*¨TÑ!1ˆ�ÑØˆ�‰ØˆrÖ   c                 ó`  — | j                  «       }d|j                  v rˆ|j                  j                  d«      rm	 |j                  d   }t	        j
                  |||j                  ¬«      }t        j                  |d|j                  › d�«       t        d|j                  ¬«      S d
|j                  v r]	 t	        j                  ||j                  ¬«      }t        j                  |d|j                  › d�«       t        d|j                  ¬«      S t        d	|j                  ¬«      S # t        $ rC}t        j                  |dt        |«      › �«       t        d	|j                  ¬«      cY d }~S d }~ww xY w# t        $ r,}t        j                  |dt        |«      › �«       Y d }~Œ–d }~ww xY w)NÚupload_validateÚinvoice_filerb  úFacture u-    importÃ©e et validÃ©e avec succÃ¨s via DGI !úbilling:facture_detailr_  úErreur lors de l'import : r|  Úvalidateu    validÃ©e et normalisÃ©e DGI !u;   Erreur DGI â€” la facture n'a pas Ã©tÃ© crÃ©Ã©e. DÃ©tail : )re  r‚   ÚFILESrƒ   r1   Ú'convert_proforma_to_invoice_from_uploadrž   r   rB   ro   r   r`  r¢   r=   r�   Úvalidate_proforma)r  r¦   ri  rP  rw   Úuploaded_fileÚfacturer¶   s           r·   rn  zProformaDetailView.postC  sr  € Ø—?‘?Ó$ˆð  §¡Ñ,°·±×1BÑ1BÀ>Ô1RðKØ '§¡¨nÑ =�Ü(×PÑPÐQYÐ[hÐov×o{Ño{Ô|�Ü× Ñ  ¨H°W·^±^Ð4DÐDqÐ*rÔsÜÐ 8¸W¿Z¹ZÔHÐHð ˜Ÿ™Ñ%ðpÜ(×:Ñ:¸8È'Ï,É,ÔW�Ü× Ñ  ¨H°W·^±^Ð4DÐDbÐ*cÔdÜÐ 8¸W¿Z¹ZÔHÐHô Ð1°h·k±kÔBÐBøô ò KÜ—‘˜wÐ*DÄSÈÃVÀHÐ(MÔNÜÐ 9¸h¿k¹kÔJÕJûðKûô ò pÜ—‘˜wÐ*eÔfiÐjkÓflÐemÐ(n×oÑoûðpús7   »A+D) Â6AE8 Ä)	E5Ä28E0Å*E5Å0E5Å8	F-Æ"F(Æ(F-)
r  r  r  r   r  r  r  rL  rn  r-  r.  s   @r·   rŽ  rŽ  *  s   ø„ Ø€EØ2€MØ$Ðôö(CrÖ   rŽ  c                 óŒ  — t        t        |¬«      }d}t        j                  j	                  d¬«      j                  «       }t        |j                  j                  «       «      }g }t        d«      }|r±g }t        d«      }	|D ]u  }
|j                  |
j                  |
j                  |
j                  |
j                  d|
j                  |
j                   dœ«       |	|
j                  z  }	||
j                  z  }Œw |j                   t#        dd	d
ddœ«      «       ||	dœ«       �n€|j$                  �rs|j$                  }t&        j                  j	                  d¬«      }|j                  j                  «       D �ci c]  }|j(                  |“Œ }}|D �]  }g }t        d«      }	t*        j                  j	                  |d¬«      D ]Ã  }|j-                  |j.                  «      }|sŒ!|j                  dkD  sŒ1|j0                  r|j0                  j2                  nd}|j                  |j                  dd|j                  ||j                  |j                   dœ«       |j                   dk(  sŒ¦|	|j                  z  }	||j                  z  }ŒÅ |sŒû|j                  |||	dœ«       �Œ 	 t5        t7        |«      d¬«      j9                  «       dz   }|r!|j<                  rt        |j<                  «      n
t        d«      }|t        d«      z  }||z   }||z  }	 t5        t7        |«      d¬«      j9                  «       dz   }||j$                  ||||||||| j>                  dœ}tA        d¬«      }d|jB                  › d�|d<   tE        |«      }|jG                  |«      }	 tI        jJ                  ||tL        ¬«      }|jN                  rtA        d |z   d!z   «      S 	 |S c c}w # t:        $ r	 |› d�}Y �Œw xY w# t:        $ r |› d�}Y ŒÄw xY w# t:        $ r7}dd l(}tA        d"tS        |«      › d#|jU                  «       › d!�«      cY d }~S d }~ww xY w)$Nr_  zbilling/proforma_pdf.htmlTr  rZ  ÚB©r�   ÚdescriptionrJ   Ú
unit_priceÚtax_coder’   rß   ÚTr  ÚServicesr   ©r�   rA   ©rI   rJ  Úsubtotal_usdrE  rG  rE   r<   r   rY   Úfr©Úlangu    DOLLARS AMÃ‰RICAINSÚ2300r�  )rw   rm   rK  Útotal_general_usdÚtva_usdÚtotal_ttc_usdr•  r  Úsolde_en_lettresr¨   rž   úapplication/pdf©Úcontent_typeúfilename="proforma_ú.pdf"úContent-Disposition©ÚdestrÕ   úWe had some errors <pre>ú</pre>úError generating PDF: ú	<br><pre>)+r   r   r#   r„   rý   r‰   ÚlistrŠ   r‹   r   r�   r�   r¥  ÚquantiteÚprix_unitairer’   rß   rI   rm   r!   rO  r"   rƒ   rA   r�   rG   r6   r—   Úupperr¢   r  rž   r4   ro   r¹   r   rº   Ú	CreatePDFrÕ   ÚerrÚ	tracebackr�   Ú
format_exc)r¦   r`  rw   Útemplate_pathr¨   Úlignes_proformarK  r±  Úservices_listr¬  r«   rm   rQ  rR  rS  rT  rV  r§  r´  r  r²  r³  r•  r  ÚresponseÚtemplateÚhtmlÚpisa_statusr¶   rÇ  s                                 r·   Úproforma_pdf_viewrÐ  \  s.  € ä ¤¨bÔ1€HØ/€MÜ�o‰o×$Ñ$¨tÐ$Ó4×:Ñ:Ó<€Gô ˜8Ÿ?™?×.Ñ.Ó0Ó1€OØÐÜ ›ÐáàˆÜ˜s“|ˆØ$ò 	/ˆEØ× Ñ Ø$×0Ñ0Ø$×0Ñ0Ø!ŸN™NØ#×1Ñ1ØØ Ÿ=™=ØŸ,™,ñ"ô ð ˜EŸM™MÑ)ˆLØ §¡Ñ.Ñð	/ð 	×ÑØG”D˜˜b°*ÀAÑ"FÓGÓIØ%Ø(ñ!
ö 	ð
 
×	Ó	à×"Ñ"ˆÜ#×+Ñ+×2Ñ2¸Ð2Ó>ˆØ<C¿N¹N×<NÑ<NÓ<PÖQ°D˜$Ÿ/™/¨4Ñ/ÐQˆÐQØó 	oˆBØˆMÜ" 3›<ˆLÜ—‘×-Ñ-¸2ÀTÐ-ÓJò :�Ø%×)Ñ)¨#¯&©&Ó1�Ú˜DŸL™L¨1Ó,Ø47·L²L˜sŸ|™|×0Ò0Àc�HØ!×(Ñ(Ø'*§¡Ø')Ø$%Ø&*§l¡lØ$,Ø#'§<¡<Ø"&§+¡+ñ*ô ð —{‘{ eÓ+Ø$¨¯©Ñ4˜Ø)¨T¯\©\Ñ9Ñ)ð:ò  Ø ×'Ñ'°ÀÐ`lÑ(mÖnð)	oð,FÜ$¤SÐ):Ó%;À$ÔG×MÑMÓOÐRhÑhÐñ %,°·²Œ7�7—<‘<Ô Ä'È&Ã/€DØ¤'¨&£/Ñ1€GØ%¨Ñ/€MØ $Ñ&€KðBÜ$¤S¨Ó%7¸dÔC×IÑIÓKÐNdÑdÐð
 Ø×#Ñ#Ø,Ø.ØØ&Ø"ØØ,ØØ—‘ñ€Gô Ð):Ô;€HØ(;¸H¿O¹OÐ;LÈEÐ&R€HÐ"Ñ#Ü˜MÓ*€HØ�?‰?˜7Ó#€DðfÜ—n‘n T°ÌÔVˆØ�?Š?ÜÐ :¸TÑ AÀHÑ LÓMÐMð ð
 €Oùò Røô2 ò FØ/Ð0Ð0DÐEÓðFûô ò BØ+˜_Ð,@ÐAÒðBûô2 ò fÛÜÐ4´S¸³V°H¸IÀi×FZÑFZÓF\ÐE]Ð]cÐdÓeÕeûðfúsH   Å:OÊ&'O Ì'O/ Î8P ÏO,Ï+O,Ï/P Ï?P Ð	QÐ,P>Ð8QÐ>Qc                   ó:   ‡ — e Zd ZeZdZdZdgZˆ fd„Zˆ fd„Z	ˆ xZ
S )ÚFactureListViewzbilling/facture_list.htmlÚfacturesrÛ   c                 óz   •— t         ‰| �  «       }| j                  j                  j	                  d«      }|dk(  r	 |S )Nr?   Úunpaid)r&  Úget_querysetr¦   rv  rƒ   )r  ÚqsÚfilter_statusr*  s      €r·   rÖ  zFactureListView.get_querysetÈ  s>   ø€ Ü‰WÑ!Ó#ˆàŸ™×(Ñ(×,Ñ,¨XÓ6ˆð ˜HÒ$ð àˆ	rÖ   c                 ó¢  •— t        ‰
| �  di |¤Ž}t        |d   «      }|D �]%  }|j                  rL|j                  j                  j                  «       r(t        j                  |j                  «      }|d   d   }nN|j                  r7|j                  j                  j                  «       }t        d„ |D «       «      }nt        d«      }t        d„ |j                  j                  «       D «       t        d«      «      }d}	||t        d	«      z
  k\  rd
}	n|dkD  rd}	|	|_        t        t        d«      ||z
  «      |_        ||_        �Œ( ||d<   |S )NrÓ  rY   r”  c              3   ón   K  — | ]-  }|j                   sŒ|j                  d k(  sŒ |j                  –— Œ/ y­w©rY   N)rŒ   rß   r’   ©Ú.0Úls     r·   ú	<genexpr>z3FactureListView.get_context_data.<locals>.<genexpr>î  s)   è ø€ Ò%c°AÀ1Ç9Ã9ÐQR×QYÑQYÐ]bÓQb a§i¥iÑ%cùs   ‚5”5¤5rZ  c              3   óT   K  — | ]   }|j                   d k(  sŒ|j                  –— Œ" y­wrÛ  ©rß   r’   ©rÝ  Úps     r·   rß  z3FactureListView.get_context_data.<locals>.<genexpr>ø  s   è ø€ ÒT aÀ!Ç(Á(ÈeÓBS˜Ÿ	�	ÑTùó   ‚(—(z0.00u	   Non PayÃ©z0.1u   PayÃ©r   ÚPartielr  )r&  rL  rÁ  rw   rŠ   Úexistsr1   Úcalculate_proforma_totalsrm   r‹   Úsumr   Ú	paiementsÚstatut_paiement_calculeÚmaxÚreste_a_payerÚmontant_total_calcule)r  rP  r  Úfactures_listÚfacÚtotsÚtotal_lines_usdrŠ   ÚpaidÚstatut_paiementr*  s             €r·   rL  z FactureListView.get_context_dataÜ  s3  ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆô ˜W ZÑ0Ó1ˆà ó 	8ˆCà�|Š| §¡× 3Ñ 3× :Ñ :Ô <Ü%×?Ñ?ÀÇÁÓM�Ø"& u¡+¨kÑ":‘Ø—’ØŸ™×+Ñ+×/Ñ/Ó1�Ü"%Ñ%c¸Ô%cÓ"c‘ä")¨#£,�ô ÑT¨3¯=©=×+<Ñ+<Ó+>ÔTÔV]Ð^dÓVeÓfˆDà)ˆOà�¬°«Ñ7Ò7Ø")‘Ø˜’Ø"+�à*9ˆCÔ'Ü #¤G¨F£O°_ÀtÑ5KÓ LˆCÔØ(7ˆCÖ%ð9	8ð< ,ˆ�
ÑØˆrÖ   )r  r  r  r   r  r  r  r6  rÖ  rL  r-  r.  s   @r·   rÒ  rÒ  Â  s*   ø„ Ø€EØ/€MØ$ÐØ Ð!€Hô÷(*ð *rÖ   rÒ  c                   ó0   ‡ — e Zd ZeZdZdZˆ fd„Zd„ Zˆ xZ	S )ÚFactureDetailViewzbilling/facture_detail.htmlr¡  c                 óØ  •— t        ‰
| �  di |¤Ž}| j                  j                  rX| j                  j                  j                  j                  «       r*t        j                  | j                  j                  «      }n`| j                  j                  r*t        j                  | j                  j                  «      }n ddl
m} d |d«       |d«       |d«      dœi}|d   d   }|d   d   }|d   d   }| j                  j                  j                  «       j                  d	«      }t        d
„ |D «       «      }	t!        «       |d<   ||d<   ||d<   ||d<   ||d<   |	|d<   ||	z
  |d<   |S )Nr   r   rY   rZ  ©rj   r“  r”  r”  rj   r“  ú-date_paiementc              3   óT   K  — | ]   }|j                   d k(  sŒ|j                  –— Œ" y­wrÛ  rá  râ  s     r·   rß  z5FactureDetailView.get_context_data.<locals>.<genexpr>  s   è ø€ Ò!T°À!Ç(Á(ÈeÓBS !§)¥)Ñ!Tùrä  Úpaiement_formré  r’  Ú	total_tvaÚtotal_factureÚtotal_paiementsrì  r  )r&  rL  rN  rw   rŠ   ræ  r1   rç  rm   rM  Údecimalr   ré  r‹   rù   rè  r)   )r  rP  r  Útotals_dictr   Ú	total_usdÚtotal_ht_usdÚtotal_tva_usdré  Útotal_paiements_usdr*  s             €r·   rL  z"FactureDetailView.get_context_data  s[  ø€ Ü‘'Ñ*Ñ4¨VÑ4ˆð �;‰;×Ò D§K¡K×$8Ñ$8×$?Ñ$?×$FÑ$FÔ$HÜ(×BÑBÀ4Ç;Á;×CWÑCWÓX‰KØ�[‰[× Ò Ü(×AÑAÀ$Ç+Á+×BUÑBUÓV‰Kå'Ø ©G°C«LÁÈÃÑ\cÐdgÓ\hÑ"iÐjˆKà Ñ& {Ñ3ˆ	Ø" 5Ñ)¨'Ñ2ˆØ# EÑ*¨5Ñ1ˆð —K‘K×)Ñ)×-Ñ-Ó/×8Ñ8Ð9IÓJˆ	Ü!Ñ!T°YÔ!TÓTÐä#/£>ˆ�Ñ Ø(ˆ�ÑØ*ˆ�
ÑØ,ˆ�ÑØ#,ˆ�Ñ Ø%8ˆÐ!Ñ"Ø#,Ð/BÑ#Bˆ�Ñ àˆrÖ   c                 óî  — | j                  «       | _        d|j                  v �r3t        |j                  «      }|j	                  «       rø|j                  d¬«      }| j                  |_        | j                  j                  r$| j                  j                  j                  «       nd xs8 | j                  j                  r | j                  j                  j                  nd }||_
        |j                  |_        |j                  «        t        j                  |d«       t        d| j                  j                   ¬«      S t        j"                  |d«       | j%                  | j'                  «       «      S )NÚadd_paymentFrx  u   Paiement ajoutÃ© avec succÃ¨srš  r_  z%Erreur dans le formulaire de paiement)re  rN  r‚   r)   r}  rˆ   r¡  rw   Ú
get_clientrm   rc   rž   rp   r   rB   r   r`  r=   Úrender_to_responserL  )r  r¦   ri  rP  r)  Úpaiementr®   s          r·   rn  zFactureDetailView.post+  s/  € Ø—o‘oÓ'ˆŒØ˜GŸL™LÒ(Ü §¡Ó-ˆDØ�}‰}ŒØŸ9™9¨E˜9Ó2�Ø#'§;¡;�Ô ØCGÇ;Á;×CWÒCW˜dŸk™k×2Ñ2×=Ñ=Ô?Ð]aò  dð  FJ÷  FQñ  FQ÷  FYò  FYÐgk×grÑgr×gzÑgz÷  hBò  hBð  _c�
Ø",�”Ø&-§l¡l�Ô#Ø—‘”Ü× Ñ  Ð*IÔJÜÐ 8¸T¿[¹[¿^¹^ÔLÐLä—‘˜wÐ(OÔPØ×&Ñ& t×'<Ñ'<Ó'>Ó?Ð?rÖ   )
r  r  r  r   r  r  r  rL  rn  r-  r.  s   @r·   rõ  rõ    s   ø„ Ø€EØ1€MØ#Ðôö<@rÖ   rõ  c                 óÌ  — t        t        |¬«      }|j                  }d}t        j                  j                  d¬«      j                  «       }|r|j                  nd}g }t        d«      }|r#t        |j                  j                  «       «      ng }	|	rúddlm}
  |
t        «      } |
t        «      }i }|	D ]®  }d}d|vr t        d	d
dddœ«      «       |d<   ||   j                  |j                   |j"                  |j$                  |j&                  d|j(                  |j*                  dœ«       |j*                  dk(  sŒ‰||xx   |j(                  z  cc<   ||j(                  z  }Œ° |D ]   }|j                  ||   ||   ||   dœ«       Œ" �n€|j,                  �rs|j,                  }t.        j                  j                  d¬«      }|j                  j                  «       D �ci c]  }|j0                  |“Œ }}|D �]  }g }t        d«      }t2        j                  j                  |d¬«      D ]Ã  }|j5                  |j6                  «      }|sŒ!|j(                  dkD  sŒ1|j8                  r|j8                  j:                  nd}|j                  |j                   dd|j(                  ||j(                  |j*                  dœ«       |j*                  dk(  sŒ¦||j(                  z  }||j(                  z  }ŒÅ |sŒû|j                  |||dœ«       �Œ |r0|j                  j=                  «       rt?        j@                  |«      }nO|j,                  r t?        jB                  |j,                  «      }n#dt        d«      t        d«      t        d«      dœi}|d   d   }|d   d   }|d   d   }|jD                  j                  «       }tG        d„ |D «       «      }||z
  }t        d«      } t        d«      }!t        d«      }"|}#	 |dz  dk(  rtI        tK        |«      d¬«      dz   }$ntI        |ddd¬«      }$d }%|jN                  r¿tQ        jR                  dtP        jT                  jV                  d d!¬"«      }&|&jY                  |jN                  «       |&j[                  d¬#«       |&j]                  d$d%¬&«      }'t_        «       }(|'ja                  |(d'¬(«       tc        jd                  |(jg                  «       «      ji                  «       }%i d)|“d*|j,                  “d+|“d,|“d-|“d.|“d|“d/|“d0|“d1|“d2|“d3|$“d4|r)t        tk        |«      «      t        tk        |«      «      z  n
t        d«      “d5|%“d6|“d7| “d8|!“|"|#| jl                  d9œ¥})to        d:¬;«      }*d<|jp                  › d=�|*d><   ts        |«      }+|+ju                  |)«      },	 tw        jx                  |,|*tz        ¬?«      }-|-j|                  rto        d@|,z   dAz   «      S 	 |*S c c}w # tL        $ r tI        tK        |«      d¬«      dz   }$Y �Œòw xY w# tL        $ r7}.dd l?}/to        dBtk        |.«      › dC|/j�                  «       › dA�«      cY d }.~.S d }.~.ww xY w)DNr_  zbilling/facture_pdf.htmlTr  rZ   rZ  r   )Údefaultdictr¨  r  r©  rª  r£  r¤  rY   r«  rE  rG  rE   r<   r   r÷  rj   r“  r”  c              3   óT   K  — | ]   }|j                   d k(  sŒ|j                  –— Œ" y­wrÛ  rá  râ  s     r·   rß  z#facture_pdf_view.<locals>.<genexpr>‘  s   è ø€ ÒP¨A¸a¿h¹hÈ%Ó>O˜aŸi�iÑPùrä  r­  r®  õ    dollars amÃ©ricainsÚcurrency)r¯  Útor  é
   é   ©ÚversionÚerror_correctionÚbox_sizeÚborder©ÚfitÚblackÚwhite©Ú
fill_colorÚ
back_colorÚPNG©Úformatr¡  rm   rw   rK  r±  Úmontant_tvar¨   r  r  Úsolde_a_payerr´  r•  Úqr_code_dgiré  Úmontant_marcheÚmontant_demande)Úmontant_solliciteÚmontant_deja_percurž   rµ  r¶  úfilename="facture_r¹  rº  r»  r½  r¾  r¿  rÀ  )Ar   r   rw   r#   r„   rý   r‰   r  r   rÁ  rŠ   r‹   Úcollectionsr
  rI   r�   r�   r¥  rÂ  rÃ  r’   rß   rm   r!   rO  r"   rƒ   rA   r�   rG   ræ  r1   rç  rM  ré  rè  r6   r—   r¢   rs   ÚqrcodeÚQRCodeÚ	constantsÚERROR_CORRECT_LÚadd_dataÚmakeÚ
make_imager×   rˆ   Úbase64Ú	b64encodeÚgetvalueÚdecoder�   rž   r4   ro   r¹   r   rº   rÅ  rÕ   rÆ  rÇ  rÈ  )0r¦   r`  r¡  rw   rÉ  r¨   r  rK  r±  rÊ  r
  ÚgroupsÚgroup_subtotalsÚgroup_typesr«   Úkeyrm   rQ  rR  rS  rT  rË  r¬  rV  r§  rÿ  r’  r   r”  ré  r  r!  r#  r$  r%  r&  r´  Úqr_image_base64ÚqrÚimgÚbufferr  rÌ  rÍ  rÎ  rÏ  r¶   rÇ  s0                                                   r·   Úfacture_pdf_viewr<  <  s‡  € ä¤¨BÔ/€GØ×Ñ€HØ.€MÜ�o‰o×$Ñ$¨tÐ$Ó4×:Ñ:Ó<€GÙ"ˆ7�<Š<¨€DàÐÜ ›Ðá5=”d˜8Ÿ?™?×.Ñ.Ó0Ô1À2€Oáå+ÙœTÓ"ˆÙ%¤gÓ.ˆØˆà$ò 	3ˆEØˆCØ˜Ñ#Ø!T¤ c¨2¸zÐQRÑ/SÓ!TÓ!V�˜A‘à�3‰K×ÑØ$×0Ñ0Ø$×0Ñ0Ø!ŸN™NØ#×1Ñ1ØØ Ÿ=™=ØŸ,™,ñ ô ð �|‰|˜uÓ$Ø Ó$¨¯©Ñ5Ó$Ø! U§]¡]Ñ2Ñ!ð!	3ð$ ò 	ˆCØ×#Ñ#Ø# CÑ(Ø" 3™KØ /°Ñ 4ñ%õ ò	ð 
�‹à—/‘/ˆÜ#×+Ñ+×2Ñ2¸Ð2Ó>ˆØ<C¿N¹N×<NÑ<NÓ<PÖQ°D˜$Ÿ/™/¨4Ñ/ÐQˆÐQØó 	oˆBØˆMÜ" 3›<ˆLÜ—‘×-Ñ-¸2ÀTÐ-ÓJò :�Ø%×)Ñ)¨#¯&©&Ó1�Ú˜DŸL™L¨1Ó,Ø47·L²L˜sŸ|™|×0Ò0Àc�HØ!×(Ñ(Ø'*§¡Ø')Ø$%Ø&*§l¡lØ$,Ø#'§<¡<Ø"&§+¡+ñ*ô ð —{‘{ eÓ+Ø$¨¯©Ñ4˜Ø)¨T¯\©\Ñ9Ñ)ð:ò  Ø ×'Ñ'°ÀÐ`lÑ(mÖnð)	oñ. �H—O‘O×*Ñ*Ô,Ü$×>Ñ>¸xÓH‰Ø	�ŠÜ$×=Ñ=¸g¿o¹oÓN‰à¬°«¼WÀS»\ÔX_Ð`cÓXdÑeÐfˆà˜5Ñ! 'Ñ*€HØ˜eÑ$ UÑ+€KØ˜EÑ" ;Ñ/€Ið ×!Ñ!×%Ñ%Ó'€IÜÑP°ÔPÓPÐØÐ 3Ñ3€Mô ˜S“\€NÜ˜c“l€OÜ ›ÐØ,Ðð]Ø˜1Ñ Ò!Ü(¬¨]Ó);À$ÔGÐJ`Ñ`Ñä(¨¸TÀjÐ[`ÔaÐð
 €OØ‡~‚~Ü�]‰] 1´v×7GÑ7G×7WÑ7WÐbdÐmnÔoˆØ
�‰�G—N‘NÔ#Ø
�‰�DˆÔØ�m‰m w¸7ˆmÓCˆÜ“ˆØ�‰� ˆÔ&Ü ×*Ñ*¨6¯?©?Ó+<Ó=×DÑDÓFˆðØ�7ðà�7—?‘?ðð 	�Hðð 	Ð,ð	ð
 	˜Xðð 	�{ðð 	�Yðð 	�7ðð 	�ðð 	Ð2ðð 	˜ðð 	Ð,ðð 	É4”wœs =Ó1Ó2´W¼SÀ»YÓ5GÒGÔU\Ð]`ÓUaðð 	�ðð 	�Yðð" 	˜.ð#ð$ 	˜?ð%ð& /Ø0Ø—‘ò+€Gô0 Ð):Ô;€HØ(:¸7¿>¹>Ð:JÈ%Ð&P€HÐ"Ñ#Ü˜MÓ*€HØ�?‰?˜7Ó#€DðfÜ—n‘n T°ÌÔVˆØ�?Š?ÜÐ :¸TÑ AÀHÑ LÓMÐMð ð
 €OùòK Røôh ò ]Ü$¤S¨Ó%7¸dÔCÐF\Ñ\Óð]ûô\ ò fÛÜÐ4´S¸³V°H¸IÀi×FZÑFZÓF\ÐE]Ð]cÐdÓeÕeûðfús6   Ç#W5Ï<1W: Ö98X# ×:"X ØX Ø#	Y#Ø,,YÙY#ÙY#c                   ó   — e Zd ZeZdZdZdgZy)ÚProformaM2ListViewzbilling/proforma_m2_list.htmlrŒ  rÛ   N)r  r  r  r$   r  r  r  r6  r  rÖ   r·   r>  r>  Õ  ó   „ Ø€EØ3€MØ%ÐØ Ð!�HrÖ   r>  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaM2CreateViewúbilling/proforma_m2_form.htmlc                 ó^   — t        «       }t        «       }t        || j                  ||dœ«      S ©N©r)  ru  )r-   r.   r   r  ©r  r¦   r)  ru  s       r·   rƒ   zProformaM2CreateView.getß  ó,   € ÜÓˆÜ(Ó*ˆÜ�g˜t×1Ñ1¸DÈWÑ3UÓVÐVrÖ   c                 óÔ  — t        |j                  «      }t        |j                  «      }|j                  «       r•|j                  «       r…|j	                  d¬«      }|j
                  |_        |j	                  «        ||_        |j	                  «        t        j                  |d|j                  › d�«       t        d|j                  ¬«      S t        || j                  ||dœ«      S )NFrx  rz  r{  úbilling:proforma_m2_detailr_  rE  )r-   r‚   r.   r}  rˆ   rž   rp   r~  r   rB   ro   r   r`  r   r  ©r  r¦   r)  ru  rw   s        r·   rn  zProformaM2CreateView.postä  ó³   € Ü˜gŸl™lÓ+ˆÜ(¨¯©Ó6ˆØ�=‰=Œ?˜w×/Ñ/Ô1Ø—y‘y¨�yÓ.ˆHØ")§,¡,ˆHÔØ�M‰MŒOØ'ˆGÔØ�L‰LŒNÜ×Ñ˜W¨	°(·/±/Ð1BÐBWÐ&XÔYÜÐ8¸X¿[¹[ÔIÐIÜ�g˜t×1Ñ1¸DÈWÑ3UÓVÐVrÖ   Nr  r  rÖ   r·   rA  rA  Ü  ó   „ Ø3€MòWó
WrÖ   rA  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaM2UpdateViewrB  c                 óŠ   — t        t        |¬«      }t        |¬«      }t        |¬«      }t	        || j
                  |||dœ«      S ©Nr_  rƒ  ©r)  ru  rw   )r   r$   r-   r.   r   r  ©r  r¦   r`  rw   r)  ru  s         r·   rƒ   zProformaM2UpdateView.getõ  ó?   € Ü$¤_¸Ô<ˆÜ xÔ0ˆÜ(°(Ô;ˆÜ�g˜t×1Ñ1¸DÈWÐbjÑ3kÓlÐlrÖ   c                 ó$  — t        t        |¬«      }|j                  dk7  r-t        j                  |d«       t        d|j                  ¬«      S t        |j                  |¬«      }t        |j                  |¬«      }|j                  «       rk|j                  «       r[|j                  «        |j                  «        t        j                  |d|j                  › d�«       t        d|j                  ¬«      S t        || j                  |||dœ«      S )	Nr_  r‡  rˆ  rI  rƒ  rz  r‰  rQ  )r   r$   rn   r   r=   r   r`  r-   r‚   r.   r}  rˆ   rB   ro   r   r  rR  s         r·   rn  zProformaM2UpdateView.postû  óÎ   € Ü$¤_¸Ô<ˆØ�?‰?˜kÒ)Ü�N‰N˜7Ð$ZÔ[ÜÐ8¸X¿[¹[ÔIÐIÜ˜gŸl™l°XÔ>ˆÜ(¨¯©ÀÔIˆØ�=‰=Œ?˜w×/Ñ/Ô1Ø�I‰IŒKØ�L‰LŒNÜ×Ñ˜W¨	°(·/±/Ð1BÀ-Ð&PÔQÜÐ8¸X¿[¹[ÔIÐIÜ�g˜t×1Ñ1¸DÈWÐbjÑ3kÓlÐlrÖ   Nr  r  rÖ   r·   rN  rN  ò  ó   „ Ø3€MòmómrÖ   rN  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaM2DetailViewzbilling/proforma_m2_detail.htmlc                 óV   — t        t        |¬«      }t        || j                  d|i«      S ©Nr_  rw   )r   r$   r   r  ©r  r¦   r`  rw   s       r·   rƒ   zProformaM2DetailView.get  ó(   € Ü$¤_¸Ô<ˆÜ�g˜t×1Ñ1°JÀÐ3IÓJÐJrÖ   c                 óî  — t        t        |¬«      }d|j                  v rˆ|j                  j	                  d«      rm	 |j                  d   }t        j                  |||j                  ¬«      }t        j                  |d|j                  › d�«       t        d|j                  ¬«      S t        d	|j                  ¬«      S # t        $ r,}t        j                  |dt        |«      › �«       Y d }~ŒGd }~ww xY w)
Nr_  r—  r˜  rb  r™  õ     importÃ©e et validÃ©e via DGI !zbilling:facture_m2_detailr›  rI  )r   r$   r‚   r�  rƒ   r1   Ú*convert_proforma_m2_to_facture_from_uploadrž   r   rB   ro   r   r`  r¢   r=   r�   ©r  r¦   r`  rw   r   r¡  r¶   s          r·   rn  zProformaM2DetailView.post  óÒ   € Ü$¤_¸Ô<ˆØ §¡Ñ,°·±×1BÑ1BÀ>Ô1RðOØ '§¡¨nÑ =�Ü(×SÑSÐT\Ð^kÐry×r~Ñr~Ô�Ü× Ñ  ¨H°W·^±^Ð4DÐDdÐ*eÔfÜÐ ;ÀÇ
Á
ÔKÐKô Ð4¸¿¹ÔEÐEøô ò OÜ—‘˜wÐ*DÄSÈÃVÀHÐ(M×NÑNûðOúó   ¼A+B? Â?	C4Ã"C/Ã/C4Nr  r  rÖ   r·   rX  rX  
  ó   „ Ø5€MòKó
FrÖ   rX  c                 ó¤  — t        t        |¬«      }t        j                  j	                  d¬«      j                  «       }|r|j                  nd}t        |j                  j                  «       «      }t        d„ |D «       «      }t        d„ |D «       «      }t        d«      }||z  }	||z  }
||	z   }||
z   }	 t        t        |«      d¬	«      d
z   }|||||||	|
||t        t        |«      «      t        t        |«      «      z  |dœ}t!        d«      }|j#                  |«      }t%        d¬«      }d|j&                  › d�|d<   	 t)        j*                  ||t,        ¬«      }|j.                  rt%        d|z   dz   «      S 	 |S # t        $ r d}Y Œ»w xY w# t        $ r7}dd l}t%        dt        |«      › d|j3                  «       › d�«      cY d }~S d }~ww xY w)Nr_  Tr  rZ   c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­w©r   N©r#  rÜ  s     r·   rß  z'proforma_m2_pdf_view.<locals>.<genexpr>'  ó   è ø€ Ò=°�q×'Ñ'Ò,¨1Ó,Ñ=ùó   ‚c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  ©r$  rÜ  s     r·   rß  z'proforma_m2_pdf_view.<locals>.<genexpr>(  ó   è ø€ Ò?°1˜×)Ñ)Ò.¨QÓ.Ñ?ùri  r�  r­  r®  r  r<   )rw   rŠ   r¨   r  Útotal_marcheÚtotal_demandeÚ
tva_marcheÚtva_demandeÚtotal_ttc_marcheÚtotal_ttc_demander•  r´  zbilling/proforma_m2_pdf.htmlrµ  r¶  r¸  r¹  rº  r»  úErreur PDF: <pre>r¾  r   úErreur PDF: ú<pre>)r   r$   r#   r„   rý   r‰   r  rÁ  rŠ   r‹   rè  r   r6   r—   r¢   r�   r¹   r   r4   ro   rº   rÅ  rÕ   rÆ  rÇ  rÈ  )r¦   r`  rw   r¨   r  rŠ   rm  rn  ÚTVA_RATEro  rp  rq  rr  r´  r  rÍ  rÎ  rÌ  rÏ  r¶   rÇ  s                        r·   Úproforma_m2_pdf_viewrw    sà  € ä ¤°RÔ8€HÜ�o‰o×$Ñ$¨tÐ$Ó4×:Ñ:Ó<€GÙ"ˆ7�<Š<¨€Dä�(—/‘/×%Ñ%Ó'Ó(€Fô Ñ=°fÔ=Ó=€LÜÑ?¸Ô?Ó?€Mä�v‹€HØ Ñ(€JØ (Ñ*€KØ# jÑ0ÐØ%¨Ñ3ÐðÜ$¤SÐ):Ó%;À$ÔGÐJ`Ñ`Ðð
 ØØØØ$Ø&Ø Ø"Ø,Ø.ÜœsÐ#4Ó5Ó6¼ÄÀTÃÓ9KÑKØ,ñ€Gô Ð:Ó;€HØ�?‰?˜7Ó#€DÜÐ):Ô;€HØ(;¸H¿O¹OÐ;LÈEÐ&R€HÐ"Ñ#ðXÜ—n‘n T°ÌÔVˆØ�?Š?ÜÐ 3°dÑ :¸XÑ EÓFÐFð ð
 €Oøô; ò ØÒðûô4 ò XÛÜ˜l¬3¨q«6¨(°%¸	×8LÑ8LÓ8NÐ7OÈvÐVÓWÕWûðXús0   Â7E> Å8F Å>FÆFÆ	GÆ,G
ÇGÇ
Gc                   ó   — e Zd ZeZdZdZdgZy)ÚProformaM3ListViewzbilling/proforma_m3_list.htmlrŒ  rÛ   N)r  r  r  r&   r  r  r  r6  r  rÖ   r·   ry  ry  S  r?  rÖ   ry  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaM3CreateViewúbilling/proforma_m3_form.htmlc                 ó^   — t        «       }t        «       }t        || j                  ||dœ«      S rD  )r/   r0   r   r  rF  s       r·   rƒ   zProformaM3CreateView.get]  rG  rÖ   c                 óÔ  — t        |j                  «      }t        |j                  «      }|j                  «       r•|j                  «       r…|j	                  d¬«      }|j
                  |_        |j	                  «        ||_        |j	                  «        t        j                  |d|j                  › d�«       t        d|j                  ¬«      S t        || j                  ||dœ«      S )NFrx  rz  r{  úbilling:proforma_m3_detailr_  rE  )r/   r‚   r0   r}  rˆ   rž   rp   r~  r   rB   ro   r   r`  r   r  rJ  s        r·   rn  zProformaM3CreateView.postb  rK  rÖ   Nr  r  rÖ   r·   r{  r{  Z  rL  rÖ   r{  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaM3UpdateViewr|  c                 óŠ   — t        t        |¬«      }t        |¬«      }t        |¬«      }t	        || j
                  |||dœ«      S rP  )r   r&   r/   r0   r   r  rR  s         r·   rƒ   zProformaM3UpdateView.gets  rS  rÖ   c                 ó$  — t        t        |¬«      }|j                  dk7  r-t        j                  |d«       t        d|j                  ¬«      S t        |j                  |¬«      }t        |j                  |¬«      }|j                  «       rk|j                  «       r[|j                  «        |j                  «        t        j                  |d|j                  › d�«       t        d|j                  ¬«      S t        || j                  |||dœ«      S )	Nr_  r‡  rˆ  r  rƒ  rz  r‰  rQ  )r   r&   rn   r   r=   r   r`  r/   r‚   r0   r}  rˆ   rB   ro   r   r  rR  s         r·   rn  zProformaM3UpdateView.posty  rU  rÖ   Nr  r  rÖ   r·   r�  r�  p  rV  rÖ   r�  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProformaM3DetailViewzbilling/proforma_m3_detail.htmlc                 óV   — t        t        |¬«      }t        || j                  d|i«      S rZ  )r   r&   r   r  r[  s       r·   rƒ   zProformaM3DetailView.get‹  r\  rÖ   c                 óî  — t        t        |¬«      }d|j                  v rˆ|j                  j	                  d«      rm	 |j                  d   }t        j                  |||j                  ¬«      }t        j                  |d|j                  › d�«       t        d|j                  ¬«      S t        d	|j                  ¬«      S # t        $ r,}t        j                  |dt        |«      › �«       Y d }~ŒGd }~ww xY w)
Nr_  r—  r˜  rb  r™  r^  zbilling:facture_m3_detailr›  r  )r   r&   r‚   r�  rƒ   r1   Ú*convert_proforma_m3_to_facture_from_uploadrž   r   rB   ro   r   r`  r¢   r=   r�   r`  s          r·   rn  zProformaM3DetailView.post�  ra  rb  Nr  r  rÖ   r·   r…  r…  ˆ  rc  rÖ   r…  c                 óØ  — t        t        |¬«      }t        j                  j	                  d¬«      j                  «       }|r|j                  nd}t        |j                  j                  «       «      }t        d„ |D «       «      }t        d„ |D «       «      }t        d„ |D «       «      }t        d„ |D «       «      }	t        d	«      }
|	|
z  }|	|z   }	 t        t        |«      d
¬«      dz   }||||||||	||t        t        |«      «      t        t        |«      «      z  |dœ}t!        d«      }|j#                  |«      }t%        d¬«      }d|j&                  › d�|d<   	 t)        j*                  ||t,        ¬«      }|j.                  rt%        d|z   dz   «      S 	 |S # t        $ r d}Y Œ»w xY w# t        $ r7}dd l}t%        dt        |«      › d|j3                  «       › d�«      cY d }~S d }~ww xY w)Nr_  Tr  rZ   c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  rg  rÜ  s     r·   rß  z'proforma_m3_pdf_view.<locals>.<genexpr>¤  rh  ri  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  ©Úmontant_percurÜ  s     r·   rß  z'proforma_m3_pdf_view.<locals>.<genexpr>¥  ó   è ø€ Ò;¨q�a—o‘oÒ*¨Ó*Ñ;ùri  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  ©Úmontant_restantrÜ  s     r·   rß  z'proforma_m3_pdf_view.<locals>.<genexpr>¦  rl  ri  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  ©r%  rÜ  s     r·   rß  z'proforma_m3_pdf_view.<locals>.<genexpr>§  ó   è ø€ ÒC°q˜!×-Ñ-Ò2°Ó2ÑCùri  r�  r­  r®  r  r<   )rw   rŠ   r¨   r  rm  Útotal_percuÚtotal_restantÚtotal_solliciteÚtva_solliciteÚtotal_ttc_solliciter•  r´  zbilling/proforma_m3_pdf.htmlrµ  r¶  r¸  r¹  rº  r»  rs  r¾  r   rt  ru  )r   r&   r#   r„   rý   r‰   r  rÁ  rŠ   r‹   rè  r   r6   r—   r¢   r�   r¹   r   r4   ro   rº   rÅ  rÕ   rÆ  rÇ  rÈ  )r¦   r`  rw   r¨   r  rŠ   rm  r•  r–  r—  rv  r˜  r™  r´  r  rÍ  rÎ  rÌ  rÏ  r¶   rÇ  s                        r·   Úproforma_m3_pdf_viewrš  œ  sé  € ä ¤°RÔ8€HÜ�o‰o×$Ñ$¨tÐ$Ó4×:Ñ:Ó<€GÙ"ˆ7�<Š<¨€Dä�(—/‘/×%Ñ%Ó'Ó(€FäÑ=°fÔ=Ó=€LÜÑ;°FÔ;Ó;€KÜÑ?¸Ô?Ó?€MÜÑC¸FÔCÓC€Oä�v‹€HØ# hÑ.€MØ)¨MÑ9ÐðÜ$¤SÐ)<Ó%=ÀDÔIÐLbÑbÐð
 ØØØØ$Ø"Ø&Ø*Ø&Ø2ÜœsÐ#6Ó7Ó8¼7Ä3ÀtÃ9Ó;MÑMØ,ñ€Gô Ð:Ó;€HØ�?‰?˜7Ó#€DÜÐ):Ô;€HØ(;¸H¿O¹OÐ;LÈEÐ&R€HÐ"Ñ#ðXÜ—n‘n T°ÌÔVˆØ�?Š?ÜÐ 3°dÑ :¸XÑ EÓFÐFð ð
 €Oøô; ò ØÒðûô4 ò XÛÜ˜l¬3¨q«6¨(°%¸	×8LÑ8LÓ8NÐ7OÈvÐVÓWÕWûðXús0   ÃF Å8F) ÆF&Æ%F&Æ)	G)Æ2,G$ÇG)Ç$G)c                   ó   — e Zd ZeZdZdZdgZy)ÚFactureM2ListViewzbilling/facture_m2_list.htmlrÓ  rÛ   N)r  r  r  r   r  r  r  r6  r  rÖ   r·   rœ  rœ  Ð  ó   „ Ø€EØ2€MØ$ÐØ Ð!�HrÖ   rœ  c                   ó   — e Zd ZeZdZdZy)ÚFactureM2DetailViewzbilling/facture_m2_detail.htmlr¡  N)r  r  r  r   r  r  r  r  rÖ   r·   rŸ  rŸ  ×  ó   „ Ø€EØ4€MØ#ÑrÖ   rŸ  c                 ó’  — t        t        |¬«      }|j                  }t        j                  j                  d¬«      j                  «       }|r*|j                  rt        t        |j                  «      «      n
t        d«      }t        |j                  j                  «       «      }t        d„ |D «       «      }t        d„ |D «       «      }t        d«      }	t        t        |«      «      |	z  }
t        t        |«      «      |
z   }	 t        t        |«      d¬	«      d
z   }d }|j"                  r¿t%        j&                  dt$        j(                  j*                  dd¬«      }|j-                  |j"                  «       |j/                  d¬«       |j1                  dd¬«      }t3        «       }|j5                  |d¬«       t7        j8                  |j;                  «       «      j=                  «       }||||||||
|||z  ||dœ}t?        d«      }|jA                  |«      }tC        d¬«      }d|jD                  › d�|d<   	 tG        jH                  ||tJ        ¬«      }|jL                  rtC        d|z   dz   «      S 	 |S # t         $ r d}Y �Œew xY w# t         $ r7}d d l'}tC        d!t        |«      › d"|jQ                  «       › d�«      cY d }~S d }~ww xY w)#Nr_  Tr  r°  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  rg  rÜ  s     r·   rß  z&facture_m2_pdf_view.<locals>.<genexpr>å  rh  ri  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  rk  rÜ  s     r·   rß  z&facture_m2_pdf_view.<locals>.<genexpr>æ  rl  ri  r�  r­  r®  r  r<   r   r  r  r  r  r  r  r  r  r  )r¡  rw   rŠ   r¨   r  rm  rn  rp  rr  r•  r´  r"  zbilling/facture_m2_pdf.htmlrµ  r¶  r'  r¹  rº  r»  rs  r¾  r   rt  ru  ))r   r   rw   r#   r„   rý   r‰   r  r   r�   rÁ  rŠ   r‹   rè  r6   r—   r¢   rs   r)  r*  r+  r,  r-  r.  r/  r×   rˆ   r0  r1  r2  r3  r¹   r   r4   ro   rº   rÅ  rÕ   rÆ  rÇ  rÈ  )r¦   r`  r¡  rw   r¨   r  rŠ   rm  rn  rv  rp  rr  r´  r8  r9  r:  r;  r  rÍ  rÎ  rÌ  rÏ  r¶   rÇ  s                           r·   Úfacture_m2_pdf_viewr¤  Ý  s�  € ä¤	¨bÔ1€GØ×Ñ€HÜ�o‰o×$Ñ$¨tÐ$Ó4×:Ñ:Ó<€GÙ)0°W·\²\Œ7”3�w—|‘|Ó$Ô%ÄwÈvÃ€Dä�(—/‘/×%Ñ%Ó'Ó(€FÜÑ=°fÔ=Ó=€LÜÑ?¸Ô?Ó?€Mä�v‹€HÜœ#˜mÓ,Ó-°Ñ8€KÜ¤ MÓ 2Ó3°kÑAÐðÜ$¤SÐ):Ó%;À$ÔGÐJ`Ñ`Ðð €OØ‡~‚~Ü�]‰] 1´v×7GÑ7G×7WÑ7WÐbdÐmnÔoˆØ
�‰�G—N‘NÔ#Ø
�‰�DˆÔØ�m‰m w¸7ˆmÓCˆÜ“ˆØ�‰� ˆÔ&Ü ×*Ñ*¨6¯?©?Ó+<Ó=×DÑDÓFˆð ØØØØØ$Ø&Ø"Ø.Ø(¨4Ñ/Ø,Ø&ñ€Gô Ð9Ó:€HØ�?‰?˜7Ó#€DÜÐ):Ô;€HØ(:¸7¿>¹>Ð:JÈ%Ð&P€HÐ"Ñ#ðXÜ—n‘n T°ÌÔVˆØ�?Š?ÜÐ 3°dÑ :¸XÑ EÓFÐFð ð
 €OøôO ò ØÓðûôH ò XÛÜ˜l¬3¨q«6¨(°%¸	×8LÑ8LÓ8NÐ7OÈvÐVÓWÕWûðXús0   ÄI4 È88J É4JÊJÊ	KÊ,KÊ;KËKc                   ó   — e Zd ZeZdZdZdgZy)ÚFactureM3ListViewzbilling/facture_m3_list.htmlrÓ  rÛ   N)r  r  r  r   r  r  r  r6  r  rÖ   r·   r¦  r¦    r�  rÖ   r¦  c                   ó   — e Zd ZeZdZdZy)ÚFactureM3DetailViewzbilling/facture_m3_detail.htmlr¡  N)r  r  r  r   r  r  r  r  rÖ   r·   r¨  r¨     r   rÖ   r¨  c                 óÞ  — t        t        |¬«      }|j                  }t        j                  j                  d¬«      j                  «       }|r*|j                  rt        t        |j                  «      «      n
t        d«      }t        |j                  j                  «       «      }t        d„ |D «       «      }t        d„ |D «       «      }t        d„ |D «       «      }	t        d„ |D «       «      }
t        d	«      }t        t        |
«      «      |z  }t        t        |
«      «      |z   }	 t        t        |«      d
¬«      dz   }d }|j"                  r¿t%        j&                  dt$        j(                  j*                  dd¬«      }|j-                  |j"                  «       |j/                  d¬«       |j1                  dd¬«      }t3        «       }|j5                  |d¬«       t7        j8                  |j;                  «       «      j=                  «       }||||||||	|
||||z  ||dœ}t?        d«      }|jA                  |«      }tC        d¬«      }d|jD                  › d�|d<   	 tG        jH                  ||tJ        ¬«      }|jL                  rtC        d |z   d!z   «      S 	 |S # t         $ r d}Y �Œgw xY w# t         $ r7}d"d l'}tC        d#t        |«      › d$|jQ                  «       › d!�«      cY d }~S d }~ww xY w)%Nr_  Tr  r°  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  rg  rÜ  s     r·   rß  z&facture_m3_pdf_view.<locals>.<genexpr>.  rh  ri  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  rŒ  rÜ  s     r·   rß  z&facture_m3_pdf_view.<locals>.<genexpr>/  rŽ  ri  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  r�  rÜ  s     r·   rß  z&facture_m3_pdf_view.<locals>.<genexpr>0  rl  ri  c              3   ó<   K  — | ]  }|j                   xs d –— Œ y­wrf  r“  rÜ  s     r·   rß  z&facture_m3_pdf_view.<locals>.<genexpr>1  r”  ri  r�  r­  r®  r  r<   r   r  r  r  r  r  r  r  r  r  )r¡  rw   rŠ   r¨   r  rm  r•  r–  r—  r˜  r™  r•  r´  r"  zbilling/facture_m3_pdf.htmlrµ  r¶  r'  r¹  rº  r»  rs  r¾  r   rt  ru  ))r   r   rw   r#   r„   rý   r‰   r  r   r�   rÁ  rŠ   r‹   rè  r6   r—   r¢   rs   r)  r*  r+  r,  r-  r.  r/  r×   rˆ   r0  r1  r2  r3  r¹   r   r4   ro   rº   rÅ  rÕ   rÆ  rÇ  rÈ  )r¦   r`  r¡  rw   r¨   r  rŠ   rm  r•  r–  r—  rv  r˜  r™  r´  r8  r9  r:  r;  r  rÍ  rÎ  rÌ  rÏ  r¶   rÇ  s                             r·   Úfacture_m3_pdf_viewr®  &  s§  € ä¤	¨bÔ1€GØ×Ñ€HÜ�o‰o×$Ñ$¨tÐ$Ó4×:Ñ:Ó<€GÙ)0°W·\²\Œ7”3�w—|‘|Ó$Ô%ÄwÈvÃ€Dä�(—/‘/×%Ñ%Ó'Ó(€FÜÑ=°fÔ=Ó=€LÜÑ;°FÔ;Ó;€KÜÑ?¸Ô?Ó?€MÜÑC¸FÔCÓC€Oä�v‹€HÜœC Ó0Ó1°HÑ<€MÜ!¤# oÓ"6Ó7¸-ÑGÐðÜ$¤SÐ)<Ó%=ÀDÔIÐLbÑbÐð €OØ‡~‚~Ü�]‰] 1´v×7GÑ7G×7WÑ7WÐbdÐmnÔoˆØ
�‰�G—N‘NÔ#Ø
�‰�DˆÔØ�m‰m w¸7ˆmÓCˆÜ“ˆØ�‰� ˆÔ&Ü ×*Ñ*¨6¯?©?Ó+<Ó=×DÑDÓFˆð ØØØØØ$Ø"Ø&Ø*Ø&Ø2Ø*¨TÑ1Ø,Ø&ñ€Gô" Ð9Ó:€HØ�?‰?˜7Ó#€DÜÐ):Ô;€HØ(:¸7¿>¹>Ð:JÈ%Ð&P€HÐ"Ñ#ðXÜ—n‘n T°ÌÔVˆØ�?Š?ÜÐ 3°dÑ :¸XÑ EÓFÐFð ð
 €OøôS ò ØÓðûôL ò XÛÜ˜l¬3¨q«6¨(°%¸	×8LÑ8LÓ8NÐ7OÈvÐVÓWÕWûðXús0   Ä(J É8J, ÊJ)Ê(J)Ê,	K,Ê5,K'Ë!K,Ë'K,c                   ó   — e Zd Zd„ Zy)ÚReportsViewc                 ó|
  — |j                   j                  d«      }|j                   j                  d«      }|j                   j                  d«      }|s5t        j                  «       }|j	                  d¬«      j                  d«      }|s#t        j                  «       j                  d«      }dd l}t        j                  |j                  j                  |d«      «      }t        j                  |j                  j                  |d«      j	                  dd	d	¬
«      «      }t        j                  j                  ||g¬«      }	t        j                  j                  ||g¬«      }
t        j                  j                  ||gd¬«      }t        j                  j                  ||gd¬«      }|rH|	j                  |¬«      }	|
j                  |¬«      }
|j                  |¬«      }|j                  |¬«      }|
j                  «       }|j                  «       }|j                  «       }||z   |z   }|	j                  d¬«      j!                  t#        d«      ¬«      d   xs d}t$        j                  j                  |¬«      j!                  t#        d«      ¬«      d   xs t'        d«      }|t'        d«      z  }t(        j                  j                  |¬«      j!                  t#        d«      ¬«      d   xs t'        d«      }|t'        d«      z  }g }|j+                  d«      D ]e  }|j,                  j.                  j!                  t#        d«      ¬«      d   xs t'        d«      }|t'        d«      z  |_        |j3                  |«       Œg g }|j+                  d«      D ]e  }|j,                  j.                  j!                  t#        d«      ¬«      d   xs t'        d«      }|t'        d«      z  |_        |j3                  |«       Œg d}g }|
D ]¨  }|j4                  sŒt7        j8                  |j4                  «      }|d   d   }|j:                  j                  d¬«      j!                  t#        d«      ¬«      d   xs d}||z
  }||_        ||_        ||_        |d kD  sŒ“||z  }|j3                  |«       Œª i d|“d|“d!t@        j                  jC                  «       jE                  d"«      “d#|“d$|“d%|“d&|“d'|“d(|“d)|“d*|“d+|“d,|“d-|“d.|“d/|	j+                  dd0«      jE                  d1«      “} tG        |d2| «      S )3NÚ
start_dateÚend_daterc   r   )Údayú%Y-%m-%dr   é   é;   ©ÚhourÚminuteÚsecond)Údate_paiement__range)Údate_emission__rangeF)r½  r‡   )Ú	client_id)Údossier__client_id)Úproforma__client_idrY   )rß   r’   râ   rj   ©Úproforma__facture__inr$  ©ÚtrÄ  rZ  ú1.16r%  Úproforma__clientr”  g{®Gáz„?r  r“   Úselected_clientÚcount_facturesÚcount_factures_m2Úcount_factures_m3Úcount_factures_totalrý  Útotal_dettesÚtotal_m2_ttcÚtotal_m3_ttcÚfactures_impayeesÚfactures_m2Úfactures_m3ré  r¡  rø  zbilling/reports.html)$rv  rƒ   r   r›   rÇ   rœ   ÚdatetimeÚ
make_awareÚstrptimer   r„   rý   r   r   r   rï   Ú	aggregater   r%   r   r'   r…   rw   rŠ   Úmontant_total_estimer�   rm   r1   rM  ré  Úmontant_paye_estimeÚreste_a_payer_estimer   r‹   rù   r   )!r  r¦   r²  r³  r¾  r›   Ú	dt_moduleÚdt_startÚdt_endÚpaiements_qsÚfactures_qsÚfactures_m2_qsÚfactures_m3_qsrÈ  rÉ  rÊ  rË  Útotal_payments_usdÚtotal_m2_htrÍ  Útotal_m3_htrÎ  Úfactures_m2_listrï  ÚhtÚfactures_m3_listrÌ  Úimpayes_listrð  Úmontant_factureÚpaid_on_invoiceÚdette_facturer  s!                                    r·   rƒ   zReportsView.getf  sŒ  € Ø—[‘[—_‘_ \Ó2ˆ
Ø—;‘;—?‘? :Ó.ˆØ—K‘K—O‘O HÓ-ˆ	ñ Ü—,‘,“.ˆCØŸ™¨˜Ó+×4Ñ4°ZÓ@ˆJÙÜ—|‘|“~×.Ñ.¨zÓ:ˆHó 	%Ü×&Ñ& y×'9Ñ'9×'BÑ'BÀ:ÈzÓ'ZÓ[ˆÜ×$Ñ$ Y×%7Ñ%7×%@Ñ%@ÀÈ:Ó%V×%^Ñ%^ÐdfÐoqÐz|Ð%^Ó%}Ó~ˆô  ×'Ñ'×.Ñ.ÀZÐQYÐDZÐ.Ó[ˆÜ—o‘o×,Ñ,À8ÈVÐBTÐ,ÓUˆÜ"×*Ñ*×1Ñ1ÈÐRXÐGYÐfkÐ1ÓlˆÜ"×*Ñ*×1Ñ1ÈÐRXÐGYÐfkÐ1Ólˆñ Ø'×.Ñ.¸Ð.ÓCˆLØ%×,Ñ,À	Ð,ÓJˆKØ+×2Ñ2ÀyÐ2ÓQˆNØ+×2Ñ2ÀyÐ2ÓQˆNð %×*Ñ*Ó,ˆØ*×0Ñ0Ó2ÐØ*×0Ñ0Ó2ÐØ-Ð0AÑAÐDUÑUÐð *×0Ñ0¸Ð0Ó>×HÑHÌsÐS\Ë~ÐHÓ^Ð_fÑgÒlÐklÐô +×2Ñ2×9Ñ9Ø"0ð :ó 
ç
‰)”cÐ+Ó,ˆ)Ó
-¨cñ3ò Cä6=¸c³lð 	ð #¤W¨V£_Ñ4ˆô +×2Ñ2×9Ñ9Ø"0ð :ó 
ç
‰)”cÐ-Ó.ˆ)Ó
/°ñ5ò Eä8?À»ð 	ð #¤W¨V£_Ñ4ˆð ÐØ!×0Ñ0Ð1CÓDò 	)ˆCØ—‘×$Ñ$×.Ñ.´Ð5FÓ1GÐ.ÓHÈÑMÒ]ÔQXÐY\ÓQ]ˆBØ')¬G°F«OÑ';ˆCÔ$Ø×#Ñ# CÕ(ð	)ð ÐØ!×0Ñ0Ð1CÓDò 	)ˆCØ—‘×$Ñ$×.Ñ.´Ð5HÓ1IÐ.ÓJÈ3ÑOÒ_ÔSZÐ[^ÓS_ˆBØ')¬G°F«OÑ';ˆCÔ$Ø×#Ñ# CÕ(ð	)ð ˆØˆàò 	)ˆCØ—;’;ØÜ!×:Ñ:¸3¿;¹;ÓGˆDØ" 5™k¨+Ñ6ˆOØ!Ÿm™m×2Ñ2¸%Ð2Ó@×JÑJÌSÐQZË^ÐJÓ\Ð]`ÑaÒfÐefˆOØ+¨oÑ=ˆMà'6ˆCÔ$Ø&5ˆCÔ#Ø'4ˆCÔ$à˜tÓ#Ø Ñ-�Ø×#Ñ# CÕ(ð	)ð 
Ø˜*ð
à˜ð
ð ”v—~‘~×)Ñ)Ó+×4Ñ4°UÓ;ð
ð ˜yð	
ð ˜nð
ð  Ð!2ð
ð  Ð!2ð
ð #Ð$8ð
ð Ð1ð
ð ˜Lð
ð ˜Lð
ð ˜Lð
ð    ð!
ð" Ð+ð#
ð$ Ð+ð%
ð& ˜×4Ñ4°X¸yÓI×RÑRÐScÓdð'
ˆô* �gÐ5°wÓ?Ð?rÖ   Nr  r  rÖ   r·   r°  r°  e  s	   „ ój@rÖ   r°  )r   ÚAvg)Ú	TruncDatec                 óú   — t        j                  t        j                  j	                  | d«      «      }t        j                  t        j                  j	                  |d«      j                  ddd¬«      «      }||fS )z¦
    Retourne un tuple (start_dt, end_dt) timezone-aware pour filtrer sur DateTimeField.
    Contourne le bug MySQL CONVERT_TZ avec USE_TZ=True et __date__range.
    rµ  r¶  r·  r¸  )r   rÓ  rÙ  rÒ  rÔ  rÇ   )Ústart_date_strÚend_date_strÚstartÚends       r·   Úmake_date_rangerñ  Ú  si   € ô
 ×Ñ¤	× 2Ñ 2× ;Ñ ;¸NÈJÓ WÓX€EÜ
×
Ñ
œi×0Ñ0×9Ñ9¸,È
ÓS×[Ñ[ÐacÐlnÐwyÐ[ÓzÓ
{€CØ�#ˆ:ÐrÖ   c                 ó¶  — t        | «      \  }}g }d}d}|�r	|�rt        ||«      \  }}t        j                  j	                  ||gdd¬«      }t        j                  j	                  ||gd¬«      }	t
        j                  j	                  |¬«      j                  d«      j                  t        d«      t        d	«      ¬
«      j                  d«      }
|
D �cg c]  }d|d   d|d   d|d   dœ‘Œ }}t        j                  j	                  |d¬«      j                  ddd«      j                  t        d«      t        d	«      ¬
«      j                  d«      }t        j                  j	                  |	d¬«      j                  d«      j                  t        d«      ¬«      }|D �ci c]  }|d   |d   “Œ }}|D ]D  }|j                  |d   xs d|d   |d   xs d|d   |j                  |d   d«      |d   dœ«       ŒF t        d„ |D «       «      }t        d„ |D «       «      }t        | d|||||t         j                  j#                  «       dœ«      S c c}w c c}w )Nr   F©r½  r|   r‡   T©r½  r|   rÁ  r�   rÂ  r’   ©Ú
qte_vendueÚtotal_venterR   Ú16rö  r÷  )rG   r�   Útaxrö  Úqte_retourneer÷  ©Údossier__factures__inÚservice__isnullÚservice__codeÚservice__designationÚservice__taxgroup__taxrA   ©Ú
qte_retourr  rZ  c              3   ó.   K  — | ]  }|d    xs d–— Œ y­w)r÷  r   Nr  rÜ  s     r·   rß  z)a_rapport_periode_view.<locals>.<genexpr>(  s   è ø€ Ò=°�q˜Ñ'Ò,¨1Ó,Ñ=ùs   ‚c              3   ó@   K  — | ]  }t        |d    xs d«      –— Œ y­w)rö  r   N)r—   rÜ  s     r·   rß  z)a_rapport_periode_view.<locals>.<genexpr>)  s   è ø€ ÒI¸Qœs 1 \¡?Ò#7°a×8ÑIùs   ‚z&billing/rapport/a_rapport_periode.html)rŠ   r’  Útotal_qte_vendueÚ
date_debutÚdate_finr¨   )Úget_rapport_contextrñ  r   r„   rý   r   rÿ   rþ   r   rù   r   r   r�   rƒ   rè  r   r#   r‰   )r¦   r  r  rŠ   r’  r  rÚ  rÛ  Úfactures_validÚfactures_annuleesÚ
raw_lignesrÞ  Úraw_dossierÚlignes_retourÚmap_retourss                  r·   Úa_rapport_periode_viewr  ä  s´  € ä.¨wÓ7Ñ€J�Ø€FØ€HØÐâ’hÜ*¨:°xÓ@Ñˆ�&ä Ÿ™×/Ñ/Ø"*¨FÐ!3ØØð 0ó 
ˆô $ŸO™O×2Ñ2Ø"*¨FÐ!3Øð 3ó 
Ðô #×*Ñ*×1Ñ1Ø"0ð 2ó 
ç
‰&�Ó
§¡Ü˜:“Ü˜I›ð !)ó !
÷ ‰(�=Ó
!ð 	ð   ö

ð ð Ø  Ñ/ØØ ™oØ!"Ø  Ñ/óð

ˆð 

ô #×*Ñ*×1Ñ1Ø"0Ø!ð 2ó 
÷ ‰&ØÐ3Ð5Mó
ç
‰(Ü˜T“{Ü˜I›ð ó 
÷ ‰(Ð)Ó
*ð 	ô %×,Ñ,×3Ñ3Ø"3Ø!ð 4ó 
÷ ‰&�Ó
!§(¡(´e¸D³k (Ó"Bð 	ð ERÖR¸q�q˜Ñ)¨1¨\©?Ñ:ÐRˆÐRàò 	ˆAØ�M‰MØ˜/Ñ*Ò1¨cØ Ð!7Ñ8ØÐ1Ñ2Ò9°cØ ™oØ!,§¡°°?Ñ1CÀQÓ!GØ  Ñ/ñõ ð	ô Ñ=°fÔ=Ó=ˆÜÑIÀ&ÔIÓIÐä�'ÐCØØØ,Ø ØÜ—?‘?×(Ñ(Ó*ñFó ð ùòU

ùò6 Ss   ÃIÆ"Ic                 óB  — | j                   j                  d«      }| j                   j                  d«      }|s1t        j                  «       j	                  «       j                  d«      }|s1t        j                  «       j	                  «       j                  d«      }||fS )u!   Helper pour rÃ©cupÃ©rer les datesr  r  rµ  )rv  rƒ   r   r›   Údaterœ   )r¦   r  r  s      r·   r  r  5  su   € à—‘—‘ Ó.€JØ�{‰{�‰˜zÓ*€HáÜ—\‘\“^×(Ñ(Ó*×3Ñ3°JÓ?ˆ
ÙÜ—<‘<“>×&Ñ&Ó(×1Ñ1°*Ó=ˆà�xÐÐrÖ   c           	      óL  — | r|sy t         j                  j                  «       }t        | |«      \  }}t        j                  j                  ||gdd¬«      }t        j                  j                  |¬«      j                  t        d«      ¬«      d   xs d}t        j                  j                  |d¬«      j                  d	d
«      j                  t        d«      ¬«      }g }d}	d}
|D ]`  }|d	   xs d}t        |d
   xs d«      }t        |d   xs d«      }|d|dz  z   z  }||z
  }|j                  |||||dœ«       |	|z  }	|
|z  }
Œb t        j                  j                  |¬«      j                  d«      j                  t        d«      ¬«      }t        j                  j                  ||gd¬«      }t        j                  j                  |¬«      j                  t        d«      ¬«      d   xs d}t        j                  j                  ||gdd¬«      }t        j                  j                  |¬«      j                  t        d«      ¬«      d   xs d}t!        t#        |«      «      t!        d«      z  }t        j                  j                  ||gd¬«      j%                  «       }t&        j                  j                  ||gdd¬«      }t(        j                  j                  |¬«      j                  t        d«      ¬«      d   xs d}t!        t#        |«      «      t!        d«      z  }t&        j                  j                  ||gd¬«      j%                  «       }i d|“d| “d|“d|“d|	“d |
“d!|“d"|“d#|j%                  «       “d$|“d%|j%                  «       “d&|j%                  «       “d'|“d(|“d)|“d*|j%                  «       “d+|“|||j%                  «       |j%                  «       z   |j%                  «       z   t        |«      t        |«      z   t        |«      z   d,œ¥S )-NFró  )rü  r’   râ   rj   r   rû  Úservice__taxgroup__coder   )Útotal_ttc_grouprE   r  r   éd   )rG   Úraterä  rù  rS   )Úfacture__inrß   Trô  rÃ  rÄ  rÁ  r$  rÅ  r%  r¨   r  r  r”  r’  Ú	total_taxÚtax_detailsÚpaymentsÚcount_validÚtotal_cancelledÚcount_cancelledÚcount_valid_m2rá  rÍ  Úcount_cancelled_m2Úcount_valid_m3râ  )rÎ  Úcount_cancelled_m3Úcount_valid_totalÚtotal_ttc_global)r#   r„   r‰   rñ  r   rý   r   rÕ  r   rÿ   rþ   r‘   r�   r   r   r%   r   r�   rï   r   r'   )r  r  r¨   rÚ  rÛ  rÓ  Útotal_salesÚlinesr  Útotal_ht_globalÚtotal_tax_globalrÞ  rG   r  rS   rä  rù  r  Úcancelled_facturesr  rÐ  rá  rÍ  Úcancelled_m2rÑ  râ  rÎ  Úcancelled_m3s                               r·   Úget_xz_data_logicr+  B  s÷  € Ù™8Øä�o‰o×#Ñ#Ó%€GÜ& z°8Ó<Ñ€Hˆfô �‰×%Ñ%Ø&¨Ð/ØØð &ó €Hô ×&Ñ&×-Ñ-Ø&ð .ó ç�i”c˜)“n€iÓ% gñ/ò 4à23ð ô
 × Ñ ×'Ñ'Ø&Øð (ó ÷ �fØ!Ø ó÷ �hÜ˜I›ð ó ð 
ð €KØ€OØÐàò  ˆØÐ*Ñ+Ò2¨sˆÜ�QÐ/Ñ0Ò5°AÓ6ˆÜ�AÐ'Ñ(Ò-¨AÓ.ˆð �A˜˜S™‘LÑ!ˆØ�B‰hˆà×ÑØØØØØñ
ô 	ð 	˜2ÑˆØ˜CÑÑð% ô* ×Ñ×&Ñ&Øð 'ó ç�fˆXÓ—x‘xÜ�)‹nð  ó ð ô !Ÿ™×/Ñ/Ø&¨Ð/Øð 0ó Ðô #×*Ñ*×1Ñ1Ø0ð 2ó ç�i”#�i“.€iÓ! #ñ'ò ,à*+ð ô
 ×#Ñ#×*Ñ*Ø&¨Ð/Ø eð +ó €Kô '×.Ñ.×5Ñ5Ø)ð 6ó ç�i”#Ð'Ó(€iÓ)¨#ñ/ò 4à23ð ô œ3˜{Ó+Ó,¬w°v«Ñ>€LÜ×$Ñ$×+Ñ+Ø&¨Ð/¸Tð ,ó ç�eƒgð ô
 ×#Ñ#×*Ñ*Ø&¨Ð/Ø eð +ó €Kô '×.Ñ.×5Ñ5Ø)ð 6ó ç�i”#Ð)Ó*€iÓ+¨Cñ1ò 6à45ð ô œ3˜{Ó+Ó,¬w°v«Ñ>€LÜ×$Ñ$×+Ñ+Ø&¨Ð/¸Tð ,ó ç�eƒgð ðØ�7ðà�jðð 	�Hðð
 	�[ðð 	�Oðð 	Ð%ðð 	�{ðð 	�Hðð 	�x—~‘~Ó'ðð 	˜?ðð 	Ð-×3Ñ3Ó5ðð 	˜+×+Ñ+Ó-ðð 	�{ðð  	˜ð!ð" 	˜lð#ð& 	˜+×+Ñ+Ó-ð'ð( 	�{ð)ð* %Ø*à%Ÿ^™^Ó-°×0AÑ0AÓ0CÑCÀk×FWÑFWÓFYÑYÜ! +Ó.´°|Ó1DÑDÄuÈ\ÓGZÑZò3ð rÖ   c                 óX   — t        | «      \  }}t        ||«      }t        | d|||dœ«      S )Nzbilling/rapport/x_rapport.html©Údatar  r  ©r  r+  r   ©r¦   r  r  r.  s       r·   Úx_rapport_viewr1  À  ó=   € ä.¨wÓ7Ñ€J�Ü˜Z¨Ó2€DÜ�'Ð;ØØ Øñ>ó ð rÖ   c                 óX   — t        | «      \  }}t        ||«      }t        | d|||dœ«      S )Nzbilling/rapport/z_rapport.htmlr-  r/  r0  s       r·   Úz_rapport_viewr4  Ê  r2  rÖ   c                 óÈ   — t        d¬«      }d|› d�|d<   t        | «      }|j                  |«      }t        j                  ||¬«      }|j
                  rt        dd¬	«      S |S )
Nrµ  r¶  z
filename="ú"rº  )r¼  z
Erreur PDFr�   r>   )r4   r¹   r   rº   rÅ  rÆ  )r  r  ÚfilenamerÌ  rÍ  rÎ  rÏ  s          r·   Úgenerate_rapport_pdfr8  Ö  sb   € ÜÐ):Ô;€HØ(2°8°*¸AÐ&>€HÐ"Ñ#Ü˜MÓ*€HØ�?‰?˜7Ó#€DÜ—.‘. ¨HÔ5€KØ‡‚Ü˜L°Ô5Ð5Ø€OrÖ   c                 ó"  — t        | «      \  }}t        ||«      \  }}t        j                  j	                  ||gdd¬«      }t        j                  j	                  ||gd¬«      }t
        j                  j	                  |d¬«      j                  dddd	«      j                  t        d
«      t        d	«      ¬«      j                  d«      }t
        j                  j	                  |d¬«      j                  d«      j                  t        d
«      ¬«      }|D �	ci c]  }	|	d   |	d   “Œ }
}	|D ]  }	|
j                  |	d   d«      |	d<   Œ t        d„ |D «       «      }|||t        j                  j                  «       d|dœ}t        d|d«      S c c}	w )NFró  Trô  rû  rþ  rÿ  r   r’   rA   rõ  r  r  r   rú  c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r÷  Nr  rÜ  s     r·   rß  z(a_rapport_periode_pdf.<locals>.<genexpr>ò  s   è ø€ Ò4¨�1�]Õ#Ñ4ùs   ‚zA-RAPPORT DGI)rŠ   r  r  r¨   Útitrer’  z&billing/rapport/pdf/a_rapport_pdf.htmlzA_RAPPORT.pdf)r  rñ  r   r„   rý   r   rÿ   rþ   r   r   rù   rƒ   rè  r#   r‰   r8  )r¦   r  r  rÚ  rÛ  r	  r
  rŠ   r  rÞ  r  r’  r  s                r·   Úa_rapport_periode_pdfr<  à  s‹  € ä.¨wÓ7Ñ€J�Ü& z°8Ó<Ñ€Hˆfä—_‘_×+Ñ+À(ÈFÐASÐafÐsxÐ+Óy€NÜŸ™×.Ñ.ÀXÈvÐDVÐdhÐ.ÓiÐä×!Ñ!×(Ñ(¸~Ð_dÐ(Óe×lÑlØÐ3Ð5MÈyó
ç
‰(œe D›k´s¸9³~ˆ(Ó
FÇxÁxÐPfÓGgð ô !×(Ñ(×/Ñ/ÐFWÐinÐ/ó 
ß
‰&�Ó
!§(¡(´e¸D³k (Ó"Bð à@MÖN¸1�1�_Ñ% q¨¡Ñ6ÐN€KÐNØÒPˆ¨+¯/©/¸!¸OÑ:LÈaÓ*P�Q�Ò'ÐPô Ñ4¨VÔ4Ó4€Hð ¨
ÀÜ—?‘?×(Ñ(Ó*°_Øñ€Gô
  Ð HÈ'ÐSbÓcÐcùò Os   ÄFc                 óZ   — t        | «      \  }}t        ||«      }d|d<   t        d|d«      S )Nz	X-RAPPORTr;  ú'billing/rapport/pdf/xz_rapport_pdf.htmlzX_RAPPORT.pdf©r  r+  r8  r0  s       r·   Úx_rapport_pdfr@  û  ó7   € ä.¨wÓ7Ñ€J�Ü˜Z¨Ó2€DØ€Dˆ�MÜÐ IÈ4ÐQ`ÓaÐarÖ   c                 óZ   — t        | «      \  }}t        ||«      }d|d<   t        d|d«      S )Nz	Z-RAPPORTr;  r>  zZ_RAPPORT.pdfr?  r0  s       r·   Úz_rapport_pdfrC    rA  rÖ   )‹Údjango.shortcutsr   r   r   Údjango.contribr   Údjango.contrib.auth.decoratorsr   Údjango.contrib.auth.mixinsr   Údjango.urlsr	   Údjango.views.genericr
   r   r   r   r   r   rû   r   r   r   Údjango.utilsr   rþ  r   r2   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Úformsr(   r)   r*   r+   r,   r-   r.   r/   r0   rJ  r1   Ú	django.dbr3   Údjango.httpr4   r5   r6   Údgi.edef_clientr7   r8   r˜   ÚjsonÚloggingÚ	getLoggerr  r¥   Úatomicr¸   Údjango.template.loaderr¹   Ú	xhtml2pdfrº   rÄ   Údjango.confr»   Údjango.contrib.staticfilesr¼   rÕ   r)  r0  Úior×   rÙ   r  r  r!  r0  r2  r4  r8  r?  rB  rp  r�  r‹  rŽ  rÐ  rÒ  rõ  r<  r>  rA  rN  rX  rw  ry  r{  r�  r…  rš  rœ  rŸ  r¤  r¦  r¨  r®  r°  r   rê  rú   rë  rÒ  rÙ  rñ  r  r  r+  r1  r4  r8  r<  r@  rC  r  rÖ   r·   ú<module>rX     sÏ  ðß @Ñ @Ý #Ý 9Ý 9Ý $ß _× _ß &Ñ &Ý !Ý ÷ p÷  p÷  p÷  põ  p÷ m÷  mõ  mÝ $ß )ß 2Ý ß 7Û Û Û à	ˆ×	Ñ	˜8Ó	$€àØ×Ñño;ó ó ðo;õd 0Ý Ý $Û 	Ý  Ý .ò2ój Û Ý ô9BÐ&¨ô 9Bðv ñ	Kó ð	Kô$Ð'¨ô $ô
(Ð)¨:ô (ô6Ð)¨:ô 6ô6Ð)¨:ô 6ôÐ(¨(ô ô(Ð*¨Jô (ô(Ð*¨Jô (ôeAÐ*¨Jô eAôPkÐ+¨Tô kô2AÐ+¨Tô Aô4"Ð)¨8ô "ô0CÐ+¨Zô 0Cðd ñcó ðcôJDÐ(¨(ô DôL2@Ð*¨Jô 2@ðh ñTó ðTôp"Ð+¨Xô "ôWÐ-¨tô Wô,mÐ-¨tô mô0FÐ-¨tô Fð( ñ0ó ð0ôh"Ð+¨Xô "ôWÐ-¨tô Wô,mÐ-¨tô mô0FÐ-¨tô Fð( ñ/ó ð/ôf"Ð*¨Hô "ô$Ð,¨jô $ð ñ7ó ð7ôv"Ð*¨Hô "ô$Ð,¨jô $ð ñ;ó ð;ô|k@Ð$ dô k@÷b (Ý 0Û òð ñMó ðMò`
 ò|ð| ñó ðð ñó ðòð ñdó ðdð4 ñbó ðbð ñbó ñbrÖ   