3
؀hB                @   s>  d dl mZmZmZmZmZmZmZmZ d dl	m	Z	m
Z
mZ d dlmZmZ d dlZd dlZd dl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mZ d d
lmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZG d dlHmIZI d d lJmKZK d d!lLmMZM d d"lNmOZO d d#lPmQZQ d d$lRmSZS d d%lTmUZU d d&lVmWZW d d'lXmYZY d d(lZT d d(l[T d d(l\T d d)l]m^Z^m_Z_ d d*l`maZa d d+lmZ d d,lbmcZc d d-ldmeZemfZf d d(lgT d dlhZhd dliZid.d/d0gZjd1d2 Zkejld3d4gd5d6d7 Zmejld8d9d: Znejld;d<d= Zoejld>d?d@ ZpejldAdBdC ZqdDdE ZrejldFd4dGgd5dHdI ZsdJdK ZtdLdM ZudS )N    )Flaskjsonifyrender_templateurl_forrequestredirectjsonmake_response)datetime	timedeltadate)
SalesforceSalesforceLoginN)app)db) return_salesforce_access_details)BookingType)Booking)BookingGuest)BookingPayment)CheckInVehicle)PaymentMethod)BookingStatus)Facility)	Inventory)Detail)	Mandatory)Transaction)Gatepass)GatepassGuest)GatepassDetail)	GuestType)GatepassVehicle)Vehicle)Sun)Modify)Gate)VehicleDetail)Destination)SalesforceData)Group)SchoolBooking)School)Member)SalesforceDetails)SalesforceCode)BookingActivity)Partner)*)bookingTotalget_booking_status_id)validatePhoneNumber)r   )OrderedDict)MailMessagezTanzania, United Republic ofZTanzania)api_namesf_namec             C   s   ddg}g }x|D ]}d}d}t jtjd d}tj $ tdtd| tj j	d	d
}W d Q R X t
|}t
|}	|}t|||	|}
|jjjj|
j d}|jt| qW |S )Nz'william.njoroge@olpejetaconservancy.orgz'patricia.kanana@olpejetaconservancy.orgz$reservations@olpejetaconservancy.orgzSalesforce Schedule (Bookings)SENDGRID_API_KEY)Zapikeyz	text/htmlzsalesforce.htmlz%H:%M:%S %d-%m-%Y)datar   )Zrequest_body)sendgridZSendGridAPIClientr   configapp_contextZContentr   r
   nowstrftimeEmailr7   clientmailsendpostgetappendstr)Zsf_dataZ
recipientsZsendgrid_responseZ	recipientsendersubjectZsgcontentZ
from_emailZto_emailrD   response rN   ,/booking_service/app/routes/salesforce_v2.pysend_salesforce_emailE   s*    

rP   z/post/visitsPOST)methodsc        7   @   C   s	  g } y&t jd j  t jd s(| jd W n, tk
rV } z| jd W Y dd}~X nX | rltd| idfS tjtj	t jd }|j
dkrg }|jd td	|idfS tjjtjtjdkj }|sg }|jd
 td	|idfS |j}|j}ttj|jd}t||ddd}tjjtjttjtjkjttjtjkjt tj!t j"kjt#tjt#jkj$tjtjtj%tj&tj'tj(tj)tj*tj+tj,tj-tj.tj/tj!tj0tj1tj2tj3tj4t j5t#j6t#j7t#j8t#j9t#j:t#j;t#j<t#j=t#j>t#j?jtjdkjtj1dkjtj3dkjtj0dkjtj!t@dkjt#jdkjt#j:dkjA }	|		rx\|	D ]R}
