3
$i                @   s  d dl mZmZmZmZmZmZmZ d dlmZm	Z	 d dl
Z
d dlZd dlZd dlZd dlZd dl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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 lHmIZImJZJmKZKmLZLmMZM d d!lNmOZO d d"lPmQZQ d d#lRmSZS d d$lTmUZU d d%lPT d d&lVmWZW d'd( ZXejYd)d*gd+d,d- ZZejYd.d*gd+d/d0 Z[ejYd1d*gd+ejYd2d*gd+d3d4 Z\ejYd5d*gd+ejYd6d*gd+d7d8 Z]ejYd9d*gd+d:d; Z^ejYd<d*gd+d=d> Z_ejYd?d*gd+d@dA Z`ejYdBd*gd+dCdD ZaejYdEd*gd+dFdG ZbejYdHd*gd+dIdJ ZcejYdKd*gd+dLdM ZdejYdNd*gd+dOdP ZeejYdQd*gd+dRdS ZfejYdTd*gd+dUdV ZgejYdWd*gd+dXdY ZhdS )Z    )Flaskjsonifyrender_templateurl_forrequestredirectjson)datetime	timedeltaN)db_cache	FromCachememoise_cache)Note)app)db)BookingTypeSeedBookingStatusSeed)get_booking_status_id)BookingType)Booking)BookingGuest)BookingStatus)
CreditNote)Detail)Facility)	GuestType)	Mandatory)Invoice)	Inventory)GatepassGuest)Gatepass)Gate)Partner)CheckInVehicle)School)SchoolBooking)Group)Member)Destination)ResidencyProof)get_details_memberget_details_partnerbookingTotalbookingsViewgetBookingSessionUser)fieldValidation)get_user_from_aumra)BookingPayment)PaymentMethod)*)BookingBankSlipc             C   s   | j j  d S )N)sessionclose)self r8   3/booking_service/app/routes/bookings_search_urls.pyr6   ,   s    r6   z/bookings/search/by_keyPOST)methodsc        6   8   C   s`  ddig} t tj| }|r*td|idfS g }tjd }|j }tjjtj	tj
|kp`tj
j|j }x|D ]}|j|j
 qnW tjjtj	tjjd| dj }x|D ]}|j|j
 qW tjjtj	tjjd| dj }	x|	D ]}
|j|
j
 qW tjjtj	tj|kp$tjj|j }x|D ]}|j|j
 q2W tjjtj	tjjd| dj }x|D ]}|j|j qtW tjjtj	tjjd| dj }x|D ]}|j|j qW tjjtj	tjjd| dj }x|D ]}|j|j qW tjjtj	tj|kp0tjj|j }x|D ]}|j|j q>W tjjtj	tjjd| dj }x|D ]}|j|j qW tjjtjttjtjkjtjj	tj jd| dj }x|D ]}|j|j qW tjjt!j	t!j"jd| dj }x|D ]}|j|j qW tjjt#j	t#j$|kpTt#j$j|j }x|D ]}|j|j qbW tjjtjt%tj&t%j'kj	t%j(|kpt%j(j|j }x|D ]}|j|j
 qW t)|sg }|jd| d  td|id	fS tjjtj	tj
