3
2i                @   s  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mZmZ d dl	Z	d dl
Z
d dlZd dlmZmZmZmZmZmZmZmZ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&lZm[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 d0lnmoZo d d1lpT d d1lqT d d1lrT d d1lsT d d2ltmuZumvZvmwZwmxZxmyZymzZzm{Z{m|Z| d d3l}m~Z~ d d4lmZmZmZmZ d d1lT d d5l}mZ d d6lmZ d d7lmZ d8d9 Zd:d; Zd<d= Zd>d? Zdd@dAZdBdC ZdDdE ZevjdFdGdH ZevjdIdJdK ZevjdLdMdN ZevjdOdPgdQdRdS ZevjdTdPgdQdUdV ZevjdWdXdY ZevjdZd[d\ Zevjd]d^d_ Zevjd`dadb Zevjdcddde Zevjdfdgdh Zevjdidjdk Zevjdldmdn Zevjdodpdq ZevjdrdPgdQdsdt ZevjdudPgdQdvdw ZevjdxdPgdQdydz Zevjd{dPgdQd|d} Zevjd~dd Zevjddd Zevjddd Zevjddd Zevjddd Zevjddd Zevjddd Zevjddd ZevjddgdQdd Zevjddd ZevjddgdQdd ZevjddgdQdd ZevjddgdQdd ZevjddgdQdd ZevjddgdQdd ZevjddgdQdd ZevjddgdQdd ZevjddPgdQdd Zevjde{dd Zevjddd ZevjddPgdQdd Zdd Zdd ZevjdddĄ ZevjdŃddǄ ZdS )    N)datedatetime	timedelta)	FlaskResponsejsonjsonifyredirectrender_templaterequesturl_formake_response)BookingActivity)Detail)Donation)	GuestType)BookingGuest)BookingPayment)	PromoCode)BookingStatus)Ticket)BookingType)Booking)Note)CheckInVehicle)ContactList)
CreditNote)CreditNoteFacility)CreditNoteGuest)CreditNoteInventory)CreditNoteVehicle)Destination)Facility)Gate)Gatepass)GatepassDetail)GatepassGuest)GatepassVehicle)Group)	Inventory)Invoice)MandatoryPaymentPrices)	Mandatory)Member)Modify)Partner)PaymentMethod)SalesforceData)School)SchoolBooking)Sun)Transaction)Vehicle)VehicleDetail)	EntryMode)BookingAccount)AsyncRequests)*)	FromCacheappbookings_loggerdbdb_cachereceipt_print_optionssessionTrackingticketGenerator)send_single_visit_salesforce)BookingGuestTypesSeedBookingStatusSeedBookingTypeSeedMandatoryPaymentsSeed)send_booking_info_to_salesforce)check_booking_ban)add_booking_userc             C   s   | j j  d S )N)sessionclose)self rO   ,/booking_service/app/routes/bookings_urls.pyrM   K   s    rM   c       	      C   s   t |d}| |krt|S | |kr|dkrn| |d}tjt|d}|j d d d }t|t| }t|S | dkrt|t| }t|S d S )N   z$162fface-f5f1-41de-913b-d2bb784dda3a)currency_idr   )r   datar   
buy_amount)roundfloatrequestspostget_currency_rate_at_timer   )	currency_tocurrency_fromamountbuying_rateselling_rater   	post_data	get_ratesvaluerO   rO   rP   convertAmountO   s    

rb   c             C   s\   | |krt |S | |krX|dkr8t |t | }t |S | dkrXt |t | }t |S dS )z
	Different from currencyHandler in that it does not get the current buying/selling rate,
	but works with buying/selling rate that's already been saved.
	z$162fface-f5f1-41de-913b-d2bb784dda3aN)rV   )
currencyTocurrencyFromr\   Z
buyingRateZsellingRatera   rO   rO   rP   currencyPostProcessorf   s    re   c             C   s  | |kr|S | |kr|dkrt jtj| }y@|j d d d }|j d d d }t|t| }t|S  tk
r   d}t|S X n8| dkrt jtj|}y@|j d d d }|j d d d }t|t| }t|S  tk
r   d}t|S X nt jtj|}t jtj| }y||j d d d }	|j d d d }
|j d d d }|j d d d }t|t|
 }t|t| }|}t|S  tk
r   d}t|S X d S )Nz$162fface-f5f1-41de-913b-d2bb784dda3arS   r   currency_buy_amountcurrency_sell_amount)rW   getget_buy_sell_rateformatr   rV   	Exception)rc   rd   r\   get_ratebuyingsellingra   get_from_rateget_to_ratefrom_buyingfrom_selling	to_buying
to_selling	temp_fromtemp_torO   rO   rP   currencyHandlerx   sT    

rw   c             C   s0  g }x| d D ]}| d }i }| d |d< | d |d< | d |d< | d |d< | d |d< | d |d< | d	 |d	< | d
 |d
< | d d | d  |d< t j jd|d< tjtjd d}t|}t|}| d }	tdt	d|| d | d | d | d d}
t
||	||
}|rqyt|jjjj|j d}|jt| tttj | d d| d | d t j d}tjj| tjj  tt W q tk
r } z.tj }tj }tdt| d | W Y d d }~X qX qW tjjt j!t j"d kj# }|r$x"|D ]}t|}t|j$}d}	tdt	d || d | d | d | d d}
t
||	||
}yv|jjjj|j d}|jt| tttj | d d|j$ d | d t j d}tjj| tjj  tt W nL tk
r } z.tj }tj }td!t| d | W Y d d }~X nX qW t%d"|iS )#N	recipientsenderbooking_ref_code
booking_id
first_name	last_namecheck_in_datecheck_out_datenum_of_guestsnum_of_vehicles clientz%Ycopyright_yearSENDGRID_API_KEY)apikeysubjectz	text/htmlzbooking_confirmation.htmlinventory_infofacility_info
guest_infovehicle_info)rS   
activities
facilitiesguestsvehicles)request_bodyzNotification email sent to z from )booking_activity_public_idr{   booking_activity_description
session_id
created_atzUser email notification: z	. Trace: zReservation Detailszbooking_notification.htmlzGlobal contact notification: message)&r   nowstrftimesendgridSendGridAPIClientr=   configEmailContentr
   Mailr   mailsendrX   rh   appendstrr   uuiduuid4r?   rL   addcommitrM   rk   sysexc_info	traceback
format_excqueryr   filterdeletion_markerallcontact_emailr   )
email_datapartneremail_responserx   ry   booking_detailssg
from_emailto_emailr   contentr   responsebooking_activityeerror_tupletraceZget_contactsZsingle_emailZemail_sourceZemail_destinationZ	info_mailresprO   rO   rP   send_booking_email   s    

,


.r   c             C   s<  g }x0| d D ]"}| d }i }| d |d< | d |d< t j jd|d< t j jd|d	< tjtjd
 d}t|}t|}| d }tdt	d|d}	t
||||	}
yt|jjjj|
j d}|jt| tttj | d d| d | d t j d}tjj| tjj  tt W q tk
r2   Y qX qW d S )Nrx   ry   rz   done_byr   z%B %Ytodayz%Yr   r   )r   r   z	text/htmlzbooking_cancellation.html)rS   )r   r{   z#Booking cancellation email sent to z from )r   r{   r   r   r   )r   r   r   r   r   r=   r   r   r   r
   r   r   r   r   rX   rh   r   r   r   r   r   r?   rL   r   r   rM   rk   )r   r   rx   ry   r   r   r   r   r   r   r   r   r   rO   rO   rP   send_booking_cancellation_email   s>    


r   c             C   sH  g }x<| d D ].}| d }i }| d |d< | d |d< | d |d< t j jd|d< t j jd	|d
< tjtjd d}t|}t|}| d }tdt	d|d}	t
||||	}
yt|jjjj|
j d}|jt| tttj | d d| d | d t j d}tjj| tjj  tt W q tk
r>   Y qX qW d S )Nrx   ry   r{   rz   r   r   z%B %Yr   z%Yr   r   )r   r   z	text/htmlzbooking_update.html)rS   )r   zBooking update email sent to z from )r   r{   r   r   r   )r   r   r   r   r   r=   r   r   r   r
   r   r   r   r   rX   rh   r   r   r   r   r   r?   rL   r   r   rM   rk   )r   r   rx   ry   r   r   r   r   r   r   r   r   r   rO   rO   rP   send_booking_update_emailM  s>    

r   z/bookings/back/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.r         booking_type_public_idbooking_type_namebooking_type_descriptionr   r   
updated_atrS   )r?   rL   r   r   r   r   r   countrG   "seed_default_booking_types_methodsr   r   booking_type_backr   r   r   r   r   r   )outputreturn_booking_typessinglereturn_datarO   rO   rP   view_all_back_booking_types}  s2    







r   z/bookings/public/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 )Nr   r   z-There are currently no booking in the system.r   r   r   r   r   r   r   r   r   rS   )r?   rL   r   r   r   r   r   r   rG   r   r   r   booking_type_publicr   r   r   r   r   r   )r   r   r   r   rO   rO   rP   view_all_public_booking_types  s2    







r   z!/bookings/member/view/<member_id>c              C   s  t jjtjjtj| kj }t jjtjtj	j
|jtjj j }|sjg }|jd td|idfS g }g }x|D ]}|j|j qxW ytjtd|id}W n4 tjjtjjtjjfk
r } zW Y d d }~X nX tj j}d}	x|D ]}
|
j}|j j}||kr|	d7 }	i }|
j	|d< |
jj|d	< |
j|d
< |
j|d< |
j|d< |
j|d< |
j |d< i }t!||
j	 |d |d< |d |d< |d |d< |d |d< |d |d< |d |d< |d |d< |d |d< t jjt"jt"j#d kjt"j|
j	kj$ }|rL|
j#dkr,d|d< dj%t&j'd |d< nd |d< dj%t&j'd! |d< n|
j(dkrxd"|d< dj%t&j'd# |d< nh|
j)dkrd$|d< d%j%t&j'd& |d< n<|
j#dkrd|d< dj%t&j'd |d< n|
j*j+d'krdj%t&j'd( |d< n|
j*j+d)krdj%t&j'd* |d< n|
j*j+d+kr<dj%t&j'd, |d< n|
j*j+d-kr`dj%t&j'd. |d< nt|
j*j+d/krdj%t&j'd0 |d< nP|
j*j+d1krdj%t&j'd2 |d< n,|
j*j+d3krdj%t&j'd4 |d< nd5|d< |
j*j+|d< |
j,|d6< |
jryBx<|j- d7 D ],}|d8 |
jkr|d9 |d:< |
j|d;< qW W nr t.t/fk
rn } 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 nd<|d:< |
j|d;< |
j2|d>< |
j3|d?< |	|d@< |j| qW td7|idfS d S )ANz.There are currently no bookings in the system.r   r   	users_ids)r   r   r   booking_public_idbooking_typebooking_type_idbooking_check_in_datebooking_check_out_datebooking_done_byrz   r   guest_totalr   vehicle_totalfacility_bookingsaccommodationsinventory_bookingsr   booking_currency_namebooking_currency
total_costbooking_total	Cancelledbooking_statusz!background-color: {}; color: #fff	CANCELLEDbooking_colorz
To Invoice
TO_INVOICEzChecked OutCHECKED_OUTz
Checked Inz background-color:{}; color: #fff
CHECKED_INUnconfirmedUNCONFIRMED	Confirmed	CONFIRMEDzNo-ShowNO_SHOW	Abandoned	ABANDONEDUpdatedUPDATEDDepositDEPOSITComplimentaryCOMPLIMENTARYz&background-color: #fff; color: #000000booking_status_idrS   	public_id	full_namesession_userr   zN/AzNetwork Errorr   r   Zvisit_number)4r?   rL   r   r-   r{   r   	member_idr   r   r   in_order_bydescr   r   r   rW   rX   get_user_from_aumra
exceptionsConnectionErrorTimeoutConnectTimeoutr   r   yearr   b_typer   r   r   r   rz   bookingTotalr*   r   firstrj   r=   r   checked_out
checked_inb_statusbooking_status_namestatusr   
IndexErrorKeyErrorAttributeErrorUnboundLocalErrorr   r   )r   get_member_bookingsreturn_bookingsr   id_arrayeach_idreturn_userconnection_errorZcurrent_yearcounterr   
visit_dateZ
visit_yearr   booking_infocheck_to_invoiceuser
user_errornetwork_related_errorsrO   rO   rP   view_single_member_bookings  s    















r  z/bookings/newPOST)methodsc        r   T  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t
jdkj dkrhtj  tj jd} ddddd	dd
ddddig}ttj|}y&d}yttjd }W n tk
r   d}Y nX tjd d rNtjd d j }tjd d }tjd d j }tjd d }ddddddddddddg}	nhtjd d j }tjd d j }tjd d j }tjd d }dddddddd ddd!dg}	|ttjd |	 }W n tk
rX   tjd j }tjd" j }tjd j }tjd# }tjd }d}dd$dd"d%ddd&dd#d'dg}
|ttj|
 }Y nX |rptd(|id)fS tj td*d+ jd}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|d0}|jd1kr8td-|j d- id)fS |jd1krh|j d2 d }|j d2 d d3 }W n0 tk
r   g }|jd4 td-|id)fS X nd }d }d }d }g }xJtjd5 D ]<}yt |d6 }W n tk
r   d}Y nX |j| qW t!|}|d r|d7 }n"g }|j|d7  td-|id)fS t"|}|shg }|jd8 td-|id)fS yt#|| W n< tk
r } zt$j% }tt&||d9d)fS d }~X nX t'j(tjd }t'j(tjd
 }t)j*||}|dkrd7}n|dkr|}t&t+j, }t&t+j, } t&t+j, d d: }!|d;kr>t-d<}"nt-d=}"ytjd> }#W n tk
rn   d }#Y nX tj.t/j0tjd? }$|$j d2 d d@ }%|$j d2 d dA }&t1||tjd tjd
 |dB | |!|"tjd? |%|&|#tj tj dC}'t jj2|' t3t&t+j, |dD|#tj dE}(t jj2|( g })i }*||*dF< |!|*dG< ||*d< ||*d"< yt4tj|*|)dH|dI W n< tk
r } zt$j% }tt&||d9d)fS d }~X nX g }+yt5tj|*|+dH|dI W n< tk
r } zt$j% }tt&||d9d)fS d }~X nX yxtjd5 D ]},t jjt6jt6jd kjt6j7|,dJ kj8 }-yt |,d6 }.W n tk
rh   d}.Y nX t9t&t+j, |t:|-j;j |.dK}/t jj2|/ qW W n4 t<k
r }0 zt=dLt&|0  W Y d d }0~0X nX ytjdM }1W n( t<k
r }2 z
d }1W Y d d }2~2X nX ytjdN }3W n( t<k
rD }4 z
d }3W Y d d }4~4X nX y(tjd dO dP t&tjd dQ  }3W n( t<k
r }5 z
d }3W Y d d }5~5X nX ytjdR }6W n( t<k
r }7 z
d }6W Y d d }7~7X nX ytjdS dT }8W n( t<k
	r
 }9 z
d }8W Y d d }9~9X nX ytjdU }:W n( t<k
	rB }; z
d }:W Y d d };~;X nX ytjdV }<W n( t<k
	rz }= z
d }<W Y d d }=~=X nX ytjdW }>W n( t<k
	r }? z
d }>W Y d d }?~?X nX ytjdX }@W n( t<k
	r }A z
d }@W Y d d }A~AX nX ytjdY }BW n( t<k

r" }A z
d }BW Y d d }A~AX nX t>t&t+j, ||||||8|6|:|3|1|<|>|@|B|#tj tj dZ}Ct jj2|C ytjd[ }DW n tk

r   d }DY nX |D
rt?t&t+j, ||D|#tj d\}Et jj2|E y tjd] 
rtjd] }Fnd }FW n( t<k
r }G z
d }FW Y d d }G~GX nX t@| | |dB | |F|t&t+j, d d: |d7tjd tjd
 tjd? d7tj tj d^}Ht jj2|H g }Iyxtjd5 D ]}Jt jjtAjBt6tAjCt6j7kjDtAjEtAjFtAjCtAjGtAjHt6j;jtAjd kjtAjF|Jd_ kjtAjC|JdJ kj8 }Ky
