3
؀h0                 @   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:m;Z; d dl<m=Z= d dl>T d dl?T d dl@T d dlAT d dlBmCZCmDZDmEZEmFZF d dlGmHZHmIZI d dlJmKZKmLZLmMZMmNZN d dlOmPZP d dlQT d d! ZReCjSd"d#d$ ZTeCjSd%d&gd'd(d) ZUeCjSd*d+d, ZVeCjSd-d&gd'd.d/ ZWeCjSd0d1d2 ZXeCjSd3d4gd'd5d6 ZYd7d8 ZZd9d: Z[dS );    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)Group)	Inventory)Invoice)MandatoryPaymentPrices)	Mandatory)School)SchoolContact)SchoolBooking)Transaction)Vehicle)*)appbookings_loggerdbschoolCodeGenerator)currencyHandlersend_booking_email)BookingGuestTypesSeedBookingStatusSeedBookingTypeSeedMandatoryPaymentsSeed)check_booking_banc             C   s   | j j  d S )N)sessionclose)self r2   2/booking_service/app/routes/group_bookings_urls.pyr0   /   s    r0   z/bookings/group/types/viewc              C   s  t jjtjtjd kjtjdkj dkr4tj	  t jjtjtjd kj dkrrg } | j
d td| idfS t jjtjtjd kjtjdkj }g } xV|D ]N}i }|j|d< |j|d< |j|d	< |j|d
< |j|d< |j|d< | j
| qW td| idfS )N7769748Cr   z-There are currently no booking in the system.messagei     booking_type_public_idbooking_type_namebooking_type_description
session_id
created_at
updated_atdata   )r&   r/   queryr   filterdeletion_markerr7   countr,   "seed_default_booking_types_methodsappendr   booking_type_groupallr8   r9   r:   r;   r<   )outputreturn_booking_typessinglereturn_datar2   r2   r3   view_all_group_booking_types6   s2    







rK   z/group/bookings/newPOST)methodsc        ^      C   sb  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idddg}ttj|}tjd d r.d}d}y0dtjd krg }|jd td|idfS W n tk
r
   Y nX d}dddddddddg}|ttjd | }y tjd d jdd j }W n( tk
r }	 z
d }W Y d d }	~	X nX y tjd d jdd j }
W n( tk
r }	 z
d }
W Y d d }	~	X nX tjd d }tjd d j }tjjtjtjd kjtjtjd d kj }|j}nd}d}d!}d"d#dd$d%dd&d'ddd(id)d*ddd+ig}|ttj| }ytjd( jdd j }W n tk
r   d }Y nX ytjd( jdd j }
W n tk
r   d }
Y nX tjd+ }tjd) j }d }|rtd,|idfS t j td-d. jd}tjd
 tjd k rhg }|jd/ td|idfS ytjd0 }W n tk
r   d }Y nX |rByvtj t!d0|id1}|j"d2krtd|j d idfS |j"d2kr|}t#|j d3 d d4 }|j d3 d d5 }W n0 tk
r>   g }|jd6 td|idfS X nd }d }g }xJtjd7 D ]<}yt#|d8 }W n tk
r   d}Y nX |j| qZW t$|}|d r|d }n"g }|j|d  td|idfS t%|}|sg }|jd9 td|idfS yt&|| W n< tk
rN }	 zt'j( }tt)|	|d:dfS d }	~	X nX t*j+tjd }t*j+tjd
 }t,j-||}|dkrd}n|dkr|}t)t.j/ } t)t.j/ }!t)t.j/ d d; }"tj0t1j2tjd }#|#j d3 d d< }$|#j d3 d d= }%t3| |tjd tjd
 |d |
 |"t4d>tjd |$|%tjd t j t j d?}&tjj5|& t6t)t.j/ | d@tjd t j dA}'tjj5|' i }(| |(dB< |"|(dC< ||(dD< |
|(dE< g })yt7tj|(|) W n2 tk
r }	 ztdt)|	idfS d }	~	X nX g }*yt8tj|(|* W n2 tk
rD }	 ztdt)|	idfS d }	~	X nX yxtjd7 D ]}+tjjt9jt9jd kjt9j:|+dF kj },yt#|+d8 }-W n tk
r   d}-Y nX t;t)t.j/ | t<|,j=|-dG}.tjj5|. qTW W n4 t>k
r }/ zt?dHt)|/  W Y d d }/~/X nX ytjdI }0W n8 t>k
r^ }1 zt?dJt)|1  d }0W Y d d }1~1X nX ytjdK }2W n8 t>k
r }3 zt?dJt)|3  d }2W Y d d }3~3X nX ytjdL }4W n8 t>k
r }5 zt?dJt)|5  d }4W Y d d }5~5X nX t@t)t.j/ | ||
|||4||2|0t j t j dM}6tjj5|6 ytjdN }7W n tk
	rT   d }7Y nX |7	rtAt)t.j/ | |7tjd t j dO}8tjj5|8 ytjdP }9W n( t>k
	r }: z