y$tjjt#jt#jdkjt#j8|
j8kjt#j:dkjt#j!t@dkjt#j!t@dkjBt#jCjD j }y"|
j9jEd\}}|jd}|}W n tFk
r   d}d}Y nX tjtGj	|}y$|j d d }|j d d }W n tFk
rJ   d}d}Y nX |
j=r\|
j=}n0y|j d d }W n tFk
r   d}Y nX |
j2dkrd}nd}|jdj	|
j8}|d dkr|d d d }n6d|
j7|
j8|
j6|||||||d}|jHjI|}|d }i }tJ||
j tjtKj	|
j2}|j d d d  |d!< g }|d" rd#}xJ|d" D ]8}i }|d$ |d< |d% |d< |d& |d'< |j| q`W nd(}g }g }g }g } |d) r>x|d) D ]t}!i }"|!d* |"d< |!d+ |"d'< |j|!d,  |!d, d-kr| j|!d*  n|!d, d.kr.|j|!d*  |j|" qW |rd.|krXd#}#d(}$n*d-|krld(}#d#}$nd.d-@ |krd#}#d#}$nd(}#d(}$tjjtLjtMtLjNtMjOkj$tMjPtMjQjtLjdkjtLj|
jkjtMjdkj }%|%rd#}&|%jP}'|%jQ}(nd(}&d}'d}(tjjtRjtStRjTtSjUkj$tSjVjtRjdkjtRj|
jkjBtRjWjD j })|)r^|)jV}*nd}*|jXjI|
j>|d/ |
j%jYd0|
j&jYd0|d! |
j,|
j%jYd0||*d#||$|#d1|&|(|'d2}+tjjtZjtZjdkjtZj|
jkj },|,rDtjt[j	|,j\}-|-j
dkrD|j]jI|
j%jYd0|-j d3 t^|,j_t^|,j` t^|,jad4}.n n |rx:|D ]2}/|jbjI|/d |d! |/d' jYd0|+d d5}0qPW |rx:|D ]2}1|jbjI|1d |d! |1d' jYd0|+d d6}0qW tjjtjtjdkjtj|
jkj }2tjjt#jt#jdkjt#j|
jkj }3d7|2_1|+d |2_3tcjd |2_/||3_:tcjd |3_/tettfjg |
jtcjd |+d d8}4tjjh|4 W n$ tFk
r }5 zW Y dd}5~5X nX qJW y"tjji  d	d9i}6tjt|6dfS  tFk
r }5 zd	t|5i}6tjt|6dfS d}5~5X nX nd	d:i}6tjt|6dfS dS );z!
	Handling requests from the UI
	
session_idzSession ID is empty.zSession ID is missing.Nmessagesi     z(Not authorised to perform this operationmessagezThere are no credentials.zb'ag5WoEQG3ZmQyova1wRtUu65T)usernamepasswordsecurity_tokensandbox	CancelledUpdated-+r   namedemonymcapitalz$162fface-f5f1-41de-913b-d2bb784dda3aCitizenz0SELECT Id, Email FROM Contact WHERE Email = '{}'	totalSizerecordsId)TitleLastNamerB   	FirstNamePhoneMobilePhoneMobile_Phone_Country_Code_T__cCity__c
Country__cxsms__Mobile_Phone_Country__cCitizenship__cidr<   currency_namecurrencyinventory_bookingstrueinventory_idinventory_nameinventory_booking_dater   falsefacility_bookingsfacility_namefacility_booking_check_in_datefacility_typezCamping SitesAccomodation
total_costz%Y-%m-%d0121D0000009eEnQAI)Residency__cBooking_Amount__cCheck_in_Date_Time__cCheck_out_Date__cCurrencyIsoCode
Booking__cVisit_Date__c
Contact__cMode_of_Payment__cIndemnity_checked__cActivity_booked__cCamping_booked__cAccomodation_Booked__cRecordTypeIdSchool_Booking__cLevel_of_school__cName_of_school__cmember_salesforce)Date__cMembership__cNumber_of_people__cNumber_of_vehicles__c)Activity__cr   Activity_Date__cVisit__c)Accomodation__cr   r   r      )salesforce_tracking_public_id
booking_id	date_donesalesforce_uuidz/Successfully pushed booking data to Salesforce.z&No new bookings to push to Salesforce.)kr   r   striprH   KeyErrorr   requestsrG   Zget_single_userformatstatus_coder   sessionqueryr.   filterdeletion_markerfirstdetails_emaildetails_passwordrI   base64	b64decoder   r   joinr   booking_public_idr   r   booking_typebooking_type_public_idr   statusbooking_status_public_idr   add_columnsbooking_check_in_datebooking_check_out_dateactual_booking_check_in_dateactual_booking_check_out_datebooking_done_by
checked_inchecked_outbooking_ref_coderS   
created_at
updated_atpayment_status
salesforcers   r   booking_type_namebooking_status_name
first_name	last_nameemail_addressphone_numbercontact_uuidaddressadditional_notecitycountrycountry_coder4   allorder_bybooking_details_iddescsplit	Exceptionget_country_detailsContactcreater3   get_currencyr+   r,   	school_idschool_public_idschool_nameschool_levelr   r   transaction_payment_methodpayment_method_public_idpayment_method_nametransaction_booking_idr   rA   r-   get_membership_data	member_idMember_Visits__cintnum_of_peoplenum_of_childrennum_of_vehiclesVisit_activity__cr
   r@   r)   uuiduuid4addcommitr	   )7rT   eZget_userrV   get_codeu_name	temp_passpass_wsfnew_bookingsbooking	get_emailnumber_prefixnumbercountry_detailsr   ra   r   citizenship	is_recordr   payloadnew_contactreturn_datars   rv   activity_checkedsingle_inventoryinventory_detailsr}   facility_idaccomodationcampingsingle_facilityfacility_detailsaccomodation_checkedcamping_checkedget_school_bookingschool_bookingr   r   get_payment_modepayment_method	new_visitget_member_bookingget_salesforcenew_member_visiteach_inventorynew_visit_activityeach_facilityget_booking
get_detailsalesforce_data
identifierresponseObjectrN   rN   rO   ui_generated_requestk   s   
































r  z*/send/single-visit/salesforce/<booking_id>c       <   4   C   s	  t jt}t|j d |j d d}d }|jj }x6|d D ]*}d|d ksZd|d kr>t|d }q>q>W |sg }|jd t	d	|id
fS t
jjtjttjtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtj tj!tj"tj#tj$tj%tj&tj'tj(tj)tj*tj+tj,tj-j.tj/d kj.tj!d kj.tj#d kj.tjt0dkj.tj| kj.tj/d kj.tj(d kj1 }|rx|D ]}yt
jjtj.tj/d kj.tj&|j&kj.tj(d kj.tjt0dkj.tjt0dkj2tj3j4 j5 }	y"|j'j6d\}
}|
j7d}
|}W n t8k
r4   d }
d }Y nX t jt9j:|
}y$|j d d }|j d d }W n t8k
r   d }d }Y nX |j+r|j+}n0y|j d d }W n t8k
r   d }Y nX |j"dkrd}nd }|jdj:|j&}|d dkr|d d d }nH|j%r"|j%}nd}d ||j&|j$|||
||||d}|j;j<|}|d }i }t=||j t jt>j:|j"}|j d d d |d< g }|d rd}xJ|d D ]8}i }|d  |d< |d! |d< |d" |d#< |j| qW nd$}g }g }g }g }|d% rx|d% D ]t} i }!| d& |!d< | d' |!d#< |j| d(  | d( d)krb|j| d&  n| d( d*kr~|j| d&  |j|! qW |rd*|krd}"d$}#n*d)|krd$}"d}#nd*d)@ |krd}"d}#nd$}"d$}#t
jjt?jt@t?jAt@jBkjt@jCt@jDt@jEj.t?j/d kj.t?j|jkj.t@j/d kj5 }$|$rd}%|$jC}&|$jD}'|$jE}(g })x>|d+ D ]2}*d,|*d- ks|d.|*d- kr\|)j|*d/  n q\W tF|)}+nd$}%d }&d }'d }(d}+t
jjtGjtHtGjItHjJkjtHjKj.tGj/d kj.tGj|jkj2tGjLj4 j5 },|,r|,jK}-nd }-|jj<|j,|d0 |jjMd1|jjMd1|d |j|jjMd1||-d||#|"||%|'|&|(|+d2}.t
jjtNj.tNj/d kj.tNj|jkj5 }/|/rt jtOj:|/jP}0|jd3j:|j&}1|1d d d }2|0jQd4kr|jRj<|jjMd1|2tS|/jTtS|/jU tS|/jVd5}3n n |rRx:|D ]2}4|jWj<|4d |d |4d# jMd1|.d d6}5qW |rx:|D ]2}6|jWj<|6d |d |6d# jMd1|.d d7}5q^W t
jjtj.tj/d kj.tj|jkj5 }7t
jjtj.tj/d kj.tj|jkj5 }8d8|7_!|.d |7_#tXjY |7_||8_(tXjY |8_tZtt[j\ |jtXjY |.d d9}9t
jj]|9 W n< t8k
r~ }: zt|:|d:};t^t	|;d
fS d }:~:X nX qW y"t
jj_  d	d;i};t^t	|;d4fS  t8k
r }: zd	t|:i};t^t	|;d
fS d }:~:X nX n$d	d<tt`| i};t^t	|;d4fS d S )=Ninstance_urlaccess_token)r  rS   recordTypeInfosr   r`   recordTypeIdzNo recordTypeId present.rV   i  r\   r]   r^   r_   r   ra   rb   z$162fface-f5f1-41de-913b-d2bb784dda3arc   z0SELECT Id, Email FROM Contact WHERE Email = '{}'rd   re   rf   zN/A)rg   rh   rB   ri   rj   rk   rl   rm   rn   ro   rp   rq   r<   rr   rs   rt   ru   rv   rw   rx   r   ry   rz   r{   r|   r}   zCamping Sitesr~   guestsstudentpayment_personStudentpayment_guestsr   z%Y-%m-%d)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   OBTS_School_ID__cOBTS_Number_of_students__cz<SELECT Id FROM Opportunity WHERE Contact_Email_del__c = '{}'rU   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r   r   r   r   )rV   r  z/Successfully pushed booking data to Salesforce.z&No new bookings to push to Salesforce.)ar   rG   get_sf_detailsr   r   r   describerI   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   r   r   r3   r   r+   r,   r   r   r   r   school_codesumr   r   r   r   r   r   rA   r-   r   r   r   r   r   r   r   r   r   r
   r@   r)   r   r   r   r	   r   len)<r   detailsr   record_type_idget_visits_infoinforV   r   r   r   r   r   r   r   ra   r   r   r   r   r   r   r   r   rs   rv   r   r   r   r}   r   r   r  r  r  r  r  r  r  r   r   r$  studentssingle_studentno_of_studentsr  r	  r
  r  r  opportunity_recordoppr  r  r  r  r  r  r  r  r  rN   rN   rO   sendSingleSalesforceVisits  s   































"
r0  z/send/driver-detailsc               C   s  t jjtjtjd kj } | s>g }|jd td|idfS | j	}| j
}ttj|jd}t||ddd}t jjtjtjd kjtjd kjtjd kj }|sg }|jd td|id	fS xV|D ]L}yt|j}|d
 r|d }	|	jd\}
}|
jd}
|jdj|}|d d
kr:|d d
 d }ntjtj|
}y|j d
 d }W n tk
rx   d }Y nX y|jjd\}}W n" tk
r   |j}|j}Y nX |||||
||dd}|jj|}|d }||_n W q tk
r } ztdt|idfS d }~X qX qW yt jj  t jj   W n* tk
r`   t jj!  t jj   Y nX g }|jd td|idfS )NzThere are no credentials.rV   rU   zb'rW   T)rX   rY   rZ   r[   z2There are no driver details to push to Salesforce.i  r   r   r^   r_   z/SELECT Id FROM Contact WHERE MobilePhone = '{}'rd   re   rf   r`    ru   )ri   rh   rj   rk   rl   rn   ro   ZDriver_Contact__crq   errori  z1Successfully pushed driver details to Salesforce.)"r   r   r   r.   r   r   r   rH   r   r   r   rI   r   r   r   r   r   Zdriver_salesforce_uuidZcheck_vehicle_phone_numberr   r5   r   r   r   rG   r   r   r   Zcheck_vehicle_driverr   r   r   closerollback)r   rV   r   r   r   r   Zget_driver_detailsZsingle_driverZphone_validationZphoner   r   r   r   r   r   r   r   Zcontact_payloadr   r   rN   rN   rO   send_driver_detailsP  s    




