
    Hh                     `    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
m
Z
 d dlmZ  G d d      Zy)    )ProductModelSupplierModelUnitFeatureModelCategoryModelLotModelLotItemModelUnitMeasureModel)	FileClass)datetime)funcc                   P    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zy)ProductClassc                     || _         y )N)db)selfr   s     dC:\Users\jesus\OneDrive\Escritorio\backend-lacasadelvitrificado\app\backend\classes\product_class.py__init__zProductClass.__init__   s	        Nc           	      *   	 | j                   j                  t        j                  t        j
                  j                  d      t        j                  j                  d      t        j                  t        j                        j                  t        t        j                  t        j                  k(  d      j                  t        t        j                  t        j                  k(  d      }|r"|j                  t        j                  |k(        }|r"|j                  t        j                  |k(        }|j                  t        j                        }|dkD  r|j!                         }||z   dz
  }|dk  s||kD  rddd	S |j#                  |dz
  |z        j%                  |      j'                         }|sdd
d	S |D 	cg c]<  }	|	j                  |	j
                  |	j                  |	j                  |	j                  d> }
}	|||||
dS |j'                         }|D 	cg c]<  }	|	j                  |	j
                  |	j                  |	j                  |	j                  d> }
}	|
S c c}	w c c}	w # t(        $ r}t+        |      }d|d	cY d }~S d }~ww xY w)NsuppliercategoryTisouterr      errorzInvalid page numberstatusmessageNo data found)idr   r   codeproduct)total_itemstotal_pagescurrent_pageitems_per_pagedata)r   queryr   r    r   r   labelr   r   r!   r"   joinsupplier_idcategory_idfilterorder_bycountoffsetlimitall	Exceptionstr)r   pager&   r+   
product_idr(   r#   r$   r'   r"   serialized_dataeerror_messages                r   get_allzProductClass.get_all
   s]   B	A OO!**00<!**00< %% (( m]%5%59Q9Q%Q[_`m]%5%59Q9Q%Q[_`  \%=%=%LM\__
%BC NN<#7#78Eax#kkm*^;a?!8tk1&-:OPP||TAX$?@FF~VZZ\&-/JJ "&#'  "** ' 0 0 ' 0 0#LL&$ #' #' $/#.$(&4+  yy{ "&#'  "** ' 0 0 ' 0 0#LL&$ #' #' '&7#'&#'  	AFM%-@@	AsP   E?I/ :I/ =I/ AI%	I/ I/  AI*!I/ %
I/ /	J8JJJc                 b   	 | j                   j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t#        j$                  t&        j(                        j+                  d      t#        j$                  t&        j,                        j+                  d            j/                  t        t        j                  t        j0                  k(  d      j/                  t        t        j                  t        j2                  k(  d      j/                  t        t        j                  t        j                  k(  d      j/                  t&        t&        j4                  t        j                  k(  d      j7                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                         j9                  t        j
                        }|D cg c]  }|j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j(                  |j(                  nd|j,                  |j,                  ndd }}d|iS c c}w # t:        $ r}t=        |      }d|d	cY d }~S d }~ww xY w)
Npublic_sale_priceprivate_sale_priceTr   r   )r    r!   r"   unit_measurer   r   r,   photocatalogshort_descriptiondescriptionr<   r=   r'   r   r   )r   r(   r   r    r!   r"   r	   r>   r   r   r   r   r,   r?   r@   rA   rB   r   maxr   r<   r)   r=   r*   unit_measure_idr+   r6   group_byr.   r3   r4   )r   r'   r"   r7   r8   r9   s         r   get_listzProductClass.get_listO   s   ;	A OO %% (($11!**!** ,, && (( 22 ,,HH\;;<BBCVWHH\<<=CCDXY &(8(;(;|?[?[([eijm]%5%59Q9Q%Q[_`m]%5%59Q9Q%Q[_`lL$;$;|$NX\] OO %% (($11!**!** ,, && (( 22 ,, ,../C d "&'  "**#LL&$+$8$8 ' 0 0 ' 0 0#*#6#6$]]&)0)B)B#*#6#6FMF_F_Fk)B)BqrHOHbHbHn'*D*Dtu  'O '"  !'(  	AFM%-@@	As1   K	N B5N N N 	N.N)#N.)N.c           	      2   	 t        di d|j                  d|j                  d|j                  d|j                  d|j
                  d|j                  d|j                  d|j                  d	|j                  d
|j                  d|j                  d|j                  d|d|dt        j                         dt        j                         }| j                  j!                  |       | j                  j#                          | j                  j%                  |       t'        |j(                  |j*                  |j,                  |j.                  |j0                  t        j                               }| j                  j!                  |       | j                  j#                          | j                  j%                  |       d|j(                  dS # t2        $ r2}| j                  j5                          dt7        |      dcY d }~S d }~ww xY w)Nr+   r,   rD   r!   discount_percentagefinal_unit_costoriginal_unit_costr"   rA   rB   is_compoundcompound_product_idr?   r@   
added_dateupdated_date)r6   quantity_per_packagequantity_per_palletweight_per_unitweight_per_palletrM   z!Producto registrado exitosamente.)r   r6   r   r    )r   r+   r,   rD   r!   rH   rI   rJ   r"   rA   rB   rK   rL   r   utcnowr   addcommitrefreshr   r    rO   rP   rQ   rR   r3   rollbackr4   )r   product_inputsr?   r@   new_productnew_unit_featurer8   s          r   storezProductClass.store   s   ,	:& *66*66 !/ > > $((	
 %3$F$F !/ > > $2#D#D '.. #1"B"B +66 +66 %3$F$F    $??,  &__.!K& GGKK$GGNNGGOOK(/*~~)7)L)L(6(J(J$2$B$B&4&F&F'0  GGKK()GGNNGGOO,- >)nn 
  	:GG%#a&99	:s   GG 	H$'HHHc                 T   	 |dk(  s||| j                   j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t#        j$                  t&        j(                        j+                  d      t#        j$                  t&        j,                        j+                  d      t#        j.                  t&        j0                        j+                  d      t#        j2                  t5        j6                  j9                  d      t4        j6                              j+                  d            j;                  t        t        j                  t        j<                  k(  d      j;                  t        t        j                  t        j>                  k(  d      j;                  t        t        j                  t        j                  k(  d      j;                  t&        t&        j@                  t        j                  k(        j;                  t4        t4        j                  t&        jB                  k(        jE                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                         jG                  t        j
                        }nl| j                   j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        jH                  t        jJ                        j;                  t        t        j                  t        j<                  k(  d      j;                  t        t        j                  t        j>                  k(  d      j;                  t        t        j                  t        j                  k(  d      jM                  t        j                  |k(        jE                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                         jG                  t        j
                        }|D cg c]~  }|j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   d	 }}d
|iS c c}w # tN        $ r}tQ        |      }d|dcY d }~S d }~ww xY w)Nr   r<   r=   total_stockORDER BYlot_numbersTr   )r    r!   r"   r>   r   r   r,   r?   r@   rA   rB   r'   r   r   ))r   r(   r   r    r!   r"   r	   r>   r   r   r   r   r,   r?   r@   rA   rB   r   rC   r   r<   r)   r=   sumquantitygroup_concatr   
lot_numberopr*   rD   r+   r6   lot_idrE   r.   rH   rI   r-   r3   r4   r   r,   r'   r"   r7   r8   r9   s          r   sale_list_by_categoryz"ProductClass.sale_list_by_category   s|   b	Aa;#6GGMM$$))$,,(55%..%..$00$**$,,$66$00!?!?@FFGZ[!@!@AGGH\]!6!67==mL))(*=*=*@*@*LXM`M`*abhhivw" T*,<,?,?<C_C_,_imTnT-)9)9\=U=U)U_cTdT-)9)9\=U=U)U_cTdT,(?(?<??(RST(HKK<3F3F$FGX$$))$,,(55%..%..$00$**$,,$66$00 Xl223I P GGMM$$))$,,(55%..%..$00$**$,,$66$00$88$44 T*,<,?,?<C_C_,_imTnT-)9)9\=U=U)U_cTdT-)9)9\=U=U)U_cTdVL44CDX$$))$,,(55%..%..$00$**$,,$66$00 Xl223C ` "&'  "**#LL&$+$8$8 ' 0 0 ' 0 0#*#6#6$]]&)0)B)B#*#6#6  'O '  '$  	AFM%-@@	As1   W4Z 6BY?9Z ?Z 	Z'Z"Z'"Z'c                 x   	 |dk(  s||| j                   j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t#        j$                  t&        j(                        j+                  d      t#        j$                  t&        j,                        j+                  d      t#        j.                  t&        j0                        j+                  d      t#        j2                  t5        j6                  j9                  d      t4        j6                              j+                  d            j;                  t        t        j                  t        j<                  k(  d      j;                  t        t        j                  t        j>                  k(  d      j;                  t        t        j                  t        j                  k(  d      j;                  t&        t&        j@                  t        j                  k(        j;                  t4        t4        j                  t&        jB                  k(        jE                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                         jG                  t        j
                        }n| j                   j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t#        j$                  t&        j(                        j+                  d      t#        j$                  t&        j,                        j+                  d      t#        j.                  t&        j0                        j+                  d      t#        j2                  t5        j6                  j9                  d      t4        j6                              j+                  d            j;                  t        t        j                  t        j<                  k(  d      j;                  t        t        j                  t        j>                  k(  d      j;                  t        t        j                  t        j                  k(  d      j;                  t&        t&        j@                  t        j                  k(        j;                  t4        t4        j                  t&        jB                  k(        jI                  t        j                  |k(        jE                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                         jG                  t        j
                        }|D cg c]  }|j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j(                  |j(                  nd|j,                  |j,                  nd|jJ                  |jJ                  nd|jL                  r|jL                  nd	d
 }}d|iS c c}w # tN        $ r}tQ        |      }d|dcY d }~S d }~ww xY w)Nr   r<   r=   r^   r_   r`   Tr    )r    r!   r"   r>   r   r   r,   r?   r@   rA   rB   r<   r=   r^   r`   r'   r   r   ))r   r(   r   r    r!   r"   r	   r>   r   r   r   r   r,   r?   r@   rA   rB   r   rC   r   r<   r)   r=   ra   rb   rc   r   rd   re   r*   rD   r+   r6   rf   rE   r.   r-   r^   r`   r3   r4   rg   s          r   	sale_listzProductClass.sale_list!  s   j	Aa;#6GGMM$$))$,,(55%..%..$00$**$,,$66$00!?!?@FFGZ[!@!@AGGH\]!6!67==mL))(*=*=*@*@*LXM`M`*abhhivw" T*,<,?,?<C_C_,_imTnT-)9)9\=U=U)U_cTdT-)9)9\=U=U)U_cTdT,(?(?<??(RST(HKK<3F3F$FGX$$))$,,(55%..%..$00$**$,,$66$00 Xl223I P GGMM$$))$,,(55%..%..$00$**$,,$66$00!?!?@FFGZ[!@!@AGGH\]!6!67==mL))(*=*=*@*@*LXM`M`*abhhivw" T*,<,?,?<C_C_,_imTnT-)9)9\=U=U)U_cTdT-)9)9\=U=U)U_cTdT,(?(?<??(RST(HKK<3F3F$FGVL44CDX$$))$,,(55%..%..$00$**$,,$66$00 Xl223K p "&!'   "**#LL&$+$8$8 ' 0 0 ' 0 0#*#6#6$]]&)0)B)B#*#6#6FMF_F_Fk)B)BqrHOHbHbHn'*D*Dtu:A:M:M:Y7#6#6_`:A:M:M7#6#6SU  'O '&  %',  	AFM%-@@	As1   \"` $C'`` ` 	`9`4.`94`9c                 	   	 | j                   j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t         j"                        j%                  d      t        j                  t         j&                        j%                  d      t        j(                  t         j*                        j%                  d      t        j,                  t/        j0                  j3                  d      t.        j0                              j%                  d            j5                  t         t         j6                  t        j                  k(        j5                  t.        t.        j                  t         j8                  k(        j;                  t        j                  |k(        j=                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                        j?                         }|sddiS i d|j                  d	|j                  d
