
    U@h                        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e_        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Zd dlZd dl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)  e)d        ee*      Z+ eejX                  d      Z-ejX                  e+j\                  d<    ee+      Z/ ee+      Z0ejb                  e+j\                  d<   de+j\                  d<   ejd                  e+j\                  d<    ee+      Z3e+ji                  ddg      d        Z5e+ji                  ddg      d        Z6e+ji                  ddg      d        Z7e+ji                  ddg      d        Z8e+ji                  d dg      d!        Z9e+ji                  d"dg       e       d#               Z:e+ji                  d$dg       e       d%               Z;e+ji                  d&dg      d'        Z<e+ji                  d(dg       e       d)               Z=e+ji                  d*dg       e       d+               Z>e+ji                  d,dg       e       d-               Z?e+ji                  d.dg       e       d/               Z@e+ji                  d0dg       e       d1               ZAe+ji                  d2dg       e       d3               ZBe+ji                  d4dg       e       d5               ZCe+ji                  d6dg       e       d7               ZDe+ji                  d8dg       e       d9               ZEe+ji                  d:dg       e       d;               ZFe+ji                  d<dg       e       d=               ZGd>eHfd?ZId@ ZJdA ZKdB ZLdC ZMde+_5        e+jj                  r~d dlZd dDlNmOZO 	 ej                  dEz   ZQ eOeQdFdGH      ZReRj                  ej                          ej                  dI      ZVeRj                  eV       e+j                  j                  eR       e*dJk(  re+j                  ddKL       yy)M    )Flaskjsonifyrequestmake_response)CORS)BcryptN)
JWTManagerjwt_requiredcreate_access_tokenget_jwtget_jwt_identity)create_engine)
SQLAlchemyksk_test_51QtONkEDyKtJ4rtxadJjjtLZjg2N2c8OBnsackRarjLwOXSGXEi9TBTWeCGgLoqII0rQ2lzGZaA55JI7PfgL1Bww00ZITOFHNs)datetime)timezone)
TokenBlockListCustomerCustomer_dataProviderProvider_dataProvider_serviceProvider_reservedReviewsPaymentsOrders)load_dotenvz.env.testingT)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,   -   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+   indexr5   2   s*    JJ{#I<=>sBBr*   z/helloc                  ^    t         j                  j                  d       t        ddi      dfS )Nz
API /hellor/   zHello GetWork API!   r1   r)   r*   r+   hellor8   7   s*    JJ|$I234S88r*   z/register/customerPOSTc                  h   t         j                  j                  d       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-                  |       |j.                  }	d}
t1        |	|
      }t        j                  j)                  |       t        j                  j+                          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                  j3                          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 INPUT+385Tforcemobile_phonepassworderrorzAPI: register/customer DATA: zAPI: register/customer ERR_1:   FzIncorrect mobile numberzAPI: register/customer ERR_2: i  country_codemobilezThat Customer already existszAPI: register/customer ERR_3:    )customer_idcustomer_typezCustomer added successfullyr/   zAPI: register/customer OUTPUTr7   zAPI: register/customer ERR_4:   )r2   r3   r4   r   get_jsonget	Exceptionstrr   app_funccheck_mobiledbsessionqueryr   rD   	filter_byfirstuuiduuid4addcommitrefreshidr   rollback)rC   resdatarD   r?   echeck_mobile_rownew_uuidnew_customernew_idnew_typenew_customer_datas               r+   register_customerrd   >   s   JJ56L
C!d+.)88J' 	f%u,0G

;c'lJKs|S  zz''8BBP\ekBlrrt5G

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


|$	%JJJJ|,!__FH -" (!* JJNN,-JJ:C	NJJ>?3<$$E  !1vG

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

