3
؀h                @   s  d dl Z d dlZd dlZd dlZd dlmZmZ d dl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 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl.m7Z7m8Z8m9Z9 d dl:m;Z; d dl<T dd Z=e/j>ddgde/j>ddgddd Z?e/j>d dgde/j>d!dgdd"d# Z@e/j>d$dgdd%d& ZAe/j>d'dgdd(d) ZBe/j>d*dgde/j>d+dgdd,d- ZCe/j>d.dgde/j>d/dgdd0d1 ZDe/j>d2dgdd3d4 ZEe/j>d5dgdd6d7 ZFe/j>d8dgdd9d: ZGe/j>d;d<d= ZHe/j>d>dgdd?d@ ZIe/j>dAdgddBdC ZJe/j>dDdEdF ZKe/j>dGdHdI ZLe/j>dJdKgde/j>dLdKgde/j>dJdKgde/j>dLdKgddMdN ZMe/j>dOdKgddPdQ ZNe/j>dRdKgddSdT ZOe/j>dUdKgddVdW ZPdS )X    N)datetime	timedelta)defaultdict)Flaskjsonjsonifyredirectrender_templaterequesturl_for)BookingActivity)	GuestType)BookingGuest)BookingStatus)BookingType)Booking)Facility)FacilityPricing)Gatepass)GatepassGuest)Invoice)	Mandatory)GenerateDateFromString)appdb)get_booking_status_idcurrencyHandler)BookingStatusSeedBookingTypeSeed)db_cache	FromCachememoise_cache),check_available_single_facility_booking_date)*c             C   s   | j j  d S )N)sessionclose)self r'   5/booking_service/app/routes/bookings_facility_urls.pyr%   &   s    r%   z!/bookings/facility/available/datePOST)methodsz(/bookings/public/facility/available/datec        7   ]   C   s  g } y&t jd j  t jd s(| jd W n, tk
rV } z| jd W Y d d }~X nX 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 | rtd| idfS t jd t jd k rg }|jd	 td
|idfS tjt jd }tjt jd }tj	 j
d}tj|}g }g }g }x(||kr^|j| |tdd }q8W tjt jd }	tjtt jd t jd dd}
g }g }x|
j d D ]}g }|jd |d dkrdt jkrR|d rRy|d }W n$ tk
r } zW Y d d }~X nX x|D ]}|d }qW |d kr:d}nt|}|t|d }n|	}|	|k rr|d dkrrqx|D ]x}tjjtjttjtjk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!t"dkjtj!t"dkjtj|d kjtj d kjtj!t"dkj# }g }|jd xT|D ]L}|jj
dt jd kr^n,|jj
dt jd krxn|j|j|j  q@W |d rxH|d D ]<}|d |j
dk |d  |j
dk@ r|j|d!  n qW |jt$| qzW t%|}|d" d#kr|d dkr|dkr*q|d$ }|ri }x>|d% D ]2}|d t jd k|d  t jd k@ rF|}n qFW |rt&d&|d'  d& }yҐx|d D ]}g }|d( } | r*x`| D ]X}!i }"xB|!D ]:}#d|#krt't(t&|!|# | |"|#< n|!|# |"|#< qW |j|" qW ||d(< n g }$|d) }%|%rx`|%D ]X}&i }'xB|&D ]:}#d|#kr|t't(t&|&|# | |'|#< n|&|# |'|#< qPW |$j|' qBW |$|d)< g }(|d* })|)r"x`|)D ]X}*i }+xB|*D ]:}#d|#krt't(t&|*|# | |+|#< n|*|# |+|#< qW |(j|+ qW |(|d*< yt't(t&|d+ | },W n t)k
rX   d,},Y nX yt't(t&|d- | }-W n t)k
r   d,}-Y nX yt't(t&|d. | }.W n t)k
r   d,}.Y nX yt't(t&|d/ | }/W n t)k
r    d,}/Y nX yt't(t&|d0 | }0W n t)k
r8   d,}0Y nX |,|d+< |-|d-< |.|d.< |/|d/< |0|d0< qW W n$ t)k
r } zW Y d d }~X nX dt jkr|d r|j| n n
|j| n.dt jkr|d r|j| n n
|j| q|d d1kr|dkrt|d2 }1t|d3 }2|1|2 }3t*j+|3| |1 }4t'|4|d3< t'||d4< t'|3|d5< ||d6< |d$ }|4dkr|ri }x>|d% D ]2}|d t jd k|d  t jd k@ r|}n qW |rt&d&|d'  d& }x|d D ]}g }|d( } | 	rnx`| D ]X}!i }"xB|!D ]:}#d|#k	rBt't(t&|!|# | |"|#< n|!|# |"|#< 	qW |j|" 	qW ||d(< n g }$|d) }%|%	rx`|%D ]X}&i }'xB|&D ]:}#d|#k	rt't(t&|&|# | |'|#< n|&|# |'|#< 	qW |$j|' 	qW |$|d)< g }(|d* })|)
rfx`|)D ]X}*i }+xB|*D ]:}#d|#k
r<t't(t&|*|# | |+|#< n|*|# |+|#< 
qW |(j|+ 
qW |(|d*< yt't(t&|d+ | },W n t)k

r   d,},Y nX yt't(t&|d- | }-W n t)k

r   d,}-Y nX yt't(t&|d. | }.W n t)k
r   d,}.Y nX yt't(t&|d/ | }/W n t)k
rD   d,}/Y nX yt't(t&|d0 | }0W n t)k
r|   d,}0Y nX |,|d+< |-|d-< |.|d.< |/|d/< |0|d0< qW dt jkr|d r|j| n n
|j| n.dt jkr |d r
|j| n n
|j| n q|d$ }t|d2 }1t|d3 }2|1|2 }3t'||d4< t'|3|d7< |ri }x>|d% D ]2}|d t jd k|d  t jd k@ rd|}n qdW |rt&d&|d'  d& }x|d D ]}g }|d( } | rDx`| D ]X}!i }"xB|!D ]:}#d|#krt't(t&|!|# | |"|#< n|!|# |"|#< qW |j|" qW ||d(< n g }$|d) }%|%rx`|%D ]X}&i }'xB|&D ]:}#d|#krt't(t&|&|# | |'|#< n|&|# |'|#< qjW |$j|' q\W |$|d)< g }(|d* })|)r<x`|)D ]X}*i }+xB|*D ]:}#d|#krt't(t&|*|# | |+|#< n|*|# |+|#< qW |(j|+ qW |(|d*< yt't(t&|d+ | },W n t)k
rr   d,},Y nX yt't(t&|d- | }-W n t)k
r   d,}-Y nX yt't(t&|d. | }.W n t)k
r   d,}.Y nX yt't(t&|d/ | }/W n t)k
r   d,}/Y nX yt't(t&|d0 | }0W n t)k
rR   d,}0Y nX |,|d+< |-|d-< |.|d.< |/|d/< |0|d0< qW dt jkr|d r|j| n n
|j| n.dt jkr|d r|j| n n
|j| q|dkrqd8|d3< |d$ }|rdi }x>|d% D ]2}|d t jd k|d  t jd k@ r|}n qW |r4t&d&|d'  d& }x|d D ]}g }|d( } | rx`| D ]X}!i }"xB|!D ]:}#d|#krt't(t&|!|# | |"|#< n|!|# |"|#< qW |j|" qW ||d(< n g }$|d) }%|%rrx`|%D ]X}&i }'xB|&D ]:}#d|#krHt't(t&|&|# | |'|#< n|&|# |'|#< qW |$j|' qW |$|d)< g }(|d* })|)rx`|)D ]X}*i }+xB|*D ]:}#d|#krt't(t&|*|# | |+|#< n|*|# |+|#< qW |(j|+ qW |(|d*< yt't(t&|d+ | },W n t)k
r$   d,},Y nX yt't(t&|d- | }-W n t)k
r\   d,}-Y nX yt't(t&|d. | }.W n t)k
r   d,}.Y nX yt't(t&|d/ | }/W n t)k
r   d,}/Y nX yt't(t&|d0 | }0W n t)k
r   d,}0Y nX |,|d+< |-|d-< |.|d.< |/|d/< |0|d0< qrW dt jkrX|d rb|j| n n
|j| n.dt jkr|d r|j| n n
|j| qW t,|d9d: d;}5t,|d<d: d;}6t|5|6d=d>fS )?Ncheck_in_datezCheck in date is empty.zCheck in date is missing.check_out_datezCheck out date is empty.zCheck out date is missing.messagesi  z:Your check out date cannot come before your check in date.messagez%Y-%m-%d   )days)
start_dateend_date)r   datar   pricing_statusfalsez/public	thumbnailpriceZ	lead_timeaccomodation_type_idPelicanUpdated	Cancelled	public_idunavailability_schedule_setunavailability_schedulestart_date_formattedend_date_formattedunavailability_numberfacility_type_idAccomodationpercentage_pricing_setpercentage_pricingd   pricing_percentagelower_limit_listmiddle_middle_limit_listupper_upper_limit_listmandatory_price minimum_priceextra_pricechild_priceadult_priceStablesmaximum_guestsquantityguests_over_durationtotal_spaceguest_totalspace1c             S   s   | d S )Nnamer'   )orderr'   r'   r(   <lambda>  s    z7check_available_facility_booking_date.<locals>.<lambda>)keyc             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[     s    )facility_datacamping_data   )-r
   r   stripappendKeyErrorr   r   generateDater   todaystrftimer   requestspost"get_active_facilities_with_pricingpathintr   r$   queryr   joinr   
