
    NdiA                     P   d dl mZmZmZmZmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ  e       ZdeddfdZej-                  d       ee      fd	edeeef   fd
       Zej7                  d       ee      fded	edeeef   fd       Zej;                  d       ee      fdeded	edeeef   fd       Zej?                  d       ee      fded	edeeef   fd       Z ej-                  d       ee      fded	edeeef   fd       Z!ej-                  d       ee      fded	edeeef   fd       Z"ej-                  d       ee      fdeded	edeeef   fd       Z#ej7                  d       ee      fdeded	edeeef   fd       Z$ej7                  d       ee      fded	edeeef   fd       Z%ej?                  d       ee      fdeded	edeeef   fd       Z&ej7                  d       ee      fdeded	edeeef   fd       Z'ej-                  d       ed       ed       ee      fdededz  d edz  d	edeeef   f
d!       Z(ej-                  d"       ee      fd	edeeef   fd#       Z)ej-                  d$       ee      fd%ed	edeeef   fd&       Z*ej-                  d'       ed       ed(d)d*+       ee      fd,edz  d-e+d	edeeef   fd.       Z,ej-                  d/       ee      fd0e+d	edeeef   fd1       Z-ej7                  d2       ee      fde
d	edeeef   fd3       Z.ej;                  d4       ee      fd0e+ded	edeeef   fd5       Z/ej7                  d6       ee      fdeded	edeeef   fd7       Z0ej7                  d8       ee      fded	edeeef   fd9       Z1ej-                  d:       ed       ed;d)d<+       ee      fdedz  d-e+d	edeeef   fd=       Z2ej-                  d>       edd?d@+       eddAB       edCd)dD+       ee      fdEe+dz  d,edz  d-e+d	edeeef   f
dF       Z3ej-                  dG       ee      fd	edeeef   fdH       Z4ej-                  dI       ed?d@J       eddAB       ed<d)dD+       ee      fdEe+d,edz  d-e+d	edeeef   f
dK       Z5ej-                  dL       ee      fdMed	edeeef   fdN       Z6ej-                  dO       ed)dAP       edQdAB       ed;d)dC+       ee      fdRedSed-e+d	edeeef   f
dT       Z7ej-                  dU       edVd)dC+       eddAB       ed<d)dD+       ee      fdWe+d,edz  d-e+d	edeeef   f
dX       Z8ej-                  dY       ed       edZd)d<+       ee      fd,edz  d-e+d	edeeef   fd[       Z9ej7                  d:       ee      fde	d	edeeef   fd\       Z:ej-                  d]       ee      fd	edeeef   fd^       Z;ej7                  d]       ee      fded	edeeef   fd_       Z<ej-                  d`       ed       ed       ee      fdaedz  dbedz  d	edeeef   fdc       Z=y)d    )	APIRouterDependsHTTPExceptionQuerystatus)require_session)
 InventoryConsumptionWritePayloadInventoryProductCreatePayload InventoryProductCodeWritePayloadInventorySessionCreatePayloadInventorySnapshotCreatePayloadInventoryStockWritePayloadInventoryTransferWritePayloadInventoryWarehouseCreatePayloadSessionIdentityget_tenant_storeexcreturnNc                     t        |       }|j                         }d|v sd|v rt        j                  nt        j                  }t        ||      | )Nznon puo accedere
superadminstatus_codedetail)strlowerr   HTTP_403_FORBIDDENHTTP_400_BAD_REQUESTr   )r   r   loweredr   s       ,apps/backend-hub/app/api/routes/inventory.py_raise_inventory_errorr       sQ    XFllnG (LG,C 	!!(( 
 K
?SH    z/warehousessessionc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wN)r   list_inventory_warehouses
ValueErrorr    r"   r   s     r   r%   r%       s6    $!;;GDD $s##$    	949payloadc                 z    	 t               j                  ||       S # t        $ r}t        |       Y d }~y d }~ww xY wr$   )r   create_inventory_warehouser&   r    r)   r"   r   s      r   r+   r+   (   s8    
$!<<WgNN $s##$    	:5:z/warehouses/{warehouse_id}warehouse_idc                     	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wNr   r   )
r   update_inventory_warehouseKeyErrorr   r   HTTP_404_NOT_FOUNDargsr   r&   r    r.   r)   r"   r   s       r   r1   r1   3   s    $!<<WlT[\\ z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$!    	BAA,,B8BBc                    	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   delete_inventory_warehouser2   r   r   r3   r4   r   r&   r    r.   r"   r   s      r   r8   r8   A   s|    
$!<<WlSS z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$!    	BAA++B7BBc                    	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   get_inventory_warehouse_detailr2   r   r   r3   r4   r   r&   r    r9   s      r   r<   r<   N   s|    
$!@@,WW z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r:   z#/warehouses/{warehouse_id}/sessionsc                    	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   !list_inventory_warehouse_sessionsr2   r   r   r3   r4   r   r&   r    r9   s      r   r>   r>   [   s|    
$!CCG\ZZ z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r:   z0/warehouses/{warehouse_id}/sessions/{session_id}
session_idc                     	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   &get_inventory_warehouse_session_detailr2   r   r   r3   r4   r   r&   r    r.   r?   r"   r   s       r   rA   rA   h   s    $!HHR^`jkk z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   z5/warehouses/{warehouse_id}/sessions/{session_id}/loadc                     	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   +load_inventory_warehouse_session_into_stockr2   r   r   r3   r4   r   r&   r    rB   s       r   rD   rD   v   s    $!MMgWceopp z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   z&/warehouses/{warehouse_id}/stock/resetc                    	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   reset_inventory_warehouse_stockr2   r   r   r3   r4   r   r&   r    r9   s      r   rF   rF      s|    
$!AA'<XX z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r:   c                     	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   "delete_inventory_warehouse_sessionr2   r   r   r3   r4   r   r&   r    rB   s       r   rH   rH      s    $!DDWl\fgg z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   c                     	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   "create_inventory_warehouse_sessionr2   r   r   r3   r4   r   r&   r    r5   s       r   rJ   rJ      s    $!DDWl\cdd z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   z&/warehouses/{warehouse_id}/consumption)defaultstart_session_idend_session_idc                 $   	 t               j                  || ||      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY w)N)rL   rM   r   r   )
r   #get_inventory_warehouse_consumptionr2   r   r   r3   r4   r   r&   r    )r.   rL   rM   r"   r   s        r   rO   rO      s    
$!EE-)	 F 
 	
  z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$s!    	BAA..B:B

