
    ]Eh8                     H    d dl mZ d dlmZmZmZmZ d dlmZ  G d d      Z	y)    )SessionLocal)ProductModelMovementModelMovementProductModelKardexValueModel)Sessionc                   ,    e Zd ZdefdZddZd Zd Zy)KardexValueClassdbc                     || _         y )N)r   )selfr   s     R/var/www/intrajisbackend.com/public_html/app/backend/classes/kardex_value_class.py__init__zKardexValueClass.__init__   s	        Nc           	      |   	 | j                   j                  t        j                  t        j                  t
        j                  t
        j                  t
        j                        j                  t
              }|j                  t        t        j                  t
        j                  k(        }g }|'|dkD  r"|j                  t
        j                  |k(         |'|dk7  r"|j                  t
        j                  |k(         |j                  t
        j                  dk(         |r |j                  | }|j                         j!                  t
        j                  j#                               }|dkD  r|j%                         }||z   dz
  |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> }}t-        |       ||	|||d	S |j+                         }
|
D cg c]<  }|j                  |j                  |j                  |j                  |j                  d> }}|S c c}w c c}w # t.        $ r}t1        |      }d|dcY d }~S d }~ww xY w)
Nr       errorzInvalid page numberstatusmessagezNo data foundidcodedescriptionquantitycost)total_itemstotal_pagescurrent_pageitems_per_pagedata)r   queryr   qtyr   r   r   r   r   select_from	outerjoin
product_idappendvisibility_idfilterdistinctorder_byasccountoffsetlimitallprint	Exceptionstr)r   r   r'   branch_office_idpager!   r#   filtersr   r   r"   rowserialized_dataeerror_messages                  r   get_allzKardexValueClass.get_all	   s   N	AGGMM $$ %%!!(( k,'  OO "2"="="PE
 G%*q.|*<=DBJ|00D89NN<55:;$g. NN$--l.F.F.J.J.LME ax#kkm*^;a?NR!8tk1&-:OPP ||TAX$?@FF~VZZ\&-/JJ "##  &&HH#&?? #HH$ ## ## o& $/#.$(&4+  99;D   ff"GG  O  #"9##(  	AFM%-@@	AsP   FJ  :J J AJ J 5J 	AJ
J 
J 	J;!J60J;6J;c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|ri|j                  xs d}|j                  xs d}||z   }|dk  r|}t        d|      }n!|dkD  r||z  ||z  z   }	t        |	|z        }n|}||_        ||_        n:t        |t        d|      |dkD  r|nd      }
| j                   j                  |
       | j                   j                          dddS # t        $ r5}| j                   j                          ddt        |       dcY d}~S d}~ww xY w)	z
        Crear/actualizar registro de kardex con costo promedio ponderado
        qty_change: cantidad a sumar o restar (positivo para entradas, negativo para salidas)
        new_cost: costo unitario del nuevo movimiento
        r   )r'   r$   r   successzKardex updated successfullyr   r   zError updating kardex: N)r   r#   r   r*   r'   firstr$   r   maxintaddcommitr3   rollbackr4   )r   r'   
qty_changenew_costcurrent_kardexcurrent_qtycurrent_costnew_qty_totalnew_avg_costtotal_cost_value
new_kardexr:   s               r   store_kardex_entryz#KardexValueClass.store_kardex_entryZ   sX   -	V!WW]]+;<CC ++z9eg  ,005A-227a !,j 8 A%#/L$'=$9M "A~,8;,F8V`K`+a('*+;m+K'L'3 &3"&2# .)Az*%/!^

 J'GGNN'4QRR 	VGG%4KCPQF82TUU	Vs   DD 	E*EEEc                    	 | j                   j                  t        j                  t        j                  t
        j                  t
        j                  t
        j                        j                  t
              j                  t        t        j                  t
        j                  k(        j                  t
        j                  |k(        j                         }|sdddS d|j                  |j                  |j                  |j                  |j                  nd|j                  |j                  ndddS # t        $ r}dd	t        |       dcY d}~S d}~ww xY w)
z<
        Obtener los datos de kardex por product_id
        r   zProduct not foundr   r>   Nr   r   )r   r"   zError retrieving kardex data: )r   r#   r   r$   r   r   r   r   r   r%   r&   r'   r*   r?   r3   r4   )r   r'   resultr:   s       r   get_by_product_idz"KardexValueClass.get_by_product_id   s   	]WW]] $$ %%!!(( k,'		 "2"="="P)f:-eg  ")6IJJ $ ))"KK#)#5#5.4jj.D

!+1;;+BFKK	 	  	]%4RSVWXSYRZ2[\\	]s%   CD; "AD; ;	EEEE)NNNr   
   )__name__
__module____qualname__r   r   r<   rN   rQ    r   r   r
   r
      s#    7 OAb3Vj!]r   r
   N)
app.backend.db.databaser   app.backend.db.modelsr   r   r   r   sqlalchemy.ormr   r
   rV   r   r   <module>rZ      s    0 e e "k] k]r   