booking_idbooking_public_idadd_columnsfacility_idfacility_booking_check_out_datefacility_booking_check_in_datefacility_booking_adultsfacility_booking_childrenfilterdeletion_markerstatusr   allsummaxfloatstrround	Exceptionmathfloorsorted)7r-   eoutputr+   r,   to_dayrd   blank_array
date_arrayto_check_dateget_all_active_accomodationavailable_facilityavailable_campsitesingle_facilityrV   Zfacility_pricesZfacility_priceZfacility_leadZfacility_lead_timeZmodified_datesingle_datequery_facilities
temp_totalsingle_query_itemeach_schedulerT   percentage_pricing_statusrE   single_percentagepricing_factor	one_pricerH   json_lower_limitone_lower_elementreturn_lower_elementseach_elementmiddle_limit_listjson_middle_limitone_middle_elementreturn_middle_elementsupper_limit_listjson_upper_limitone_upper_elementreturn_upper_elementsmandatory_pricingrM   rN   rO   rP   max_accomodation_guestsrS   rU   	availablereturn_facilitiesreturn_campsitesr'   r'   r(   %check_available_facility_booking_date/   s    










































































































r   z*/bookings/external-facility/available/datez1/bookings/public/external-facility/available/datec           -   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 | rtd| idfS t jd t jd k rg }|jd	 td
|idfS tjt jd }tjt jd }tj	 j
d}tj|}g }g }g }x(||kr^|j| |tdd }q8W tjt jd }	tjtt jd t jd dd}
g }x|
j d D ]}g }|jd t|d }|d dkrd}nt|d }|| }t||d< y|d }dd |D |d< W n8 tk
rJ } zt| t|d  W Y d d }~X nX dt jkrp|d rz|j| n n
|j| qW t|dd d}td |id!fS )"Nr+   z Facility check in date is empty.zCheck in date is missing.r,   zCheck out date is empty.zCheck out date is missing.r-   i  z:Your check out date cannot come before your check in date.r.   z%Y-%m-%dr/   )r0   )r1   r2   )r   r3   r   rR   rS   rL   2   rW   r7   c             S   s   g | ]}|d  dkr|qS )r4   truer'   ).0itemr'   r'   r(   
<listcomp>  s    zBcheck_available_external_facility_booking_date.<locals>.<listcomp>rY   z/publicr6   c             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[   &  s    z@check_available_external_facility_booking_date.<locals>.<lambda>)r\   r]   r_   )r
   r   r`   ra   rb   r   r   rc   r   rd   re   r   rf   rg   +get_external_active_facilities_with_pricingrj   r|   r~   printri   r   )r-   r   r   r+   r,   r   rd   r   r   r   r   r   r   rV   r   rS   rU   Zparamenter_pricesr   r'   r'   r(   .check_available_external_facility_booking_date  s~    





r   z(/bookings/single-facility/available/datec           "   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 | rtd| idfS t jd t jd k rg }|jd	 td
|idfS t jd t jd t jd t jd t jd d}i }t|| |d dkrZg }|jd td
|idfS g }|jd td
|idfS d S )Nrr   zCheck in date is empty.zCheck in date is missing.rq   zCheck out date is empty.zCheck out date is missing.r-   i  z:Your check out date cannot come before your check in date.r.   rp   facility_booking_guestsfacility_booking_public_id)rr   rq   rp   r   r   r   r/   zFacility is available.   zFacility is fully booked.)r
   r   r`   ra   rb   r   r"   )r-   r   r   r3   availabilityr.   r'   r'   r(   'check_available_single_facility_booking.  sF    