j*t)|j+tj,j- j } g }!x| D ]}"|!j|"j. q6W t/j0 }#y|#j1t2d
|!id}$W n6 t/j3j4t/j3j5t/j3j6fk
r }% zW Y d d }%~%X nX g }&x| D ]}'i }(|'j
|(d< |'j7j8|(d< |'j9|(d< |'j,|(d< |'j:|(d< |'j|(d< |'j|(d< |'j;|#|(d< |'j<|#|(d< tjjtjttjtjkjtj j	tj|'j
kj= })tjjt!j	t!j|'j
kj= }*y2|)r|)j |(d< n|*r|*j"|(d< n
|'j|(d< W n  t>k
r   |'j|(d< Y nX i }+t?|+|'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#< yFtjjtj	tj|'j
kj	tj&t@d$kj= },|,j|(d%< |,j|(d&< W n& tAk
r   d'|(d%< d'|(d&< Y nX |'j|(d(< tjjtBj	tBjCd kj	tBj|'j
kj= }-|-rV|'jCd)kr6d*|(d+< d,jDtEjFd- |(d.< nd/|(d+< d,jDtEjFd0 |(d.< n|'jGd)krd1|(d+< d,jDtEjFd2 |(d.< nh|'jHd)krd3|(d+< d4jDtEjFd5 |(d.< n<|'jCd)krd*|(d+< d,jDtEjFd- |(d.< n|'jIj(d6krd,jDtEjFd7 |(d.< n|'jIj(d8kr"d,jDtEjFd9 |(d.< n|'jIj(d:krFd,jDtEjFd; |(d.< n|'jIj(d<krjd,jDtEjFd= |(d.< nt|'jIj(d$krd,jDtEjFd> |(d.< nP|'jIj(d?krd,jDtEjFd@ |(d.< n,|'jIj(dAkrd,jDtEjFdB |(d.< ndC|(d.< |'jIj(|(d+< |'j&|(dD< |'j.	r|'j.dEk	rdF|(dG< |'j.|(dH< nyBx<|$j dI D ],}.|.dJ |'j.k	r,|.dK |(dG< |'j.|(dH< 	q,W W nr tJtKfk
	r }/ zdL|(dG< |'j.|(dH< W Y d d }/~/X n: tAtLfk
	r }0 zdM|(dG< |'j.|(dH< W Y d d }0~0X nX ndL|(dG< |'j.|(dH< |'jM|(dN< |'jN|(dO< tjjtOj	tOjCd kj	tOj|'j
kj= }1|1
r|1jP|(dP< tQ|1jR}2y |2dQ dR |(dQ< |2dS |(dT< W n& t>k

r   d |(dQ< d |(dT< Y nX nd |(dP< d |(dQ< d |(dT< |'jS
r|'jSj= }3|3
rtT|3j$}4|4dK |(dU< |4dV |(dW< nd |(dU< d |(dW< nd |(dU< d |(dW< tjjtUj	tUjCd kj	tUj|'j
kj }5|5r8dX|(dY< ndZ|(dY< |&j|( qW tdI|&id[fS )\Nfieldkeymessagesi  %zThe search for z did not return any results.messagei  	users_ids)r   booking_public_idbooking_typebooking_type_idbooking_check_in_datebooking_check_out_datebooking_done_bybooking_ref_codefacility_bookingsinventory_bookingsbooking_currency_namebooking_currency
total_costbooking_totalguestsguest_totalvehiclesvehicle_totalaccommodations
activitiestax_breakdownvatcateringcatering_levy	after_taxUpdatedemail_addressphone_number booking_ticket   	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DepositDEPOSITComplimentaryCOMPLIMENTARYz&background-color: #fff; color: #000000booking_status_idguestPublicsession_user
session_iddata	public_id	full_namezN/AzNetwork Error
created_at
updated_atpartner_booking_refpartner_typer   namepartner_namemember_namelevelmembership_levelTcredit_note_issuedF   )Vr/   r   r   r   lowerr   r5   queryr   filterrB   containsallappendrH   ilikerG   ticketr   r[   
booking_id
first_name	last_namer\   r#   check_vehicle_regr%   joinr$   	school_idschool_public_idadd_columnsschool_namer&   organisation_namer'   	member_idr   statusbooking_status_public_idbooking_status_namesetin_order_byrE   ascrw   requestsSessionpostr0   
exceptionsConnectionErrorTimeoutConnectTimeoutb_typebooking_type_namerC   rF   return_facilitiesreturn_inventoryfirst	Exceptionr,   r   AttributeErrorr   deletion_markerformatr   configchecked_out
checked_inb_status
IndexErrorKeyErrorUnboundLocalErrorr{   r|   r"   r}   r+   
partner_idmember_detailsr*   r   )6validation_listr>   bookings_arrayZ
search_keyZsearch_key_lowerreturn_bookings_public_idsingle_public_idreturn_bookings_ref_codesingle_ref_codereturn_bookings_done_bysingle_done_byreturn_bookings_ticketssingle_ticketreturn_bookings_emailsingle_emailreturn_bookings_first_namesingle_first_namereturn_bookings_last_namesingle_last_namereturn_bookings_numberssingle_numberreturn_bookings_reg
single_regreturn_bookings_schoolsingle_schoolreturn_bookings_organisationssingle_organisationreturn_bookings_memberssingle_memberZreturn_statusZsingle_statusr@   return_bookingsid_arrayeach_idrequest_sessionreturn_userconnection_errorrx   singlereturn_datacheck_school_bookingcheck_org_bookingbooking_infoget_booking_detailscheck_to_invoiceuser
user_errornetwork_related_errorsget_partner_bookingpartner_infobooking_detailsmember_infoget_credit_notesr8   r8   r9   global_booking_search3   s   

















$

















r   z/bookings/search/by_key/reportc        3   8   C   s  ddig} t tj| }|r*td|idfS g }tjd j }tjjtj	tj
jtj
|kpdtj
j|j }x|D ]}|j|j
 qrW tjjtj	tj
jtj|j kptjj|j j }x|D ]}|j|j
 qW tjjtj	tj
jtj|kptjj|j }x|D ]}	|j|	j
 qW tjjtj	tj
jtj|kpPtjj|j }
x|
D ]}|j|j
 q^W tjjtj	tjjtj|kptjj|j }x|D ]}|j|j qW tjjtj	tjjtjj|j }x|D ]}|j|j qW tjjtj	tjjtjj|j }x|D ]}|j|j q0W tjjtj	tjjtj|kpptjj|j }x|D ]}|j|j q~W tjjtj	tjjtj|kptjj|j }x|D ]}|j|j qW tjjtj	tjjttjtj kj	tjjtj!|j" kp,tj!j|j" j }x|D ]}|j|j q:W tjjt#j	t#jjt#j$|kpzt#j$j|j }x|D ]}|j|j qW tjjt%j	t%jjt%j&|kpt%j&j|j }x|D ]}|j|j qW t'|sg }|jd| d  td|idfS tjjtjtj
