3
٦h.                 @   s  d dl Z d dlZd dlZd dlmZmZ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 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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:T d dl;T d dl<T d dl=T d dl>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZEmFZFmGZG d dlHmIZImJZJmKZKmLZL d dlMT d dlNmOZO dd ZPe@jQd d!gd"d#d$ ZRe@jQd%d&d' ZSe@jQd(d)d* ZTe@jQd+d,d- ZUe@jQd.d/d0 ZVe@jQd1d2d3 ZWe@jQd4d5d6 ZXe@jQd7d!gd"d8d9 ZYe@jQd:d;d< ZZe@jQd=d>gd"d?d@ Z[dAdB Z\dCdD Z]dS )E    N)datedatetime	timedelta)Flaskjsonjsonifyredirectrender_templaterequesturl_for)BookingActivity)Detail)	GuestType)BookingGuest)BookingStatus)BookingType)Booking)Note)Facility)Gatepass)GatepassDetail)GatepassGuest)GatepassVehicle)	Inventory)Invoice)MandatoryPaymentPrices)	Mandatory)Partner)Transaction)Vehicle)AsyncRequests)*)	FromCacheappbookings_loggerdbdb_cache)currencyHandlersend_booking_emailsend_booking_update_email)BookingGuestTypesSeedBookingStatusSeedBookingTypeSeedMandatoryPaymentsSeed)send_booking_info_to_salesforcec             C   s   | j j  d S )N)sessionclose)self r2   4/booking_service/app/routes/partner_bookings_urls.pyr0   -   s    r0   z/partners/bookings/newPOST)methodsc        j   B  C   s  t j jd} tjjtjtjd kjtj	dkj
 dkrBtj  tjjtjtjd kjtjdkj
 dkrvtj  ddddd	dd
ddddddddddiddddddg}ttj|}tjtjtjd }|j }|d }|rtd|idfS tjd | k r,g }|jd td|idfS tjd | k rZg }|jd td|idfS tjd tjd k rg }|jd td|idfS ytjd }W n tk
r   d }Y nX |ry|tjd tjd d}tjt|d}	|	jd kr
td|	j d idfS |	jd krV|}
t|	j d! d d" }|	j d! d }|	j d! d d# }W n0 tk
r   g }|jd$ td|idfS X nd }d }d }
d }g }xJtjd% D ]<}yt|d& }W n tk
r   d}Y nX |j| qW tj tjd }tj tjd }t!j"||}|dkr(d'}n|dkr6|}y"tjtjtjd }|j }W nF tj#j$k
r } z$g }|jd( t|t%|d)dfS d }~X nX yt&|d* }W n( t'k
r } z
d}W Y d d }~X nX y|d+ }W n t'k
r    d }Y nX t(|}tjd j) }tjd
 j) }|d r:|d' }n"g }|j|d'  td|idfS |d }d }|d, j* }t+|}|sg }|jd- td|idfS g }yZtjd. rt+tjd. j* } | sg }|jd/ td|idfS |jtjd. j*  W n tk
r   Y nX tjd0 d1kr>|d2 r>t,d3}!d4}"nt,d5}!d }"t%t-j. }#t%t-j. }$t%t-j. d d6 }%tjt/jtjd }&|&j d! d d7 }'|&j d! d d8 }(t0|#tjd tjd tjd tjd j) d9 tjd
 j)  |%|!|"tjd |'|(tjd t j t j d:})tjj1|) ytjd0 }*W n tk
rN   d'}*Y nX t2t%t-j. |#tjd tjd; tjd. j* tjd |*t j t j d<	}+tjj1|+ t3t%t-j. |#d=tjd t j d>},tjj1|, i }-|#|-d?< |%|-d@< ||-d< ||-d
< g }.yt4tj|-|.||dA W n2 tk
rD }/ ztdt%|/idfS d }/~/X nX g }0yt5tj|-|0||dA W n2 tk
r }/ ztdt%|/idfS d }/~/X nX yxtjd% D ]}1tjjt6jt6jd kjt6j7|1dB kj8 }2yt|1d& }3W n tk
r   d}3Y nX t9t%t-j. |#t:|2j;|3dC}4tjj1|4 qW W n4 t'k
rf }5 zt<dDt%|5  W Y d d }5~5X nX ytjdE }6W n( t'k
r }7 z
d }6W Y d d }7~7X nX ytjdF }8W n( t'k
r }9 z
d }8W Y d d }9~9X nX ytjdG }:W n( t'k
	r }; z
d }:W Y d d };~;X nX ytjdH }<W n( t'k
	rF }= z
d }<W Y d d }=~=X nX ytjdI }>W n( t'k
	r~ }? z
d }>W Y d d }?~?X nX ytjdJ }@W n( t'k
	r }A z
d }@W Y d d }A~AX nX ytjdK }BW n( t'k
	r }C z
d }BW Y d d }C~CX nX t=t%t-j. |#|||d, j* |d |6|>|@|Bt j t j dL}Dtjj1|D ytjdM }EW n tk

r^   d }EY nX |E
rt>t%t-j. |#|Etjd t j dN}Ftjj1|F ytjdO }GW n( t'k

r }H z
d }GW Y d d }H~HX nX t?|$| tjd j) d9 tjd
 j)  |G|t%t-j. d d6 |#d'tjd tjd tjd tjd d't j t j dP}Itjj1|I g }JyLxDtjd% D ]4}Ktjjt@jAt6t@jBt6j7kjCt@jDt@jEt@jBt@jFt@jGt6j;t6j7jt@jd kjt@jE|KdQ kjt@jB|KdB kj8 }Ly
|LjG}IW n, tHtIfk
r
 } z
