
    bwh                     p    d dl mZ d dl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 d dlZ G d d      Zy)    )ShoppingCreateInputN)BytesIO)SupplierModelProductModelCategoryModelUnitFeatureModelShoppingProductModelSettingModelShoppingModel)datetimec                       e Zd Zd ZddZd Zd ZdedefdZ	d Z
ded	efd
Zded	efdZded	efdZded	efdZded	efdZded	efdZy)TemplateClassc                     || _         y N)db)selfr   s     eC:\Users\jesus\OneDrive\Escritorio\backend-lacasadelvitrificado\app\backend\classes\template_class.py__init__zTemplateClass.__init__	   s	        c                 2    t        |      |k  r|S |d| dz   S )uC   Trunca el texto a la longitud mÃ¡xima especificada y agrega '...'Nz...)len)r   text
max_lengths      r   truncate_textzTemplateClass.truncate_text   s%    t9
"KKZ 5((r   c                 N    |t        |      k(  rt        t        |            S |dS )uH   Formatea números para mostrar enteros sin decimales cuando es necesarioz.2f)intstr)r   values     r   format_numberzTemplateClass.format_number   s&    CJs5z?"C[!r   c                    	 t        |      }t        |d      }|t        |      k(  rt        |      dj                  dd      S |dj                  dd      j                  dd      j                  dd      S # t        t
        f$ r Y yw xY w)u<   Formatea números como moneda con separador de miles (punto)   ,.z,.2fX0)floatroundr   replace
ValueError	TypeError)r   r   nums      r   format_currencyzTemplateClass.format_currency   s    	,CQ-Cc#hc(1..sC88 d,,S#6>>sCHPPQTVYZZI& 		s   AA8 3A8 8B
	B
datashopping_idc           
         d}d}d}d}d}g }| j                   j                  t              j                  t        j                  |k(        j                         }	|	j                  dk(  rd}
nd}
| j                   j                  t              j                         }|r#|j                  r|
rt        |j                        nd}|j                  D ]i  }| j                   j                  t              j                  t        j                  |j                  k(        j                         }| j                   j                  t              j                  t        j                  |j                  k(        j                         }| j                   j                  t              j                  t        j                  |k(  t        j                  |j                  k(        j                         }|s|j                   dk(  r|t        |j"                        z  }nO|j                   dk(  r|t        |j"                        z  }n'|j                   dk(  r|t        |j"                        z  }|r|j$                  rt        |j$                        nd}|t        |j&                        z  }||z  }|j(                  rt        |j(                        nd}|j+                  |r|j,                  nd||d	       |j.                  s,|j"                  s:t        |j"                        t        |j.                        z  }||z  }l | j1                  |      }t3        |      }d
}|
r|d|dz  z
  z  }|||||||
||d	S )z5Calcula todos los totales necesarios para el template           TFr!           @@Unknownnametotal_weightweight_per_palletNd   )	total_kg	total_lts	total_undtotal_shipping_kgtotal_palletstotal_without_discounthas_prepaidprepaid_discount_percentagetotal_with_discount)r   queryr   filteridfirstprepaid_status_idr
   prepaid_discountr&   productsr   
