a
    ¦¾deêI  ã                   @   sJ  d 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 ddlT ddlmZ ddlmZ dd	lmZ g d
¢Zi ZeD ]`\ZZe d¡Zeeƒdkràeed ƒZeed ƒZ e!ee d ƒD ]Z"eee"< qÐqŒeeeeƒ< qŒdd„ Z#G dd„ deƒZ$G dd„ de$ƒZ%G dd„ de$ƒZ&G dd„ de$ƒZ'G dd„ de$ƒZ(dS ))ÚEan13BarcodeWidgetZisEanStringÚEan8BarcodeWidgetÚUPCAÚEan5BarcodeWidgetÚISBNBarcodeWidgeté    )ÚGroupÚStringÚRect)Úcolors)ÚstringWidth)ÚisNumberÚisColorÚisStringÚ	ValidatorÚ	isBooleanÚNoneOr)Ú*)ÚPlotArea)Úmm)ÚasNative)Y)z00-13zUSA & Canada)z20-29zIn-Store Functions)z30-37ZFrance)z40-44ZGermany)Z45zJapan (also 49))Z46zRussian Federation)Z471ÚTaiwan)Z474ZEstonia)Z475ZLatvia)Z477Z	Lithuania)Z479z	Sri Lanka)Z480ZPhilippines)Z482ZUkraine)Z484ZMoldova)Z485ZArmenia)Z486ZGeorgia)Z487Z
Kazakhstan)Z489z	Hong Kong)Z49zJapan (JAN-13))Z50zUnited Kingdom)Z520ZGreece)Z528ZLebanon)Z529ZCyprus)Z531Z	Macedonia)Z535ZMalta)Z539ZIreland)Z54zBelgium & Luxembourg)Z560ZPortugal)Z569ZIceland)Z57ZDenmark)Z590ZPoland)Z594ZRomania)Z599ZHungary)z600-601zSouth Africa)Z609Z	Mauritius)Z611ZMorocco)Z613ZAlgeria)Z619ZTunisia)Z622ZEgypt)Z625ZJordan)Z626ZIran)Z64ZFinland)z690-692ZChina)Z70ZNorway)Z729ZIsrael)Z73ZSweden)Z740Z	Guatemala)Z741zEl Salvador)Z742ZHonduras)Z743Z	Nicaragua)Z744z
Costa Rica)Z746zDominican Republic)Z750ZMexico)Z759Z	Venezuela)Z76ZSwitzerland)Z770ZColombia)Z773ZUruguay)Ú775ÚPeru)Z777ZBolivia)Z779Z	Argentina)Z780ZChile)Z784ZParaguay)Z785r   )Z786ZEcuador)Z789ZBrazil)z80-83ZItaly)Z84ZSpain)Ú850ZCuba)Ú858ZSlovakia)Z859zCzech Republic)Ú860ZYugloslavia)Ú869ZTurkey)Z87ZNetherlands)Z880zSouth Korea)Z885ZThailand)Z888Z	Singapore)Z890ZIndia)Z893ZVietnam)Z899Z	Indonesia)z90-91ZAustria)Z93Z	Australia)Z94zNew Zealand)Z955ZMalaysia)Z977z;International Standard Serial Number for Periodicals (ISSN))Z978z,International Standard Book Numbering (ISBN))Z979z*International Standard Music Number (ISMN))Z980zRefund receipts)z981-982zCommon Currency Coupons)Z99ZCouponsú-é   é   c                    s   G ‡ fdd„dt ƒ}|ƒ S )Nc                       s   e Zd Z‡ fdd„ZdS )znDigits.<locals>._ndigitsc                    s.   t |ƒtu o,t|ƒˆ ko,tdd„ |D ƒƒˆ kS )Nc                 S   s   g | ]}|d v r|‘qS )Ú
0123456789© )Ú.0Úcr!   r!   úY/var/www/sistema_ama/venv/lib/python3.9/site-packages/reportlab/graphics/barcode/eanbc.pyÚ
<listcomp>y   ó    z2nDigits.<locals>._ndigits.test.<locals>.<listcomp>)ÚtypeÚstrÚlen)ÚselfÚx©Únr!   r$   Útestx   s    znDigits.<locals>._ndigits.testN)Ú__name__Ú
__module__Ú__qualname__r.   r!   r,   r!   r$   Ú_ndigitsw   s   r2   )r   )r-   r2   r!   r,   r$   ÚnDigitsv   s    r3   c                   @   sŽ  e Zd ZdZeeeedƒdd�eedd�ee	dd�ee	dd�ee	dd�ee
d	d�ee	d
d�ee	dd�ee	dd�ee
dd�ee
dd�eedd�eedd�eedd�eedd�d�ZdZdZdZde Zde e ZdZdZdZdZdZdZd ZZdZdZdd d!d"d#d$d%d&d'd(d)œ
Zd*Zd+Ze j! Z"Z#dZ$d,Z%d,Z&d,Z'd@d.d/„Z(e)d0d1„ ƒZ*d2d3„ Z+d4d5„ Z,d6d7„ Z-d8d9„ Z.d:d;„ Z/d<d=„ Z0d>d?„ Z1e2e1ƒZ1dS )Ar   ZEAN13é   ú
the number©ÚdescÚfontNamez	font sizezx-coordzy-coordz	bar colorzHeight of bars.zWidth of bars.zWidth of bar borders.zColor of bar borders.zhuman readable text colorzif human readablezif quiet zone to be usedzleft quiet zone lengthzright quiet zone length)ÚBASEÚvaluer8   ÚfontSizer+   ÚyÚbarFillColorÚ	barHeightÚbarWidthÚbarStrokeWidthÚbarStrokeColorÚ	textColorÚhumanReadableÚquietÚlquietÚrquieté   éq   g®Gázî9@g…ëQ¸¥B@r   é   ))
Z0001101Z0011001Z0010011Z0111101Z0100011Z0110001Z0101111Z0111011Z0110111Z0001011)
Z0100111Z0110011Z0011011Z0100001Z0011101Z0111001Z0000101Z0010001Z0001001Z0010111)
Z1110010Z1100110Z1101100Z1000010Z1011100Z1001110Z1010000Z1000100Z1001000Z1110100NZ101Z01010)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   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   ©
Ú0Ú1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9é   Z	Helveticar   Ú123456789012c                 K   sd   t |tƒrt|ƒnt|ƒ}t| jt|ƒ dƒd |d | j…  | _| ¡ D ]\}}t	| ||ƒ qJd S ©Nr   rK   )
Ú
isinstanceÚintr(   r   ÚmaxÚ_digitsr)   r:   ÚitemsÚsetattr)r*   r:   ÚkwÚkÚvr!   r!   r$   Ú__init__¾   s    (zEan13BarcodeWidget.__init__c                 C   s(   | j | jd |  | j¡ |  | j¡  S )Né   )r?   Ú_nbarsÚ_calc_quietrE   rF   )r*   r!   r!   r$   Ú<lambda>Ä   r&   zEan13BarcodeWidget.<lambda>c                 C   s   | j | jfS )N)Úwidthr>   )r*   ZaWZaHr!   r!   r$   ÚwrapÆ   s    zEan13BarcodeWidget.wrapc                 C   sX   | j |d  }| j}tdƒ}t|d| j… ƒD ]$\}}||||  t|ƒ|  ƒ q.d S )Nr   rK   r   ©Ú
_lhconvertÚ_leftÚordÚ	enumerateÚ_start_right©r*   ÚsÚaÚcprj   ÚzÚir#   r!   r!   r$   Ú_encode_leftÉ   s
    zEan13BarcodeWidget._encode_leftc                 C   sD   |d| j  7 }| joBd|  k o&dk n  pBd|  k o>dk S   S )Né	   r4   é7   é9   ée   ©Ú_lquietrC   ©r*   rs   r!   r!   r$   Ú
_short_barÐ   s    zEan13BarcodeWidget._short_barc                 C   sN   | j rF|d u rd}qJtt|dƒƒ| j }t|ƒ}|| dkrJ|d7 }nd}|S )Nru   r   r   )rD   ÚfloatrZ   r?   rY   )r*   r`   r+   r!   r!   r$   rd   Ô   s    zEan13BarcodeWidget._calc_quietc              
   C   s¾  t ƒ }|j}| j}| j}| j}| j}| j}|t||||d d dd�ƒ | j|  	| j¡ }|  
