
    h              
       X   d dl 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mZmZmZ d dlmZ d dlmZ  eddg	      Zej)                  d
       ee       ee      fdedede	fd       Zej)                  d       ee       ee      fdedede	fd       Zej)                  d       ed       ee       ee      fdedede	fd       Zej1                  d       ee       ee      fdedede	fd       Zej7                  d       ee       ee      fdededede	fd       Zej;                  d       ee       ee      fdedede	fd       Zej1                  d       ee       ee      fdedede	fd       Zej1                  d       ee       ee      fdedede	fd        Zej1                  d!       ee       ee      fdede	fd"       Z ej1                  d#       ee      fdefd$       Z!ej)                  d%       ee       ee      fded&e"dede	fd'       Z#y())    )	APIRouterDependsHTTPException
UploadFileFile)get_db)Session)MovementUpdateMovementMovementList	UserLogin)MovementClass)get_current_active_userz
/movements	Movements)prefixtags/movement_listsession_userdbc                     	 t        |      j                  | j                  | j                  | j                  | j
                        }d|iS # t        $ r}t        ddt        |             d}~ww xY w)u@   
    Obtener lista de movimientos con paginación y filtros
    )pageitems_per_pagetype_idbranch_office_idmessage  Error retrieving movements: status_codedetailN)	r   get_allr   r   r   r   	Exceptionr   str)r   r   r   dataes        I/var/www/intrajisbackend.com/public_html/app/backend/routers/movements.pyindexr(      s    
	]R ((##(77!))*;;	 ) 
 4   ]6RSVWXSYRZ4[\\]s   A	A 	A3A..A3z/storemovement_inputsc                     	 t        |      j                  |       }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)z1
    Crear un nuevo movimiento de inventario
    r   r   zError creating movement: r   N)r   storer#   r   r$   )r)   r   r   r%   r&   s        r'   r+   r+      sV    
ZR &&74   Z6OPSTUPVx4XYYZ     	AAAz/massive_upload.filec                     	 t        |      j                  | |j                        }d|iS # t        $ r}t	        ddt        |             d}~ww xY w)u   
    Carga masiva de movimientos desde archivo Excel
    Columnas esperadas: sucursal, código, tipo de movimiento, cantidad, periodo
    r   r   z!Error processing massive upload: r   N)r   massive_uploadrutr#   r   r$   )r-   r   r   r%   r&   s        r'   r/   r/   (   s_    bR //l6F6FG4   b6WX[\]X^W_4`aabs   (+ 	AAAz/edit/{movement_id}movement_idc                     	 t        |      j                  |       }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)u9   
    Obtener un movimiento específico para edición
    r   r   Error retrieving movement: r   Nr   getr#   r   r$   r1   r   r   r%   r&   s        r'   editr7   4   W    
\R $$[14   \6QRUVWRXQY4Z[[\r,   z/update/{movement_id}c                     	 t        |      j                  | |      }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)z,
    Actualizar un movimiento existente
    r   r   zError updating movement: r   N)r   updater#   r   r$   )r1   r)   r   r   r%   r&   s         r'   r:   r:   ?   sX    
ZR ''_E4   Z6OPSTUPVx4XYYZ   ! 	AAAz/delete/{movement_id}c                     	 t        |      j                  |       }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)zM
    Eliminar un movimiento (cambiar status a inactivo y revertir stock)
    r   r   zError deleting movement: r   N)r   deleter#   r   r$   r6   s        r'   r=   r=   J   sV    
ZR ''44   Z6OPSTUPVx4XYYZr,   z/{movement_id}c                     	 t        |      j                  |       }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)uI   
    Obtener detalles de un movimiento específico con sus productos
    r   r   r3   r   Nr4   r6   s        r'   showr?   U   r8   r,   z/{movement_id}/productsc                     	 t        |      j                  |       }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)u<   
    Obtener los productos de un movimiento específico
    r   r   z$Error retrieving movement products: r   N)r   get_movement_productsr#   r   r$   r6   s        r'   rA   rA   `   sW    
eR 66{C4   e6Z[^_`[aZb4cdder,   z	/list/allc                     	 t        |      j                  d      }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)u7   
    Obtener todos los movimientos sin paginación
    r   )r   r   r   r   r   N)r   r"   r#   r   r$   )r   r   r%   r&   s       r'   get_all_movementsrC   k   sZ    
]R ((a(04   ]6RSVWXSYRZ4[\\]r;   z/types/listc                 $    ddddddddd	dgd
iS )z5
    Obtener los tipos de movimiento disponibles
    r   successINEntradaz"Movimiento de entrada de productos)codenamedescriptionOUTSalidaz!Movimiento de salida de productos)statusr%    )r   s    r'   get_movement_typesrO   v   s4     	yAefAde
     z/impute/{movement_id}/{period}periodc                     	 t        |      j                  | |      }d|iS # t        $ r}t        ddt	        |             d}~ww xY w)zF
    Imputar un movimiento creando asientos contables en LibreDTE
    r   r   zError imputing movement: r   N)r   imputer#   r   r$   )r1   rQ   r   r   r%   r&   s         r'   impute_movementrT      sX    
ZR ''V<4   Z6OPSTUPVx4XYYZr;   N)$fastapir   r   r   r   r   app.backend.db.databaser   sqlalchemy.ormr	   app.backend.schemasr
   r   r   r   "app.backend.classes.movement_classr   app.backend.auth.auth_userr   	movementspostr(   r+   r/   r5   intr7   putr:   r=   r?   rA   rC   rO   r$   rT   rN   rP   r'   <module>r_      s   G G * " Q Q < >
	
 AHI`Aaqxy  rA ] ]Y ]gn ] ] ?FG^?_ovw}o~ Z8 Z9 Zel Z Z !"&*3i7SjKk  |C  DJ  |K 	b 	by 	bqx 	b #	b $%5<=T5Uelmset \c \ \[b \ &\ &'X_`wXx  IP  QW  IX Z Zn ZI Z  F Z (Z )*7>?V7Wgnougv Z Z9 Z]d Z +Z  5<=T5Uelmset \c \ \[b \ !\ ()FMNeFfv}  E  wF es e) els e *e {078O0P`ghn`o ]I ]V] ] ] }189P1Q Y   01MTUlMm  ~E  FL  ~M Z Zc Z Zsz Z 2ZrP   