d}IW Y d d }~X nX tJtjd |LjF|I}Mtjt/j|LjF}Ny,|Nj d! d d7 }O|Nj d! d d8 }PW n tk
r|   d'}Od'}PY nX |r|dR r|KdB |dS krt&|d" }Q|dT }Rnd}Qd }Rnd}Qd }Rnd}Qd }Ryt&|KdU }SW n tk
r   d}SY nX |r
|
}Rn(y|KdV }RW n tk
r0   d }RY nX yt|Kd& }TW n tk
r\   d}TY nX dWdXdYg}U|dZkr`|KdB |Ukr|Sr|S|Q }n||Q }tKt%t-j. |$|KdB |TtLjMtN|Md[|KdQ ||d tjd tN|I|LjF|Ot j t j d\}1tjj1|1 nbtKt%t-j. |$|KdB |TtLjMtN|Md[|KdQ ||Sd tjd tN|I|LjF|Ot j t j d\}1tjj1|1 nyt&|d* }W n( t'k
r } z
d}W Y d d }~X nX |r|}n,yt&|KdU }W n tk
r   d}Y nX ||Q }StKt%t-j. |$|KdB |TtLjMtN|Md[|KdQ ||S|Rtjd tN|I|LjF|Ot j t j d\}1tjj1|1 i }Vyt|Kd& }W n tk
rj   d}Y nX |dkrb|Lj;|Vd]< |Kd& |Vd^< |Jj|V qbW W n4 t'k
r }W zt<dDt%|W  W Y d d }W~WX nX tOt%t-j. |$|||d, j* |t j t j d_}Xtjj1|X g }Yg }ZyLxDtjd` D ]4}[tjjtPjtPjd kjtPjQ|[da kj8 }\y
|\jR}]W n, tHtIfk
r } z
d}]W Y d d }~X nX tJtjdb |\jS|]}^tjt/j|\jS}Ny,|Nj d! d d7 }O|Nj d! d d8 }PW n tk
r   d'}Od'}PY nX |r|}_n,yt&|[dc }_W n tk
r<   d}_Y nX |
rJ|
}`n(y|[dV }`W n tk
rp   d }`Y nX yt|[d` }aW n tk
r   d}aY nX tTt%t-j. |$|[da |atN|^tjdb ||_|`tN|]|\jS|Ot j t j dd}bi }cyt|[d` }dW n tk
r   d}dY nX |ddkrR|\jU|cde< |[d` |cdf< |Zj|c |Yjt|[d`  tjj1|b q*W W n4 t'k
r }e zt<dgt%|e  W Y d d }e~eX nX y(tjdh rtVtjdh |#tjd  W n$ tk
r }/ zW Y d d }/~/X nX |"d4kr"tWt%t-j. |#tjd t j di}ftjj1|f ybtjjX  tYt |j| i }g||gdj< dk|gdl< dm|% dn |gdo< t j jdp|gdq< |%|gdr< ||gd< ||gd
< |jds|gdt< |jds|gdu< tZ||gdv< tZ|Y|gdw< |d9 | |gdx< |#|gd?< |.|gdy< |0|gdz< |J|gd{< |Z|gd|< yt[|g|d} W n tk
r"   Y nX |rPtjt\j|d# tjd d~|#dd g }h|hjd i }i|#|id< |d, |id,< t|h|iddfS  tk
r }/ z>t<|/ tjj]  tYt g }h|hjd t|ht%|/d)dfS d }/~/X nX d S )Nz%Y-%m-%dz$626f13f2-aab0-4488-a774-44969b3062a3r   2df20a96typezBooking type)fieldalias
first_namez
First name	last_namez	Last namecheck_inzCheck-in date	check_outzCheck-out dater8   currencypartnerzPartner details
session_idz
Session IDtype_public_idmessagesi  z)Your check in date cannot be in the past.messagez*Your check out date cannot be in the past.z:Your check-out date cannot come before your check-in date.
promo_code)rD   check_in_datecheck_out_date)r      datapercentage_off	public_idzhThere was an issue getting the promo code details. Please try again or leave the promo code field blank.guestspayment_guests   zLThe partner details are not available at the moment. Please try again later.)rC   errorZconservation_fee_discounttelemailz*The partner email address used is invalid.agent_emailz&The agent email provided is not valid.Zpayment_period   Zcan_be_invoicedz
To Invoice   Unconfirmed
   currency_buy_amountcurrency_sell_amount )booking_public_idbooking_typebooking_check_in_datebooking_check_out_datebooking_done_bybooking_ref_codestatuspayment_statusr>   currency_buying_rate_at_timecurrency_selling_rate_at_timer@   