| j¡ | _}	|  
| j¡}
|	d | jg}|j}|  ||¡ || jƒ tdƒ}| j}|| jd … D ]}||t|ƒ|  ƒ qº|| jƒ ||
d ƒ | j}| j}| j}| j}|d }d |¡}d }t|ƒD ]„\}}|dk�r–|  |¡�rD|�pFd}|| }|�rr|j|k�rr| j|7  _n"t||||| |||d�}||ƒ nd }||7 }�q | j�rº|  ||¡ |S ©Nr   )Ú	fillColorÚstrokeColorÚstrokeWidthrK   ç333333ó?Ú rL   )r   r�   r€   )r   Úaddr?   rf   r>   r+   r<   r	   r:   Ú_checkdigitrd   rE   rz   rF   Ú_tailÚappendrt   Ú_seprk   Ú_rightrm   r;   r=   r@   rA   Újoinrl   r|   rC   Ú_add_human_readable)r*   ÚgÚgAddr?   rf   r>   r+   r<   ro   rE   rF   Úbrp   rr   r‰   r#   r;   r=   r@   rA   ÚfthÚlrectrs   ÚdhÚyhr!   r!   r$   Údrawà   sP    




zEan13BarcodeWidget.drawc              
   C   sÞ   | j }| j}| j}| j}|d }|d }t|||ƒ}	| j|| jd   }