Bz/totals/historyc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wr$   )r   list_inventory_totals_historyr&   r    r'   s     r   rQ   rQ      s6    $!??HH $s##$r(   z /totals/history/{inventory_date}inventory_datec                     	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY w)N)rR   r   r   )
r   get_inventory_totals_detailr2   r   r   r3   r4   r   r&   r    )rR   r"   r   s      r   rT   rT      s    
$!==gVd=ee z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   z/products/search      d   )rK   geleqlimitc                 ~    	 t               j                  || |      S # t        $ r}t        |       Y d }~y d }~ww xY wN)queryr[   )r   search_inventory_productsr&   r    rZ   r[   r"   r   s       r   r_   r_      s>    $!;;G1TY;ZZ $s##$    	<7<z/products/{product_id}/variants
product_idc                     	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY w)N)rb   r   r   )
r   list_inventory_product_variantsr2   r   r   r3   r4   r   r&   r    )rb   r"   r   s      r   rd   rd      s    
$!AA'V`Aaa z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   z	/productsc                    	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   create_inventory_productr2   r   r   r3   r4   r   r&   r    r,   s      r   rf   rf      |    
$!::7GLL z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r:   z/products/{product_id}/barcodec                 "   	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY w)N)rb   r)   r   r   )
r   update_inventory_product_coder2   r   r   r3   r4   r   r&   r    )rb   r)   r"   r   s       r   ri   ri      s    $!??T^ho?pp z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$!    	BAA--B9B		Bz /warehouses/{warehouse_id}/stockc                     	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   add_inventory_stockr2   r   r   r3   r4   r   r&   r    r5   s       r   rl   rl     s~    $!55g|WUU z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   z
/transfersc                    	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   transfer_inventory_stockr2   r   r   r3   r4   r   r&   r    r,   s      r   rn   rn     rg   r:   z/consumptionsx   i  c                 "   	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY w)N)r.   r[   r   r   )
r   list_inventory_consumptionsr2   r   r   r3   r4   r   r&   r    )r.   r[   r"   r   s       r   rq   rq   '  s    $!==gT`hm=nn z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$rj   z/consumptions/daysi  i4     )rK   
max_lengthin  i  yearc                     	 t               j                  || ||      S # t        $ r}t        |       Y d }~y d }~ww xY wN)rt   r^   r[   )r   list_inventory_consumption_daysr&   r    rt   rZ   r[   r"   r   s        r   rw   rw   5  sB    $!AA'PT\]ejAkk $s##$    	=8=z/consumptions/yearsc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wr$   )r    list_inventory_consumption_yearsr&   r    r'   s     r   r{   r{   B  s6    $!BB7KK $s##$r(   z/consumptions/totals)rX   rY   c                     	 t               j                  || ||      S # t        $ r}t        |       Y d }~y d }~ww xY wrv   )r   )list_inventory_consumption_product_totalsr&   r    rx   s        r   r}   r}   L  sL    $!KK	 L 
 	
  $s##$ry   z%/consumptions/days/{consumption_date}consumption_datec                     	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY w)N)r~   r   r   )
r   $get_inventory_consumption_day_detailr2   r   r   r3   r4   r   r&   r    )r~   r"   r   s      r   r   r   ^  s    
$!FFwaqFrr z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r6   z/consumptions/trend)
min_lengthrs    product_namesupplier_namec                     	 t               j                  || ||      S # t        $ r}t        |       Y d }~y d }~ww xY w)N)r   r   r[   )r   'get_inventory_consumption_product_trendr&   r    )r   r   r[   r"   r   s        r   r   r   k  sL    $!II%'	 J 
 	
  $s##$ry   z/consumptions/estimate-2025X   workdaysc                     	 t               j                  |d| ||      S # t        $ r}t        |       Y d }~y d }~ww xY w)Ni  )rt   r   r^   r[   )r   'get_inventory_consumption_2025_estimater&   r    )r   rZ   r[   r"   r   s        r   r   r   }  sO    	$!II J 
 	
  $s##$s     	>9>z/consumptions/stats   c                 ~    	 t               j                  || |      S # t        $ r}t        |       Y d }~y d }~ww xY wr]   )r   (list_inventory_consumption_product_statsr&   r    r`   s       r   r   r     s?    $!JJ7Z[chJii $s##$ra   c                    	 t               j                  ||       S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY wr0   )