;c!fDEs|S  	!F  	%JJ!q6CLJJ?#g,NO3<$$		%s>   8H9 3CK  9	J=A0J82J=8J= 	L1	AL,&L1,L1z/login/customerc                  L   t         j                  j                  d       i } 	 t        j                  d      }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;   r>   r?   r@   zAPI: login/customer DATA:zAPI: login/customer ERR_1: rA   rB   )identityzCustomer logged successfullyr/   access_tokenzAPI: login/customer OUTPUT r7   Wrong Username or PasswordzAPI: login/customer ERR_2: zAPI: login/customer ERR_3: )r2   r3   r4   r   rI   rJ   rK   rL   r   rO   rP   rQ   r   rY   r?   rR   rS   bcryptcheck_password_hashr   )	r[   r\   rC   rD   r?   r]   customer_rowcheck_passwordrg   s	            r+   login_customerrm   r   s   JJ23
C
!d+.)88J' ::##HKK0A0ABLLZfouLv||~L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   :F 	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 r@   zAPI: customer/getdata ERR_1: rA   rF   z#API: customer/getdata CUSTOMER_ID: rF   rY   rD   r>   zCustomer get data succesfullyr/   resultzAPI: customer/getdata OUTPUTr0   )r2   r3   r4   	get_tokenr   r   rL   rO   rP   rQ   r   rR   onerM   
class2jsoncustomer_output_datar   rJ   )r[   rF   customer_data_rowdb_jsonoutput_datavalues         r+   customer_datarz      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 r@   zAPI: customer/adddata ERR_1: rA   rF   Tr<   addresscityemail
first_name	last_nameHRzAPI: customer/adddata DATA: zAPI: cutomer/adddata ERR_5: ro   zAPI: customer/getdata ERR_6: rH   zUpdate Successfulr/   zAPI: customer/adddata OUTPUTr0   )r2   r3   r4   rr   r   r   rI   rJ   rL   rM   set_locationrK   rO   rP   rQ   r   rR   rs   r|   r}   r~   r   r   locationlanguagerW   rZ   )r[   rF   r|   r}   r~   r   r   r   r   r\   r]   rv   s               r+   customer_updater      s    JJ56
C G
C#~

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