d }9W Y d d }:~:X nX tB|!| |d |
 |9tjd+ t)t.j/ d d; | dtjd tjd
 tjd dt j t j dQ};tjj5|; g }<yxxptjd7 D ]`}=tjjtCjDt9tCjEt9j:kjFtCjGtCjHtCjEtCjItCjJt9j=jtCjd kjtCjH|=dR kjtCjE|=dF kj }>y
|>jJ};W n, tKtLfk

r }? z
d};W Y d d }?~?X nX tMtjd |>jI|;}@tj0t1j2|>jI}Ay,|Aj d3 d d< }B|Aj d3 d d= }CW n tk
rX   d}Bd}CY nX ytN|=dS }DW n tk
r   d}DY nX |r|}En(y|=dT }EW n tk
r   d }EY nX yt#|=d8 }FW n tk
r   d}FY nX tOt)t.j/ |!|=dF |F|D|EtPjQtR|@dU|=dR |tjd tR|;|>jI|Bt j t j dV}+tjj5|+ i }Gyt#|=d8 }W n tk
rv   d}Y nX |dk
rB|>j=|GdW< |=d8 |GdX< |<j|G 
qBW W n4 t>k
r }H zt?dHt)|H  W Y d d }H~HX nX |r<tSt)t.j/ | tjd" j tjd$ j tjd& tjd t j t j dY}Itjj5|I n |rtjjtjtjd kjtjtjd d kj }tjd d |_Ttjd d j |_Utjd d |_Vtjd dZ |_Wtjd d[ j |_Xtjd d\ |_Ytjd |_Zt j |_[t\t)t.j/ tjd d tjd d tjd d j tjd d tjd dZ tjd d[ j tjd d\ tjd t j d]
}Jtjj5|J t]t)t.j/ | tjd d tjd t j t j d^}Ktjj5|K n t^t)t.j/ |!||
tjd) j |t j t j d_}Ltjj5|L g }Mg }NyLxDtjd` D ]4}Otjjt_jt_jd kjt_j`|Oda kj }Py
|Pja}QW n, tKtLfk
r| }? z
d}QW Y d d }?~?X nX tMtjd |Pjb|Q}Rtj0t1j2|Pjb}Ay,|Aj d3 d d< }B|Aj d3 d d= }CW n tk
r   d}Bd}CY nX |r|}Sn,ytN|Odb }SW n tk
r&   d}SY nX |r4|}Tn(y|OdT }TW n tk
rZ   d }TY nX yt#|Od` }UW n tk
r   d}UY nX tct)t.j/ |!|Oda |UtR|Rtjd ||S|TtR|Q|Pjb|Bt j t j dc}Vtjj5|V i }Wyt#|Od` }XW n tk
r
   d}XY nX |Xdkr6|Pjd|Wdd< |Od` |Wde< |Nj|W |Mjt#|Od`  qW W n4 t>k
