
    ߁"jR8                        d dl mZ d dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZ d dl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  e       Zd	ed
dfdZej9                  d       ee	      fded
eeef   fd       Z ej9                  d       ee	      fded
eeef   fd       Z!ej9                  d       ee	      fded
eeef   fd       Z"ej9                  d       ee	      fded
eeef   fd       Z#ej9                  d       ee	      fded
eeef   fd       Z$ejK                  d       ee	      fdeded
eeef   fd       Z&ejO                  d       ee	      fdeded
eeef   fd       Z(ejK                  d       ee	      fdededed
eeef   fd       Z)ejU                  d       ee	      fdeded
eeef   fd       Z+ej9                  d       ee	      fdeded
eeef   fd       Z,ej9                  d        ee	      fdeded
eeef   fd!       Z-ej9                  d"       ee	      fded#eded
eeef   fd$       Z.ejO                  d%       ee	      fded#eded
eeef   fd&       Z/ejU                  d"       ee	      fded#eded
eeef   fd'       Z0ejO                  d        ee	      fdededed
eeef   fd(       Z1ejO                  d)      d ee	      fded*edz  ded
eeef   fd+       Z2ejO                  d,       ee	      fdededed
eeef   fd-       Z3ej9                  d.      ddd/ ee	      fd0edz  d*edz  d1e4ded
eeef   f
d2       Z5ej9                  d3       ee	      fd4eded
eeef   fd5       Z6ejO                  d       ee	      fdeded
eeef   fd6       Z7ejq                  d3       ee	      fd4ededed
eeef   fd7       Z9ejU                  d3       ee	      fd4eded
eeef   fd8       Z:ejq                  d9       ee	      fd4ededed
eeef   fd:       Z;y);    )dateN)	APIRouterDependsHTTPExceptionstatus)require_session)get_settings)upsert_text_file_to_drive)&get_active_google_workspace_connection)HomemadePreparationWritePayloadHomemadeRecipeWritePayloadHomemadeStockSettingsPayloadHomemadeStockWritePayloadInventorySessionCreatePayloadInventoryWarehouseCreatePayloadSessionIdentityget_tenant_storeexcreturnc                     t        |       }|j                         }d|v sd|v rt        j                  nt        j                  }t        ||      | )Nznon puo
superadminstatus_codedetail)strlowerr   HTTP_403_FORBIDDENHTTP_400_BAD_REQUESTr   )r   r   loweredr   s       +apps/backend-hub/app/api/routes/homemade.py_raise_homemade_errorr!      sQ    XFllnG <7#: 	!!(( 
 K