created_at
updated_atpartner_booking_ref)	partner_booking_public_id
booking_id
partner_idre   rQ   r@   paid_byrc   rd   zBooking created)booking_activity_public_idrg   booking_activity_descriptionr@   rc   rg   booking_ref)partner_detailspromo_code_detailspayment_public_id)booking_guest_public_idrg   
guest_typeguest_countzThere was an error getting: additional_noteaddresscountrycity
entry_modeentry_pointmode_registration)booking_details_public_idrg   r:   r;   email_addressphone_numberrt   rs   rw   rx   ry   rc   rd   note)booking_notes_public_idrg   r}   r@   rc   destination)gatepass_public_idgatepass_dategatepass_done_byr   gatepass_phone_numbergatepass_ref_coderg   bookingrh   
start_dateend_dategatepass_currencygatepass_payment_statusrc   rd   payment_scheduleconservancy_feeconservancy_fee_arraycodepayment_person_discountreasonz$cdf8982a-3252-40ec-a49b-d752420eaa9bz$6ba37724-04df-4a1d-b475-c2915ec52a81z$9ab7da60-6813-411a-9a00-f2d8a413c5bbZ4abc0d64   )gatepass_guest_public_idgatepass_idgatepass_guest_typegatepass_guest_countgatepass_cost_per_ppgatepass_payment_schedulegatepass_no_of_nightsgatepass_discount_rategatepass_discount_reasonr   gatepass_guest_cost_at_timegatepass_guest_currency_at_timegatepass_guest_rate_at_timerc   rd   guest_categoryguest_number)gatepass_details_public_idr   r:   r;   r{   r|   rc   rd   vehiclesvehicle_charge_public_idcurrency_iddiscount)gatepass_vehicle_public_idr   gatepass_vehicle_typegatepass_vehicle_countgatepass_cost_per_vehiclegatepass_vehicle_currencygatepass_vehicle_no_of_nightsgatepass_vehicle_discount_rate gatepass_vehicle_discount_reasongatepass_vehicle_cost_at_time!gatepass_vehicle_currency_at_timegatepass_vehicle_rate_at_timerc   rd   vehicle_categoryvehicle_numberz.There was an error getting the following key: proof_of_residency)invoice_public_idrg   r@   rc   	recipientz$reservations@olpejetaconservancy.orgsenderzBooking Notification (#)subjectz%B %Ytodayr^   z%A, %d %b %YrE   rF   num_of_guestsnum_of_vehiclesclientfacility_infoinventory_info
guest_infovehicle_info)r?   1)r@   numberr   z?The booking has been made. Please proceed to make your payment.rY   )rC   rH      z-There was an error while creating the booking)^r   nowstrftimer%   r/   queryr   filterdeletion_markerbooking_status_public_idcountr+   seed_default_booking_statusr   booking_guest_type_public_idr*   (seed_default_booking_guest_types_methodsfieldValidationr
   r   requestsgetget_partner_detailsformatr   append	Exceptionpostpromo_code_searchstatus_codeintGenerateDateFromStringgenerateDateDateOperationsreturnDateDifferenceInDays
exceptionsConnectionErrorstrfloatKeyErrorvalidatePhoneNumbertitlelowervalidateEmailget_booking_status_iduuiduuid4get_buy_sell_rater   addr   r   facilityBookinginventoryBookingr   ro   firstr   get_booking_guest_type_idpayment_personprintr   r   r   r   joinpayment_categoryadd_columnsprice_public_idr   payment_currencypayment_price
ValueError	TypeErrorr'   r   mathceilroundr   r   r   vehicle_charge_category_costvehicle_charge_cost_currencyr   vehicle_charge_categorynewResidencyProofr   commitr0   sumr(   use_promo_coderollback)jr   validation_listrB   partner_temprm   partner_typerC   promo_code_json	post_datacheck_promo_validityrD   promo_discountpromo_code_datapromo_code_public_id	guest_sum
each_guestguest_numbersrE   rF   temp_date_diff	date_diffconnection_errorZgatepass_discountno_valuephonephone_validationr:   r;   partner_emailrP   valid_emailemail_arrayvalidate_agent_emailbooking_statusr`   rg   r   rl   get_booking_exchange_ratebooking_buying_ratebooking_selling_rater   ri   r?   booking_activitybooking_infofacility_email_dataeinventory_email_datagatepass_guestget_guest_typerr   guestguest_errorrs   guest_key_errorrt   address_key_errorru   country_key_errorrv   city_key_errorrw   entry_mode_errorrx   entry_point_errorry   mode_registration_errordetailr}   new_noter   destination_errorgatepassguest_info_dataeach_gatepass_guestget_gatepass_feegatepass_amountget_ex_ratebuyingsellingZpromo_person_discountperson_discount_reasonperson_discountrK   Zcheck_residencer   gatepass_guest_errorgatepass_detailvehicle_sumvehicle_info_dataeach_vehicleget_costvehiclevehicle_feevehicle_discountvehicle_discount_reasonr   gatepass_vehicler   vehicle_numbersvehicle_key_errorinvoice
email_dataoutputreturn_datar2   r2   r3   add_new_partner_booking4   s   














  
"






















"


















rJ  z/partners/bookings/viewc               C   s  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jtjd kj t!t"j#tjj$ j% } | sg }|j&d t'd|idfS g }g }x| D ]}|j&|j qW yt(j)t*d|id}W n6 t(j+j,t(j+j-t(j+j.fk
rN } zW Y d d }~X nX x| D ]}i }|j|d< |j|d< |j	|d< |j|d	< |j|d
< |j|d< |j|d< g }g }	t jjt/jt0t/j1t0j2kjt3t/j4t3j5kjt0j6t0j2t/j7t/j8t/j9t/j:jt/jd kjt/jt;dkjt3j|jkj t!t"j% }
x@|
D ]8}i }|j6|d< |j7|d< |j&| |	j&t<|j7 q6W ||d< t=|	|d< t jjt>jt>jd kjt>j|jkj? }|r |jdkrd|d< dj@tAjBd |d< nd|d< dj@tAjBd |d< n|jdkr,d|d< dj@tAjBd |d< nX|jdkrXd|d< dj@tAjBd |d< n,|jdkrd|d< dj@tAjBd |d< n |jdkrdj@tAjBd  |d< n|jd!krdj@tAjBd" |d< n|jd#krdj@tAjBd$ |d< n|jd%krdj@tAjBd& |d< nn|jdkr.dj@tAjBd' |d< nL|jd(krPdj@tAjBd) |d< n*|jd*krrdj@tAjBd+ |d< nd,|d< |j|d< |j|d-< yNxH|jC d. D ]8}|d/ |jkr|d0 d1 |d2  |d3< |j|d4< qW W nn tDk
r } zd5|d3< |j|d4< W Y d d }~X n: tEtFfk
rJ } zd6|d3< |j|d4< W Y d d }~X nX |j|d7< |j|d8< |j&| qXW t'd.|idfS d S )9Nz.There are currently no bookings in the system.rC   rG   	users_ids)r   rY   rZ   booking_type_idr[   r\   r]   r^   Updatedrq   no_of_guestsrK   guest_totalrM   	Cancelledr  z!background-color: {}; color: #fff	CANCELLEDbooking_colorz
To Invoice
TO_INVOICEzChecked OutCHECKED_OUTz
Checked Inz background-color:{}; color: #fff
CHECKED_INrT   UNCONFIRMED	Confirmed	CONFIRMEDzNo-ShowNO_SHOW	Abandoned	ABANDONEDUPDATEDDepositDEPOSITComplimentaryCOMPLIMENTARYz&background-color: #fff; color: #000000booking_status_idrH   rJ   r:   rX   r;   session_userr@   zN/AzNetwork Errorrc   rd   )Gr%   r/   r   r   r   r   rY   rg   r   rZ   booking_type_public_idr   r_   r   r   r   r[   r\   actual_booking_check_in_dateactual_booking_check_out_dater]   
checked_inchecked_outr@   rc   rd   r^   r>   r   booking_type_namebooking_status_namer   optionsr"   r&   order_bydescallr   r   r   r   get_user_from_aumrar   r   TimeoutConnectTimeoutr   r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   configr   
IndexErrorAttributeErrorUnboundLocalError)return_bookingsrH  id_arrayeach_idreturn_userr  singlerI  guest_arrayr  get_all_guestsr  
guest_datacheck_to_invoiceuser
user_errornetwork_related_errorsr2   r2   r3   view_all_partner_bookingsR  s    

















r  z,/partners/bookings/view/partner/<partner_id>c          8   C   sJ  yt jd }W n tk
r&   d }Y nX |s2d}n,ytt jd }W n tk
r\   d}Y nX ytt jd }W n tk
r   d}Y nX |dkrHt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	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$| kj%t&t'j(tj)j* j+ }nt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	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$| kj%t&t'j(tj)j* j,||dj-}|s&g }|j.d t/d|id	fS g }g }x|D ]}|j.|j q4W yt0j1t2d
|id}W n6 t0j3j4t0j3j5t0j3j6fk
r }	 zW Y d d }	~	X nX x|D ]}
i }|
j|d< |
j |d< |
j|d< |
j|d< |
j|d< |
j|d< |
j|d< |
j"|d< i }t7||
j |d |d< |d |d< |d |d< |d |d< g }g }tjjt8jt9t8j:t9j;kjt<t8j=t<j>kjt9j?t9j;t8j@t8jAt8jBt8jCj#t8jd kj#t8jtDdkj#t<j
|
jkj%t&t'j+ }x@|D ]8}i }|j?|d< |j@|d< |j.| |j.t|j@ qW ||d< tE||d< tjjtFj#tFjd kj#tFj
|
jkjG }|r|
jdkrrd|d < d!jHtIjJd" |d#< nd$|d < d!jHtIjJd% |d#< n|
jdkrd&|d < d!jHtIjJd' |d#< nX|
jdkrd(|d < d)jHtIjJd* |d#< n,|
jdkrd|d < d!jHtIjJd" |d#< n |
j!d+kr8d!jHtIjJd, |d#< n|
j!d-krZd!jHtIjJd. |d#< n|
j!d/kr|d!jHtIjJd0 |d#< n|
j!d1krd!jHtIjJd2 |d#< nn|
j!dkrd!jHtIjJd3 |d#< nL|
j!d4krd!jHtIjJd5 |d#< n*|
j!d6krd!jHtIjJd7 |d#< nd8|d#< |
j!|d < |
j|d9< |
jr |
jd:krHd;|d<< |
j|d=< nyBx<|jK d> D ],}|d? |
jkrX|d@ |d<< |
j|d=< qXW W nr tLtMfk
r } zdA|d<< |
j|d=< W Y d d }~X n: tNtOfk
r } zdB|d<< |
j|d=< W Y d d }~X nX ndA|d<< |
j|d=< |
j|dC< |
j|dD< |j.| qW t/d>|id	fS d S )ENpager   rM   itemsrU   FzGThere are currently no bookings for the selected partner in the system.rC   rG   rK  )r   rY   rZ   rL  r[   r\   r]   r^   re   booking_currency_namebooking_currency
total_costbooking_totalfacility_bookingsinventory_bookingsrM  rq   rN  rK   rO  rP  r  z!background-color: {}; color: #fffrQ  rR  z
To InvoicerS  zChecked OutrT  z
Checked Inz background-color:{}; color: #fffrU  rT   rV  rW  rX  zNo-ShowrY  rZ  r[  r\  r]  r^  r_  r`  z&background-color: #fff; color: #000000ra  r#  Publicrb  r@   rH   rJ   	full_namezN/AzNetwork Errorrc   rd   )Pr
   argsr   r   r%   r/   r   r   r   r   rg   rY   r   rZ   rc  r   r_   r   r   r[   r\   rd  re  r]   rf  rg  r@   rc   rd   r^   r>   r   rh  ri  re   r   rh   rj  r"   r&   rk  partner_booking_idrl  rm  paginater  r   r   r   r   rn  r   r   ro  rp  bookingTotalr   r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   rq  r   rr  r   rs  rt  )rh   request_args_pager  r  ru  rH  rv  rw  rx  r  ry  rI  r  rz  r  r{  r  r|  r}  r~  r  r  r2   r2   r3   $view_all_partner_bookings_by_partner  sT   


























r  z1/partners/bookings/view/partner/test/<partner_id>c          .   C   s>  yt jd }W n tk
r&   d }Y nX |s2d}n,ytt jd }W n tk
r\   d}Y nX ytt jd }W n tk
r   d}Y nX |dkrdt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#j$tj d kj$tj%| kj&t't(j)tjj* j+ }nt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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%| kj&t't(j)tj,j* j-||dj.}|sBg }|j/d t0d|id	fS g }g }x|D ]}|j/|j qPW yt1j2t3d
|id}W n6 t1j4j5t1j4j6t1j4j7fk
r }	 zW Y d d }	~	X nX xr|D ]h}
i }|
j
|d< |
j!|d< |
j|d< |
j|d< |
j|d< |
j|d< |
j|d< |
j#|d< g }g }tjjt8jt9t8j:t9j;kjt<t8j=t<j>kjt9j?t9j;t8j@t8jAt8jBt8jCj$t8j d kj$t8jtDdkj$t<j|
j
kj&t't(j+ }x@|D ]8}i }|j?|d< |j@|d< |j/| |j/t|j@ qW ||d< tE||d< tjjtFj$tFj d kj$tFj|
j
kjG }|rn|
j dkrNd|d< djHtIjJd |d< nd|d< djHtIjJd |d< n|
jdkrd |d< djHtIjJd! |d< nX|
jdkrd"|d< d#jHtIjJd$ |d< n,|
j dkrd|d< djHtIjJd |d< n |
j"d%krdjHtIjJd& |d< n|
j"d'kr6djHtIjJd( |d< n|
j"d)krXdjHtIjJd* |d< n|
j"d+krzdjHtIjJd, |d< nn|
j"dkrdjHtIjJd- |d< nL|
j"d.krdjHtIjJd/ |d< n*|
j"d0krdjHtIjJd1 |d< nd2|d< |
j"|d< |
j|d3< |
j|d4< |
j|d5< |
j|d6< |j/| qW t0d7|id	fS d S )8Nr  r   rM   r     FzGThere are currently no bookings for the selected partner in the system.rC   rG   rK  )r   rY   rZ   rL  r[   r\   r]   r^   re   rM  rq   rN  rK   rO  rP  r  z!background-color: {}; color: #fffrQ  rR  z
To InvoicerS  zChecked OutrT  z
Checked Inz background-color:{}; color: #fffrU  rT   rV  rW  rX  zNo-ShowrY  rZ  r[  r\  r]  r^  r_  r`  z&background-color: #fff; color: #000000ra  r@   rc   rd   rH   )Kr
   r  r   r   r%   r/   r   r   r   r   rY   rg   r   rZ   rc  r   r_   r   r   r   r[   r\   rd  re  r]   rf  rg  r@   rc   rd   r^   r>   r   rh  ri  re   r   rh   rj  r"   r&   rk  rl  rm  r  r  r  r   r   r   r   rn  r   r   ro  rp  r   r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   rq  )rh   r  r  r  ru  rH  rv  rw  rx  r  ry  rI  rz  r  r{  r  r|  r}  r2   r2   r3   )view_all_partner_bookings_by_partner_test  s$   





