
    i                        d dl mZmZmZmZ 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 d dlmZ d dlmZ d dlZd dlZd dlZd dlmZ d d	lmZ d d
lmZ d dlmZ d dlZd dlZd dlZd dlZd dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z* d dl+Z+d dl,m-Z-  e-d        ee.      Z/ ee/dddii        eej`                  d      Z1ej`                  e/jd                  d<    ee/      Z3 ee/      Z4ejj                  e/jd                  d<   de/jd                  d<   ejl                  e/jd                  d<    ee/      Z7e/jq                  ddg      d        Z9e/jq                  ddg      d         Z:e/jq                  d!dg      d"        Z;e/jq                  d#d$g      d%        Z<e/jq                  d&d$g      d'        Z=e/jq                  d(dg       e       d)               Z>e/jq                  d*d$g       e       d+               Z?e/jq                  d,d$g      d-        Z@e/jq                  d.d$g       e       d/               ZAe/jq                  d0dg       e       d1               ZBe/jq                  d2dd$g       e       d3               ZCe/jq                  d4d$g       e       d5               ZDe/jq                  d6d$g       e       d7               ZEe/jq                  d8d$g       e       d9               ZFe/jq                  d:d$g       e       d;               ZGe/jq                  d<d$g       e       d=               ZHd>eIfd?ZJd@ ZKdA ZLdUdBZMdC ZNdD ZOdE ZPdF ZQdG ZRdH ZSdI ZTdJ ZUdK ZVde/_9        e/jr                  r~d dlZd dLlWmXZX 	 ej                  dMz   ZZ eXeZdNdOP      Z[e[j                  ej                          ej                  dQ      Z_e[j                  e_       e/j                  j                  e[       e.dRk(  re/j                  ddST       yy)V    )Flaskjsonifyrequestmake_response)CORS)BcryptN)
JWTManagerjwt_requiredcreate_access_tokenget_jwtget_jwt_identity)create_engine)
SQLAlchemy)datetime)	timedelta)timezone)ZoneInfo)TokenBlockListCustomerCustomer_dataProviderProvider_dataProvider_serviceEventsReviews)GoogleCalendarClient)load_dotenvz.env.testingz/*originszhttp://localhost:4200)	resourcesT)echoSQLALCHEMY_DATABASE_URIJWT_SECRET_KEYHS256JWT_ALGORITHMJWT_ACCESS_TOKEN_EXPIRESz/debugGET)methodsc                  F    t        t        t        j                              S N)r   dictr   headers     /var/www/api/v1/app.pydebugr/   3   s    4())r-   /c                  ^    t         j                  j                  d       t        ddi      dfS )Nz	API /mainmessagezWelcome to GetWork API v1.0!   apploggerwarningr   r,   r-   r.   indexr8   8   s*    JJ{#I<=>sBBr-   z/helloc                  ^    t         j                  j                  d       t        ddi      dfS )Nz
API /hellor2   zHello GetWork API!   r4   r,   r-   r.   hellor;   =   s*    JJ|$I234S88r-   z/register/customerPOSTc                  L   t         j                  j                  d       i } 	 t        j                  d      }|j                  d      }|j                  d      }t        j                  |      d
k(  r7d| d<   t         j                  j                  d| d   z          t        |       dfS t        j                  j                  t        j                         j#                  |      j%                         }|r7d| d<   t         j                  j                  d| d   z          t        |       dfS t'        j(                         }t        |||      }t        j                  j+                  |       	 t        j                  j-                          t        j                  j/                  |       |j0                  }d}	t3        ||	      }
t        j                  j+                  |
       t        j                  j-                          d| d<   t         j                  j                  dt        |      z          |}d}dt        |      z   dz   t        |      z   }t5        j6                         }|j9                  |||      }|r,t         j                  j                  dt        |      z          nUd| d<   t         j                  j                  dt        |      z          t         j                  j                  d| d   z          t         j                  j                  d       t        |       dfS # t        $ r{}t        |      | d<   t         j                  j                  dt              z          t         j                  j                  dt        |      z          t        |       d	fcY d }~S d }~ww xY w# t        $ rh}t        j                  j;                          t        |      | d<   t         j                  j                  d| d   z          t        |       d fcY d }~S d }~ww xY w)!NzAPI: register/customer INPUTTforceemailpassworderrorzAPI: register/customer DATA: zAPI: register/customer ERR_1:   FzIncorrect emailzAPI: register/customer ERR_2: i  r@   zThat Customer already existszAPI: register/customer ERR_3:    )customer_idcustomer_typezCustomer added successfullyr2   z%API: register/customer NEW REGISTER: zNew registrationzNew Registration ID: z email: z:API: register/customer - Registration mail sent - new ID: zRegistration Email is not sentz>API: register/customer - Registration mail not sent - new ID: zAPI: register/customer ERR_4: zAPI: register/customer OUTPUTr:   zAPI: register/customer ERR_5:   )r5   r6   infor   get_jsonget	Exceptionstrr7   r   app_funccheck_emaildbsessionqueryr   r@   	filter_byfirstuuiduuid4addcommitrefreshidr   	app_emailBrevoEmailServicesendrollback)resdatar@   rA   echeck_email_rownew_uuidnew_customernew_idnew_typenew_customer_datato_emailsubjecthtml_contentae	mail_sents                   r.   register_customerrm   D   s?   JJOO23
C!d+!88J' 	U#U*(G

;c'lJKs|S  jj&&x~~6@@u@MSSUO5G

;c'lJKs|S  ::<hh7


|$'	%JJJJ|,!__FH -" (!* JJNN,-JJ:C	NJJOOCc%jPQ H(G2S[@:MPSTYPZZL ,,.B>I

 \_bci_j jk?G

""#cfijpfq#qr

""#Cc'l#RSJJOO;<3<$$o  !1vG

:SYFG

;c!fDEs|S  	!p  	%JJ!q6CLJJ?#g,NO3<$$		%s>   8L+ /F;N2 +	N/4A0N*$N/*N/2	P#;APP#P#z/login/customerc                  F   t         j                  j                  d       i } 	 t        j                  d      }|j                  d      }|j                  d      }t        j                  j                  t        j                  t        j                        j                  |
      j!                         }|rt"        j%                  |j                  |      }|rUt'        t        |j                              }d| d<   || d<   t         j                  j                  d       t        |       dfS d| d<   t         j                  j                  d| d   z          t        |       d	fS d| d<   t         j                  j                  d| d   z          t        |       d	fS # t        $ r{}t        |      | d<   t         j                  j                  dt              z          t         j                  j                  dt        |      z          t        |       d	fcY d }~S d }~ww xY w)NzAPI: login/customer INPUTTr>   r@   rA   rB   zAPI: login/customer DATA:zAPI: login/customer ERR_1: rC   rD   )identityzCustomer logged successfullyr2   access_tokenzAPI: login/customer OUTPUT r:   Wrong Username or PasswordzAPI: login/customer ERR_2: zAPI: login/customer ERR_3: )r5   r6   r7   r   rJ   rK   rL   rM   r   rP   rQ   rR   r   rZ   rA   rS   rT   bcryptcheck_password_hashr   )r_   r`   r@   rA   ra   customer_rowcheck_passwordrp   s           r.   login_customerrv      s   JJ23
C
!d+ !88J' ::##HKK0A0ABLLSXLY__aL33L4I4I8T.LOO8LML;C	N".CJJ<=3<$$7CLJJ<s7|KL3<$$3G

83w<GHs|S  -  !1vG

6TBC

83q6ABs|S  	!s   8F 	H %A0HH H z/customer/getdatac                  H   t         j                  j                  d       i } t        t              } d| v r2t         j                  j                  d| d   z          t        |       dfS | d   }t         j                  j                  dt        |      z          t        j                  j                  t              j                  |      j                         }t        j                  |      }t        j                  |      }t        j                  j                  t               j                  |      j                         }t        j                  |      }|j#                  d	      }||d	<   d
| d<   || d<   t         j                  j                  d       t        |       dfS )NzAPI: customer/getdata INPUT rB   zAPI: customer/getdata ERR_1: rC   rF   z#API: customer/getdata CUSTOMER_ID: rF   rZ   r@   zCustomer get data succesfullyr2   resultzAPI: customer/getdata OUTPUTr3   )r5   r6   r7   	get_tokenr   r   rM   rP   rQ   rR   r   rS   onerN   
class2jsoncustomer_output_datar   rK   )r_   rF   customer_data_rowdb_jsonoutput_datavalues         r.   customer_datar      sY    JJ56
C G
C#~

:S\IJs|S  m$K JJ<s;?OOP

((7AAkAZ^^`!!"34G//8K

((2<<<LPPR!!"34GKK E K4C	NCMJJ563<r-   z/customer/adddatac                     t         j                  j                  d       i } t        t              } d| v r2t         j                  j                  d| d   z          t        |       dfS | d   }d }d }d }d }d }d }d }	 t	        j                  d      }	|	j                  d      }|	j                  d	      }|	j                  d
      }|	j                  d      }|	j                  d      }t        t        j                  ||            }d}t        j                  j                  t              j!                  |      j#                         }|r^|r||_        |r||_        |r||_        |r||_        |r||_        |r||_        |r||_        	 t        j                  j3                          d| d<   t         j                  j                  d       t        |       dfS # t        $ r{}
t        |
      | d<   t         j                  j                  dt        	      z          t         j                  j                  dt        |
      z          t        |       dfcY d }
~
S d }
~
ww xY w# t        $ rh}
t        j                  j5                          t        |
      | d<   t         j                  j                  d| d   z          t        |       dfcY d }
~
S d }
~
ww xY w)NzAPI: customer/adddata INPUT rB   zAPI: customer/adddata ERR_1: rC   rF   Tr>   addresscitymobile
first_name	last_nameHRzAPI: customer/adddata DATA: zAPI: cutomer/adddata ERR_5: rx   zAPI: customer/getdata ERR_6: rH   zUpdate Successfulr2   zAPI: customer/adddata OUTPUTr3   )r5   r6   r7   r{   r   r   rJ   rK   rM   rN   set_locationrL   rP   rQ   rR   r   rS   r|   r   r   r   r   r   locationlanguagerX   r^   )r_   rF   r   r   r   r   r   r   r   r`   ra   r   s               r.   customer_updater      s    JJ56
C G
C#~

:S\IJs|S  m$K GDFJIHH!d+((9%xx(#XXl+
HH[)	 x,,WT:; 

((7AAkAZ^^`%-$"'f$+j(3I'1(&/(&/	%JJ )C	NJJ563<5  !1vG

9CIEF

9CFBCs|S  	!$  	%JJ!q6CLJJ>WMN3<$$		%s?   ;BG 
I  	I"A0III 	K)AKKKz/forget/customerc                     t         j                  j                  d       i } 	 t        j                  d      }d}|j                  d      }|j                  d      }t        j                  j                  t              j                  ||
      j                         }|rt         j                  j                  dt        |j                        z          d}dj!                  t#        j$                  t&        j(                  t&        j*                  z   |            }d|z   }	t,        j/                  |	      j1                  d      }
t3        j4                  ||	      }|rd| d<   nbd| d<   t         j                  j                  dt        |      z          t         j                  j                  d| d   z          t        |       d	fS |
|_        	 t        j                  j9                          t         j                  j                  dt        |
      z          t         j                  j                  d       t        |       dfS d| d<   t         j                  j                  d| d   z          t        |       d	fS # t        $ rP}t        |      | d<   t         j                  j                  dt        |      z          t        |       d	fcY d }~S d }~ww xY w# t        $ rh}t        j                  j;                          t        |      | d<   t         j                  j                  d| d   z          t        |       dfcY d }~S d }~ww xY w)NzAPI: forget/customer INPUTTr>   z+385mobile_phoner@   rB   zAPI: forget/customer ERR_1: rC   )country_coder   z"API: forget/customer Customer-ID:     )kGetWork_utf-8
Successfulr2   zEmail is not sentzAPI: forget/customer Email:zAPI: forget/customer ERR_3: z)API: forget/customer DB: updated passwordzAPI: forget/customer OUTPUTr3   zAPI: forget/customer ERR_2: rH   zWrong UsernamezAPI: forget/customer ERR_4: )r5   r6   r7   r   rJ   rK   rL   rM   r   rP   rQ   rR   r   rS   rT   rZ   joinrandomchoicesstringascii_lettersdigitsrr   generate_password_hashdecoderN   send_mail_passwordrA   rX   r^   )r_   r`   r   r   r@   ra   rt   lengthrandom_stringnew_passwordhashed_passwordrl   s               r.   forget_customerr     s   JJ34
C	!d+.)! ::##H-77\Z`7aggiL

?#looBVVWv/C/Cfmm/SW] ^_!M1 77ELLWU //lC	)C	N.CLJJ<s5zIJJJ=GLM3<$$ /		%JJJJJSQ`MaabJJ<=3<## (G

9CLHIs|S  M  !1vG

9CFBCs|S  !<  	%JJ!q6CLJJ=GLM3<$$		%s>   :I; A4K ;	KAK	KK	M AM=MMz/newpassword/customerc                     t         j                  j                  d       i } t        t              } d| v r2t         j                  j                  d| d   z          t        |       dfS | d   }	 t	        j                  d      }|j                  d      }|j                  d	      }|j                  d
      }t        j                  j                  t              j                  |      j                         }|ryt         j#                  |j$                  |      }|r t         j                  j                  d       nnd| d<   t         j                  j                  d| d   z          t        |       dfS d| d<   t         j                  j                  d| d   z          t        |       dfS ||k7  r7d| d<   t         j                  j                  d| d   z          t        |       dfS t         j'                  |      j)                  d      }	|	|_        	 t        j                  j+                          t         j                  j                  dt        |	      z          d| d<   t         j                  j                  d       t        |       dfS # t        $ r{}t        |      | d<   t         j                  j                  dt              z          t         j                  j                  dt        |      z          t        |       dfcY d }~S d }~ww xY w# t        $ rh}t        j                  j-                          t        |      | d<   t         j                  j                  d| d   z          t        |       dfcY d }~S d }~ww xY w)NzAPI: newpassword/customer INPUTrB   z!API: newpassword/customer ERR_1: rC   rF   Tr>   rA   new_password1new_password2z API: newpassword/customer DATA: z!API: newpassword/customer ERR_5: ry   z*API: newpassword/customer OLD PASSWORD: OKzWrong Old Passwordz!API: newpassword/customer ERR_6: rq   z!API: newpassword/customer ERR_7: zNew Passwords are not the same.z!API: newpassword/customer ERR_8: r   z1API: newpassword/customer DB: updated password = z!API: newpassword/customer ERR_9: rH   OKr2   z API: newpassword/customer OUTPUTr3   )r5   r6   r7   r{   r   r   rJ   rK   rL   rM   rP   rQ   rR   r   rS   r|   rr   rs   rA   r   r   rX   r^   )
r_   rF   r`   old_passwordr   r   ra   rt   ru   r   s
             r.   newpassword_customerr   C  s    JJ89
C G
C#~

>WMNs|S  m$K	!d+xx
+11 ::##H-77;7GKKML33L4I4I<XJJKL/CLJJBS\QR3<$$3G

>WMNs|S   %8G

>WMNs|S  33MBII'RO+L!




NQTUdQeef C	NJJ9:3<S  !1vG

=D	IJ

>QGHs|S  	!B  !


1vG

>WMNs|S  	!s@   -A	J A	L 	LA0L
L
L	NAM>8N>Nz/logincheck/customerc                  D   t         j                  j                  d       i } d| d<   t        t              } d| v r2t         j                  j                  d| d   z          t        |       dfS d| d<   d| d	<   t         j                  j                  d
       t        |       dfS )NzAPI: logincheck/customer INPUTFloggedinrB   z API: logincheck/customer ERR_1: rC   TcustomertypezAPI: logincheck/customer OUTPUTr3   )r5   r6   r7   r{   r   r   )r_   s    r.   logincheck_customerr     s     JJ78
CC
O
G
C#~

=GLMs|S   C
OCKJJ893<r-   z/logout/customerc                  ~   t         j                  j                  d       i } d| d<   t        j                  j                  d      }|s7d| d<   t         j                  j                  d| d   z          t        |       dfS t               d	   }t        ||      }t        j                  t        j                        }t        j                  j                  t!        |||
             t        j                  j#                          d| d<   d| d<   d| d<   t         j                  j                  d       t        |       dfS )NzAPI: logout/customer INPUTF	loggedoutAuthorizationMissing Authorization headerrB   zAPI: logout/customer ERR_1: rC   jti)rF   r   
created_atTr   r   zLogged out successfully!r2   zAPI: logout/customer OUTPUTr3   )r5   r6   r7   r   r+   rK   r   r   
check_authr   nowr   utcrP   rQ   rW   r   rX   )r_   auth_headerr   rF   r   s        r.   logoutr     s    JJ34
CC//%%o6K5G

9CLHIs|S  
)E
C[-K
,,x||
$CJJNN>kccRSJJCCK/C	NJJ453<r-   z/customer/checkeventsc                     t         j                  j                  d       i } d| d<   	 t        t              }d|v r2t         j                  j                  d|d   z          t        |      dfS 	 t	        j                  d      }|j                  d      }|j                  d	      }t        t        j                  t        j                        }t        j                  }t        j                   }|j#                  ||      }	|	d   r/|	d   | d<   t         j                  j                  d| d   z          | S g }
|	d   D ]_  }i }t%        j&                  |d   d   |d   d         |d<   t%        j&                  |d   d   |d   d         |d<   |
j)                  |       a 	 |
| d<   t         j                  j                  d       | S # t        $ r{}t        |      | d<   t         j                  j                  d
t              z          t         j                  j                  dt        |      z          t        |       dfcY d }~S d }~ww xY w# t        $ r{}t        |      | d<   t         j                  j                  d
t              z          t         j                  j                  dt        |      z          t        |       dfcY d }~S d }~ww xY w)Nz!API: customer/check_events INPUT FrB   z$API: customer/check_calendar ERR_1: rC   Tr>   
service_iddescriptionz#API: customer/check_calendar DATA: z$API: customer/check_calendar ERR_2: service_account_filecalendar_idz"API: customer/check_events ERR_2: eventsstartdateTimetimeZone
start_timeendend_timez"API: customer/check_events ERR_3: z"API: customer/check_events OUTPUT )r5   r6   rI   r{   r   r7   r   rJ   rK   rL   rM   r   app_settingsSERVICE_ACCOUNT_FILECALENDAR_ID
DELAY_DAYS
TOTAL_DAYSget_events_in_rangerN   time_calendar_convertappend)r_   tokenr`   r   r   ra   gc	first_day
days_aheadretarreventarr1s                r.   customer_check_eventsr     s    JJOO78
CCL-!'"eJJEgVW5>3&&		%##$/D,/J((=1K "!-!B!B$00 !++	!,,
$$Y
;w<w<CLJJCc'lRSJ ]ED!)!?!?gz@Z\abi\jku\v!wD'==eEl:>VX]^cXdeoXpqDJJt	 # CMJJOO89JI  	%q6CLJJDs4yPQJJEANO3<$$		%8  !1vG

@3t9LM

?#a&HIs|S  	!sX   AI .8G &BI 5A)I 	I	A0I>I	?I I		I 	KA0KKKz/customer/addeventc            	         t         j                  j                  d       i } d| d<   	 t        t              }d|v r2t         j                  j                  d|d   z          t        |      dfS |d   }	 t	        j                  d      }|j                  d	      }|j                  d
      }|j                  d      }|j                  d      }|j                  d      }t        t        j                  t        j                        }
t        |
j                         }dt        |      z   }t        j"                  }t%        j&                  |d      j)                  t         j*                        }t%        j&                  |d      j)                  t         j*                        }|j-                  |      }|j/                  d      }d}|
j1                  |||||      }|d   dk7  rC|d   | d<   t         j                  j                  dt        | d         z          t        |       dfS |d   }|d   }|j/                  d      |d   d   d}d}d|v r|d   }t3        |||||||      }t4        j6                  j9                  |       	 t4        j6                  j;                          t         j                  j                  d       	 	 |d   | d<   t         j                  j                  d        | d!fS # t        $ r{}	t        |	      | d<   t         j                  j                  dt              z          t         j                  j                  dt        |	      z          t        |       dfcY d }	~	S d }	~	ww xY w# t        $ rh}	t4        j6                  j=                          t        |	      | d<   t         j                  j                  d| d   z          t        |       dfcY d }	~	S d }	~	ww xY w# t        $ rP}	t        |	      | d<   t         j                  j                  dt        |	      z          t        |       dfcY d }	~	S d }	~	ww xY w)"NzAPI: customer/add_event INPUT FrB   zAPI: customer/add_event ERR_1: rC   rF   Tr>   r   provider_idr   r   r   zAPI: customer/add_event DATA: zAPI: customer/add_event ERR_2: r   zRezervacija saune - User #z%Y-%m-%dT%H:%M:%S.%fZtzinfoz%Y-%m-%d %H:%M   zAPI: customer/add_event ERR_3: r   z%Y-%m-%dT%H:%M:%SZr   )r   r   r   z'API: customer/add_event - DB record: OKzAPI: customer/add_event ERR_4: rH   zAPI: customer/add_event ERR_5: zAPI: customer/add_event OUTPUT r3   )r5   r6   rI   r{   r   r7   r   rJ   rK   rL   rM   r   r   r   r   r   r   PRENOTED_TEXTr   strptimereplacer   
astimezonestrftime	add_eventr   rP   rQ   rW   rX   r^   )r_   r   rF   r`   r   r   r   r   description_inpra   r   tzsummaryr   start_time_utcend_time_utcstart_time_localstart_time_local_strr   event_detailsdatetime_startdatetime_endr   	new_events                           r.   customer_add_eventr     s    JJOO45
CCLL!'"eJJ@5>QR5>3&&M*	%##$/D,/J((=1K'*JxxH"hh}5O "!-!B!B$00 bkk".[1AA-- "**:7NOWW_g_k_kWl((3JKSS[c[g[gSh *44R8/889IJ ll7$8*oW_`LE!w<CLJJ@3s7|CTTU3<$$ G&w/ %--.BC%e,Z8
 M)'6K:{KP^`lnyz	


y!	%JJJJOOEFQ@ w<CLJJOO568O  	%q6CLJJ?#d)KLJJ@3q6IJ3<$$		%f  	%JJ!q6CLJJ@3w<OP3<$$		%
  !1vG

<s1vEFs|S  !s   AO+ -O+ 3A+K0 EO+ &AO+ =M7 0	M49A0M/)M4*O+ /M44O+ 7	O( AO#O(O+ #O((O+ +	Q4AP?9Q?Qz/customer/deleteeventc                  >
   t         j                  j                  d       i } d| d<   d| d<   	 t        t              }d|v r2t         j                  j                  d|d   z          t        |      dfS |d   }	 t	        j                  d	
      }t        |j                  d            }t         j                  j                  dt        |      z          t        j                  j                  t              j!                  |      j#                         }|rW|j$                  }||k7  r7d| d<   t         j                  j                  d| d   z          t        |       dfS |j&                  }|t(        j*                  k7  r7d| d<   t         j                  j                  d| d   z          t        |       dfS |j,                  }	|	d   }
t/        t(        j0                  t(        j2                        }|j5                  |
      }|t(        j6                  k7  r7d| d<   t         j                  j                  d| d   z          t        |       dfS |j9                  |
      }|d   ro|d   | d<   d| d   vr2t         j                  j                  d| d   z          t        |       dfS t         j                  j                  dt        |      z   dz          t         j                  j                  dt        |j:                        z          t(        j<                  |_        	 t        j                  j?                          t         j                  j                  dt        |j:                        z          n7d | d<   t         j                  j                  d!| d   z          t        |       dfS 	 d#| d<   t         j                  j                  d$       | d%fS # t        $ r{}t        |      | d<   t         j                  j                  dt              z          t         j                  j                  dt        |      z          t        |       dfcY d }~S d }~ww xY w# t        $ rh}t        j                  jA                          t        |      | d<   t         j                  j                  d| d   z          t        |       dfcY d }~S d }~ww xY w# t        $ rJ}t        |      | d<   t         j                  j                  d"| d   z          t        |       dfcY d }~S d }~ww xY w)&Nz!API: customer/delete_event INPUT FrB   r   r2   z"API: customer/delete_event ERR_1: rC   rF   Tr>   event_idz$API: customer/delete_event DATA123: z!API: customer/delete_event DATA: z"API: customer/delete_event ERR_2: ry   zCustomer ID is incorrectz"API: customer/delete_event ERR_3: zEvent can't be deletedz"API: customer/delete_event ERR_4: rZ   r   z(Event can't be deleted - it is confirmedz"API: customer/delete_event ERR_5: zResource has been deletedz"API: customer/delete_event ERR_6: z"API: customer/delete_event: Event z! is deleted from Google calendar!z6API: customer/delete_event: In Calendar Deleted Event z0API: customer/delete_event: In DB Deleted Event z"API: customer/delete_event ERR_7: rH   zEvent ID is incorrectz"API: customer/delete_event ERR_8: z"API: customer/delete_event ERR_9: zEvent deletedz"API: customer/delete_event OUTPUT r3   )!r5   r6   rI   r{   r   r7   r   rJ   intrK   rM   rL   rP   rQ   rR   r   rS   scalarrF   statusr   PRENOTED_BY_USERr   r   r   r   get_event_locationr   delete_event_by_idrZ   DELETED_BY_USERrX   r^   )r_   r   rF   r`   rZ   ra   
event_dataevent_customer_idr   r   r   r   r   s                r.   customer_delete_eventr   k  sY    JJOO78
CCLC	NJ!'"eJJCeGnTU5>3&&M*	%##$/DTXXj)*BJJEBOP ZZ%%f-7727>EEG
 * 6 6 K/9G

""#G#g,#VWs|S((&&F6667G

""#G#g,#VWs|S((&44M$T*H%%1%F%F(44B
 ''1Cl000IG

""#G#g,#VWs|S((''1C7|"7|G.c'lBJJ&&'KcRYl'Z["3<,,

""#G#b'#QTw#wxJJOOTWZ[e[h[hWiij , < <J)

!!#

 RUXYcYfYfUg gh 3CLJJCc'lRS3<$$ i %C	NJJOO898OC  	%q6CLJJBSYNOJJCc!fLM3<$$		%b  )

##%"1vG

""#G#g,#VWs|S((	)  !1vG

?#g,NOs|S  !s   AS	 2S	 8AO BS	 AS	 5BS	 
AS	 !A8S	 AQ -7S	 	QA0QQS	 QS	 	SAS;S<S	 SS	 		T?TTTz/reservation_listc                  X   t         j                  j                  d       i } t        t              }d|v r:|d   | d<   t         j                  j                  d|d   z          t        |       dfS |d   }t         j                  j                  dt        |      z          	 t        j                  j                  t              j                  t        j                  |k(  t        j                  dkD        j                  t        j                   j#                               j%                         }|D cg c]  }|j                   t'        |j(                        t+        |j(                        |j,                  t/        |j,                        t1        |j2                        t1        |j4                        |j6                  |j8                  t;        |j6                        |j                  t=        |j                        t?        |j                         d }}d
| d<   || d<   t         j                  j                  d       t        |       dfS c c}w # t@        $ rP}t        |      | d<   t         j                  j                  d	t        |      z          t        |       dfcY d }~S d }~ww xY w)NzAPI: reservation_list INPUTrB   zAPI: reservation_list ERR_1: rC   rF   zAPI: reservation_list USER: r   )r   provider_nameprovider_mobiler   servicer   r   	date_initr   valid_time_h	status_idr   reviewzAPI: reservation_list ERR_2: r   r2   rz   zAPI: reservation_list OUTPUTr3   )!r5   r6   rI   r{   r   r7   r   rM   rP   rQ   rR   r   filterrF   r   order_byrZ   ascallget_providerr   get_provider_mobiler   get_serviceget_localTimer   r   r  r   validation_calc
get_status
get_reviewrL   )r_   r   rF   reservations_listrra   s         r.   reservation_listr    sA    JJOO12
C gE%W~G

:U7^KLs|S  &KJJ5K8HHI!JJ,,V4;;F<N<NP[<[]c]j]jmn]noxxy  zC  zC  zG  zG  zI  J  N  N  P" '!
  ' DD!-amm!<#6q}}#Ell&q||4"/0@0@"A -ann =[[ }} / <XX$QXX.$QTT* '! 	 
0 C	N%CMJJOO233<7
$  !1vG

:SVCDs|S  !s3    BI 2C!II I 	J)AJ$J)$J)z/customer/reviewc            	      
   t         j                  j                  d       i } t        t              }d|v r:|d   | d<   t         j                  j                  d|d   z          t        |       dfS |d   }	 t	        j                  d      }t        |j                  d            }t        |j                  d	            }t        |j                  d
            }t        |j                  d            }t         j                  j                  dt        |      z          	 t        j                  j                  t               j#                  |      j%                         }	t         j                  j                  dt        |	      z          |	j&                  }
|	j(                  |k7  rbd| d<   t         j                  j                  dt        |      z          t         j                  j                  d| d   z          t        |       dfS t         j                  j                  dt        |      z          	 t+        j,                  t/        d            }t1        ||
|||||      }t        j                  j3                  |       	 t        j                  j5                          t         j                  j                  d       d|	_        	 t        j                  j5                          t         j                  j                  d       d| d<   t         j                  j                  d       t        |       d fS # t        $ r{}t        |      | d<   t         j                  j                  dt              z          t         j                  j                  dt        |      z          t        |       dfcY d }~S d }~ww xY w# t        $ rJ}t        |      | d<   t         j                  j                  d| d   z          t        |       dfcY d }~S d }~ww xY w# t        $ rJ}t        |      | d<   t         j                  j                  d| d   z          t        |       dfcY d }~S d }~ww xY w# t        $ rh}t        j                  j7                          t        |      | d<   t         j                  j                  d| d   z          t        |       dfcY d }~S d }~ww xY w# t        $ rh}t        j                  j7                          t        |      | d<   t         j                  j                  d| d   z          t        |       dfcY d }~S d }~ww xY w)!NzAPI: customer/review INPUTrB   zAPI: customer/review ERR_1: rC   rF   Tr>   r   r   r  commentzAPI: customer/review DATA123: zAPI: customer/review DATA: zAPI: customer/review ERR_2: ry   zCustomer ID is invalidz"API: customer/review Customer ID: zAPI: customer/review ERR_3: zAPI: customer/review Event ID: zAPI: customer/review ERR_4: zEurope/ZagrebzAPI: customer/review ERR_5: z)API: customer/review DB-Review record: OKzAPI: customer/review ERR_6: rH      z(API: customer/review DB-Event record: OKzAPI: customer/review ERR_7: r   r2   zAPI: customer/review OUTPUTr3   )r5   r6   rI   r{   r   r7   r   rJ   r   rK   floatrM   rL   rP   rQ   rR   r   rS   r|   r   rF   r   r   r   r   rW   rX   r^   r   )r_   r   rF   r`   r   r   r  r  ra   	event_rowr   date_review
new_reviews                r.   customer_reviewr    s+    JJOO01
C gE%W~G

9E'NJKs|S  &K!d+txx
+,,/0
txx)*dhhy)*

;c$iGH!JJ$$V,66(6CGGI	

;c)nLM++  K/3CLJJCc+FVVWJJ=GLM3<$$

9CMIJ
!ll8O#<= X{:{GU[]hi



z"!




CD I!




BC C	NJJOO123<u  !1vG

83t9DE

9CFBCs|S  	!"  !1vG

9CLHIs|S  !  !1vG

9CLHIs|S  !  !


1vG

9CLHIs|S  	!  !


1vG

9CLHIs|S  	!s   5B)L6 C(N= +N= 4AP =Q) =S 6	N:?A0N5/N:5N:=	P?PPP	Q&?Q!Q&!Q&)	S2ASSS	U&AU	U	Ureturnc                     t         j                  j                  t        j                        j                  |       j                         }|ryy)N)r   TF)rP   rQ   rR   r   rZ   rS   rT   )r   check_token_rows     r.   check_if_token_revokedr  J  s<    jj&&~'8'89CCCLRRTOr-   c                     t        |      ryd }| s|S d| v r| j                  d      d   nd }|s|S t               }t        |d         }|S )NBearer r   sub)r  splitr   r   )r   r   rF   r   r`   s        r.   r   r   P  sa    c"K *2[)@Kc"1%dE 9Dd5k"Kr-   c                 8   i }| j                   j                  d      xs | j                  j                  d      }|sd|d<   |S t               d   }t	        ||      }|d|d<   |S |dk(  rd|d<   |S d|v r|j                  d	      d
   nd }|sd|d<   |S ||d<   |S )Nr   HTTP_AUTHORIZATIONr   rB   r   r   zToken revokedr!  r"  r   zInvalid token formatrF   )r+   rK   environr   r   r$  )r   outr   r   rF   r   s         r.   r{   r{   d  s    
C//%%o6c'//:M:MNb:cK5G
 )E
C[-K5G
		&G
 *2[)@Kc"1%dE-G
$CJr-   c                 	   t         j                  j                  d       t        j                         }|t        t        j                        z
  }i }d |d<   	 g }t        j                  j                  t              j                  t        j                        j                  t        j                  |k        j!                         }|D ]G  }|j"                  d   }t%        t        j&                  t        j(                        }|j+                  |      }	|	t        j,                  k(  r|j/                  |      }
|
d   r-|
d   |d<   t         j                  j1                  d|d   z          t        j2                  |_        	 t        j                  j7                          d|d	<   t         j                  j                  d
t9        |j:                        z          |j=                  |j>                         .|	t        jD                  k(  r|j/                  |      }
|
d   r-|
d   |d<   t         j                  j1                  d|d   z          t        jF                  |_        	 t        j                  j7                          d|d	<   t         j                  j                  dt9        |j:                        z          |j=                  |j>                         t        jH                  |_        	 t        j                  j7                          d|d	<   J 	 	 t         j                  j                  d       |S # t@        $ r_}t        j                  jC                          t9        |      |d<   t         j                  j1                  d|d   z          |cY d }~c S d }~ww xY w# t@        $ r_}t        j                  jC                          t9        |      |d<   t         j                  j1                  d|d   z          |cY d }~c S d }~ww xY w# t@        $ r_}t        j                  jC                          t9        |      |d<   t         j                  j1                  d|d   z          |cY d }~c S d }~ww xY w# t@        $ r?}t9        |      |d<   t         j                  j1                  d|d   z          |cY d }~S d }~ww xY w)NzCRON: check_events INPUT)hoursrB   )r   rZ   r   zCRON: check_events ERR_1: Deletedr2   z%CRON: check_events : Deleted event - zCRON: check_events ERR_2: zCRON: check_events ERR_3: zADMIN Deletedz+CRON: check_events : ADMIN Deleted event - zCRON: check_events ERR_4: 	ConfirmedzCRON: check_events ERR_5: zCRON: check_events ERR_6: zCRON: check_events OUTPUT)%r5   r6   rI   r   r   r   r   PRENOTED_PERIOD_HrP   rQ   rR   r   rS   r   r  r  r  r   r   r   r   r   r   r   r7   DELETED_BY_APPr   rX   rM   rZ   r   rF   rL   r^   ADMIN_DELETE_TEXTDELETED_BY_ADMINCONFIRMED_BY_ADMIN)reqr   	thresholdr_   customer_arrr   r   r   r   r   r   ra   s               r.   check_eventsr5    s    JJOO./ ,,.Cil&D&DEEI
CCLDZZ%%f-77|?\?\7]ddy(**-#% 	  E**40H%)5)J)J , 8 8B
 ,,X6H<555++H5w<#&w<CLJJ&&'Cc'l'RS  ,::
JJ%%'%.C	NJJOO$KcRWRZRZm$[\ ''(9(9: \;;;++H5w<#&w<CLJJ&&'Cc'l'RS  ,<<
JJ%%'%4C	NJJOO$QTWX]X`X`Ta$ab ''(9(9:  ,>>JJ%%'%0C	Nk  BP< JJOO/0JU ! JJ'')#&q6CLJJ&&'Cc'l'RSJ( ! JJ'')#&q6CLJJ&&'Cc'l'RSJ ! JJ'')#&q6CLJJ&&'Cc'l'RSJ  q6CLJJ;c'lJKJs   D+Q; A3L:8A-Q; &A3N%Q; 1#PQ; :	N"ANN"Q; N""Q; %	P.AP PQ; PQ; 	Q8AQ3+Q8,Q; 3Q88Q; ;	S4R>8S>Sc                 B   | j                    | j                  t        j                        } t	        j
                  t        j                        }|| z
  }t        |j                               }t        j                  dz  dz  }||z
  }|dz  }|dz  dz  }|dd|d}|S )Nr   <   i  02d:)
r   r   r   r   r   r   r   total_secondsr   r-  )	datetime_init_dbnow_utcdiffr:  seconds_in_prenotedremaining_secondsr*  minutes	hours_strs	            r.   r  r    s    &+338<<3H ll8<<(G %%D **,-M '882=B+m; %E 4'B.G +Qwsm,Ir-   c                     t        |       } t        j                  j                  t              j                  |       j                         }|j                  dz   |j                  z   }|S )Nr   r"  )	r   rP   rQ   rR   r   rS   rT   r   r   )r   provider_datar   s      r.   r	  r	    sX    K KJJ$$]3==+=V\\^M!,,s2]5L5LLMr-   c                     t        |       } t        j                  j                  t              j                  |       j                         }|j                  }|S )NrC  )r   rP   rQ   rR   r   rS   rT   r   )r   rD  r   s      r.   r
  r
    sH    K KJJ$$]3==+=V\\^M#**Or-   c                 \    t        |       } t        j                  j                  | d      }|S N-)r   r   service_typerK   )r   r   s     r.   r  r     s(    :J''++J<GNr-   c                     t        j                  | d   j                  dd            }t        j                  | d         }|j                  |      }|j                  d      }|S )Nr   Z+00:00r   z%d-%m-%Y %H:%M)r   fromisoformatr   pytzr   r   r   )datetime_jsondt_utclocal_tzdt_local
local_times        r.   r  r  %  s^    ##M*$=$E$Ec8$TUF}}]:67H  *H""#34Jr-   c                     t        j                  | d   j                  dd            }t        j                  | d         }|j                  |      }|j                         }|S )Nr   rK  rL  r   )r   rM  r   rN  r   r   	isoformat)rO  rP  r   rR  google_times        r.   get_googleTimerW  0  sa     ##M*$=$E$Ec8$TUF 
}Z0	1B  $H $$&Kr-   c                 \    t        |       } t        j                  j                  | d      }|S rG  )r   r   service_steprK   )r  r   s     r.   r  r  >  s(    II&&**9c:FMr-   c                 0    | j                  dd      }|r|S y)Nr   r   )rK   )
event_jsondescs     r.   get_descriptionr]  C  s    >>-,Dr-   c                     t        |       } t        j                  j                  t              j                  |       j                         }d}|r|j                  }|S )N)r   r   )r   rP   rQ   rR   r   rS   rT   review_rate)r   
review_rowr_  s      r.   r  r  J  sO    8}H!!'*44h4GMMOJK ,,r-   )RotatingFileHandlerzfitandmore.logi  r  )maxBytesbackupCountz%%(asctime)s %(levelname)s %(message)s__main__i  )r/   portr)   )dflaskr   r   r   r   
flask_corsr   flask_bcryptr   rU   flask_jwt_extendedr	   r
   r   r   r   
sqlalchemyr   flask_sqlalchemyr   loggingr   r   r   r   r   zoneinfor   rN  r   rN   r[   
app_modelsr   r   r   r   r   r   r   r   app_calendarr   stripedotenvr   __name__r5   DB_URLengineconfigrP   rr   r"   ACCESS_EXPIRESjwtrouter/   r8   r;   rm   rv   r   r   r   r   r   r   r   r   r   r  r  boolr  r   r{   r5  r  r	  r
  r  r  rW  r  r]  r  logging.handlersra  log_pathlog_file_pathfile_handlersetLevelINFO	Formatter	formattersetFormatterr6   
addHandlerrunr,   r-   r.   <module>r     s   8 8    g g % '            z z z -   N Ho SUY(?@A B 
|**	6(4(;(;

$ %_	+::

 %

? )5)D)D

% &o
 8eW%* &* 3 C !C 8eW%9 &9 &2D% 3D%P vh/! 0!F 0  1: 19  29z x0/! 1/!f "VH5:  6:| !E73  4$ v7  86 "VH56  66t &2u  3ur "VH5T  6Tl 1+  2+^ x0N  1Nh4 (>un4
	
 	994, !)),<<M 'L ',,'!!!"IJIi( JJ,'zGG$TG" r-   