?SH    z/statussessionc                     	 t               j                  |       }ddt	        j                  d      xs d      t        |j                  d            dS # t        $ r}t        |       Y d }~Td }~ww xY w)Nactivereadytotal_countr   
can_manage)moder   r'   r(   )r   list_homemade_recipes
ValueErrorr!   intgetbool)r#   payloadr   s      r    homemade_statusr0   $   sp    #"$::7C 7;;}5:;7;;|45	   #c""#s   A 	A4A//A4z/recipesc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wN)r   r*   r+   r!   r#   r   s     r    r*   r*   2   s6    #!77@@ #c""#    	949z/stock/warehousesc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wr2   )r   list_homemade_stock_warehousesr+   r!   r3   s     r    r6   r6   :   s6    #!@@II #c""#r4   z/stock/totalsc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wr2   )r   list_homemade_stock_totalsr+   r!   r3   s     r    r8   r8   B   s6    #!<<WEE #c""#r4   z/stock/understockc                 x    	 t               j                  |       S # t        $ r}t        |       Y d }~y d }~ww xY wr2   )r   get_homemade_stock_understockr+   r!   r3   s     r    r:   r:   J   s6    #!??HH #c""#r4   z/stock/settingsr/   c                 z    	 t               j                  ||       S # t        $ r}t        |       Y d }~y d }~ww xY wr2   )r   update_homemade_stock_settingsr+   r!   r/   r#   r   s      r    r<   r<   R   s8    
#!@@'RR #c""#    	:5:c                 z    	 t               j                  ||       S # t        $ r}t        |       Y d }~y d }~ww xY wr2   )r   create_homemade_stock_warehouser+   r!   r=   s      r    r@   r@   ]   s8    
#!AA'7SS #c""#r>   z /stock/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_homemade_stock_warehouseKeyErrorr   r   HTTP_404_NOT_FOUNDargsr   r+   r!   rA   r/   r#   r   s       r    rD   rD   h   s    #!AA'<Y`aa z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#!    	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rC   )
r   delete_homemade_stock_warehouserE   r   r   rF   rG   r   r+   r!   rA   r#   r   s      r    rK   rK   v   s|    
#!AA'<XX z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#!    	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rC   )
r   #get_homemade_stock_warehouse_detailrE   r   r   rF   rG   r   r+   r!   rL   s      r    rO   rO      s|    
#!EEg|\\ z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rM   z)/stock/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rC   )
r   &list_homemade_stock_warehouse_sessionsrE   r   r   rF   rG   r   r+   r!   rL   s      r    rQ   rQ      s}    
#!HHR^__ z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rM   z6/stock/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rC   )
r   +get_homemade_stock_warehouse_session_detailrE   r   r   rF   rG   r   r+   r!   rA   rR   r#   r   s       r    rT   rT      s    #!MMgWceopp z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rI   z;/stock/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rC   )
r   0load_homemade_stock_warehouse_session_into_stockrE   r   r   rF   rG   r   r+   r!   rU   s       r    rW   rW      s    #!RRSZ\hjtuu z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rI   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rC   )
r   'delete_homemade_stock_warehouse_sessionrE   r   r   rF   rG   r   r+   r!   rU   s       r    rY   rY      s    #!II'S_akll z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rI   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rC   )
r   'create_homemade_stock_warehouse_sessionrE   r   r   rF   rG   r   r+   r!   rH   s       r    r[   r[      s    #!II'S_ahii z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rI   z,/stock/warehouses/{warehouse_id}/stock/resetareac                 "   	 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)usage_scoper   r   )
r   $reset_homemade_stock_warehouse_stockrE   r   r   rF   rG   r   r+   r!   )rA   r\   r#   r   s       r    r_   r_      s    #!FFwP\jnFoo z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#s!    	BAA--B9B		Bz&/stock/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rC   )
r   add_homemade_stockrE   r   r   rF   rG   r   r+   r!   rH   s       r    ra   ra      s~    #!44WlGTT z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rI   z/stock/recipes/search   qlimitc                     	 t               j                  || ||      S # t        $ r}t        |       Y d }~y d }~ww xY w)N)queryr^   rd   )r   search_homemade_stock_recipesr+   r!   )rc   r\   rd   r#   r   s        r    rg   rg      sA    #!??q^bjo?pp #c""#s    	=8=z/recipes/{recipe_id}	recipe_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rC   )
r   get_homemade_reciperE   r   r   rF   rG   r   r+   r!   rh   r#   r   s      r    rj   rj      s|    
#!55gyII z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rM   c                 z    	 t               j                  ||       S # t        $ r}t        |       Y d }~y d }~ww xY wr2   )r   create_homemade_reciper+   r!   r=   s      r    rm   rm     s8    
#!88'JJ #c""#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rC   )
r   update_homemade_reciperE   r   r   rF   rG   r   r+   r!   )rh   r/   r#   r   s       r    ro   ro     s~    #!88)WUU z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rI   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rC   )
r   delete_homemade_reciperE   r   r   rF   rG   r   r+   r!   rk   s      r    rq   rq   $  s|    
#!88)LL z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#rM   z /recipes/{recipe_id}/preparationc           
      	  K   	 t        j                  |j                        j                         }	 t               j                  ||       d   }t        j                  d      xs d      j!                         }|st        t        j                  d      	 t               j#                  |      }t%        t&              r|j                  d      ng }d	}	g }
t%        |t(              r|ng D ]  }t%        |t&              st        |j                  d      xs d      j!                         }|sCt        |j                  d
      xs d      | k(  r|n+t        |j                  d      xs d      j!                         }|r$t        j                  |      j+                  d      nd}|
j-                  ||f        |
j/                  d        dj1                  d	dg|
D cg c]  \  }}| d|  c}}z         }	 t3        |       d {   }|j4                  j7                          d}t9               }	 t;        j<                  |j>                        4 d {   }tA        ||jB                  |	||d        d {   }d d d       d {    	 t               jG                  || |j                  d      |j                  d            S # t        $ r!}t        t        j                  d      |d }~ww xY w# t        $ rK}t        t        j                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~d }~ww xY w# t        $ r}t        |       Y d }~d }~ww xY wc c}}w 7 # t
        $ r  w xY w7 O7 /7 "# 1 d {  7  sw Y   3xY w# t:        jD                  $ r}t        dd|       |d }~wt        $ r}t        dt        |            |d }~ww xY w# t        $ rK}t        t        j                  |j                  r|j                  d         |t        |            |d }~wt        $ r}t        |       Y d }~y d }~ww xY ww)NzData preparazione non valida.r   reciper   name zRicetta homemade non valida.recipeszDate Preparazioniidpreparation_datez%d/%m/%Y-c                 (    | d   j                         S )Nr   )casefold)entrys    r    <lambda>z2update_homemade_preparation_date.<locals>.<lambda>Y  s    a 1 1 3 r"   )key