r   z!/bookings/facility/available/testc        S   K   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 | rtd| idfS t jd t jd k rg }|jd	 td
|idfS tjt jd }tjt jd }g }g }g }x(||krF|j| |tdd }q W t	j
tdg id}t	j
tdg id}g }	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jtjd kjtj|kjtj|kjtjtdkjtjd kjtjtdkj  }
x|
D ]}|	j|j qW 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jtjd kjtj|kjtj|k jtjtdkjtjd kjtjtdkj  }x|D ]}|	j|j qW g }g }g }x@|D ]6}tjjtjttjtjkjtjtjtjtjtjtjjtjj!|	jtjd kjtj|kjtj|kjtjtdkjtjd kjtjtdkj  }x|D ]}tj|jj"d|ktj|jj"d|k@ rtj|jj"d|krn>|j|j }|j|j|f |j|j|t#|f |j|j qW qW t$t%}t$t%}x |D ]\}}|| j| q.W x&|D ]\}}}|| j||f qPW g }x|j& D ]z\}}i }g } x|D ]}!| j|! qW t$t%}"x | D ]\}#}$|"|# j|$ qW dd |"j& D }%|%||< |j| qW dd |j& D g}&dd |j& D g}'g }(x|j d D ]}|d dk	r
|d |kr`q|d rnq|d })|)ri }*x>|d D ]2}+|+d t jd k|+d t jd k@ r|+}*n qW |*rt'd |*d!  d  },x|d" D ]}-g }.|-d# }/|/rjx`|/D ]X}0i }1xB|0D ]:}2d"|2kr>t#t(t'|0|2 |, |1|2< n|0|2 |1|2< qW |.j|1 qW |.|-d#< n g }3|-d$ }4|4rx`|4D ]X}5i }6xB|5D ]:}2d"|2krt#t(t'|5|2 |, |6|2< n|5|2 |6|2< qW |3j|6 qW |3|-d$< g }7|-d% }8|8rbx`|8D ]X}9i }:xB|9D ]:}2d"|2kr8t#t(t'|9|2 |, |:|2< n|9|2 |:|2< qW |7j|: qW |7|-d%< yt#t(t'|-d& |, };W n t)k
r   d'};Y nX yt#t(t'|-d( |, }<W n t)k
r   d'}<Y nX yt#t(t'|-d) |, }=W n t)k
r   d'}=Y nX yt#t(t'|-d* |, }>W n t)k
r@   d'}>Y nX yt#t(t'|-d+ |, }?W n t)k
rx   d'}?Y nX |;|-d&< |<|-d(< |=|-d)< |>|-d*< |?|-d+< qW d,t j*kr|d- r|(j| n n
|(j| n.d,t j*kr|d- 	r|(j| n n
|(j| q:|d d.kr:|d |kr0x|D ]}@x|@D ]}Ag }B|A|d k	r<x0|@|A D ]$}Cx|CD ]}D|Bj|C|D  	qhW 	q^W t+|B}Et'|d/ }Ft'|d0 }G|F|G }H|H|E |F }I|Id1k	r|E|H|E  }E|H|E |F }Jn|H|E |F }Jg }K|Kjd1 |d 
rfxb|d2 D ]V}LxN|D ]F}M|Ld |Mj"dk |Ld |Mj"dk@ 
rP|Kj|Ld3  n
|Kjd1 
qW 
qW t+|K}N|J|N }Jt+|K|d4< |K|d5< t#|J|d0< |H|E |F |d6< |E|d7< |B|d8< |Jd1kr t#|J|d0< |d })|)ri }*x>|d D ]2}+|+d t jd k|+d t jd k@ 
r|+}*n 
qW |*rt'd |*d!  d  },x|d" D ]}-g }.|-d# }/|/rx`|/D ]X}0i }1xB|0D ]:}2d"|2krt#t(t'|0|2 |, |1|2< n|0|2 |1|2< qpW |.j|1 qbW |.|-d#< n g }3|-d$ }4|4rDx`|4D ]X}5i }6xB|5D ]:}2d"|2krt#t(t'|5|2 |, |6|2< n|5|2 |6|2< qW |3j|6 qW |3|-d$< g }7|-d% }8|8rx`|8D ]X}9i }:xB|9D ]:}2d"|2krt#t(t'|9|2 |, |:|2< n|9|2 |:|2< qjW |7j|: q\W |7|-d%< yt#t(t'|-d& |, };W n t)k
r   d'};Y nX yt#t(t'|-d( |, }<W n t)k
r.   d'}<Y nX yt#t(t'|-d) |, }=W n t)k
rf   d'}=Y nX yt#t(t'|-d* |, }>W n t)k
r   d'}>Y nX yt#t(t'|-d+ |, }?W n t)k
r   d'}?Y nX |;|-d&< |<|-d(< |=|-d)< |>|-d*< |?|-d+< qDW |(j| n
|(j| n n 	q<W 	q.W q:|d })|)ri }*x>|d D ]2}+|+d t jd k|+d t jd k@ rL|+}*n qLW |*rjt'd |*d!  d  },x|d" D ]}-g }.|-d# }/|/r,x`|/D ]X}0i }1xB|0D ]:}2d"|2kr t#t(t'|0|2 |, |1|2< n|0|2 |1|2< qW |.j|1 qW |.|-d#< n g }3|-d$ }4|4rx`|4D ]X}5i }6xB|5D ]:}2d"|2kr~t#t(t'|5|2 |, |6|2< n|5|2 |6|2< qRW |3j|6 qDW |3|-d$< g }7|-d% }8|8r$x`|8D ]X}9i }:xB|9D ]:}2d"|2krt#t(t'|9|2 |, |:|2< n|9|2 |:|2< qW |7j|: qW |7|-d%< yt#t(t'|-d& |, };W n t)k
rZ   d'};Y nX yt#t(t'|-d( |, }<W n t)k
r   d'}<Y nX yt#t(t'|-d) |, }=W n t)k
r   d'}=Y nX yt#t(t'|-d* |, }>W n t)k
r   d'}>Y nX yt#t(t'|-d+ |, }?W n t)k
r:   d'}?Y nX |;|-d&< |<|-d(< |=|-d)< |>|-d*< |?|-d+< qW d,t j*kr|d- r|(j| n n
|(j| n.d,t j*kr|d- r|(j| n n
|(j| q:W t,|(d9d: d;}Og }Px|j d D ]}Q|Qd |kr
qd<|Qd0< |Qd })|)r|i }*x>|Qd D ]2}+|+d t jd k|+d t jd k@ r.|+}*n q.W |*rLt'd |*d!  d  },x|Qd" D ]}-g }.|-d# }/|/rx`|/D ]X}0i }1xB|0D ]:}2d"|2krt#t(t'|0|2 |, |1|2< n|0|2 |1|2< qW |.j|1 qW |.|-d#< n g }3|-d$ }4|4rx`|4D ]X}5i }6xB|5D ]:}2d"|2kr`t#t(t'|5|2 |, |6|2< n|5|2 |6|2< q4W |3j|6 q&W |3|-d$< g }7|-d% }8|8rx`|8D ]X}9i }:xB|9D ]:}2d"|2krt#t(t'|9|2 |, |:|2< n|9|2 |:|2< qW |7j|: qW |7|-d%< yt#t(t'|-d& |, };W n t)k
r<   d'};Y nX yt#t(t'|-d( |, }<W n t)k
rt   d'}<Y nX yt#t(t'|-d) |, }=W n t)k
r   d'}=Y nX yt#t(t'|-d* |, }>W n t)k
r   d'}>Y nX yt#t(t'|-d+ |, }?W n t)k
r   d'}?Y nX |;|-d&< |<|-d(< |=|-d)< |>|-d*< |?|-d+< qW d,t j*krp|Qd- rz|Pj|Q n n
|Pj|Q n.d,t j*kr|Qd- r|Pj|Q n n
|Pj|Q qW t,|Pd=d: d;}Rt|O|Rt#||	d>d?fS )@Nr+   zCheck in date is empty.zCheck in date is missing.r,   zCheck out date is empty.zCheck out date is missing.r-   i  z:Your check out date cannot come before your check in date.r.   r/   )r0   rp   )r   r:   r;   z%Y-%m-%dc             S   s   g | ]\}}|t |iqS r'   )ry   )r   alphabetar'   r'   r(   r     s    z9check_available_facility_booking_test.<locals>.<listcomp>c             S   s   i | ]\}}t ||qS r'   )ry   )r   xyr'   r'   r(   
<dictcomp>  s    z9check_available_facility_booking_test.<locals>.<dictcomp>c             S   s   i | ]\}}||qS r'   r'   )r   r   r   r'   r'   r(   r     s    r3   accomodation_typer9   r<   r=   rD   rE   r?   r@   rF   rG   r7   rH   rI   rJ   rK   rL   rM   rN   rO   rP   z/publicr6   rQ   rR   rS   r   r>   rA   Z	max_availarrayxyzhighest_guest_countguests_over_timec             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[   w  s    z7check_available_facility_booking_test.<locals>.<lambda>)r\   rX   c             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[   $  s    )r]   r^   Z123facility_booking_idr_   )-r
   r   r`   ra   rb   r   r   rc   r   rf   rg   $get_filtered_not_active_accomodationget_filtered_not_campsitesr   r$   rk   r   rl   r   rm   rn   ro   rp   rq   rr   rs   rt   r   ru   rv   rw   r   rx   in_re   r|   r   listitemsr{   r}   r~   ri   rz   r   )Sr-   r   r   r+   r,   r   r   Zreturn_facility_detailsZreturn_camping_detailsr   Zreturn_unavailable_inZ	single_inZreturn_unavailable_outZ
single_outfacility_arrayZoccupied_arrayZx_arrayr   r   r   	guest_sumZfacility_guest_dictZ	test_dictZone_facilityguest_countabcstuffZsingle_itemZitemisedZreturn_infor   Zeach_itemisedZ	text_dictx1y1resZresult_arrayZy_arrayr   r   rE   r   r   r   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   rN   rO   rP   Zsingle_unavailableunavailabler   Zsingle_listZ	each_itemr   max_capacityrS   ZmaximumZavailable_modulusr   Zunavailability_arrayr>   Zeach_un_dateZmax_rooms_unavailabler   r   Zsingle_campsiter   r'   r'   r(   %check_available_facility_booking_teste  s:   












































































































r   z/facility-testz/facility-test/publicc        /   I   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 | rtd| idfS t jd t jd k rg }|jd	 td
|idfS tjt jd }tjt jd }g }g }g }x(||krF|j| |tdd }q W t	j
t}g }g }	x|j d D ]}
g }|jd x|D ]x}tjjtjttjtjk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tdkjtjtdkjtj|
d kjtjd kjtjtdkj }g }|jd xT|D ]L}|jjdt jd krjn,|jjdt jd krn|j|j|j  qLW |
d rxH|
d D ]<}|d |jdk|d |jdk@ r|j|d  n qW |jt | qW t!|}|
d dkr|
d dkr|dkr6q|
d }|ri }x>|
d D ]2}|d t jd k|d t jd k@ rR|}n qRW |rpt"d|d  d }x|
d  D ]}g }|d! }|r2x`|D ]X}i }xB|D ]:}d |krt#t$t"|| | ||< n|| ||< qW |j| qW ||d!< n g }|d" }|rx`|D ]X}i }xB|D ]:}d |krt#t$t"|| | ||< n|| ||< qXW |j| qJW ||d"< g } |d# }!|!r*x`|!D ]X}"i }#xB|"D ]:}d |kr t#t$t"|"| | |#|< n|"| |#|< qW | j|# qW | |d#< yt#t$t"|d$ | }$W n t%k
r`   d%}$Y nX yt#t$t"|d& | }%W n t%k
r   d%}%Y nX yt#t$t"|d' | }&W n t%k
r   d%}&Y nX yt#t$t"|d( | }'W n t%k
r   d%}'Y nX yt#t$t"|d) | }(W n t%k
r@   d%}(Y nX |$|d$< |%|d&< |&|d'< |'|d(< |(|d)< qW d*t j&kr|
d+ r|j|
 n n
|j|
 n.d*t j&kr|
d+ r|j|
 n n
|j|
 qr|
d d,krr|dk
rt'|
d- })t'|
d. }*|)|* }+t(j)|+| |) },t#|,|
d.< t#||
d/< t#|+|
d0< ||
d1< |
d }|,dkr|
ri }x>|
d D ]2}|d t jd k|d t jd k@ rn|}n qnW |
rt"d|d  d }x|
d  D ]}g }|d! }|rNx`|D ]X}i }xB|D ]:}d |kr"t#t$t"|| | ||< n|| ||< qW |j| qW ||d!< n g }|d" }|rx`|D ]X}i }xB|D ]:}d |krt#t$t"|| | ||< n|| ||< qtW |j| qfW ||d"< g } |d# }!|!	rFx`|!D ]X}"i }#xB|"D ]:}d |k	rt#t$t"|"| | |#|< n|"| |#|< qW | j|# qW | |d#< yt#t$t"|d$ | }$W n t%k
	r|   d%}$Y nX yt#t$t"|d& | }%W n t%k
	r   d%}%Y nX yt#t$t"|d' | }&W n t%k
	r   d%}&Y nX yt#t$t"|d( | }'W n t%k