|j
                  d|j                  d|j                  d|j                  d|j                  d|j                  d|j                  d|j                  d|j                  d|j"                  |j"                  ndd|j&                  |j&                  ndd|j@                  |j@                  ndd|jB                  r|jB                  nddd }|j                  dk(  s|j                  dk(  s|j                  dk(  r| j                   j                  tD              j;                  tD        j6                  |k(        j?                         }|rS|j6                  |jF                  |jH                  |jJ                  |jL                  |jN                  |jP                  d|d<   d|iS # tR        $ r}dtU        |      icY d }~S d }~ww xY w)Nr<   r=   r^   r_   r`   r   6No se encontraron datos para el producto especificado.r    r+   r,   r!   rJ   r"   rA   rB   rD   r?   r@   r   rj   featuresr         r6   rO   rP   rQ   rR   rM   rN   product_data)+r   r(   r   r    r+   r,   r!   r"   rJ   rA   rB   rD   r?   r@   r   rC   r   r<   r)   r=   ra   rb   rc   r   rd   re   r*   r6   rf   r-   rE   firstr^   r`   r   rO   rP   rQ   rR   rM   rN   r3   r4   r   r    
data_queryrr   rn   r8   s         r   	sale_datazProductClass.sale_data  s   P	%  OO ,, ,, %% (( 33 22 ,, 00 && ((HH\;;<BBCVWHH\<<=CCDXYHH\22399-H%%h&9&9&<&<Z&HI\I\&]^dders" lL$;$;|$NOh|/B/B BC2-. OO ,, ,, %% (( 33 22 ,, 00 && (( E J !YZZjmmz55 z55 
	
 %j&C&C :-- $Z%A%A z55 ":#=#= )) :-- $ZEaEaEmZ%A%Ast %zGdGdGpj&C&Cvw 9O9O9[z55ab 9O9Oz55UW  D!L& ))Q.*2L2LPQ2QU_UoUostUt77==)9:AA$//25%'  &.&9&9080M0M/7/K/K+3+C+C-5-G-G&.&9&9(0(=(=0L, #L11 	%SV$$	%s%   K1S 4GS 	S'S"S'"S'c                    	 | j                   j                  t        j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                        j%                  t        j                  |k(        j'                         }|sddiS i d|j                  d|j                  d|j
                  d|j                  d|j                  d|j                  d	|j                  d
|j                  d|j                  d|j                  d|j                  d|j                  d|j                  d|j                   d|j"                  dd }|j                  dk(  s|j                  dk(  s|j                  dk(  r| j                   j                  t(              j%                  t(        j*                  |k(        j'                         }|rS|j*                  |j,                  |j.                  |j0                  |j2                  |j4                  |j6                  d|d<   d|iS # t8        $ r}dt;        |      icY d }~S d }~ww xY w)Nr   rm   r    r+   r,   r!   rJ   rI   rH   r"   rA   rB   rD   rK   rL   r?   r@   rn   r   ro   rp   rq   rr   )r   r(   r   r    r+   r,   r!   r"   rJ   rH   rI   rA   rB   rD   rK   rL   r?   r@   r-   rs   r   r6   rO   rP   rQ   rR   rM   rN   r3   r4   rt   s         r   getzProductClass.get  s   <	%((((!!$$//00,,..((,,((00""$$  f\__*+EEG! $ !YZZjmmz55 z55 
	
 %j&C&C ":#=#= &z'E'E :-- $Z%A%A z55 ":#=#= z55 &z'E'E )) :--  D!L& ))Q.*2L2LPQ2QU_UoUostUt77==)9:AA$//25%'  &.&9&9080M0M/7/K/K+3+C+C-5-G-G&.&9&9(0(=(=0L, #L11 	%SV$$	%s%   D.K 1FK 	K,K'!K,'K,c                 (   	 | j                   j                  t              j                  t        j                  |k(        j                         }|r|j                  }| }t        | j                         j                  |       |j                  }| }t        | j                         j                  |       | j                   j                  |       | j                   j                          yy# t        $ r}t        |      }d| cY d }~S d }~ww xY w)Nsuccessr   zError: )r   r(   r   r-   r    rs   r?   r
   deleter@   rV   r3   r4   )r   r    rr   
photo_nameremote_pathcatalog_namer8   r9   s           r   r{   zProductClass.delete   s    	-77==6==looQS>STZZ\L)//
!+$''"))+6+33!-$''"))+6|,  & 	-FM]O,,	-s   C*C. .	D7DDDc           
         | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS 	 |j                  |_        |j                  |_        |j                  |_        |j                  |_	        |j                  |_
        |j                  |_        |j                  |_        |j                  |_        |j                  |_        |j                  |_        |j                   |_        |j"                  |_        |rA|j$                  r.t'        | j                         j)                  |j$                         ||_        |rA|j*                  r.t'        | j                         j)                  |j*                         ||_        t-        j.                         |_        |j                  dk(  s|j                  dk(  s|j                  dk(  r| j                   j                  t2              j5                  |      j7                         }|r^|j8                  |_        |j:                  |_        |j<                  |_        |j>                  |_        t-        j.                         |_        nyt3        ||j8                  |j:                  |j<                  |j>                  t-        j.                         t-        j.                               }| j                   jA                  |       | j                   jC                          | j                   jE                  |       d	d
dS # tF        $ r2}| j                   jI                          dtK        |      dcY d }~S d }~ww xY w)Nr   r   r   r   ro   rp   )r6   rq   rz   zProduct updated successfully)&r   r(   r   r-   r    one_or_noner+   r,   r!   r"   rA   rB   rH   rJ   rI   rD   rK   rL   r?   r
   r{   r@   r   rT   rN   r   	filter_byrs   rO   rP   rQ   rR   rU   rV   rW   r3   rX   r4   )	r   r    	form_dataphoto_remote_pathcatalog_remote_pathexisting_productunit_featurenew_featurer8   s	            r   updatezProductClass.update5  s   77==6==looQS>ST``b%/BB4	:+4+@+@(+4+@+@($-NN!'0'8'8$1:1L1L.+4+@+@(3<3P3P02;2N2N//8/H/H,/8/H/H,+4+@+@(3<3P3P0 #))dgg&--.>.D.DE): &"#++dgg&--.>.F.FG+> (,4OO,=)((A-1J1Ja1OS\SlSlpqSq#ww}}-=>HHTVHW]]_8A8V8VL57@7T7TL43<3L3LL05>5P5PL2080AL-"2#%-6-K-K,5,I,I(1(A(A*3*E*E#+??#4%-__%6#K GGKK,GGNNGGOO,-'4RSS 	:GG%#a&99	:s   K(L? ?	M:'M5/M:5M:c                    	 |j                         }| j                  j                  t        j                  t        j
                  t        j                  t        j                  t        j                  t        j                  t        j                  j                  d      t        j                  j                  d      t        j                  j                  d      t         j"                  j                  d      t        j$                        j'                  t        t        j                  t        j(                  k(        j'                  t        t        j                  t        j*                  k(  d      j'                  t         t         j                  t        j,                  k(  d      }|r,|j/                  t        j                  t1        |      k(        }n"|j/                  t        j                  |k(        }|j3                  t        j                        }|j5                         }|s	dd| g d	S g }|D ]  }|j7                  |j                  |j
                  |j                  |j                  |j                  |j                  |j8                  |j:                  |j<                  |j"                  |j$                  r|j$                  j?                  d
      ndd        ddtA        |       d|d   j8                   ||d   j8                  |d   j:                  ddS # tB        $ r}ddtE        |       dcY d}~S d}~ww xY w)a*  
        Obtiene productos filtrados por proveedor usando RUT o ID del proveedor.
        
        Args:
            supplier_identifier: RUT del proveedor (ej: "12345678-9") o ID del proveedor (ej: "123")
        
        Returns:
            Lista de productos del proveedor especificado
        supplier_namesupplier_rutcategory_namer>   Tr   rz   z/No se encontraron productos para el proveedor: )r   r   r'   z%Y-%m-%d %H:%M:%SN)r    r!   r"   rB   r?   r@   r   r   r   r>   rM   zSe encontraron z productos del proveedor: r   )r   r   )r   r   r'   supplier_infor   z*Error al obtener productos por proveedor: r   )#isdigitr   r(   r   r    r!   r"   rB   r?   r@   r   r   r)   identification_numberr   r   r	   r>   rM   r*   r+   r,   rD   r-   intr.   r2   appendr   r   r   strftimelenr3   r4   )r   supplier_identifieris_numeric_idr(   resultsformatted_dataresultr8   s           r   get_products_by_supplierz%ProductClass.get_products_by_supplierq  s   E	i/779M  OO %% (( ,, && ((!**00A!77==nM!**00A$1177G ++ m]%5%59Q9Q%QRm]%5%59Q9Q%Q[_`&(8(;(;|?[?[([eij! ( ]%5%5=P9Q%QR]%H%HL_%_` NN<#7#78EiikG'!PQdPef   N! %% ))"KK%~~#)#5#5#\\%~~%+%9%9$*$7$7%+%9%9$*$7$7U[UfUf&"3"3"<"<=P"Qlp'   $,S-@,AA[\cde\f\t\t[uv&%,QZ%=%=$+AJ$;$;"	   	i%4^_bcd_e^f2ghh	is%   H1L% 4C0L% %	M	.M>M	M	)r   
   NN)__name__
__module____qualname__r   r:   rF   r\   rh   rk   rv   rx   r{   r   r   rS   r   r   r   r      sK    CAJ<A|-:^cAJkAZQ%f=%~-*::xOir   r   N)app.backend.db.modelsr   r   r   r   r   r   r	   app.backend.classes.file_classr
   r   
sqlalchemyr   r   rS   r   r   <module>r      s.    I  I  I 4  z
i z
ir   