z: z	-HOMEMADE)timeout)access_tokenfilenametext_contentfolder_referenceexisting_file_idi  z,Salvataggio file Homemade su Drive fallito: i  file_idweb_url)prepared_ondrive_file_iddrive_web_url)$r   fromisoformatr   	isoformatr+   r   r   r   r   rj   rE   rF   rG   r   r!   r-   stripr*   
isinstancedictliststrftimeappendsortjoinr   tenant_nameupperr	   httpxAsyncClient(google_workspace_request_timeout_secondsr
   r   	HTTPErrorset_homemade_recipe_preparation)rh   r/   r#   r   r   current_reciperecipe_namerecipes_payloadrv   	file_namerowsitemrt   item_prepared_on
item_labellabelfile_content
connectiondrive_referencesettingsclient
drive_files                         r     update_homemade_preparation_dater   1  sC    v(()<)<=GGI#)+??ST\] n((06B7==?K(C(CLjkk#*,BB7K 1;?D0Qo!!),WYG#I"$D%gt4" ($%488F#)r*002*-dhhtn.B*Cy*P;VYZ^ZbZbcuZvZ|z|V}  WD  WD  WFRbT''(89BB:Nhk
T:&'( 	II3I499	b!15
6+$dV2eW
6	7L
A'JJ
 !,,2245Y?O~HG$$X-^-^_ 	 	ci8'44")!0!%  J	 	#!AA#$..3$..3 B 
 	
}  v(C(CLklruuv
  z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#  #c""#& 7 K 		 	 	 	 ?? s6bcfbg4hiorr GCH=3FG  z(A(AY\YaYa#((ST+pvyygjkngopvyy #c""#su  R-K K? A	RM3 2D0R"N3
R>N NN 'R9$O N,O !N5 N/N5O N2O ;P R	K<K77K<<R?	M0AMM0M+%R+M00R3	N<NRN	RN N))R,O /N52O 5O;N><OO PO//P;PPR	R
#AQ))R
5R RR

R)<datetimer   r   fastapir   r   r   r   app.api.depsr   app.core.configr	   #app.services.google_workspace_driver
   %app.services.google_workspace_sessionr   app.services.tenant_storer   r   r   r   r   r   r   r   routerr+   r!   r-   r   r   objectr0   r*   r6   r8   r:   patchr<   postr@   rD   deleterK   rO   rQ   rT   rW   rY   r[   r_   ra   r,   rg   rj   rm   putro   rq   r    r"   r    <module>r      s^     = = ( ( I X	 	 	 
Iz Id I I/6/G 
_ 
DQTV\Q\L] 
 
 J5<_5M #? #RVWZ\bWbRc # #  >Eo>V #O #[_`cek`k[l # !# O:A/:R # #W[\_ag\gWh # #  =D_=U #? #Z^_bdj_jZk # !#    '7#)## 
#v+# !#  !  '7#,## 
#v+# "# 01  '7
#
#,
# 
# 
#v+	
# 2
# 12  '7	#	#	# 
#v+	# 3	# ./  '7	#	#	# 
#v+	# 0	# 78  '7	#	#	# 
#v+	# 9	# DE  '7
#
#
# 
# 
#v+	
# F
# JK  '7
#
#
# 
# 
#v+	
# L
# GH  '7
#
#
# 
# 
#v+	
# I
# 89  '7
#
#*
# 
# 
#v+	
# :
# ;< &7
#
#
*
# 
# 
#v+	
# =
# 56  '7
#
#&
# 
# 
#v+	
# 7
# #$&7		#
Tz	#
*	# 	# 		#
 
#v+	# %	# "#  '7	#	#	# 
#v+	# $	# Z  '7#'## 
#v+# # "#  '7
#
#'
# 
# 
#v+	
# $
# %&  '7	#	#	# 
#v+	# '	# ./  '7O#O#,O# O# 
#v+	O# 0O#r"   