o
    G<.iŠK  ã                   @   s¢  d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ d dlZd d	lmZmZmZ d d
lmZmZ dedededefdd„ZedddƒZedddƒZedddƒZ edddƒZ!edddƒZ"edddƒZ#edd d!ƒZ$edd"d#ƒZ%ed$d%d&ƒZ&ed$d'd(ƒZ'ed$d)d*ƒZ(ed$d+d,ƒZ)d-d.„ Z*	d:d/eeef d0ed1ed2eeeef  def
d3d4„Z+d5eeef d6ed7efd8d9„Z,dS );é    )ÚSimpleDocTemplateÚ	ParagraphÚSpacerÚTableÚ
TableStyleÚ	PageBreak)ÚA4)Úcolors)ÚHexColor)ÚgetSampleStyleSheetÚParagraphStyle)Úmm)ÚPathN)ÚDictÚAnyÚOptional)Ú	get_colorÚapp_logo_pathÚsectionÚkeyÚdefaultÚreturnc                 C   s   t t| ||ƒp|ƒS ©N)r
   r   )r   r   r   © r   úL/var/www/html/flask_server/apps/wp_invoices/services/invoice_revision_pdf.pyÚ_hx   s   r   ÚbrandÚblue600z#0F4F9AÚblue900z#0A2A55ÚappsÚwp_invoicesz#33A9FFÚabn_lookup_appz#9747FFÚneutralÚ
neutral100z#F6F6F9Ú
neutral300z#E2E2E6Ú
neutral500z#A7A7ADÚ
neutral900z#1B1B1FÚstatesÚsuccessz#15B66DÚwarningz#F6A700Úerrorz#D0342CÚinfoz#2196F3c           	   	   C   s  |   ¡  |j\}}dt }|  t¡ | jd|| ||ddd z4tdƒ}| ¡ rM|d }|d }| jt	|ƒ|j
|| d ||d d	d
d |j
| d }n|j
d }W n tya   |j
d }Y nw |  tj¡ |  dd¡ |  |||d  d d¡ |  ¡  dS )u”   
    Header corporativo minimalista:
    - Barra azul en la parte superior
    - Logo de wp_invoices (si existe)
    - TÃ­tulo corto de reporte
    é   r   é   )ÚfillÚstroker    é   gffffffö?é   TÚauto)ÚwidthÚheightÚpreserveAspectRatioÚmaské   zHelvetica-Boldé
   é   u   WP Invoices â€“ Digital ExtractN)Ú	saveStateÚpagesizer   ÚsetFillColorÚ
BRAND_BLUEÚrectr   Úis_fileÚ	drawImageÚstrÚ
leftMarginÚ	Exceptionr	   ÚwhiteÚsetFontÚ
drawStringÚrestoreState)	ÚcanvasÚdocÚ
page_widthÚpage_heightÚheader_hÚ	logo_pathÚlogo_hÚlogo_wÚtext_xr   r   r   Ú_draw_brand_header*   s:   


ù	
€ÿrQ   Ú	extractedÚ
output_dirÚoriginal_filenameÚchecksc           N         sÜ
  t |ƒ}|jddd |pd}tj |¡d }||› d }tƒ }td|d dd	d
