
    E jo                        d dl m Z  d dlmZ d dlZd dlmZmZ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mZmZ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! d dl"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+  e       Z, ejZ                  d      Z.dZ/ ejZ                  dej`                        Z1de*de*fdZ2de(defdZ3dee(z  de4e5e6f   fdZ7de4e5e6f   defdZ8de4e5e6f   dz  dedz  fdZ9de5dz  de5fdZ:de5dz  de5fdZ;de5dz  de5dz  fdZ<de)de=e5dz  e5dz  f   fd Z>de)de)dz  fd!Z?de*de)defd"Z@de)defd#ZAde)de5fd$ZBd%eCe)   d&e5d'e5dz  d(eDdz  d)eDdz  d*e5dz  deCe)   fd+ZEdd,d d-d%eCe)   d.eCe)   dz  d/eDd0eDdef
d1ZFde4e5e6f   dz  deGfd2ZHde*defd3ZIde'defd4ZJd%eCe'   defd5ZKde*defd6ZLde5dz  de5dz  fd7ZMde*defd8ZNe,j                  d9e:       ee      fde*defd;       ZPe,j                  d9e:       ee      fd<ede*defd=       ZRe,j                  d>e:       ee      fde*defd?       ZSe,j                  d@e:       ee      fde*defdA       ZTe,j                  dBe:       ee      fde*defdC       ZVe,j                  dDe:       ee      fde*defdE       ZWe,j                  dFe:       e	dGdHI       e	ddJK       e	ddLdMN       e	ddOdPN       e	ddJK       e	d,dOdQN       e	d d R       ee      fdSe5dTe5dz  d(eDdz  d)eDdz  d*e5dz  d/eDd0eDde*defdU       ZXe,j                  dV       ee      fde*de4e5eDf   fdW       ZZe,j                  dX       ee      fdYe5de*de4e5e6f   fdZ       Z[e,j                  d[e:       ed\       ee      fd]eCe
   de*defd^       Z\e,j                  dXe:       ee      fdYe5de*defd_       Z]e,j                  d`       ee      fdYe5de*defda       Z^e,j                  dbe:       ee      fdYe5de*defdc       Z_e,j                  dd       ee      fdYe5de*fde       Z`y)f    )datetime)PathN)	APIRouterDependsFileHTTPExceptionQuery
UploadFilestatus)FileResponse)require_session)FiscalDocumentLineItemRead FiscalDocumentOrderMatchLineReadFiscalDocumentOrderMatchReadFiscalDocumentInboxItemReadFiscalDocumentInboxListResponseFiscalDocumentInboxStatusRead!FiscalDocumentNotificationSummaryFiscalDocumentReadFiscalDocumentsListResponseFiscalDocumentSettingsRead#FiscalDocumentSettingsUpdatePayload)sync_fiscal_document_inbox)is_google_workspace_configured)get_google_workspace_store)+apply_delivery_note_storno_to_matched_order!build_fiscal_document_order_matchingest_fiscal_document)FiscalDocumentInboxItemRecordFiscalDocumentLineItemRecordFiscalDocumentRecordSessionIdentityget_tenant_storez^[^\s@]+@[^\s@]+\.[^\s@]+$z.https://www.googleapis.com/auth/gmail.readonlyz(?:d\.?\s*d\.?\s*t\.?|documento\s+di\s+trasporto)\s*(?:n\.?|num(?:ero)?\.?)?\s*([A-Z0-9./-]+)(?:\s+del\s+(\d{1,2}[./-]\d{1,2}[./-]\d{2,4}))?sessionreturnc                 p    t               j                  | d      st        t        j                  d      | S )Nfiscal_documentsz4Questo account non puo accedere a Documenti fiscali.status_codedetail)r#   session_has_permissionr   r   HTTP_403_FORBIDDEN)r$   s    3apps/backend-hub/app/api/routes/fiscal_documents.py_require_tenant_adminr.   0   s6    44W>PQ11I
 	
 N    recordc                 b   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                        S )N)