|KjH}HW n, ttIfk
r, }L z
d}HW Y d d }L~LX nX tJtjd? |KjG|H}Mtj.t/j0|KjG}Ny|Nj d2 d d@ }OW n tk
r   d7}OY nX |r|d` r|JdJ |da krt|db }P|dR }Qnd}Pd }Qnd}Pd }Qnl|r|}Pn,yt|Jdc }PW n tk
r
   d}PY nX |r|}Qn(y|Jdd }QW n tk
r>   d }QY nX yt |Jd6 }RW n tk
rj   d}RY nX tKt&t+j, | |JdJ |R|P|QtL|Mde|Jd_ |tjd? tL|H|KjG|Otj tj df},t jj2|, i }Syt |Jd6 }W n tk
r   d}Y nX |dkr|Kj;|Sdg< |Jd6 |Sdh< |Ij|S qW W n4 t<k
r^ }T zt=dLt&|T  W Y d d }T~TX nX tMt&t+j, | ||||tj tj di}Ut jj2|U g }Vg }Wy4x,tjdj D ]}Xt jjtNjtNjd kjtNjO|Xdk kj8 }Yy
|YjP}ZW n, ttIfk
r }L z
d}ZW Y d d }L~LX nX tJtjd? |YjQ|Z}[tj.t/j0|YjQ}Ny|Nj d2 d d@ }OW n tk
rp   d7}OY nX |r~|}\n,yt|Xdl }\W n tk
r   d}\Y nX |r|}]n(y|Xdd }]W n tk
r   d }]Y nX yt |Xdj }^W n tk
r   d}^Y nX tRt&t+j, | |Xdk |^tL|[tjd? ||\|]tL|Z|YjQ|Otj tj dm}_i }`yt |Xdj }aW n tk
r   d}aY nX |adkr|YjS|`dn< |Xdj |`do< |Wj|` |Vjt |Xdj  t jj2|_ qW W n4 t<k
r }b zt=dpt&|b  W Y d d }b~bX nX yztjd }c|cd r4|cdq }dd}e|cdj }fn|cdr }d|cds }e|cdt }ftTt&t+j, ||cd |d|e|ftjd> du}gt jj2|g W n tk
r   Y nX y"tjdv rtUtjdv ||# W n$ tk
r } zW Y d d }~X nX ytjdw rtj.t/j0tjdw d }h|hj d2 d d@ }i|hj d2 d dA }j||||dxtjdw dy dztjdw d{ d|d}d~|:d|8tjdw d ||!d}ktjtV|kd0}ltW|lj d |tjdw d tjdw d{ tjdw dy |i|jtj d}mt jj2|m W n tk
r   Y nX ybt jjX  tYt  |g}ni }o|n|od< d|od< d|! d |od< tj jd|od< |!|od< ||od< ||od"< |jd|od< |jd|od< tZ||od< tZ|V|odt< |dB | |od< ||odF< |)|od< |+|od< |I|od< |W|od< yt[|o W n$ tk
r } zW Y d d }~X nX |r tjt\j0|d3 t&|#d|dd0 g }p|pjd i }q||qd< ||qd< t|p|qddfS  tk
r } z>t=| t jj]  tYt  g }p|pjd t|pt&|dd)fS d }~X nX d S )Nz$3b5376e0-a4dc-476e-aebc-6280b44b756ar   Z2df20a96z%Y-%m-%dtypezBooking type)fieldaliascheck_inzCheck-in date	check_outzCheck-out dater"  currencyr   Zentry_discountmemberZ	corporateZcompany_nameZmemberIDemailphone_numberzCorporate member company nameZcontact_person_namezCorporate member contact personzCorporate member email addresszCorporate member phone numberr|   surname
tel_numberzMember first namezMember last namezMember email addresszMember phone numberr}   phonez
First namez	Last namezEmail addresszPhone numbermessagesi     )daysz8The check-out date cannot come before the check-in date.r   
promo_code)r0  r~   r   )r   r   rS   r   zhThere was an issue getting the promo code details. Please try again or leave the promo code field blank.r   payment_guestsr   z&The email address provided is invalid.)r   r   
   GB601X10r   r   r   rR   rf   rg   r   )r   r   r   r   r   rz   r  r&  currency_buying_rate_at_timecurrency_selling_rate_at_timer   r   r   zBooking created)r   r{   r   r   r   r{   booking_refT)rR   promo_code_detailspayment_public_id)booking_guest_public_idr{   
guest_typeguest_countzThere was an error getting: additional_noteaddressZpostal_addressz - Zpostal_codecodecountry_detailsnamecity
entry_modeentry_pointmode_registrationkra_pin_number)booking_details_public_idr{   r|   r}   email_addressr)  countrycountry_coderA  r=  r<  rB  rC  rD  rE  r   r   r   note)booking_notes_public_idr{   rJ  r   r   destination)gatepass_public_idgatepass_dategatepass_done_byrL  gatepass_phone_numbergatepass_ref_coder{   booking
start_dateend_dategatepass_currencygatepass_payment_statusr   r   payment_scheduleZconservancy_feeZconservancy_fee_arraypercentage_offpayment_person_discountreasonrQ   )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_nightsrU  gatepass_guest_cost_at_timegatepass_guest_currency_at_timegatepass_guest_rate_at_timer   r   Zguest_categoryZguest_number)gatepass_details_public_idr\  r|   r}   rG  r)  r   r   r   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   Zvehicle_categoryZvehicle_numberz.There was an error getting the following key: Z
passengersZnum_of_personsnum_of_childrenr   )member_booking_public_idr{   r   num_of_peopleru  r   r   proof_of_residencydonationZ	n4383h334r\   Zenjkr4k4Zdonation_toZ74a27ee4ZFemalezMs.z
1900-01-01)r|   Zsur_namer(  r)  	frequencyr\   payment_methodZpayment_optionZ	anonymityZgendertitlerA  ZdobrH  r&  r   rz   Zdonation_ref_code)donation_public_idr{   donation_currencydonation_causedonation_amountcurrency_buying_amountcurrency_selling_amountr   rx   z$reservations@olpejetaconservancy.orgry   zBooking Notification (#)r   z%B %Yr   rz   z%A, %d %b %Yr~   r   r   r   r   r   r   r   1)r   numberrR  z?The booking has been made. Please proceed to make your payment.r   )r   rS      zFThere was an error while creating the booking. Please try again later.)r   error)^r?   rL   r   r   r   r   booking_status_public_idr   rF   seed_default_booking_statusr   booking_guest_type_public_idrE   Z(seed_default_booking_guest_types_methodsr   r   r   fieldValidationr   r   rV   
ValueErrorr|  lowerrk   r   r   r   rW   rX   promo_code_searchstatus_codeintvalidatePhoneNumbervalidateEmailrJ   r   r   r   GenerateDateFromStringgenerateDateDateOperationsreturnDateDifferenceInDaysr   r   get_booking_status_idrh   ri   rj   r   r   r   facilityBookinginventoryBookingr,   r8  r  r   get_booking_guest_type_idpayment_personr  printr   r   r$   r+   joinpayment_categoryadd_columnsprice_public_idrW  payment_currencypayment_price	TypeErrorrw   r&   rU   r%   r6   rh  vehicle_charge_category_costvehicle_charge_cost_currencyr'   vehicle_charge_categoryr-   newResidencyProofpost_donationr   r   rM   sumr   use_promo_coderollback)rr   validation_listr-  r   Zmember_entry_discountr|   r}   r(  r,  member_details_listdetails_listZseven_days_agor   promo_code_jsonr_   check_promo_validityZpromo_code_datapromo_code_public_idpromo_discountr0  	guest_sum
each_guestZguest_numbersphone_validationvalid_emailr   r   r~   r   temp_date_diff	date_diffr{   r\  r6  r  r   get_booking_exchange_ratebooking_buying_ratebooking_selling_raterR  r   facility_email_datar  inventory_email_datagatepass_guestget_guest_typer;  guestguest_errorr<  Zguest_key_errorr=  address_key_errorZmember_address_key_errorrI  country_code_key_errorrH  country_key_errorrA  city_key_errorrB  entry_mode_errorrC  entry_point_errorrD  mode_registration_errorrE  detailrJ  new_noterL  destination_errorgatepassZguest_info_dataeach_gatepass_guestget_gatepass_feeno_valuegatepass_amountget_ex_raterm   person_discountperson_discount_reasonr   r   Zgatepass_guest_errorgatepass_detailvehicle_sumZvehicle_info_dataeach_vehicleget_costvehiclevehicle_feevehicle_discountvehicle_discount_reasonr   gatepass_vehicler   Zvehicle_numbersZvehicle_key_errorr'  rw  ru  r   member_bookingZget_exchange_rater]   r^   	json_dataZdonation_requestry  Zemail_arrayr   r   r   rO   rO   rP   add_new_bookingj  s   










"






""

"















"















7

r  z/bookings/notes/updatec           (   C   s`  g } y t jjddj s"| jd W n tk
rB   | jd Y nX yt jjds\| jd W n tk
r|   | jd Y nX | rdg}t|| d	d
fS t jd }t jd }t jjdd}t jjdd}d}|rytj|d}W n( t	k
r   dg}td|idfS X yx|D ]}d|kr(q|d j
 }tjjtjtjjdtjtjddjd|jdd dtjjd}	|dk	r|	jtj|k}	|r|	jtj|k}	|	j }
x$|
D ]}||_||_tj |_qW qW tjj  tt dg}td|idfS  tk
rZ } z6t| tjj   tt dg}t|t!|dd
fS d}~X nX dS )zZBulk update notes with matching vehicle registrations, setting booking_id and vehicle_reg.r{    zBooking ID is empty or missing.zBooking ID is missing.r   z"Vehicles list is empty or missing.zVehicles is missing.z5You appear to be missing some data. Please try again.)r   r-  i  ranger_noteNcreated_sincez%Y-%m-%d %H:%M:%Sz8Invalid format for created_since. Use %Y-%m-%d %H:%M:%S.r   i  	reg_plater   %zNotes updated successfully.r   z>There was an error updating the notes. Please try again later.)r   r  )"r   r   rh   stripr   r  r   r   strptimer  upperr?   rL   r   r   r   r   is_funcreplacevehicle_regiliker{   r  r   r   r   r   r   rM   rk   r  r  r   )r-  r   r{   r   r  Zcreated_since_strr  r  r  r   notes_to_updaterJ  r   rO   rO   rP   update_note  sj    




$



r  z/bookings/viewc           P   C   s
  yt tjd } W n tk
r*   d} Y nX yt tjd }W n tk
rV   d}Y nX | dkrtjjttj	t
jjttjtjkjttjtjkjt
t
jtjkjtjj jttjdj }n.tjjtjtjj jttj| |dj}|sg }|jd td	|id
fS g }g }| dkrVdd |D }dd |D }dd |D }n |}d gt| }d gt| }x|D ]}	|j|	j q|W tj  }
y|
j!t"d|id}W n6 tj#j$tj#j%tj#j&fk
r } zW Y d d }~X nX xt'|D ]\}}i }|j|d< |j(j)|d< |j*|d< |j+|d< |j,|d< |j-|d< |j.|
|d< |j/|
|d< tjjt0jt1t0j2t1j3kj4t1j5j6t0j|jkj7 }tjjt8j6t8j|jkj7 }y2|r|j5|d< n|r|j9|d< n
|j:|d< W n  tk
r   |j:|d< Y nX yFtjjt
j6t
j|jkj6t
j;t<dkj7 }|j=|d< |j>|d< W n& t?k
rp   d|d< d|d< Y nX |j@|d< i }tA||j |d |d< |d  |d < |d! |d!< |d" |d"< |d |d#< |d |d$< |d% |d&< |d' |d(< |d) d* |d*< |d) d+ |d,< |d) d- |d-< tjjtBj6tBjCd kj6tBj|jkj7 }|r|jCdkrvd.|d/< d0jDtEjFd1 |d2< nd3|d/< d0jDtEjFd4 |d2< n|jGdkrd5|d/< d0jDtEjFd6 |d2< n|jHdkrd7|d/< d8jDtEjFd9 |d2< nb|jCdkrd.|d/< d0jDtEjFd1 |d2< n6|jIjJd:kr@d0jDtEjFd; |d2< n|jIjJd<krdd0jDtEjFd= |d2< n|jIjJd>krd0jDtEjFd? |d2< n|jIjJd@krd0jDtEjFdA |d2< n|jIjJdkrd0jDtEjFdB |d2< nt|jIjJdCkrd0jDtEjFdD |d2< nP|jIjJdEkrd0jDtEjFdF |d2< n,|jIjJdGkr<d0jDtEjFdH |d2< ndI|d2< |jIjJ|d/< |j;|dJ< |jr:|jdKkrdL|dM< |j|dN< nyBx<|jK dO D ],}|dP |jkr|dQ |dM< |j|dN< qW W nr tLtMfk
r } zdR|dM< |j|dN< W Y d d }~X n: t?tNfk
r6 } zdS|dM< |j|dN< W Y d d }~X nX ndR|dM< |j|dN< |jO|dT< |jP|dU< | dkrx|| |dV< nDtjjtj	jttjtjkj6tj|jkj7 }|r|j	nd |dV< | dkr|| |dW< n4tjjt
jj6t
j|jkj7 }|r |jnd |dW< tjjtQj6tQjCd kj6tQj|jkjttj7 }|r|jR|dX< tS|jT}y |dY d |dY< |dZ |d[< W n& tk
r   d |dY< d |d[< Y nX nd |dX< d |dY< d |d[< |jU	r2|jUj7 }|	r tV|jW}y|dQ |d\< |d] |d^< W n& tk
	r   d_|d\< d_|d^< Y nX nd |d\< d |d^< nd |d\< d |d^< |jXdk	rVd`|da< |jXdbk	rjdc|da< |jXddk	r~dE|da< |jXdek	rd3|da< |jX	sdf|da< tjjtYj6tYjCd kj6tYj|jkj }|	rdg|dh< nd|dh< |j| qW tdO|id
fS d S )iNpager   itemsr2  r   d   Fz.There are currently no bookings in the system.r   r   c             S   s   g | ]}|d  qS )r   rO   ).0booking_tuplerO   rO   rP   
<listcomp>  s    z%view_all_bookings.<locals>.<listcomp>c             S   s   g | ]}|d  qS )r   rO   )r  r  rO   rO   rP   r    s    c             S   s   g | ]}|d  qS )rQ   rO   )r  r  rO   rO   rP   r    s    r   )r   r   r   r   r   r   rz   r   r   r   r   rG  r)  r  booking_ticketr   r   r   r   r   r   r   r   r   r   tax_breakdownvatcateringcatering_levy	after_taxr   r   z!background-color: {}; color: #fffr   r   z
To Invoicer   zChecked Outr   z
Checked Inz background-color:{}; color: #fffr   r   r   r   r   zNo-Showr   r   r   r   r   r   r   r   	Postponed	POSTPONEDz&background-color: #fff; color: #000000r   r  Publicr   r   rS   r   r   zN/AzNetwork Errorr   r   rL  rH  partner_booking_refpartner_typer@  partner_namemember_namelevelZmembership_levelZ	CorporatePaidbooking_payment_statusrQ   zIncomplete Payment      zNot PaidTcredit_note_issued)Zr  r   argsrk   r?   rL   r   r   r!   gatepass_destination_namer   rH  r  r$   r{   r   rL  gatepass_destination_public_idr   r   optionsr<   r@   limitr   paginater  r   r   lenr   rW   SessionrX   r   r   r  r  r  	enumerater  r   r   r   r   rz   return_facilitiesreturn_inventoryr3   r2   	school_idschool_public_idr  school_namer   r  r(   organisation_namer   r  r  rG  r)  r  ticketr  r*   r   rj   r=   r   r  r	  r
  r  r   r  r  r  r   r   r/   r  get_details_partner
partner_idmember_detailsget_details_memberr   payment_statusr   )r  r  r  r   rS   r  Zbooking_objectsZdestination_namesZ	countriesr  request_sessionr  r  ir   r   check_school_bookingcheck_org_bookingget_booking_detailsr  r  r  r  r  rL  Zcountry_detailget_partner_bookingpartner_infor   Zmember_infoget_credit_notesrO   rO   rP   view_all_bookings  s   


























r%  z/booking/cost/<booking_id>c             C   sp   g }i }y(t || dd |j| td|idfS  tk
rj } ztj }tt||ddfS d }~X nX d S )NT)	batchfilerS   r   )r  r   i  )r  r   r   rk   r   r   r   )r{   rS   r   r   r   rO   rO   rP   get_single_booking_cost  s    
r'  z /booking/total-cost/<booking_id>c             C   sl   g }i }y$t ||  |j| td|idfS  tk
rf } ztj }tt||ddfS d }~X nX d S )NrS   r   )r  r   i  )viewBookingsTotalr   r   rk   r   r   r   )r{   rS   r   r   r   rO   rO   rP   get_single_booking_total(  s    

r)  z/bookings/view/<booking_id>c       \      C   s  yt jjtjtjd kjtj| kj }|ri }t||  |d dkrt jjt	jt	jd kjt	j
d kjt	j| kj }|rd|_
t jj  W n tk
r   d }Y nX 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%jt	j| kj&t't(j) }|sng }|j*d t+d|idfS g }g }x|D ]}i }	|j|	d< |j$|	d< |j|	d	< |j|	d
< |j|	d< |j|	d< |j|	d< |jj,d|	d< |jj,d|	d< |j|	d< |j|	d< |j|	d< t-t.|j"d|	d< t-t.|j#d|	d< |jdkrJd|	d< n6|jdkr`d|	d< n |jdkrvd|	d< n
|j%|	d< t/j0t1j2|j!}
y|
j3 d d d |	d< W n tk
r   d|	d< Y nX |j!|	d< t jjt4jt4j|jkjt4jt5d kj }q~W |rt jjt6jt6j7|j8kjt6j9dkj }|ryF|j:|	d!< t jjt;j<jt;j=|j:kj&t't(j \|	d"< d#|	d$< W n. t>k
r   d |	d!< d |	d"< d%|	d$< Y nX nd |	d!< d |	d"< d%|	d$< |ry|j9|	d&< W n t>k
r   d|	d&< Y nX nd|	d&< t jjt?jt?j|jkjt?jt5d kj }|ri }|j@|d'< |jA|d(< |jB|d)< |jC|d*< |jD|d+< |jE|d,< |jF|d-< |jG}|rd#|d.< t jjtHjtHjd kjtHjI|jGkj }y|jJ|d/< |jI|d0< W n4 tk
r } zd|d/< d|d0< W Y d d }~X nX t jjtKjtKjd kjtKjL|jMkj }y|jN|d1< |jL|d2< W n4 tk
r } zd|d1< d|d2< W Y d d }~X nX |jO|d3< nd%|d.< |jP|d4< ndi }d|d'< d|d(< d|d)< d|d*< d|d+< d|d,< d|d-< d|d/< d|d0< d|d1< d|d2< d|d4< ||	d5< |j*|j t jjtQjtQjd kjtQj|jkjRtQjjS j&t't(j) }|srn$x"|D ]}|jrx|j*|j qxW d6|i}t/jTtU|d7}g }|snd }x|D ]}i }|jV|d8< |j|d9< |jW|d:< |j|d;< |j|d< |jry4x.|j3 d D ]}|d< |jkr|d= }qW W nV tXtYfk
rd } z
d>}W Y d d }~X n, tZt[fk
r } z
d?}W Y d d }~X nX nd }||d@< |j*| qW ||	dA< t jjt\jt\jd kjt\j]d kjt\j|jkj&t't(j) }|snx|D ]}|j*|j qW d6|i}t/jTtU|d7}|j	r|jdBkr^|jdC |	d@< |j|	d;< nyBx<|j3 d D ],}|d< |jkrn|d= |	d@< |j|	d;< qnW W nr tXtYfk
r } zd>|	d@< |j|	d;< W Y d d }~X n: tZt[fk
	r } zd?|	d@< |j|	d;< W Y d d }~X nX nd>|	d@< |j|	d;< g } |	s4nx|D ]}!i }"|!j^|"dD< |!j_|"dE< t`|!ja|"dF< y4x.|j3 d D ]}|d< |!jk	rt|d= }	qtW W n: tXtYfk
	r   d>}Y n tZt[fk
	r   d?}Y nX ||"dG< |!j|"d< | j*|" 	q:W | |	dH< t jjt\jt\jd kjt\j]dkjt\j|jkj&t't(j) }#|#