r }Y zt?dJt)|Y  W Y d d }Y~YX nX y(tjdf rtetjdf | tjd  W n$ tk
r }	 zW Y d d }	~	X nX y*tjjf  tgt |g}Zi }[|Z|[dg< dh|[di< dj|" dk |[dl< t j jdm|[dn< |"|[do< ||[dD< |
|[dE< |jdp|[dq< |jdp|[dr< th||[ds< th|M|[dt< |d |
 |[du< | |[dB< |)|[dv< |*|[dw< |<|[dx< |N|[dy< yti|[ W n tk
r   Y nX g }\|\jdz i }]| |]d{< ||]d)< t|\|]d|d}fS  tk
r\ }	 z>t?|	 tjjj  tgt g }\|\jd~ t|\t)|	ddfS d }	~	X nX d S )Nz%Y-%m-%dz$3b5376e0-a4dc-476e-aebc-6280b44b756ar   2df20a96typezBooking type)fieldaliascheck_inzCheck-in date	check_outzCheck-out daterP   currencyr:   z
Session IDschoolprimary_contactFT	school_idzoYou are currently using an outdated version of OBTS. Please refresh the page and make the school booking again.r5   i  8D7E6504zPrimary contact nameprimary_contact_phonezPrimary contact phoneprimary_contact_emailzPrimary contact email address r6    C3237489organisation_namezOrganisation nameorganisation_emailzOrganisation email addressorganisation_typezOrganisation typenameemailzEmail addressphonemessages   )daysz:Your check-out date cannot come before your check-in date.
promo_code)r   r>   r=   percentage_off	public_idzhThere was an issue getting the promo code details. Please try again or leave the promo code field blank.guestspayment_guestsz&The email address provided is invalid.)r5   trace
   currency_buy_amountcurrency_sell_amountUnconfirmed)booking_public_idbooking_typebooking_check_in_datebooking_check_out_datebooking_done_bybooking_ref_codestatusrT   currency_buying_rate_at_timecurrency_selling_rate_at_timer:   r;   r<   zBooking created)booking_activity_public_id