line_indexproduct_codeiso_codedescriptioncategory_code	unit_code
pack_countquantitygross_quantitytare_quantitynet_quantity
unit_price
line_totalvat_coderaw_row_text)r   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r0   s    r-   $_serialize_fiscal_document_line_itemrB   9   s    %$$((&&**""$$,,**(($$$$(( r/   itemc                 <   | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  dS )Nr2   r5   r@   r8   r9   r:   r;   r<   r7   r6   r3   r=   r>   r?   rE   )rC   s    r-   )_fiscal_document_item_order_match_payloadrF   M   s|    oo''))ooMM--++))^^++))ooooMM r/   linec           
          dt         dt        d z  f fd}t        di dt         j                  d      xs d      dt         j                  d      xs d      dt	         j                  d      t
              rt         d         nd d	t         j                  d	      xs d
      xs d dt         j                  d      xs d
      xs d dt         j                  d      xs d
      xs d d |d      d |d      d |d      d |d      d |d      dt	         j                  d      t
              rt         d         nd dt         j                  d      xs d
      xs d dt         j                  d      xs d
      xs d dt         j                  d      xs d
      xs d d |d      S )Nkeyr%   c                     j                  |       }t        |t        t        f      rt        |t              st        |      S y N)get
isinstanceintfloatbool)rI   valuerG   s     r-   numeric_valuez2_serialize_order_match_line.<locals>.numeric_valuea   s4    ec5\*:eT3J<r/   r   partial
confidence        order_item_idorder_product_name order_lot_codeorder_supplier_nameordered_quantitydelivered_quantitycomparable_delivered_quantitymissing_quantityextra_quantitydocument_line_indexdocument_descriptiondocument_raw_row_textdocument_unit_codedocument_quantity )strrO   r   rL   rM   rN   )rG   rR   s   ` r-   _serialize_order_match_linerg   `   s   3 54<  , 488H%23,/637 5?txx?XZ]4^c$/0dh txx(<=CDL	
 488$45;<D  )> ? E2FN$ ''9: ))=> '44S&T ''9: %%56 AK488TiKjlo@pC%: ;<vz !*@!A!GRHPD "$((+B"C"IrJRd txx(<=CDL  ((;<! r/   matchc                 f   t        | t              sy t        t        | j	                  d      xs d      t        | j	                  d      t
              rt        | d         nd t        | j	                  d      xs d      xs d t        | j	                  d      xs d      xs d t        | j	                  d      xs d      xs d t        | j	                  d      xs d	      t        | j	                  d
      xs d      t        | j	                  d      xs d      t        | j	                  d      xs d      t        | j	                  d      xs d      t        | j	                  d            | j	                  dg       D cg c]  }t        |t              st        |        c}      S c c}w )Nr   no_candidatematched_batch_idmatched_batch_confirmed_atrX   matched_batch_staffmatched_supplier_namescorerU   line_match_countr   exact_line_countmissing_line_countextra_line_countcan_apply_stornolines)r   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   )	rM   dictr   rf   rL   rN   rO   rP   rg   )rh   rG   s     r-   _serialize_order_matchrw   {   sc   eT"'599X&8.9;EeiiPbFceh;iU#567os#&uyy1M'N'TRT#U#]Y]		*? @ FBGO4!%)),C"D"JKStEIIg&-#.UYY'9:?a@UYY'9:?a@uyy)=>C!DUYY'9:?a@eii(:;<=BYYwPR=SnTWabfhlWm*40n  os   F.F.rQ   c                 T    t        j                  dd| xs dj                               S )N
[^a-z0-9]+rX   )resubcasefold)rQ   s    r-   _normalize_document_numberr}      s"    66-ekr%;%;%=>>r/   c                     | xs dj                         }t        j                  dd|      }t        j                  dd|      S )NrX   z?\b(?:srl|s\.r\.l\.|snc|s\.n\.c\.|sas|s\.a\.s\.|spa|s\.p\.a\.)\b ry   )r|   rz   r{   rQ   
normalizeds     r-   _normalize_supplier_keyr      s<    +2'')JZ\_aklJ66-Z00r/   c                     | xs dj                         }|sy dD ]6  }	 t        j                  ||      j                         j	                         c S  y # t
        $ r Y Ew xY w)NrX   )z%d/%m/%Yz%d-%m-%Yz%d.%m.%Yz%d/%m/%yz%d-%m-%yz%d.%m.%y)stripr   strptimedate	isoformat