r$   d%}'Y nX yt#t$t"|d) | }(W n t%k

r\   d%}(Y nX |$|d$< |%|d&< |&|d'< |'|d(< |(|d)< qW d*t j&k
r|
d+ 
r|j|
 n n
|j|
 n.d*t j&k
r|
d+ 
r|j|
 n n
|j|
 n qr|
d }t'|
d- })t'|
d. }*|)|* }+t#||
d/< t#|+|
d2< |ri }x>|
d D ]2}|d t jd k|d t jd k@ rD|}n qDW |rbt"d|d  d }x|
d  D ]}g }|d! }|r$x`|D ]X}i }xB|D ]:}d |krt#t$t"|| | ||< n|| ||< qW |j| qW ||d!< n g }|d" }|rx`|D ]X}i }xB|D ]:}d |krvt#t$t"|| | ||< n|| ||< qJW |j| q<W ||d"< g } |d# }!|!rx`|!D ]X}"i }#xB|"D ]:}d |krt#t$t"|"| | |#|< n|"| |#|< qW | j|# qW | |d#< yt#t$t"|d$ | }$W n t%k
rR   d%}$Y nX yt#t$t"|d& | }%W n t%k
r   d%}%Y nX yt#t$t"|d' | }&W n t%k
r   d%}&Y nX yt#t$t"|d( | }'W n t%k
r   d%}'Y nX yt#t$t"|d) | }(W n t%k
r2   d%}(Y nX |$|d$< |%|d&< |&|d'< |'|d(< |(|d)< qW d*t j&kr|
d+ r|j|
 n n
|j|
 n.d*t j&kr|
d+ r|j|
 n n
|j|
 qj|dkrҐqjd3|
d.< |
d }|rDi }x>|
d D ]2}|d t jd k|d t jd k@ r|}n qW |rt"d|d  d }x|
d  D ]}g }|d! }|rx`|D ]X}i }xB|D ]:}d |krt#t$t"|| | ||< n|| ||< q~W |j| qpW ||d!< n g }|d" }|rRx`|D ]X}i }xB|D ]:}d |kr(t#t$t"|| | ||< n|| ||< qW |j| qW ||d"< g } |d# }!|!rx`|!D ]X}"i }#xB|"D ]:}d |krt#t$t"|"| | |#|< n|"| |#|< qxW | j|# qjW | |d#< yt#t$t"|d$ | }$W n t%k
r   d%}$Y nX yt#t$t"|d& | }%W n t%k
r<   d%}%Y nX yt#t$t"|d' | }&W n t%k
rt   d%}&Y nX yt#t$t"|d( | }'W n t%k
r   d%}'Y nX yt#t$t"|d) | }(W n t%k
r   d%}(Y nX |$|d$< |%|d&< |&|d'< |'|d(< |(|d)< qRW d*t j&kr8|
d+ rB|	j|
 n n
|	j|
 n.d*t j&krh|
d+ rr|	j|
 n n
|	j|
 qjW t*|d4d5 d6}-t*|	d7d5 d6}.t|-|.d8d9fS ):Nr+   zCheck in date is empty.zCheck in date is missing.r,   zCheck out date is empty.zCheck out date is missing.r-   i  z:Your check out date cannot come before your check in date.r.   r/   )r0   r3   r   r:   r;   r<   z%Y-%m-%dr=   r>   r?   r@   rA   rB   rC   r8   r9   rD   rE   rF   rG   r7   rH   rI   rJ   rK   rL   rM   rN   rO   rP   z/publicr6   rQ   rR   rS   rT   rU   rV   rW   rX   c             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[     s    znew_test.<locals>.<lambda>)r\   c             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[     s    )r]   r^   r_   )+r
   r   r`   ra   rb   r   r   rc   r   rf   getget_active_facilitiesr   r$   rk   r   rl   r   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   r   rx   re   ry   rz   r{   r|   r}   r~   ri   rj   r   r   r   )/r-   r   r   r+   r,   r   r   r   r   r   r   rV   r   r   r   r   r   rT   r   rE   r   r   r   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   rN   rO   rP   r   rS   rU   r   r   r   r'   r'   r(   new_test0  s   
















































































































r   z&/bookings/facility/available/date/testz-/bookings/public/facility/available/date/testc        2   I   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 | rtd| idfS t jd t jd k rg }|jd	 td
|idfS tjt jd }tjt jd }g }g }g }x(||krF|j| |tdd }q W t	j
tt jd t jd dd}g }g }	x|j d D ]t}
g }|jd g }|jd x|D ]}tjjtjttjtjkjtjtjtjtjtjtjjtjd kjtj|kjtj|kjtjtdkjtjtdkjtj|
d kjtjd kjtjtdkj }g }|jd g }|jd x`|D ]X}|jjdt jd krn8|jjdt jd krn|j|j|j  |j|j  q~W |
d r<xV|
d D ]J}|d |jdk|d |jdk@ r|j|d  |j|d  n qW |jt!| |jt!| qW t"|}t"|}|
d dkrF|
d dkr4|dkrqB|
d }|ri }x>|
d D ]2}|d t jd k|d t jd k@ r|}n qW |rt#d |d!  d  }x|
d" D ]}g }|d# }|rx`|D ]X}i }xB|D ]:}d"|krht$t%t#|| | ||< n|| ||< q<W |j| q.W ||d#< n g }|d$ } | rx`| D ]X}!i }"xB|!D ]:}d"|krt$t%t#|!| | |"|< n|!| |"|< qW |j|" qW ||d$< g }#|d% }$|$rx`|$D ]X}%i }&xB|%D ]:}d"|krbt$t%t#|%| | |&|< n|%| |&|< q6W |#j|& q(W |#|d%< yt$t%t#|d& | }'W n t&k
r   d'}'Y nX yt$t%t#|d( | }(W n t&k
r   d'}(Y nX yt$t%t#|d) | })W n t&k
r2   d'})Y nX yt$t%t#|d* | }*W n t&k
rj   d'}*Y nX yt$t%t#|d+ | }+W n t&k
r   d'}+Y nX |'|d&< |(|d(< |)|d)< |*|d*< |+|d+< qW d,t j'kr|
d- r |j|
 n n
