3
.+hn                 @   s6  d Z ddlZddlZddl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 ddlmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlm Z  ddlm!Z! ddl"m#Z# ddl$m%Z% ddl&Z&ddl'Z'ej(dZ)ej*edd G dd deZ+G dd de j,Z-G dd dZ.dS )z
 * @author Xiaobo Sun
 * created  on 23.06.2018
 * @copyright (C) 2018 Sogood International GmbH - all rights reserved
 * @licence
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and confidential
    N)colors)A4)SimpleDocTemplate	ParagraphSpacerImageTable
TableStyleFlowable)getSampleStyleSheetParagraphStyle)inchcm)
pdfmetrics)TTFont)TA_RIGHT	TA_CENTERTA_LEFT
TA_JUSTIFY)canvas)mm)createBarcodeDrawing   )stockupdjango
DejaVuSanszfonts/DejaVuSans.ttfc               @   s&   e Zd ZdZdd ZddddZdS )SampleFlowablezM
    Sample Flowable Usage
    Usage : elements.append(SampleFlowable())
    c             C   s   t j|  d| _d| _d S )N2   )r
   __init__widthheight)self r"   */data/git/entellipy_wy/pdf/deliverynote.pyr   )   s    
zSampleFlowable.__init__N)returnc             C   s   | j jd| j| j| j dS )z
        Draw a line
        r   N)canvliner    r   )r!   r"   r"   r#   draw.   s    zSampleFlowable.draw)__name__
__module____qualname____doc__r   r'   r"   r"   r"   r#   r   #   s   r   c               @   s4   e Zd ZdZdd ZddddZdddd	ZdS )
NumberedCanvasz%
    Page Number - Canvas Sample
    c             O   s   t jj| f|| g | _d S )N)r   Canvasr   _saved_page_states)r!   argskwargsr"   r"   r#   r   :   s    zNumberedCanvas.__init__N)r$   c             C   s   | j jt| j | j  dS )z
        Show page
        N)r.   appenddict__dict__
_startPage)r!   r"   r"   r#   showPage>   s    zNumberedCanvas.showPagec             C   s8   x&| j D ]}| jj| tjj|  qW tjj|  dS )z:
        Add page info to each page (page x of y)
        N)r.   r3   updater   r-   r5   save)r!   stater"   r"   r#   r7   E   s    zNumberedCanvas.save)r(   r)   r*   r+   r   r5   r7   r"   r"   r"   r#   r,   5   s   r,   c               @   sv   e Zd ZdZdd ZddddZdddd	Zddd
dZddddZddddZ	dd Z
dd Zdd ZdS )SogoodPrintablez
    Main Class
    A4 is 210mm x 297mm, 8.27 x 11.69 inches. 1 inch is 72 points (not pixel)
    dimension 592 x 842 points
    c,       ,      C   s  || _ || _|| _|%dk| _|| _|| _|| _|| _|| _|	| _	|
| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _|| _| | _ |!| _!|"| _"|#| _#|$| _$|%| _%|&| _&|'| _'|(| _(|)| _)|*| _*|+| _+dS )u  
        :param buffer:
        :param is_sogood: False
        :param platform_id(new): 9876543210 : if afterbuy-id available, else goodone-order id
        :param order_date(new): "25.06.2018 09:30:00" - new
        :param type(new): 0 Angebot, 1 Auftragsbestätigung, 2 Lieferschein, 3 Rechnung
        :param tax(new): 19
        :param customerCompany: "Muster International GmbH"
        :param customerTitle(new): "Herr"
        :param customerSurname: "Müller"
        :param customerFirstname: "Thomas"
        :param customerStreet: "Hans-Kohl-Str. 27"
        :param customerPostcode: "64646"
        :param customerCity: "Heppenheim"
        :param customerCountry: "Deutschland"
        :param customerMail: "thomas.müller@muster.de"
        :param customerTelephone: "+49 151 00000000"
        :param customerShippingCompany: "Muster International GmbH"
        :param customerShippingSurname: "Müller"
        :param customerShippingFirstname: "Thomas"
        :param customerShippingStreet: "Hans-Kohl-Str. 27"
        :param customerShippingPostcode: "64646"
        :param customerShippingCity: "Heppenheim"
        :param customerShippingCountry: "Deutschland"
        :param paymentMethod: "Paypal"
        :param paymentDetails: "http://url_to_qrcode"
        :param paidSum: "289.00"
        :param paidTax(new): "50.00"
        :param shippingMethod: "DHL/DPD/EkremTranksport"
        :param shippingDatails: "28.06.2018"
        :param soldItems:
             {"items":
              [
                {
                  "ean": "4250755330211",
                  "quantity": "1",
                  "price": "310.99",
                  "comment": "ECHT GLAS DUSCHE DUSCHABTRENNUNG DUSCHKABINE AUS SICHERHEITSGLAS RAVENNA17-2",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                 },
                {
                  "ean": "4250755304137",
                  "quantity": "3",
                  "price": "60.99",
                  "comment": "WC SITZ TOILETTENDECKEL KLODECKEL KLOBRILLE TOILETTENSITZ SOFTCLOSE WCD376",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "4250755323091",
                  "quantity": "1",
                  "price": "260.99",
                  "comment": "140x200 cm Design Walk-In Duschabtrennung Bremen1 in grauem Glas mit 4-eckigem Stabilisator BRAM2 <br/>
                             Breite (cm): 140 cm <br/>
                             Stabilisator: 4 - eckig (BRAM2)",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "4250755323091",
                  "quantity": "2",
                  "price": "520.99",
                  "comment": "LUXUS DUSCHE DUSCHWAND DUSCHABTRENNUNG AUS ECHTGLAS VARIABEL 80-120CM BREMEN 1s",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "4251242935322",
                  "quantity": "1",
                  "price": "109.99",
                  "comment": "ABLAUFGARNITUR SIPHON DUSCHTASSE Ø90MM <br/> ABLAUFLOCH GERUCHVERSCHLUSS AL02",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "4251242935322",
                  "quantity": "1",
                  "price": "29.95",
                  "comment": "Nano-M für Duschwand Wachbecken WC & <br/> Bildet SOGOOD",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "4251242935322",
                  "quantity": "1",
                  "price": "29.95",
                  "comment": "Nano-M für Duschwand Wachbecken WC & <br/> Bildet SOGOOD",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                 },
                {
                  "ean": "4251242935322",
                  "quantity": "1",
                  "price": "29.95",
                  "comment": "Nano-M für Duschwand Wachbecken WC & <br/> Bildet SOGOOD",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "4250755323527",
                  "quantity": "1",
                  "price": "329.95",
                  "comment": "Bremen2ms 90x200 cm 10 mm (BR10703MS 90)",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "4250755323091",
                  "quantity": "1",
                  "price": "260.99",
                  "comment": "140x200 cm Design Walk-In Duschabtrennung Bremen1 in grauem Glas mit 4-eckigem Stabilisator BRAM2 <br/>
                            Breite (cm): 140 cm <br/>
                            Stabilisator: 4 - eckig (BRAM2)",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "",
                  "quantity": "1",
                  "price": "-260.99",
                  "comment": "4% Rabatt auf Ihre Bestellung",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                },
                {
                  "ean": "",
                  "quantity": "1",
                  "price": "-300.99",
                  "comment": "5% Rabatt auf Ihre Bestellung",
                  "tax": "19",
                  "stammbezeichnung": "sbz1",
                  "packstueck": "1"
                }
              ]
            }
        :param comment: "testing memo..."
        :param invoiceComment: "testing memo..."
        :param orderId: "1197839669"
        :param billingNr: "206437"
        :param userId: "1129167235"
        :param userIdPlattform: "Amazon-t4zhnxnjgrj83v3@marketplace.amazon.fr"
        :param payment_date: "25.06.2018 09:30:00"
        :param invoice_date: "25.06.2018 09:30:00"
        :param shipping_date: "25.06.2018 09:30:00"
        :param deal_with: ""
        :param working_days: 3
        z96994_sogood-de-ottoN),_buffer_type