ValueError)rQ   	raw_valuepatterns      r-   _parse_reference_dater      sl    "##%I[ 	$$Y8==?IIKK
   		s   1A	A A documentc                    | j                   dk7  ry| j                   d| j                   }t        j	                  |      D ]J  }t        |j                  d            }|s |t        |j                  d            xs | j                  fc S  y)Ninstant_invoice)NN
      )	document_typepreview_textextracted_text_REFERENCED_DDT_PATTERNfinditerr}   groupr   document_date)r   
searchablerh   numbers       r-   !_extract_referenced_delivery_noter      s    !22))*"X-D-D,EFJ(11*= W+EKKN;,U[[^<V@V@VVV	W
 r/   c                    t        |       \  }}|sy t        | j                        }t               j	                  | j
                        D ]  }|j                  | j                  k(  s|j                  dk7  r,|rt        |j                        |k7  rGt        |j                        |k7  r`|r|j                  r|j                  |k7  r~|c S  y )Ndelivery_note)r   r   supplier_namer#   list_fiscal_documents	tenant_ididr   r}   document_numberr   )r   referenced_numberreferenced_datesupplier_key	candidates        r-   _find_covering_delivery_noter      s    )J8)T&*8+A+ABL%'==h>P>PQ 		<<8;;&)*A*A_*T3I4K4KLP\\%i&?&?@DUUy669;R;RVe;e	 r/   c                 *   t               j                  |j                  |j                        D cg c]  }t	        |       }}t        |      }d }|Et        | |j                  |j                  |j                  |D cg c]  }t        |       c}      }t        di d|j                  d|j                  d|j                  d|j                  d|j                  d|j                   d|j                  d	|j"                  d
|j                  d|j                  d|j$                  d|j&                  d|j(                  d|j*                  d|j,                  d|j.                  d|j0                  d|j2                  d|r|j                  nd d|r|j                  nd d|dt5        |      d|j6                  d|j8                  d|j:                  d|j<                  d|j>                  d|j@                  S c c}w c c}w )Nr   r   r   document_itemsr   original_namedisplay_name	mime_typekindfile_size_bytesr   r   r   r   total_amountcurrencysummary_textr   r   drive_file_iddrive_web_urldrive_uploaded_atcovered_by_document_idcovered_by_document_name
line_itemsorder_matchr   matching_statusreview_statuserror_detail
created_at
updated_atre   )!r#   list_fiscal_document_itemsr   r   rB   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   r   r   r   r   )r$   r0   rC   r   covering_delivery_noter   s         r-   _serialize_fiscal_documentr      sp    %&AA&BRBRTZT]T]^ 	-T2J  :&AK%7 .. .. ..XbcPTEdKc
  99** (( ""	
 [[ .. ** .. ** ** ((  (( ,, ((  **!" **#$ !22%& =S588X\'( I_!7!D!Ddh)* +, +;7-. }}/0 ..12 **34 ((56 $$78 $$9  ds   H?Hc                 h   t        di d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  d| j                  d| j                  d	| j                  d
| j                  d| j                  d| j                  d| j                  ddddd| j                  d| j                  d| j                   dg dd d| j"                  d| j$                  d| j&                  d| j(                  d| j*                  d| j,                  S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r   r   r   r   r   r   r   r   r   r   r   r   re   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   s    r-   "_serialize_fiscal_document_summaryr      s    99** (( ""	
 [[ .. ** .. ** ** ((  ((    **!" **#$ !22%& '( )* }}+, ..-. **/0 ((12 $$34 $$5 r/   c           	          dj                  | j                  | j                  | j                  xs d| j                  xs d| j
                  xs d| j                  xs dg      j                         S )Nr   rX   )joinr   r   r   r   r   r   r|   rA   s    r-   _record_search_textr     sk    88  ""(b  &B  &B%2	
	 hj	r/   recordsfiscal_filterqueryyearmonthsupplierc                   |xs dj                         j                         }|xs dj                         j                         }g }| D ]  }	|dk(  r|	j                  dvr|dv r|	j                  |k7  r+|dk(  r|	j                  dk7  r@|9t	        |	j
                  xs |	j                  xs d      d d }
|
t	        |      k7  r{|2t	        |	j
                  xs |	j                  xs d      dd }||d	k7  r|r!||	j                  xs dj                         vr|r|t        |	      vr|j                  |	        |S )
NrX   invoice>   r   r   >   r   r   	to_review         02d)
r   r|   r   r   rf   r   r   r   r   append)r   r   r   r   r   r   normalized_querynormalized_supplierfilteredr0   record_yearrecord_months               r-   _filter_fiscal_recordsr     s`    **,557#>r002;;=+-H  I%&*>*>Fd*d@@VEYEY]jEjK'F,@,@K,Of22Mf6G6GM2NrPQRKc$i'v33Nv7H7HNBOPQRSTL%-#6v?S?S?YWY>c>c>e#e 08KF8S S' ( Or/   2   all_recordslimitoffsetr   r   r   c                D   ||n| }| |||z    }|D cg c]  }t        |       }}t        |t        |       t        |      t        d |D              t        d |D              t        d |D              t        d |D              ||||z   t        |       k  
      S c c}w )Nc              3   >   K   | ]  }|j                   d v sd  yw)>   r   r   r   Nr   .0rC   s     r-   	<genexpr>z'_build_list_response.<locals>.<genexpr>N  s     o$:L:LPn:n!os   c              3   @   K   | ]  }|j                   d k(  sd  yw)r   r   Nr   r   s     r-   r   z'_build_list_response.<locals>.<genexpr>O  s     !j$BTBTXiBi!!j   c              3   @   K   | ]  }|j                   d k(  sd  yw)r   r   Nr   r   s     r-   r   z'_build_list_response.<locals>.<genexpr>P  s     fd@R@RVe@efr   c              3   @   K   | ]  }|j                   d k(  sd  yw)r   r   Nr   r   s     r-   r   z'_build_list_response.<locals>.<genexpr>Q  s     ^$D<N<NR]<]A^r   )