product_idr   r	   r.   unit_measure_idquantity_per_packageweight_per_unitquantityr8   appendproductfinal_unit_costcalculate_real_mixed_palletsr   )r   r-   r.   r:   r;   r<   r=   r?   products_infoshoppingr@   settingsrA   itemproduct_dataunit_featureshopping_productrM   product_total_weightr8   product_amountcalculated_palletsr>   rB   s                           r   calculate_shopping_totalsz'TemplateClass.calculate_shopping_totals)   s!   		!$ 77==/66}7G7G;7VW]]_%%*KK 77==.446JRW_WpWp  vAeH,E,E&F  GJ#MM '	9D77==6==looQUQ`Q`>`aggiL77==)9:AABRB]B]aeapapBpqwwyL#ww}}-ABII$00K?$//4??B  eg 
 $ ##q(E$";";<<%%*U4#<#<==	%%*U4#<#<==	 IUIeIe%(D(D"Ekn'6t}}9M'M$!%99! NZMkMkE,*H*H$Iqw!$$4@L00i$8):&  ##(A(A!&t'@'@!AE$J^J^D_!_&.8&O'	9T ">>}M./ #"8A@[^a@a<a"b !""!2*&<&+F#6

 
	
r   c                    |D cg c]  }|d   |d   |d   d }}g }t        d |D              r|D cg c]  }|d   dkD  s| }}|s	 |S t        d |D              }d}g }|D ]W  }	|	d   dkD  s||k  s||z
  }
t        |	d   |
      }|dkD  s,||z  }|	dxx   |z  cc<   |j                  |	d    d	| d
       Y |j                  |||d       t        d |D              r|S c c}w c c}w )zBAlgoritmo correcto para pallets mixtos - permite compartir palletsr6   r7   r8   )r6   weightcapacityc              3   ,   K   | ]  }|d    dkD    yw)r_   r   N .0ps     r   	<genexpr>z=TemplateClass.calculate_real_mixed_pallets.<locals>.<genexpr>   s     5a!H+/5s   r_   r   c              3   &   K   | ]	  }|d      yw)r`   Nrb   rc   s     r   rf   z=TemplateClass.calculate_real_mixed_pallets.<locals>.<genexpr>   s     !@A!J-!@s   z: kg)r7   r`   contents)anymaxminrO   )r   rS   re   	remainingpalletsactivepallet_capacitypallet_weightpallet_contentsrP   space_availablecan_adds               r   rR   z*TemplateClass.calculate_real_mixed_pallets{   sU    tA  Bnoai1^3DRSTgRhi  B	  B5955!*>AakAoa>F>2 - "!@!@@OM O % 	R8$q(]_-L&5&EO!'("3_EG{%0)W4)'..'&/1B"WIR/PQ	R NN -++ / 5955: A B
 ?s   C*C/C/returnc                     dd j                   j                  t              j                  t        j                  |k(        j                         }|r!|j                  rt        |j                        n
t        |      t        j                         j                  d      fd}d |        d}t        |j                  d       } j                  ||       fd	}t        |      }t        d
 |D              }	|t        |	      z  }|dkD  }
d}d }d}d}t!        |      D ]	  \  }} j                   j                  t"              j                  t"        j                  |j$                  k(        j                         }ddddj'                  |j(                  d      }|j*                  |k7  }|
r+||k\  r&|d |       z   dz    |       z   dz   z  }d}|dz  }d }d}|r j                   j                  t,              j                  t,        j                  |j*                  k(        j                         }|d|j.                   d|j0                   dz  }|j*                  }|dz  }|d|j2                   d j5                  |j6                         d j9                  |j:                         d| d j9                  |j<                         d j?                  |j@                         d j?                  tC        |j:                        tC        |j@                        z         dz  }|dz  } |d |       z   z  }|dz  }|S ) NAfile:/var/www/api.lacasadelvitrificado.com/public/assets/logo.pngMfile:/var/www/api.lacasadelvitrificado.com/public/assets/vitrificado-logo.png%Y-%m-%dc            	      "    d d d d  d	S Nz4
        <div class="header">
            <img src="aG  " class="vitrificado_logo float-left" />
            &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;
            &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;
            &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;
            &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;
            &ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;&ensp;            <img src="zj" class="logo float-right" />
        </div>

        <div class="title">
            <h2>Purchase Order #u  </h2>
        </div>

        <div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 20px;">
            <div>
                <strong>Vitrificadoschile Compañia Limitada</strong><br>
                Av. Pres. Kennedy 7440 of.901<br>
                7650618 Santiago - Chile
            </div>
            <div style="text-align: right;">
                Date: z/
            </div>
        </div>
            rb   datelogo_urlshopping_numbervitrificado_logo_urls   r   get_page_headerzMTemplateClass.generate_shopping_html_for_own_company.<locals>.get_page_header   G    +, -_
 `h^h i! "1 1 