((7AAkAZ^^`%-$"'E#)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<   r;   r>   r~   r@   zAPI: forget/customer ERR_1: rA   rB   z"API: forget/customer Customer-ID:     )kGetWork_utf-8
Successfulr/   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 OUTPUTr0   zAPI: forget/customer ERR_2: rH   zWrong UsernamezAPI: forget/customer ERR_4: )r2   r3   r4   r   rI   rJ   rK   rL   r   rO   rP   rQ   r   rR   rS   rY   joinrandomchoicesstringascii_lettersdigitsri   generate_password_hashdecoderM   send_mail_passwordr?   rW   rZ   )r[   r\   rC   rD   r~   r]   rk   lengthrandom_stringnew_passwordhashed_password	mail_sents               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 INPUTr@   z!API: newpassword/customer ERR_1: rA   rF   Tr<   r?   new_password1new_password2z API: newpassword/customer DATA: z!API: newpassword/customer ERR_5: rp   z*API: newpassword/customer OLD PASSWORD: OKzWrong Old Passwordz!API: newpassword/customer ERR_6: rh   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   OKr/   z API: newpassword/customer OUTPUTr0   )r2   r3   r4   rr   r   r   rI   rJ   rK   rL   rO   rP   rQ   r   rR   rs   ri   rj   r?   r   r   rW   rZ   )
r[   rF   r\   old_passwordr   r   r]   rk   rl   r   s
             r+   newpassword_customerr   (  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loggedinr@   z API: logincheck/customer ERR_1: rA   TcustomertypezAPI: logincheck/customer OUTPUTr0   )r2   r3   r4   rr   r   r   )r[   s    r+   logincheck_customerr   h  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 headerr@   zAPI: logout/customer ERR_1: rA   jti)rF   r   
created_atTr   r   zLogged out successfully!r/   zAPI: logout/customer OUTPUTr0   )r2   r3   r4   r   r(   rJ   r   r   
check_authr   nowr   utcrO   rP   rV   r   rW   )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/provider/listc                     t         j                  j                  d       i } t        t              }d|v r2t         j                  j                  d|d   z          t        |      dfS |d   }t        j                  j                  t              j                  |      j                         }	 t	        j                  d      }|j                  d	      }t        j                  j                  t               j#                  t$        t         j&                  t$        j&                  k(        j)                  t         j*                  |k(  t         j,                  dk\  t$        j.                  |j.                  k(        j1                         }g }|D ]  }	i }
t3        j4                  |	      }t3        j6                  |      }t        j                  j                  t8        j:                        j                  |	j&                        j                         |
d<   t        j                  j                  t$              j                  |	j&                        j                         }|j<                  dz   |j>                  d   jA                         z   dz   |
d<   tB        jD                  |
d<   d}|jF                  |k7  rF|jF                  |k7  r7tI        t3        jJ                  |jF                  |jF                        d      |
d<   |d   }t         j                  j                  d|z          |dk(  rd}||
d<   |jL                  |
d<   |d   |
d<   |d   |
d<   |jO                  |
        tQ        |d d !      }|D ]  }	|	d   tB        jD                  k(  sd|	d<     || d"<   tS        |      tB        jT                  tS        |         d#}|| 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)(NzAPI: provider/list INPUTr@   zAPI: provider/list ERR_1: rA   rF   ro   Tr<   servicezAPI: provider/list DATA: zAPI: provider/list ERR_5: g        rp   rT   provider_id r   .provider_namedistancez{}   reviews_averzAPI: provider/list TEST None-review_averr   description_shortpricec                     | d   S )Nr   r)   )xs    r+   <lambda>zprovider_list.<locals>.<lambda>  s    a
mr*   F)keyreverserq   )rY   r   r   r/   zAPI: provider/list OUTPUTr0   )+r2   r3   r4   rr   r   r   rO   rP   rQ   r   rR   scalarrI   rJ   rK   rL   r   r   r   r   filterr   r   r}   allrM   rt   deleteIDr   rT   r   r   upperapp_settingsDISTANCE_MAXr   roundr   r   appendsortedintservice_type)r[   tokenrF   rz   r\   
service_idr]   provider_listout_listitemout_json	item_jsonprovider_datano_locationr   service_jsons                   r+   r   r     s    JJ12
CgE%

7%.HIu~s""&KJJ$$]3==+=V]]_M!d+XXi(
 JJ%&	T-)559R9RRSV  J.#%m000 
ce  H''-	%%i0	 ::++HMM:DDHXHXDY``b

((7AAdN^N^A_ffh %2$<$<s$B]E\E\]^E_EeEeEg$gjm$m!+88!!K/M4J4J[4X#():):=;Q;QR_RhRh)ikl#mHZ  0

5DE6!L".,55(12E(F$%%g.!7 < h$;UKH
|888"D  CM_((Z9L "C	NC	NJJ233<w  !1vG

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

7#a&@As|S  	!s   .'O6 6	Q:?A0Q5/Q:5Q:z/provider/detailsc                     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      }|j                  d      }|j                  d	      }t        j                  j                  t              j                  |      j                         }|d k(  rbd| d<   t         j                  j                  d
t        |      z          t         j                  j                  d| d   z          t        |       dfS t        j                  j                  t         t"              j%                  t"        t         j&                  t"        j&                  k(        j)                  t         j*                  |k(  t         j&                  |j,                  k(        j/                         }i }		 |D ]  \  }
}i dt1        j2                  |
j4                        dt1        j2                  |
j6                        d|
j4                  d|
j6                  d|
j8                  dt:        j<                  d   d|j>                  d|
j@                  d|
jB                  d|
jD                  d|jF                  d|jH                  d|jJ                  d|jL                  dtO        |j,                  |      d|jP                  }	 	 |	| 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        $ 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: provider/details INPUTr@   zAPI: provider/details ERR_1: rA   rF   Tr<   providerr   zAPI: provider/details DATA: zAPI: provider/details ERR_2: rT   Wrong Provider uuidzAPI: provider/details ERR_3: 
work_startwork_endwork_start1	work_end1r   currencyr   vatr   review_listservice_descriptionr   provider_surnameprovider_languageprovider_descriptionprovider_calendarrT   zAPI: provider/details ERR_4: rq   r   r/   zAPI: provider/details OUTPUTr0   ))r2   r3   r4   rr   r   r   rI   rJ   rK   rL   rO   rP   rQ   r   rR   r   r   r   r   r   r   r   rY   r   rM   time_convertr   r   r   r   r   r   r   reviewsr   r   r   r   description_longset_calendarrT   )r[   r   rF   r\   provider_uuidr   r]   r   provider_detailsresult_jsonr   s              r+   r   r     s    JJ45
CgE%W~G

:U7^KLs|S  &K!d+,XXi(
 zz)333GNNPH4,G

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

:S\IJs|S   JJ%}5	T-)559R9RRSV  J.$$3 
ce  K!-MGTh33G4F4FGH11'2B2BC w11 W--	
  <006 txx g22 goo &w'@'@   #DNN $T]] 't'<'< $\(++j%I  !K .4  CMC	NJJ563<q  !1vG

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

:SVCDs|S  	!Z  !1vG

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

:SVCDs|S  	!s?   58M	 =DO 		OA0OOO	QA0Q	QQz/paymentc                     t         j                  j                  d       i } d| d<   t        t              }d|v r:|d   | d<   t         j                  j                  d|d   z          t        |       dfS |d   }	 t	        j                  d	      }|j                  d
      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }	|j                  d      }
|j                  d      }|j                  d      }t        j                  j                  t              j                  |      j                         }|d k(  rbd| d<   t         j                  j                  dt        |      z          t         j                  j                  d| d   z          t        |       dfS t         j                  j                  dt        |      z          d}t!        |j"                  ||||||
||	      }t        j                  j%                  |       	 t        j                  j'                          t        j                  j)                  |       |j"                  }t         j                  j                  dt        |      z   dz   t        |j"                        z   dz   t        |      z          t         j                  j                  d       dt        t-        j.                  |            z   dz   t        |      z   d z   t        |      z   d!z   t        |j"                        z   d!z   t        |      z   d"z   }t         j                  j                  d#t        |      z          t1        t3        |
      d$z        }d%| }d&| }|| d'<   	 |dkD  rQt4        j6                  j8                  j;                  d(gd|d)|i|d*d+d,g||-      }|j"                  }d| d<   d.|i| d/<   t        j                  j                  t               j                  |0      j=                         }||_        ||_         t        j                  j'                          tC        ||jD                  |jF                  |jH                  d+1      }t        j                  j%                  |       t        j                  j'                          t        j                  j)                  |       |j"                  }t         j                  j                  d2t        |      z          d5| d6<   t         j                  j                  d7       t        |       d8f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# t        $ rT}t        |      | d<   t         j                  j                  d3| d   z          t        t        |      4      dfcY d }~S d }~ww xY w)9NzAPI: payment INPUTFpaymentr@   API: payment ERR_1: rA   rF   Tr<   r   r   quantitydescriptionr   r   r   service_datezAPI: payment DATA: zAPI: payment ERR_2: r   r   zAPI: payment ERR_3: r   z API: payment ***DETAILS***: ID: z Provider_ID: z Customer_ID: zAPI: payment - DB record: OKzAPI: payment ERR_4: rH   zGetWork usluga: z (ID:z #r   )zAPI: payment ***TITLE***: d   z0https://appgetwork.net/paid.html?result=True&id=z1https://appgetwork.net/paid.html?result=False&id=linkcardname)r   product_dataunit_amount   )
price_datar   )payment_method_typesmode
line_itemssuccess_url
cancel_urlrY   rq   rp   )statusz API: payment NEW Review record: zAPI: payment ERR_5: r@   zPayment ready!r/   zAPI: payment OUTPUTr0   )%r2   r3   r4   rr   r   r   rI   rJ   rK   rL   rO   rP   rQ   r   rR   r   r   rY   rV   rW   rX   rZ   rM   service_convertr   floatstripecheckoutSessioncreaterS   title
session_idr   r   r   rF   )r[   r   rF   r\   r   r   r   r   r   r   total_pricer   r   r]   r   r  new_paymentra   r  stripe_pricesuccess_str
cancel_strrP   	payment_i
new_reviews                            r+   r   r   6  s    JJ+,
CC	N gE%W~G

1E'NBCs|S  &K!d+,XXi(
88J'hh}-!hhuohhy)88J'xx/ zz)333GNNPH4,G

03t9<=

1CL@As|S   JJ,s4y89J8;;
KxY^`kmu  xC  DKJJNN;!





;'

=FKN^^ademepepaqq  uE  E  HK  LW  HX  X  	Y

9: X%=%=j%I!JJWTWZ[eWffimmpstzp{{  B  B  EH  IQ  IT  IT  EU  U  X[  [  ^a  bm  ^n  n  qt  tEJJ3c%j@A{+c12LDVHMKDVHMJCK)*!oo--44&,X %-"E) (4# !"	 	 *' 5 G  !J!C	N!:.CMJJ$$X.88F8CIIK	  	)	


 VI$9$9):K:KILaLaijk



z"





:&

=FKL &C	NJJ,-3<m  !1vG

03t9<=

1CF:;s|S  	!4  !


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

1CL@As|S  	!h  *1vG

1CL@ASV$c))*s`   :B/U' ;B;W. 2FY" '	W+0A0W& W+&W+.	Y7AYYY"	Z?+A	Z:4Z?:Z?z/paidc                     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      }|j                  d      }|j                  d	      }	 t        j                  j                  t              j                  |      j                         }|r>d}|dk(  rd}|j                   dk7  r&	 ||_        t        j                  j#                          |j&                  }	t        j                  j                  t(              j                  |	      j+                         }
i }|
j,                  |d<   |
j.                  |d<   t        j                  j                  t0              j                  |	      j+                         }|dk(  r/t3        j4                  |j6                  |j8                        }||d<   t;        |j<                        dk(  r|
j>                  }i }|j@                  }t        j                  j                  tB              j                  |      j+                         }tD        jF                  |jH                     |d<   |jJ                  |d<   |jL                  |d<   |jN                  |d<   t         j                  j                  dt        |      z          t        |
j,                        dz   t        |
j.                        z   }t        |j,                        dz   t        |j.                        z   }||d<   ||d<   d}t3        jP                  ||      }|r4t         j                  j                  dt        |      z          d |d!d  z   }nUd"| d<   t         j                  j                  d#t        |      z          t         j                  j                  d$| d   z          |j>                  }||d<   ||d<   t3        jP                  ||      }|r4t         j                  j                  d%t        |      z          |d   d&z   }nUd'| d<   t         j                  j                  d#t        |      z          t         j                  j                  d(| d   z          |r>t;        |j<                        dk(  r&	 ||_        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        $ 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# 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# t        $ rT}t        |      | d<   t         j                  j                  d*| d   z          t        t        |      +      dfcY d }~S d }~ww xY w)0NzAPI: paid INPUTr@   r   rA   rF   Tr<   rq   rY   zAPI: paid DATA: zAPI: paid ERR_2: rp   FTruerH   r   r   r   rD   r   ro   r   dater   r   zAPI: paid Customer Email:r   	name_fromname_to00z%API: payment - Provider mail sent to:1r   zProvider Email is not sentzAPI: paid Email:zAPI: paid ERR_3: z%API: payment - Customer mail sent to:2zCustomer Email is not sentzAPI: paid ERR_4: zAPI: paid ERR_5: zAPI: paid ERR_6: r  r   r/   zAPI: paid OUTPUTr0   ))r2   r3   r4   rr   r   r   rI   rJ   rK   rL   rO   rP   rQ   r   rR   rs   r  rW   rZ   r   r   r   r   r   r   rM   
set_mobilerC   rD   lenr   r~   rF   r   r   r   r   r  r   r   send_mail_payment)r[   r   rF   r\   rq   rY   r]   payment_rowresult_statr   r   output_jsonprovider_loginrD   provider_emailpayment_detailsrz   r   customer_namemail_sent_txtr   customer_emails                         r+   paidr,    s    JJ()
C gE%W~G

1E'NBCs|S  &K!d+(#XXd^U*jj&&x0::b:AEEGK"!!T)-)4K&JJ%%' "--

((7AAkAZaac$1$<$<L!#0#:#:K ))(3===MTTV6>(()D)D^EZEZ[F$*K! {$$%**00N O%11KJJ,,];EER]E^eegM)5)B)B;CVCV)WOI&&1&6&6OF#*5*>*>OJ'-8-D-DOM*JJ:S=OOP 8 89C?#mF]F]B^^M 8 89C?#mF]F]B^^M ,9OK()6OI& M 22>/RI

""#JSQ_M`#`a #mAB&7 7;G

""#5N8K#KL

""#6W#EF +00N+8OK()6OI& 22>/RI

""#JSQ_M`#`a -a 03 6;G

""#5N8K#KL

""#6W#EF {,,-210=-

))+ C	NCMJJ)*3<C  !1vG

-D	9:

.Q78s|S  	!" ! -JJ'')#&q6CLJJ&&':S\'IJ"3<,,	-@ % 1

++-'*1vG

**+>W+MN&s|S00	1  *1vG

.W=>SV$c))*s   58T3 .AZ" 
%V: /N(Z" %X. 3	V7<A0V2,V72V7:	X+AX& X+!Z" &X++Z" .	Z7AZZZ" ZZ" "	[?+A	[:4[?:[?z
/paid/viewc                  (   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      }|j                  d      }t         j                  j                  d	t        |      z          	 t        j                  j                  t              j                  |      j                         }|r|j                   }t        j                  j                  t"              j                  |      j%                         }i }	|j&                  |	d<   |j(                  |	d<   t        j                  j                  t*              j                  |      j%                         }
t-        j.                  |
j0                  |
j2                        }||	d<   |j4                  |	d<   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        $ rT}t        |      | d<   t         j                  j                  d| d   z          t        t        |            dfcY d }~S d }~ww xY w)NzAPI: paid/view INPUTr@   zAPI: paid/view ERR_1: rA   rF   Tr<   rY   zAPI: paid/view DATA: zAPI: paid/view ERR_2: rp   r   r   r   rD   r   zAPI: paid/view ERR_5: r  rH   r   r/   rq   zAPI: paid/view OUTPUTr0   )r2   r3   r4   rr   r   r   rI   rJ   rL   rK   rO   rP   rQ   r   rR   rs   r   r   r   r   r   r   rM   r   rC   rD   r  )r[   r   rF   r\   rY   r]   r#  r   r   r%  r&  rD   s               r+   	paid_viewr.    s    JJ-.
C gE%W~G