sFnx|#D ]}|j*|j 
qLW d6|i}t/jTtU|d7}|jr^|jdBk
r|jdC |	d@< |j|	d;< nyBx<|j3 d D ],}|d< |jk
r|d= |	d@< |j|	d;< 
qW W nr tXtYfk
r" } zd>|	d@< |j|	d;< W Y d d }~X n: tZt[fk
rZ } zd?|	d@< |j|	d;< W Y d d }~X nX nd>|	d@< |j|	d;< g }$|#s|nx|#D ]}!i }"|!j^|"dD< |!j_|"dE< |!jb|"dI< |!j]|"dJ< t`|!ja|"dF< y4x.|j3 d D ]}|d< |!jkr|d= }qW W n: tXtYfk
r   d>}Y n tZt[fk
r.   d?}Y nX ||"dG< |!j|"d< |$j*|" qW |$|	dK< t|	|j t jjtcjtdtcjetdjfkjtcjgtcjhtcjitcjjtcjktcjltcjtcjmtcjntcjotdjpjtcjd kjtcj| kjRtcjqjr j&t't(j) }%g }&x|%D ]}'|&j*|'j qW d6|&i}t/jTtU|d7}(g })g }*|*j*d xh|%D ]^}+i },|jj,dL}-y ts|j!|+jk|+jh|+jm|+jn|-}.W n2 tk
r   ts|j!|+jk|+jh|j"|j#|-}.Y nX t-|	d tt|* |. dM}/t.|	d |,dN< y&ts|+jk|j!t.|	d |j"|j#|-}0W n< tk
r* } ztu||,dO< t.|	d }0W Y d d }~X nX |0|,dP< t.|+jh|,dQ< t.|.|,dR< |0t.|+jh |,dS< y,|0t.|+jh }1ts|j!|+jk|1|+jm|+jn|-}2W nB tk
r } z$|0t.|+jh }1tu||,dT< |/}2W Y d d }~X nX |2|,dU< |/|,dV< |+jj|,dW< |+jp|,dX< t jjtvjtvjw|+jokj }3y$|3jxr.|3jxdY |3jy }4n|3jz}4W n tk
rP   d }4Y nX |4|,dZ< t/j0t1j2|+jk}5t/j0t1j2|+jl}6y|5j3 d d d |,d[< W n. tk
r   |6j3 d d d |,d[< Y nX |6j3 d d d |,d\< |6j3 d d d |,d< y\|+jrDxN|(j3 d D ],}|d< |+jkr|d= |,d@< |+j|,d;< qW nd |,d@< d |,d;< W n& tk
r|   d]|,d@< d |,d;< Y nX |)j*|, |*j*|. q4W t{|)d^d_ d#d`})|)|	da< |jdbkrd|)d dV< t jjt|jt|j|jkjt|jd kj&t't(j) }7|7sg |	dc< ng }8g }9x|7D ]}:|8j*|:j qW d6|8i}t/jTtU|d7};xZ|7D ]P}:i }<|:j@|<d'< |:jA|<d(< |:j}|<dd< |:j|<d< |:j~|<de< |:j|<df< |j|<dg< |:j}=t jjtjtjtjjtj|=kj&t't(j }>|>j|>jdh|<di< y4x.|;j3 d D ]}|d< |:jkr|d= }qW W n: tXtYfk
r>   d>}Y n tZt[fk
rZ   d?}Y nX |:j}?|?dkr~dj|<dk< ||<dG< ndl|<dk< d|<dG< |:j|<d< |9j*|< qRW |9|	dc< t jjtjtjd kjtj| kj) }@g }Ag }B|@rx|@D ]}Ci }D|Cj|Ddm< |Cj|Ddn< t.|Cj|Ddo< |Cj|Ddp< t|Cj}E|Ej3 d d d |Ddq< t|Cj}F|Fj3 dr |Dds< |Bj*|D t|j!|Cj|Cj|Cj|Cj}G|Aj*|G qW tt|A}H|B|	dt< |%rt-t.|)d dV dM|	du< nt-t.|	d |H dM|	du< |j
dkrdv|	dw< |j
dMkrdx|	dw< |j
dkrdy|	dw< |j
dzkr.d{|	dw< n|j
s>d||	dw< t jjtjtjd kjtj|jkj&t't(j }I|Ir|Ij|	d}< |Ij|	d~< |Ij|	d< t/j0tj2|Ij}Jy|Jj3 dr |	d< W n tk
r   d |	d< Y nX |Ij}K|Kdkr|	d d |	d< n|Kdkrd|	d< nd|	d< n d |	d}< d |	d~< d |	d< d|	d< t jjtjttjtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjjtjd kjtj|jkj }L|LrZd#|	d< g }Mi }N|Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Lj|Nd< |Mj*|N |M|	d< nd%|	d< t jjtjtjd kjtj|jkj }O|Ord#|	d< g }Pi }Q|Oj|Qd< |Oj|Qd< |Pj*|Q |P|	d< nd%|	d< t jjtjtjd kjtj|jkj) }Rg }Sx|RD ]}T|Sj*|Tj  qW |S|	d< y6|rJd#|	d< t|j}U|U|	d< nd%|	d< i |	d< W n tk
rr   Y nX t jjtjtjd kjtj|jkj) }Vg }Wx|VD ]}Xi }Y|Xj|Yd< |Xj|Yd< |Xj|Yd< |Xj|Yd< |Xj|Yd< |Xj|Yd;< i }Zt|Xj|j|Z t.|Zd |Yd< t|Xj}
|
j3 d d d |Yd< t|Xj}[|[j3 d' d |[j3 d(  |YdG< |Wj*|Y qW |W|	d< |Vrd#|	d< nd%|	d< |j*|	 t+d|idfS d S )Nr   r   r   z<The selected booking does not appear to exist in the system.r   r   r   r   r   r   r   actual_booking_check_in_dateactual_booking_check_out_datez%A, %d %b %Yr~   r   r   rz   r   r  r4  r5  zChecked Outr  z
Checked Inr   rS   currency_namer&  r  rR   r   destination_idrL  Tdestination_setFr^  r|   r}   rG  r)  rA  rH  r<  rB  entry_mode_nameentry_mode_public_id	gate_namegate_public_idrD  rE  r   r   )r   r   r{   r   r   r   r   zN/AzNetwork Errorr   r   r  z (Public Booking)booking_note_public_idrJ  show_on_invoicer  booking_notesalertr  booking_ranger_notesz%Y-%m-%drQ   transaction_original_costoriginal_cost_exception#converted_transaction_original_costtransaction_totalconverted_transaction_totalbase_transaction_balancebalance_exceptionconverted_balancetransaction_balancetransaction_dater{  z...transaction_codetransaction_payment_currencytransaction_total_currencyzOnline transactionc             S   s   | d S )NrA  rO   )orderrO   rO   rP   <lambda>s	  s    z%view_single_booking.<locals>.<lambda>)keyreversebooking_paymentsz$300169b7-bdc2-4a2a-9397-873e6270fa3aresidency_proofdocument_idresidency_proof_public_idproof_pointresidency_booking_id)r  r8  	residencyYesverifiedNor}  r~  r  r  donation_currency_namer@  donation_cause_name	donationsbooking_payment_balancer  r  zIncomplete Paymentr   r  z
To InvoicezNot Paidr  r  agent_emailr   z To Paypaid_byzGuest To PayzNot Specifiedschool_bookingr  r  school_levelschool_typeschool_genderschool_codeclosest_city_townprimary_contactprimary_contact_emailprimary_contact_phonesecondary_contactsecondary_contact_emailsecondary_contact_phoneschool_booking_detailscorporate_bookingr  organisation_emailcorporate_booking_detailsvehicle_detailsr  r  credit_note_refcredit_note_public_idcredit_note_currencycredit_note_reasontotalcredit_note_amountcredit_note_currency_namer   credit_notesr  )r?   rL   r   r-   r   r   r{   r  r  r   r  r   r   rk   r  r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  rz   r   r   r   r&  r4  r5  r   r  r  r<   r@   r   r   r   r   rU   rV   rW   rh   get_currencyrj   r   r$   r  r&   r\  rM  r^  rL  r!   r	  r
  r  r   r|   r}   rG  r)  rA  rH  r<  rB  r8   r0  r/  r#   r2  rC  r1  rD  rE  r   r   r   rX   r   r   r   r  r  r  r  r   r  rK  rJ  boolr4  r6  r5   r0   transaction_payment_methodpayment_method_public_idr8  r;  r@  rA  rC  rD  $payment_currency_buying_rate_at_time%payment_currency_selling_rate_at_timetransaction_booking_public_idpayment_method_nametransaction_booking_idascrb   r  r   r   transaction_idcard_first_fourcard_last_fourmpesa_referencesortedResidencyProofrK  rL  rM  residency_idr,   r  r8  rQ  r   r}  r~  r  r  get_details_currencyget_details_donation_causere   r  r  r/   r  r  rW  get_partner_detailsrX  r3   r2   r  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  r(   r  rg  r   return_jsonr  r   r   rj  rk  rl  rm  creditNoteTotalget_details_user)\r{   get_member_bookingmember_dataget_bookingr  r   rS   r  r   r   r&  get_gatepassget_gatepass_guestsr!  detail_datarB  get_entry_moder   get_entry_pointget_logsone_activityr_   r  logsr@  single_activityreturn_activityr  	get_notesone_noter  r  notessingle_notereturn_notesget_ranger_notesranger_notesget_all_booking_paymentstransaction_ids	single_idreturn_transaction_userbooking_payments_listtotal_paymentseach_paymentrI  payment_dateconverted_transaction_valuebalanceconverted_original_cost_tempr?  get_booking_payment
trans_coderC  rD  residency_dbresidency_proof_id_arrrJ  rO  return_user_proofsresidency_objr  get_residence_nameverifyget_all_booking_donationsrU  donation_datasingle_donationreturn_donation_datacurrency_detailscause_detailsr  donation_totalr"  partner_detailsrX  r  school_detailsreturn_school_detailsr   org_detailsreturn_org_detailsget_detailsri  single_detailquery_member_detailsr$  rq  single_credit_notereturn_creditcredit_note_detailsuser_detailsrO   rO   rP   view_single_booking6  s   
























































































































 

r  z"/bookings/view-detail/<booking_id>c       2   U   C   s  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jtj| kj t!t"j# }|sg }|j$d t%d|idfS g }x|D ]}i }|j|d< |j|d< |j|d< |j|d< |j|d< |j|d	< |jj&d
|d< |jj&d
|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |jdkrd|d< n6|jdkrd|d< n |jdkrd|d< n
|j|d< t jjt'jt'j(|jkjt'j	t)dkj* }|rfyF|j+|d< t jjt,j-jt,j.|j+kj t!t"j* \|d< d|d< W n. t/k
rb   d |d< d |d< d|d< Y nX nd |d< d |d< d|d< t jjt0jt0j(|jkjt0j	t)dkj* }|ri }|j1|d< |j2|d< |j3|d < |j4|d!< |j5|d"< |j6|d#< |j7|d$< |j8}	|	rd|d%< t jjt9jt9jd kjt9j:|j8kj* }
y|
j;|d&< |
j:|d'< W n4 t<k
r } zd(|d&< d(|d'< W Y d d }~X nX t jjt=jt=jd kjt=j>|j?kj* }y|j@|d)< |j>|d*< W n4 t<k
r } zd(|d)< d(|d*< W Y d d }~X nX |jA|d+< nd|d%< n<i }d(|d< d(|d< d(|d < d(|d!< d(|d"< d(|d#< d(|d$< ||d,< tB||j y|d- |d.< W n t<k
r   d(|d.< Y nX |j|d/< t jjtCjtDtCjEtDjFkjtCjGtCjHtCjItCjJtCjKtCjLtCjtCjMtCjNtCjOtDjPjtCjd kjtCj(| kjQtCjRjS j t!t"j# }g }x|D ]}|j$|j q(W g }g }|j$d0 x|D ]}i }|jJj&d1}y tT|j|jK|jH|jM|jN|}W n2 t<k
r   tT|j|jK|jH|j|j|}Y nX tU|d2 tV| | d3}tW|d2 |d4< y&tT|jK|jtW|d2 |j|j|}W n< t<k
rN } ztX||d5< tW|d2 }W Y d d }~X nX tW||d6< tW|jH|d7< tW||d8< |tW|jH |d9< y,|tW|jH }tT|j|jK||jM|jN|}W nB t<k
r } z$|tW|jH }tX||d:< |}W Y d d }~X nX tW||d;< tW||d<< |jJ|d=< |jP|d>< |j$| qXW t jjtYjtYjd kjtYj(| kj# }g }g }|rx|D ]}i }|jZ|d?< |j[|d@< tW|j\|dA< |j]|dB< t^|j[}|j_ dC d0 dD |dE< t`|j]} | j_ dF |dG< |j$| ta|j|j[|j\|jb|jc}!|j$|! qpW tV|}"||dH< |rFtUtW|d0 d< d3|dI< ntUtW|d2 |" d3|dI< |jdkrtdJ|dK< |jd3krdL|dK< |jdMkrdN|dK< |jdOkrdP|dK< n|jsdQ|dK< t jjtdjtdjd kjtdj(|jkj t!t"j* }#|#	r|#je|dR< |#jf|dS< |#jg|dT< thjitjjk|#jf}$y|$j_ dF |dU< W n t<k
	r^   d |dU< Y nX |#jl}%|%dk	r|dU dV |dW< n|%d0k	rdX|dW< ndY|dW< nd |dR< d |dS< d |dU< t jjtmjtntmjotnjpkjtnjqtnjrtnjstnjttnjutnjvtnjptnjwtnjxtnjytnjztnj{tnj|jtmjd kjtmj(|jkj* }&|&
rd|dZ< g }'i }(|&jp|(d[< |&jq|(d\< |&jr|(d]< |&js|(d^< |&jt|(d_< |&ju|(d`< |&jv|(da< |&jw|(db< |&jx|(dc< |&jy|(dd< |&jz|(de< |&j{|(df< |&j||(dg< |'j$|( |'|dh< nd|dZ< t jjt}jt}jd kjt}j(|jkj* })|)rFd|di< g }*i }+|)j~|+dj< |)j|+dk< |*j$|+ |*|dl< nd|di< t jjtjtjd kjtj(|jkj# },g }-x|,D ]}.i }/|.j|/dm< |.j|/dn< |.j|/do< |.j|/dp< |.j|/dq< t jjt'jt=t'jt=j>kjt=j@t=jjt'j(|jkjt'j	t)dkjt'jd kj* }0|0j@|/dr< t jjt9jt9jd kjt9j:|0jkj* }	|	j;|/d%< |-j$|/ qW |-|ds< t jjtjtjd kjtj(|jkj* }1|1rd|dt< nd|dt< |j$| qW t%dC|idfS d S )uNz<The selected booking does not appear to exist in the system.r   r   r   r   r   r   r   r*  z%A, %d %b %Yr~   r   r+  r   rz   r   r4  r5  r   zChecked Outr  z
Checked Inr   r   r-  rL  Tr.  Fr|   r}   rG  r)  rA  rH  r<  rB  r/  r0  r  r1  r2  rD  r   r   r&  rR   r   z%Y-%m-%dr   rQ   r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  r{  r}  r~  r  r  rS   r,  rS  r@  rT  rU  rV  r  r  zIncomplete Paymentr  r   r  z
To InvoicezNot Paidr  r  rW  r   z To PayrX  zGuest To PayzNot SpecifiedrY  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  r  rg  rh  check_vehicle_drivercheck_vehicle_phone_numbercheck_vehicle_regcheck_vehicle_disccheck_vehicle_public_idgatepass_sourceri  r  )r?   rL   r   r   r  r   r   r   r   r  r  r  r   r   r   r*  r+  r   r	  r  rz   r   r   r   r  r&  r   r4  r5  r   r  r   r  r<   r@   r   r   r   r   r$   r{   r  r  rL  r!   r	  r
  r  r   r|   r}   rG  r)  rA  rH  r<  rB  r8   r0  r/  rk   r#   r2  rC  r1  rD  r(  r5   r0   rt  ru  r8  r;  r@  rA  rC  rD  rv  rw  rx  ry  r   rz  r{  rb   rU   r  rV   r   r   r}  r~  r  r  r  r   r  re   r  r  r/   r  r  rW  rW   rh   r  rj   rX  r3   r2   r  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  r(   r  rg  r   r  r  r  r  r  r  entry_mode_idr   )2r{   r  r   rS   r   r   r  r!  r  rB  r  r   r  r  r  r  r  r  r  rI  r  r  r  r  r  r?  r  rU  r  r  r  r  r  r  r  r"  r  rX  r  r  r  r   r  r  r  ri  r  Zsingle_detail_dictZget_gatepass_sourcer$  rO   rO   rP   view_booking_detail
  sj   














































