booking_idbooking_activity_descriptionr:   r;   r{   booking_ref
first_name	last_namepayment_public_id)booking_guest_public_idr{   
guest_typeguest_countzThere was an error getting: additional_notez.There was an error getting the following key: addresscountry)booking_details_public_idr{   r~   r   email_addressphone_numberr   cityr   r   r;   r<   note)booking_notes_public_idr{   r   r:   r;   destination)gatepass_public_idgatepass_dategatepass_done_byr   gatepass_phone_numbergatepass_ref_coder{   booking
start_dateend_dategatepass_currencygatepass_payment_statusr;   r<   payment_schedulepayment_person_discountreason   )gatepass_guest_public_idgatepass_idgatepass_guest_typegatepass_guest_countgatepass_discount_rategatepass_discount_reasongatepass_cost_per_ppgatepass_payment_schedulegatepass_no_of_nightsr   gatepass_guest_cost_at_timegatepass_guest_currency_at_timegatepass_guest_rate_at_timer;   r<   guest_categoryguest_number)group_booking_public_idr{   r^   r_   r`   r:   r;   r<   secondary_contactsecondary_contact_emailsecondary_contact_phone)
Zschool_contact_public_idrW   rV   rZ   rY   r   r   r   r:   r;   )school_booking_public_idr{   rW   r:   r;   r<   )gatepass_details_public_idr   r~   r   r   r   r;   r<   vehiclesvehicle_charge_public_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_timer;   r<   vehicle_categoryvehicle_numberproof_of_residency	recipientz$reservations@olpejetaconservancy.orgsenderzBooking Notification (#)subjectz%B %Ytodayrv   z%A, %d %b %Ycheck_in_datecheck_out_datenum_of_guestsnum_of_vehiclesclientfacility_infoinventory_info
guest_infovehicle_infoz?The booking has been made. Please proceed to make your payment.rq   )r5   r=      zEThere was an error while creating the booking.Please try again later.)r5   error)kr   nowstrftimer&   r/   r?   r   r@   rA   booking_status_public_idrB   r+   seed_default_booking_statusr   booking_guest_type_public_idr*   (seed_default_booking_guest_types_methodsfieldValidationr
   r   rD   r   	Exceptionsplittitlelowerr   school_public_idfirstclosest_city_townr   requestspostpromo_code_searchstatus_codeintvalidatePhoneNumbervalidateEmailr.   	traceback
format_excstrGenerateDateFromStringgenerateDateDateOperationsreturnDateDifferenceInDaysuuiduuid4getget_buy_sell_rateformatr   get_booking_status_idaddr   facilityBookinginventoryBookingr   r   r   get_booking_guest_type_idpayment_personKeyErrorprintr   r   r   r   joinpayment_categoryadd_columnsprice_public_idr   payment_currencypayment_price
ValueError	TypeErrorr(   floatr   mathceilroundr   rV   rZ   rY   r   r   r   r:   r<   r   r    r   r"   r   vehicle_charge_category_costvehicle_charge_cost_currencyr   vehicle_charge_categorynewResidencyProofcommitr0   sumr)   rollback)^r   validation_listrd   organisationrU   r5   rr   school_details_listr~   er   rc   rb   
get_schoolr   org_details_listseven_days_agopromo_code_jsoncheck_promo_validityrg   promo_discountpromo_code_public_id	guest_sum
each_guestguest_numbersphone_validationvalid_emailrl   r   r   temp_date_diff	date_diffr{   r   r}   get_booking_exchange_ratebooking_buying_ratebooking_selling_rater   booking_activitybooking_infofacility_email_datainventory_email_datagatepass_guestget_guest_typer   guestguest_errorr   guest_key_errorr   address_key_errorr   country_key_errordetailr   new_noter   destination_errorgatepassguest_info_dataeach_gatepass_guestget_gatepass_feeno_valuegatepass_amountget_ex_ratebuyingsellingperson_discountperson_discount_reasonrj   r   gatepass_guest_errorgroupZschool_contactschool_booking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email_array
email_datarG   rJ   r2   r2   r3   add_new_group_booking^   s   










"



  
"











"


















rL  z/group/bookings/viewc              C   sF  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jtjd kj tjj! j" } | sg }|j#d t$d|idfS g }g }x| D ]}|j#|j qW x:| D ]0}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%j(tj)jtjd kjtj|jkj" }x@|D ]8}	i }
|	j(|
d< |	j)|
d< |j#|
 |j#t*|	j) qW ||d< t+||d< |j|d< |j|d< |j|d< |j|d< |j|d< |j#|  qW t$d|idfS d S )Nz.There are currently no bookings in the system.r5   r>   rq   rr   booking_type_idrs   rt   ru   rv   r   no_of_guestsrj   guest_totalbooking_statusbooking_status_idr:   r;   r<   r=   ),r&   r/   r?   r   r   r   rq   r{   r   rr   r7   r   rw   r   r   r   rs   rt   actual_booking_check_in_dateactual_booking_check_out_dateru   
checked_inchecked_outr:   r;   r<   rv   rT   r8   booking_status_namer@   rA   order_bydescrF   rD   r   r   r   r   booking_guest_type_namer   r   r  )return_bookingsrG   id_arrayeach_idrI   rJ   guest_arrayr  get_all_guestsr  
guest_datar2   r2   r3   view_all_group_bookings  sl    

















r`  z/group/bookings/view/pendingc           D   C   s0  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	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t jd kj$t	jt jd kj%t	jj& j' }|sg }|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(j+j,t(j+j-t(j+j.fk
rj } zW Y d d }~X nX x|D ]}	i }
|	j|
d< |	j"|
d< |	j|
d< |	j|
d< |	j|
d< |	j|
d< tjjt/j
t0t/j1t0j2kjt0j3j$t/j!d kj$t/j|	jkj4 }tjjt5j$t5j!d kj$t5j|	jkj4 }y2|r:|j3|
d< n|rL|j6|
d< n
|	j|
d< W n  t7k
rx   |	j|
d< Y nX 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$t<j|	jkj' }x@|D ]8}i }|j?|d< |j@|d< |j| |jtD|j@ qW ||
d< tE||
d< tjjtFj$tFj!d kj$tFj|	jkj4 }|r|	j!dkrd|
d< djGtHjId  |
d!< nd"|
d< djGtHjId# |
d!< n|	jdkrd$|
d< djGtHjId% |
d!< nX|	jdkrd&|
d< d'jGtHjId( |
d!< n,|	j!dkr<d|
d< djGtHjId  |
d!< n |	j#d)kr^djGtHjId* |
d!< n|	j#d+krdjGtHjId, |
d!< n|	j#d-krdjGtHjId. |
d!< n|	j#d/krdjGtHjId0 |
d!< nn|	j#d1krdjGtHjId2 |
d!< nL|	j#d3krdjGtHjId4 |
d!< n*|	j#d5kr*djGtHjId6 |
d!< nd7|
d!< |	j#|
d< |	j|
d8< yBx<|j d9 D ],}|d: |	jkrV|d; |
d<< |	j|
d=< qVW W nn tJk
r } zd>|
d<< |	j|
d=< W Y d d }~X n: tKtLfk
r } zd?|
d<< |	j|
d=< W Y d d }~X nX |	j|
d@< |	j|
dA< |j|
 qtW td9|idfS d S )BNr   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.rd   i  z.The start date cannot come after the end date.r5   rX   z<There are currently no pending group bookings in the system.r>   	users_ids)r   rq   rr   rM  rs   rt   rv   ru   r   rN  rj   rO  r6   	CancelledrP  z!background-color: {}; color: #fff	CANCELLEDbooking_colorz