3eGnDEs|S  &K	!d+XXd^

2SY>?*jj&&x0::b:AEEG%11KJJ,,];EER]E^eegMK(5(@(@K%'4'>'>K$ZZ--h7AA[AQXXZN(()D)D^EZEZ[F$*K!*5*:*:K' C	NCMJJ./3<A  !1vG

2SY>?

3c!f<=s|S  	!.  *1vG

3c'lBCSV$c))*s@   5AH- D/J4 -	J16A0J,&J1,J14	L=A	LLLz
/paid_listc                     t         j                  j                  d       i } t        t              }d|v r:|d   | d<   t         j                  j                  d|d   z          t        |       dfS |d   }g }	 t        j                  j                  t              j                  |d      j                         }|D ]  }i }t        j                  j                  t              j                  |j                        j                         }|j                  |d	<   |j                  |d
<   |j                   |d<   |j"                  dz   |j$                  z   |d<   t&        j(                  |j*                     |d<   t-        |j.                        |d<   t-        |j0                        dz   t-        |j2                        z   |d<   |j4                  |d<   t        j                  j                  t6              j                  |j                        j9                         }|j:                  |d<   t        j                  j                  t<              j                  |j                        j                         }	t&        j>                  d   }
|	r,|	j@                  |d<   t&        j>                  |	jB                     }
|
|d<   |jE                  |        	 d| d<   || d<   t         j                  j                  d       t        |       dfS # tF        $ rC}t-        |      | d<   t         j                  j                  dt-        |      z          Y d }~}d }~ww xY w)NzAPI: paid_list INPUTr@   zAPI: paid_list ERR_1: rA   rF   T)rF   r  r   
payment_idr   r   r   r   r  r  r   rp   r   r0  r   reviewr  zAPI: paid_list ERR_3: r   r/   rq   zAPI: paid_list OUTPUTr0   )$r2   r3   r4   rr   r   r   rO   rP   rQ   r   rR   r   r   r   r   rY   rF   r   r   r   r   r   rL   r  r  r   r   r   rs   rT   r   service_stepreview_rater  r   rK   )r[   r   rF   paid_all	paid_listr   	paid_itemr   r   
review_rowr  r]   s               r+   r6  r6  U  s    JJ-.
C gE%W~G