j(t'|j)tj*j+ j }g }x|D ]}|j|j, qTW t-j. } y| j/t0d	|id
}!W n6 t-j1j2t-j1j3t-j1j4fk
r }" zW Y d d }"~"X nX g }#x|D ]}$i }%|$j
|%d< |$j5j6|%d< |$j7|%d< |$j*|%d< |$j8|%d< |$j|%d< |$j|%d< |$j9| |%d< |$j:| |%d< tjjtjttjtj kj	tj!jtj|$j
kj; }&tjjt#jt#j|$j
kj; }'y2|&r|&j!|%d< n|'r|'j$|%d< n
|$j|%d< W n  t<k
r   |$j|%d< Y nX i }(t=|(|$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"< yFtjjtjtj|$j
kjtj>t?d#kj; })|)j|%d$< |)j|%d%< W n& t@k
r   d&|%d$< d&|%d%< Y nX |$j|%d'< tjjtAjtAjBd kjtAj|$j
kj; }*|*rt|$jBd(krTd)|%d*< d+jCtDjEd, |%d-< nd.|%d*< d+jCtDjEd/ |%d-< n|$jFd(krd0|%d*< d+jCtDjEd1 |%d-< n|$jGd(krd2|%d*< d3jCtDjEd4 |%d-< nb|$jBd(krd)|%d*< d+jCtDjEd, |%d-< n6|$jHjId5krd+jCtDjEd6 |%d-< n|$jHjId7krBd+jCtDjEd8 |%d-< n|$jHjId9krfd+jCtDjEd: |%d-< n|$jHjId;krd+jCtDjEd< |%d-< n|$jHjId#krd+jCtDjEd= |%d-< nt|$jHjId>krd+jCtDjEd? |%d-< nP|$jHjId@krd+jCtDjEdA |%d-< n,|$jHjIdBk	rd+jCtDjEdC |%d-< ndD|%d-< |$jHjI|%d*< |$j>|%dE< |$j,
r|$j,dFk	r`dG|%dH< |$j,|%dI< nyBx<|!j dJ D ],}+|+dK |$j,k	rp|+dL |%dH< |$j,|%dI< 	qpW W nr tJtKfk
	r }, zdM|%dH< |$j,|%dI< W Y d d },~,X n: t@tLfk

r }- zdN|%dH< |$j,|%dI< W Y d d }-~-X nX ndM|%dH< |$j,|%dI< |$jM|%dO< |$jN|%dP< tjjtOjtOjBd kjtOj|$j
kj; }.|.
r|.jP|%dQ< tQ|.jR}/y |/dR dS |%dR< |/dT |%dU< W n& t<k

r   d |%dR< d |%dU< Y nX nd |%dQ< d |%dR< d |%dU< |$jSr2|$jSj; }0|0r tT|0j&}1|1dL |%dV< |1dW |%dX< nd |%dV< d |%dX< nd |%dV< d |%dX< tjjtUjtUjBd kjtUj|$j
kj }2|2r|dY|%dZ< nd[|%dZ< |#j|% qW tdJ|#id\fS )]Nr<   r=   r>   i  zThe search for z did not return any results.r@   i  rA   )r   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   z!background-color: {}; color: #fffrb   rc   z
To Invoicerd   zChecked Outre   z
Checked Inz background-color:{}; color: #fffrf   rg   rh   ri   rj   zNo-Showrk   rl   rm   rn   ro   rp   rq   rr   	Postponed	POSTPONEDz&background-color: #fff; color: #000000rs   rt   ru   rv   rw   rx   ry   rz   zN/AzNetwork Errorr{   r|   r}   r~   r   r   r   r   r   r   Tr   Fr   )Vr/   r   r   r   stripr   r5   r   r   r   rB   r   r   r   r   rH   r   rG   r   r   r   r[   r   r   r   r\   r#   r   r%   r   r$   r   r   r   titler&   r   r'   r   r   r   r   rE   r   rw   r   r   r   r0   r   r   r   r   r   r   rC   rF   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   )3r   r>   r   search_termr   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   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r8   r9   global_booking_search_report  s   





































r   z/bookings/search/by_date/rangez'/bookings/search/by_date/range/check_inc               C   sV  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 g }t jd dkrjtjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qPW nPt jd dkrtjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qW nt jd dkr2tjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qW nt jd dkrtjjtj
tjt jd kj
tjt jd kj }	x|	D ]}
|j|
j q|W n$t jd dkrtjjtj
tjt jd kj
tjt jd kj }x|D ]}|j|j qW nt jd dkrZtjjtj
tjt jd kj
tjt jd kj }x||D ]}|j|j qBW n`t jd dkrtjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qW t|sg }|jd td|idfS tjjt	j
t	jjt|jt	jj j }|s4g }|jd td|idfS g }t|| td|idfS d S )N
start_datezStart date is empty.zStart date is missing.end_datez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@   date_search0123456z&The search did not return any results.i  z.There are currently no bookings in the system.r   rx   )r   r   r   r   r   r   r   r5   r   r   r   r{   r   rB   rE   rF   r   inventory_booking_dater   r   facility_booking_check_in_datefacility_booking_check_out_dater   r   r   r   r-   )r>   er@   outputr   #return_bookings_book_check_in_rangesingle_check_in$return_bookings_book_check_out_rangesingle_check_outreturn_bookings_inventorysingle_inventory!return_bookings_facility_check_insingle_facility_check_in"return_bookings_facility_check_outsingle_facility_check_outreturn_bookings_in_house_rangesingle_in_houser   rx   r8   r8   r9   &search_bookings_by_date_check_in_range  s    















r
  z%/bookings/search-report/by_date/rangez./bookings/search-report/by_date/range/check_inc        (   d   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 g }t jd dkrjtjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qPW nPt jd dkrtjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qW nt jd dkr2tjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qW nt jd dkrtjjtj
tjt jd kj
tjt jd kj }	x|	D ]}
|j|
j q|W n$t jd dkrtjjtj
tjt jd kj
tjt jd kj }x|D ]}|j|j qW nt jd dkrZtjjtj
tjt jd kj
tjt jd kj }x||D ]}|j|j qBW n`t jd dkrtjjt	j
t	jt jd kj
t	jt jd kj }x|D ]}|j|j qW t|sg }|jd td|idfS tjjt	j
t	jjt|jt	jj j }g }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 g }x|D ]z}i }|j|d< |j#j$|d< |j%|d< |j|d< |j|d< |j&|d< |j'|d< |j(||d< |j)||d < tjjt*j+t,t*j-t,j.kj/t,j0j
t*j|jkj1 }tjjt2j
t2j|jkj1 }y2|rh|j0|d< n|rz|j3|d< n
|j&|d< W n  t4k
r   |j&|d< Y nX i }t5||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/< yFtjjt6j
t6j|jkj
t6j7t8d0kj1 }|j9|d1< |j:|d2< W n& t;k
r   d3|d1< d3|d2< Y nX |j<|d4< y`tjjt=j+t>t=j?t>j@kj/t>jAj
t=j|jkj
t=j7t8d0kj
t=jBd kj1 }|jA|d5< W n t;k
r>   d3|d5< Y nX tjjtCj
tCjBd kj
tCj|jkj1 }|r|jBd6krd7|d8< d9jDtEjFd: |d;< nd<|d8< d9jDtEjFd= |d;< n|jGd6krd>|d8< d9jDtEjFd? |d;< nh|jHd6krd@|d8< dAjDtEjFdB |d;< n<|jBd6kr>d7|d8< d9jDtEjFd: |d;< n|jIjJdCkrbd9jDtEjFdD |d;< n|jIjJdEkrd9jDtEjFdF |d;< n|jIjJdGkrd9jDtEjFdH |d;< n|jIjJdIkrd9jDtEjFdJ |d;< nt|jIjJd0krd9jDtEjFdK |d;< nP|jIjJdLk	rd9jDtEjFdM |d;< n,|jIjJdNk	r:d9jDtEjFdO |d;< ndP|d;< |jIjJ|d8< |j7|dQ< |j
r8|jdRk	rdS|dT< |j|dU< nyBx<|j dV D ],} | dW |jk	r| dX |dT< |j|dU< 	qW W nr tKtfk
	r }! zdY|dT< |j|dU< W Y d d }!~!X n: t;tLfk