To Invoice
TO_INVOICEzChecked OutCHECKED_OUTz
Checked Inz background-color:{}; color: #fff
CHECKED_INrp   UNCONFIRMED	Confirmed	CONFIRMEDzNo-ShowNO_SHOW	Abandoned	ABANDONEDUpdatedUPDATEDDepositDEPOSITComplimentaryCOMPLIMENTARYz&background-color: #fff; color: #000000rQ  r=   ri   	full_namesession_userr:   zN/AzNetwork Errorr;   r<   )Mr
   r   striprD   r   r   r&   r/   r?   r   r   r   rq   r{   r   rr   r7   r   rw   r   r   rs   rt   rR  rS  ru   rT  rU  r:   r;   r<   rv   rT   rA   r8   rV  r@   rW  rX  rF   r   r   get_user_from_aumra
exceptionsConnectionErrorTimeoutConnectTimeoutr    r   rW   r   school_namer   r   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r$   config
IndexErrorAttributeErrorUnboundLocalError)rd   r  r5   rG   rZ  r[  r\  return_userconnection_errorrI   rJ   check_school_bookingcheck_org_bookingr]  r  r^  r  r_  check_to_invoiceuser
user_errornetwork_related_errorsr2   r2   r3   view_all_pending_group_bookings{  s<   


















r  z/group/bookings/view/approvedc              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jtjd kjtjt dk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&j)tj*jtjd kjtj|jkj# }x@|D ]8}	i }
|	j)|
d< |	j*|
d< |j$|
 |j$t+|	j* qW ||d< t,||d< |j|d< |j|d< yBx<t-j. d D ],}|d |jkr$|d |d< |j|d< q$W W nn t/k
r } zd|d< |j|d< W Y d d }~X n: t0t1f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 )Nri  z.There are currently no bookings in the system.r5   r>   rq   rr   rM  rs   rt   ru   rv   r   rN  rj   rO  rP  rQ  r=   ri   rt  ru  r:   zN/AzNetwork Errorr;   r<   )2r&   r/   r?   r   r   r   rq   r{   r   rr   r7   r   rw   r   r   r   rs   rt   rR  rS  ru   rT  rU  r:   r;   r<   rv   rT   r8   rV  r@   rA   r   rW  rX  rF   rD   r   r   r   r   rY  r   r   r  r  r   r~  r  r  )rZ  rG   r[  r\  rI   rJ   r]  r  r^  r  r_  r  r  r  r2   r2   r3    view_all_approved_group_bookingsT  s    
