r  z(/bookings/view-more-details/<booking_id>c       9   A   C   sX  t j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| kjttj }|sg }|jd td|idfS g }g }x|D ]}i }t jjtjtjd kjtj |jkj!tjj" jttj }| sn$x"|D ]}|jr |j|j q W d|i}	t#j$t%|	d}
g }|s@nd }x|D ]}i }|j&|d< |j |d< |j'|d< |j|d	< |j|d
< |jry4x.|
j( d D ]}|d |jkr|d }qW W nV t)t*fk
r } z
d}W Y d d }~X n, t+t,fk
r } z
d}W Y d d }~X nX nd }||d< |j| qJW ||d< t jjt-jt-jd kjt-j.d kjt-j |jkjttj }|snx|D ]}|j|j qW d|i}	t#j$t%|	d}
|jr|jdkr|jd |d< |j|d	< nyBx<|
j( d D ],}|d |jkr|d |d< |j|d	< qW W nr t)t*fk
rb } 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 nd|d< |j|d	< g }|snx|D ]}i }|j/|d< |j0|d< t1|j2|d< y4x.|
j( d D ]}|d |jkr|d }qW W n: t)t*fk
r>   d}Y n t+t,fk
rZ   d}Y nX ||d< |j|d
< |j| qW ||d< t jjt-jt-jd kjt-j.dkjt-j |jkjttj }|snx|D ]}|j|j qW d|i}	t#j$t%|	d}
|jr|jdkr.|jd |d< |j|d	< nyBx<|
j( d D ],}|d |jkr>|d |d< |j|d	< q>W W nr t)t*fk
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 nd|d< |j|d	< g }|snx|D ]}i }|j/|d< |j0|d< |j3|d< |j.|d< t1|j2|d< y4x.|
j( d D ]}|d |jkrX|d }qXW W n: t)t*fk
r   d}Y n t+t,fk
r   d}Y nX ||d< |j|d
< |j| q
W ||d< t jjt4j5t6t4j7t6j8kjt4j9t4j:t4j;t4j<t4j=t4j>t4jt4j?t4j@t4jAt6jBjt4jd kjt4j | kj!t4jCjD jttj }g }x|D ]}|j|j qjW d|i}	t#j$t%|	d}g }g }|jd xr|D ]h} i }!| j<jEd}"y tF|j| j=| j:| j?| j@|"}#W n2 tGk
r   tF|j| j=| j:|j|j|"}#Y nX tH||j tI|d tJ| |# d }$tK|d |!d!< tK| j:|!d"< |$|!d#< | j<|!d$< | jB|!d%< t jjtLjtLjM| jAkjN }%y$|%jOr|%jOd& |%jP }&n|%jQ}&W n tGk
r   d }&Y nX |&|!d'< t#jRtSjT| j=}'t#jRtSjT| j>}(y|'j( d d d( |!d)< W n. tGk
	rN   |(j( d d d( |!d)< Y nX |(j( d d d( |!d*< |(j( d d d( |!d+< y\| j	rxN|j( d D ],}|d | jk	r|d |!d< | j|!d	< 	qW nd |!d< d |!d	< W n& tGk

r   d,|!d< d |!d	< Y nX |j|! |j|# qW tU|d-d. d/d0}||d1< t jjtVjtVj |jkjtVjd kjttj })|)
s~g |d2< ng }*g }+x|)D ]},|*j|,j 
qW d|*i}	t#j$t%|	d}-xZ|)D ]P},i }.|,jW|.d3< |,jX|.d4< |,jY|.d5< |,j|.d
< |,jZ|.d6< |,j[|.d7< |j|.d8< |,j\}/t jjt]jt]j^t]j_jt]j_|/kjttjN }0|0j^|0j_d9|.d:< y4x.|-j( d D ]}|d |,jkrj|d }qjW W n: t)t*fk
r   d}Y n t+t,fk
r   d}Y nX |,j`}1|1dkrd;|.d<< ||.d< nd=|.d<< d>|.d< |,j|.d
< |+j|. 
qW |+|d2< t jjtajtajd kjtaj |jkj }2g }3x|2D ]}4i }5|4jb|5d?< |4jc|5d@< |4jd|5dA< |4je|5dB< |4j|5d
< |4j|5d	< i }6tf|4jc|j|6 tK|6dC |5dD< tg|4jd}7|7j( d d d( |5dE< th|4j}8|8j( d3 dF |8j( d4  |5d< |3j|5 qRW |3|dG< |2r.d/|dH< ndI|dH< |j| qW td|idfS d S )JNz<The selected booking does not appear to exist in the system.r   r   r   )r   r   r{   r   r   r   rS   r   r   zN/AzNetwork Errorr   r   r  z (Public Booking)r3  rJ  r4  r  r5  r   r6  r  r7  r   z%Y-%m-%dr   rQ   r8  r;  r@  rA  r{  z...rB  r,  rC  rD  r&  zOnline transactionc             S   s   | d S )NrA  rO   )rE  rO   rO   rP   rF    s    z*view_booking_more_detail.<locals>.<lambda>T)rG  rH  rI  rJ  r|   r}   rK  rL  rM  rN  )r  r8  rO  rP  rQ  rR  r  rj  rk  rl  rm  rn  ro  rp  r   rq  r  F)ir?   rL   r   r   r  r   r   r   r   r*  r+  r   r	  r  rz   r   r   r   r  r  r&  r   r4  r5  r   r  r<   r@   r   r   r   r   r{   r   r   rW   rX   r   r   r   r   r  r  r  r  r   r  rK  rJ  rs  r4  r6  r5   r  r0   rt  ru  r8  r;  r@  rA  rC  rD  rv  rw  rx  ry  rz  r{  r   rb   rk   r(  rU   r  rV   r   r|  r  r}  r~  r  rh   rr  rj   r  r  r|   r}   rK  rL  rM  r  r,   r  r8  rQ  r   rj  rk  rl  rm  r  r  r  )9r{   r  r   rS   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  rI  r  r  r  r  r  rC  rD  r  r  rJ  rO  r  r  r  r  r  r$  rq  r  r  r  r&  r  rO   rO   rP   view_booking_more_detailx  sz   






















































 
r  z#/bookings/view/payment/<booking_id>c       Q   u   C   s  yt jjtjtjd kjtj| kj }|ri }t||  |d dkrt jjt	jt	jd kjt	j
d kjt	j| kj }|rd|_
t jj  W n tk
r   d }Y nX 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%jt	j| kj&t't(j) }|sng }|j*d t+d|idfS g }g }g }g }	t, }
x8|D ].}i }|j|d< |j$|d< |j|d	< |j|d
< |j|d< |j|d< |j|d< |jj-d|d< |jj-d|d< |j|d< |j|d< |j|d< t.t/|j"d|d< t.t/|j#d|d< |jdkrXd|d< n6|jdkrnd|d< n |jdkrd|d< n
|j%|d< t0j1t2j3|j!}y|j4 d d d |d< W n tk
r   d|d< Y nX |j!|d< t jjt5jt5j|jkjt5jt6d kj }|ryF|j7|d!< t jjt8j9jt8j:|j7kj&t't(j \|d"< d#|d$< W n. t;k
r   d |d!< d |d"< d%|d$< Y nX nd |d!< d |d"< d%|d$< t jjt<jt<j|jkjt<jt6d kj }|r*i }|j=|d&< |j>|d'< |j?|d(< |j@|d)< |jA|d*< |jB|d+< |jC|d,< n<i }d|d&< d|d'< d|d(< d|d)< d|d*< d|d+< d|d,< ||d-< |j*|j t jjtDjtDjd kjtDj|jkjEtDjjF j&t't(j) }|sn$x"|D ]}|jr|j*|j qW d.|i}t0jGtH|d/}g }|snd }x|D ]}i }|jI|d0< |j|d1< |jJ|d2< |j|d3< |j|d< |jry4x.|j4 d D ]}|d4 |jkrd|d5 }qdW W nV tKtLfk
r } z
d6}W Y d d }~X n, tMtNfk
r } z
d7}W Y d d }~X nX nd }||d8< |j*| qW ||d9< t jjtOjtOjd kjtOjPd kjtOj|jkj&t't(j) }|sNnx|D ]}|j*|j qTW d.|i}t0jGtH|d/}|jrf|jd:kr|jd; |d8< |j|d3< nyBx<|j4 d D ],}|d4 |jkr|d5 |d8< |j|d3< qW W nr tKtLfk
r* } zd6|d8< |j|d3< W Y d d }~X n: tMtNfk
rb } zd7|d8< |j|d3< W Y d d }~X nX nd6|d8< |j|d3< g }|snx|D ]} i }!| jQ|!d<< | jR|!d=< tS| jT|!d>< y4x.|j4 d D ]}|d4 | jkr|d5 }qW W n: tKtLfk
r   d6}Y n tMtNfk
r"   d7}Y nX ||!d?< | j|!d< |j*|! qW ||d@< t jjtOjtOjd kjtOjPdkjtOj|jkj&t't(j) }"|"snx|"D ]}|j*|j qW d.|i}t0jGtH|d/}|j	r|jd:kr|jd; |d8< |j|d3< nyBx<|j4 d D ],}|d4 |jk	r|d5 |d8< |j|d3< 	qW W nr tKtLfk
	rr } zd6|d8< |j|d3< W Y d d }~X n: tMtNfk
	r } zd7|d8< |j|d3< W Y d d }~X nX nd6|d8< |j|d3< g }#|"	snx|"D ]} i }!| jQ|!d<< | jR|!d=< | jU|!dA< | jP|!dB< tS| jT|!d>< y4x.|j4 d D ]}|d4 | jk
r |d5 }
q W W n: tKtLfk

rb   d6}Y n tMtNfk

r~   d7}Y nX ||!d?< | j|!d< |#j*|! 	qW |#|dC< t||j t jjtVjtWtVjXtWjYkjtVjZtVj[tVj\tVj]tVj^tVj_tVjtVj`tVjatVjbtWjcjtVjd kjtVj| kjEtVjdje j&t't(j) }$g }%x|$D ]}&|%j*|&j q>W d.|%i}t0jGtH|d/}'g }(g })|)j*d xh|$D ]^}*i }+|*j]j-dD},y tf|j!|*j^|*j[|*j`|*ja|,}-W n2 tk
r   tf|j!|*j^|*j[|j"|j#|,}-Y nX t.|d tg|) |- dE}.t/|d |+dF< y&tf|*j^|j!t/|d |j"|j#|,}/W n< tk
rz } zth||+dG< t/|d }/W Y d d }~X nX |/|+dH< t/|*j[|+dI< t/|-|+dJ< |/t/|*j[ |+dK< y,|/t/|*j[ }0tf|j!|*j^|0|*j`|*ja|,}1W nB tk
r } z$|/t/|*j[ }0th||+dL< |.}1W Y d d }~X nX |1|+dM< |.|+dN< |*j]|+dO< |*jc|+dP< t jjtijtijj|*jbkj }2y$|2jkr~|2jkdQ |2jl }3n|2jm}3W n tk
r   d }3Y nX |3|+dR< t0j1t2j3|*j^}4t0j1t2j3|*j_}5y|4j4 d d d |+dS< W n. tk
r   |5j4 d d d |+dS< Y nX |5j4 d d d |+dT< |5j4 d d d |+d< y\|*jrxN|'j4 d D ],}|d4 |*jkrb|d5 |+d8< |*j|+d3< qbW nd |+d8< d |+d3< W n& tk
r   dU|+d8< d |+d3< Y nX |(j*|+ |)j*|- qW tn|(dVdW d#dX}(|(|dY< |jdZkrd|(d dN< t jjtojtojd kjtoj| kj) }6g }7g }8|6rx|6D ]}9i }:|9jp|:d[< |9jq|:d\< t/|9jr|:d]< |9js|:d^< tt|9jq};|;j4 d d d |:d_< tu|9js}<|<j4 d` |:da< |8j*|: tv|j!|9jq|9jr|9jw|9jx}=|7j*|= qVW tg|7}>|8|db< |$r,t.t/|(d dN dE|dc< nt.t/|d |> dE|dc< |j
dkrZdd|de< |j
dEkrndf|de< |j
dkrdg|de< |j
dhkrdi|de< n|j
sdj|de< t jjtyjtyjd kjtyj|jkj&t't(j }?|?rH|?jz|dk< |?j{|dl< |?j||dm< t0j1t}j3|?j{}@y|@j4 d` |dn< W n tk
rD   d |dn< Y nX nd |dk< d |dl< d |dn< t jjt~jtt~jtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjjt~jd kjt~j|jkj }A|Ar~d#|do< g }Bi }C|Aj|Cdp< |Aj|Cdq< |Aj|Cdr< |Aj|Cds< |Aj|Cdt< |Aj|Cdu< |Aj|Cdv< |Aj|Cdw< |Aj|Cdx< |Aj|Cdy< |Aj|Cdz< |Aj|Cd{< |Aj|Cd|< |Bj*|C |B|d}< nd%|do< t jjtjtjd kjtj|jkj }D|Drd#|d~< g }Ei }F|Dj|Fd< |Dj|Fd< |Ej*|F |E|d< nd%|d~< t jjtjtjd kjtj|jkj) }Gg }Hx|GD ]}I|Hj*|Ij  q*W |H|d< y6|rnd#|d< t|j}J|J|d< nd%|d< i |d< W n tk
r   Y nX t jjtjtjd kjtj|jkj) }Kg }Lx|KD ]}Mi }N|Mj|Nd< |Mj|Nd< |Mj|Nd< |Mj|Nd< |Mj|Nd< |Mj|Nd3< i }Ot|Mj|j|O t/|Od |Nd< tt|Mj}|j4 d d d |Nd< t|Mj}P|Pj4 d& d |Pj4 d'  |Nd?< |Lj*|N qW |L|d< |Krd#|d< nd%|d< |j*| qW t+d|idfS d S )Nr   r   r   z<The selected booking does not appear to exist in the system.r   r   r   r   r   r   r   r*  r+  z%A, %d %b %Yr~   r   r   rz   r   r  r4  r5  zChecked Outr  z
Checked Inr   rS   r,  r&  r  rR   r   r-  rL  Tr.  Fr|   r}   rG  r)  rA  rH  r<  r   r   )r   r   r{   r   r   r   r   zN/AzNetwork Errorr   r   r  z (Public Booking)r3  rJ  r4  r  r5  r6  r  r7  z%Y-%m-%drQ   r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  r{  z...rB  rC  rD  zOnline transactionc             S   s   | d S )NrA  rO   )rE  rO   rO   rP   rF  M  s    z.view_single_booking_payments.<locals>.<lambda>)rG  rH  rI  z$300169b7-bdc2-4a2a-9397-873e6270fa3ar}  r~  r  r  rS  r@  rT  rU  rV  r  r  zIncomplete Paymentr   r  z
To InvoicezNot Paidr  r  rW  r   rY  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  r  rg  rh  ri  r  r  rj  rk  rl  rm  rn  ro  rp  r   rq  r  )r?   rL   r   r-   r   r   r{   r  r  r   r  r   r   rk   r  r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  rz   r   r   r   r&  r4  r5  r   r  r  r<   r@   r   r   r   r:   r   rU   rV   rW   rh   rr  rj   r   r$   r  rL  r!   r	  r
  r  r   r|   r}   rG  r)  rA  rH  r<  r   r   r   rX   r   r   r   r  r  r  r  r   r  rK  rJ  rs  r4  r6  r5   r0   rt  ru  r8  r;  r@  rA  rC  rD  rv  rw  rx  ry  rz  r{  rb   r  r   r   r|  r}  r~  r  r  r   r}  r~  r  r  r  r  re   r  r  r/   r  r  rW  r  r3   r2   r  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  r(   r  rg  r   r  r  r   r   rj  rk  rl  rm  r  r  )Qr{   r  r  r  r  r   rS   r  inventory_total_cost_arraytotal_cost_arrayasyncRequestsr   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  rI  r  r  r  r  r  r?  r  r  rC  rD  r  rU  r  r  r  r  r  r  r  r"  r  r  r  r  r   r  r  r  ri  r  r  r$  rq  r  r  r  r  rO   rO   rP   view_single_booking_payments@  s   





































































































 
r  z&/bookings/inspection/view/<booking_id>c       K   u   C   s  yt jjtjtjd kjtj| kj }|ri }t||  |d dkrt jjt	jt	jd kjt	j
d kjt	j| kj }|rd|_
t jj  W n tk
r   d }Y nX 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%jt	j| kj&t't(j) }|sng }|j*d t+d|idfS g }g }t, }x>|D ]4}	i }
|	j|
d< |	j$|
d< |	j|
d	< |	j|
d
< |	j|
d< |	j|
d< |	j|
d< |	j|
d< |	j|
d< |	j|
d< t-t.|	j"d|
d< t-t.|	j#d|
d< |	jdkr0d|
d< n6|	jdkrFd|
d< n |	jdkr\d|
d< n
|	j%|
d< t/j0t1j2|	j!}y|j3 d d d |
d< W n tk
r   d|
d< Y nX |	j!|
d< t jjt4jt4j|	jkjt4jt5dkj }|rjyF|j6|
d< t jjt7j8jt7j9|j6kj&t't(j \|
d< d |
d!< W n. t:k
rf   d |
d< d |
d< d"|
d!< Y nX nd |
d< d |
d< d"|
d!< t jjt;jt;j|	jkjt;jt5dkj }|ri }|j<|d#< |j=|d$< |j>|d%< |j?|d&< |j@|d'< |jA|d(< |jB|d)< n<i }d|d#< d|d$< d|d%< d|d&< d|d'< d|d(< d|d)< ||
d*< |j*|	j t jjtCjtCjd kjtCj|	jkjDtCjjE j&t't(j) }|sn$x"|D ]}|jr|j*|j qW d+|i}t/jFtG|d,}g }|snd }x|D ]}i }|jH|d-< |j|d.< |jI|d/< |j|d0< |j|d< |jry4x.|j3 d D ]}|d1 |jkr<|d2 }q<W W nV tJtKfk
r } z
d3}W Y d d }~X n, tLtMfk
r } z
d4}W Y d d }~X nX nd }||d5< |j*| qW ||
d6< t jjtNjtNjd kjtNjOd kjtNj|	jkj&t't(j) }|s&nx|D ]}|j*|j q,W d+|i}t/jFtG|d,}|	jr>|	jd7kr|	jd8 |
d5< |	j|
d0< nyBx<|j3 d D ],}|d1 |	jkr|d2 |
d5< |	j|
d0< qW W nr tJtKfk
r } zd3|
d5< |	j|
d0< W Y d d }~X n: tLtMfk
r: } zd4|
d5< |	j|
d0< W Y d d }~X nX nd3|
d5< |	j|
d0< g }|s\nx|D ]}i }|jP|d9< |jQ|d:< tR|jS|d;< y4x.|j3 d D ]}|d1 |jkr|d2 }qW W n: tJtKfk
r   d3}Y n tLtMfk
r   d4}Y nX ||d<< |j|d< |j*| qbW ||
d=< t jjtNjtNjd kjtNjOdkjtNj|	jkj&t't(j) } | snnx| D ]}|j*|j qtW d+|i}t/jFtG|d,}|	j	r|	jd7kr|	jd8 |
d5< |	j|
d0< nyBx<|j3 d D ],}|d1 |	jkr|d2 |
d5< |	j|
d0< qW W nr tJtKfk
	rJ } zd3|
d5< |	j|
d0< W Y d d }~X n: tLtMfk
	r } zd4|
d5< |	j|
d0< W Y d d }~X nX nd3|
d5< |	j|
d0< g }!| 	snx| D ]}i }|jP|d9< |jQ|d:< |jT|d>< |jO|d?< tR|jS|d;< y4x.|j3 d D ]}|d1 |jk	r|d2 }	qW W n: tJtKfk

r:   d3}Y n tLtMfk

rV   d4}Y nX ||d<< |j|d< |!j*| 	qW |!|
d@< t|
|	j t jjtUjtVtUjWtVjXkjtUjYtUjZtUj[tUj\tUj]tUj^tUjtUj_tUj`tUjatVjbjtUjd kjtUj| kjDtUjcjd j&t't(j) }"g }#d+|#i}t/jFtG|d,}$g }%g }&|&j*d xh|"D ]^}'i }(|'j\jedA})y tf|	j!|'j]|'jZ|'j_|'j`|)}*W n2 tk
r   tf|	j!|'j]|'jZ|	j"|	j#|)}*Y nX t-|
d tg|& |* dB}+t.|
d |(dC< y&tf|'j]|	j!t.|
d |	j"|	j#|)},W n< tk
r6 } zth||(dD< t.|
d },W Y d d }~X nX |,|(dE< t.|'jZ|(dF< t.|*|(dG< |,t.|'jZ |(dH< y,|,t.|'jZ }-tf|	j!|'j]|-|'j_|'j`|)}.W nB tk
r } z$|,t.|'jZ }-th||(dI< |+}.W Y d d }~X nX |.|(dJ< |+|(dK< |'j\|(dL< |'jb|(dM< t jjtijtijj|'jakj }/y$|/jkr:|/jkdN |/jl }0n|/jm}0W n tk
r\   d }0Y nX |0|(dO< t/j0t1j2|'j]}1t/j0t1j2|'j^}2y|1j3 d d d |(dP< W n. tk
r   |2j3 d d d |(dP< Y nX |2j3 d d d |(dQ< |2j3 d d d |(d< y\|'jrPxN|$j3 d D ],}|d1 |'jkr|d2 |(d5< |'j|(d0< qW nd |(d5< d |(d0< W n& tk
r   dR|(d5< d |(d0< Y nX |%j*|( |&j*|* q@W tn|%dSdT d dU}%|%|
dV< t jjtojtoj|	jkjtojd kj&t't(j) }3|3sg |
dW< n@g }4g }5x|3D ]}6|4j*|6j qW d+|4i}t/jFtG|d,}7x|3D ]}6i }8|6j<|8d#< |6j=|8d$< |6jp|8dX< |6j|8d< |6jq|8dY< |6jr|8dZ< |	j|8d[< |6js}9t jjttjttjuttjvjttjv|9kj&t't(j }:|:ju|:jvd\|8d]< y4x.|7j3 d D ]}|d1 |6jkr|d2 }qW W n: tJtKfk
r2   d3}Y n tLtMfk
rN   d4}Y nX |6jw};|;dkrrd^|8d_< ||8d<< nd`|8d_< d|8d<< |6jx}<|<dkrd |8da< i }=|6jy}>y&tz|>|= |=d5 |
db< |=db |
dc< W n4 tk
r } zd|
db< d|
dc< W Y d d }~X nX nd"|
da< d|
db< d|
dc< d|
dd< |6j|8d< |5j*|8 qFW |5|
dW< |	jdekr\d|%d dK< |	j
dkrpdf|
dg< |	j
dBkrdh|
dg< |	j
dkrdi|
dg< |	j
djkrdk|
dg< n|	j
sdl|
dg< t jjt{jt{jd kjt{j|	jkj&t't(j }?|?r^|?j||
dm< |?j}|
dn< |?j~|
do< t/j0tj2|?j}}@y|@j3 dp |
dq< W n tk
rZ   d |
dq< Y nX nd |
dm< d |
dn< d |
dq< t jjtjttjtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjjtjd kjtj|	jkj }A|Ard |
dr< g }Bi }C|Aj|Cds< |Aj|Cdt< |Aj|Cdu< |Aj|Cdv< |Aj|Cdw< |Aj|Cdx< |Aj|Cdy< |Aj|Cdz< |Aj|Cd{< |Aj|Cd|< |Aj|Cd}< |Aj|Cd~< |Aj|Cd< |Bj*|C |B|
d< nd"|
dr< t jjtjtjd kjtj|	jkj }D|Drd |
d< g }Ei }F|Dj|Fd< |Dj|Fd< |Ej*|F |E|
d< nd"|
d< t jjtjtjd kjtj|	jkj) }Gg }Hx|GD ]}I|Hj*|Ij  q@W |H|
d< y6|rd |
d< t|j}J|J|
d< nd"|
d< i |
d< W n tk
r   Y nX |j*|
 qW t+d|idfS d S )Nr   r   r   z<The selected booking does not appear to exist in the system.r   r   r   r   r   r   r   r*  r+  r   rz   r   r  r4  r5  zChecked Outr  z