*

















r  z;/partners/bookings/view/partner/<partner_id>/check_in/todayc             C   s  t j j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"j#tjd kj#tj|kj#tj$| kj%t&t'j(tj
j) j* }|sg }|j+d t,d|idfS g }g }x|D ]}|j+|j qW yt-j.t/d|id}W n6 t-j0j1t-j0j2t-j0j3fk
r| } zW Y d d }~X nX x|D ]}i }	|j	|	d< |j |	d< |j|	d	< |j|	d
< |j|	d< |j|	d< |j|	d< t4 }
t-j5t6j7|j}y|j8d d d |	d< W n t9k
r&   d|	d< Y nX |j|	d< t:|	|j	 |j"|	d< tjjt;j#t;jd kj#t;j
|j	kj< }|r|jdkrd|	d< dj7t=j>d |	d< nd|	d< dj7t=j>d |	d< n|jdkrd|	d< dj7t=j>d |	d< nX|jdkrd|	d< d j7t=j>d! |	d< n,|jdkrFd|	d< dj7t=j>d |	d< n |j!d"krhdj7t=j>d# |	d< n|j!d$krdj7t=j>d% |	d< n|j!d&krdj7t=j>d' |	d< n|j!d(krdj7t=j>d) |	d< nn|j!d*krdj7t=j>d+ |	d< nL|j!d,krdj7t=j>d- |	d< n*|j!d.kr4dj7t=j>d/ |	d< nd0|	d< |j!|	d< |j|	d1< |j|	d2< |j|	d3< |j|	d4< |j+|	 qW t,d|idfS d S )5Nz%Y-%m-%dz7There are currently no bookings to be checked in today.rC   rG   rK  )r   rY   rZ   rL  r[   r\   r]   r^   rH   r   currency_namer>    r   re   rM   rP  r  z!background-color: {}; color: #fffrQ  rR  z
To InvoicerS  zChecked OutrT  z
Checked Inz background-color:{}; color: #fffrU  rT   rV  rW  rX  zNo-ShowrY  rZ  r[  rM  r\  r]  r^  r_  r`  z&background-color: #fff; color: #000000ra  r@   rc   rd   )?r   r   r   r%   r/   r   r   r   r   rY   rg   r   rZ   rc  r   r_   r   r   r   r[   r\   rd  re  r]   rf  rg  r@   rc   rd   r^   r>   r   rh  ri  re   r   rh   rj  r"   r&   rk  rl  rm  r   r   r   r   rn  r   r   ro  rp  r    r   get_currencyr   r   r   r  r   r   r#   rq  )rh   r   ru  rH  rv  rw  rx  r  ry  rI  asyncRequestsr>   r}  r2   r2   r3   3view_all_partner_bookings_by_partner_check_in_today  s    