r  z/group/bookings/modifyPATCHc        l      C   s`  ddddddddddd	id
ddg} t tj| }tjd d rjd}d}dddddddddg}|t tjd | }y tjd d jdd j }W n& tk
r } z
d }W Y d d }~X nX y tjd d jdd j }W n( tk
r } z
d}W Y d d }~X nX tjd d }tjd d j }	tjj	t
jt
jd kjt
jtjd d kj }
|
j}nd}d}ddddddddddd id!d"ddd#ig}|t tj| }ytjd  jdd j }W n tk
r   d }Y nX ytjd  jdd j }W n tk
r    d}Y nX tjd# }tjd! j }	d }|rTt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j	tjtjtjd kj }|sg }|jd' td(|id)fS |jtjd* kr,g }|jd+ td(|id%fS |j}|j}|j }|	}ytjd, }W n tk
rj   d }Y nX t!|}|d r|d }n"g }|j|d  td(|id%fS t"|	}|sg }|jd- td(|id%fS yt#|	| W n< tk
r  } zt$j% }tt&||d.d%fS d }~X nX ytjd/ }W n tk
rJ   d }Y nX |ryvtj't(d/|id0}|j)d1krtd(|j d( id%fS |j)d1kr|}t*|j d2 d d3 } |j d2 d d4 }!W n0 tk
r   g }|jd5 td(|id%fS X nd }d } d }!tjj	t+jt+j,t-d6kjt+j.|kj }"|"j/}#tjj	t0jt0j1|#kjt0j,t-d6kj2 }$x"|$D ]}%t-d6|%_,tj |%_3qlW tjj	t4jt4j1|#kjt4j,t-d6kj2 }&x"|&D ]}'t-d6|'_,tj |'_3qW tjj	t5jt5j1|#kjt5j,t-d6kj2 }(x"|(D ]})t-d6|)_,tj |)_3qW tjj	t6jt6j.|kjt6j,t-d6kj2 }*x"|*D ]}+t-d6|+_,tj |+_3q\W tjj	t7jt7j.|kjt7j,t-d6kj2 },x"|,D ]}-t-d6|-_,tj |-_3qW g }.g }/x"tjd7 D ]}0|.j|0d8  qW tjj	t8jt8j.|kjt8jd kjt8j,t-d6kjt8j,t-d9kj2 }1x|1D ]}2|/j|2j9 qDW xJ|/D ]B}3|3|.krpn0tjj	t8jt8j.|kj }4t-d6|4_,tj |4_3q`W g }5g }6x"tjd: D ]}7|5j|7d8  qW tjj	t8jt8j.|kjt8jd kjt8j:dkjt8j,t-d6kjt8j,t-d9kj2 }8x|8D ]}9|6j|9j9 q,W xJ|6D ]B}:|:|5krXn0tjj	t8jt8j9|:kj };t-d6|;_,tj |;_3qHW g }<g }=x"tjd; D ]}>|<j|>d<  qW tjj	t;jt;j.|kjt;jd kjt;j,t-d6kjt;j,t-d9kj2 }?x|?D ]}@|=j|@j< 	qW xJ|=D ]B}A|A|<k	r4n0tjj	t;jt;j<|Akj }Bt-d6|B_,tj |B_3	q$W t-d6|"_,tj |"_3xtjd= D ]}Ctjj	t=jt=jd kjt=j>|Cd> kj }Dyt*|Cd? }EW n tk
	r   d}EY nX t7t&t?j@ |tA|DjBj |Etjd
 tj d@}FtjjC|F 	qW t6t&t?j@ ||||	|tjd
 tj dA}GtjjC|G ytjdB }HW n( tDk

r }I z
d }HW Y d d }I~IX nX t&t?j@ }Jt+|J||d | |H|t&t?j@ d dC |dtjd tjd tjd* dtjd
 tj dD}KtjjC|K xtjd= D ]}Ltjj	tEjFt=tEjGt=j>kjHtEjItEjJtEjGtEjKtEjLt=jBjtEjJ|LdE kjtEjG|Ld> kj }M|MjL}K|MjK}NtMtjd* |MjK|K}OtjtNjO|MjK}Py,|Pj d2 d dF }Q|Pj d2 d dG }RW n tk
r   d}Qd}RY nX | r | }Sn,ytP|LdH }SW n tk
r*   d}SY nX | r8|}Tn(y|LdI }TW n tk
r^   d }TY nX yt*|Ld? }UW n tk
r   d}UY nX t4t&t?j@ |J|Ld> |U|S|LdJ tQjRtS|OdK|LdE |tjd* tS|K|N|Qtjd
 tj dL}CtjjC|C qW t5t&t?j@ |J|||	|tjd
 tj dM}VtjjC|V xtjdN D ]}Wtjj	tTjtTjd kjtTjU|WdO kj }Xy
|XjV}YW n, tWtXfk
r }Z z
d}YW Y d d }Z~ZX nX tMtjd* |XjY|Y}[tjtNjO|XjY}Py,|Pj d2 d dF }Q|Pj d2 d dG }RW n tk
r   d}Qd}RY nX | r$| }\n,ytP|WdP }\W n tk
rN   d}\Y nX |r\|}]n(y|WdQ }]W n tk
r   d }]Y nX yt*|WdN }^W n tk
r   d}^Y nX t0t&t?j@ |J|WdO |^tS|[tjd* ||\|]tS|Y|XjY|Qtjd
 tj dR}_tjjC|_ q<W i }`||`d< ||`dS< ||`dT< ||`dU< g }aytZtj|`|addV W nD tk