r4 }" zdZ|dT< |j|dU< W Y d d }"~"X nX ndY|dT< |j|dU< |j|d[< |jM|d\< tjjtNj
tNjBd kj
tNj|jkj1 }#|#
r|#jO|d]< tP|#jQ}$y |$d^ d_ |d^< |$d` |da< W n& t4k

r   d |d^< d |da< Y nX nd |d]< d |d^< d |da< |jRr|jRj1 }%|%rtS|%jT}&|&d k	ry|&dX |db< |&dc |dd< W n> t4k
r   |&de |db< |&df r~dg|dd< ndY|dd< Y nX nd |db< d |dd< nd |db< d |dd< d |db< d |dd< tjjtUj
tUjBd kj
tUj|jkj }'|'rdh|di< ndj|di< |j| qW tdV|idkfS )lNr   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r>   i  z.The start date cannot come after the end date.r@   r   r   r   r   r   r   r   r   z&The search did not return any results.i  rA   )r   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   gatepass_sourcer_   r`   ra   z!background-color: {}; color: #fffrb   rc   z
To Invoicerd   zChecked Outre   z
Checked Inz background-color:{}; color: #fffrf   rg   rh   ri   rj   zNo-Showrk   rl   rm   rn   ro   rp   rq   rr   z&background-color: #fff; color: #000000rs   rt   ru   rv   rw   rx   ry   rz   zN/AzNetwork Errorr{   r|   r}   r~   r   r   r   r   r   r   company_name	corporate	CorporateTr   Fr   )Vr   r   r   r   r   r   r   r5   r   r   r   r{   r   rB   rE   rF   r   r   r   r   r   r   r   r   r   r   rw   r   r   r   r0   r   r   r   r   r   r   rC   rG   rH   r   r   r%   r   r$   r   r   r   r   r   r&   r   r   r,   r   r   r   r[   r\   r   r   r    r!   r  gate_public_id	gate_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   r   r   r   r  r  r  r  r  r  r  r  r	  r   r   r   r   r   r   rx   r   r   r   r   r   r   get_gatepass_sourcer   r   r   r   r   r   r   r   r   r8   r8   r9   -search_bookings_report_by_date_check_in_rangel  s   







































r  z/bookings/search/partner/by_keyc        ,       C   s
  ddidddg} t tj| }|r2td|idfS g }tjjtjt	tj
t	jkjtj
jtj
tjd kpztj
jtjd jt	jtjd kj }x|D ]}|j|j
 qW tjjtjt	tj
t	jkjtj
jtjtjd j kptjjtjd j jt	jtjd kj }x|D ]}|j|j
 qW tjjt	jt	jtjd kp^t	jjtjd jt	jtjd kj }x|D ]}|j|j q~W tjjtjt	tj
t	jkjtj
jtjtjd kptjjtjd jt	jtjd kj }	x|	D ]}
|j|
j
 qW tjjtjt	tj
t	jkjtj
jtjtjd kpVtjjtjd jt	jtjd kj }x|D ]}|j|j
 qvW tjjtjt	tjt	jkjtjjtjtjd kptjjtjd jt	jtjd kj }x|D ]}|j|j qW tjjtjt	tjt	jkjtjjtjjtjd jt	jtjd kj }x|D ]}|j|j q\W tjjtjt	tjt	jkjtjjtjjtjd jt	jtjd kj }x|D ]}|j|j qW tjjtjt	tjt	jkjtjjtjtjd kp"tjjtjd jt	jtjd kj }x|D ]}|j|j qBW tjjtjt	tjt	jkjtjjtjtjd kptjjtjd jt	jtjd kj }x|D ]}|j|j qW t|sg }|jd td	|id
fS tjjtjtj
j t|j!tj"j# j }g }x|D ]}|j|j$ q4W 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 g }x|D ]}i } |j
| d< |j-j.| d< |j/| d< |j"| d< |j0| d< |j| d< |j| d< |j| d< tjjt	jt	j1d kjt	j|j
kj2 }!|!j| d< i }"t3|"|j
 |"d | d< |"d | d< |"d | d< |"d | d< g }#g }$tjjt4jt5t4j6t5j7kjt8t4j9t8j:kjt5j;t5j7t4j<t4j=t4j>t4j?jt4j1d kjt4j@tAdkjt8j|j
kj }%x@|%D ]8}&i }'|&j;|'d< |&j<|'d< |#j|' |$jtB|&j< q W |#| d< tC|$| d< tjjtDjtDj1d kjtDj|j
kj2 }(|(r|j1d krd!| d"< d#jEtFjGd$ | d%< nd&| d"< d#jEtFjGd' | d%< n|jHd krd(| d"< d#jEtFjGd) | d%< nh|jId kr"d*| d"< d+jEtFjGd, | d%< n<|j1d krNd!| d"< d#jEtFjGd$ | d%< n|jJjKd-krrd#jEtFjGd. | d%< n|jJjKd/krd#jEtFjGd0 | d%< n|jJjKd1krd#jEtFjGd2 | d%< n|jJjKd3krd#jEtFjGd4 | d%< nt|jJjKdk	rd#jEtFjGd5 | d%< nP|jJjKd6k	r&d#jEtFjGd7 | d%< n,|jJjKd8k	rJd#jEtFjGd9 | d%< nd:| d%< |jJjK| d"< |j@| d;< |j$
rH|j$d<k	rd=| d>< |j$| d?< nyBx<|j d@ D ],})|)dA |j$k	r|)dB | d>< |j$| d?< 	qW W nr tLtMfk

r }* zdC| d>< |j$| d?< W Y d d }*~*X n: tNtOfk

rD }+ zdD| d>< |j$| d?< W Y d d }+~+X nX ndC| d>< |j$| d?< |jP| dE< |jQ| dF< |j|  qW td@|idGfS )HNr<   r=   r   z
Partner ID)r<   aliasr>   i  z&The search did not return any results.r@   i  rA   )r   rB   rC   rD   rE   rF   rG   rH   r}   rK   rL   rM   rN   rI   rJ   rZ   
guest_typeno_of_guestsrO   rP   r_   r`   ra   z!background-color: {}; color: #fffrb   rc   z
To Invoicerd   zChecked Outre   z
Checked Inz background-color:{}; color: #fffrf   rg   rh   ri   rj   zNo-Showrk   rl   rm   rn   ro   rp   rq   rr   z&background-color: #fff; color: #000000rs   rt   ru   rv   rw   rx   ry   rz   zN/AzNetwork Errorr{   r|   r   )Rr/   r   r   r   r   r5   r   r   r   r"   rB   r   r   r   r   r   r   r   rH   r   r}   rG   r   r   r[   r   r   r   r\   r#   r   r   r   r   rE   r   rw   r   r   r   r0   r   r   r   r   r   r   rC   rF   r   r   r,   r   r   gatepass_guest_typepayment_public_idr    gatepass_idgatepass_public_idpayment_persongatepass_guest_countgatepass_discount_rategatepass_cost_per_ppgatepass_no_of_nightsr   r   intsumr   r   r   r   r   r   r   r   r   r   r   r   r{   r|   ),r   r>   r   r   r   r   r   Z return_bookings_partner_ref_codeZsingle_partner_ref_coder   r   r   r   r   r   r   r   r   r   r   r   r   r   r@   r   r   r   r   r   r   rx   r   r   get_partner_booking_detailsr   guest_array	guest_sumget_all_guests
each_guest
guest_datar   r   r   r   r8   r8   r9   partner_booking_search  s   





