r  z</partners/bookings/view/partner/<partner_id>/check_out/todayc             C   s  t j j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"j#tjd kj#tj|kj#tj$| kj%t&t'j(tj
j) j* }|sg }|j+d t,d|idfS g }g }x|D ]}|j+|j qW yt-j.t/d|id}W n6 t-j0j1t-j0j2t-j0j3fk
r| } zW Y d d }~X nX x|D ]}i }	|j	|	d< |j |	d< |j|	d	< |j|	d
< |j|	d< |j|	d< |j|	d< t4 }
t-j5t6j7|j}y|j8 d d d |	d< W n t9k
r(   d|	d< Y nX |j|	d< t:|	|j	 |j"|	d< tjjt;j#t;jd kj#t;j
|j	kj< }|r|jdkrd|	d< dj7t=j>d |	d< nd|	d< dj7t=j>d |	d< n|jdkrd|	d< dj7t=j>d |	d< nX|jdkrd|	d< d j7t=j>d! |	d< n,|jdkrHd|	d< dj7t=j>d |	d< n |j!d"krjdj7t=j>d# |	d< n|j!d$krdj7t=j>d% |	d< n|j!d&krdj7t=j>d' |	d< n|j!d(krdj7t=j>d) |	d< nn|j!d*krdj7t=j>d+ |	d< nL|j!d,krdj7t=j>d- |	d< n*|j!d.kr6dj7t=j>d/ |	d< nd0|	d< |j!|	d< |j|	d1< |j|	d2< |j|	d3< |j|	d4< |j+|	 qW t,d|idfS d S )5Nz%Y-%m-%dz8There are currently no bookings to be checked out today.rC   rG   rK  )r   rY   rZ   rL  r[   r\   r]   r^   rH   r   r  r>   r  r   re   rM   rP  r  z!background-color: {}; color: #fffrQ  rR  z
To InvoicerS  zChecked OutrT  z
Checked Inz background-color:{}; color: #fffrU  rT   rV  rW  rX  zNo-ShowrY  rZ  r[  rM  r\  r]  r^  r_  r`  z&background-color: #fff; color: #000000ra  r@   rc   rd   )?r   r   r   r%   r/   r   r   r   r   rY   rg   r   rZ   rc  r   r_   r   r   r   r[   r\   rd  re  r]   rf  rg  r@   rc   rd   r^   r>   r   rh  ri  re   r   rh   rj  r"   r&   rk  rl  rm  r   r   r   r   rn  r   r   ro  rp  r    r   r  r   r   r   r  r   r   r#   rq  )rh   r   ru  rH  rv  rw  rx  r  ry  rI  r  r>   r}  r2   r2   r3   4view_all_partner_bookings_by_partner_check_out_today}  s    















r  z$/partners/bookings/view/<booking_id>c       <   "   C   s&  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j#tj$tj%j&tjd kj&tj| kj't(t)j* }| sg }|j+d t,d|idfS g }g }g }g }x |D 
]}i }|j|d< |j|d< |j	|d< |j|d< |j|d< |j|d	< |j|d
< |j|d< |j|d< |j|d< i }|j |d< |j!|d< |j"|d< |j#|d< |j$|d< |j%|d< ||d< g }	g }
t jjt-jt.t-j/t.j0kjt1t-j2t1j3kjt.j4t.j0t-j5t-j6t-j7t-j8j&t-jd kj&t-jt9dkj&t1j|jkj't(t)j* }x@|D ]8}i }|j4|d< |j5|d< |	j+| |
j+t:|j5 qZW g }g }t jjt;j&t;jd kj&t;j|jkj* }x@|D ]6}i }t<j=t>j?|j@}y|jA d d d |d< W nn tBtCtDfk
r: } zd|d< W Y d d }~X n> t<jEjFt<jEjGt<jEjHfk
rv } zd|d< W Y d d }~X nX y|jA d d d |d< W nn tBtCtDfk
r } zd|d< W Y d d }~X n> t<jEjFt<jEjGt<jEjHfk
r } zd|d< W Y d d }~X nX tI|jJd tI|jK  d  }|d tI|jL  d  }tI|jMd tI|jK  d  }|d tI|jL  d  }tI|jNtI|jJ tI|jO }tI|jPtI|jM tI|jO }tI|jNtI| tI|jO }tI|jPtI| tI|jO }|jJdkr|jMdkrtI|jQd tI|jK  d  }|d tI|jL  d  }|jPdkrV|jNdkrV||jP|jN  |jO } n:|jPdkrt||jN |jO } n|jNdkr||jP |jO } nL|jOd! d"krtI|jQ} n0|jOd! d"krtR|jOd! d" }!tI|jQ|! } |j@|d#< |jS|d$< |jT|d%< |jU|d&< |jN|jP |d'< |jN|d(< |jP|d)< |jV|d*< |jO|d+< tR|d,|d-< tR|d,|d.< tR| d,|d/< tR|| |  d,|d0< tR|| |  d,|d1< tRtI|jJd,|d2< tR|d,|d3< tRtI|jMd,|d4< tR|d,|d5< |j+|| |   |j+|| |   |j+| qW ||d6< tRtW|d,|d7< g }"g }#g }$t jjtXj&tXjd kj&tXj|jkj* }%xb|%D ]X}&i }'y@t<j=tYj?|&jZ}(t<j=t[j?|&jZ})|(jA d d d |'d8< W nn tBtCtDfk
r } zd|'d8< W Y d d }~X n> t<jEjFt<jEjGt<jEjHfk
r } zd9|'d8< W Y d d }~X nX tI|&j\d tI|&j]  d  }*|*d tI|&j^  d  }+tI|&j_d tI|&j]  d  },|,d tI|&j^  d  }-tI|&j`tI|&j\ }.tI|&jatI|&j_ }/tI|&j`|+ }0tI|&ja|- }1|&jZ|'d:< |&jb|'d;< |&jc|'d<< |&j`|&ja |'d=< |&j`|'d>< |&ja|'d?< tR|0d,|'d@< tR|1d,|'dA< tR|0|1 d,|'dB< tR|.|/ d,|'dC< |&jd|'dD< tRtI|&j\d,|'dE< tR|+d,|'dF< tRtI|&j_d,|'dG< tR|-d,|'dH< |j+|0|1  |j+|0|1  |"j+|' qdW |"|dI< tRtW|d,|dJ< g }2t jjt-jt1t-j2t1j3kjt-j/t-j5t-j6t-j7t-j8t-jej&t-jd kj&t1jd kj&t1j|jkj* }3x|3D ]}4yNtRtI|4j5d tI|4j6 d   tI|4j7 tI|4j8 d,}5|2j+|5 |j+|5 W n* tftCtDfk