itemstotal_countarchive_total_countinvoice_countinstant_invoice_countdelivery_note_countto_review_countr   r   has_more)r   r   lensum)r   r   r   r   source_recordspage_recordsr0   r   s           r-   _build_list_responser   @  s     %0$;[N6FUN3LFRSF/7SES&L/ooo!!j!jjfnff^.^^%#g,.  Ts   Bc                 Z   t        | t              r| j                  d      dk7  ryt        | j                  d      xs d      dkD  s!t        | j                  d      xs d      dkD  ryt        | j                  d      t              r| j                  d      ng }t        d	 |D              S )
Nr   matchedFrr   r   rs   Tru   c              3   f   K   | ])  }t        |t              xr |j                  d       dv + yw)r   >   NexactN)rM   rv   rL   )r   rG   s     r-   r   z/_match_has_order_discrepancy.<locals>.<genexpr>^  s.     fX\z$%S$((8*<O*SSfs   /1)rM   rv   rL   rN   listany)rh   ru   s     r-   _match_has_order_discrepancyr   X  s    eT"eii&9Y&F
599)*/a014EIIFX<Y<^]^8_bc8c",UYYw-?"FEIIgBEf`efffr/   c                    t               }d}|j                  | j                        D ]  }|j                  dk7  s|j                  dk7  r"t        |      .|j                  |j                  |j                        }t        | |j                  |j                  |j                  |D cg c]  }t        |       c}      }t        |      s|dz  } t        |      S c c}w )Nr   r   readyr   r   )discrepancy_count)r#   r   r   r   r   r   r   r   r   r   r   r   rF   r   r   )r$   storer  r0   r   rC   r   s          r-   _build_notification_summaryr  a  s    E--g.?.?@ #;.&--72J'/;55f6F6F		R
7 .. .. ..XbcPTEdKc
 (4"# -?PQQ	 ds   'C c                 6   t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                        S )N)r   
message_idattachment_idsubjectsenderreceived_atattachment_namer   sync_statusdocument_idr   r   r   )r   r   r  r  r  r  r	  r
  r   r  r  r   r   r   rA   s    r-   _serialize_inbox_itemr  v  s~    &99$$**}}&&..""&&&&(($$$$ r/   c           
          | D cg c]  }t        |       }}t        |t        |      t        d |D              t        d |D              t        d |D                    S c c}w )Nc              3   @   K   | ]  }|j                   d k(  sd  yw)importedr   Nr  r   s     r-   r   z-_build_inbox_list_response.<locals>.<genexpr>  s     Q$2B2Bj2P1Qr   c              3   @   K   | ]  }|j                   d k(  sd  yw)unsupportedr   Nr  r   s     r-   r   z-_build_inbox_list_response.<locals>.<genexpr>  s     WDT5E5E5VaWr   c              3   @   K   | ]  }|j                   d k(  sd  yw)errorr   Nr  r   s     r-   r   z-_build_inbox_list_response.<locals>.<genexpr>  s     Kdt/?/?7/JKr   )r   r   imported_countunsupported_counterror_count)r  r   r   r   )r   r0   r   s      r-   _build_inbox_list_responser    sb    9@Av"6*AEA*JQQQWEWWKeKK  Bs   A"c                     t               j                  | j                        }t        |j                  t        |j                        |j                        S )N)inbound_emailmailbox_configuredr   )r#   get_fiscal_document_settingsr   r   r  rP   r   )r$   settingss     r-   _serialize_settingsr    sH    !>>w?P?PQH%,, 6 67&& r/   c                     | xs dj                         j                         }|sy t        j                  |      st	        t
        j                  d      |S )NrX   z@Inserisci una casella email valida per ricevere bolle e fatture.r(   )r   lower_SIMPLE_EMAIL_PATTERNrh   r   r   HTTP_400_BAD_REQUESTr   s     r-   _normalize_inbound_emailr$    sR    +2$$&,,.J &&z233U
 	
 r/   c                    t               j                  | j                        }t               j	                  | j                  d      }t               }|r&|j                  r|j                  j                         ng D cg c]#  }|j                         s|j                         % }}t        |v }|j                  }|r|j                  nd }t        |xrA |xr= |j                         j                         |j                         j                         k(        }	t        |xr |xr |d uxr |xr |	      }
|sd}n|sd}n|d}n|sd}n|	sd}nd}t        t        |      |||d u|||	|
|		      S c c}w )
NT)adopt_legacy_if_neededzCConfigura prima la mailbox del locale che ricevera bolle e fatture.zUConfigura l'app Google Workspace nel backend per poter leggere la mailbox del locale.z`Collega l'account Google della mailbox documenti per abilitare la lettura delle email in arrivo.zbRicollega Google e accetta anche il permesso Gmail in sola lettura per leggere le email in arrivo.zuLa mailbox salvata non coincide con l'account Google collegato. Usa lo stesso indirizzo o collega l'account corretto.zMailbox pronta. La lettura automatica delle email e' attiva; il pulsante Sincronizza serve solo a forzare un controllo immediato.)	r  r  google_configuredgoogle_connectedgoogle_account_emailgmail_scope_grantedmailbox_matches_google_accountready_for_sync	next_step)r#   r  r   r   get_connectionr   scopesplitr   _GMAIL_READONLY_SCOPEr  account_emailrP   r!  r   )r$   r  
connectionr'  rC   granted_scopesr*  r  r)  r+  r,  r-  s               r-   _build_inbox_statusr5    s   !>>w?P?PQH+-<<W=N=Ngk<lJ68LV[e[k[k
0@0@0F0F0Hqs  Ftx|  yC  yC  yEdjjl  FN  F/>A**M7A:33t%) 	R 	R!'')-A-G-G-I-O-O-QQ&"
  	+	+d"	+  	+ +N Y	k			v	 x	+ L	 X	(.#+#4/1/'E%
 
