3
1iWh                 @   sB  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'ddl(m)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Z0d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)
HRFlowable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/nachlieferung.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/   r4   updater   r.   r6   save)r"   stater#   r#   r$   r8   F   s    zNumberedCanvas.save)r)   r*   r+   r,   r   r6   r8   r#   r#   r#   r$   r-   6   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_customer_company_customer_title_customer_surname_customer_firstname_customer_street_customer_postcode_customer_city_customer_country_customer_mail_customer_Telephone_userIdPlattform	_elements_memo_erstellungsdatum_versand_orderId_xNachlieferungId)r"   buffer	is_sogoodplatform_id
order_datetypecustomerCompanycustomerTitlecustomerSurnamecustomerFirstnamecustomerStreetcustomerPostcodecustomerCitycustomerCountrycustomerMailcustomerTelephoneelementsmemoerstellungsdatumversanduserIdPlattformorderIdxNachlieferungIdr#   r#   r$   r   c   s0     6
zSogoodPrintable.__init__N)r%   c             C   s  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  |rd| jdkrdn| j| j| j| jd kr| jnd| j| j| j| j| jdkrdn| jdf
 }	t|	|d }
dtjj jd }dtjj jd }| j	d	krjt||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 )0zd
        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 null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)Nro   r   r   ry   ry   ry   )rs   rx   rz   rt   r   r   ry   ry   ry   ry   )ru   r{   r|   rv   r   r   ry   ry   ry   ry   )rw   r}   r~   rv   )!loggerinforH   r   addr   r   r   r>   r=   r   r   wrapr    bottomMargindrawOn
leftMarginr!   rB   rD   rC   rA   rE   rF   rG   rJ   r   datetimenowstrftimer   r	   setStyle)r"   cdocis_first_pagestyleslogoimwhcustomer_addrcustomer_addr_pvendor_maimai24_addrvendor_sogood_addrvendor_addr_pdatatablestylew1h1r#   r#   r$   header1  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
        rl   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 Rodgaurn   u#   Geschäftsführerin: Shaoyang Huangzutf-8zBLZ: 50080000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 265808049rs   r   r   rt   FONTSIZE   ALIGNLEFTVALIGNMIDDLEgffffff
@g333333?)rr   
rowHeightsNr   r   ry   ry   ry   ry   )rs   r   r   rt   r   r   ry   ry   ry   ry   )r   r   r   r   r   r   ry   ry   ry   ry   )r   r   r   r   r   r   ry   ry   ry   ry   )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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| jdkrd}n| jdkrd}|jt	||d  d| j d| j gg}t|dd gd!}|jtd6d;d&d<d?tjfg |j| |jtdd' |jtd(dtjd) |jtdd' |jtdd d*}|jt	||d  |jtdd |j| j  |jtdd d+| j| jf }|jt	||d  |jtdd |jtdd |j| j  |jtdd d,}|jt	||d  |jtdd- | jd.krd/}nd0}|jt	||d  |jtdd d1S )@zC
        write first page content
        :param elements:
        
MY_Justify   )ri   rj   leadingMY_Right)ri   rj   	MY_CenterMY_Head   zHelvetica-Bold)ri   rj   fontSizefontNamer   rv   z#<font size=8>Auftrag-Nr.: %s</font>rp   Code128(   x   )valuer!   r       0z#<font size=12><b>Angebot</b></font>1u0   <font size=12><b>Auftrag Bestätigung</b></font>2z2<font size=12><b>Ersatzlieferungsschein</b></font>3z$<font size=12><b>Rechnung</b></font>5zOriginale BestellNr: %szBestelldatum: %s      )rr   r   r   r   r   	TEXTCOLORr   z100%)r    	thicknesscolorug   <font size=12>Vielen Dank für Ihre Bestellung.Wir liefern Ihnen wie vereinbart folgende Waren: </font>zv<font size=12>
            Erstellungsdatum: %s <br/>
            Versand bis spaetestens: %s
        </font>
        u.   <font size=12>Mit freundlichen Grüssen</font>0   rl   z$<font size=12>Ihr Sogood Team</font>z&<font size=12>Ihr Maimai24 Team</font>Nr   r   ry   ry   ry   ry   )r   r   r   r   r   r   ry   ry   ry   ry   )r   r   r   r   )r   r   ry   ry   )ry   ry   )r   r   r   r   r   r   r2   r   rQ   r   r   r<   rP   r@   r   r   r	   r   blackr   table_articlesrN   rO   talbe_commentr=   )r"   ra   r   ptextr   r   payment_infor#   r#   r$   write_content  sf    






zSogoodPrintable.write_contentc       	      C   s   g }|j dg |j | jg |j dg |j dg t }|d }d|_d|_t|_g }xD|D ]<}g }x(tt|D ]}|j t	|| | qvW |j | q`W 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:rn   BodyTextCJK   i  )rr   	INNERGRIDr   r   g      ?BOX)r   r   ry   ry   )ry   ry   )r   r   ry   ry   )ry   ry   )r2   rM   r   wordWrapr   r   rj   rangelenr   r   r	   r   r   r   )	r"   r   sdata_with_stylerowdata_with_style_rowitr   r#   r#   r$   r   7  s*    

zSogoodPrintable.talbe_commentc             C   s@  g }|j ddddg tj| jdd}|d }x|D ]}g }d}|d	 d
k	r`t|d	 r`|d	 }|j | |j td|ddd d}|d d
k	r|d rtj|d dd}|j | d}|d d
k	rt|d r|d }|j | |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r|j ||  n^|dkr|j tt|| | n:|t|d kr|j tt|| |
 n|j ||  qhW |j | qNW 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)strictra   rn   eanNr   
   r   )r   r!   r    ri       )r    countr   r   r   FourthColumnStyle   r   )ri   r   r   rj   r      S   u   r   r   )rr   r   g      ?r   )r   r   ry   ry   )ry   ry   )r   r   ry   ry   )ry   ry   )r2   jsonloadsrL   strr   textwrapfillr   r   r   r   rj   r   r   	enumerater   r   r   r   r	   r   r   r   )r"   r   loaded_json
items_jsonxr   r   name_wrappedr   r   s_rights_fourth_columnr   	row_indexr   r   r   r   r#   r#   r$   r   W  s`    






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   ra   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$   r:   \   s    OR.l Er:   )1r,   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   rn   r   ior   reportlab.platypus.flowablesr   	getLoggerr   registerFontr   r.   r-   r:   r#   r#   r#   r$   <module>   s.   $
&