|j|
 n.d,t j'kr&|
d- r0|j|
 n n
|j|
 q|
d d.kr|dkrrt(|
d/ },t(|
d0 }-|,|- }.|
d d1krt(|
d0 | }/nt)j*|.| |, }/t$|/|
d0< t$||
d2< t$|.|
d3< ||
d4< |
d }|/dkrB|r>i }x>|
d D ]2}|d t jd k|d t jd k@ r|}n qW |rt#d |d!  d  }x|
d" D ]}g }|d# }|rx`|D ]X}i }xB|D ]:}d"|krt$t%t#|| | ||< n|| ||< qxW |j| qjW ||d#< n g }|d$ } | 	rLx`| D ]X}!i }"xB|!D ]:}d"|k	r"t$t%t#|!| | |"|< n|!| |"|< qW |j|" qW ||d$< g }#|d% }$|$	rx`|$D ]X}%i }&xB|%D ]:}d"|k	rt$t%t#|%| | |&|< n|%| |&|< 	qrW |#j|& 	qdW |#|d%< yt$t%t#|d& | }'W n t&k
	r   d'}'Y nX yt$t%t#|d( | }(W n t&k

r6   d'}(Y nX yt$t%t#|d) | })W n t&k

rn   d'})Y nX yt$t%t#|d* | }*W n t&k

r   d'}*Y nX yt$t%t#|d+ | }+W n t&k

r   d'}+Y nX |'|d&< |(|d(< |)|d)< |*|d*< |+|d+< qLW d,t j'kr2|
d- r<|j|
 n n
|j|
 n.d,t j'krb|
d- rl|j|
 n n
|j|
 n q|
d }t(|
d/ },t(|
d0 }-|,|- }.t$||
d2< t$|.|
d5< |ri }x>|
d D ]2}|d t jd k|d t jd k@ r|}n qW |rt#d |d!  d  }x|
d" D ]}g }|d# }|rx`|D ]X}i }xB|D ]:}d"|krzt$t%t#|| | ||< n|| ||< qNW |j| q@W ||d#< n g }|d$ } | r"x`| D ]X}!i }"xB|!D ]:}d"|krt$t%t#|!| | |"|< n|!| |"|< qW |j|" qW ||d$< g }#|d% }$|$rx`|$D ]X}%i }&xB|%D ]:}d"|krtt$t%t#|%| | |&|< n|%| |&|< qHW |#j|& q:W |#|d%< yt$t%t#|d& | }'W n t&k
r   d'}'Y nX yt$t%t#|d( | }(W n t&k
r   d'}(Y nX yt$t%t#|d) | })W n t&k
rD   d'})Y nX yt$t%t#|d* | }*W n t&k
r|   d'}*Y nX yt$t%t#|d+ | }+W n t&k
r   d'}+Y nX |'|d&< |(|d(< |)|d)< |*|d*< |+|d+< q"W d,t j'kr|
d- r|j|
 n n
|j|
 n.d,t j'kr8|
d- rB|j|
 n n
|j|
 q|dkrTqd6|
d0< |
d }|ri }x>|
d D ]2}|d t jd k|d t jd k@ rx|}n qxW |rt#d |d!  d  }x|
d" D ]}g }|d# }|rXx`|D ]X}i }xB|D ]:}d"|kr,t$t%t#|| | ||< n|| ||< q W |j| qW ||d#< n g }|d$ } | rx`| D ]X}!i }"xB|!D ]:}d"|krt$t%t#|!| | |"|< n|!| |"|< q~W |j|" qpW ||d$< g }#|d% }$|$rPx`|$D ]X}%i }&xB|%D ]:}d"|kr&t$t%t#|%| | |&|< n|%| |&|< qW |#j|& qW |#|d%< yt$t%t#|d& | }'W n t&k
r   d'}'Y nX yt$t%t#|d( | }(W n t&k
r   d'}(Y nX yt$t%t#|d) | })W n t&k
r   d'})Y nX yt$t%t#|d* | }*W n t&k
r.   d'}*Y nX yt$t%t#|d+ | }+W n t&k
rf   d'}+Y nX |'|d&< |(|d(< |)|d)< |*|d*< |+|d+< qW d,t j'kr|
d- r|	j|
 n n
|	j|
 n.d,t j'kr|
d- r|	j|
 n n