2 f + r   a  
        <html>
        <head>
        <meta charset="utf-8">
        <style>@page { margin: 2cm 1.5cm; size: A4 portrait; }
            body { font-family: Arial, sans-serif; font-size: 12px; line-height: 1.4; margin: 0; padding: 0; }
            table { border-collapse: collapse; width: 100%; margin-top: 20px; page-break-inside: auto; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; word-wrap: break-word; max-width: 150px; }
            th { background-color: #f2f2f2; } tr { page-break-inside: avoid; page-break-after: auto; }
            .logo { width: 200px; }
            .vitrificado_logo { width: 120px; }
            .header {
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin-bottom: 20px;
            }
            .title { text-align: center; margin-top: 20px; margin-bottom: 30px; }
        </style>
        </head>
        <body>
        aE  

        <table>
            <thead>
            <tr>
                <th>Pos Item no.</th>
                <th>Description</th>
                <th>Kg/Lts/Un</th>
                <th>Cont</th>
                <th>Price</th>
                <th>Amount</th>
            </tr>
            </thead>
            <tbody>
        c                     | j                   S r   category_idre   s    r   <lambda>zFTemplateClass.generate_shopping_html_for_own_company.<locals>.<lambda>   
    amm r   keyc                     dj                  d          dj                  d          dj                  d          dj                  d          d	j                  d
          d} d   r(d   #d   d   z
  }| dj                  |       dz  } | dj                  d          dz  } d   r5d   0| dj                  d          dj                  d          dz  } | dz  } | S Nz
        <div style="margin-top: 20px; font-size: 12px; text-align: right; border-top: 1px solid #ddd; padding-top: 15px;">
            <div style="margin-bottom: 8px;">
                <strong>Total Kilograms:</strong> r:   zt Kg
            </div>
            <div style="margin-bottom: 8px;">
                <strong>Total Liters:</strong> r;   zt Lts
            </div>
            <div style="margin-bottom: 8px;">
                <strong>Total Units:</strong> r<   z~ Units
            </div>
            <div style="margin-bottom: 8px;">
                <strong>Total Shipping (Kg):</strong> r=   z} Kg
            </div>
            <div style="margin-bottom: 8px;">
                <strong>Total Pallets (Units):</strong> r>   z Units
            </div>r@   rB   r?   u_   
            <div style="margin-bottom: 8px;">
                <strong>Discount:</strong> €. z
            </div>um   
            <div style="margin-bottom: 8px;">
                <strong>Total without Discount:</strong> €. z\
            <div style="margin-bottom: 8px;">
                <strong>Total with Discount (rA   u   %):</strong> €. z</div>r,   r   totals_htmldiscount_amountr   totalss     r   get_totals_htmlzMTemplateClass.generate_shopping_html_for_own_company.<locals>.get_totals_html      3 483G3GzHZ3[2\ ]0 150D0DVKEX0Y/Z [/ 04/C/CF;DW/X.Y Z7 8<7K7KFSfLg7h6i j9 :>9M9MfUdNe9f8g hK& m$0E)F)R"()A"BVLaEb"b $1151E1Eo1V0W X  
   ??C?S?STZ[sTt?u>v w K m$0E)F)R $..2.@.@HeAf.g-hhz{  |P  |P  QW  Xm  Qn  |o  {p p  
 8#Kr   c              3   4   K   | ]  }|j                     y wr   r   rd   rV   s     r   rf   zGTemplateClass.generate_shopping_html_for_own_company.<locals>.<genexpr>       Fd))F      r   r1   KgLtsUnitsr1   r!   r2    /
            </tbody>
        </table>
        @
        <div style="page-break-before: always;"></div>
        ad  
        <table>
            <thead>
                <tr>
                    <th>Code</th>
                    <th>Product</th>
                    <th>Kg/Lts/Un</th>
                    <th>Cont</th>
                    <th>Unit Cost</th>
                    <th>Amount</th>
                </tr>
            </thead>
            <tbody>
                TS
                <tr>
                    <td colspan="6" style="background-color: :; font-weight: bold; text-align: center; font-size:20px;">,</td>
                </tr>
                &
            <tr>
                <td></td>
                <td>    </td>
                <td>€. $</td>
            </tr>
            z)
        </body>
        </html>
        )"r   rC   r   rD   rE   rF   r   r   r   utcnowstrftimesortedrI   r]   r   set	enumerater   rJ   getrK   r   r   colorcategorycoder   rP   r   rL   rN   r,   rQ   r&   )r   r-   rE   shopping_datar   htmlsorted_productsr   