= Fs   ?E2E2z	/settings)response_modelc                 .    t        |       }t        |      S rK   )r.   r  r$   admin_sessions     r-   r  r        )'2M}--r/   payloadc                     t        |      }t        | j                        }t               j	                  |j
                  |       t        |      S )N)r  )r.   r$  r  r#   upsert_fiscal_document_settingsr   r  )r;  r$   r9  r  s       r-   update_fiscal_document_settingsr>    sF    
 *'2M,W-B-BCM66}7N7N^k6l}--r/   z/inbox-statusc                 .    t        |       }t        |      S rK   )r.   r5  r8  s     r-    get_fiscal_document_inbox_statusr@    r:  r/   z/inboxc                 t    t        |       }t               j                  |j                        }t	        |      S rK   )r.   r#    list_fiscal_document_inbox_itemsr   r  r$   r9  r   s      r-   list_fiscal_document_inboxrD    s0    )'2M AA-BYBYZG%g..r/   z/inbox/syncc                    K   t        |       }t        |       d {    t               j                  |j                        }t        |      S 7 2wrK   )r.   r   r#   rB  r   r  rC  s      r-    sync_fiscal_document_inbox_routerF    sG     )'2M
$]
333 AA-BYBYZG%g.. 4s   AA3Az/notificationsc                 .    t        |       }t        |      S rK   )r.   r  r8  s     r-   !get_fiscal_document_notificationsrH    s    )'2M&}55r/   rX   allz7^(all|invoice|instant_invoice|delivery_note|to_review)$)defaultr      )rJ  
max_lengthi  i4  )rJ  geler      d   )rJ  rM  filterqc                     t        |      }t               j                  |j                        }	t	        |	| ||||      }
t        |
|	||      S )N)r   r   r   r   r   r   )r.   r#   r   r   r   r   )rQ  rR  r   r   r   r   r   r$   r9  r   filtered_recordss              r-   r   r     sY     *'2M 66}7N7NOG-   0gU[abbr/   z/archivec                 n    t        |       }t               j                  |j                        \  }}||dS )N)deleted_documentsdeleted_inbox_items)r.   r#   clear_fiscal_documents_archiver   )r$   r9  rV  rW  s       r-   rX  rX    s=    )'2M-=-?-^-^_l_v_v-w**.2 r/   z/{document_id}r  c                     t        |      }t               j                  |j                  |       }|st	        dd      d| dS )N  Documento fiscale non trovato.r(   T)okdeleted_document_id)r.   r#   delete_fiscal_documentr   r   )r  r$   r9  deleteds       r-   r^  r^  %  sF    
 *'2M 778O8OQ\]G4TUU{;;r/   z/upload.filesc                    K   t        |      }| st        dd      | D ]  }t        ||       d {     t               j	                  |j
                        }t        ||      S 7 6w)Ni  z2Seleziona almeno un documento fiscale da caricare.r(   )r   )r.   r   r   r#   r   r   r   )r`  r$   r9  uploadr   s        r-   upload_fiscal_documentsrc  1  so     
 *'2M4hii <$]F;;;<  66}7N7NOGW== 	<s   /A*A(7A*c                     t        |      }t               j                  |j                  |       }|t	        dd      t        ||      S )NrZ  r[  r(   )r.   r#   get_fiscal_documentr   r   r   )r  r$   r9  r0   s       r-   re  re  A  sI    
 *'2M33M4K4K[YF~4TUU%mV<<r/   z/{document_id}/apply-stornoc                 f   t        |      }t               j                  |d      st        t        j
                  d      t               j                  |j                  |       }|t        dd      t               j                  |j                  |       }t        ||j                  |j                  |j                  |D cg c]  }t        |       c}      }t        || |xs i        t               j                  |j                  |       }|t        dd      t        ||      S c c}w )	Nordiniz-Questo account non puo modificare gli ordini.r(   rZ  r[  r   )r  r   z:Documento fiscale non trovato dopo l'aggiornamento ordine.)r.   r#   r+   r   r   r,   re  r   r   r   r   r   r   rF   r   r   )r  r$   r9  r0   r   rC   r   	refresheds           r-   apply_fiscal_document_stornori  M  s   
 *'2M44]HM(A(AJyzz33M4K4K[YF~4TUU%'BB=CZCZ\ghN3******TbcDA$GcK 0%2
 !"66}7N7NP[\I4pqq%mY?? ds   D.z/{document_id}/mark-reviewedc                     t        |      }t               j                  |j                  |       }|t	        dd      t               j                  |j                  | d      }t        ||      S )NrZ  r[  r(   reviewedr   )r.   r#   re  r   r   update_fiscal_documentr   )r  r$   r9  r0   updateds        r-   mark_fiscal_document_reviewedrn  m  sr    
 *'2M33M4K4K[YF~4TUU 77  8 G
 &mW==r/   z/{document_id}/downloadc                 &   t        |      }t               j                  |j                  |       }|t	        dd      t        |j                        }|j                         st	        dd      t        ||j                  |j                        S )NrZ  r[  r(   z)Il file non e piu disponibile sul server.)