r }6 zW Y d d }6~6X nX 
qHW tRtW|2d,|dK< g }7g }8t jjtgjt1tgj2t1j3kjtgjhtgjij&tgjd kj&t1jd kj&t1j|jkj* }9xv|9D ]n}:y<tRtI|:jhtI|:ji };|8j+|:jh |7j+|; |j+|; W n* tftCtDfk
r }6 zW Y d d }6~6X nX q>W tW|8|dL< tRtW|7d,|dM< tRtW|d,|dN< |jrdO|dP< n|jsdQ|dP< |j+| qW t,d|idfS d S )RNz4That booking does not appear to exist in the system.rC   rG   rY   rZ   rL  r[   r\   rd  re  r]   r^   r>   r:   r;   r{   r|   rt   rs   booking_detailsrM  rq   rN  rH   r   namefacility_namezThe record cannot be found.z1The information cannot be retrieved at this time.facility_type_idfacility_typed      rM   facility_idfacility_booking_public_idfacility_booking_check_in_datefacility_booking_check_out_datefacility_booking_guestsfacility_booking_adultsfacility_booking_childrenfacility_booking_currencyfacility_no_of_nightsr   facility_booking_adult_costfacility_booking_child_costfacility_booking_fixed_costfacility_booking_total_costZ,facility_booking_total_cost_before_discountsZ$facility_adult_cost_before_discountsZ#facility_adult_cost_after_discountsZ$facility_child_cost_before_discountsZ#facility_child_cost_after_discountsr  Zfacility_total_costinventory_namezNetwork error.inventory_idinventory_booking_public_idinventory_booking_dateinventory_booking_guestsinventory_booking_adultsinventory_booking_childreninventory_booking_adult_costinventory_booking_child_costinventory_booking_total_cost-inventory_booking_total_cost_before_discountsinventory_booking_currencyZ%inventory_adult_cost_before_discountsZ$inventory_adult_cost_after_discountsZ%inventory_child_cost_before_discountsZ$inventory_child_cost_after_discountsr  Zinventory_total_costgate_entry_total_costvehicle_countZvehicle_total_costr  Paidbooking_payment_statuszNot Paid)jr%   r/   r   r   r   r   rY   rg   r   rZ   rc  r   r_   r   r   r   r[   r\   rd  re  r]   rf  rg  r^   r@   rc   rd   r`   r>   r   rh  ri  r:   r;   r{   r|   rt   rs   r   rj  r"   r&   rm  r   r   r   r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   get_facility_detailsr   r  r   r   r   r   r   r   ro  rp  r   facility_cost_per_adultfacility_discount_ratefacility_commission_ratefacility_cost_per_childr  r  r  facility_fixed_costr   r  r  r  facility_cost_currencyr   r   get_inventory_detailsr  get_inventory_current_pricinginventory_cost_per_adultinventory_discount_rateinventory_commission_rateinventory_cost_per_childr  r  r  r  inventory_cost_currencyr   	NameErrorr   r   r   )<rg   ru  rH  rv  inventory_total_cost_arraytotal_cost_arrayry  rI  detail_datarz  r  r{  r  r|  facility_arrayfacility_total_cost_arrayr  single_facilityfacility_datareturn_facilityno_datar  Zfac_adult_discountZfac_adult_spec_discountZfac_child_discountZfac_child_spec_discountZpre_facility_adult_costZpre_facility_child_costfacility_adult_costfacility_child_costZfixed_cost_discountZfixed_cost_spec_discountr  weeks_countinventory_arrayZinventory_sub_totalZinventory_id_arrayr  single_inventoryinventory_datareturn_inventoryZreturn_inventory_pricingZadult_discountZadult_spec_discountZchild_discountZchild_spec_discountZpre_adult_costZpre_child_cost
adult_cost
child_costgatepass_total_cost_arraygatepass_details	each_passgatepass_sub_costr  vehicle_total_cost_arrayZvehicle_count_arrayvehicle_chargesr=  vehicle_sub_costr2   r2   r3   view_single_partner_booking  s    








































4



r  z/partners/bookings/view/pendingc           /   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 y&t jd j  t jd s|| jd W n, tk
r } z| jd W Y d d }~X nX | rg }|jd td| id	fS t jd t jd k rg }|jd
 td|id	fS 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$j%t	j"d kj%t	jt&dkj%t	jt jd kj%t	jt jd kj't(t)j*t	jj+ j, }|sg }|jd td|idfS g }xh|D ]^}i }|j|d< |j#|d< |j|d< |j|d< |j|d< |j|d< |j |d< g }g }tjjt-j
t.t-j/t.j0kj
t1t-j2t1j3kjt.j4t.j0t-j5t-j6t-j7t-j8j%t-j"d kj%t-jt&dkj%t1j|jkj't(t)j, }	x@|	D ]8}
i }|
j4|d< |
j5|d< |j| |jt9|
j5 qW ||d< t:||d< tjjt;j%t;j"d kj%t;j|jkj< }|r|j"dkrd|d< dj=t>j?d |d < nd!|d< dj=t>j?d" |d < n|jdkrd#|d< dj=t>j?d$ |d < nX|jdkr$d%|d< d&j=t>j?d' |d < n,|j"dkrPd|d< dj=t>j?d |d < n |j$dkrrdj=t>j?d( |d < n|j$d)krdj=t>j?d* |d < n|j$d+krdj=t>j?d, |d < n|j$d-krdj=t>j?d. |d < nn|j$dkrdj=t>j?d/ |d < nL|j$d0krdj=t>j?d1 |d < n*|j$d2kr>dj=t>j?d3 |d < nd4|d < |j$|d< |j|d5< |j|d6< |j|d7< |j|d8< |j| q$W td9|idfS d S ):Nr   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.rB   i  z.The start date cannot come after the end date.rC   rT   z>There are currently no pending partner bookings in the system.rG   rY   rZ   rL  r[   r\   r]   r^   rM  rq   rN  rK   rO  rM   rP  r  z!background-color: {}; color: #fffrQ  rR  z
To InvoicerS  zChecked OutrT  z
Checked Inz background-color:{}; color: #fffrU  rV  rW  rX  zNo-ShowrY  rZ  r[  r\  r]  r^  r_  r`  z&background-color: #fff; color: #000000ra  r@   rc   rd   rH   )@r
   r   stripr   r   r   r%   r/   r   r   r   r   rY   rg   r   rZ   rc  r   r_   r   r   r   r[   r\   rd  re  r]   rf  rg  r@   rc   rd   r^   r>   r   rh  ri  r   r   rj  r"   r&   rk  rl  rm  r   r   r   ro   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   rq  )rB   r  rC   rH  ru  ry  rI  rz  r  r{  r  r|  r}  r2   r2   r3   !view_all_pending_partner_bookings  s    




