total_rows
categoriesuse_paginationitems_per_pagecurrent_category_id	row_count
page_countirV   rW   unitcategory_changedcategory_datar}   r~   r   r   r   s   `                    @@@@@r   &generate_shopping_html_for_own_companyz4TemplateClass.generate_shopping_html_for_own_company   s   Vnm4;;M<L<LPR<RSYY[@MR_RoRo#m;;<uxy{u| ))*5	6	* 
	 	+#L !4KL //b9(	V )
FoFF
c*o%
 $b"	
 !1 7	GAt77==6==looQUQ`Q`>`aggiL'266t7K7KRPD  $//3FF )~"=   #
  
# & 	a
&*##'    $m < C CMDTDTX\XhXhDh i o o q >>K>Q>Q=R  SM  N[  Nd  Nd  Me e 
 '+&6&6#Q	  !&&' (''(<(<=> ?''(A(ABC1TF K''67 8..t/C/CDE F..uT5N5N/ORWX\XlXlRm/mno p	 	D NIo7	t 	 	   	 
 	  	
 r   c                    !"#$% d"d% j                   j                  t              j                  t        j                  |k(        j                         }|r!|j                  rt        |j                        n
t        |      #t        j                         j                  d      !!"#%fd} j                  ||      $ $fd}d |        d}t        |j                  d 	      }t        |      }t        d
 |D              }	|t        |	      z  }|dkD  }
d}d }d}d}t!        |      D ]  \  }} j                   j                  t"              j                  t"        j                  |j$                  k(        j                         }|j&                  dk(  s|j&                  dk(  s|j&                  dk(  r j                   j                  t(              j                  t(        j$                  |j$                  k(        j                         }|st+        d|j$                   d      	 t-        |j.                        }t-        |j0                        }t-        |j2                        }ddddj5                  |j&                  d      }|j6                  |k7  }|
r+||k\  r&|d |       z   dz    |       z   dz   z  }d}|dz  }d }d}|r j                   j                  t8              j                  t8        j                  |j6                  k(        j                         }|d|j:                   d|j<                   dz  }|j6                  }|dz  }|d |j>                   d! jA                  |jB                         d! jE                  |j.                         d"| d! jE                  |jF                         d# jI                  |jJ                         d# jI                  |j.                  |jJ                  z         d$z  }|dz  } |d |       z   z  }|d% |        d&z  }t        |j                  d' 	      }d }d(}g }|D ]  } j                   j                  t"              j                  t"        j                  |j$                  k(        j                         } j                   j                  t(              j                  t(        j$                  |j$                  k(        j                         } j                   j                  tL              j                  tL        jN                  |k(  tL        j$                  |j$                  k(        j                         }|j&                  dk(  s |j&                  dk(  s|j&                  dk(  sJ j                   j                  t(              j                  t(        j$                  |j$                  k(        j                         }|rt-        |jP                        nd(}|t-        |jF                        z  }|rt-        |j2                        nd)}||z  }|jS                  |r|jB                  nd*||d+         jU                  |      }t        |      } |d, jI                  $d-          d. jI                  $d/          dz  }|d0z  }|S # t*        $ r t+        d|j$                   d      w xY w)1Nrw   rx   ry   c            	      "    d d d d  d	S r{   rb   r|   s   r   r   zQTemplateClass.generate_shopping_html_for_customs_company.<locals>.get_page_headers  r   r   c                     dj                  d          dj                  d          dj                  d          dj                  d          d	j                  d
          d} d   r(d   #d   d   z
  }| dj                  |       dz  } | dj                  d          dz  } d   r5d   0| dj                  d          dj                  d          dz  } | dz  } | S r   r   r   s     r   r   zQTemplateClass.generate_shopping_html_for_customs_company.<locals>.get_totals_html  r   r   a  
        <html>
            <head>
            <meta charset="utf-8">
            <style>@page { margin: 2cm 1.5cm; size: A4 portrait; }
                body { font-family: Arial, sans-serif; font-size: 14px; line-height: 1.4; margin: 0; padding: 0; }
                table { border-collapse: collapse; width: 100%; margin-top: 20px; page-break-inside: auto; }
                th, td { border: 1px solid #ddd; padding: 8px; text-align: left; word-wrap: break-word; max-width: 150px; }
                th { background-color: #f2f2f2; } tr { page-break-inside: avoid; page-break-after: auto; }
                .logo { width: 200px; }
                .vitrificado_logo { width: 120px; }
                .header {
                    display: flex;
                    justify-content: space-between;
                    align-items: center;
                    margin-bottom: 20px;
                }
                .title { text-align: center; margin-top: 20px; margin-bottom: 30px; }
                .page-break {
                    page-break-before: always;
                    break-before: page;
                }
            </style>
            </head>
            <body>
            a  

            <table>
                <thead>
                    <tr>
                        <th>Pos Item no.</th>
                        <th>Description</th>
                        <th>Cont</th>
                        <th>Kg/Lts/Un</th>
                        <th>Price</th>
                        <th>Amount</th>
                    </tr>
                    </thead>
                    <tbody>
                c                     | j                   S r   r   r   s    r   r   zJTemplateClass.generate_shopping_html_for_customs_company.<locals>.<lambda>  r   r   r   c              3   4   K   | ]  }|j                     y wr   r   r   s     r   rf   zKTemplateClass.generate_shopping_html_for_customs_company.<locals>.<genexpr>  r   r   r   r   r1   r!   r2   zProducto con ID u,    no tiene configuración en UnitFeatureModelzCError al convertir valores de UnitFeatureModel a float (product_id=)r   r   r   r   r   r   r   al  
        <table>
            <thead>
                <tr>
                    <th>Pos Item no.</th>
                    <th>Description</th>
                    <th>Cont</th>
                    <th>Kg/Lts/Un</th>
                    <th>Price</th>
                    <th>Amount</th>
                </tr>
            </thead>
            <tbody>
                Tr   r   r   r   r   r   r   r   u   
        <!-- Salto de página -->
        <div class="page-break"></div>

        <!-- Segunda página -->
        <div class="page-break">
            a  

            <table>
                <thead>
                    <tr>
                        <th>Total Weight</th>
                        <th>Pallet Number</th>
                    </tr>
                    </thead>
                    <tbody>
                c                     | j                   S r   r   r   s    r   r   zJTemplateClass.generate_shopping_html_for_customs_company.<locals>.<lambda>U  r   r   r0   r3   r4   r5   z.
                <tr>
                    <td>r=   z! Kg</td>
                    <td>r>   z_
            </tbody>
        </table>
        </div>

        </body>
        </html>
        )+r   rC   r   rD   rE   rF   r   r   r   r   r   r]   r   rI   r   r   r   r   rJ   rK   r   r)   r&   rL   quantity_per_palletr8   r   r   r   r   r   r   r   rP   r   rN   r,   rQ   r	   r.   rM   rO   rR   )&r   r-   rE   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   rW   unit_featuresrL   r   r8   r   r   r   total_weight_per_shoppingrS   rX   rY   rM   rZ   r\   how_many_palletsr}   r~   r   r   r   s&   `                                @@@@@r   *generate_shopping_html_for_customs_companyz8TemplateClass.generate_shopping_html_for_customs_companyk  s   Vnm4;;M<L<LPR<RSYY[@MR_RoRo#m;;<uxy{u| ))*5	8 //b9(	T2   3'T !4KL )
FoFF
c*o%
 $b"	
 !1 G	GAt77==6==looQUQ`Q`>`aggiL##q(D,@,@A,EI]I]abIbGGMM"23V,774??JKUW  %$'77HHt%uvv+01S1S+T(*/0Q0Q*R'(-m.M.M(N% '266t7K7KRPD  $//3FF )~"=   #
  