Checked Inr   rS   r,  r&  r  rR   r   r-  rL  Tr.  Fr|   r}   rG  r)  rA  rH  r<  r   r   )r   r   r{   r   r   r   r   zN/AzNetwork Errorr   r   r  z (Public Booking)r3  rJ  r4  r  r5  r6  r  r7  z%Y-%m-%drQ   r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  r{  z...rB  rC  rD  zOnline transactionc             S   s   | d S )NrA  rO   )rE  rO   rO   rP   rF  7  s    z0view_single_inspection_booking.<locals>.<lambda>)rG  rH  rI  rJ  rK  rL  rM  rN  )r  r8  rO  rP  rQ  rR  	inspectedinspected_byZinspection_user_idr  z$300169b7-bdc2-4a2a-9397-873e6270fa3ar  r  zIncomplete Paymentr   r  z
To InvoicezNot Paidr  r  rW  r@  r   rY  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  r  rg  rh  ri  r  r  )r?   rL   r   r-   r   r   r{   r  r  r   r  r   r   rk   r  r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  rz   r   r   r   r&  r4  r5  r   r  r  r<   r@   r   r   r   r:   rU   rV   rW   rh   rr  rj   r   r$   r  rL  r!   r	  r
  r  r   r|   r}   rG  r)  rA  rH  r<  r   r   r   rX   r   r   r   r  r  r  r  r   r  rK  rJ  rs  r4  r6  r5   r0   rt  ru  r8  r;  r@  rA  rC  rD  rv  rw  rx  ry  rz  r{  r   rb   r  r   r   r|  r}  r~  r  r  r  rK  rL  rM  r  r,   r  r8  rQ  r  r  getBookingSessionUserr/   r  r  rW  r  r3   r2   r  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  r(   r  rg  r   r  r  r   )Kr{   r  r  r  r  r   rS   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  rI  r  r  r  r  r  r?  r  r  rC  rD  r  r  rJ  rO  r  r  r  r  r  r  	user_infor  r"  r  r  r  r  r   r  r  r  ri  r  r  rO   rO   rP   view_single_inspection_booking=  s   



































































































r  z/bookings/ticket/<booking_ref>c       6   ;   C   s  | j  j } 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'tj(tj)tj*tj+tj,tj-tj. j/tj| kj/tjt0dkj1t2t3j4 }|s*g }|j5d t6d|idfS g }g }g }g }t7 }x8|D ].}i }	|jj8d|	d< |jj8d|	d< |j|	d< |j|	d	< |j|	d
< tjjtj/tj!dkj/tj| kj9 }
|
j"}|sdtjjt:j/t:j!dkj/t:j;t<j= j8dkj9 }|sBt>d}t:t?t@jA t<j= j8d||dt<j= t<j= d}tjjB| nt>|jC}||_Ct<j= |_||
_"n|}||	d< tDjEtFjG|j }y|jH d d d |	d< W n tIk
r   d|	d< Y nX |j |	d< |j-}yF|j.|	d< tjjtJjKj/tJjL|j.kj1t2t3j9 \|	d< d|	d< W nJ tMk
rB   d|	d< d|	d< d|	d< Y n tIk
r^   d|	d< Y nX tjjtNj/tNj!dkj/tNj|jkj1t2t3j9 }d}|rtDjEtOjG|jP}yH|jH }y |d }|r|d }nd}W n tIk
r   d}Y nX W n tIk
r   d}Y nX |p|}i }|r<|j%d | |d< n
|j%|d< |j&|d< |j'|d < |j(|d!< |j+|d"< |j,|d#< |j*|d$< ||	d%< tjjtQj/tQj!dkj/tQj|jkj1t2t3j4 }|snx|D ]}|j5|j qW tR|	|j |	d& }g |	d&< |	d' dkrT|	d( }x<|D ]2}|d) dkri }|d* |d+< d|d,< d-|d.< d|d/< d0|d1< d2|d3< |jj8d|d4< |d) |d5< d6|d7< d|d8< d|d9< d|d:< d;|d<< |d= |d>< d;|d?< d;|d?< d;|d@< d-|dA< dB|dC< d-|dD< d-|dE< d;|dF< d-|dG< d-|dH< d-|dI< d;|dJ< d-|dK< d-|dL< d|dM< d|dN< dO|dP< |	d& j5| qW |	dQ dkr|	dR }x<|D ]2}|dR dkrri }|dS |d+< d|d,< d-|d.< d|d/< d0|d1< d2|d3< |jj8d|d4< |dR |d5< d6|d7< d|d8< d|d9< d|d:< d;|d<< |dT |d>< d;|d?< d;|d?< d;|d@< d-|dA< dB|dC< d-|dD< d-|dE< d;|dF< d-|dG< d-|dH< d-|dI< d;|dJ< d-|dK< d-|dL< d|dM< d|dN< dO|dP< |	d& j5| qrW |	dU dk	r|	dV }xH|D ]>} | dW dkri }!| dX |!d+< | dW |!d5< d|!d,< d-|!d.< d|!d/< d0|!d1< d2|!d3< |jj8d|!d4< | dW |!d5< d6|!d7< d|!d8< d|!d9< d|!d:< d;|!d<< | dY |!d>< d;|!d?< d;|!d?< d;|!d@< d-|!dA< dB|!dC< d-|!dD< d-|!dE< d;|!dF< d-|!dG< d-|!dH< d-|!dI< d;|!dJ< d-|!dK< d-|!dL< d|!dM< d|!dN< dO|!dP< |	d& j5|! qW tS|dk	r8x|D ]}"|	d& j5|" 	q W tS|	d& |	dZ< d|	d'< d|	dQ< d|	dU< tTtU|jd6}#|	d }$|$d[ t?|# |	d< tjjtNj/tNj!dkj/tNj|jkj1t2t3j9 }|
rf|jV|	d\< |jP|	d]< tDjEtOjG|jP}yX|jH d^ |	d_< |jH }y |d }|
r |d }nd}W n tIk

r@   d}Y nX W n tIk

rb   d|	d_< Y nX nd|	d\< d|	d]< d|	d_< tjjtWjtXtWjYtXjZkjtXj[tXj\tXj]tXj^tXj_tXj`tXjZtXjatXjbtXjctXjdtXjetXjfj/tWj!dkj/tWj|jkj9 }%|%rd|	d`< g }&i }'|%jZ|'da< |%j[|'db< |%j\|'dc< |%j]|'dd< |%j^|'de< |%j_|'df< |%j`|'dg< |%ja|'dh< |%jb|'di< |%jc|'dj< |%jd|'dk< |%je|'dl< |%jf|'dm< |&j5|' |&|	dn< nd|	d`< tjjtgj/tgj!dkj/tgj|jkj9 }(|(rd|	do< g })i }*|(jh|*dp< |(ji|*dq< |)j5|* |)|	dr< nd|	do< tjjtjj/tjj!dkj/tjj|jkj4 }+g },x|+D ]}-|,j5|-jk  qHW |,|	ds< tjjtljtmtljntmjokjtljptljqtljrtljstljttljutljtljvtljwtmjx
j/tlj!dkj/tlj|jkjytljzj{ j1t2t3j4 }.g }/x|.D ]}0i }1tU|0jp|1dt< tU|0jq|1du< tU|0jr|1dv< |0js|1dw< |0jx|1dx< tDjEtFjG|0jt}2tDjEtFjG|0ju}3y|2jH d d d |1dy< W n. tIk
r   |3jH d d d |1dy< Y nX |3jH d d d |1dz< |3jH d d d |1d< |/j5|1 qW |/|	d{< tjjt|j/t|j!dkj/t|j|jkj/t|j}d|kj9 }4|4r\t~|4j}5d|	d}< |5jH d d~ |5jH d  |	d< nd|	d}< d|	d< |j5|	 qHW tjj  tjj  t6d|idfS dS )zL
	The sole purpose of this endpoint is to return data for ticket printing.
	r   z<The selected booking does not appear to exist in the system.r   r   z%a %d %b %Yr   r   r   rz   r   Nz%Y-%m-%dZTicketPrinter)booking_tickets_public_idticket_datefirst_ticketlast_ticketr   r   r   r  rS   r   r,  r&  r  rR   r-  rL  Tr.  zN/AFrE  z.  KRA PIN: r|   r}   rG  r)  rA  rH  r<  r   r   r   r   r1  r  inventory_nameinventory_ranger_markerg        agent_discountagent_discount_amountz$5bfa622d-1d4f-495b-bc64-d0146d14a7a6inventory_idz$57d60300-46e1-4e41-a939-087702ede756inventory_booking_public_idinventory_booking_dateinventory_booking_guestsrQ   inventory_booking_adultsinventory_booking_childreninventory_booking_extra_adults inventory_booking_extra_childreng     d@inventory_booking_adult_cost"payment_person_cost_after_discountinventory_booking_total_cost-inventory_booking_adult_cost_before_discounts,inventory_booking_adult_cost_after_discountsinventory_booking_child_costg     d@ inventory_booking_cost_per_child-inventory_booking_child_cost_before_discounts,inventory_booking_child_cost_after_discounts-inventory_booking_total_cost_before_discounts inventory_booking_total_discount%inventory_booking_discount_percentage'inventory_booking_commission_percentageadult_with_commissionchild_with_commissiondiscount_amount
time_framepick_up_locationZKESinventory_booking_currencyr   r   r  vehicle_cost_after_discountfacility_bookings_totalr   facility_booking_guestsfacility_namefacility_booking_total_costinventory_bookings_totalz. Rate: r  r  r@  r   rY  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  r  rg  rh  ri  r8  r;  r@  rA  r{  rC  rD  rI  zBooking checked inr	  r   Zchecked_in_by)r  r  r?   rL   r   r   r  r   r   r   r   r  r  r   r   r{   r$   r  r   r   r*  r+  r   r	  r  rz   r   r   r   r4  r5  r  r&  r   r  r   r  r|   r}   rG  r)  r=  r<  rA  rH  rE  rL  r   r  r  r<   r@   r   r   r   r:   r   r  r   r  r   r   rC   r   r   r   r   r  rW   rh   rr  rj   r   rk   r!   r	  r
  r  r/   r  r  r   r  r  rU   rV   r  r3   r2   r  r  r  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  r(   r  rg  r   r  r5   r0   rt  ru  r8  r;  r@  rA  rC  rD  rv  rw  ry  r   rz  r   r   r   r  rM   r   )6r6  r  r   rS   r  r  r  r  r   r   Zget_booking_ticketZ	ticket_noget_last_ticketr  r  r&  Zguest_kra_pinr"  Zpartner_kra_pinr  rE  r  r  r  Ztemp_inventory_data
guest_datar  Z	guest_objZvehicle_datar  Zvehicle_objfacility_datafacilityZfacility_obj	inventoryr^   rL  r  r  r  r   r  r  r  ri  r  r  r  r  rI  rC  rD  Zget_check_inr  rO   rO   rP   view_booking_by_ref  s   


















	































"

r  z/bookings/view/checked_inc           <   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	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 jd kj#t	jt jd k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(j+j,t(j+j-t(j+j.fk
rr } 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#t3j|	jkj' }x@|D ]8}i }|j6|d< |j7|d< |j| |jt;|j7 q@W ||
d< t<||
d< |	j"|
d< |	j|
d< d|
d< yBx<|j d  D ],}|d! |	jkr|d" |
d#< |	j|
d$< qW W nr t=tfk
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|
d(< |j|
 q|W td |idfS d S ))NrS  zStart date is empty.zStart date is missing.rT  zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r-  i  z.The start date cannot come after the end date.r   r   z9There are currently no checked in bookings in the system.r   r   )r   r   r   r   r   r   r   rz   r:  no_of_guestsr   r   r   r   z&background-color: #2196f3; color: #fffr   rS   r   r   r   r   zN/AzNetwork Errorr   r   )@r   r   r  r   r  r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   rW   rX   r   r   r  r  r  r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  r  r  r  r  r  )r-  r   r   r   r  r  r  r  r  r   r   guest_arrayr  get_all_guestsr  r  r  r  r  rO   rO   rP   view_all_checked_in_bookings.  s    




















r	  z/bookings/view/checked_outc           <   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	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 jd kj#t	jt jd k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(j+j,t(j+j-t(j+j.fk
rr } 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#t3j|	jkj' }x@|D ]8}i }|j6|d< |j7|d< |j| |jt;|j7 q@W ||
d< t<||
d< |	j"|
d< |	j|
d< d|
d< yBx<|j d  D ],}|d! |	jkr|d" |
d#< |	j|
d$< qW W nr t=tfk
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|
d(< |j|
 q|W td |idfS d S ))NrS  zStart date is empty.zStart date is missing.rT  zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r-  i  z.The start date cannot come after the end date.r   r   z:There are currently no checked out bookings in the system.r   r   )r   r   r   r   r   r   r   rz   r:  r  r   r   r   r   z&background-color: #73a533; color: #fffr   rS   r   r   r   r   zN/AzNetwork Errorr   r   )@r   r   r  r   r  r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   rW   rX   r   r   r  r  r  r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  r  r  r  r  r  )r-  r   r   r   r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  rO   rO   rP   view_all_checked_out_bookings  s    




















r
  z/bookings/view/confirmedc           <   C   sx  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"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
rf } 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
t/tj0t/j1kjt/j2tj3j#tj$d kj#tj|	jkj' }x@|D ]8}i }|j2|d< |j3|d< |j| |jt4|j3 qW ||
d< t5||
d< |	j"|
d< |	j|
d< d|
d< yBx<|j d  D ],}|d! |	jkr|d" |
d#< |	j|
d$< qW W nr t6tfk
r } zd%|
d#< |	j|
d$< W Y d d }~X n: t7t8fk
r4 } zd&|
d#< |	j|
d$< W Y d d }~X nX |	j|
d$< |	j|
d'< |	j|
d(< |j|
 qpW td |idfS d S ))NrS  zStart date is empty.zStart date is missing.rT  zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r-  i  z.The start date cannot come after the end date.r   r   z8There are currently no confirmed bookings in the system.r   r   )r   r   r   r   r   r   r   rz   r:  r  r   r   r   r   z&background-color: #fff; color: #000000r   rS   r   r   r   r   zN/AzNetwork Errorr   r   )9r   r   r  r   r  r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   rW   rX   r   r   r  r  r  r   r:  r  booking_guest_type_namer;  r  r  r  r  r  )r-  r   r   r   r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  rO   rO   rP   view_all_confirmed_bookings6  s    




















r  z/bookings/view/unconfirmedc           <   C   sx  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"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
rf } 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
t/tj0t/j1kjt/j2tj3j#tj$d kj#tj|	jkj' }x@|D ]8}i }|j2|d< |j3|d< |j| |jt4|j3 qW ||
d< t5||
d< |	j"|
d< |	j|
d< d|
d< yBx<|j d  D ],}|d! |	jkr|d" |
d#< |	j|
d$< qW W nr t6tfk
r } zd%|
d#< |	j|
d$< W Y d d }~X n: t7t8fk
r4 } zd&|
d#< |	j|
d$< W Y d d }~X nX |	j|
d$< |	j|
d'< |	j|
d(< |j|
 qpW td |idfS d S ))NrS  zStart date is empty.zStart date is missing.rT  zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r-  i  z.The start date cannot come after the end date.r   r   zRThere are currently no unconfirmed bookings between the given dates in the system.r   r   )r   r   r   r   r   r   r   rz   r:  r  r   r   r   r   z&background-color: #fff; color: #000000r   rS   r   r   r   r   zN/AzNetwork Errorr   r   )9r   r   r  r   r  r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   rW   rX   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  rO   rO   rP   view_all_unconfirmed_bookings'  s    




















r  z/bookings/view/check_in/todayc           )   C   s  t j } | jd}t j tdd }|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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d kj&tjj' j( }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|kj$tjd kj$tjdkj&tjj' j( }t)|dkrx|D ]}|j*| qW |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/j0t,j/j1t,j/j2f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krd|d< |jdkrd|d< |jdkrd|d< |jdkrd|d< n|js d|d< tjjt3jt4t3j5t4j6kjt4j7j$t3j%d kj$t3j|jkj8 }tjjt9j$t9j%d kj$t9j|jkj8 }y2|r|j7|d< n|r|j:|d< n
|j|d< W n  t;k
r   |j|d< Y nX |jd krd|d< d|d< n|jdkrd|d< d |d< d!|d"< g }g }tjjt<jt=t<j>t=j?kjt@t<jAt@jBkjt=jCt=j?t<jDt<jEt<jFt<jGj$t<j%d kj$t<jtHd#kj$t@j|jkjItJtKj( }x@|D ]8}i }|jC|d$< |jD|d%< |j*| |j*tL|jD qW ||d&< tM||d'< |j#|d(< |j|d)< yBx<|
jN d* D ],}|d+ |jkr$|d, |d-< |j|d.< q$W W nr tOtPfk
r } zd/|d-< |j|d.< W Y d d }~X n: tQtRfk
r } zd0|d-< |j|d.< W Y d d }~X nX |j|d.< |j|d1< |j|d2< tjjtSjtSjtSjTtSjUj$tSj|jkj( }t)|dkr.d3|d4< n.d3}x |D ]}|jU}||d5 7 }q8W ||d4< |j*| qxW t+d*|idfS d S )6Nz%Y-%m-%dr   )r/  z$3216010b-7c03-48b4-b82e-6c8ea5e3096br   z7There are currently no bookings to be checked in today.r   r   r   )r   r   r   r   r   r   rz   r  r  rQ   zIncomplete Paymentr  r   r  z
To InvoicezNot Paidr   zChecking Inbooking_check_in_statusz&background-color: #0084ff; color: #fffr   z
Checked Inz&background-color: #2ecc71; color: #fffzNot Checked Outbooking_check_out_statusr   r:  r  r   r   r   r   rS   r   r   r   r   zN/AzNetwork Errorr   r   r  vehicle_registration,)Vr   r   r   r   r   r?   rL   r   r   	outerjoinr   r   r{   r  r   r   r   r   r  r  r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   r  r   r   rW   rX   r   r   r  r  r  r3   r2   r  r  r  r  r(   r  rk   r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  r  r  r<   r@   r  r  r   r  r  r  r  r   r  r  )r   r   yesterday_datetime	yesterdayr  return_yesterday_bookingsreturn_yesterday_bookingr   r  r  r  r  r   r   r  r   r  r  r  r  r  r  r  r  check_in_vehiclevehicle_strr  r  rO   rO   rP   #view_all_bookings_to_check_in_today  s    






















r  z/bookings/view/inspectionc              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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d kj"tj
j# j$ }|sg }|j%d t&d|idfS g }g }x|D ]}|j%|j  qW xX|D ]N}i }|j	|d< |j|d< |j|d< |j|d< |j|d	< |j|d
< |jd kr|d|d< d|d< n|jdkrd|d< d|d< |j|d< |d dkrtjjt'jt(t'j)t(j*kjt(j+j t'j
|j	kj, }|j+|d< nB|d dkr*tjjt-j t-j
|j	kj, }	|	j.|d< n
|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$ }tjjt?jt?j
t?j@t?jAj t?j
|d kj$ }tB|dkrd|d< d|d< nLd}d}x2|D ]*}|jA}|j@}||d 7 }||d 7 }qW ||d< ||d< x6|D ].}i }|j7|d< |
j%| |j%tC|j7 q^W |
|d< tD||d< |j|d< tjjtEj tEj!d kj tEjFdkj tEj
|j	kj<t=t>j$ }g }|s
d |d!< d"|d< nRx$|D ]}|jG}|r|j%d qW d|krLd#|d!< d$|d< nd%|d!< d&|d< |j%| qW t&d'|idfS d S )(Nz%Y-%m-%dz6There are currently no bookings to be inspected today.r   r   r   r   r   r   r   r   zChecking Inr  z&background-color: #0084ff; color: #fffr   r   z
Checked Inz&background-color: #2ecc71; color: #fffrz   8D7E6504r   C3237489r   r   r  r  driver_namer  r  r   r   r   zNot InspectedZinspect_alert_statusz&background-color: #f0932b; color: #fffZAlertz&background-color: #e74c3c; color: #fffZOkayz&background-color: #73a533; color: #fffrS   )Hr   r   r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   r   r   r3   r2   r  r  r  r  r(   r  r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  r  r  r<   r@   r   r  r  r  r  r  r   r  r6  )r   r   r  r   r  r  r   r   r  r   r  r  r  r  r  
driver_strr  r  r  r  r  r  Z	alert_arrr  r6  rO   rO   rP   view_all_bookings_inspectionf  s    





