| jd|  }|t|
|||||d�ƒ | jd| j |  }
|dd… }|t|
|||||d	d
�ƒ |
d| 7 }
|dd … }|t|
|||||d	d
�ƒ d S )Nr‚   r   rU   çš™™™™™É?©r8   r;   r   é   r   rG   Úmiddle©r8   r;   r   Z
textAnchoré/   ©	r?   r;   rB   r8   r   r+   rz   r<   r   ©r*   ro   r�   r?   r;   rB   r8   r�   r#   Úwr+   r<   r!   r!   r$   r‹     s     z&Ean13BarcodeWidget._add_human_readablec                    sl   t dƒ‰ | jt‡ fdd„|d d d… D ƒƒ | jt‡ fdd„|dd d… D ƒƒ  }tˆ d|d  d  ƒS )NrK   c                    s   g | ]}t |ƒˆ  ‘qS r!   ©rk   ©r"   r+   ©rr   r!   r$   r%   )  r&   z2Ean13BarcodeWidget._checkdigit.<locals>.<listcomp>r   c                    s   g | ]}t |ƒˆ  ‘qS r!   r�   rž   rŸ   r!   r$   r%   *  r&   r   é
   ©rk   Ú_0cswÚsumÚ_1cswÚchr©ÚclsÚnumZiSumr!   rŸ   r$   r…   '  s
    $$ÿzEan13BarcodeWidget._checkdigit)rV   )3r/   r0   r1   ÚcodeNameÚAttrMapr   ÚAttrMapValuer3   r   r   r   r   Ú_attrMapr[   rm   rc   r   r>   r?   rC   r¢   r¤   rj   r‰   rD   rF   rE   r†   rˆ   ri   r;   r8   r
   ZblackrB   r=   rA   r@   r+   r<   ra   Úpropertyrf   rg   rt   r|   rd   r“   r‹   r…   Úclassmethodr!   r!   r!   r$   r   |   sx   













ñ	ö

1r   c                   @   sT   e Zd ZdZeeeedƒdd�d�ZdZ	dZ
dZdZd	Zd
d„ Zdd„ Zdd„ ZdS )r   ZEAN8rG   r5   r6   ©r9   r:   é   éU   rI   r   c                 C   sT   | j |d  }| jd }tdƒ}t|d| j… ƒD ]\}}||t|ƒ|  ƒ q2d S rW   rh   rn   r!   r!   r$   rt   9  s
    
zEan8BarcodeWidget._encode_leftc                 C   sD   |d| j  7 }| joBd|  k o&dk n  pBd|  k o>dk S   S ©Nru   r4   é)   é+   éI   ry   r{   r!   r!   r$   r|   @  s    zEan8BarcodeWidget._short_barc              
   C   sš   | j }| j}| j}| j}|d }| jd|  }d| j | }	|dd… }