# & 	a
&*##'    $m < C CMDTDTX\XhXhDh i o o q >>K>Q>Q=R  SM  N[  Nd  Nd  Me e 
 '+&6&6#Q	  !&&' (''(<(<=> ?''(A(ABC1TF K''67 8..t/C/CDE F..t/H/H4K_K_/_`a b	 	D NIOG	R 	 	   	 
 	   
  	$ !4KL"$'!# 	D77==6==looQUQ`Q`>`aggiL77==)9:AABRB]B]aeapapBpqwwyL#ww}}-ABIIJ^JjJjnpJp  sG  sR  sR  VZ  Ve  Ve  se   f   l   l   n##q(D,@,@A,EI]I]abIbGGMM"23V,774??JKUW  JV%(D(D"E[^'6?O?X?X9Y'Y$MYE,*H*H$I_e!)-AA) $$4@L00i$8):& +	8 ">>}M12 	 --f5H.IJK L--f_.EFG H 	 	 	 	 M " $'jkokzkzj{{|%}~~s   -?Z--#[c                    dd| j                   j                  t              j                  t        j                  |k(        j                         }|r!|j                  rt        |j                        n
t        |      t        j                         j                  d      fd}d |        d}t        |j                  d       }t        |      }t        d	 |D              }|t        |      z  }|d
kD  }	d
}
d }d}d}t        |      D ]  \  }}| j                   j                  t               j                  t         j                  |j"                  k(        j                         }ddddj%                  |j&                  d      }|j(                  |k7  }|	r||
k\  r|d |        dz  }d}|dz  }d }d}|r| j                   j                  t*              j                  t*        j                  |j(                  k(        j                         }|d|j,                   d|j.                   dz  }|j(                  }|dz  }|d|j0                   d| j3                  |j4                         d| j7                  |j8                         d| d| j7                  |j:                         dz  }|dz  } |dz  }|S )Nrw   rx   ry   c            	      "    d d d d  d	S r{   rb   r|   s   r   r   zJTemplateClass.generate_shopping_html_for_supplier.<locals>.get_page_header  r   r   a  
        <html>
        <head>
        <meta charset="utf-8">
        <style>@page { margin: 2cm 1.5cm; size: A4 portrait; }
            body { font-family: Arial, sans-serif; font-size: 14px; line-height: 1.4; margin: 0; padding: 0; }
            table { border-collapse: collapse; width: 100%; margin-top: 20px; page-break-inside: auto; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; word-wrap: break-word; max-width: 150px; }
            th { background-color: #f2f2f2; } tr { page-break-inside: avoid; page-break-after: auto; }
            .logo { width: 200px; }
            .vitrificado_logo { width: 120px; }
            .header {
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin-bottom: 20px;
            }
            .title { text-align: center; margin-top: 20px; margin-bottom: 30px; }
        </style>
        </head>
        <body>
        a  

        <table>
            <thead>
            <tr>
                <th>Pos Item no.</th>
                <th>Description</th>
                <th>Kg/Lts/Un</th>
                <th>Cont</th>
            </tr>
            </thead>
            <tbody>
        c                     | j                   S r   r   r   s    r   r   zCTemplateClass.generate_shopping_html_for_supplier.<locals>.<lambda>  r   r   r   c              3   4   K   | ]  }|j                     y wr   r   r   s     r   rf   zDTemplateClass.generate_shopping_html_for_supplier.<locals>.<genexpr>  r   r      r   r1   r   r   r   r   r   a  
            </tbody>
        </table>
        <div style='width:100%;'>
            <span style='float:left; font-size:16px; font-style:italic; color:#000; margin-top:50px;'>Continue on the next page</span>
        </div>
        <div style="page-break-before: always;"></div>
        a%  
        <table>
            <thead>
                <tr>
                    <th>Pos Item no.</th>
                    <th>Description</th>
                    <th>Kg/Lts/Un</th>
                    <th>Cont</th>
                </tr>
            </thead>
            <tbody>
                TzS
                <tr>
                    <td colspan="4" style="background-color: r   r   r   r   r   r   zO
            </tbody>
        </table>
        </body>
        </html>
        )r   rC   r   rD   rE   rF   r   r   r   r   r   r   rI   r   r   r   r   rJ   r   rK   r   r   r   r   r   r   rP   r   rL   rN   )r   r-   rE   r   r   r   r   r   r   r   r   r   r   r   r   rV   rW   r   r   r   r}   r~   r   r   s                       @@@@r   #generate_shopping_html_for_supplierz1TemplateClass.generate_shopping_html_for_supplier  s   Vnm4;;M<L<LPR<RSYY[@MR_RoRo#m;;<uxy{u| ))*5	6	* 
	 	+!H !4KL )