$


r5  z
/sf/org-idc              C   s   t jjtjtjd kj } | s>g }|jd td|idfS t	| j
| jd}y&|jd}td|d d d id	fS  tk
r } ztd
t|idfS d }~X nX d S )NzJThere is no Salesforce code present. Please authenticate this application.rV   i  )r  rS   zSELECT Id FROM Contact LIMIT 1re   r   rf   rU   r2  )r   r   r   r/   r   r   r   rH   r   r   r  r  r   rI   )Zget_sf_coderV   r   r   r   rN   rN   rO   testing_alternate_sign_in  s    

r6  z&/salesforce/uuid/check/<email_address>c             C   s   t jjtjttjtjkjtj	j
tjd kj
tjd kj
tj| kj }y0|j	rhtd|j	ddfS tdd ddfS W n" tk
r   tdd ddfS X d S )NT)existsr   rU   F)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   Zcheck_contactrN   rN   rO   checkIfSalesforceContact  s    
r8  c       6   2   C   s  t jjtjtjd kj }|s>g }|jd td|idfS |j	}|j
}ttj|jd}t||ddd}t jjtjttjtjkjttjtjkjttjtjkjttjtjkjtjtjtjtjtjtj tj!tj"tj#tj$tj%tj&tj'tjtj(tj)tj*tj+tj,tj-tj.tj/tj0tj1tj2tj3tj4tj5tj6tj7jtjd kjtj)d kjtj+d kjtj(d kjtjt8dkjtj| kjtjd kjtj2d kj9 }|rx|D ]}yTt jjtjtjd kjtj0|j0kjtj2d kjtjt8dkjtjt8d	kj:tj;j< j }	y"|j1j=d
\}
}|
jd}
|}W n t>k
rX   d }
d }Y nX t?j@tAjB|
}y$|jC d d }|jC d d }W n t>k
r   d }d }Y nX |j5r|j5}n0y|jC d d }W n t>k
r   d }Y nX |j*dkr d}nd }|jdjB|j0}|d dkr6|d d d }n6d |j/|j0|j.|||
||||d}|jDjE|}|d }i }tF||j t?j@tGjB|j*}|jC d d d |d< g }|d r d}xJ|d D ]8}i }|d |d< |d |d< |d |d < |j| qW nd!}g }g }g }g }|d" rx|d" D ]t}i } |d# | d< |d$ | d < |j|d%  |d% d&krt|j|d#  n|d% d'kr|j|d#  |j|  q(W |rd'|krd}!d!}"n*d&|krd!}!d}"nd'd&@ |krd}!d}"nd!}!d!}"t jjtHjtItHjJtIjKkjtIjLtIjMjtHjd kjtHj|jkjtIjd kj }#|#rXd}$|#jL}%|#jM}&nd!}$d }%d }&t jjtNjtOtNjPtOjQkjtOjRjtNjd kjtNj|jkj:tNjSj< j }'|'r|'jR}(nd }(|jTjE|j6|d( |jjUd)|jjUd)|d |j$|jjUd)||(d||"|!d*|$|&|%d+})t jjtVjtVjd kjtVj|jkj }*|*rt?j@tWjB|*jX}+|+jYdkr|jZjE|jjUd)|+jC d, t[|*j\t[|*j] t[|*j^d-},n n |rx:|D ]2}-|j_jE|-d |d |-d  jUd)|)d d.}.qW |r*x:|D ]2}/|j_jE|/d |d |/d  jUd)|)d d/}.qW t jjtjtjd kjtj|jkj }0t jjtjtjd kjtj|jkj }1d0|0_)|)d |0_+t`ja |0_'||1_2t`ja |1_'tbttcjd | t`ja |)d d1}2t jje|2 tfttcjd | d2|)d  d t`ja d3}3t jje|3 W n$ t>k
r, }4 zW Y d d }4~4X nX qW y,t jjg  t jjh  dd4i}5tit|5dfS  t>k
r }4 z0t jjj  t jjh  dt|4i}5tit|5dfS d }4~4X nX ndd5i}5tit|5dfS d S )6NzThere are no credentials.rV   rU   zb'rW   T)rX   rY   rZ   r[   r\   r]   r^   r_   r   r`   ra   rb   z$162fface-f5f1-41de-913b-d2bb784dda3arc   z0SELECT Id, Email FROM Contact WHERE Email = '{}'rd   re   rf   )rg   rh   rB   ri   rj   rk   rl   rm   rn   ro   rp   rq   r<   rr   rs   rt   ru   rv   rw   rx   r   ry   rz   r{   r|   r}   zCamping Sitesr~   r   z%Y-%m-%dr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r   r   r   r   z,Booking data pushed to Salesforce. Vist ID: )Zbooking_activity_public_idr   Zbooking_activity_descriptionrS   r   z/Successfully pushed booking data to Salesforce.z*No new booking data to push to Salesforce.)kr   r   r   r.   r   r   r   rH   r   r   r   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   rG   r   r   r   r   r   r3   r   r+   r,   r   r   r   r   r   r   r   r   r   r   r   rA   r-   r   r   r   r   r   r   r   r   r   r
   r@   r)   r   r   r   r0   r   r3  r	   r4  )6r   r   rV   r   r   r   r   r   r   r   r   r   r   r   ra   r   r   r   r   r   r   r   rs   rv   r   r   r   r}   r   r   r  r  r  r  r  r  r  r   r   r  r	  r
  r  r  r  r  r  r  r  r  r  Zbooking_activityr  r  rN   rN   rO   send_single_visit_salesforce  s   

