r  z /partners/bookings/view/approvedc              C   sT  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jtjd kjtjt dkj!t"t#j$tjj% j& } | sg }|j'd t(d|idfS g }g }x| D ]}|j'|j  qW x(| D ]}i }|j|d< |j|d< |j	|d< |j|d< |j|d	< |j|d
< |j|d< g }g }t jjt)jt*t)j+t*j,kjt-t)j.t-j/kjt*j0t*j,t)j1t)j2t)j3t)j4jt)jd kjt)jt dkjt-j|jkj!t"t#j& }x@|D ]8}	i }
|	j0|
d< |	j1|
d< |j'|
 |j't5|	j1 qW ||d< t6||d< |j|d< |j|d< yNxHt7j8 d D ]8}|d |jkrn|d d |d  |d< |j|d< qnW W nn t9k
r } zd|d< |j|d< W Y d d }~X n: t:t;fk
r } zd|d< |j|d< W Y d d }~X nX |j|d< |j|d< |j'| qW t(d|idfS d S )NrW  z.There are currently no bookings in the system.rC   rG   rY   rZ   rL  r[   r\   r]   r^   rM  rq   rN  rK   rO  r  ra  rH   rJ   r:   rX   r;   rb  r@   zN/AzNetwork Errorrc   rd   )<r%   r/   r   r   r   r   rY   rg   r   rZ   rc  r   r_   r   r   r   r[   r\   rd  re  r]   rf  rg  r@   rc   rd   r^   r>   r   rh  ri  r   r   rj  r"   r&   rk  rl  rm  r   r   r   r   r   ro   r   r   r   r   r   r   r   r   r   r   rx  r   rr  rs  rt  )ru  rH  rv  rw  ry  rI  rz  r  r{  r  r|  r~  r  r  r2   r2   r3   "view_all_approved_partner_bookingsU	  s    

















r  z/partners/bookings/modifyPATCHc        h      C   s8  yt jjtjtjtjd kj } | sHg }|j	d t
d|idfS | jtjd krvg }|j	d t
d|idfS tj jd}tjtjd	 }tjtjd
 }tj||}|dkrd}n|dkr|}tjt}tjtjtjd }|jdkrg }|j	d|j  t
d|idfS |j }	td|	  d }
t|	trd|	krV|	d }
nxd|	krj|	d }
ndd|	kr~|	d }
nPd|	kr$t|	d tr$d|	d kr|	d d }
nd|	d kr$|	d d }
nTt|	tr$t|	dkr$|	d }t|tr$d|kr|d }
nd|kr$|d }
|
stg }|j	d |j	dt|	trVt|	j nt|	  t
d|idfS |
j  }
t!|
}|sg }|j	d t
d|idfS g }yZtjd rt!tjd j  }|sg }|j	d t
d|idfS |j	tjd j   W n t"k
r   Y nX tjd	 | _#tjd
 | _$t%d| _&tj | _'| j}| j(}| j)}tjd }tjd }tjd j  }
tjd }|
}ytjd }W n t"k
r   d }Y nX t*|}|d r|d }n"g }|j	|d  t
d|idfS t!|
}|s g }|j	d t
d|idfS ytjd  }W n t"k
rH   d }Y nX |ryvtj+t,d |id!}|jdkrt
d|j d idfS |jdkr|}t-|j d d d" }|j d d d# }W n0 t"k
r   g }|j	d$ t
d|idfS X nd }d }d }t jjt.jt.j&t%dkjt.j/|kj }|sVg }|j	d% t
d|idfS |j0}t jjt1jt1j2|kjt1j&t%dkj3 }x"|D ]} t%d| _&tj | _'qW t jjt4jt4j2|kjt4j&t%dkj3 }!x"|!D ]}"t%d|"_&tj |"_'qW t jjt5jt5j2|kjt5j&t%dkj3 }#x"|#D ]}$t%d|$_&tj |$_'q.W t jjt6jt6j/|kjt6j&t%dkj3 }%x"|%D ]}&t%d|&_&tj |&_'q~W t jjt7jt7j/|kjt7j&t%dkj3 }'x"|'D ]}(t%d|(_&tj |(_'qW g })g }*yx"tjd& D ]}+|)j	|+d'  qW t jjt8jt8j/|kjt8j9d kjt8j&t%dkjt8j&t%d(kj3 },x|,D ]}-|*j	|-j: qhW xJ|*D ]B}.|.|)krn0t jjt8jt8j/|kj }/t%d|/_&tj |/_'qW W n t"k
r   Y nX g }0g }1yx"tjd) D ]}2|0j	|2d'  qW t jjt8jt8j/|kjt8j9d kjt8j;dkjt8j&t%dkjt8j&t%d(kj3 }3x|3D ]}4|1j	|4j: qlW xJ|1D ]B}5|5|0krn0t jjt8jt8j:|5kj }6t%d|6_&tj |6_'qW W n t"k
r   Y nX g }7g }8yx"tjd* D ]}9|7j	|9d+  qW t jjt<jt<j/|kjt<j9d kjt<j&t%dkjt<j&t%d(kj3 }:x|:D ]};|8j	|;j= 	qdW xJ|8D ]B}<|<|7k	rn0t jjt<jt<j=|<kj }=t%d|=_&tj |=_'	qW W n t"k
	r   Y nX t%d|_&tj |_'xtjd, D ]}>t jjt>jt>j9d kjt>j?|>d- kj }?|?
s^g }|j	d.|>d-   t
d|idfS yt-|>d/ }@W n t"k

r   d}@Y nX t7t@tAjB |tC|?jDj  |@tjd0 tj d1}At jjE|A 
q W t6t@tAjB ||||
|tjd0 tj d2}Bt jjE|B ytjd3 }CW n t"k
r*   d }CY nX |CrbtFt@tAjB ||Ctjd0 tj d4}Dt jjE|D ytjd5 }EW n( tGk
r }F z
d }EW Y d d }F~FX nX t@tAjB }Gt.|G||d6 | |E|t@tAjB d d7 |dtjd	 tjd
 tjd dtjd0 tj d8}Ht jjE|H xVtjd, D ]F}It jjtHjIt>tHjJt>j?kjKtHjLtHjMtHjJtHjNtHjOt>jDjtHjM|Id9 kjtHjJ|Id- kj }J|Jsg }|j	d:|Id9  d;|Id-   t