|	j|
 qW t+|d7d8 d9}0t+|	d:d8 d9}1t|0|1d;d<fS )=Nr+   zCheck in date is empty.zCheck in date is missing.r,   zCheck out date is empty.zCheck out date is missing.r-   i  z:Your check out date cannot come before your check in date.r.   r/   )r0   )r1   r2   )r   r3   r   r:   r;   r<   z%Y-%m-%dr=   r>   r?   r@   rA   rB   rC   r8   r9   rD   rE   rF   rG   r7   rH   rI   rJ   rK   rL   rM   rN   rO   rP   z/publicr6   rQ   rR   rS   z$9221ced6-4704-4a9c-a327-d5771f3434d8rT   rU   rV   rW   rX   c             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[     s    z<check_available_facility_booking_date_test.<locals>.<lambda>)r\   c             S   s   | d S )NrY   r'   )rZ   r'   r'   r(   r[     s    )r]   r^   r_   ),r
   r   r`   ra   rb   r   r   rc   r   rf   rg   rh   r   r$   rk   r   rl   r   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   r   rx   re   facility_booked_roomsry   rz   r{   r|   r}   r~   ri   rj   r   r   r   )2r-   r   r   r+   r,   r   r   r   r   r   r   rV   Z
room_totalr   r   r   Ztotal_roomsr   r   rT   Zguests_room_totalr   rE   r   r   r   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   rN   rO   rP   r   rS   rU   r   r   r   r'   r'   r(   *check_available_facility_booking_date_test  s   



















































































































r   z'/bookings/facility/unavailable/facilityc              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 | r|g }|jd t|| ddfS tjjt	j
t	jd kj
t	jt jd kj }g }x.|D ]&}i }|j|d< |j|d< |j| qW td	|id
fS )Nrp   zFacility ID is empty.zFacility ID is missing.z5You appear to be missing some data. Please try again.)r.   r-   i  r+   r,   r3   r_   )r
   r   r`   ra   rb   r   r   r$   rk   r   ru   rv   rp   rx   rr   rq   )r-   r   r.   Zreturn_unavailabler   singlereturn_datar'   r'   r(   +check_unavailable_facility_booking_facility  s*    




r   z/bookings/facility/listc           ;   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 | rtd| idfS tjjt	j
tt	jtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjt	jt	jt	jt	jt	jjt	jd kjt	j t jd kjt	jt jd kjt	jt jd kjt	jt!d	kjt	jt!d
kj" }t#j$t jd }t%j&t'j(t jd }|j }i }|d d d rxF|d d d D ]2}|d t jd k|d t jd k@ r|}n qW |sg }|ri }	d|	d< d|	d< d|	d< |d |	d< |d |	d< d|d  d |	d< d|	d< |d |	d< g |	d < |d |	d!< d|	d"< d|	d#< |d$ |	d$< |d$ |	d%< d|	d&< d|	d'< |j|	 td|id(fS g }
|
jd)|j)d*  t|
g d+d,fS ng }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
r } zW Y d d }~X nX |rDi }	d|	d< d|	d< d|	d< |d |	d< |d |	d< d|d  d |	d< d|	d< |d |	d< g |	d < |d |	d!< d|	d"< d|	d#< |d$ |	d$< |d$ |	d%< d|	d&< d|	d'< |j|	 xf|D ]\}i }|j|d< tjjt0jt0jd kjt0j1|jkj2 }|j3|d< |j|d< |j|d< |j|d< |j|d< |j|d< t4|jt4|j |d/< g }g }tjjt5j
t6t5j7t6j8kj
t9t5j:t9j;kjt6j<t6j8t5j=t5j>t5j?t5j@jt5jd kjt5jt!d
kjt5jt!d	kjt9j|jkj" }x@|D ]8}i }|j<|d0< |j=|d1< |j| |jt4|j= qrW ||d < t4|jt4|j |d!< tjjtAjtAjd kjtAj|jkj2 }tjjtBjtBjd kjtBjC|jkj2 }|rr|jd2krRd	|d"< d3j(tDjEd4 |d5< nd6|d"< d3j(tDjEd7 |d5< n|jd2krd8|d"< d3j(tDjEd9 |d5< nX|jd2krd:|d"< d;j(tDjEd< |d5< n,|jd2krd	|d"< d3j(tDjEd4 |d5< n |jFd=krd3j(tDjEd> |d5< n|jFd?kr:d3j(tDjEd@ |d5< n|jFdAkr\d3j(tDjEdB |d5< n|jFdCkr~d3j(tDjEdD |d5< nn|jFd
krd3j(tDjEdE |d5< nL|jFdFkrd3j(tDjEdG |d5< n*|jFdHkrd3j(tDjEdI |d5< ndJ|d5< |jF|d"< |j|d#< |jj)dKt jd kr*dL|dM< dN|dO< n(|jj)dKt jd k rRdP|dM< dQ|dO< |jj)dKt jd kr|jd2krd8|dM< dR|dO< ndS|dM< dT|dO< |j|d$< |j|d%< |j	r|jdUkrdV|d&< |j|d'< nyBx<|j d D ],}|dW |jkr|dX |d&< |j|d'< qW W nr tGtfk
	rP } zd|d&< |j|d'< W Y d d }~X n: tHtIfk
	r } zdY|d&< |j|d'< W Y d d }~X nX nd|d&< |j|d'< |j| qLW td|id(fS d S )ZNrp   zFacility ID is empty.zFacility ID is missing.datezDate is empty.zDate is missing.r-   i  r;   r:   r3   r   r=   r>   r?   r@   zN/Arn   booking_typebooking_type_idZunavailability_start_datebooking_check_in_dateZunavailability_end_datebooking_check_out_datezUnavailability (Zunavailability_reason)booking_done_bybooking_ref_coderA   inventory_booking_guestsguestsrV   booking_statusbooking_status_id
created_at
updated_atsession_user
session_idr_   zCThere are no accommodation/camping bookings for the selected date: z%d %b %Y)r.   r3   i  	users_ids)r   r   
guest_typeno_of_guestsr/   z!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: #000000z%Y-%m-%dzChecking Inin_house_statusz#3498dbin_house_status_colorzIn-Housez#2ecc71z#e74c3czDue Outz#9b59b6guestPublicr<   	full_namezNetwork Error)Jr
   r   r`   ra   rb   r   r   r$   rk   r   rl   r   rm   rn   ro   r   r   r   r   r   rw   r   r   r   rv   
checked_inchecked_outrs   rt   rr   rq   ru   rp   r   rx   r   rc   rf   r   get_facility_detailsformatre   rg   get_user_from_aumra
exceptionsConnectionErrorTimeoutConnectTimeoutr   booking_type_public_idfirstbooking_type_namerj   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   booking_status_public_idr   configbooking_status_name
IndexErrorAttributeErrorUnboundLocalError)r-   r   return_bookingsrequested_dateZget_facilityfacility_detailsZactive_unavailabilityr   r3   Zreturn_unavailabilityr.   r   id_arrayeach_idreturn_userconnection_errorr   r   r   guest_arrayr   get_all_guests
each_guest
guest_datacheck_to_invoicer   user
user_errornetwork_related_errorsr'   r'   r(   list_facility_bookings  s   



































r,  z/bookings/defaultc           ;   C   s6  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 | rtd| idfS tjjt	j
tt	jtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjt	jt	jt	jt	jt	jjt	jd kjt	j t jd kjt	jt jd kjt	jt jd kjt	jt!d	kjt	jt!d
kj" }t#j$t jd }|sg }|jd|j%d  td|idfS g }xN|D ]D}i }|j|d< tjjt&jt&jd kjt&j'|jkj( }|j)|d< |j|d< |j|d< |j|d< |j|d< |j|d< t*|jt*|j |d< g }	g }
tjjt+j
t,t+j-t,j.kj
t/t+j0t/j1kjt,j2t,j.t+j3t+j4t+j5t+j6jt+jd kjt+jt!d
kjt+jt!d	kjt/j|jkj" }x@|D ]8}i }|j2|d< |j3|d< |	j| |
jt*|j3 qW |	|d< t*|jt*|j |d< tjjt7jt7jd kjt7j8|jkj( }|jdkrd|d< d|d< nz|jdkrd |d< d!|d< n\|jdkrd	|d< d"|d< n>|j9d#krd$|d< n|j9d%kr
d&|d< nd'|d< |j9|d< |j|d(< |jj%d)t jd krPd*|d+< d,|d-< n(|jj%d)t jd k rxd.|d+< d/|d-< |jj%d)t jd kr|jdkrd|d+< d0|d-< nd1|d+< d2|d-< |j|d3< |j|d4< g }x|D ]}|j|j qW yt:j;t<d5|id6}W n6 t:j=j>t:j=j?t:j=j@fk
r> } zW Y d d }~X nX |jr yBx<|j d7 D ],}|d8 |jkrX|d9 |d:< |j|d;< qXW W nr tAtfk
r } zd<|d:< |j|d;< W Y d d }~X n: tBtCfk
r } zd=|d:< |j|d;< W Y d d }~X nX nd<|d:< |j|d;< |j| qW td7|id>fS d S )?Nrp   zFacility ID is empty.zFacility ID is missing.r   zDate is empty.zDate is missing.r-   i  r;   r:   zCThere are no accommodation/camping bookings for the selected date: z%d %b %Yr.   i  rn   r   r   r   r   r   r   r   r   r   r   rV   r/   zChecked Outr   z&background-color: #73a533; color: #fffr   z
Checked Inz&background-color: #2196f3; color: #fffz&background-color: #e53935; color: #fffr   z&background-color: #e67e22; color: #fffzNo-Showz&background-color: #9b59b6; color: #fffz&background-color: #fff; color: #000000r   z%Y-%m-%dzChecking Inr   z#3498dbr   zIn-Housez#2ecc71z#e74c3czDue Outz#9b59b6r   r   r   )r   r3   r<   r  r   r   zN/AzNetwork Errorr_   )Dr
   r   r`   ra   rb   r   r   r$   rk   r   rl   r   rm   rn   ro   r   r   r   r   r   rw   r   r   r   rv   r  r  rs   rt   rr   rq   ru   rp   r   rx   r   rc   re   r   r  r  r  rj   r   r   r  r  r   r  r  r  r  r  r  r  r   r  r  rf   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   r!  r"  r#  r)  r*  r+  r'   r'   r(   test_function_on_listingZ  s   

























r-  z/bookings/facility/viewc              C   s   t jjtjtjd kj dkr>g } | jd td| idfS t jjtjtjd kj	 }g } x`|D ]X}i }|j
|d< |j|d< |j|d< |j|d< |j|d	< |j|d
< |j|d< | j| qdW td| idfS )Nr   z-There are no facility bookings in the system.r.   i  r   rm   rp   rr   rq   r   r   r3   r_   )r   r$   rk   r   ru   rv   countra   r   rx   r   rm   rp   rr   rq   r   r   )r   r  r   r   r'   r'   r(   get_all_facility_bookings  s(    








r/  z/bookings/facility/searchc           <   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 y(t jd
 j  t jd
 s(| jd W n. tk
rX } 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d kj dkrg }|jd td|idfS tjjt	j
t	jd kj
t	jt jd kj }g }xh|D ]`}i }|j|d< |j|d< |j|d< |j|d< |j|d< |j|j |d< |j|d
< |j| qW td|idfS )Nrp   zFacility ID is empty.zFacility ID is missing.r1   zStart date is empty.zStart date is missing.r2   zEnd date is empty.zEnd date 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-There are no facility bookings in the system.r.   r   rm   rr   rq   r   r3   r_   )r
   r   r`   ra   rb   r   r   r$   rk   r   ru   rv   r.  rp   rx   r   rm   rr   rq   rs   rt   r   )r-   r   r.   r   r  r   r   r'   r'   r(   $search_all_facility_bookings_by_date8  sd    











r0  z /bookings/facility/view/schedulec        "      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 | r|g }|jd t|| ddfS t jd j sg }|jd td|idfS tj j }tj	 t
|d d	 }tj	 t
d
| d	 }tj j }|t
dd	 }|t
dd	 }	tj	 }
tj	 t
dd	 }tjjtjtjd kjtjt jd kjtj|
jdkj }tjjtjtjd kjtjt jd kjtj|jdkj }tjjtjtjd kjtjt jd kjtj|jdkjtj|jdkj }tjjtjtjd kjtjt jd kjtj|jdkjtj|	jdkj }tjjtjtjd kjtjt jd kjtj|
jdkj }g }xb|D ]Z}i }|j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j| qW tjjtjtjd kjtjt jd kjtj|jdkj }g }xb|D ]Z}i }|j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j| q8W tjjtjtjd kjtjt jd kjtj|jdkjtj|jdkj }g }xb|D ]Z}i }|j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j| qW tjjtjtjd kjtjt jd kjtj|jdkjtj|	jdkj }g }xb|D ]Z}i }|j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j|d< |j| qW g } i }!||!d< ||!d< ||!d< ||!d< ||!d< ||!d< ||!d< ||!d< |jd|!d< |jd|!d< |jd|!d< |	jd|!d< | j|! td | id!fS )"Nrp   zFacility ID is empty.zFacility ID is missing.z5You appear to be missing some data. Please try again.)r.   r-   i  r.   r/   )r0         z%Y-%m-%dr   rm   facility_coderr   rs   rt   Ztoday_countZtoday_bookingsZtomorrow_countZtomorrow_bookingsZthis_week_countZthis_week_bookingsZnext_week_countZnext_week_bookingsz%y-%m-%dZdate_start_of_weekZdate_end_of_weekZdate_start_of_next_weekZdate_end_of_next_weekr3   r_   )r
   r   r`   ra   rb   r   r   rd   weekdaynowr   r   r$   rk   r   ru   rv   rp   rr   re   r.  rx   r   rm   r3  rs   rt   )"r-   r   r.   r   r4  Zstart_of_weekZend_of_weekZnext_weekdayZstart_of_next_weekZend_of_next_weekrd   ZtomorrowZcount_bookings_todayZcount_bookings_tomorrowZcount_bookings_this_weekZcount_bookings_next_weekZget_bookings_todayZtoday_arrayZsingle_todayZreturn_bookings_todayZget_bookings_tomorrowZtomorrow_arrayZsingle_tomorrowZreturn_bookings_tomorrowZget_bookings_this_weekZthis_week_arrayZsingle_this_weekZreturn_bookings_this_weekZget_bookings_next_weekZnext_week_arrayZsingle_next_weekZreturn_bookings_next_weekr3   Zbooking_scheduler'   r'   r(   get_facility_schedule~  s    





