td}	td|d ddd
dtd}
|d }t|_td|ddtd}td|ddd‰t	t
|ƒtdt dt dt dt d}t\}}||j |j }|d }g }d¦d t
f‡ fd!d"„}|d#ƒ}|d$ƒ}|d%ƒ}|p‘d&› d'|p–d(› d)|p›d(› }| t||	ƒ¡ d*t ¡ › d+}| t||ƒ¡ | td,d
ƒ¡ d-|pÂd(gd.|pÇd(gd/|d0ƒpÎd(gg}t|d1t |d1t  gd2}| td3d4d5tfd6d4d5tfd7d8d9d:d4d;d<tfgƒ¡ ˆ  d=i ¡ d>i ¡pi }| d?i ¡ d@¡p| d?i ¡ dA¡pdB}| dCi ¡ d@¡p1| dCi ¡ dA¡p1dB}| dDi ¡ d@¡pD| dDi ¡ dA¡}dE|gdF|gdGt|pQdB|ƒgdH| dIi ¡ d@i ¡gdJ| dKi ¡ d@i ¡gg}t|dt |dt  gd2} |  td3d4d5tfd7d8d9d:d4d;d<tfgƒ¡ ˆ  d=i ¡ dLi ¡p›i }!t|! dD¡tƒr°|! dD¡p¬i  d@¡ndM}"dE|! d?¡pºi  d@¡gdF|! dC¡pÆi  d@¡gdGt|"|ƒgdHt|! dI¡tƒrå|! dI¡pái  d@¡ndgdJt|! dK¡tƒrü|! dK¡pøi  d@¡ndgg}#t|#dt |dt  gd2}$|$ td3d4d5tfd7d8d9d:d4d;d<tfgƒ¡ ˆ  dNi ¡p+i }%dO|% dP¡p4i  d@¡gdQ|% dR¡p@i  d@¡gdS|% dT¡pLi  d@¡gdU|% dV¡pXi  d@¡gdW|% dX¡pdi  d@¡gg}&t|&d1t |d1t  gd2}'|' td3d4d5tfd7d8d9d:d4d;d<tfgƒ¡ td*t ¡ › dY|ƒ}(ˆ  dZi ¡p i })|) d[¡p¨dB}*d\|)v rµt
|) d\¡ƒndB}+|) d]¡p¾dB},d^|*gd_|+gd`t|,|ƒgg}-t|-d1t |d1t  gd2}.|. td3d4d5tfd7d8dad9d:d4d;d<tfgƒ¡ tdb|
ƒg|gtd,dƒgtdc|
ƒg| gtd,dƒgtdd|
ƒg|$gg}/t|/|gd2}0|0 tg de¢ƒ¡ tdf|
ƒg|'gtd,dƒg|(gtd,dƒgtdg|
ƒg|.gg}1t|1|gd2}2|2 tg dh¢ƒ¡ t|0|2gg||gdidj}3|3 tg dk¢ƒ¡ | |3¡ | tƒ ¡ | tdl|
ƒ¡ ˆ  dmg ¡p~g }4g dn¢}5‡fdodp„|5D ƒg}6|4D ][}7dqdr„ }8|8|7dsƒ}9|8|7dtƒ}:|8|7duƒ};|8|7dvƒ}<|8|7dwƒ}=|8|7dxƒ}>|8|7dyƒ}?tt
|9ƒˆƒtt
|:ƒˆƒtt
|;ƒˆƒtt
|<ƒˆƒtt
|=ƒˆƒtt
|>ƒˆƒtt
|?ƒˆƒg}@|6 |@¡ q|6r)t|6d	t dzt d{t d	t d	t dt dt gd,d|}A|A td:d4d;d<tfd3d4d}tfd6d4d}tjfdagƒ¡ | |A¡ n| td~|ƒ¡ | tƒ ¡ ˆ  di ¡p?i ‰d€t
f‡fdd‚„}Bdƒt
|Bd„ƒƒgd…t
|Bd†ƒƒgd‡t
|Bdˆƒƒgd‰t
|BdŠƒƒgd‹t
|BdŒƒƒgdt
|BdŽƒƒgdt
|Bdƒƒgd‘ˆ d’dB¡gg}Ct|Cd“t d”t gd2}D|D td3d4d•tfd7d8d:d4d;d<tfgƒ¡ | td–|
ƒ¡ | |D¡ | td,d{ƒ¡ |rÌ| d—¡}E|ErÌ|  t!|E|
|ƒ¡ ˆ d˜i ¡pÔi }F| td™|
ƒ¡ g }G|Fr|F "¡ D ]\}H}I|G |H|Iròdšnd›g¡ qæt|Gd”t d“t gd2}J|J td3d4d5tfd7d8d9d:d4d;d<tfgƒ¡ | |J¡ n| tdœ|ƒ¡ | td,d{ƒ¡ ˆ  ddž¡r8dšnd›}Kˆ  dŸdž¡rCdšnd›}Lˆ  d dž¡rNdšnd›}M| td¡|K› d¢|L› d£|M› d¤|ƒ¡ |j#|t$t$d¥ t
|ƒS )§u®  
    Layout universal v1 con branding:

    PÃ¡gina 1:
      - Header corporativo
      - TÃ­tulo
      - DOS COLUMNAS:
        Izquierda: Header Information, Supplier Details, Buyer Details
        Derecha: Payment Info (as printed), Internal Payment Information

    PÃ¡gina 2+:
      - Line Items (tabla con repeatRows)

    PÃ¡gina final:
      - Financial Summary
      - Validation Checks
      - ABN Lookup (si aplica)
    T)ÚparentsÚexist_okÚinvoicer   z_universal.pdfÚH1ÚHeading1é   é   r7   )ÚparentÚfontSizeÚleadingÚ
spaceAfterÚ	textColorÚH2ÚHeading2é   é   r0   )r]   r^   r_   ÚspaceBeforer`   ra   ÚNormalÚsmallé   é	   )r]   r^   r_   ra   Ú
small_itemg      @)r]   r^   r_   é   é   é   )r;   rB   ÚrightMarginÚ	topMarginÚbottomMarging       @NÚpathc                    sT   |   d¡}ˆ }|D ]}t|tƒs|  S | |¡}|d u r!|  S q	|d ur(|S |S )Nú.)ÚsplitÚ
isinstanceÚdictÚget)rr   r   ÚpartsÚnodeÚp)rR   r   r   Úget_node¢   s   