|t|	||
|||dd�ƒ d| j | }	|dd … }
|t|	||
|||dd�ƒ d S )	Nr‚   r”   g     €1@r   r°   r—   r˜   g     @I@)r?   r;   rB   r8   r<   rz   r   )r*   ro   r�   r?   r;   rB   r8   r�   r<   r+   r#   r!   r!   r$   r‹   D  s    z%Ean8BarcodeWidget._add_human_readableN)r/   r0   r1   r©   rª   r   r«   r3   r¬   rm   rc   r[   r¢   r¤   rt   r|   r‹   r!   r!   r!   r$   r   .  s   ÿr   c                   @   sT   e Zd Zd Zeeeedƒdd�d�ZdZ	dZ
dZdZdZd	d
„ Zdd„ Zdd„ ZdS )r   é   r5   r6   r¯   é   rI   r   éY   c                 C   sT   | j |d  }| jd }tdƒ}t|d| j… ƒD ]\}}||t|ƒ|  ƒ q2d S rW   rh   rn   r!   r!   r$   rt   c  s
    
zUPCA._encode_leftc                 C   sD   |d| j  7 }| joBd|  k o&dk n  pBd|  k o>dk S   S )Nru   rb   rv   rw   é]   ry   r{   r!   r!   r$   r|   j  s    zUPCA._short_barc              
   C   s
  | j }| j}| j}| j}|d }|d }t|||ƒ}	| j|| jd   }
| jd|  }|t|
|||||d�ƒ | jd| j |  }
|dd… }|t|
|||||d	d
�ƒ |
d| 7 }
|dd… }|t|
|||||d	d
�ƒ |
d| 7 }
|d }|t|
|||||d�ƒ d S )Nr‚   r   rU   r”   r•   é   r   r·   r—   r˜   é$   r¶   é    rš   r›   r!   r!   r$   r‹   n  s&    zUPCA._add_human_readableN)r/   r0   r1   r©   rª   r   r«   r3   r¬   rm   r[   r¢   r¤   rc   rt   r|   r‹   r!   r!   r!   r$   r   V  s   ÿr   c                   @   s�   e Zd ZdZdZeeeedd�ee	dƒdd�d�Z
dZdZd	Zd
ZdZdZdddddddddddœ
Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"S )#r   zT
    EAN-5 barcodes can print the human readable price, set:
        price=True
    ZEAN5z#whether to display the price or notr6   é   r5   )r9   Úpricer:   é0   Ú01Z01011rI   ru   )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   r   r   r   r   )r   r   r   r   r   rJ   c                    sd   t dƒ‰ | jt‡ fdd„|d d d… D ƒƒ | jt‡ fdd„|dd d… D ƒƒ  }tˆ |d  ƒS )NrK   c                    s   g | ]}t |ƒˆ  ‘qS r!   r�   rž   rŸ   r!   r$   r%   ©  r&   z1Ean5BarcodeWidget._checkdigit.<locals>.<listcomp>r   c                    s   g | ]}t |ƒˆ  ‘qS r!   r�   rž   rŸ   r!   r$   r%   ª  r&   r   r    r¡   r¦   r!   rŸ   r$   r…   §  s
    $$ÿzEan5BarcodeWidget._checkdigitc                 C   sn   |   |¡}| j| }| j}| j}tdƒ}g }t|ƒD ]&\}	}
| |||	  t|
ƒ|  ¡ q4|| |¡ƒ d S )NrK   )r…   ri   rj   rˆ   rk   rl   r‡   rŠ   )r*   ro   rp   Úcheckrq   rj   rˆ   rr   Z	full_coders   r#   r!   r!   r$   rt   ­  s    

 zEan5BarcodeWidget._encode_leftc                 C   sD   |d| j  7 }| joBd|  k o&dk n  pBd|  k o>dk S   S r²   ry   r{   r!   r!   r$   r|   ¸  s    zEan5BarcodeWidget._short_barc              
   C   sô   | j }| j}| j}| j}|d }| jd|  }| j| j| jd  | d  }	|t|	|||||dd�ƒ t	| dd ƒ}
