
    3\iA*                       U d dl mZ d dlZd dlmZmZ d dlZd dlZd dlmZ d dl	Z	d dl
mZ d dlmZmZ d dlmZ d dlmZmZ  ej(                  e      Zi Zd	ed
<   dZdZg dZdddddddZdddddZddddddZd/d Zd0d!Z d1d"Z!d2d#Z"d3d$Z#d4d%Z$d5d&Z%	 	 	 	 	 	 	 	 d6d'Z&	 	 	 	 	 	 	 	 d7d(Z'	 	 	 	 	 	 	 	 d7d)Z(	 	 	 	 	 	 	 	 d8d*Z)	 	 	 	 	 	 	 	 	 	 d9d+Z*d:d,Z+d;d<d-Z,d;d<d.Z-y)=    )annotationsN)datetimetimezone)quote)get_settings)GOOGLE_DRIVE_ENDPOINTGOOGLE_SHEETS_ENDPOINT)&get_active_google_workspace_connection)SessionIdentityget_tenant_storez#dict[tuple[str, int], asyncio.Lock]_REPORTS_SHEET_LOCKSz'application/vnd.google-apps.spreadsheetSegnalazioni)IDzData segnalazione
DipendentezEmail dipendente	CategoriaPrioritaStatoTitoloDescrizioneLuogoz
Nota adminzAggiornato dazData risoluzionezUltimo aggiornamentoProblemaDannoRotturaMalfunzionamentozRichiesta acquistoAltro)problemdamagebreakagemalfunctionpurchase_requestotherBassaNormaleAltaUrgente)lownormalhighurgentNuova	VisionatazIn lavorazionezSegnalata alla proprietaRisolta)newreviewedin_progressreported_to_ownerresolvedc                F    | j                  dd      j                  dd      S )N\z\\'z\'replacevalues    =apps/backend-hub/app/services/reports_google_sheet_service.py_escape_drive_query_valuer:   @   s     ==v&..sE::    c                6    | j                  dd      }d| d| S )Nr4   z''z'!r5   )sheet_title	range_refescaped_titles      r9   _sheet_ranger@   D   s'    ''T2M}oR	{++r;   c                r    | }d}|dkD  r)t        |dz
  d      \  }}t        d|z         |z   }|dkD  r)|xs dS )N r         A   A)divmodchr)indexr8   result	remainders       r9   _column_namerL   I   sP    EF
