
    ]Eh                     H    d dl mZmZmZ d dlmZ d dlmZmZ  G d d      Z	y)    )ProductModelProductCategoryModelExpenseTypeModel)Session)functextc                   D    e Zd ZdefdZd ZddZd Zd Zd Z	d	 Z
d
 Zy)ProductClassdbc                     || _         y )N)r   )selfr   s     M/var/www/intrajisbackend.com/public_html/app/backend/classes/product_class.py__init__zProductClass.__init__   s	        c                 (   	 | j                   j                  t              j                  t        j                  dk(        j                  t        j                        j                         }|S # t        $ r}t        |      }d| cY d }~S d }~ww xY wN   Error: )
r   queryr   filtervisibility_idorder_bydescriptionall	Exceptionstr)r   dataeerror_messages       r   get_listzProductClass.get_list	   su    		-77==.F<55:;H\556CE 
 K 	-FM]O,,	-s   A+A. .	B7BBBNc                 L   	 | 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                  j%                  d            j'                  t        t        j                  t        j                  k(        j'                  t         t)        d            }|7|dk7  r2|j+                  t        j                  j-                  d| d            }|7|dk7  r2|j+                  t        j                  j/                  d| d            }|j1                  t        j                  j3                               }|j5                  |dz
  |z        j7                  |      j9                         }|j;                         }||z   dz
  |z  }|dk  s||kD  ry|sy|D 	cg c]  }	|	j                  |	j                  |	j
                  |	j                  |	j                  |	j<                  |	j                  |	j                  |	j                  |	j                  |	j                  |	j                  |	j                  |	j"                  d }
}	|||||
d	S c c}	w # t>        $ r}tA        |      }d
| cY d }~S d }~ww xY w)Nexpense_type_idz~expense_types.accounting_account COLLATE utf8mb4_unicode_ci = product_categories.accounting_account COLLATE utf8mb4_unicode_ci %r   zInvalid page numberNo data found)idproduct_category_idr   coder   r"   	min_stock	max_stockmeasurebalance
added_dateupdated_dateproduct_categoryexpense_type)total_itemstotal_pagescurrent_pageitems_per_pager   r   )!r   r   r   r&   r'   r   r(   r   r)   r*   r+   r,   r-   r.   r   r/   r   r0   label	outerjoinr   r   likeiliker   ascoffsetlimitr   countr"   r   r   )r   pager4   r(   r   
data_queryr   r1   r2   productserialized_datar   r   s                r   get_allzProductClass.get_all   s   I	-00**!!((&&&&$$$$''))$55 -- ##))*;< i$&:&=&=AaAa&ai   V  W# . DBJ'..|/@/@/E/E$qk/RS
&;"+<'..|/G/G/M/MPQR]Q^^_N`/ab
 $,,\-E-E-I-I-KLJ $$dQh.%@AGGW[[]D$**,K&7!;NKax4+-,&$ "#  jj'.'B'B!(!6!6&22#*#:#:$..$.."??"??%00 ' 4 4$+$<$< ' 4 4  #O #$  +* $"0' ##2  	-FM]O,,	-s=   IL  L  	L  B$K;1	L  ;L   	L#	LL#L#c                     	 | j                   j                  t              j                  t	        t        |      |k(        j                         }|S # t        $ r}t        |      }d| cY d }~S d }~ww xY w)Nr   )r   r   r   r   getattrfirstr   r   )r   fieldvaluer   r   r   s         r   getzProductClass.geta   se    	-77==.55glE6RV[6[\bbdDK 	-FM]O,,	-s   AA 	A4A/)A4/A4c                    	 t               }|j                  |_        |j                  |_        |j                  |_        |j                  |_        |j
                  |_        |j                  |_        |j                  |_        |j                  |_        | j                  j                  |       | j                  j                          y# t        $ r}t        |      }d| cY d }~S d }~ww xY wr   )r   r'   r   r(   r   r)   r*   r+   r,   r   addcommitr   r   )r   product_inputsr?   r   r   s        r   storezProductClass.storei   s    	-"nG*8*L*LG'$2$@$@G!)..GL"0"<"<G . 8 8G . 8 8G,44GO,44GOGGKK GGNN 	-FM]O,,	-s   CC
 
	C-C("C-(C-c                 \   	 | j                   j                  t              j                  t        j                  |k(        j                         }|r6| j                   j                  |       | j                   j                          yy# t        $ r}t        |      }d| cY d }~S d }~ww xY w)Nr   r%   r   )
r   r   r   r   r&   rD   deleterJ   r   r   )r   r&   r   r   r   s        r   rN   zProductClass.delete|   s    
	-77==.55loo6KLRRTDt$ & 	-FM]O,,	-s   BB 	B+B& B+&B+c                 6   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sy|j                  |_        |j                  |_        |j                  |_        |j                  |_	        |j                  |_
        |j                  |_        |j                  |_        |j                  |_        | j                   j                          y# t        $ r}t!        |      }d| cY d }~S d }~ww xY w)Nr%   r   r   )r   r   r   r   r&   one_or_noner'   r   r(   r   r)   r*   r+   r,   rJ   r   r   )r   r&   	form_dataexisting_productr   r   s         r   updatezProductClass.update   s    	-#ww}}\:AA,//UWBWXddf#&3<3P3P0-6-D-D*$-NN!+4+@+@()2)<)<&)2)<)<&'0'8'8$'0'8'8$GGNN 	-FM]O,,	-s%   AC5 B"C5 5	D>DDDc                 2   	 | j                   j                  t              j                  t        j                  |k(        j                         }|s	dd| ddS |dk(  r|xj                  |z  c_        nQ|dk(  rG|j                  |k  r"dd|j                   d|j                   d	| dS |xj                  |z  c_        ndd
dS | j                   j                          dd|j                  dS # t        $ r}t        |      }dd| dcY d}~S d}~ww xY w)zp
        Actualizar el stock de un producto
        operation: 'add' para sumar, 'subtract' para restar
        errorzProduct with ID z
 not found)statusmessagerI   subtractzInsufficient stock for product z. Available: z, Required: z*Invalid operation. Use 'add' or 'subtract'successzStock updated successfully)rV   rW   new_balancezError updating stock: N)r   r   r   r   r&   rD   r,   r   rJ   r   r   )r   
product_idquantity	operationr?   r   r   s          r   update_stockzProductClass.update_stock   s=   
	\ggmmL188J9VW]]_G")8HT^6_``E!8+j(??X-&-<[\c\o\o[pp}  F  N  N  ~O  O[  \d  [e  ;f  g  g8+")6bccGGNN'4Pahapapqq 	\FM%4J=/2Z[[	\s1   AC0 AC0 +C0 )C0 0	D9DDD)r   
   NN)__name__
__module____qualname__r   r   r    rA   rG   rL   rN   rS   r^    r   r   r
   r
      s4    7 
-J-X--&--,\r   r
   N)
app.backend.db.modelsr   r   r   sqlalchemy.ormr   
sqlalchemyr   r   r
   rc   r   r   <module>rg      s    V V " !s\ s\r   