r  z/bookings/view/inpected-alertedc           0   C   s  yt tjd } W n tk
r*   d} Y nX yt tjd }W n tk
rV   d}Y nX | dkrtj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j jttj }nrtj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j jttj| |dj}g }t|sjg }|jd td|id	fS x|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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%j3jtj!|jkjtjj j4 }|s>g }|jd
 td|idfS i }i }y(t5|j	| |d |d< |d |d< W n4 tk
r }	 zd|d< d|d< W Y d d }	~	X nX |j|d< |j|d< |j|d< tj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|jkjtjj jttj }
t6|
dkrd|d< g }x|
D ]}i }|j|d< |j|d< |j|d< |j|d< i }y(t5|j	| |d |d< |d |d< W n4 tk
r }	 zd|d< d|d< W Y d d }	~	X nX |j| qNW ||d< nd|d< d|d< |j
}||d< |r(d|d< nd|d< |j!|d< |j2|d< |j#|d< |j(|d< |j)|d < |j0|d!< |d d"krtjjt7jt8t7j9t8j:kjt8j;jt7j|j!kj4 }|j;|d#< nB|d d$krtjjt<jt<j|j!kj4 }|j=|d#< n
|j,|d#< g }g }tjjt>jt?t>j@t?jAkjtBt>jCtBjDkjt?jEt?jAt>jFt>jGt>jHt>jIjt>jd kjt>j&tJd%kjtBj|j!kjttj }tjjtKjtKjtKjLtKjMjtKj|d kj }t6|dkrd|d&< d|d'< nLd}d}x2|D ]*}|jM}|jL}||d( 7 }||d( 7 }qW ||d&< ||d'< x6|D ].}i }|jF|d)< |j| |jt |jF q(W ||d*< tN||d+< |j3|d,< |j| qrW td-|idfS d S ).Nr  r   r  2   r   Fz&The search did not return any results.r   i  z There are currently no bookings.r   r   r   r  note_public_idrJ  r   rP  action_takenalert_updater  update_notesrR  r6  z&background-color: #e74c3c; color: #fffr   z&background-color: #73a533; color: #fffr   r   r   r   r   rz   r  r   r  r   r  r  r  r  r   r   r   rS   )Or  r   r  rk   r?   rL   r   r   r  r   r6  r{   rJ  r  rK  r   r   r   r  r   r   r  r<   r@   r   r  r  setr   r   r   r  r   r   r   r   r   r   r  r  r   r   r*  r+  r   r	  r  r   rz   r&  r   r  r  r  r  r3   r2   r  r  r  r(   r  r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  r  r   r  r  r  )r  r  r  r   r   rJ  return_bookingr   r  r   Zget_ranger_note_updatesupdate_ranger_notesr  update_ranger_note_obuser_info_updater6  r  r   r  r  r  r  r  r  r  r  r  r  r  rO   rO   rP   view_all_bookings_alert   s(   

  






 




















r)  z*/bookings/view/inpected-unticketed-alertedc            i   C   sz  yt tjd } W n tk
r*   d} Y nX yt tjd }W n tk
rV   d}Y nX | dkrtj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d kjtjj jtt j! }ntj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d kjtjj jtt j"| |dj#}g }|sg }|j$d t%d	|id
fS x|D ]}|d }i }i }y(t&|j	| |d |d< |d |d< W n4 tk
r@ }	 zd|d< d|d< W Y d d }	~	X nX |j|d< |j|d< |j|d< y:tjjt'jt'j(|jkjtt j) }
|
j*}||d< W n, tk
r }	 zd|d< W Y d d }	~	X nX y:tjjt+jt+j,|jkjtt j) }|j-}||d< W n, tk
r. }	 zd|d< W Y d d }	~	X nX yL|jrvtjjt.jt.j/|jkjtt j) }|rp|j0}nd}nd}W n( tk
r }	 z
d}W Y d d }	~	X nX |j
}|jd krd}n|j}|jd krd}n|j}||d< ||d< ||d< |j|d< |jpd|d< ||d< |jd kr(d}n|j}|jd kr@d}n|j}||d< ||d< tj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d kj! }t1|dkr>d|d< d|d< g }g }x8|D ].}|d }i }|j|d< |j|d< |j|d< |j|d < i }y(t&|j	| |d |d< |d |d< W n4 tk
r }	 zd|d< d|d< W Y d d }	~	X nX y>tjjt2jt2j3|jkj) }|j4}|j3}||d!< ||d"< W n4 tk
r }	 zd|d!< d|d"< W Y d d }	~	X nX |j$| ||d#}|j$| qW ||d$< ||d%< nd|d%< d&|d< d'|d< |j$| qW t%d(|id)fS d S )*Nr  r   r  r  r   rQ   Fz&The search did not return any results.r   i  r   r   r  r   rJ  r   rL  gater6  infantsguider  r@  vehicle_typeadultchildrenrP  r!  z&background-color: #73a533; color: #fffr   r"  r  rz   r   )rz   r   update_bookingsr#  rR  z&background-color: #e74c3c; color: #fffrS   r   )5r  r   r  rk   r?   rL   r   r   r  r   r6  rJ  r{   r  rL  r  rK  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#   r2  r1  r6   rh  r  r  r   r   rz   ) r  r  r  r   r   resultrJ  r   r  r   Zdestination_dbdestination_nameZgate_dbr1  Z
vehicle_dbZvehicle_type_namer6  r+  r,  Zadult_numberZchildren_numberZget_ranger_update_notesr&  r0  Zupdate_resultr  r'  r(  r%  rz   r   booking_datarO   rO   rP   "view_all_bookings_unticketed_alert  s,   













r4  z/bookings/view/check_out/todayc           )   C   s  t j } | jd}t j tdd }|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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dkj#tjd kj%tjj& j' }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!tj"j#tj$d kj#tj|kj#tjd kj#tjdkj%tjj& j' }t(|dkrx|D ]}|j)| qW |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+j.j/t+j.j0t+j.j1fk
r~ } zW Y d d }~X nX xN|D ]D}i }|j|d< |j!|d< |j|d< |j|d< |j|d< |j|d< |jdkrd|d< |jdkrd|d< |jdkr
d|d< |jdkr d|d< n|js0d|d< tjjt2j	t3t2j4t3j5kjt3j6j#t2j$d kj#t2j|jkj7 }tjjt8j#t8j$d kj#t8j|jkj7 }y2|r|j6|d< n|r|j9|d< n
|j|d< W n  t:k
r   |j|d< Y nX |jd krd|d< d|d< n|jdkr*d|d< d |d< g }g }tjjt;j	t<t;j=t<j>kj	t?t;j@t?jAkjt<jBt<j>t;jCt;jDt;jEt;jFj#t;j$d kj#t;jtGd!kj#t?j|jkjHtItJj' }x@|D ]8}i }|jB|d"< |jC|d#< |j)| |j)tK|jC qW ||d$< tL||d%< |j"|d&< |j|d'< |j}|dkr6d(|d)< nD|dkrJd*|d)< n0|dkr^d+|d)< n|dkrrd,|d)< nd-|d)< yBx<|
jM d. D ],}|d/ |jkr|d0 |d1< |j|d2< qW W nr tNtOfk
r } zd3|d1< |j|d2< W Y d d }~X n: tPtQfk
r. } zd4|d1< |j|d2< W Y d d }~X nX |j|d2< |j|d5< |j|d6< tjjtRjtRjtRjStRjTj#tRj|jkj' }t(|dkrd7|d8< n.d7}x |D ]}|jT}||d9 7 }qW ||d8< |j)| qW t*d.|idfS d S ):Nz%Y-%m-%dr   )r/  z$3216010b-7c03-48b4-b82e-6c8ea5e3096br   z8There are currently no bookings to be checked out today.r   r   r   )r   r   r   r   r   r   rz   r  r  rQ   zIncomplete Paymentr  r   r  z
To InvoicezNot Paidr   zChecking Outr  z&background-color: #9b59b6; color: #fffr   zChecked Outz&background-color: #e74c3c; color: #fffr   r:  r  r   r   r   r   PAIDr  r   r   z
TO INVOICEzNOT PAIDrS   r   r   r   r   zN/AzNetwork Errorr   r   r  r  r  )Ur   r   r   r   r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   r  rz   r&  r   r  r   r   r   r   r   r  r   r   rW   rX   r   r   r  r  r  r3   r2   r  r  r  r  r(   r  rk   r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  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  r  r  r  r  r  r  r  r  rO   rO   rP   $view_all_bookings_to_check_out_today  s4   






























r6  z/bookings/view/overstaysc        !   )   C   s  t j } | jd}t j tdd }|jd}| jd}| jddj }| jddtdd jddtdd }|j }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|kj%t
jdkj%t
jd kj't
jj( j) }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#tj$j%t
j&d kj%t
j|kj%t
j|k j%t
jdkj%t
jd kj't
jj( j) }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|kj%t
jd kj%t
jdkj't
jj( j) }	t*|	d	krx|	D ]}
|j+|
 qW |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 xD|D ]:}i }|j|d< |j#|d< |j|d< |j|d< |j|d< |j!|d< tjj	t4jt5t4j6t5j7kjt5j8j%t4j&d kj%t4j|jkj9 }tjj	t:j%t:j&d kj%t:j|jkj9 }y2|rl|j8|d< n|r~|j;|d< n
|j|d< W n  t<k
r   |j|d< Y nX |jd krd|d< d|d< n|jdkrd|d< d|d< g }g }tjj	t=jt>t=j?t>j@kjtAt=jBtAjCkjt>jDt>j@t=jEt=jFt=jGt=jHj%t=j&d kj%t=jtIdkj%tAj|jkjJtKtLj) }x@|D ]8}i }|jD|d< |jE|d< |j+| |j+tM|jE qtW ||d< tN||d < |j$|d!< |j|d"< |j }|dkrd#|d$< nD|d%krd&|d$< n0|d'krd(|d$< n|dkr.d)|d$< nd*|d$< yBx<|jO d+ D ],}|d, |jkrF|d- |d.< |j|d/< qFW W nr tPtQfk
r } zd0|d.< |j|d/< W Y d d }~X n: tRtSfk
r } zd1|d.< |j|d/< W Y d d }~X nX |j|d/< |j|d2< |j|d3< tjj	tTjtTjtTjUtTjVj%tTj|jkj) }t*|d	krPd4|d5< n.d4}x |D ]}|jV} || d6 7 }qZW ||d5< |dkrd#|d7< nD|d%krd&|d7< n0|d'krd(|d7< n|dkrd)|d7< nd*|d7< |j+| qW t,d+|idfS d S )8Nz%Y-%m-%dr   )r/  z%Y-%m)day   r  z$3216010b-7c03-48b4-b82e-6c8ea5e3096br   z8There are currently no bookings to be checked out today.r   r   r   )r   r   r   r   r   r   rz   r   zChecking Outr  z&background-color: #9b59b6; color: #fffr   zChecked Outz&background-color: #e74c3c; color: #fffr   r:  r  r   r   r   r   r5  r  rQ   r   r  r   z
TO INVOICEzNOT PAIDrS   r   r   r   r   zN/AzNetwork Errorr   r   r  r  r  r  )Wr   r   r   r   r   r  r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   r  rz   r&  r   r  r   r   r   r   r   r  r   r   rW   rX   r   r   r  r  r  r3   r2   r  r  r  r  r(   r  rk   r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  r  r  r<   r@   r  r  r   r  r  r  r  r   r  r  )!r   r   r  r  Z
this_monthZfirst_day_of_monthZlast_day_of_monthr  Zreturn_overstays_this_monthr  r  r   r  r  r  r  r   r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  rO   rO   rP   view_all_overstays_this_month_  s\   


(



































r9  z/bookings/view/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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tj|kB 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
rX } 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t/t.j0t/j1kjt2t.j3t2j4kjt/j5t/j1t.j6t.j7t.j8t.j9j t.j!d kj t.jt:dkj t2j
|j	kj;t<t=j$ }x@|D ]8}i }|j5|d< |j6|d< |
j%| |j%t>|j6 q@W |
|	d< t?||	d< |j|	d< |j|	d< yBx<|j@ d D ],}|d |jkr|d |	d< |j|	d< qW W nn tAk
r } zd|	d< |j|	d< W Y d d }~X n: tBtCfk
rT } zd|	d< |j|	d< W Y d d }~X nX |j|	d< |j|	d< |j|	d< |j%|	 qbW t&d|idfS d S )Nz%Y-%m-%dz>There are currently no bookings to be checked in or out today.r   r   r   )r   r   r   r   r   r   r   rz   r   r:  r  r   r   r   r   rS   r   r   r   r   zN/AzNetwork Errorr   r   )Dr   r   r   r?   rL   r   r   r  r   r   r{   r   r   r   r   r  r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   r   r   rW   rX   r   r   r  r  r  r&   r,   r]  r8  r$   r\  rM  r  r^  r_  ra  rc  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  rO   rO   rP   view_all_bookings_todayC  s    

















r:  z/bookings/view/abandonedc               C   sz  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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!dk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'j*j+t'j*j,t'j*j-fk
rt } 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t.tj/t.j0kjt.j1tj2jtjd kjtj|jkj$ }
x@|
D ]8}i }|j1|d< |j2|d< |j%| |	j%t3|j2 q"W ||d< t4|	|d< |j!|d< |j|d< yBx<|j5 d D ],}|d |jkr|d |d< |j|d< qW W nn t6k
r } zd|d< |j|d< W Y d d }~X n: t7t8fk
r6 } zd|d< |j|d< W Y d d }~X nX |j|d< |j|d< |j|d< |j%| q~W t&d|idfS d S )Nz$3b5376e0-a4dc-476e-aebc-6280b44b756ar   r   z8There are currently no abandoned bookings in the system.r   r   r   )r   r   r   r   r   r   r   rz   r:  r  r   r   r   r   rS   r   r   r   r   zN/AzNetwork Errorr   r   )9r?   rL   r   r   r   r   r  r   rF   r  r   r  r   r   r{   r   r   r   r  r  r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r  r   r   r   r   r   rW   rX   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  rO   rO   rP   view_all_abandoned_bookings  s    
















r;  z/bookings/confirmPATCHc           .   C   s\  g } t jjtjtjd kjtjdkj dkr8tj	  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 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 | rg }|jd	 t|| d
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$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 t&d|_t'j( |_y0t jj)  t*t  g }|jd td|idfS  t+k
rV } z8t,| t jj-  t*t  g }|jd td|idfS d }~X nX d S )Nz$3b5376e0-a4dc-476e-aebc-6280b44b756ar   r{   zBooking ID is empty.zBooking ID is missing.r   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.)r   r-  i  r   z&That booking does not appear to exist.r   r   r   z/Booking confirmed successfully. Please proceed.zKThere was a slight issue confirming that order. :-( Please try again later.).r?   rL   r   r   r   r   r  r   rF   r  r   r   r  r   r  r   r   r  r  r  r   r   r   r   r*  r+  r   r	  r  r   r   r   rz   r&  r   r   r  r  r  r   r   r   rM   rk   r  r  )r-  r   r   r%  rO   rO   rP   confirm_single_booking  sl    








r=  z#/bookings/view-checkin/<booking_id>c       -   G   C   s  t j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| kjttj }|sg }|jd td|idfS g }x|D ]}i }|j|d< |j|d< |j|d< |j	|d< |jjd|d	< |jjd|d
< |j
|d< |jdkrd|d< |jdkr(d|d< |jdkr<d|d< |jdkrRd|d< n|jsbd|d< |j|d< |j|d< |j|d< |j r^|jdkr^d|d< t jjt jt jd kjt j!|jkjttj" }|rft#j$t%j&|j'}y|j( d |d< W n t)k
r   d |d< Y nX |j*}|dkr@|d d |d< n|d krTd!|d< nd"|d< nd#|d< t jjt+jt+j!|jkjt+jt,d$kj" }	|	j-}
|
rd|d%< t jjt.jt.jd kjt.j/|	j-kj" }y|j0|d&< |j/|d'< W n4 t)k
r } zd(|d&< d(|d'< W Y d d }~X nX t jjt1jt1jd kjt1j2|	j3kj" }y|j4|d)< |j2|d*< W n4 t)k
r } zd(|d)< d(|d*< W Y d d }~X nX |	j5|d+< nd#|d%< t jjt6jt6j!|jkjt6jt,d$kj" }t jjt7jt7j8|j9kjt7j:d kj" }|ryF|j;|d,< t jjt<j=jt<j>|j;kjttj" \|d-< d|d.< W n. t?k
r~   d |d,< d |d-< d#|d.< Y nX nd |d,< d |d-< d#|d.< |ry|j:|d/< W n t?k
r   d |d/< Y nX nd |d/< t jjt@jt@j!|jkjt@jd kjttj }g }|sg }nx|D ]}i }|jA|d0< |jB|d1< |jC|d2< |jD|d3< |j|d4< |jE}t jjtFjtFjGtFjHjtFjH|kjttj" }|jG|d5< |jH|d6< |jI|d7< |jJ}|dkrd|d8< nd#|d8< |j| q"W t jjt7jKtFt7jLtFjHkjKt6t7j8t6j9kjtFjGtFjMtFjHtFjNt7j:t7jOt6j;jt7jt,d$kjt7jd kjt6j!| kjt7j:d kjt6jt,d$kjtFjMdkjttj }g }xJ|D ]B}i }d|d9< |jH|d6< |jG|d5< |j:|d:< d;|d7< |j| qW g }t jjtPjtPjd kjtPjt,d$kjtPj!| kjttj }x\|D ]R}t#j$tQj&|jR}y|j( d< d  d }W n( t)k
r } z
d(}W Y d d }~X nX |jSri } t jjtFjtFjd kjtFjH|jSkj" }!|!jM}"|"dkrd| d9< |!jH| d6< |!jG| d5< |jT| d:< || d7< |j|  |jUri } t jjtFjtFjd kjtFjH|jUkj" }!|!jM}"|"dkrd| d9< |!jH| d6< |!jG| d5< |jV| d:< || d7< |j|  |jW	r i } t jjtFjtFjd kjtFjH|jWkj" }!|!jM}"|"dk	r d| d9< |!jH| d6< |!jG| d5< |jX| d:< || d7< |j|  |jYr,i } t jjtFjtFjd kjtFjH|jYkj" }!|!jM}"|"dkr,d| d9< |!jH| d6< |!jG| d5< |jZ| d:< || d7< |j|  q,W t[|d k
rx|D ]}#|#d: }$|#d6 }%|#d7 }&d }'t[|d k
rx:|D ]2}|d7 }(|d6 })|)|%k	r|(|&k	r|'d7 }'	qW |$|' }*|*d k	rxrt\|*D ]f}+i },d(|,d0< d(|,d1< d(|,d2< d(|,d3< |j|,d4< |#d5 |,d5< |#d6 |,d6< |&|,d7< d#|,d8< |j|, 
qW 	qW t[|d krx|D ]}|d: }$|d6 }%|d7 }&d }'t[|d krx:|D ]2}|d7 }(|d6 })|)|%k
r|(|&k
r|'d7 }'
qW |$|' }*|*d k
rxrt\|*D ]f}+i },d(|,d0< d(|,d1< d(|,d2< d(|,d3< |j|,d4< |#d5 |,d5< |#d6 |,d6< |&|,d7< d#|,d8< |j|, q(W 
qW ||d9< |j| qW td<|idfS d S )=Nz<The selected booking does not appear to exist in the system.r   r   r   r   r   r*  z%A, %d %b %Yr~   r   r+  r   r  r  rQ   zIncomplete Paymentr  r   r  z
To InvoicezNot Paidr   rz   r   PB001A20TZ
is_partnerr@  r   z To PayrX  r   zGuest To PayzNot SpecifiedFr   rB  r/  r0  r  r1  r2  rD  r-  rL  r.  r^  r|   r}   rK  rL  rN  r  r8  rM  rQ  rJ  r1  Z	ResidencyrS   )]r?   rL   r   r   r  r   r   r   r   r*  r+  r   r	  r  rz   r   r   r   r  r  r&  r   r4  r5  r   r  r<   r@   r   r   r   r   r/   r{   r  rW   rh   r  rj   r  r   rk   rX  r   r  rB  r8   r0  r/  r#   r2  rC  r1  rD  r$   r&   r\  rM  r^  rL  r!   r	  r
  r  r  r|   r}   rK  rL  r  r,   r  r8  rM  rQ  r  r]  rJ  payment_person_income_coder[  r)   get_inventory_detailsr  $inventory_booking_children_residencyr  "inventory_booking_adults_residencyr  (inventory_booking_extra_adults_residencyr  *inventory_booking_extra_children_residencyr  r  range)-r{   r  r   rS   r   r   r"  r  rX  r!  rB  r  r   r  r  r  r  rJ  rO  r  r  r  r  get_all_gatepass_guestsr  r  r  inventory_arrayr   single_inventoryr  r  inventory_dataZget_residency_nameZproofsingle_guestr;  Zguest_idrM  Zguest_proofed_numberZresidency_proof_pointZresidency_guest_idZto_proof_numberr  Z	proof_objrO   rO   rP   view_single_checkin_bookingc  s@   

































