3eGnDEs|S  &K H>JJ$$X.88[Y]8^bbd	 GIJJ,,];EERYReReEfmmoM&-jjIl#'.':':Im$'.':':Im$)6)A)AC)G-JaJa)aIo&#/#<#<W__#MIi  #GLL 1If'*7+>+>'?#'EGL\L\H]']Im$'.':':Im$zz''1;;w?R?R;SWWYH)1Io&))'2<<

<SZZ\J!..q1F&0&<&<	(#%22:3D3DE"(IhOOI&- !8 C	NCMJJ./3<  >1vG

3c!f<==>s   7IL 	M9MM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                  j                  d       	 t	        j                  d      }|j                  d	      }|j                  d
      }|j                  d      }|j                  d      }t        j                  j                  t              j                  |      j                         }	|	rd|	_        ||	_        ||	_        ||	_        t)        j*                  t,        j.                        |	_        	 t        j                  j3                          t         j                  j                  d       t        j                  j                  t6              j                  |	j8                  |	j:                        j=                         }
|
rt         j                  j                  dt        |
j>                        z          |
j>                  xs g }|jA                  |	jB                         t         j                  j                  dt        |      z          ||
_        t        j                  j3                          t         j                  j                  dt        |
j>                        z          t        j                  j                  t        j&                        j                  |	j8                  |	j:                  d      jE                         }|D cg c]  }|d   	 }}|rtG        |      tI        |      z  nd }tK        |d      |
_&        t        j                  j3                          n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        $ 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c c}w )!NzAPI: customer/review INPUTr@   zAPI: customer/review ERR_1: rA   rF   zAPI: customer/review INPUT 2Tr<   review_typer0  r2  commentzAPI: customer/review DATA: zAPI: customer/review ERR_2: r1     zAPI: customer/review ERR_3: rH   z%API: customer/review ADD Review data r   r   z&API: customer/review ADD Review ind1: z&API: customer/review ADD Review ind2: z&API: customer/review ADD Review ind3: r   )r   r   r:  r   r   z&API: customer/review ERR4 - NO SERVICEr   r/   zAPI: customer/review OUTPUTr0   )'r2   r3   r4   rr   r   r   rI   rJ   rK   rL   rO   rP   rQ   r   rR   rs   r  r:  r;  r4  r   r   r   r   date_reviewrW   rZ   r   r   r   rS   r   r   rY   r   sumr!  r   r   )r[   r   rF   r\   r:  r0  r2  r;  r]   r8  provider_serviceprovider_service_reviewsprovider_ratesrratingsprovider_service_reviews_avers                   r+   customer_reviewrF    s    JJ34
C gE%W~G