r'  z&/bookings/search/by_date/partner/rangec        "   J   C   sl	  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 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td
| idfS t jd t jd k rLg }|jd td|idfS g }tjjt	j
tt	jtjkjt	jjt	jt jd kjt	jt jd kjtjt jd kj }x|D ]}|j|j qW tjjt	j
tt	jtjkjt	jjt	jt jd kjt	jt jd kjtjt jd kj }x|D ]}|j|j q.W tjjtj
ttjtjkjtjjtjt jd kjtjt jd kjtjt jd kj }x|D ]}	|j|	j qW tjjtj
ttjtjkjtjjtjt jd kjtjt jd kjtjt jd kj }
x|
D ]}|j|j q"W tjjtj
ttjtjkjtjjtjt jd kjtjt jd kjtjt jd kj }x|D ]}|j|j qW t|sg }|jd td|idfS tjjt	jt	jjt|jt	jj j }g }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 g }x|D ]}i }|j|d< |j&j'|d< |j(|d< |j|d< |j|d< |j)|d< |j*|d< |j)|d< tjjtjtj+d kjtj|jkj, }|j-|d< i }t.||j |d |d< |d |d< |d |d< |d |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 }x@|D ]8}i }|j6|d!< |j7|d"< |j| |jt=|j7 qW ||d#< t>||d$< tjjt?jt?j+d kjt?j|jkj, }|r|j+d%krd&|d'< d(j@tAjBd) |d*< nd+|d'< d(j@tAjBd, |d*< n|jCd%krd-|d'< d(j@tAjBd. |d*< nh|jDd%kr d/|d'< d0j@tAjBd1 |d*< n<|j+d%kr,d&|d'< d(j@tAjBd) |d*< n|jEjFd2krPd(j@tAjBd3 |d*< n|jEjFd4krtd(j@tAjBd5 |d*< n|jEjFd6krd(j@tAjBd7 |d*< n|jEjFd8krd(j@tAjBd9 |d*< nt|jEjFd krd(j@tAjBd: |d*< nP|jEjFd;krd(j@tAjBd< |d*< n,|jEjFd=kr(d(j@tAjBd> |d*< nd?|d*< |jEjF|d'< |j;|d@< |j	r&|jdAkrndB|dC< |j|dD< nyBx<|j dE D ],}|dF |jkr~|dG |dC< |j|dD< q~W W nr tGtfk
r }  zdH|dC< |j|dD< W Y d d } ~ X n: tHtIfk
	r" }! zdI|dC< |j|dD< W Y d d }!~!X nX ndH|dC< |j|dD< |jJ|dJ< |jK|dK< |j| qW tdE|idLfS )MNr   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.r   zPartner ID is empty.zPartner ID is missing.r>   i  z.The start date cannot come after the end date.r@   z&The search did not return any results.i  rA   )r   rB   rC   rD   rE   rF   rG   rH   r}   rK   rL   rM   rN   rI   rJ   rZ   r  r  rO   rP   r_   r`   ra   z!background-color: {}; color: #fffrb   rc   z
To Invoicerd   zChecked Outre   z
Checked Inz background-color:{}; color: #fffrf   rg   rh   ri   rj   zNo-Showrk   rl   rm   rn   ro   rp   rq   rr   z&background-color: #fff; color: #000000rs   rt   ru   rv   rw   rx   ry   rz   zN/AzNetwork Errorr{   r|   r   )Lr   r   r   r   r   r   r   r5   r   r   r   r"   rB   r   r   r   rE   r   r   rF   r   r   r   r   r   r   r   r   r   rw   r   r   r   r0   r   r   r   r   r   r   rC   rG   rH   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  r  r  r  r  r   r   r   r   r   r   rx   r   r   r!  r   r"  r#  r$  r%  r&  r   r   r   r   r8   r8   r9   %search_partner_bookings_by_date_range  s   



























r(  z/bookings/search/by_key/inspectc        4      C   s<  ddig} t tj| }|r*td|idfS g }tjd j }tjjtj	tj
jtj
|kpdtj
j|j }x|D ]}|j|j
 qrW tjjtj	tj
jtj|j kptjj|j j }x|D ]}|j|j
 qW tjjtj	tj
jtj|kptjj|j }x|D ]}	|j|	j
 qW tjjtj	tj
jtj|kpPtjj|j }
x|
D ]}|j|j
 q^W tjjtj	tjjtj|kptjj|j }x|D ]}|j|j qW tjjtj	tjjtjj|j }x|D ]}|j|j qW tjjtj	tjjtjj|j }x|D ]}|j|j q0W tjjtj	tjjtj|kpptjj|j }x|D ]}|j|j q~W tjjtj	tjjtj|kptjj|j }x|D ]}|j|j qW tjjtj	tjjttjtj kj	tjjtj!|j" kp,tj!j|j" j }x|D ]}|j|j q:W tjjt#j	t#jjt#j$|kpzt#j$j|j }x|D ]}|j|j qW tjjt%j	t%jjt%j&|kpt%j&j|j }x|D ]}|j|j qW t'|sg }|jd| 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j0tj1tj2tjtj3tj4tj5tj6tj7tj-tjtj8t)j9t,j:jtj