_is_sogood_is_otto_platform_id_order_date_tax_customer_company_customer_title_customer_surname_customer_firstname_customer_street_customer_postcode_customer_city_customer_country_customer_mail_customer_Telephone_customer_shipping_company_customer_shipping_surname_customer_shipping_firstname_customer_shipping_street_customer_shipping_postcode_customer_shipping_city_customer_shipping_country_customer_shipping_telephone_payment_method_payment_details_payment_sum_payment_tax_shipping_method_shiping_details_sold_items_comment_invoice_comment_orderId
_billingNr_userId_userIdPlattform_payment_dateZ_invoice_date_shipping_date
_deal_with_working_days	_elements),r!   buffer	is_sogoodplatform_id
order_datetypetaxcustomerCompanycustomerTitlecustomerSurnamecustomerFirstnamecustomerStreetcustomerPostcodecustomerCitycustomerCountrycustomerMailcustomerTelephonecustomerShippingCompanycustomerShippingSurnamecustomerShippingFirstnamecustomerShippingStreetcustomerShippingPostcodecustomerShippingCitycustomerShippingCountrycustomerShippingTelephonepaymentMethodpaymentDetailspaidSumpaidTaxshippingMethodshippingDatails	soldItemscommentinvoiceCommentorderId	billingNruserIduserIdPlattformpayment_dateinvoice_dateshipping_datedealWithworking_dayselementsr"   r"   r#   r   b   sZ     K
zSogoodPrintable.__init__N)r$   c             C   sn  t jd| j d  t }|jtdtd |jtdtd d}| jdkrRd}n| j	d	krbd
}nd}t
|dt dt }|j|j|j\}}|j||jd |j |d  |j|j  |rjd| jdkrdn| j| jdkr| jn| j| jdkr| jn| j| jdkr| jn| j| jdkr"| jn| j| jdkr8| jn| j| jdkrN| jn| j| jdkrd| jn| j| j dkrxdn| j | j!dkrdn| j!f
 }	t"|	|d }
dt#j#j$ j%d }dt#j#j$ j%d }| j	d	krt"||d }nt"||d }|
|gg}t&|dt d}t'd#d(d-g}|j(| |j|j|j\}}|j||jd |j |d  |j|j |  dS ).zd
        Header on each page
        :param c: Canvas
        :param doc: SimpleDocTemplate
        zdeliverynote.py header() z xiaoboJustify)name	alignmentRightzimages/doporro.pngTzimages/otto.jpgTruezimages/logo.pngzimages/maimai.pngg333333@g?   a  <font size="10">
                  %s %s %s <br/>
                  %s <br/>
                  %s <br/>
                  <b>%s, %s</b> <br/>
                  <b>%s</b> <br/>
                  RTel: %s <br/>
                  LTel: %s <br/>
                  </font>
                  N Normalal  <font size="10">
                          Mai & Mai GmbH <br/>
                          Gutenbergring 1 <br/>
                          63110 Rodgau Deutschland <br/>
                          Telefon: +49 6106 6670592 <br/>
                          www.maimai24.de <br/>
                          %s
                          </font>
                          z%d.%m.%Y %H:%M:%Sau  <font size="10">
                          Sogood International GmbH <br/>
                          Gutenbergring 1 <br/>
                          63110 Rodgau Deutschland <br/>
                          Telefon: +49 6106 6667585 <br/>
                          www.sogood.de <br/>
                          %s
                          </font>
                             )	colWidthsFONTr   r   	HelveticaLEFTPADDING<   RIGHTPADDING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   r   r   ))loggerinforH   r   addr   r   r   r=   r<   r   r   wrapr   bottomMargindrawOn
leftMarginr    rB   rM   rD   rL   rC   rK   rA   rN   rE   rO   rF   rP   rG   rQ   rJ   rR   r   datetimenowstrftimer   r	   setStyle)r!   cdocis_first_pagestyleslogoimwhcustomer_addrcustomer_addr_pZvendor_maimai24_addrZvendor_sogood_addrvendor_addr_pdatatablestylew1h1r"   r"   r#   headerY  sN    