|
rðd }
|d dv rŒd	}
n|d d
v r t
dƒ}
|
d u r¬d S |
|dd… d |dd…  7 }
|| j7 }|t|	||
|||dd�ƒ d S )Nr‚   r”   r   r—   r˜   r¾   r   Z3456ú$rÀ   s   Â£r   rI   Ú.r½   )r?   r;   rB   r8   r<   r+   rc   rz   r   Úgetattrr   r>   )r*   ro   r�   r?   r;   rB   r8   r�   r<   r+   r¾   r!   r!   r$   r‹   ¼  s0    ÿ 
ÿz%Ean5BarcodeWidget._add_human_readablec              
   C   sV  t ƒ }|j}| j}| j}| j}| j}| j}|t||||d d dd�ƒ | j}|  	| j
¡ | _}	|  	| j¡}
|	d | j g}|j}|  ||¡ ||
d ƒ | j}| j}| j}| j}|d }d |¡}d }t|ƒD ]p\}}|dk�r0|}|| }|�r|j|k�r| j|7  _n"t||||| |||d�}||ƒ nd }||7 }qÌ| j�rR|  ||¡ |S r~   )r   r„   r?   rf   r>   r+   r<   r	   r:   rd   rE   rz   rF   r†   r‡   rt   r;   r=   r@   rA   rŠ   rl   rC   r‹   )r*   rŒ   r�   r?   rf   r>   r+   r<   ro   rE   rF   rŽ   rp   r;   r=   r@   rA   r�   r�   rs   r#   r‘   r’   r!   r!   r$   r“   Ú  sR    ÿ

ý

zEan5BarcodeWidget.drawN)r/   r0   r1   Ú__doc__r©   rª   r   r«   r   r3   r¬   rc   r[   rˆ   r†   r¢   r¤   ri   r…   rt   r|   r‹   r“   r!   r!   r!   r$   r   ˆ  s<   ÿýör   c                   @   s@   e Zd ZdZdZeeeee	dƒƒdd�d�Z
dd„ Zd	d
„ ZdS )r   a¿  
    ISBN Barcodes optionally print the EAN-5 supplemental price
    barcode (with the price in dollars or pounds). Set price to a string
    that follows the EAN-5 for ISBN spec:

        leading digit 0, 1 = GBP
                      3    = AUD
                      4    = NZD
                      5    = USD
                      6    = CAD
        next 4 digits = price between 00.00 and 99.98, i.e.:

        price='52499' # $24.99 USD
    ZISBNr½   zNone or the price to displayr6   )r9   r¾   c                 C   sT   t  | ¡}t| dd ƒ}|s|S | ¡ }|d }t||dd| j| jd�}| |¡ |S )Nr¾   r   T)r+   r:   r¾   rC   r>   rD   )r   r“   rÄ   Z	getBoundsr   r>   rD   r„   )r*   rŒ   r¾   Zboundsr+   Z	pricecoder!   r!   r$   r“     s    
þ
zISBNBarcodeWidget.drawc              	   C   s°   t  | ||¡ | j}| j}| j}| j}| j}|d }| jd|  | }	| j| }
d}|dd… |dd… |dd… |dd… |d g}|d	 	|¡7 }|t
|
|	||||d
�ƒ d S )Nr‚   r”   zISBN r   rI   r°   ru   r4   r   r•   )r   r‹   r?   r>   r;   rB   r8   r<   rz   rŠ   r   )r*   ro   r�   r?   r>   r;   rB   r8   r�   r<   r+   ZisbnÚsegmentsr!   r!   r$   r‹   .  s    
2ÿz%ISBNBarcodeWidget._add_human_readableN)r/   r0   r1   rÅ   r©   rª   r   r«   r   r3   r¬   r“   r‹   r!   r!   r!   r$   r   
  s   
þÿr   N))Ú__all__Zreportlab.graphics.shapesr   r   r	   Zreportlab.libr
   Zreportlab.pdfbase.pdfmetricsr   Zreportlab.lib.validatorsr   r   r   r   r   r   Zreportlab.lib.attrmapZreportlab.graphics.charts.areasr   Zreportlab.lib.unitsr   Zreportlab.lib.utilsr   Z_eanNumberSystemsZmanufacturerCodesr_   r`   ÚsplitÚwordsr)   rY   ZfromCodeZtoCodeÚrangeÚcoder3   r   r   r   r   r   r!   r!   r!   r$   Ú<module>   s4    \
 3(2 