j;t'|j<tj/j= j }|sg }|jd	 td|id
fS g }g }x|D ]} |j| j5 qW x|D ]}!i }"|!j
|"d< |!j9|"d< |!j*|"d< |!j/|"d< |!j0|"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rtjjt#jt#j|!j
kj> }$|$j$|"d< n
|!j|"d< g }%g }&tjjt?jt@t?jAt@jBkjtCt?jDtCjEkj	t@jFt@jBt?jGt?jHt?jIt?jJjt?jKd kjt?j-tLdkjtCj|!j
kjMtNtOj }'x6|'D ].}(i })|(jG|)d< |%j|) |&jtP|(jG qxW |%|"d< tQ|&|"d< |!j:|"d< tjjtj	tjtjRtjjtj|"d kj }*tS|*dkrd|"d< nLd}+d},x2|*D ]*}-|-j}.|-jR}/|+|.d 7 }+|,|/d 7 },qW |+|"d< |,|"d< tjjtTjtTjKd kjtTjUdkjtTjVd kjtTj|"d kjMtNtOj }0g }1|0sd|"d < d!|"d"< n&x$|0D ]}2|2jW}3|3r|1jd qW d|1krd#|"d < d!|"d"< nd|"d < d$|"d"< |j|" qW td%|id
fS d S )&Nr<   r=   r>   i  zThe search for z did not return any results.r@   i  z.There are currently no bookings in the system.r   rB   rC   rD   rE   rF   rH   8D7E6504rG   C3237489rZ   r  rO   rP   ra   r   r]   vehicle_registration,driver_namer_   Okayinspect_alert_statusz&background-color: #e74c3c; color: #fffrc   Alertz&background-color: #2ecc71; color: #fffrx   )Xr/   r   r   r   r   r   r5   r   r   r   rB   r   r   r   r   rH   r   rG   r   r   r   r[   r   r   r   r\   r#   r   r%   r   r$   r   r   r   r   r&   r   r'   r   r   r   r   rC   booking_type_public_idr   r   r   rE   rF   actual_booking_check_in_dateactual_booking_check_out_dater   r   rw   r{   r|   currencyr   r   r   r   r   r   r   r   r  r  r    r  r  r  r  r  r  r  r   r   optionsr   r   r  r   check_vehicle_driverlenr   ranger_noteupdate_notealert)4r   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&  check_in_vehiclevehicle_str
driver_strvehiclevehicle_regr-  get_ranger_notes	alert_arrsingle_noter:  r8   r8   r9   global_booking_search_inspect  sd   


































rC  z!/bookings/search/alerted_bookingsc           J   C   sv  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 yt jd j }|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d kjt	jt jd kjt	jt jd kjt	jj jttj }n4|dkrbt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d kjt	jt jd kjt	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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ttj }W n$ tk
r } zW Y d d }~X nX t|s@g }|jd td|idfS g }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j.tj/t j0t#j1jtj|jkjtjj j2 }|sg }|jd td|id	fS i }i }	y(t3|j|	 |	d |d< |	d |d< W n4 t4k
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 }
t5|
dkrd|d< g }x|
D ]}i }|j|d< |j|d< |j|d< |j|d< i }y(t3|j| |d |d< |d |d< W n4 t4k
r } zd|d< d|d< W Y d d }~X nX |j| q(W ||d< nd|d< d |d< |j}||d!< |rd"|d#< nd$|d#< |j|d%< |j0|d&< |j!|d'< |j&|d(< |j'|d)< |j.|d*< |d' d+krtjjt6jt7t6j8t7j9kj
t7j:jt6j|jkj2 }|j:|d,< nB|d' d-krtjjt;jt;j|jkj2 }|j<|d,< n
|j*|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jttj }tjjtJj
tJjtJjKtJjLjtJj|d% kj }t5|dkrd|d/< d|d0< nLd}d}x2|D ]*}|jL}|jK}||d1 7 }||d1 7 }qW ||d/< ||d0< x6|D ].}i }|jE|d2< |j| |jtM|jE qW ||d3< tN||d4< |j1|d5< |j| qLW td6|id7fS d S )8Nr   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r>   i  z.The start date cannot come after the end date.r@   
alert_typer   r_   truer   z&The search did not return any results.i  z There are currently no bookings.rv   rw   r]   note_public_idnoter{   r   Yesaction_takenalert_updater9  update_notesNor:  z&background-color: #e74c3c; color: #fffrc   z&background-color: #73a533; color: #fffrB   rC   rD   rE   rF   rH   r)  rG   r*  rZ   r+  r-  r,  r  rO   rP   ra   rx   r   )Or   r   r   r   r   r   r   r5   r   r   r   rw   r:  r   rG  r9  booking_notes_public_idr{   r   r   r8  r   descr5  r   r   r   r   r   r   r   rB   r   rC   r1  r   r   r   rE   rF   r2  r3  rG   r   r   r|   rH   r4  r   r   r   r.   r   r7  r%   r$   r   r   r   r&   r   r   r   r  r  r    r  r  r  r  r  r  r  r   r#   r6  r   r  r   )r>   r   r@   r   rD  r@  rG  return_bookingr   	user_infoget_ranger_note_updatesupdate_ranger_notesr9  update_ranger_note_obuser_info_updater:  r   r   r"  r#  r$  r;  r<  r=  r>  r?  r-  r%  r&  r8   r8   r9   search_alerted_bookings  sh   




 
  





 




















rU  z,/bookings/search/unticketed_alerted_bookingsc           g   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 yt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t	jt jd kjt	jt jd kjt	jj jttj }W n$ tk
r } zW Y d d }~X nX g }t|sg }|jd td|idfS xd|D ]Z}i }i }y(t |j| |d |d< |d |d< W n4 t!k
rt } 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 |j}
|
|d< d|d< |j|d< |jd kr.d}n|j}|jd krFd}n|j}|	|d< ||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|jkjt	jd kj }t&|dkrBd|d< d|d < g }g }x0|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t'jt'j(|jkj$ }|j)}|j(}||d#< ||d$< W n4 t!k
r
 } zd|d#< d|d$< W Y d d }~X nX |j| ||d%}|j| qW ||d&< ||d'< nd|d'< d(|d < d|d< |j| q