*
		

zSogoodPrintable.headerc             C   s   | j dkrFdddddgddd	d
dgdddjdddgdddddgg}n:dddddgdddd
dgdddjdddgdddddgg}td1d6d;d@g}t|d)t gd*t d+}|j| |j|j|j\}}|j	||j
| d,S )Az
        Footer on each page
                Runs demo demonstrating usage of Spreadsheet Tables.
        :param c: Canvas
        :param doc: SimpleDocTemplate
        r   zSogood International GmbHzTelefon: +49 6106 6667585zAmtsgericht OffenbachzBankverbindung:zBIC: DRESDEFFXXXzGutenbergring 1zE-Mail: info@sogood.dez	HRB 42229CommerzbankzIBAN:z63110 Rodgaur   u#   Geschäftsführerin: Shaoyang Huangzutf-8zBLZ: 50080000ZDE33500800000635289300DeutschlandzKonto: 0635289300zUSt-IdNr:DE DE814341426zMai & Mai GmbHzTelefon: +49 6106 6670592zBIC: COBADEFF004zEMail:info@maimai24.dez	HRB 44229u   Geschäftsführerin: Wei TaozBLZ: 50040000zDE7250 0400000413058900zKonto: 4130589 00zUStIdNr: DE 265808049r   r   r   r   FONTSIZE   ALIGNLEFTVALIGNMIDDLEgffffff
@g333333?)r   
rowHeightsN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   r   r   r   r   r   r   r   r   r   )r   r   r   r   )r<   encoder	   r   r   r   r   r   r   r   r   )r!   r   r   r   r   r   r   r   r"   r"   r#   footer  s,    
	
zSogoodPrintable.footerc             C   s.   |j   | j||d | j|| |j  dS )z[
        First Page
        :param c: Canvas
        :param doc: SimpleDocTemplate
        TN)	saveStater   r   restoreState)r!   r   r   r"   r"   r#   header_footer_first_page  s    z(SogoodPrintable.header_footer_first_pagec             C   s.   |j   | j||d | j|| |j  dS )z[
        First Page
        :param c: Canvas
        :param doc: SimpleDocTemplate
        FN)r   r   r   r   )r!   r   r   r"   r"   r#   header_footer_later_pages  s    z)SogoodPrintable.header_footer_later_pagesc             C   s  t  }|jtdtdd |jtdtd |jtdtd |jtdtdd	d
 |jtdd d| j| j	f }|jt
||d  |jtd| jddd |jtdd | jdkrd}n$| jdkrd}n| jdkrd}nd}|jt
||d  |jtdd d| j }|jt
||d  |jtdd d}|jt
||d  |jtdd d| j| jf }|jt
||d  |jtdd |j| j  |jtdd d| j| j| jf }|jt
||d  |jtdd d | j| jf }|jt
||d  |jtdd |j| j  |jtdd d!}|jt
||d  |jtdd" | jd#krtd$}nd%}|jt
||d  |jtdd d&S )'zC
        write first page content
        :param elements:
        