r } z&t[j\ }bt$j% }tt&||d.d%fS d }~X nX g }cyt]tj|`|cddV W nD tk
r } z&t[j\ }bt$j% }tt&||d.d%fS d }~X nX tjtNjOtjd* }d|dj d2 d dF }e|dj d2 d dG }f|d | |_ tjd* |_|e|_^|f|__tjd |_`tjd |_at-d6|_,tj |_3tbt&t?j@ |dWtjd
 tj dX}gtjjC|g yztjdY r(tjj	tcjtcjd kjtcj.|kjdtetfj2 }hx|hD ]}id|i_tj |i_3qW tgtjdY |tjd
  W n$ tk
rN } zW Y d d }~X nX tjdZ rtht&t?j@ |tjdZ tjd
 tj d[}jtjjC|j y|tjji  tjt |ri }kd\| d] |kd^< |g|kd_< d`|kda< ||kdb< ||kdc< ||kd< tk|k g }|jdd td(|id1fS  tk
rZ   tjjl  tjt t$j% }g }|jde t||d.d%fS X d S )fNr{   z
Booking ID)rP   rQ   rR   zCheck-in daterS   zCheck-out daterP   rT   r:   z
session IDrU   rV   FTzPrimary contact namerY   zPrimary contact phonerZ   zPrimary contact email addressr[   r   r6   r\   rW   r^   zOrganisation namer_   zOrganisation email addressr`   zOrganisation typera   rb   zEmail addressrc   rd   i  z%Y-%m-%dz*The selected booking is not in the system.r5   i  currency_idzJThe updated booking currency does not match the original booking currency.	send_mailz&The email address provided is invalid.)r5   rl   rg   )r   r>   r=   rh   ri   zhThere was an issue getting the promo code details. Please try again or leave the promo code field blank.rn  old_facilitiesfacility_booking_public_idrb  old_external_facilitiesold_inventoryinventory_booking_public_idrj   r   rk   )r   r{   r   r   r:   r;   )r   r{   r~   r   r   r   r:   r;   r   rm   )r   r   r   r   r   r   r{   r   r   r   r   r   r:   r;   r   rn   ro   r   r   payment_person_discount_reasonr   )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   discount_reason)r   r   r   r   r   r   r   r   r   r   r   r   r:   r;   r}   r~   r   )r  zBooking updated)rz   r{   r|   r:   r;   r   r   )r   r{   r   r:   r;   zBooking ID #z Updater   r   z$reservations@olpejetaconservancy.orgr   rv   done_byz!Successfully updated the booking.z@There was an error updating the booking. Please try again later.)mr   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   get_latest_exchange_rater   rq   rD   rT   rv   ru   r   r   r.   r   r   r   r   r   r   r   r   rw   r   r{   r   r   r   rF   r<   r   r   r   r   r   r  external_facilityr   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   sysexc_infor   rx   ry   rs   rt   r   ResidencyProofoptions	FromCachedb_cacher	  r   r
  r0   send_booking_update_emailr  )lr  rd   r  rU   r  r~   r  r   rc   rb   r  r   r  r   r   r   r  r  exchange_rate_datareturn_bookingr5   r{   r}   ru   recipient_email
send_emailr  r  rl   r  r  rg   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'  r   r(  r-  r   r/  r   r0  r2  r3  r   r5  r6  r7  r8  r9  r:  rj   r>  rA  rB  rC  r4  rD  rE  rF  r   rG  r#  r$  error_tupler%  r  r   r!  r"  residecy_proof_dbsingle_proofr.  rK  r2   r2   r3   change_group_booking_details  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@   rA   rV  rF   r   )status_name	status_idrI   rQ  r2   r2   r3   r   X  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@   rA   rY  rF   r   )guest_type_nametype_idrI   booking_guest_type_idr2   r2   r3   r   d  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.groupr   database.inventoryr   database.invoicer   !database.mandatory_payment_pricesr   database.mandatory_paymentsr   database.schoolr   Zdatabase.school_contactr   database.school_bookingr    database.transactionr!   database.vehicler"   functions.booking_snippetsfunctions.currency_operatorsfunctions.date_operatorsfunctions.validationroutesr$   r%   r&   r'   routes.bookings_urlsr(   r)   routes.seed_functionsr*   r+   r,   r-   routes.booking_banr.   	variablesr0   routerK   rL  r`  r  r  r  r   r   r2   r2   r2   r3   <module>   st   $(     C_ Za     (