W td)|id*fS d S )+Nr   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r>   i  z.The start date cannot come after the end date.r@      z&The search did not return any results.i  rv   rw   r]   rF  rG  r{   destinationr:  z&background-color: #e74c3c; color: #fffrc   r+  r   adultchildrenr_   z&background-color: #73a533; color: #fffrH  rI  rJ  r9  rH   rB   )rH   rB   update_bookingsrK  rL  rx   r   )*r   r   r   r   r   r   r   r5   r   r   r   rw   r:  rG  r   r?  rW  r9  rM  r{   rX  rY  r   r   r8  r   rN  r5  r   r   r   r   r.   r   r(   gatepass_destination_public_idr   gatepass_destination_namer7  r   rB   rH   )r>   r   r@   r   r@  rG  r   rP  destination_dbdestination_namer:  adult_numberchildren_numberget_ranger_update_notesrR  rZ  r9  rS  rT  rO  rH   rB   booking_datar8   r8   r9    search_bookings_unticketed_alert		  s    



0





0





rc  z/booking/residency-proofc              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 | rzg }|jd td| idfS t jd }tjjt	j
t	jjt	j|j kpt	jj|j j }g }|sg }|jd td|idfS tjjtjtj|jkjtjd kjttj }x|D ]}i }|j|d	< |j|d
< |j|d< |j|d< |j}	|	dkrfd|d< nd|d< |j}
tjjtj
tjtj jtj |
kjttj }|j|d< |j |d< |j| qW t!|dkrg } | jd td| idfS td|idfS d S )Nr   zBooking ref is empty.zBooking ref is missing.r>   i  z<The selected booking does not appear to exist in the system.r@   r   r   r   document_idproof_pointr_   TverifiedFr  r  r   z4The selected booking does not have residency proofs.rx   )"r   r   r   r   r   r   r   r5   r   r   r   rB   r   rH   r   r   r   r)   r   r   r5  r   r   r   r   r   rd  re  rf  residency_idr   r  r  r7  )r>   r   r@   r   rO  r   residency_db	residencyresidency_objverifyrg  get_residence_namer8   r8   r9   $search_residency_proof_by_booking_id	  sd    











rm  z!/bookings/search/proofed_bookingsc           E   C   s  yt jd  d} W n& tk
r8 } z
d} W Y d d }~X nX | r6g }t jd }g }tjjtjtjj	tj
|j kptj
j|j j }x|D ]}|j|j qW tjjtj	tjd kj	tjjt|jtjj jttj }|g krtjjtj	tjd kj	tjj|jtjj jttj }ng }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|idfS t jd t jd k rBg }	|	jd td|	idfS yZtjjtj	tjd kj	tjt jd kj	tjt jd kjtjj jttj }W n$ tk
r } zW Y d d }~X nX t|sg }|jd td|idfS g }	x|D ]}
tjjtjtjtj
j	tj|
jkj	tjd 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r0||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| qW td|	id*fS d S )+NisTermTFr=   r   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r>   i  z.The start date cannot come after the end date.r@   z&The search did not return any results.i  r   r   rd  r{   re  rH   rB   rA   )r   rx   ry   rz   zN/Ar_   r   rH  rf  z&background-color: #73a533; color: #fffrc   rL  r]   z&background-color: #e74c3c; color: #fff)r  r  ri  r   ),r   r   r   r   r5   r   r   r   rB   r   rH   r   r   r   r   r)   r   r   r   r   r   r{   rN  r5  r   r   rd  r   r   r   r   r   r   re  rw   r   r   r0   r   rf  rg  r   r  r  )rn  r   rh  r   Zid_arrrO  bookingr>   r@   r   ri  rj  residency_proof_id_arrresidency_session	post_datareturn_user_proofsr   r   rk  rg  rl  r8   r8   r9   search_proofed_bookings	  s    

















rt  z /bookings-payments/search/by_keyc           (   C   sx  ddig} t tj| }|r*td|idfS g }tjd j }tjjtj	tj
jtj|j kpltjj|j j }g }x|D ]}|j|j
 q~W tjjtjtjd kjtjjt|j }x|D ]}|j|j qW tjjtjtjd kjtj|kptjj|j }	x|	D ]}