r9  z/send/visits/salesforceGETc        ;   5   C   sl	  t jt} t| j d | j d d}d }|jj }x6|d D ]*}d|d ksZd|d kr>t|d }q>q>W |sg }|jd t	d	|id
fS t
j tdd }tjjtjttjtjkjtjtjtjtjtjtjtjtjtjtjtjtj tj!tj"tj#tj$tj%tj&tj'tj(tj)tj*tj+tj,tj-tj.tj/tj0j1tj2d kj1tj$d kj1tj&d kj1tj"t3dkj1tj2d kj1tj+d kj4 }|sg }|jd t	d	|idfS g }g }	x|D ]}
tjjt5j1t5j2d kj1t5j|
jkj6 }|r|
jj7d|j7dkr|	j|
j y<tjjtj1tj2d kj1tj|
jkj1tj+d kj1tj"t3dkj1tj"t3dkj8tj9j: j6 }y"|j*j;d\}}|j<d}|}W n t=k
r   d }d }Y nX t jt>j?|}y$|j d d }|j d d }W n t=k
r   d }d }Y nX |j.r|j.}n0y|j d d }W n t=k
rH   d }Y nX |
j%dkr\d}nd }|jdj?|j)}|d dkr|d d d }nH|j(r|j(}nd}d ||j)|j'|||||||d}|j@jA|}|d }i }tB||
j t jtCj?|
j%}|j d  d d! |d"< g }|d# rnd$}xJ|d# D ]8}i }|d% |d< |d& |d< |d' |d(< |j| q0W nd)}g }g } g }!g }"|d* rx|d* D ]t}#i }$|#d+ |$d< |#d, |$d(< |j|#d-  |#d- d.kr|"j|#d+  n|#d- d/kr|!j|#d+  | j|$ qW |rTd/|kr(d$}%d)}&n*d.|kr<d)}%d$}&nd/d.@ |kr\d$}%d$}&nd)}%d)}&tjjtDjtEtDjFtEjGkjtEjHtEjItEjJj1tDj2d kj1tDj|
jkj1tEj2d kj6 }'|'rd$}(|'jH})|'jI}*|'jJ}+g },x>|d0 D ]2}-d1|-d2 ksd3|-d2 kr|,j|-d4  n qW tK|,}.nd)}(d })d }*d }+d}.tjjtLjtMtLjNtMjOkjtMjPj1tLj2d kj1tLj|
jkj8tLjQj: j6 }/|/r|/jP}0nd }0tjjtRj1tRjS|
j"kj6 }1|jjA|
j/|d5 |
jj7d|
jj7d|d" |
j|
jj7d||0d$||&|%||(|*|)|+|.|1jTd6}2|rLx:|D ]2}3|jUjA|3d |d" |3d( j7d|2d d7}4qW | rx:| D ]2}5|jUjA|5d |d" |5d( j7d|2d d8}4qXW tjjtj1tj2d kj1tj|
jkj6 }6tjjtj1tj2d kj1tj|
jkj6 }7d|6_$|2d |6_&t
j |6_!||7_+t
j |7_!tVttWjX |
jt
j |2d d9}8tjjY|8 |j|
jd:  W n< t=k
r }9 z|j|
jd; t|9  W Y d d }9~9X nX qW yVtjjZ  tjj[  t\j]d<krg }|jd= t	|||	d>dfS t\j]d?kr|S W n t=k
	rf }: zbtjj^  tjj[  t\j]d<k	rBg }|jd@ t	|t|:||	dAdfS t\j]d?k	rVt|:S W Y d d }:~:X nX d S )BNr  r  )r  rS   r  r   r`   r  zNo recordTypeId present.rV   i  r   )daysr\   z*No new visit records to post at this time.rU   z%Y-%m-%dr]   r^   r_   r   ra   rb   z$162fface-f5f1-41de-913b-d2bb784dda3arc   z0SELECT Id, Email FROM Contact WHERE Email = '{}'rd   re   rf   zN/A)rg   rh   rB   ri   rj   rk   rl   rm   rn   ro   rp   rq   r<   rr   rs   rt   ru   rv   rw   rx   r   ry   rz   r{   r|   r}   zCamping Sitesr~   r  r  r  r  r  r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!  Booking_Status__c)r   r   r   r   )r   r   r   r   )r   r   r   r   z: Okz: rQ   zPosted records to Salesforce.)rV   re   array_to_pushr:  z$Error posting records to Salesforce.)rV   r2  re   r=  )_r   rG   r"  r   r   r   r#  rI   rH   r   r
   r@   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r   r-   r   rA   r   r   r   r   r   r   r   r   r   r   r3   r   r+   r,   r   r   r   r   r$  r%  r   r   r   r   r   r   r   r   r   r   r)   r   r   r   r   r3  r   methodr4  );r'  r   r(  r)  r*  rV   	yesterdayr   bookings_arrayr=  r   r  get_detailsr   r   r   r   ra   r   r   r   r   r   r   r   r   rs   rv   r   r   r   r}   r   r   r  r  r  r  r  r  r  r   r   r$  r+  r,  r-  r  r	  get_status_namer
  r  r  r  r  r  r  r  excrN   rN   rO   send_visit_dataQ  s   




























$





rD  c        O   0   C   s  t jt} t| j d | j d d}d }|jj }x6|d D ]*}d|d ksZd|d kr>t|d }q>q>W |sg }|jd t	d	|id
fS t
j tdd }g }|jd|kr|}ng }|j|jd |}tjjtjttjtjkjtjtjtjtjtjtjtjtjtjtjtj tj!tj"tj#tj$tj%tj&tj'tj(tj)tj*tj+tj,tj-tj.tj/tj0tj1j2tj3d kj2tj%d kj2tj'd kj2tj#t4dkj2tj3d kj2tj,d kj5 }	|	sg }|jd t	d	|idfS g }
g }g }x|	D ]}x|D ]}|jjd|kr|j|j y0tjjtj2tj3d kj2tj|jkj2tj,d kj2tj#t4dkj2tj#t4dkj6tj7j8 j9 }|sP y"|j+j:d\}}|j;d}|}W n t<k
r   d }d }Y nX d}d }d}|j&dkrd}nd }tjjt=j2t=j3d kj2t=j|jkj9 }|rd}t jt>j?|j@}|jAj }|j d }|j d d dkrx|d D ]@}|d dkrhx*|d D ]}|d d krd }d!}n qW qhW nn|j d d d"krxV|d D ]@}|d dkrx*|d D ]}|d d#krd#}d!}n qW qW nd }d!}nd$}d$}d%}|jd&j?|j*}|d' dkr\|d( d d) } n|rd*| d+ }!y|}"W n tBk
r   |j(}"Y nX n|j)r|j)}!nd,}!|j(}"d |!|j*|"|||||||d-}#|jAjC|#}$|$d. } i }%tD|%|j t jtEj?|j&}&|&j d/ d d0 |%d1< g }'g }(|%d2 rd3})xX|%d2 D ]F}*i }+|*d4 |+d.< |*d5 |+d< |*d6 |+d7< |(j|+d  |'j|+ q<W nd8})g },g }-g }.g }/|%d9 r(x|%d9 D ]t}0i }1|0d: |1d< |0d; |1d7< |,j|0d<  |0d< d=kr|/j|0d:  n|0d< d>kr|.j|0d:  |-j|1 qW |,rnd>|,krBd3}2d8}3n*d=|,krVd8}2d3}3nd>d=@ |,krvd3}2d3}3nd8}2d8}3tjjtFjtGtFjHtGjIkjtGjJtGjKtGjLj2tFj3d kj2tFj|jkj2tGj3d kj9 }4|4r6d3}5|4jJ}6|4jK}7|4jL}8g }9x>|%d? D ]2}:d@|:dA ksdB|:dA kr|9j|:dC  n qW tM|9};nd8}5d }6d }7d }8d};tjjtNjtOtNjPtOjQkjtOjRj2tNj3d kj2tNj|jkj6tNjSj8 j9 }<|<r|<jR}=nd }=tjjtTj2tTjU|j#kj9 }>dDj|(}?|jjC|j0|%dE |jjd|jjd|%d1 |j|jjd| |=d3|)|3|2||5|7|6|8|;|>jV||?dF}@tjjtWj2tWj3d kj2tWj|jkj9 }A|Art jtXj?|AjY}B|jdGj?|j*}C|Cd( }DtZ|DdkrnR|Cd( d d) }E|Bj[dkr|j\jC|jjd|Et]|Aj^t]|Aj_ t]|Aj`dH}Fn n |'	r4x:|'D ]2}G|jajC|Gd |%d1 |Gd7 jd|@d. dI}HqW |-	rvx:|-D ]2}I|jajC|Id |%d1 |Id7 jd|@d. dJ}H	q@W tjjtj2tj3d kj2tj|jkj9 }Jtjjtj2tj3d kj2tj|jkj9 }Kd|J_%|@d. |J_'t
j |J_"| |K_,t
j |K_"tbttcjd |jt
j |@d. dK}Ltjje|L i }L|j|LdL< dM|LdN< dO|LdP< |
j|L W nP t<k