r   create_inventory_consumptionr2   r   r   r3   r4   r   r&   r    r,   s      r   r   r     s|    
$!>>wPP z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$r:   z
/snapshotsc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wr$   )r   list_inventory_snapshotsr&   r    r'   s     r   r   r     s6    $!::7CC $s##$r(   c                 z    	 t               j                  ||       S # t        $ r}t        |       Y d }~y d }~ww xY wr$   )r   create_inventory_snapshotr&   r    r,   s      r   r   r     s8    
$!;;GWMM $s##$r-   z/consumptionstart_snapshot_idend_snapshot_idc                 "   	 t               j                  || |      S # t        $ rK}t        t        j
                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY w)N)r   r   r   r   )
r   "get_inventory_consumption_overviewr2   r   r   r3   r4   r   r&   r    )r   r   r"   r   s       r   r   r     s    	$!DD/+ E 
 	

  z(A(AY\YaYa#((ST+pvyygjkngopvyy $s##$rj   )>fastapir   r   r   r   r   app.api.depsr   app.services.tenant_storer	   r
   r   r   r   r   r   r   r   r   routerr&   r    getdictr   objectr%   postr+   patchr1   deleter8   r<   r>   rA   rD   rF   rH   rJ   rO   rQ   rT   intr_   rd   rf   ri   rl   rn   rq   rw   r{   r}   r   r   r   r   r   r   r   r    r!   r   <module>r      s8   D D (   
I
 It I M9@9Q $ $VZ[^`f[fVg $ $ ]  '7$,$$ 
#v+$ $ *+  '7
$
$,
$ 
$ 
#v+	
$ ,
$ +,  '7	$	$	$ 
#v+	$ -	$ ()  '7	$	$	$ 
#v+	$ *	$ 12  '7	$	$	$ 
#v+	$ 3	$ >?  '7
$
$
$ 
$ 
#v+	
$ @
$ DE  '7
$
$
$ 
$ 
#v+	
$ F
$ 56  '7	$	$	$ 
#v+	$ 7	$ AB  '7
$
$
$ 
$ 
#v+	
$ C
$ 23  '7
$
$*
$ 
$ 
#v+	
$ 4
$ 45 $)#6!&t!4&7	$$Dj$ $J$ 	$
 
#v+$ 6$& &7$$	#v+$ $ ./  '7	$	$	$ 
#v+	$ 0	$ $'raC0&7$
Tz$$ $ 
#v+	$  $ -.  '7	$	$	$ 
#v+	$ /	$ [  '7	$*	$	$ 
#v+	$ 	$ ./  '7
$
$-
$ 
$ 
#v+	
$ 0
$ /0  '7
$
$'
$ 
$ 
#v+	
$ 1
$ \  '7	$*	$	$ 
#v+	$ 	$ O$T2sqS1&7
$*
$
$ 
$ 
#v+	
$ 
$  !Tdt<$37sqT2&7		$
*	$
Tz	$ 	$ 		$
 
#v+	$ "	$ !"&7$$	#v+$ #$ "#$'$37sqT2&7	$
$
Tz$ $ 	$
 
#v+$ $$" 34  '7	$	$	$ 
#v+	$ 5	$ !"s;rc:sqS1&7	$$$ $ 	$
 
#v+$ #$" )*"s3$37sqT2&7	$$
Tz$ $ 	$
 
#v+$ +$$ !"$'sqS1&7$
Tz$$ $ 
#v+	$ #$ _  '7	$-	$	$ 
#v+	$ 	$ L8?8P $o $UYZ]_eZeUf $ $ \  '7$+$$ 
#v+$ $ N$)$$7"'"5&7$Tz$4Z$ $ 
#v+	$ $r!   