ÿz-create_invoice_revision_pdf.<locals>.get_nodezheader.invoice.number.verbatimz'header.invoice.date.issue_date.verbatimzheader.supplier.name.verbatimÚSupplieru    â€“ Invoice Extract â€“ úN/Au    â€“ ú<font size="7" color="z">This document is an automatically generated digital extract from an original supplier invoice. It is NOT a legally issued tax invoice.</font>r-   zInvoice Number:zIssue Date:zInvoice Type:zinvoice_type.verbatimé   ©Ú	colWidthsÚ
BACKGROUND©r   r   ©r   éÿÿÿÿÚ	TEXTCOLOR©ÚFONTNAMErƒ   ©r…   r…   Ú	Helvetica©ÚFONTSIZErƒ   r‰   rj   ©ÚBOTTOMPADDINGrƒ   r‰   r9   ÚGRIDr‰   ç      Ð?ÚheaderÚsupplierÚnameÚverbatimÚcomputedÚ ÚabnÚaddressÚNameÚABNÚAddressÚPhoneÚphoneÚEmailÚemailÚbuyerÚNoneÚpayment_printedzPrinted Status:ÚstatuszAmount Paid:Úamount_paidzBalance Due:Úbalance_duezMethod:Úmethodz
Reference:Ú	referencez›">
        Payment info above is shown exactly as printed on the supplier document.
        Actual reconciliation is done in Xero / AroFlo.
        </font>Úpayment_interpretationÚsuggested_internal_statusÚis_pos_fully_paidÚnoteszInternal Status:zPOS Fully Paid:zNotes:©ÚVALIGNrƒ   r‰   ÚTOPzHeader InformationzSupplier DetailszBuyer Details)r¬   ©ÚLEFTPADDINGrƒ   r‰   r   )ÚRIGHTPADDINGrƒ   r‰   r7   ©Ú
TOPPADDINGrƒ   r‰   r   ©rŽ   rƒ   r‰   r   zPayment Info (as printed)zInternal Payment Information)r¬   )r°   rƒ   r‰   r7   ©r±   rƒ   r‰   r   r²   r´   ÚLEFT)r   ÚhAlign)r¬   r¯   rµ   r²   r´   z
Line ItemsÚitems)ÚSKUÚDescriptionÚQtyz
Unit PriceÚDiscountÚGSTz
Line Totalc                    s   g | ]}t |ˆ ƒ‘qS r   )r   )Ú.0Úh)rk   r   r   Ú
<listcomp>s  s    z/create_invoice_revision_pdf.<locals>.<listcomp>c                 S   s&   |   |¡pi }|  d¡p|  d¡pdS )Nr”   r•   r–   ©rw   )Úitr   ry   r   r   r   Úfieldv  s   z*create_invoice_revision_pdf.<locals>.fieldÚskuÚdescriptionÚqtyÚ
unit_priceÚdiscountÚgst_lineÚ
line_totaléF   r8   )r   Ú
repeatRows)r…   r   zNo line items found.Útotalsr   c                    s"   ˆ   | ¡pi }|  d¡p|  d¡S )Nr”   r•   rÁ   )r   ry   )rÍ   r   r   Útval¤  s   z)create_invoice_revision_pdf.<locals>.tvalÚSubtotalÚsubtotalzDiscount GlobalÚdiscount_globalÚFreightÚfreightÚ
SurchargesÚsurcharge_totalÚRoundingÚroundingr½   ÚgstzGrand TotalÚgrand_totalz	GST BasisÚ	gst_basisé(   éP   )r-   r   zFinancial SummaryÚtax_lookup_basicÚvalidationszValidation Checksu   âœ”u   âœ˜zNo validations available.Úminimum_atoFÚminimum_xero_aerofloÚdate_validatedzminimum_ato: <b>u"   </b> â€“ minimum_xero_aeroflo: <b>u   </b> â€“ date_validated: <b>z</b>)ÚonFirstPageÚonLaterPagesr   )%r   ÚmkdirÚosrr   Úsplitextr   r   ÚNEUTRAL_900ra   r   rA   r   r   rB   ro   Úappendr   ÚNEUTRAL_500Úhexvalr   r   ÚsetStyler   ÚNEUTRAL_100ÚNEUTRAL_300rw   ru   rv   r   ÚAPP_WP_INVOICEr	   rD   ÚextendÚbuild_tax_lookup_basic_sectionr¸   ÚbuildrQ   )NrR   rS   rT   rU   Úout_pathÚ	safe_nameÚstemÚpdf_pathÚstylesrY   rb   Únormalrh   rI   rJ   Ú_Úcontent_widthÚ	col_widthÚstoryr{   Ú
inv_numberÚinv_dateÚsupplier_nameÚ
title_textÚ
disclaimerÚheader_dataÚ
header_tblÚsupÚsup_nameÚsup_abnÚsup_addressÚsupplier_tableÚsupplier_tblr    Úprinted_addressÚbuyer_tableÚ	buyer_tblÚppÚprinted_rowsÚprinted_tblÚprinted_captionÚpiÚ	pi_statusÚpi_flagÚpi_notes_textÚinterp_rowsÚ
interp_tblÚ	left_rowsÚleft_col_tableÚ
right_rowsÚright_col_tableÚtwo_col_summaryr¸   Útable_headerÚ
table_rowsÚitemrÃ   rÄ   ÚdescrÆ   ÚunitÚdiscrÉ   rÊ   ÚrowÚ	items_tblrÎ   Úsummary_rowsÚsummary_tblrÝ   rÞ   Úvalidation_rowsr   ÚvalueÚvalidations_tblÚminimum_ato_symbolÚminumym_xero_symbolÚdata_validated_symbolr   )rR   rk   rÍ   r   Úcreate_invoice_revision_pdfW   s  úù	ú	 ÿ