9E'NJKs|S  &KJJ56
!d+hh}-XXl+
(#((9% !!'*44
4KOOQJ
!,
$
!'
!)hll!;
	%JJ 	

BC ::++,<=GG"..&& H 
 %' 	
 JJG#N^NfNfJggh'7'?'?'E2$$++JMM:JJG#NfJggh'?$JJJJG#N^NfNfJggh  ZZ--g.A.ABLL&22"** M  ce	 
 &44^qt^G4KRCL3w<,GX\),12OPQ,R)JJJJGH C	NJJ453<m  !1vG

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

9CFBCs|S  	!   	%JJ!q6CLJJ=GLM3<$$		%8 5sE   AP  7R S; 	R	A0Q?9R?R	S8AS3-S83S8z/customer/orderc                     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	        j                  d      }|j                  d	      }|j                  d
      }|j                  d      }|j                  d      }t        |||||      }	t        j                  j                  |	       	 t        j                  j                          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        $ 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: customer/order INPUTr@   zAPI: customer/order ERR_1: rA   rF   zAPI: customer/order INPUT 2Tr<   r   r  timer;  zAPI: customer/order DATA: zAPI: customer/order ERR_2: z#API: customer/order - DB record: OKzAPI: customer/order ERR_4: rH   r   r/   zAPI: customer/order OUTPUTr0   )r2   r3   r4   rr   r   r   rI   rJ   rK   rL   r   rO   rP   rV   rW   rZ   )