rK  z/bookings/check_inc              C   s	  yt jd } W n tk
r&   d } Y nX yt jd }W n tk
rN   d }Y nX | sg }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 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 y(t jd	 j  t jd	 s*|jd
 W n. tk
rZ } z|jd W Y d d }~X nX t jd rxt jd D ]~}y$|d j  |d s|jd W n. tk
r } z|jd W Y d d }~X nX y$|d j  |d s|jd W n. tk
r" } z|jd W Y d d }~X nX y$|d j  |d sF|jd W n. tk
rv } z|jd W Y d d }~X nX y$|d j  |d s|jd W n. tk
r } z|jd W Y d d }~X nX t|d }|d sv|j|d d  qvW |rtd|idfS tj	 t
dd }|jd}tjjtjtjd kjtjt jd kj }|js|sg }	|	jd  td!|	idfS tjjtjtjt jd k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 tj |
jk rg }	|	jd# td!|	id$fS yt jd% }W n( tk
rT } z
g }W Y d d }~X nX t|dkryRxJ|D ]@}g }y|d& s|jd' W n. tk
r } z|jd( W Y d d }~X nX y|d) s|jd* W n. tk
r } z|jd+ W Y d d }~X nX y|d, s |jd- W n. tk
rP } z|jd. W Y d d }~X nX y|d/ sh|jd0 W n. tk
r } z|jd0 W Y d d }~X nX |rptd|idfS qpW W n< tk
r } zg }	|	jd1 td!|	id$fS d }~X nX tjjtjtjd kjtj|
jkjttj  }x|D ]}d|_tj |_!q0W yt"|t jd t jd	  W n< tk
r } zt#j$ }tt%||d2dfS d }~X nX |
j&sRtjjt'jt'jd kjt'j(tj jdkj }|s0t)d }t't%t*j+ tj jd||t jd	 tj tj d3}tjj,| nt)|j-}||_-tj |_!||
_&n|
j&}d|
_tj |
_.tj |
_!tjjtjtjd kjtjt jd kj }|js|r||_t jd |_/tj |_!t jd rPxxt jd D ]j}|d j0 }tjjt1jt1jd kjt1j2j3|jt1jd kj  }x |D ]}|
j|_tj |_!q.W qW t4t%t*j+ t jd d4t jd	 tj d5}tjj,| | sxjt jd D ]\}t5t%t*j+ |
j|d j6 |d |d j0 |d t jd	 tj tj d6	}tjj,| qW y>tjj7  t8t g }|jd7 t|d8j9t jd d9d:fS  tk
	r } z8t:| tjj;  t8t g }|jd; td!|idfS d }~X nX d S )<Nactivity_check_inrL  r{   zBooking ID is empty.zBooking ID is missing.sourcezSource is empty.zSource is missing.r   zSession ID is empty.zSession ID is missing.r   r  zDriver name is empty.zDriver name is missing.r  zVehicle registration is empty.z Vehicle registration is missing.ZdiskzDisk is empty.zDisk is missing.r)  zPhone number is empty.zPhone number is missing.r   z is invalid.r-  i  r   )r/  z%Y-%m-%dzDestination must be set.r   zJThe selected booking either does not exist or has already been checked in.zPThe selected booking cannot be checked in as the check-in date is in the future.i  rJ  r|   zFirst name is empty.zFirst name is missing.r}   zLast name is empty.zLast name is missing.rK  zDocument id is empty.zDocument is missing.rQ  zPlease verify all residencies.z(Error occurred while prooving residency.)r   r   )r  r  r  r  r   r   r   zBooking checked in)r   r{   r   r   r   )	r  r{   r  r  r  r  r   r   r   z$Check in successful. Please proceed.z3https://bookings.olpejetaconservancy.org/booking/{})r   urlr   z=There was a slight issue checking in. Please try again later.)<r   r   rk   r  r   r  r  r   r   r   r   r   r?   rL   r   r$   r   r   r{   r  rL  r   r   r	  r  r   r   r  r  r  r<   r@   r   r   r  r   r   r   r  r   r  rC   r   r   r   r  r*  r  r  r   r  r  r   r   r|  r   rM   rj   r  r  )rL  rL  r-  r   r  r  r  r  r  r   r%  r   rJ  single_residency_proofresidecy_proof_dbsingle_proofr   r   r  r  r  r  r  rJ  r   r  rO   rO   rP   check_in_single_booking  s   



















"













rR  z/bookings/check_outc           ,   C   sR  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d	fS tj jd
}t	j
jtjtjt jd kjtjd kjtjdkjtjd kj }|sHg }|jd td|idfS tj |jk rvg }|jd td|idfS d|_tj |_tj |_tttj t jd dt jd tj d}t	j
j| y0t	j
j  tt	 g }|jd td|idfS  tk
rL } z8t| t	j
j  tt	 g }|jd td|id	fS d }~X nX d S )Nr{   zBooking ID is empty.zBooking ID is missing.r   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.)r   r-  i  z%Y-%m-%dr   zCThat booking either does not exist or has already been checked out.r   r   zQYou cannot check-out the selected booking as the check-out date is in the future.i  zBooking checked out)r   r{   r   r   r   z%Check out successful. Please proceed.zBThere was a slight issue checking out. :-( Please try again later.) r   r   r  r   r  r   r   r   r   r?   rL   r   r   r   r   r   r	  r  r  r   r+  r   r   r   r   r   r   r   rM   rk   r  r  )r-  r   r   r   r%  r   r   rO   rO   rP   check_out_single_booking"  sr    








rS  z/bookings/modifyc              C   s  ddddddddddd	id
ddg} t tj| }ytjd d j }tjd d j }tjd d j }tjd d }d}d}ddddddddddddg}|t tjd | }W n tk
rJ   tjd j }tjd j }tjd j }tjd }tjd }d }ddddddddddddg}	|t tj|	 }Y nX |rbt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 }|s
g }|jd" td#|id$fS |jtjd% kr:g }|jd& td#|idfS tjd f|_tjd f|_td'|_tj |_|j}|j}|j }|}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
r<   d }Y nX |ryvtj#t$d*|id+}|j%d,kr|t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d0 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 }y|j)}tjjt*jt*j+|kjt*jtd'kj, } x"| D ]}!td'|!_tj |!_q`W tjjt-jt-j+|kjt-jtd'kj, }"x"|"D ]}#td'|#_tj |#_qW tjjt.jt.j+|kjt.jtd'kj, }$x"|$D ]}%td'|%_tj |%_q W W n tk
r6   Y nX tjjt/jt/j(|kj0t/j1j2 j }&t3d1|& tjjt/jt/j(|kjt/jtd'kj, }'x"|'D ]}(td'|(_tj |(_qW tjjt4jt4j(|kjt4jtd'kj, })x"|)D ]}*td'|*_tj |*_qW g }+g },x"tjd2 D ]}-|+j|-d3  qW tjjt5jt5j(|kjt5j6d kjt5j7d kjt5jtd'kjt5jtd4kj, }.x|.D ]}/|,j|/j8 qW xJ|,D ]B}0|0|+krn0tjjt5jt5j(|kj }1td'|1_tj |1_qW g }2g }3yx"tjd5 D ]}4|2j|4d3  qW tjjt5jt5j(|kjt5j6d kjt5j7dkjt5jtd'kjt5jtd4kj, }5x|5D ]}6|3j|6j8 qzW xJ|3D ]B}7|7|2krn0tjjt5jt5j8|7kj }8td'|8_tj |8_qW W n$ tk
r }9 zW Y d d }9~9X nX g }:g };x"tjd6 D ]}<|:j|<d7  qW tjjt9jt9j(|kjt9j6d kjt9jtd'kjt9jtd4kj, }=x|=D ]}>|;j|>j: q~W xJ|;D ]B}?|?|:krn0tjjt9jt9j:|?kj }@td'|@_tj |@_qW td'|_tj |_xtjd8 D ]}Atjjt;jt;j<|Ad9 kj }Byt&|Ad: }CW n tk
	rN   d!}CY nX t4t=t>j? |t@|BjAj |Ctjd
 tj d;}DtjjB|D 	q W ytjd< }EW n( tCk
	r }F z
d }EW Y d d }F~FX nX ytjd= }GW n( tCk

r  }H z
d }GW Y d d }H~HX nX ytjd> }IW n( tCk

r8 }J z
d }IW Y d d }J~JX nX t3d?|I ytjd@ }KW n( tCk

rz }L z
d }KW Y d d }L~LX nX ytjdA dB }MW n( tCk

r }N z
d }MW Y d d }N~NX nX ytjdC }OW n( tCk

r }P z
d }OW Y d d }P~PX nX ytjdD }QW n( tCk
r& }R z
d }QW Y d d }R~RX nX ytjdE }SW n( tCk
r^ }T z
d }SW Y d d }T~TX nX |Ksl|&jD}K|Msx|&jE}M|Os|&jF}O|Is|&jG}I|Es|&jH}E|Gs|&jI}G|Qs|&jJ}Q|Ss|&jK}St/t=t>j? ||||||M|K|O|S|E|G|Q|Itjd
 tj dF}UtjjB|U ytjdG }VW n( tCk
r< }W z
d }VW Y d d }W~WX nX t=t>j? }Xt'|X|
|dH | |V|t=t>j? d dI |dtjd tjd tjd% dtjd
 tj dJ}YtjjB|Y xtjd8 D ]}ZtjjtLjMt;tLjNt;j<kjOtLjPtLjQtLjNtLjRtLjSt;jAjtLjQ|ZdK kjtLjN|Zd9 kj }[|[jS}Y|[jR}\tTtjd% |[jR|Y}]tjtUjV|[jR}^y,|^j d- d! dL }_|^j d- d! dM }`W n tk
r   d}_d}`Y nX |r|}an,ytW|ZdN }aW n tk
r   d!}aY nX |r|}bn(y|ZdO }bW n tk
r   d }bY nX yt&|Zd: }cW n tk
r2   d!}cY nX t-t=t>j? |X|Zd9 |c|a|ZdP tX|]dQ|ZdK |tjd% tX|Y|[jR|_tjd
 tj dR}AtjjB|A qW t.t=t>j? |X||||tjd
 tj dS}dtjjB|d xtjdT D ]}etjjtYjtYj6d kjtYjZ|edU kj }fy
|fj[}gW n, t\t]fk
rH }h z
d!}gW Y d d }h~hX nX tTtjd% |fj^|g}itjtUjV|fj^}^y,|^j d- d! dL }_|^j d- d! dM }`W n tk
r   d}_d}`Y nX |r|}jn,ytW|edV }jW n tk
r   d!}jY nX |r |}kn(y|edW }kW n tk
r&   d }kY nX yt&|edT }lW n tk
rR   d!}lY nX t*t=t>j? |X|edU |ltX|itjd% ||j|ktX|g|fj^|_tjd
 tj dX}mtjjB|m qW i }n||nd< ||ndY< ||nd< ||nd< g }oyt_tj|n|odZd[ W nD tk
r2 }9 z&t`ja }ptbjc }qtt=|9|qd\dfS d }9~9X nX g }rytdtj|n|rdZd[ W nD tk
r }9 z&t`ja }ptbjc }qtt=|9|qd\dfS d }9~9X nX tjtUjVtjd% }s|sj d- d! dL }t|sj d- d! dM }u|dH | |_ tjd% |_|t|_e|u|_ftjd |_tjd |_td'|_tj |_tgt=t>j? |d]tjd
 tj d^}vtjjB|v yztjd_ rtjjthjthj6d kjthj(|kjitjtkj, }wx|wD ]}xd|x_6tj |x_qW tltjd_ |tjd
  W n$ tk
r }9 zW Y d d }9~9X nX tjd` r6tmt=t>j? |tjd` tjd
 tj da}ytjjB|y y*tjjn  tot |dbkrtjjtpjtpj6d kjtpj(|kj, }z|zri }{tq|{| |{dc }|tjd% }}xB|zD ]:}~|||~_r|}|~_stt|}|~ju|~jv|~jw|~jx}||~_vtj |~_qW tjjn  tot |rFi }dd| de |df< |g|dg< dh|di< ||dj< ||dk< ||d< ty| g }|jdl td#|id,fS  tk
r   tjjz  tot tbjc }qg }|jdm t||qd\dfS X d S )nNr{   z
Booking ID)r"  r#  r$  zCheck-in dater%  zCheck-out dater"  r&  r   z
session IDr'  r|   r*  r(  r+  r   r   zMember first namezMember last namezMember email addresszMember phone numberr}   r,  r!  z
First namez	Last namezEmail addresszPhone numberr-  i  z%Y-%m-%dr   z*The selected booking is not in the system.r   i  rR   zJThe updated booking currency does not match the original booking currency.r   Z	send_mailz&The email address provided is invalid.r0  )r   r   rS   rX  r   zhThere was an issue getting the promo code details. Please try again or leave the promo code field blank.z@#@@@@get_latest_booking_detailZold_facilitiesfacility_booking_public_idr   Zold_external_facilitiesZold_inventoryr  r   r8  r1  )r9  r{   r:  r;  r   r   rB  rC  rE  zkra pin is herrer>  r?  r@  rA  rD  r=  )rF  r{   r|   r}   rG  r)  rH  rI  rA  r=  rB  rC  rD  rE  r   r   rL  r   r2  )rM  rN  rO  rL  rP  rQ  r{   rR  rS  rT  rU  rV  r   r   rb  rf   rg   rY  rZ  payment_person_discount_reasonrQ   )r[  r\  r]  r^  r_  r`  ra  rb  rc  rU  rd  re  rf  r   r   )rg  r\  r|   r}   rG  r)  r   r   r   rh  ri  discount_reason)rj  r\  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  r   r   r6  T)rR   )r   r   zBooking updated)r   r{   r   r   r   rx  rJ  )rK  r{   rJ  r   r   z$c9f036b1-eaec-4c92-bbd1-9e84895aeed3r   zBooking ID #z Updater   rx   z$reservations@olpejetaconservancy.orgry   rz   r   z!Successfully updated the booking.z@There was an error updating the booking. Please try again later.){r  r   r   r|  r  rk   r   r   r   r   r  r  r  r  rW   rh   get_latest_exchange_rater?   rL   r   r   r   r   r  r   r&  r   r   r  r  r   rz   r   r  r  rX   r  r  r  r$   r{   rM  r'   r\  r   r&   r%   r   r   r   r   r  r   r"   r   external_facilityrT  r)   r  r,   r8  r   r   r   r  r  r   r  rI  rH  rA  rE  rB  rC  rD  r=  r+   r  r  r  r  rW  r  r  rw   ri   rj   rV   rU   r6   rh  r  r  r  r  r  r   r   r   r   r  r4  r5  r   r  r  r<   r@   r  r   r   rM   r5   r  r8  rD  re   rC  r@  rv  rw  r   r  )r  r-  r|   r}   r(  r,  r   member_visitr  r  r   r~   r   r  r  Zexchange_rate_datar%  r   r{   r6  r   recipient_emailZ
send_emailr  r  r  r  r0  r  r  r  old_gatepass_idget_gatepass_vehiclessingle_vehicler  rJ  get_gatepass_detailssingle_gate_detailZget_latest_booking_detailr!  single_book_detailget_booking_guestssingle_book_guestZold_facility_list_uiZold_facility_list_dbZfacility_old_singleZget_booking_accommodationZfacility_old_db_singleZsingle_old_facilityZget_accommodationZold_external_facility_list_uiZold_external_facility_list_dbZexternal_facility_old_singleZ"get_booking_external_accommodationZexternal_facility_old_db_singleZsingle_old_external_facilityZget_external_accommodationr   Zold_inventory_list_uiZold_inventory_list_dbZinventory_old_singleZget_booking_activityZinventory_old_db_singleZsingle_old_inventoryZget_activityr  r  r;  r  rB  r  rC  r  rE  Zkra_pin_number_errorrI  r  rH  r  rA  r  rD  r  r=  r  r  rL  r  r\  r  r  r  rU  r  r  rm   rn   r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r   r   r  r  r  r  r   rP  rQ  r  Zget_transactionsr3  Znew_booking_totalZnew_booking_currencyZsingle_transactionZnew_balancer   rO   rO   rP   change_single_booking_dateg"  sR   

























































""