r6  z%/bookings/facility/view/<facility_id>c             C   s   t jjtjtjd kjtj| kj dkrJg }|jd t	d|idfS t jjtjtjd kjtj| kj
 }g }xj|D ]b}i }|j|d< |j|d< |j|d< |j|d< |j|d	< |j|d
< |j|d< |j|d< |j| q|W t	d|idfS )Nr   z=That facility booking does not appear to exist in the system.r.   i  rm   rp   facility_check_in_datefacility_check_out_dater   r   r   r   r3   r_   )r   r$   rk   r   ru   rv   r   r.  ra   r   rx   rm   rp   rr   rq   r   r   r   r   )rp   r   r  r   r   r'   r'   r(   get_single_facility_bookings5  s0    








r9  z3/bookings/facility/view/from_facility/<facility_id>c             C   sd   t jjdtjd  dj|  }t jj|}|j jd}t	j
|j j|}tt	j|d d S )Nzhttp://SERVERz:5001/facility/pricing/{}utf8r3   r   )urllibr
   Requestr   r  r  urlopeninfoget_content_charsetr   loadsreaddecoder   dumps)rp   r
   responseencodingr3   r'   r'   r(   )get_single_facility_booking_from_facilityY  s    	rG  z/bookings/facility/editPATCHz/bookings/campsite/editc           j   C   s  g } yt jd s| jd W n, tk
rH } z| jd W Y d d }~X nX y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 s| jd W n, tk
r } z| jd	 W Y d d }~X nX y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
 s6| jd W n. tk