r }M z2i }L|j|LdL< dQ|LdN< t|M|LdP< |
j|L W Y d d }M~MX nX qW qW y tjjf  tjjg  th|
 W n@ t<k
r
 }N z"tjji  tjjg  th|
 W Y d d }N~NX nX d S )RNr  r  )r  rS   r  r   r`   r  zNo recordTypeId present.rV   i  r   )r;  z%Y-%m-%dr\   z*No new visit records to post at this time.rU   r]   r^   r_   ZKenyaZNairobiz$162fface-f5f1-41de-913b-d2bb784dda3arc   Tpartner_typer   zTour PartnersfieldsType__cpicklistValueslabelzTourism PartnerszTourism Partner BookingzTour Operators & Travel AgentszTour Operators & AgentsFzGuest Bookingz0SELECT Id, Email FROM Contact WHERE Email = '{}'rd   re   rf   ()zN/A)rg   rh   rB   ri   rj   rk   rm   rn   ro   rp   rG  rq   r<   rr   rs   rt   ru   rv   rw   rx   r   ry   rz   r{   r|   r}   zCamping Sitesr~   r  r  r  r  r  ,r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!  r<  ZType_of_OBTS_Booking__cr   z<SELECT Id FROM Opportunity WHERE Contact_Email_del__c = '{}')r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   Postedr    	exceptionError)jr   rG   r"  r   r   r   r#  rI   rH   r   r
   r@   r   rA   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   r   r1   get_partner_detailsr   
partner_idr   	NameErrorr   r3   r   r+   r,   r   r   r   r   r$  r%  r   r   r   r   r   r   r   r   r   r-   r   r   r&  r   r   r   r   r   r   r   r)   r   r   r   r   r3  rP   r4  )Or'  r   r(  r)  r*  rV   r?  Zdates_to_postZnew_date_arrayr   r@  r=  Zother_bookings_arrayr   Zone_daterA  r   r   r   ra   r   r   get_partner_bookingpartner_bookingpartner_detailsget_contact_typespartner_namefieldpicklist_valuescontact_typeobts_type_of_bookingr   r   r   r   r   r   r   rs   rv   Zinventory_name_arrayr   r   r   r}   r   r   r  r  r  r  r  r  r  r   r   r$  r+  r,  r-  r  r	  rB  Zactivity_stringr
  r  r  r.  Z	opp_arrayr/  r  r  r  r  r  r  r  r  rC  rN   rN   rO   send_visit_data_scheduled  s   











































(



r]  c       C   9   C   s"
  t jt}t|j d |j d d}tjjtj	t
tjt
jkj	ttjtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtj t
j!t
j"t
j#t
j$t
j%t
j&t
j't
j(t
j)t
j*tj+tj,j-tj.d kj-tjd kj-tj d kj-tjt/dkj-tj| kj-t
j.d kj-t
j%d kj-tj.d kj0 }|s^g }|j1d t2d|idfS g }g }xb|D ]X}i }|j|d< |j|d	< |j+|d
< ytjjt
j-t
j.d kj-t
j|jkj-t
j%d kj-t
jt/dkj-t
jt/dkj3t
j4j5 j6 }	|	sP y"|	j$j7d\}
}|
j8d}
|}W n t9k
rD   d }
d }Y nX t jt:j;|
}yX|j d d }x2t<D ]*}|j d d |d krn|d }P qnW |j d d }W n t9k
r   d }d }Y nX yD|	j(r|	j(}n0y|j d d }W n t9k
r   d }Y nX W n t9k
r,   d }Y nX |jdkr@d}nd }tjjt=j-t=j.d kj-t=j|jkj6 }|rvd}t jt>j;|j?}|j@jA }|j d }|j d d dkrx|d D ]@}|d dkrx*|d D ]}|d dkrd}d}n qW qW nn|j d d dkrlxV|d D ]@}|d dkr&x*|d D ]}|d d krBd }d}n qBW q&W nd}d}nd!}d!}d"}|jd#j;|	j#}|d$ dkr|d% d d& }n|rd'| d( }y|}W n tBk
r   |	j!}Y nX n|	j"r|	j"}nd)}|	j!}d ||	j#||||||||d*}|j@jC|} | d+ }i }!tD|!|j t jtEj;|j}"|"j d, d d- |!d.< g }#|!d/ rd0}$xJ|!d/ D ]8}%i }&|%d1 |&d+< |%d2 |&d< |%d3 |&d4< |#j1|& qW nd5}$g }'g }(g })g }*|!d6 rnx|!d6 D ]t}+i },|+d7 |,d< |+d8 |,d4< |'j1|+d9  |+d9 d:krB|*j1|+d7  n|+d9 d;kr^|)j1|+d7  |(j1|, qW |'rd;|'krd0}-d5}.n*d:|'krd5}-d0}.nd;d:@ |'krd0}-d0}.nd5}-d5}.tjjtFj	tGtFjHtGjIkjtGjJtGjKtGjLj-tFj.d kj-tFj|jkj-tGj.d kj6 }/|/r|d0}0|/jJ}1|/jK}2|/jL}3g }4x>|!d< D ]2}5d=|5d> ks\d?|5d> kr<|4j1|5d@  n q<W tM|4}6nd5}0d }1d }2d }3d}6tjjtNj	tOtNjPtOjQkjtOjRj-tNj.d kj-tNj|jkj3tNjSj5 j6 }7|7r|7jR}8nd }8tjjtTj-tTjU|jkj6 }9|#r2x$|#D ]}:|:d |dA< qW ndB|dA< |(r^x$|(D ]};|;d |dC< qFW ndB|dC< |*rz|*d |dD< ndB|dD< |d jVdE|d	 ||9jW|d
 |dC |dD |dA dF}<|jXjC|d jVdE|d	 ||9jW|d
 |dC |dD |dA dF}=tjjtj-tj.d kj-tj|jkj6 }>tjjt
j-t
j.d kj-t
j|jkj6 }?i }@|j|@dG< dH|@dI< dJ|@dK< |j1|@ W nP t9k
	r }A z2i }@|j|@dG< dL|@dI< tY|A|@dK< |j1|@ W Y d d }A~AX nX qnW ytjjZ  tjj[  W n8 t9k

r }B ztjj\  tjj[  W Y d d }B~BX nX d S )MNr  r  )r  rS   r\   z,Booking to post to salesforce was not found.rV   rU   booking_datebooking_refr   r]   r^   r_   r   r`   r9   r:   ra   rb   z$162fface-f5f1-41de-913b-d2bb784dda3arc   TrE  zTour PartnersrF  rG  rH  rI  zTourism PartnerszTourism Partner BookingzTour Operators & Travel AgentszTour Operators & AgentsFzGuest Bookingz0SELECT Id, Email FROM Contact WHERE Email = '{}'rd   re   rf   rJ  rK  zN/A)rg   rh   rB   ri   rj   rk   rm   rn   ro   rp   rG  rq   r<   rr   rs   rt   ru   rv   rw   rx   r   ry   rz   r{   r|   r}   zCamping Sitesr~   r  r  r  r  r  Zbooked_activityNoneZbooked_accomodationZbooked_campsitez%Y-%m-%d)ZBooking_Date__cZBooking_Ref__cr   r<  ZType_of_Booking__cZBooked_Accomodation__cZCampsite_Booked__cZBooked_Activity__cr   rM  r   rN  rO  rP  )]r   rG   r"  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   r   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   Zbooking_type_descriptionr   r   r4   r   rH   r   r   r   r   r   r   r   r   r   r   country_listr1   rQ  rR  r   r#  rS  r   r3   r   r+   r,   r   r   r   r   r$  r%  r   r   r   r   r   r   r   r   rA   r   ZBookings__crI   r   r3  r4  )Cr   r'  r   r   rV   r@  r=  r   Zbooking_datarA  r   r   r   r   Zone_countryra   r   r   rT  rU  rV  rW  rX  rY  rZ  r[  r\  r   r   r   r   r   r   r   rs   rv   r   r   r   r}   r   r   r  r  r  r  r  r  r  r   r   r$  r+  r,  r-  r  r	  rB  r  r  ZbooksZnew_Bookingr  r  r  r  rC  rN   rN   rO   send_booking_info_to_salesforce  s   