|j|
j qW t|s\g }|jd| d  td|idfS tjjtjtjjt|jtjj j }|sg }|jd	 td|id
fS g }x|D ]}i }tjjtjtj
|jkj }|r|j|d< |j|d< tjjtjtjd kjtj|jkj }y|j|d< W n, t k
r` } zd|d< W Y d d }~X nX i }t!|j"| y|d |d< |d |d< W n6 t k
r } zd|d< |j"|d< W Y d d }~X nX t#j$t%j&|j'}y|j d d d |d< W n t k
r   d|d< Y nX |j'|d< t(|j)|d< |j|d< |j*|d< |j+|d< |j|d< |j| qW td|id
fS d S )Nr<   r=   r>   i  zThe search for z did not return any results.r@   i  z.There are currently no bookings in the system.r   r   rH   payment_method_namer]   rv   rw   rx   r   currency_namer4  currency_idamount_paidmpesa_referencecard_first_fourcard_last_fourr{   ),r/   r   r   r   r   r   r5   r   r   r   rB   r   rH   r   r   r   r   r1   r   r   r   r   booking_payment_public_idry  r   r{   rN  r   r2   payment_method_public_idpayment_methodru  r   r.   rw   r   getget_currencyr   payment_currencyfloatrx  rz  r{  )r   r>   Zpayments_arrayr   r   bookings_idsr   booking_payments_booking_refrefZbooking_payments_refZtransction_refr@   Zreturn_paymentsr   r   r   rO  r~  r   rP  r4  r8   r8   r9   global_payment_search|
  s    













r  z'/bookings-payments/search/by_date/rangec           D   C   sv  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d }|rTtjjt	j
t	jt jd kj
t	jt jd kj
t	j|kj }n4tjjt	j
t	jt jd kj
t	jt jd kj }|sg }|jd td|idfS g }x|D ]}i }tjjtj
tj|jkj }|r|j|d< |j|d< tjjtj
tjd kj
tj|jkj }y|j|d< W n, tk
r^ } zd|d< W Y d d }~X nX i }	t|j|	 y|	d |d< |	d |d< W n6 tk
r } zd|d< |j|d< W Y d d }~X nX tjtj|j}
y|
j d d d |d< W n tk
r   d|d< Y nX |j|d< t|j |d< |j!|d< |j"|d< |j#|d< |j|d< |j| qW td|idfS d S )Nr   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r>   i  z.The start date cannot come after the end date.r@   r~  z'The search did not return any results..r   r   rH   ru  r]   rv   rw   rx   r   rv  r4  rw  rx  ry  rz  r{  r{   )$r   r   r   r   r   r   r   r5   r   r1   r   r{   r~  r   r   rB   r   r   rH   r2   r   r}  ru  r   r.   rw   r   r  r  r   r  r  rx  ry  rz  r{  )r>   r   r@   r   r~  Zreturn_payments_createdr   r   rO  rP  r4  r8   r8   r9    search_payments_by_creation_date
  s    












r  z /bookings-bankslip/search/by_keyc           '   C   s  ddig} t tj| }|r*td|idfS tjd j }g }tjjtj	tj
d kj	tj|kphtjj|jtjj jttj }x|D ]}|j|j qW tjjtj	tj
d kj	tj|kptjj|jtjj jttj }x|D ]}|j|j qW tjjtj	tj
d kj	tj|kp2tjj|jtjj jttj }x|D ]}	|j|	j qVW yltjd j }
tjjtj	tj
d kj	tj|
kjtjj jttj }x|D ]}|j|j qW W n$ tk
r } zW Y d d }~X nX tjjtj	tj
d kj	tj|kp,tjj|jtjj jttj }x|D ]}|j|j qPW tjjtjtjj	tj|j kptjj|j j }g }x|D ]}|j|j qW tjjtj	tj
d kj	tj j!t"|j }x|D ]}|j|j qW t"|s:g }|jd| d  td|idfS tjjtj	tjj!t"|jtjj j }|sg }|jd	 td|id
fS g }x^|D ]T}tjjtj	tj|j kj# }i }|j|d< |j|d< |j|d< |j|d< |j|d< |j |d< |j|d< |j|d< |j|d< |j$|d< t%j&t'j(|j)}y|j d d d |d< W n tk
rp   d|d< Y nX |j)|d< |j*}i }y&t+|| |d |d< |d |d< W n4 tk
r } zd|d< d|d< W Y d d }~X nX |j| qW td|id
fS d S )Nr<   r=   r>   i  zThe search for z did not return any results.r@   i  z4There are currently no bookings slips in the system.r   booking_bank_slip_public_idr   r   slip_referencerH   rB   payment_amountreceipt_detailsr{   r   rx   r   rv  r]   rw  rv   rw   ),r/   r   r   r   r   r   r5   r   r4   r   r   r   r   r   r{   rN  r5  r   r   r   r   r  r   r  r  r   r  r   r   rB   rH   r   r   r   r   r   r   r   r  r  r   rw  rw   r.   )r   r>   r   Zslip_id_arrZreturn_slip_first_namer   Zreturn_slip_last_namer   Zreturn_slip_referenceZ
single_refZsearch_term_intZreturn_amountZsingle_amountr   Zreturn_receipt_detailsZsingle_receiptr   r  r   r  r  r@   Zreturn_slipsr   rx   r   get_bookingr   r4  rw   rP  r8   r8   r9   global_bankslip_search@  s    
























r  z'/bookings-bankslip/search/by_date/rangec           5   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d }|rTtjjt	j
t	jt jd kj
t	jt jd kj
t	j|kj }n4tjjtj
tjt jd kj
tjt jd kj }|sg }|jd td|idfS g }x^|D ]T}tjjtj
tj|jkj }i }	|j|	d< |j|	d< |j|	d< |j|	d< |j|	d< |j|	d< |j|	d< |j|	d< |j|	d< |j|	d< tjtj|j}
y|
j d d d |	d< W n tk
r   d|	d< Y nX |j|	d< |j }i }y&t!|| |d |	d< |d |	d< W n4 tk
r  } zd|	d< d|	d< W Y d d }~X nX |j|	 qW td|idfS d S ) Nr   zStart date is empty.zStart date is missing.r   zEnd date is empty.zEnd date is missing.z5You appear to be missing some data. Please try again.r>   i  z.The start date cannot come after the end date.r@   
allocationz'The search did not return any results..r   r  r   r   r  rH   rB   r  r  r{   r   rx   r   rv  r]   rw  rv   rw   )"r   r   r   r   r   r   r   r5   r   r4   r   r{   r   r   r1   r   rB   r   r   r  r   r   r  rH   r  r  r   r  r  r   rw  r   rw   r.   )r>   r   r@   r   r  Zreturn_slips_createdrx   r   r  r   r4  rw   rP  r8   r8   r9   search_bankslip_creation_date  s    

















r  )iflaskr   r   r   r   r   r   r   r	   r
   pymysqlosmathr   uuidroutesr   r   r   database.bookings_notesr   r   r   routes.seed_functionsr   r   routes.bookings_urlsr   database.booking_typesr   database.bookingsr   database.booking_guestsr   database.booking_statusr   database.credit_noter   database.booking_detailsr   database.facilityr   database.booking_guest_typesr   database.mandatory_paymentsr   database.invoicer   database.inventoryr   database.gatepass_guestsr   database.gatepassr    database.gater!   database.partnerr"   database.check_in_vehiclesr#   database.schoolr$   database.school_bookingr%   database.groupr&   database.memberr'   database.destinationr(   database.residency_proofr)   functions.booking_snippetsr*   r+   r,   r-   r.   functions.validationr/   	variablesr0   database.booking_paymentsr1   database.payment_methodsr2   Zdatabase.booking_bank_slipsr4   r6   router   r   r
  r  r'  r(  rC  rU  rc  rm  rt  r  r  r  r  r8   r8   r8   r9   <module>   s   $(  S  ut  n  .     o "H nV 