r[   r   rF   r\   r   r  rH  r;  r]   	new_orders
             r+   customer_orderrJ    s
    JJ23
C gE%W~G

85>IJs|S  &KJJ45
!d+XXl+
xxxx((9% z;dGDIJJNN9!




@A C	NJJ343<)  !1vG

7#d)CD

83q6ABs|S  	!  !


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

83w<GHs|S  	!s?   AF =H 	HA0H
H
H	JAI>8J>Jreturnc                     t         j                  j                  t        j                        j                  |       j                         }|ryy)N)r   TF)rO   rP   rQ   r   rY   rR   rS   )r   check_token_rows     r+   check_if_token_revokedrN    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Bearerr   r   sub)rN  splitr   r   )r   r   rF   r   r\   s        r+   r   r     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   r@   r   rP  zToken revokedrQ  r   r   zInvalid token formatrF   )r(   rJ   environr   r   rS  )r   outr   r   rF   r   s         r+   rr   rr   #  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                    i }| sd|d<   |S 	 | j                  d      d   }t        j                  |t        j                  dg      }||d<   |S # t        j
                  $ r
 d|d<   |cY S t        j                  $ r
 d	|d<   |cY S w xY w)
NzToken missingr@   r   r   r!   )
algorithmsrq   zToken expiredzInvalid token)rS  jwtr   r   r    ExpiredSignatureErrorInvalidTokenError)	token_getrW  r   decodeds       r+   check_token_OLDr_  F  s    
C&G

$Q'**UL$?$?WI*VH
$$ &G
   &G