"

rb  )vflaskr   r   r   r   r   r   r   r	   r
   r   r   Zsimple_salesforcer   r   pymysqlosmathr   r   r   routesr   r   Zroutes.callback_urlsr   Zdatabase.booking_typesr   database.bookingsr   Zdatabase.booking_guestsr   Zdatabase.booking_paymentsr   Zdatabase.check_in_vehiclesr   Zdatabase.payment_methodsr   Zdatabase.booking_statusr   Zdatabase.facilityr   Zdatabase.inventoryr   Zdatabase.booking_detailsr   Zdatabase.mandatory_paymentsr   Zdatabase.transactionr   Zdatabase.gatepassr   Zdatabase.gatepass_guestsr   Zdatabase.gatepass_detailsr    Zdatabase.booking_guest_typesr!   Zdatabase.gatepass_vehiclesr"   Zdatabase.vehicler#   Zdatabase.sunr$   Zdatabase.modifyr%   Zdatabase.gater&   Zdatabase.vehicle_detailsr'   Zdatabase.destinationr(   Zdatabase.salesforcer)   Zdatabase.groupr*   Zdatabase.school_bookingr+   Zdatabase.schoolr,   Zdatabase.memberr-   Zdatabase.callback_detailsr.   Zdatabase.salesforce_coder/   Zdatabase.booking_activity_logr0   Zdatabase.partnerr1   	variablesZfunctions.date_operatorsZfunctions.currency_operatorsZfunctions.booking_snippetsr3   r4   Zfunctions.validationr5   collectionsr6   Z
flask_mailr7   r8   Zsendgrid.helpers.mailr=   jinja2ra  rP   router  r0  r5  r6  r8  r9  rD  r]  rb  rN   rN   rN   rO   <module>   s   ((
&  p  yg  j      w