!)!%!)R0yR)^$v- !) =Sr;   c                   t        | xs i j                  d      xs d      }t        j                  d|      }|rt	        |j                  d            S t        j                  t        j                        j                  S )N
created_atrB   z^(\d{4})rC   )strgetrematchintgroupr   nowr   utcyear)reportrN   rR   s      r9   _report_sync_yearrY   R   s_    fl''5;<JHH[*-E5;;q>""<<%***r;   c                    | yt        |       S )NrB   )rO   r7   s    r9   _cellr[   Z   s    }u:r;   c                v    dD ]4  }t        | j                  |      xs d      j                         }|s2|c S  y)N)reporter_namereporter_usernamereporter_emailrB   r   )rO   rP   strip)rX   keyr8   s      r9   _reporter_labelrb   `   s>    G FJJsO)r*002L r;   c                   g }| D ]  }|j                  t        |j                  d            t        |j                  d            t        |      t        |j                  d            t        j                  t        |j                  d      xs d      t        |j                  d                  t        j                  t        |j                  d      xs d      t        |j                  d                  t        j                  t        |j                  d      xs d      t        |j                  d                  t        |j                  d            t        |j                  d	            t        |j                  d
            t        |j                  d            t        |j                  d            t        |j                  d            t        |j                  d            g        |S )NidrN   r_   categoryrB   prioritystatustitledescriptionlocation
admin_notestatus_updated_by_nameresolved_at
updated_at)appendr[   rP   rb   REPORT_CATEGORY_LABELSrO   REPORT_PRIORITY_LABELSREPORT_STATUS_LABELS)reportsrowsrX   s      r9   _rows_for_reportsru   h   s   D 
fjj&'fjj./'fjj!123&**3vzz*/E/K+LeTZT^T^_iTjNkl&**3vzz*/E/K+LeTZT^T^_iTjNkl$((VZZ-A-GR)H%PVPZPZ[cPdJeffjj)*fjj/0fjj,-fjj./fjj!9:;fjj/0fjj./	

& Kr;   c                 K   | j                  t         ddd| idt         dt        |       dddd	d
d
d       d {   }|j	                          |j                         j                  dg       }t        |t              r6|r4|d   }t        |t              r|j                  d      rt        |d         S y 7 {w)Nz/filesAuthorizationBearer z trashed = false and mimeType = 'z' and name = 'z' and 'root' in parentsrC   zcreatedTime asczfiles(id, name, createdTime)true)qpageSizeorderByfieldssupportsAllDrivesincludeItemsFromAllDrivesheadersparamsfilesr   rd   )
rP   r   GOOGLE_SPREADSHEET_MIME_TYPEr:   raise_for_statusjson
isinstancelistdictrO   )clientaccess_tokenrh   responser   firsts         r9   _find_reports_spreadsheetr      s      ZZ 
!( GL>":;##?"@ A8?@ A((
 (4!')/
    H" MMO,E%5aeT"uyyuT{##/s   ?B?B=A<B?c                  K   | j                  t         dd| ddd|iddt        iigd       d {   }|j                          t	        |j                         d	         S 7 0w)
Nz/spreadsheetsrx   application/jsonrw   zContent-Typerh   
properties)r   sheetsr   r   spreadsheetId)postr	   REPORTS_SHEET_TAB_NAMEr   rO   r   )r   r   rh   r   s       r9   _create_reports_spreadsheetr      s      [[!
"-0&|n5.

 #E*$w0F&GHI
 ! 
 
H x}}/00
s   3A(A&1A(c               r   K   t        | ||       d {   }|r|S t        | ||       d {   S 7 7 w)Nr   rh   )r   r   )r   r   rh   existings       r9   _resolve_reports_spreadsheetr      sB      /vLX]^^H,V,V[\\\ _ ]s   737577c                 K   | j                  t         dt        |d       dd| iddi       d {   }|j                          |j	                         j                  d	g       }t        |t              r|st        d
      t        |d   t              r|d   j                  di       ni }t        |j                  d      xs d      t        |j                  d      xs t              fS 7 w)N/spreadsheets/rB   saferw   rx   r}   z!sheets(properties(sheetId,title))r   r   z#Google Sheet senza tab disponibili.r   r   sheetIdrh   )rP   r	   r   r   r   r   r   
ValueErrorr   rS   rO   r   )r   r   spreadsheet_idr   r   r   s         r9   _first_sheet_propertiesr      s      ZZ!
".~B1O0PQ GL>":;=>    H
 ]]_  2.Ffd#6>??4>vay$4O|R0UWJz~~i(-A.JNN74K4eOe0fffs   3C3C1B<C3c                 K   | j                  t         dt        |d       dd| dddd	|d
didddid|ddddddidddddiddidd|ddt        t              diigi        d {   }|j                          y 7 w)!Nr   rB   r   z:batchUpdaterx   r   r   requestsupdateSheetPropertiesfrozenRowCountrC   )r   gridPropertieszgridProperties.frozenRowCount)r   r}   
repeatCellr   )r   startRowIndexendRowIndexuserEnteredFormatboldTgq=
ףp?gffffff?g\(\?)redgreenblue)
textFormatbackgroundColorz-userEnteredFormat(textFormat,backgroundColor))rangecellr}   autoResizeDimensions
dimensionsCOLUMNS)r   	dimension
startIndexendIndexr   )r   r	   r   lenREPORTS_SHEET_HEADERSr   )r   r   r   sheet_idr   s        r9   _format_reports_sheetr      s      [[!
".~B1O0PP\]&|n5.

 +2:O_abNc&d"A. !-5Z[!\//5tn;?$X\3]2! #R	# +$'/)2*+(+,A(B	'-	'
 ! & &HN O&s   A-B/B0Bc          
     6  K   d| }t               j                  | |      }t        gt        |      }t	        |        d {   }t               }t        j                  |j                        4 d {   }t        ||j                  |       d {   }t        ||j                  |       d {   \  }	}
t        t        t                    }t        t        |
d|       d      }|j!                  t"         d	t        |d       d
| ddd|j                   ii        d {   }|j%                          t        t        |
d      d      }|j'                  t"         d	t        |d       d
| d|j                   ddddit        |
d      d|d       d {   }|j%                          t)        ||j                  ||	       d {    d d d       d {    y 7 7 }7 `7 C7 7 T7 %7 # 1 d {  7  sw Y   y xY ww)NzSegnalazioni rW   )timeoutr   )r   r   zA:rB   r   r   z/values/z:clearrw   rx   r   A1r   r   valueInputOptionRAWROWS)r   majorDimensionvalues)r   r   r   )r   r   r   )r   list_reports_for_google_sheetr   ru   r
   r   httpxAsyncClient(google_workspace_request_timeout_secondsr   r   r   rL   r   r   r@   r   r	   r   putr   )sessionrW   rh   rs   r   