FoFF
c*o%
 $b"	
 !1 5	GAt77==6==looQUQ`Q`>`aggiL'266t7K7KRPD  $//3FF )~"= 	 
	  & 	a
&*##'    $m < C CMDTDTX\XhXhDh i o o q >>K>Q>Q=R  SM  N[  Nd  Nd  Me e 
 '+&6&6#Q	  !&&' (''(<(<=> ?''(A(ABC1TF K''67 8 D NIk5	n 	 	 	 r   r   c                 p    d}t        j                  |      }ddi}t        j                  |d||      }|S )Nz/usr/bin/wkhtmltopdf)wkhtmltopdfzenable-local-file-accessr   F)configurationoptions)pdfkitr   from_string)r   r   path_wkhtmltopdfconfigr   	pdf_bytess         r   html_to_pdf_byteszTemplateClass.html_to_pdf_bytes"  sH    1%%(

 '
 &&tU&RYZ	r   c                     d}d}| j                   j                  t              j                  t        j                  |j
                  k(        j                         }d| d}|S )Nrw   rx     
        <html>
        <head>
        <meta charset="utf-8">
        <style>@page { margin: 2cm 1.5cm; size: A4 portrait; }
            body { font-family: Arial, sans-serif; font-size: 14px; line-height: 1.4; margin: 0; padding: 0; }
            table { border-collapse: collapse; width: 100%; margin-top: 20px; page-break-inside: auto; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; word-wrap: break-word; max-width: 150px; }
            th { background-color: #f2f2f2; } tr { page-break-inside: avoid; page-break-after: auto; }
            .logo { width: 200px; }
            .vitrificado_logo { width: 120px; }
            .header {
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin-bottom: 20px;
            }
            .title { text-align: center; margin-top: 20px; margin-bottom: 30px; }
        </style>
        </head>
        <body>
        <div class="header">
            <img src="u  " class="vitrificado_logo float-left" />
        </div>

        <div style="text-align: justify; font-size: 12px;">
            Estimados,

            Junto con saludarles cordialmente, les informamos que adjunto a este correo encontrarán un nuevo pedido generado desde nuestra plataforma de gestión interna.

            El archivo PDF incluye el detalle completo de los productos requeridos. Agradecemos su confirmación de recepción y quedamos atentos a cualquier comentario o requerimiento adicional.
            <br><br>
            Saludos cordiales,
            <br>
            <h4>Equipo de VitrificadosChile</h4>
        </div>

        </body>
        </html>
        r   rC   r   rD   rE   supplier_idrF   r   r-   r~   r   supplier_datar   s         r   #spanish_generate_email_content_htmlz1TemplateClass.spanish_generate_email_content_html1  f    Vnm4;;M<L<LPTP`P`<`aggi, ,, -	-'R r   c                     d}d}| j                   j                  t              j                  t        j                  |j
                  k(        j                         }d| d}|S )Nrw   rx   r   a  " class="vitrificado_logo float-left" />
        </div>

        <div style="text-align: justify; font-size: 12px;">
            Dear Berger-Seidle team,

            We warmly greet you and inform you that attached to this email you will find a new order generated from our internal management platform.

            The PDF file includes the complete details of the requested products. We appreciate your confirmation of receipt and remain attentive to any comments or additional requirements.
            <br><br>
            Best regards,
            <br>
            <h4>The VitrificadosChile Team</h4>
        </div>

        </body>
        </html>
        r   r   s         r   #english_generate_email_content_htmlz1TemplateClass.english_generate_email_content_htmla  r   r   N)#   )__name__
__module____qualname__r   r   r   r,   r   r   r]   rR   r   r   r   r   bytesr   r   r   rb   r   r   r   r      s    )" P
.A P
PS P
d"HJ;N JWZ JX_?R _[^ _B	T8K TTW Tlc e .8K .PS .`.8K .PS .r   r   )app.backend.schemasr   r   ior   app.backend.db.modelsr   r   r   r   r	   r
   r   r   mathr   rb   r   r   <module>r      s2    3   R  R  R  G Gr   