ý

øÿýÿý&û
û	,..û
û	û
ûû	ý
ú




ø

	


ù	ý







ù	,ý
üø
ü


ûÿþü
ýr+  rÝ   rb   rh   c                 C   s8  g }|  td|ƒ¡ |  d¡pd}|  d¡pd}t|  d¡ƒ}t|  d¡ƒ}t|  d¡ƒ}|s2d	}	n|r6d
nd}	|r=d}
nd}
d|gd|gd|	gd|
gg}t|dt dt gd}| tdddtfdddt	j
fddddddddtfgƒ¡ |  |¡ |  td d!ƒ¡ d"t ¡ › d#}|  t||ƒ¡ |  td d$ƒ¡ |S )%uq   
    Construye la secciÃ³n de ABN Lookup (bÃ¡sico) como una lista de Flowables
    con branding consistente.
    u(   Supplier Registry Lookup (ABN â€“ basic)Útax_idr}   Úentity_namezNo disponibleÚ
abn_existsÚ	is_activeÚgst_registeredz$No encontrado en el registro oficialÚActivozInactivo / CanceladozRegistrado para GSTu+   No registrado para GST (o sin informaciÃ³n)rš   zNombre registradoz
Estado ABNr½   é#   éZ   r€   r‚   rƒ   r„   r†   r‡   r‹   r   r¬   r   r‰   r   r-   r0   r~   z~">Information provided by tax lookup service (basic version). For extended validation, connect the full ABN Lookup app.</font>ri   )rè   r   rw   Úboolr   r   rë   r   ÚAPP_ABN_LOOKUPr	   rD   rí   r   ré   rê   )rÝ   rb   rh   Úelementsr—   r-  r.  r/  r0  Ú
estado_abnÚgst_textÚ
table_dataÚtblÚ	note_htmlr   r   r   rð   ð  sF   	ü
ö
ÿrð   r   )-Úreportlab.platypusr   r   r   r   r   r   Úreportlab.lib.pagesizesr   Úreportlab.libr	   Úreportlab.lib.colorsr
   Úreportlab.lib.stylesr   r   Úreportlab.lib.unitsr   Úpathlibr   rå   Útypingr   r   r   Úshared.brandingr   r   rA   r   r=   Ú
BRAND_DARKrî   r5  rì   rí   ré   rç   ÚSTATE_SUCCESSÚSTATE_WARNINGÚSTATE_ERRORÚ
STATE_INFOrQ   r+  rð   r   r   r   r   Ú<module>   s\     1ü
ÿþýü
û   
ÿþý