rc  z/bookings/postponec        !   E   C   sz  ddddddddddd	id
ddg} t tj| }y`tjd d j }tjd d j }ddddddddddddg}|t tjd | }W nd tk
r   tjd j }tjd j }ddddddddddddg}|t tj| }Y nX |rtd|idfS ytjd
 }W n tk
r:   d }Y nX tjjt	j
t	jtjd kj }|sg }|jd td|idfS |jf|_|jf|_tjd f|_tjd f|_td |_tj |_||_|j}	|j}
tjjtj
tjtd!kj
tj|	kj }y,|j}tjjtj
tj|kj
tjtd!kj }x(|D ] }td |_tj |_||_q@W tjjtj
tj|kj
tjtd!kj }x(|D ] }td |_tj |_||_qW tjjt j
t j|kj
t jtd!kj }x(|D ] }td |_tj |_||_qW tjjt!j
t!j|	kj
t!jtd!kj }x(|D ] }td |_tj |_||_qBW tjjt"j
t"j|	kj
t"jtd!kj }x(|D ] }td |_tj |_||_qW |j#}|j$}|j#|_%|j$|_&td |_tj |_|d" | f|_'tjd f|_#tjd f|_$tjd
 f|_tj |_W nV tk
r } z8tjj(  t)t t*j+ }t,j- }tt.||d#dfS d }~X nX i }|	|d< |
|d$< ||d< ||d< g }yt/tj||d%d& W nV tk
r } z8tjj(  t)t t*j+ }t,j- }tt.||d#dfS d }~X nX g }yt0tj||d%d& W nV tk
r } z8tjj(  t)t t*j+ }t,j- }tt.||d#dfS d }~X nX d't.| d( t.| d) t.tjd  d( t.tjd  }t1t.t2j3 |	||tj d*} tjj4|  y0tjj5  t)t g }|jd+ td|id,fS  tk
rt   tjj(  t)t t,j- }g }|jd- t||d#dfS X d S ).Nr{   z
Booking ID)r"  r#  r$  zCheck-in dater%  zCheck-out dater"  r&  r   z
session IDr'  r|   r*  zMember first namezMember last namer(  zMember email addressr+  zMember phone numberr}   z
First namez	Last namezEmail addressr,  zPhone numberr-  i  z*The selected booking is not in the system.r   i  r  r   r   )r   r   r6  T)rR   z$Booking postponed from checkin date z and checkout date z to checkin date )r   r{   r   r   r   z#Successfully postponed the booking.r   zBThere was an error postponing the booking. Please try again later.)6r  r   r   r|  rk   r   r?   rL   r   r   r   r   r  r   r   %before_postpone_booking_check_in_dater   &before_postpone_booking_check_out_dater  r  r   r   r   r   rz   r$   r{   rM  r'   r\  r   r&   r%   r   r   rS  rT  before_postpone_start_datebefore_postpone_end_daterO  r  rM   r   r   r   r   r   postponeFacilityBookingpostponeInventoryBookingr   r   r   r   r   )!r  r-  r|   r}   r  r  r   r%  r   r{   r6  r  r[  r\  r]  r  rJ  r^  r_  r!  r`  ra  rb  Zcurrent_checkin_dateZcurrent_checkout_dater   r   r   r  r  r  Zbookingdetsr   rO   rO   rP   postpone_booking_datez%  sJ   


























"
"
".



rj  z/bookings/cancelc           ,   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d	fS tjjt	j
t	jt jd kj
t	jd kj }|s"g }|jd
 td|idfS td|_tj |_tjjtj
tjd kj
tj|jkj }x"|D ]}td|_tj |_qfW tjjtj
tjd kj
tj|jkj }td|_tj |_tjjtj
tjd kj
tj|jkj }x"|D ]}td|_tj |_qW tjjtj
tjd kj
tj|jkj }	x"|	D ]}
td|
_tj |
_q@W tjjtj
tjd kj
tj|jkj }td|_tj |_tjjtj
tjd kj
tj|jkj }x"|D ]}td|_tj |_qW tjjtj
tjd kj
tj|jkj }td|_tj |_tjjtj
tjd kj
tj|jkj }x"|D ]}td|_tj |_qXW y0tjj  t t g }|jd td|idfS  t!k
r } z8t"| tjj#  t t g }|jd td|id	fS d }~X nX d S )Nr{   zBooking ID is empty.zBooking ID is missing.r   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.)r   r-  i  zThat booking does not exist.r   r   r   zThe booking has been cancelled.zHThere was a slight issue cancelling the booking. Please try again later.)$r   r   r  r   r  r   r?   rL   r   r   r   r   r   r  r  r  r   r   r   r   r{   r   r   r"   r)   r$   r&   r\  rM  r%   r'   r   rM   rk   r  r  )r-  r   r   r%  ra  each_booking_guestr!  get_all_facilitieseach_facilityget_all_inventoryeach_inventoryr  r  r  r^  r\  each_gatepass_vehiclerO   rO   rP   cancel_single_bookingl&  s    
























rq  z/bookings/deletec           \   C   sT  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jt	j
t	jt jd kj
t	jd kj }|s g }|jd
 td|idfS td|_d|_tj |_|j}|j}tttj t jd dt jd tj d}tjj| tjjtj
tjd kj
tj|jkj }x"|D ]}td|_tj |_qW tjjtj
tjd kj
tj|jkj }	ytd|	_tj |	_W n tk
r"   Y nX y
|	j}
W n tk
rH   d }
Y nX tjjt j
t jd kj
t j|jkj }x"|D ]}td|_tj |_qzW tjjt!j
t!jd kj
t!j|jkj }x"|D ]}td|_tj |_qW tjjt"j
t"jd kj
t"j|jkj }ytd|_tj |_W n tk
r>   Y nX yRtjjt#j
t#jd kj
t#j$|j%kj }x"|D ]}td|_tj |_qrW W n tk
r   Y nX yBtjjt&j
t&jd kj
t&j$|j%kj }td|_tj |_W n tk
r   Y nX yRtjjt'j
t'jd kj
t'j$|j%kj }x"|D ]}td|_tj |_q6W W n tk
rl   Y nX ytjj(  t)t |
ri }d| d |d< |
dg|d< d|d< ||d< ||d< t jd |d< t*| g }|jd td|idfS  tk
rN } z>t+| tjj,  t)t g }|jd t|t|dd	fS d }~X nX d S )Nr{   zBooking ID is empty.zBooking ID is missing.r   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.r-  i  zBThe selected booking does not exist or has already been cancelled.r   r   r   r   zBooking cancelled)r   r{   r   r   r   zBooking ID #z Cancellationr   z)cancelledbookings@olpejetaconservancy.orgrx   z$reservations@olpejetaconservancy.orgry   rz   r   zThe booking has been cancelled.zHThere was a slight issue cancelling the booking. Please try again later.)r   r  )-r   r   r  r   r  r   r?   rL   r   r   r   r   r   r  r  r  r   r   r   rz   r   r   r   r   r   r   r   r{   r   r   rk   rG  r"   r)   r$   r&   r\  rM  r%   r'   r   rM   r   r  r  )r-  r   r   r%  rz   r   r   ra  rk  r!  rZ  rl  rm  rn  ro  r  r  r  r^  r\  rp  r   r   rO   rO   rP   delete_single_booking&  s    






















rr  z/bookings/reinstatec           ,   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jt	j
t	jt jd kj
t	jtd
kj }|s$g }|jd td|idfS td|_d |_tj |_tttj t jd dt jd tj d}tjj| tjjtj
tjd kj
tjtd
kj
tj|jkj }x|D ]}d|_tj |_qW tjjtj
tjd kj
tj|jkj }d|_tj |_tjjtj
tjd kj
tjtd
kj
tj|jkj }x|D ]}	d|	_tj |	_qHW tjjtj
tjd kj
tjtd
kj
tj|jkj }
x|
D ]}d|_tj |_qW tjjtj
tjd kj
tjtd
kj
tj|jkj }d|_tj |_tjjtj
tjd kj
tjtd
kj
tj |j!kj }x|D ]}d|_tj |_qFW tjjt"j
t"jd kj
t"jtd
kj
t"j |j!kj }d|_tj |_tjjt#j
t#jd kj
t#jtd
kj
t#j |j!kj }x|D ]}d|_tj |_qW y0tjj$  t%t g }|jd td|idfS  t&k
r } z8t'| tjj(  t%t g }|jd td|id	fS d }~X nX d S )Nr{   zBooking ID is empty.zBooking ID is missing.r   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.r-  i  r   zCThe selected booking does not exist or has already been reinstated.r   r   r   zBooking reinstated)r   r{   r   r   r   r  z The booking has been reinstated.zIThere was a slight issue reinstating the booking. Please try again later.))r   r   r  r   r  r   r?   rL   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\  rM  r%   r'   r   rM   rk   r  r  )r-  r   r   r%  r   ra  rk  r!  rl  rm  rn  ro  r  r  r  r^  r\  rp  r   rO   rO   rP   reinstate_single_booking'  s    
















rs  z/testc              C   s  g } g }g }g }g }g }yjxt jd D ] }tjjtjtjd kjtj|d kj	 }tjjtjtjd kjtj|d kj	 }y
|j
}	W n* ttfk
r }
 z
d}	W Y d d }
~
X nX tt jd |j|	}| j|d  |jt|jj  |j|jj  t|tkr|j| q*|jt| q*W tjjtjtjd kj }x|D ]}|j|jj  qRW t| |||||ddfS  tk
r } ztdt|  dS d }~X nX d S )	Nr   r8  r   r&  )oneZtwoZthreeZfourZfivesixr   zThere was an error getting: Pass)r   r   r?   rL   r   r,   r   r   r8  r  payment_person_amountr  r  rw   payment_person_currencyr   r  r  r  r!  r   rV   r   r   r  r   r  r  )Z	one_arrayZ	two_arrayZthree_arrayZ
four_arrayZ
five_arrayZ	six_arrayr  r  r  r  r  r  type_idZ	each_typer  rO   rO   rP   
test_routeo(  sX    


rz  z/test2c              C   sr   g } t tj t tj t tj t tj t tj t tj tj}t t| t|}t |d  t	ddiS )Nz
User-AgentrS   r   )
r  r   rS   path	full_pathrN  headersmethoddictr   )r   r}  Zheaders2rO   rO   rP   test_route2(  s    





r  z/bookings/streamc           0   C   s  yt tjd } W n tk
r*   d} Y nX yt tjd }W n tk
rV   d}Y nX | dkrtjjtjtj	j
 jttjdj }n.tjjtjtj	j
 jttj| |dj}|sg }|jd td	|id
fS g }x|D ]}|j|j qW tj }y|jtd|id}W n6 tjjtjjtjjfk
rP } zW Y d d }~X nX g }	x|D ]}
i }|
j|d< |
jj|d< |
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j5t'j6d kj5t'j7t8dkj5t,j	|
jkjttj }x@|D ]8}i }|j0|d< |j1|d< |j| |jt |j1 qZW ||d< t9||d< tjjt:j5t:j6d kj5t:j	|
jkj; }|r|
j6dkrd|d< d|d< nd|d< n|
j<dkr d |d< d!|d< n|
j=dkr>d"|d< d#|d< nb|
j6dkr\d|d< d|d< nD|
j>j?d$krtd%|d< n |
j>j?d&krd'|d< nd(|d< |
j>j?|d< |
j7|d)< |
jrjyBx<|j@ d* D ],}|d+ |
jkr|d, |d-< |
j|d.< qW W nr tAtBfk
r. } zd/|d-< |
j|d.< W Y d d }~X n: tCtDfk
rf } zd0|d-< |
j|d.< W Y d d }~X nX nd/|d-< |
j|d.< |
jE|d1< |
jF|d2< tjjtGj5tGj6d kj5tGj	|
jkjttj; }|r|jH|d3< nd |d3< |	j| q^W td*|	id
fS )4Nr  r   r  r2  r   r  Fz.There are currently no bookings in the system.r   r   r   )r   r   r   r   r   r   r   rz   r   r   r   r:  r  r   r   r   r   z&background-color: #e53935; color: #fffr   z
To InvoicezChecked Outz&background-color: #73a533; color: #fffz
Checked Inz&background-color: #2196f3; color: #fffr   z&background-color: #e67e22; color: #fffzNo-Showz&background-color: #9b59b6; color: #fffz&background-color: #fff; color: #000000r   rS   r   r   r   r   zN/AzNetwork Errorr   r   r  )Ir  r   r  rk   r?   rL   r   r   r   r{   r   r  r<   r@   r  r   r  r  r   r   r   rW   r  rX   r   r   r  r  r  r   r  r   r   r   r   r   rz   r  r  r&   r  r,   r]  r8  r$   r\  rM  r  r  r^  r_  ra  rc  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  rS   r   r   r  r  r  r  r  r  r  r  r  r"  rO   rO   rP   stream_all_bookings(  s    




























r  z/bookings/finally-deletec        +      C   s  t jd stddiS g } x`t jd D ]P}tjjtjtj|kj	 }tjjt
jt
j|kj	 }x|D ]}tjjtjtj|jkj	 }|rx|D ]}tjj| qW tjjtjtj|jkj	 }|rx|D ]}tjj| qW tjjtjtj|jkj	 }	|	r(x|	D ]}
tjj|
 qW tjj| qlW x|D ]}tjjtjtj|jkj	 }|rx|D ]}tjj| qpW tjjtjtj|jkj	 }|rx|D ]}tjj| qW tjjtjtj|jkj	 }|rx|D ]}tjj| qW tjjtjtj|jkj	 }|rFx|D ]}tjj| q0W tjjtjtj|jkj	 }|rx|D ]}tjj| qpW tjjtjtj|jkj	 }|rx|D ]}tjj| qW tjjtjtj|jkj	 }|rx|D ]}tjj| qW tjjtjtj|jkj	 }|rFx|D ]}tjj| q0W tjjtjtj|jkj	 }|rx|D ]}tjj| qpW tjjtjtj|jkj	 }|rx|D ]}tjj| qW tjjtjtj|jkj	 } | rx| D ]}!tjj|! qW tjjtjtj|jkj	 }"|"rFx|"D ]}#tjj|# q0W tjjtjtj|jkj	 }$|$rx|$D ]}%tjj|% qpW tjjtjtj|jkj	 }&|&rx|&D ]}'tjj|' qW tjjt jt j|jkj	 }(|(rx|(D ]})tjj|) qW tjj| q@W ytjj!  | j"|d  W q( t#k
rx }* z&tjj$  | j"|d t%|*  W Y dd}*~*X q(X q(W td| iS )z With great power comes great responsibility.
		This function is used to delete bookings from the database and should, therefore, be used responsibly.
	bookingsr   zBookings is empty.z: Okz: Nr-  )&r   r   r   r?   rL   r   r   r   r   r   r$   r{   r&   r\  rM  deleter'   r%   r   r)   r"   r   r*   r   r   r   r   r(   r-   r/   r1   r3   r5   r   r   rk   r  r   )+r-  Zsingle_bookingr  r  Zsingle_gatepassr  Z_get_gatepass_guestsr\  Z_get_gatepass_vehiclesr^  Z_get_gatepass_detailseach_bookingr!  Z_get_booking_detailsZget_booking_inventoryZ_get_booking_inventoryZget_booking_facilityZ_get_booking_facilityra  Z_get_booking_guestsZget_booking_to_invoiceZ_get_booking_to_invoiceZget_booking_activitiesZ_get_booking_activitiesZget_booking_notesZ_get_booking_notesZget_booking_paymentsZ_get_booking_paymentsZget_check_in_vehiclesZ_get_check_in_vehiclesZget_group_bookingsZ_get_group_bookingsr  Z_get_member_bookingsZget_partner_bookingsZ_get_partner_bookingsZget_salesforce_detailsZ_get_salesforce_detailsZget_school_bookingsZ_get_school_bookingsZget_booking_transactionsZ_get_booking_transactionsr   rO   rO   rP   delete_bookingsr)  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?   rL   r   r   r   r   r  r   r  )status_name	status_idr   r   rO   rO   rP   r  **  s    
r  c             C   sF   t jjtjtjd kj }x$|D ]}|jj | kr"|j	}|S q"W d S )N)
r?   rL   r   r   r   r   r   r  r  r  )Zguest_type_namery  r   booking_guest_type_idrO   rO   rP   r  6*  s    
r  z/user-details/<email>c             C   sZ   t jjtj| dj }|s4ddi}tt|dfS |j|j	|j
d}tt|dfS d S )N)rG  r   zNo such User Foundi  )r|   r}   r(  r   )r?   rL   r   r   	filter_byr  r   r   r|   r}   rG  )r(  r  responseObjectrO   rO   rP   getUserDetailsB*  s    
r  z/bookings/residency-proofsc              C   s  yt tjd } W n tk
r*   d} Y nX yt tjd }W n tk
rV   d}Y nX | dkrtjjtjtj	d kj
tjj jttj }n:tjjtjtj	d kj
tjj jttj| |dj}g }t|sg }|jd td|id	fS x|D ]}tjjtjtjtjjtj|jkj }i }|j|d
< |j|d< |j|d< |j|d< |j|d< |j|d< |j|d< g }x|D ]}	|j|	j  qW d|i}
t!j"t#|
d}y4x.|j$ d D ]}|d |j kr|d }qW W n t%t&fk
r   d}Y nX |j'}|dkr.||d< d|d< d|d< nd|d< d|d< d|d< |j(}tjjt)jt)j*t)j+jt)j+|kjttj }|j*|j+d|d < |j| q W td|id!fS d S )"Nr  r   r  r  r   FzNo residency proofs found.r   i  r|   r}   rK  r   rM  rz   r   r   )r   rS   r   r   zN/Ar  rP  rQ  z&background-color: #73a533; color: #fffr   rR  r  z&background-color: #e74c3c; color: #fff)r  r8  rO  r   ),r  r   r  rk   r?   rL   r   r  r   r   r   r   r   r  r<   r@   r   r  r  r$  r   r   r   r  r   rz   r{   r  r|   r}   rK  rM  r   rW   rX   r   r   r  r  rQ  r  r,   r  r8  )r  r  r  r   r   rO  r%  r  r  Zresidency_sessionr_   r  r  r@  r  r  r  rO   rO   rP   "view_all_bookings_residency_proofsS*  s    














r  )N)mathosr   	threadingr   r   r   r   r   ZpdfkitpymysqlrW   flaskr   r   r   r   r	   r
   r   r   r   database.booking_activity_logr   database.booking_detailsr   Zdatabase.donationr   database.booking_guest_typesr   database.booking_guestsr   database.booking_paymentsr   Zdatabase.booking_promo_coder   database.booking_statusr   database.booking_ticketsr   database.booking_typesr   database.bookingsr   Zdatabase.bookings_notesr   database.check_in_vehiclesr   Zdatabase.contact_listr   database.credit_noter   database.credit_note_facilitiesr   database.credit_note_guestsr   database.credit_note_inventoryr   database.credit_note_vehiclesr    database.destinationr!   database.facilityr"   database.gater#   database.gatepassr$   database.gatepass_detailsr%   database.gatepass_guestsr&   database.gatepass_vehiclesr'   database.groupr(   database.inventoryr)   database.invoicer*   Z!database.mandatory_payment_pricesr+   database.mandatory_paymentsr,   database.memberr-   database.modifyr.   database.partnerr/   database.payment_methodsr0   database.salesforcer1   database.schoolr2   database.school_bookingr3   database.sunr4   database.transactionr5   database.vehicler6   database.vehicle_detailsr7   Zdatabase.entry_moder8   Zdatabase.booking_accountr9   Zfunctions.async_functionsr:   functions.booking_snippetsfunctions.currency_operatorsfunctions.date_operatorsfunctions.validationroutesr<   r=   r>   r?   r@   rA   rB   rC   routes.salesforce_v2rD   Zroutes.seed_functionsrE   rF   rG   rH   	variablesrI   Zroutes.booking_banrJ   Zroutes.booking_financesrK   rM   rb   re   rw   r   r   r   router   r   r  r  r  r%  r'  r)  r  r  r  r  r  r  r	  r
  r  r  r  r  r)  r4  r6  r9  r:  r;  r=  rK  rR  rS  rc  rj  rq  rr  rs  rz  r  r  r  r  r  r  r  rO   rO   rO   rP   <module>   sj  ,(7
q-0%( !      FB  -      ~   M   K           g       r  ?  L M I ekjK  {    ;T       s  J /@ * 9