s   AA B+BBc           	      "   ddl m}m} dd l}t        j
                  j                  d       	 |j                         }t        t        j                        D cg c]  }| ||      z    }}t        t        j                        D cg c]  }| ||      z    }}g }	t        j                  j                  t              j!                  |       j#                         }
|
D ]O  }t%        j&                  |      }t        j(                  |d   d      j                         }|	j+                  |       Q |D ch c]  }|j,                   }}|j/                  d|	      }t        j                  j                  t0              j!                  | |
      j3                         }|j4                  }|j                  }|j6                  }|j8                  }|D cg c]  }|j;                         dk(  s| }}|D cg c]  }|j;                         dk(  s| }}g }|D ]  }||v r'|j+                  d|j=                  d      dddd       /||	v r'|j+                  d|j=                  d      dddd       Z||v r_|dk\  r3t?        |d      }|j+                  ||j=                  d      dddd       |j+                  d|j=                  d      dddd       ||v r`|dk\  r3t?        |d      }|j+                  ||j=                  d      dddd       |j+                  d|j=                  d      dddd       !||v ra|dk\  r4t?        |d      }|j+                  ||j=                  d      dddd       ^|j+                  d|j=                  d      dddd       t?        |d      }|j+                  ||j=                  d      dddd        t        j
                  j                  d       |S c c}w c c}w c c}w c c}w c c}w )Nr   )r  	timedeltazAPI /set_calendar INPUT)daysr   r  z%Y-%m-%dr   )yearsr=     r   zNe radi
backgroundgray)r  startdisplaybackgroundColorborderColorr   r   greenzAPI /set_calendar OUTPUT) r   r  ra  holidaysr2   r3   r4   todayranger   
DELAY_DAYS
TOTAL_DAYSrO   rP   rQ   r   rR   r   rM   rt   strptimer   yearCountryHolidayr   r   r   	saturdayssundaysweekdaystrftimer   )r   r   r  ra  rl  rm  itoday_range	dates_rawprovider_reservationsprovider_reservations_rowr   r   date_datetimed
dates_yeardates_holidayr   provider_priceprice_holidayprice_saturdayprice_sundayrt  ru  eventsdatum	day_prices                              r+   r   r   Y  s   (JJ01) JJLE6;L<S<S6TU6T59!,,6TKU49,:Q:Q4RS4Rq**4RIS  "

 0 01B C M MZe M f j j l)''-	 )))F*;ZHMMO$$]3 * #,,)Q!&&)J,++D
+CM JJ$$%56@@[bl@mttvM"((N!**M",,N ((L%:Iq)9II:#8)Qqyy{a'7q)G8FKMM"
3'#)%  ++]]
3'#)%  m#!!-2	"
3'#*&  "
3'#)%  i"!.3	"
3'#*&  "
3'#)%  gq !,q1	"
3'#*&  "
3'#)%  nQ/IMM"
3'#*& Y j JJ12Me VS - ;8s*   O8O=8PP/P9PP)RotatingFileHandlerzappgetwork.logi  rd  )maxBytesbackupCountz%%(asctime)s %(levelname)s %(message)s__main__i  )r,   port)[flaskr   r   r   r   
flask_corsr   flask_bcryptr   rT   flask_jwt_extendedr	   r
   r   r   r   
sqlalchemyr   flask_sqlalchemyr   r  api_keyloggingr   r   r   r   r   rM   app_getwork_modelsr   r   r   r   r   r   r   r   r   r   dotenvr   __name__r2   DB_URLengineconfigrO   ri   r    ACCESS_EXPIRESrZ  router,   r5   r8   rd   rm   rz   r   r   r   r   r   r   r   r   r,  r.  r6  rF  rJ  boolrN  r   rr   r_  r   logging.handlersr  log_pathlog_file_pathfile_handlersetLevelWARNING	Formatter	formattersetFormatterr3   
addHandlerrunr)   r*   r+   <module>r     s   8 8    g g % ' ~        _  _  _  N Ho 
|**	6(4(;(;

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

 %

? )5)D)D

% &o 8eW%* &* 3 C !C 8eW%9 &9 &2/% 3/%f vh/! 0!F 0  1: 19  29z x0/! 1/!f "VH5:  6:| !E73  4$ w/  02 fX.K  /K^ 1H  2HX :x(o  )ob 7VH%r  &rh <&*2  +2h <&*/  +/b x0J  1JX vh/(  0(^4 *!F&{@ 	994, !)),<<M 'L '//*!!!"IJIi( JJ,'zGG$TG" r*   