media_typefilename)r.   r#   re  r   r   r   storage_pathexistsr   r   r   )r  r$   r9  r0   rr  s        r-   download_fiscal_documentrt  ~  s    
 *'2M33M4K4K[YF~4TUU++,L 4_``1A1AFL_L_``r/   )ar   pathlibr   rz   fastapir   r   r   r   r	   r
   r   fastapi.responsesr   app.api.depsr   app.models.fiscal_documentsr   r   r   r   r   r   r   r   r   r   r   *app.services.fiscal_document_inbox_servicer   $app.services.google_workspace_clientr   #app.services.google_workspace_storer   $app.services.fiscal_document_servicer   r   r   app.services.tenant_storer   r    r!   r"   r#   routercompiler"  r1  
IGNORECASEr   r.   rB   rv   rf   objectrF   rg   rw   r}   r   r   tupler   r   r   r   r   r   rN   r   r   rP   r   r  r  r  r  r$  r5  rL   r  putr>  r@  rD  postrF  rH  r   deleterX  r^  rc  re  ri  rn  rt  re   r/   r-   <module>r     s     	 V V V * (    R O J 
  
"

#@A H $"** TMM ?  1M Rl (4NQm4m rvwz  }C  xC  sD &d3;&7 <\ 6$sF{"3d": ?[^b?b &?cDj ?S ?13: 1# 1	t 	d
 		0D 	sUYz[^ae[eOeIf 	+? DX[_D_ $, ,AU ,Zl ,^/C HZ >
 4 
 
 &'    :	 
 *  :  Dj  

 L 6:&' *+d2 	
  !0gS&[(9D(@ gT gR R=^ R*"? D_ $-J(K Po  5O 	C$J 	3: 	, ,5R ,^ K(BC<CO<T ./ .Ys . D.
 K(BC  '7.0..  . D. O,IJ@G@X .o .]z . K.
 H%DE:A/:R / /Wv / F/ ]+JKFMoF^ /O /  dC / L/ -NOAHAY 6 6^ 6 P6
 B:;/hi$37Tdt<dqR8 #>raC0a(&7cc
Tzc *c :	c
 Djc c c c !c <c. z>Eo>V O [_`ceh`h[i      '7<<< 
#v+< !< Y'BC"3i&7>
>> !> D> -?@  '7=== = A= *+  '7@@@ @ ,@> +<NO  '7>>> > P>  %&  '7aaa 'ar/   