rf } z| jd W Y d d }~X nX yt jd s| jd W n. tk
r } z| jd W Y d d }~X nX | rtd| idfS t jd
 }g }tjt jd }tjt jd }tdd}x"||kr"|j| ||7 }qW i }g }g }	y(tj	t
j|}
d}xV|D ]L}tjjtjttjtjkjtjtjtjjtjd kjtj|kjtj|kjtj|kjtjtdkjtjtdkjtjd kjtjtdkjtt j! }i }i }|
j d d d rfxJ|
j d d d D ]2}|d |j"dk|d |j"dk@ r0|}n q0W |sr|r|| |d< |	j| n||d< |j| qPW t#|	dkrg }|jd td|idfS tjjtjtjd kjtj$t jd kjtjtdkjtjtdkj% }|s@g }|jd  td|id!fS d"t j&krt jd |_t jd |_t jd# |_t jd$ |_t jd% |_'t jd& |_(t)j* |_+t,t-t.j/ |jd't jd t)j* d(}tjj0| y0tjj1  t2t g }|jd) td|id*fS  t3k
rV } z8t4| tjj5  t2t g }|jd+ td|idfS d }~X nX W nh tj6j7tj6j8tj6j9fk
r } zd,|d-< d,|d.< W Y d d }~X n$ tk
r } zW Y d d }~X nX d S )/Nr   zFacility booking ID is empty.zFacility booking ID is missing.rr   zCheck in date is empty.zCheck in date is missing.rq   zCheck out date is empty.zCheck out date is missing.rp   zFacility is not provided.zFacility is missing.r   zSession ID is empty.zSession ID is missing.r-   i  r/   )r0   r:   r;   r3   r   r=   r>   r?   z%Y-%m-%dr@   available_slotsz<The camping site is not available during the provided dates.r.   z?The accommodation/campsite reservation doesn't appear to exist.i  z	/campsiters   rt   facility_booking_extra_adultsfacility_booking_extra_childrenzCampsite reservation updated)booking_activity_public_idrm   booking_activity_descriptionr   r   z8The accommodation/campsite reservation has been updated.r_   zaThere was an error while updating the accommodation/campsite reservation. Please try again later.zNetwork error.Zaccomodation_namerR   ):r
   r   ra   rb   r   r   rc   r   rf   r   r  r  r   r$   rk   r   rl   r   rm   rn   ro   rs   rt   ru   rv   rp   rr   rq   rw   r   optionsr    r   rx   re   lenr   r  ri   rJ  rK  r   r5  r   r   r|   uuiduuid4addcommitr%   r~   r   rollbackr  r  r	  r
  )r-   r   Zbooked_facility_idr   startingendingadd_dayZreturn_camping_infoZcamp_available_arrayZcamp_unavailable_arrayreturn_facilityrS   	each_dateget_all_bookingsreturn_accomodation_data#accommodation_active_unavailabilityr   r   return_bookingr.   booking_activityr#  no_datar'   r'   r(   edit_single_facility_bookingm  s   











 r`  z/bookings/facility/modify/datec           H   C   s  g } yt jd s| jd W n, tk
rH } z| jd W Y d d }~X nX y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 s| jd W n, tk
r } z| jd	 W Y d d }~X nX yt jd
 s| jd W n. tk
r } z| jd W Y d d }~X nX | r4td| idfS tjjtj	tj
d kj	tjt jd kj	tjtdkj	tjtdkj }|sg }|jd td|idfS t jd |_t jd |_t jd d t jd  d t jd  d t jd  d t jd  d }tttj |j|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
r } z8t| tjj  tt g }|jd td|idfS d }~X nX d S )Nr   zFacility booking ID is empty.zFacility booking ID is missing.r+   zCheck in date is empty.zCheck in date is missing.r,   zCheck out date is empty.zCheck out date is missing.r   zSession ID is empty.zSession ID is missing.r-   i  r:   r;   z?The accommodation/campsite reservation doesn't appear to exist.r.   i  facility_namez  reservation date changed from (Zold_check_in_datez - Zold_check_out_datez) to 						(r   )rL  rm   rM  r   r   z8The accommodation/campsite reservation has been updated.r_   zaThere was an error while updating the accommodation/campsite reservation. Please try again later.)r
   r   ra   rb   r   r   r$   rk   r   ru   rv   r   rw   r   r  rr   rq   r   r|   rP  rQ  rm   r   r5  rR  rS  r%   r~   r   rT  )r-   r   r]  r.   log_descriptionr^  r   r'   r'   r(   edit_facility_booking_dates  sx    



F


rc  z!/bookings/pelican/modify/cateringc           >   C   s  g } yt jd s| jd W n, tk
rH } z| jd W Y d d }~X nX y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 s| jd W n, tk
r } z| jd	 W Y d d }~X nX | rtd
| idfS tjjtj	tj
d kj	tjt jd kj	tjtdkj	tjtdkj }|s\g }|jd td|idfS |j}tjtj|j|jjd|jjddd}|j d d d dkrg }|jd td|idfS |j d d d dkrt jd dkrXd }x:|j d d d D ]"}t|d dkr
|d }n q
W |sbg }|jd td|idfS n
t jd dkrd }x:|j d d d D ]"}t|d dkr|d }n qW |sbg }|jd td|idfS nt jd d krDd }x:|j d d d D ]"}t|d! dkr|d! }n qW |sbg }|jd td|idfS ng }|jd" td|idfS x&|D ]}t|t|d# krtt|t|d# t|@   kot|d$ kn  r|d% }	tjtj|	}
|
j d d d& }y t|d }t|d' }d}W n" tk
r,   d}d}d}Y nX y$tt|d( }tt|d) }W n tk
rp   d }d }Y nX n|t|d$ krjqjW t|j |	|}t|j |	|}t|j |	|}||_!||_"||_#t jd |_$|j%}tjjt&j	t&j't jd* kj }tjjt&j	t&j't jd kj }|j d d d+ d, |j( d- |j( d. }t)t*t+j, ||t jd t-j. d/}tjj/| y0tjj0  t1t g }|jd0 td|id1fS  tk
r  } z8t2| tjj3  t1t g }|jd2 td|idfS d }~X nX d S )3Nr   zFacility booking ID is empty.zFacility booking ID is missing.catering_typezCatering type is empty.zCatering type is missing.r   zSession ID is empty.zSession ID is missing.r-   i  r:   r;   z?The accommodation/campsite reservation doesn't appear to exist.r.   i  z%Y-%m-%d)r1   r2   )r   r3   r   r4   r5   zThe pricing has not been set.r   9a9a77ebr7   rH   zbThe pricing for the catering selected option has not been set. Please try another catering option.377788d4rI   266677c3rJ   z6Please check the selected catering type and try again.lower_limitupper_limitcurrencycurrency_namerO   special_pricingspecial_pricing_unit_increaseZold_catering_typerY   z catering type changed from z to rL   )rL  rm   rM  r   r   z8The accommodation/campsite reservation has been updated.r_   zaThere was an error while updating the accommodation/campsite reservation. Please try again later.)4r
   r   ra   rb   r   r   r$   rk   r   ru   rv   r   rw   r   r  rs   rf   rg   get_facility_pricing_by_dater  rp   rr   re   rq   rO  rj   r   get_currencyr{   r~   r}   r   facility_cost_currencyfacility_cost_per_adultfacility_cost_per_childfacility_fixed_costfacility_catering_typerm   r   facility_pricing_type_public_idfacility_pricing_namer   r|   rP  rQ  r   r5  rR  rS  r%   r   rT  )r-   r   r]  r.   Zget_adult_totalr]   limits
each_group
cost_rangefacility_currency_type_idcurrency_detailsfacility_currency_typeadultchildfixedspecialspecial_increase
adult_rate
child_rate
fixed_raterm   Zget_oldZget_newrb  r^  r   r'   r'   r(   edit_pelican_catering_type  s   









,


r  z/bookings/facility/deletec           ,   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 | rtd| idfS tjjt	j
t	jd kj
t	jtd	kj
t	jt jd kj }|s"g }|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
r } z8t| tjj  tt g }|jd td|idfS d }~X nX d S )Nr   zFacility booking ID is empty.zFacility booking ID is missing.r   zSession ID is empty.zSession ID is missing.r-   i  r:   z;The selected accommodation booking doesn't appear to exist.r.   z-The accommodation booking has been cancelled.r_   zTThere was an error while deleting the accommodation booking. Please try again later.)r
   r   r`   ra   rb   r   r   r$   rk   r   ru   rv   rw   r   r   r  r   r5  r   rS  r%   r~   r   rT  )r-   r   r]  r.   r   r'   r'   r(   delete_single_facility_booking  sP    






r  )Qr   osurllib.requestr<  rP  r   r   collectionsr   pymysqlrf   	tracebackflaskr   r   r   r   r	   r
   r   database.booking_activity_logr   database.booking_guest_typesr   database.booking_guestsr   database.booking_statusr   database.booking_typesr   database.bookingsr   database.facilityr   database.facility_pricing_typer   database.gatepassr   database.gatepass_guestsr   database.invoicer   database.mandatory_paymentsr   functions.date_operatorsr   routesr   r   routes.bookings_urlsr   r   routes.seed_functionsr   r   r   r    r!   functions.booking_snippetsr"   	variablesr%   router   r   r   r   r   r   r   r,  r-  r/  r0  r6  r9  rG  r`  rc  r  r  r'   r'   r'   r(   <module>   s   $	       "a7       R      _      n!  H >!F 8$  *U B