connectionsettingsr   r   r   r=   last_columnclear_rangeclear_responseupdate_rangeupdate_responses                   r9   !_sync_reports_google_sheet_lockedr     s>    D6"E >>wT>RG#A&7&@AF=gFFJ~H  )Z)Z[  
  
_e;FQ[QhQhpuvv&=#00)'
 !
+
 #3'<#=>L;-6HIPRS%{{%&nU>PR5S4TT\]h\iiop$
0G0G/H&IJ  +  
 

 	'')\+t<2F &

%&nU>PR5S4TT\]i\jk#*:+B+B*C!D 2 '.'T:f`fg !+ !
 
 	((*##00)	
 	
 	
7 
  
  
 G 
v!


	
7 
  
  
  
s   AHG02H6G37H:HG6H6G97A7H.G</A:H)G>*0HH HH*H+H3H6H9H<H>H HHH
HHHc                $  K   t        |      }| j                  |f}t        j                  |t	        j
                               }|4 d {    t        | |       d {    d d d       d {    y 7 *7 7 	# 1 d {  7  sw Y   y xY ww)Nr   )rY   	tenant_idr   
setdefaultasyncioLockr   )r   rX   rW   lock_keylocks        r9   sync_reports_google_sheetr   /  s     V$D!!4(H**8W\\^DD D D/dCCCD D DCD D D DsZ   AB
A5BA;A7 A;$B/A90B7A;9B;BBB	Bc                   K   	 t        | |       d {    y 7 # t        $ r# t        j                  d| j                         Y y w xY ww)Nz@Sincronizzazione Google Sheet segnalazioni fallita per tenant %s)r   	Exceptionlogger	exceptionr   )r   rX   s     r9    sync_reports_google_sheet_safelyr   7  sD     p'888 p[]d]n]nops1   A
  A
 )AA
AA
)r8   rO   returnrO   )r=   rO   r>   rO   r   rO   )rI   rS   r   rO   )rX   dict[str, object] | Noner   rS   )r8   objectr   rO   )rX   zdict[str, object]r   rO   )rs   zlist[dict[str, object]]r   zlist[list[str]])r   httpx.AsyncClientr   rO   rh   rO   r   z
str | None)r   r   r   rO   rh   rO   r   rO   )r   r   r   rO   r   rO   r   ztuple[int, str])
r   r   r   rO   r   rO   r   rS   r   None)r   r   rW   rS   r   r   )N)r   r   rX   r   r   r   ).
__future__r   r   r   r   loggingrQ   urllib.parser   r   app.core.configr   $app.services.google_workspace_clientr   r	   %app.services.google_workspace_sessionr
   app.services.tenant_storer   r   	getLogger__name__r   r   __annotations__r   r   r   rp   rq   rr   r:   r@   rL   rY   r[   rb   ru   r   r   r   r   r   r   r   r    r;   r9   <module>r      s   "  '  	   ( ^ X G 
		8	$<> 9 >H '  $ %,  	  #3 ;,
+0  	
 @11 1 	1
 	1*	]	] 	] 		]
 		]gg g 	g
 g&. .  .  	. 
 .  
. b'
TDpr;   