d|idfS y
|JjO}KW n, tPtQfk
r }L z
d}KW Y d d }L~LX nX tRtjd |JjN|K}MtjtSj|JjN}Ny,|Nj d d d< }O|Nj d d d= }PW n t"k
rZ   d}Od}PY nX |rh|}Qn,ytT|Id> }QW n t"k
r   d}QY nX |r|}Rn(y|Id? }RW n t"k
r   d }RY nX yt-|Id/ }SW n t"k
r   d}SY nX t4t@tAjB |G|Id- |S|Q|Ijd@tUjVtW|MdA|Id9 |tjd tW|K|JjN|Otjd0 tj dB}>t jjE|> qW t5t@tAjB |G|||
|tjd0 tj dC}Tt jjE|T xtjdD D ]}Ut jjtXjtXj9d kjtXjY|UdE kj }V|Vsg }|j	dF|UdE   t
d|idfS y
|VjZ}WW n, tPtQfk
r> }L z
d}WW Y d d }L~LX nX tRtjd |Vj[|W}XtjtSj|Vj[}Ny,|Nj d d d< }O|Nj d d d= }PW n t"k
r   d}Od}PY nX |r|}Yn,ytT|UdG }YW n t"k
r   d}YY nX |r|}Zn(y|UdH }ZW n t"k
r   d }ZY nX yt-|UdD }[W n t"k
rH   d}[Y nX t1t@tAjB |G|UdE |[tW|Xtjd ||Y|ZtW|W|Vj[|Otjd0 tj dI}\t jjE|\ qW i }]||]d< ||]dJ< ||]d< ||]d< g }^yt\tj|]|^dK|	dL W n2 t"k
r }_ zt
dt@|_idfS d }_~_X nX g }`yt]tj|]|`dK|	dL W n2 t"k
rh }_ zt
dt@|_idfS d }_~_X nX tjtSjtjd }a|ajdkrg }|j	dM t
d|idfS y,|aj d d d< }b|aj d d d= }cW n t"k
r   d}bd}cY nX |d6 | | _)tjd | _|b| _^|c| __tjd	 | _#tjd
 | _$t%d| _&tj | _'t`t@tAjB |dNtjd0 tj dO}dt jjE|d yztjdP rt jjtajtaj9d kjtaj/|kjbtctdj3 }ex|eD ]}fd|f_9tj |f_'qW tetjdP |tjd0  W n t"k
r   Y nX y|t jjf  tgt  |rji }gdQ| dR |gdS< |g|gdT< dU|gdV< ||gdW< ||gdX< ||gd< th|g g }|j	dY t
d|idfS  t"k
r }_ zDt jji  tgt  g }|j	dZ |j	d[t@|_  t
d|idfS d }_~_X nX W nF t"k
r2 }_ z(g }|j	d\t@|_  t
d|id]fS d }_~_X nX d S )^Nrg   z*The selected booking is not in the system.rC   i  r   zJThe updated booking currency does not match the original booking currency.i  z%Y-%m-%dr<   r=   r   rM   r?   rG   z.Failed to fetch partner details. Status code: zPartner details response: rP   EmailZEMAILrH   z<Partner email address not found in partner details response.zResponse structure: z*The partner email address used is invalid.rQ   z&The agent email provided is not valid.rM  r:   r;   r  	send_mailz&The email address provided is invalid.rD   )r   rI   rJ   zhThere was an issue getting the promo code details. Please try again or leave the promo code field blank.z#Gatepass not found for the booking.old_facilitiesr  rP  old_external_facilitiesold_inventoryr  rK   ro   z,Guest type not found for payment public ID: rL   r@   )rp   rg   rq   rr   r@   rc   )rz   rg   r:   r;   r{   r|   r@   rc   r}   )r~   rg   r}   r@   rc   r   rX   rU   )r   r   r   r   r   r   rg   r   r   r   r   r   r@   rc   r   z-Gatepass fee not found for payment schedule: z and category: rV   rW   r   r   payment_person_discount_reasonr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r@   rc   )r   r   r:   r;   r{   r|   r@   rc   r   r   z.Vehicle cost not found for vehicle charge ID: r   discount_reason)r   r   r   r   r   r   r   r   r   r   r   r   r@   rc   rl   T)r   rm   zFailed to get exchange rates.zBooking updated)rj   rg   rk   r@   rc   r   zBooking ID #z Updater   r   z$reservations@olpejetaconservancy.orgr   r^   done_byz!Successfully updated the booking.z@There was an error updating the booking. Please try again later.zError: zAn unexpected error occurred: i  )jr%   r/   r   r   r   rY   r
   r   r   r   r   r>   r   r   r   r   r   r   r   r   r   get_latest_exchange_rater   r   r   r   
isinstancedictlistlenkeysr7   r   r   r   r[   r\   r   r_   rd   r^   r]   r   r   r   r   r   rg   r   r   r   rm  r   r   r   r   r   r   r  external_facilityr   r  r   ro   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   ra   rb   r   ResidencyProofrj  r"   r&   r   r   r0   r)   r  )hreturn_bookingrC   r   rE   rF   r  r  exchange_rate_datar  rm   rP   
first_itemr  r  r  rg   rl   r]   r:   r;   r  recipient_email
send_emailr  r  r  rD   r  r
  get_gatepassold_gatepass_idget_gatepass_vehiclessingle_vehicleget_gatepass_guestssingle_guestget_gatepass_detailssingle_gate_detailget_booking_detailssingle_book_detailget_booking_guestssingle_book_guestold_facility_list_uiold_facility_list_dbfacility_old_singleget_booking_accommodationfacility_old_db_singlesingle_old_facilityget_accommodationold_external_facility_list_uiold_external_facility_list_dbexternal_facility_old_single"get_booking_external_accommodationexternal_facility_old_db_singlesingle_old_external_facilityget_external_accommodationold_inventory_list_uiold_inventory_list_dbinventory_old_singleget_booking_activityinventory_old_db_singlesingle_old_inventoryget_activityr!  r"  rr   r#  r,  r}   r-  r   r.  r   r/  r1  r2  Zgatepass_pricer  r3  r4  r5  r6  r8  r7  rK   r:  r=  r>  Zvehicle_costr@  rA  rB  r   rC  r  r  r  r   r  r  r  r  residecy_proof_dbsingle_proofrG  r2   r2   r3   update_partner_booking	  s    











,






















































  









 r#  c             C   sB   t jjtjtjd kjtj| kj }x|D ]}|j}|S W d S )N)	r%   r/   r   r   r   r   ri  rm  r   )status_name	status_idry  ra  r2   r2   r3   r   f  s    
r   c             C   sB   t jjtjtjd kjtj| kj }x|D ]}|j}|S W d S )N)	r%   r/   r   r   r   r   booking_guest_type_namerm  r   )guest_type_nametype_idry  booking_guest_type_idr2   r2   r3   r   r  s    
r   )^r   osr   r   r   r   pymysqlr   flaskr   r   r   r   r	   r
   r   database.booking_activity_logr   database.booking_detailsr   database.booking_guest_typesr   database.booking_guestsr   database.booking_statusr   database.booking_typesr   database.bookingsr   database.bookings_notesr   database.facilityr   database.gatepassr   database.gatepass_detailsr   database.gatepass_guestsr   database.gatepass_vehiclesr   database.inventoryr   database.invoicer   !database.mandatory_payment_pricesr   database.mandatory_paymentsr   database.partnerr   database.transactionr   database.vehicler   functions.async_functionsr    functions.booking_snippetsfunctions.currency_operatorsfunctions.date_operatorsfunctions.validationroutesr"   r#   r$   r%   r&   routes.bookings_urlsr'   r(   r)   routes.seed_functionsr*   r+   r,   r-   	variablesroutes.salesforce_v2r.   r0   routerJ  r  r  r  r  r  r  r  r  r#  r   r   r2   r2   r2   r3   <module>   s   $      $ ( f    " #    )e         5