MY_Justify   )r   r   leadingMY_Right)r   r   	MY_CenterMY_Head   zHelvetica-Bold)r   r   fontSizefontNamer   r   z8<font size=8>Auftrag-Nr.: %s and Rechnung-Nr.: %s</font>r   Code128(   x   )valuer    r      0z#<font size=12><b>Angebot</b></font>1u0   <font size=12><b>Auftrag Bestätigung</b></font>2z(<font size=12><b>Lieferschein</b></font>z$<font size=12><b>Rechnung</b></font>z+<font size=12>Sehr geehrter Herr %s,</font>uD   <font size=12>gemäß Ihrer Bestellung liefern wir wie folgt </font>z(<font size=12>Kunden-Nr.: %s / %s</font>r   z<font size=12>
            Zahlungsmethode: %s <br/>
            Zahlungsdatum: %s <br/>
            Bearbeitungszeit: %s Tage
        </font>
        ze<font size=12>
            Versandart: %s <br/>
            Versanddatum: %s
        </font>
        u.   <font size=12>Mit freundlichen Grüssen</font>0   r   z$<font size=12>Ihr Sogood Team</font>z&<font size=12>Ihr Maimai24 Team</font>N)r   r   r   r   r   r   r1   r   r\   r]   r   r   r;   rC   r^   r_   table_articlesrS   r`   rc   rW   ra   talbe_commentr<   )r!   r   r   ptextZpayment_infoZshipping_infor"   r"   r#   write_content  s\    



zSogoodPrintable.write_contentc       	      C   s   g }|j dg |j | jg |j dg |j | jg t }|d }d|_d|_t|_g }xD|D ]<}g }x(tt	|D ]}|j t
|| | qxW |j | qbW t|dgd}tddddtjfddddtjfg}|j| |S )NzMemo:zRechnungsvermerk:BodyTextCJK   i  )r   	INNERGRIDr   r   g      ?BOX)r   r   r   r   )r   r   )r   r   r   r   )r   r   )r1   rZ   r[   r   wordWrapr   r   r   rangelenr   r   r	   r   blackr   )	r!   r   sdata_with_stylerowdata_with_style_rowitr   r"   r"   r#   r   R  s*    

zSogoodPrintable.talbe_commentc             C   s0  g }|j ddddg tj| jdd}|d }x|D ]}g }|d d	k	r\t|d r\|d }|j | |j td
|ddd |d d	k	r|d rtj|d dd}|j | |d d	k	rt|d r|j |d  |j | q4W t }|d }d|_	d|_
t|_t }	|	d }	d|	_	d|	_
t|	_tddddd}
g }xt|D ]\}}g }xtt|D ]~}|dkrv|j ||  n^|dkr|j tt|| |
 n:|t|d kr|j tt|| |	 n|j ||  qXW |j | q>W t|ddddgd}td d#d&d!tjfd"d'd*d!tjfg}|j| |S )+z]
        Runs demo demonstrating usage of Spreadsheet Tables.
        :return: Table
        EANBarcodeNameCountF)strictr   eanNr   
   r   )r   r    r   r       )r   countr   r   r   ZFourthColumnStyle   r   )r   r   r   r   r      S   u      r   )r   r   g      ?r   )r   r   r   r   )r   r   )r   r   r   r   )r   r   )r1   jsonloadsrd   strr   textwrapfillr   r   r   r   r   r   r   	enumerater   r   r   r   r	   r   r   r   )r!   r   loaded_json
items_jsonxr   r  Zname_wrappedr   s_rightZs_fourth_columnr   Z	row_indexr   r   r   r   r"   r"   r#   r   r  sX    





zSogoodPrintable.table_articlesc             C   s\   t jd t| jtddddd}g }| j| |j|| j| jt	d | jj
 }| jj  |S )zC
        Entry method of the class
        :rtype: BytesIO
        zdeliverynote.py do()H   )pagesizerightMarginr   	topMarginr   )onFirstPageonLaterPagescanvasmaker)r   r   r   r:   r   r   buildr   r   r,   getvalueclose)r!   r   r   pdfr"   r"   r#   do  s    




zSogoodPrintable.do)r(   r)   r*   r+   r   r   r   r   r   r   r   r   r!  r"   r"   r"   r#   r9   [   s    xR._ Ar9   )/r+   r   r  loggingreportlab.libr   reportlab.lib.pagesizesr   reportlab.platypusr   r   r   r   r   r	   r
   reportlab.lib.stylesr   r   reportlab.lib.unitsr   r   reportlab.pdfbaser   reportlab.pdfbase.ttfontsr   reportlab.lib.enumsr   r   r   r   reportlab.pdfgenr   r   reportlab.graphics.barcoder   r   r   ior  	getLoggerr   registerFontr   r-   r,   r9   r"   r"   r"   r#   <module>   s,   $
&