3
؀h=                 @   s  d dl Z d dlZd dlZd dlmZmZmZ d dlZd dlZd dlm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.T d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7m8Z8 d dl9T dd Z:e1j;ddgddd Z<e1j;ddgddd  Z=e1j;d!dgdd"d# Z>e1j;d$dgdd%d& Z?e1j;d'dgdd(d) Z@e1j;d*dgdd+d, ZAe1j;d-dgdd.d/ ZBe1j;d0dgdd1d2 ZCe1j;d3dgdd4d5 ZDe1j;d6dgdd7d8 ZEe1j;d9dgdd:d; ZFe1j;d<dgdd=d> ZGe1j;d?dgdd@dA ZHdS )B    N)datedatetime	timedelta)Flaskjsonjsonifyredirectrender_templaterequesturl_for)	GuestType)BookingGuest)BookingStatus)BookingType)Booking)Facility)Gatepass)GatepassGuest)GatepassVehicle)	Inventory)Invoice)	Mandatory)Partner)Vehicle)AsyncRequests)*)	FromCacheappdbdb_cache)get_booking_status_id)BookingStatusSeedBookingTypeSeedc             C   s   | j j  d S )N)sessionclose)self r&   ,/booking_service/app/routes/calendar_urls.pyr$   "   s    r$   z/calendar/view/oldPOST)methodsc        B   ;   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 g }g }g }g }g }g }g }g }	tjt jd }
tjt jd }td	d
}x"|
|kr,|j|
 |
|7 }
qW yt	j
t}|j }yxx|d D ]j}i }|d |d< |d j |d< |d }||d< g }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|d 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 }|d rx>|d D ]2}|d |j%dk|d |j%dk@ rb|}n qbW |s|r||d< ||d  |d< d|d< d|d< g |d< |j| n2||d< ||d< d|d< d|d< g |d< |j| ng }g }x2|D ]*}|j|j|j  |j|j|j  q"W |rd|j|d  ||d< |t&| |d< t&||d< t&||d< g |d< |j| qW ||d< |j| qTW W n tk
r   Y nX W n< t	j'j(t	j'j)t	j'j*fk
r } ztd d!iS d }~X nX t	j
t+}|j }g }x.|d D ]"}|d" d#kr>|j|d  q>W xHt,|D ]:} i }!yt	j
t-j.| }"|"j d d d" }#|#d#kr$| |!d$< |"j d d d j |!d%< t/|"j d d d }$t/|"j d d d& }%|%|!d< g }&x
|D ] }tjjt0jtt0jtjkjt0j1t0j2t0j3t0j4t0jjt0jd kjt0j5| kjt0j6|kjt0j7|kjt0jt dkjt0jt dkjtjd kjtjt dkj!t"t#j$ }i }'i }(|"j d d d r2xJ|"j d d d D ]2}|d |j%dk|d |j%dk@ r|}(n qW |s|(rr||'d< |%|(d  |'d< d|'d< d|'d< |&j|' n*||'d< |%|'d< d|'d< d|'d< |&j|' qg })g }*g }+x2|D ]*},|)j|,j1|,j2  |*j|,j3|,j4  qW ||'d< |+|'d'< |"j d d d( d)kr0|%d	 |'d< t&|)|'d< t&|*|'d< n|"j d d d( d*kr
|$|% }-t&|)d	kt&|)|$k @ rt&|)|$t&|)  }.nt&|)}.|(rt8t9|-t9|. t9|$ |(d  |'d< t&|)|'d< t&|*|'d< n8t8t9|-t9|. t9|$ |'d< t&|)|'d< t&|*|'d< |&j|' qW |&|!d+< n W np t	j'j(t	j'j)t	j'j*fk
rt } z| |!d$< d,|!d%< d,|!d< W Y d d }~X n$ tk
r }/ zW Y d d }/~/X nX |!rp|j|! n qpW g }0x.|d D ]"}1|1d" d-kr|0j|1d  qW xJt,|0D ]<}2i }3yt	j
t-j.|2}4|4j d d d" }#|#d-kr|2|3d$< |4j d d d j |3d%< t/|4j d d d }$t/|4j d d d& }%|%|3d< g }5x|D ]}tjjt0jtt0jtjkjt0j1t0j2t0j3t0j4t0jt0j:t0j;jt0jd kjt0j5|2kjt0j6|kjt0j7|kjt0jt dkjt0jt dkjtjd kjtjt dkj!t"t#j$ }i }6i }(|4j d d d 
rxJ|4j d d d D ]2}|d |j%dk|d |j%dk@ 
r|}(n 
qW |s&|(
r||6d< |%|(d  |6d< d|6d< d|6d< |5j|6 n*||6d< |%|6d< d|6d< d|6d< |5j|6 npg })g }*g }+x,|D ]$},t/|,j:}7|)j|7 |*jd q8W ||6d< |+|6d'< |%|6d< t&|)|6d< d|6d< |5j|6 	qW |5|3d.< n W np t	j'j(t	j'j)t	j'j*fk
r } z| |6d$< d,|6d%< d,|6d< W Y d d }~X n$ tk
r }/ zW Y d d }/~/X nX |3r|j|3 n qW g }8x.|d D ]"}9|9d" d/kr@|8j|9d  q@W x t,|8D ]}:i };yt	j
t-j.|:}"|"j d d d" }#|#d/kr|:|;d$< |"j d d d j |;d%< d	}%|"j d d d }$|$|;d< g }<x|D ]}tjjt0jtt0jtjkjt0j1t0j3t0j4t0j2jt0jd kjt0j5|:kjt0j6|kjt0j7|kjt0jt dkjt0jt dkjtjd kjtjt dkj!t"t#j$ }i }=i }>|"j d d d rxJ|"j d d d D ]2}|d |j%dk|d |j%dk@ r|}>n qW |s||>rP||=d< d|=d< d|=d< d|=d< |<j|= n*||=d< |%|=d< d|=d< d|=d< |<j|= nrg }?g }@x2|D ]*}A|?j|Aj1|Aj2  |@j|Aj3|Aj4  qW ||=d< |%|% |=d< t&|?|=d< t&|@|=d< |<j|= qW |<|;d+< n W np t	j'j(t	j'j)t	j'j*fk
rN } z|:|;d$< d,|;d%< d,|;d< W Y d d }~X n$ tk
rp }/ zW Y d d }/~/X nX |;rr|j|; n qrW yRt<|d0d1 d2}t<|d3d1 d2}t<|d4d1 d2}t<|d5d1 d2}t||||d6S  t=k
r   td d7id8fS X d S )9N
start_datezStart date is empty.zStart date is missing.end_datezEnd date is empty.zEnd date is missing.messagesi     )daysdata	public_idinventory_idnameinventory_namemaximum_guestsUpdated	Cancelledunavailability_schedule_setunavailability_schedulestart_date_formattedz%Y-%m-%dend_date_formattedr   unavailability_numberavailable_slotsr   number_of_peoplenumber_of_extra_peoplebooking_detailsinventory_detailsmessagez Error getting inventory details.facility_type_idAccomodationaccomodation_idaccomodation_namequantitybookingsaccomodation_type_idPelicanStablesaccomodation_detailszNetwork error.zExternal Accommodationexternal_accomodation_detailszCamping Sitesc             S   s   | d S )Nr3   r&   )orderr&   r&   r'   <lambda>x  s    z#calendar_view_old.<locals>.<lambda>)keyc             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN   z  s    c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN   }  s    c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN     s    )	inventoryaccomodationexternal_accomodationcampingz There are no details to display.   )>r
   r   stripappendKeyErrorr   GenerateDateFromStringgenerateDater   requestsgetget_active_inventorytitler   r#   queryr   joinr   
booking_idbooking_public_idadd_columnsinventory_booking_public_idinventory_booking_extra_adults inventory_booking_extra_childreninventory_booking_adultsinventory_booking_childrenfilterdeletion_markerr1   inventory_booking_datestatusr    optionsr   r   allstrftimesum
exceptionsConnectionErrorTimeoutConnectTimeoutget_active_facilitiessetget_facility_detailsformatintr   facility_booking_adultsfacility_booking_childrenfacility_booking_extra_adultsfacility_booking_extra_childrenfacility_idfacility_booking_check_in_datefacility_booking_check_out_dateroundfloatparameter_default_valuefacility_parameter_namesorted	Exception)Br,   efacility_outputinventory_outputcampsite_outputaccomodation_outputexternal_accomodation_outputsummary_array
date_arraystuff_arraystartingendingadd_dayget_inventoryget_all_active_inventorysingle_inventoryreturn_inventory_info
max_guestsinventory_details_array	each_dateget_all_bookingsreturn_inventory_dataactive_unavailabilityeach_schedule number_of_total_inventory_people&number_of_total_inventory_extra_peopleone_bookingconnection_errorget_accomodationget_all_active_accomodationall_facility_bookingssingle_accomodationfacility_bookingreturn_facility_inforeturn_facilityfacility_typemax_accomodation_guestsrF   accomodation_details_arrayreturn_accomodation_data#accommodation_active_unavailabilitynumber_of_accomodation_people#number_of_accomodation_extra_peoplebookings_idone_acc_bookingspace_availablespace_takenno_dataall_external_facility_bookingsZsingle_external_accomodationexternal_facility_bookingreturn_external_facility_infoZreturn_external_facility#external_accomodation_details_array!return_external_accomodation_datadefault_intall_camping_bookingsZsingle_campingcamping_bookingreturn_camping_infocamping_details_arrayreturn_camping_datacampsite_active_unavailabilitynumber_of_camping_peoplenumber_of_camping_extra_peopleone_camp_bookingr&   r&   r'   calendar_view_old)   sb   





























 












r   z/calendar/viewc        @   Q   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 g }g }g }g }g }tjt jd }tjt jd }td	d
}	x"||kr |j| ||	7 }q W y,t	j
tt jd t jd dd}
|
j }W n< t	jjt	jjt	jjfk
r } ztddiS d }~X nX yTxL|d D ]>}i }|d |d< |d j |d< |d }||d< g }x|D ]}tj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|kjtj t!dkjtj t!dkj"t#t$j% }i }i }|d rx>|d D ]2}|d |j&dk|d |j&dk@ r~|}n q~W |s0|r||d< ||d  |d< d|d < d|d!< g |d"< |j| n2||d< ||d< d|d < d|d!< g |d"< |j| ng }g }x2|D ]*}|j|j|j  |j|j|j  q>W |r|j|d  ||d< |t'| |d< t'||d < t'||d!< g |d"< |j| qW ||d#< |j| qW W n tk
r   Y nX y,t	j
t(t jd t jd dd}|j }W n< t	jjt	jjt	jjfk
rb } ztdd$iS d }~X nX g }g }g }x^|d D ]R}|d% d&kr|j| n2|d% d'kr|j| n|d% d(krz|j| qzW xP|D ]F}i } y|d }!|d | d)< |d | d*< t)|d }"t)|d+ }#|#| d< g }$x|D ]}tjjt*jt*j+t*j,t*j-t*j.t*jjt*jd kjt*j/|!kjt*j0|kjt*j1|kjt*j t!dkjt*j t!dkj"t#t$j% }i }%i }&|d rx>|d D ]2}|d |j&dk|d |j&dk@ r|}&n qW |sz|&rL||%d< |#|&d  |%d< d|%d < d|%d!< |$j|% n*||%d< |#|%d< d|%d < d|%d!< |$j|% q2g }'g }(g })x2|D ]*}*|'j|*j+|*j,  |(j|*j-|*j.  qW ||%d< |)|%d,< |d- d.kr|#d	 |%d< t'|'|%d < t'|(|%d!< n|d- d/kr|"|# }+t'|'d	kt'|'|"k @ rDt'|'|"t'|'  },nt'|'},|&rt2t3|+t3|, t3|" |&d  |%d< t'|'|%d < t'|(|%d!< n8t2t3|+t3|, t3|" |%d< t'|'|%d < t'|(|%d!< |$j|% q2W |$| d0< W n$ tk
r
 }- zW Y d d }-~-X nX | r|j|  n qW x|D ]|}.i }/y8|.d }0|.d |/d)< |.d j |/d*< t)|.d }"t)|.d+ }#|#|/d< g }1x|D ]}tjjt*jt*j+t*j,t*j-t*j.t*jt*j4t*j5jt*jd kjt*j/|0kjt*j0|kjt*j1|kjt*j t!dkjt*j t!dkj"t#t$j% }i }2i }&|.d 	rlx>|.d D ]2}|d |j&dk|d |j&dk@ 	r6|}&n 	q6W |	s|&	r||2d< d	|2d< d|2d < d|2d!< |1j|2 n*||2d< d|2d< d|2d < d|2d!< |1j|2 ng }'g }(g })g }3x8|D ]0}*t)|*j4}4|'j|4 |(jd |3j|*j 	qW t6|3}5t7|5}6||2d< |)|2d,< |6|2d< t'|'|2d < d|2d!< |1j|2 qW |1|/d1< W n$ tk

r }- zW Y d d }-~-X nX |/r,|j|/ n q,W xP|D ]F}7i }8y|7d }9|7d |8d)< |7d j |8d*< d	}#|7d }"|"|8d< g }:x|D ]}tjjt*jt*j+t*j-t*j.t*j,jt*jd kjt*j/|9kjt*j0|kjt*j1|kjt*j t!dkjt*j t!dkj"t#t$j% }i };i }<|7d rx>|7d D ]2}|d |j&dk|d |j&dk@ r|}<n qW |sB|<r||;d< d|;d< d|;d < d|;d!< |:j|; n*||;d< |#|;d< d|;d < d|;d!< |:j|; nrg }=g }>x2|D ]*}?|=j|?j+|?j,  |>j|?j-|?j.  qPW ||;d< |#|# |;d< t'|=|;d < t'|>|;d!< |:j|; qW |:|8d0< W n$ tk
r }- zW Y d d }-~-X nX |8
r|j|8 n 
qW yRt8|d2d3 d4}t8|d5d3 d4}t8|d6d3 d4}t8|d7d3 d4}t||||d8S  t9k
rv   tdd9id:fS X d S );Nr*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   )r*   r+   )r   rA   z Error getting inventory details.r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   z%Y-%m-%dr:   r   r;   r<   r   r=   r>   r?   r@   zError getting facility details.rB   rC   zExternal AccommodationzCamping SitesrD   rE   rF   rG   rH   rI   rJ   rK   rL   c             S   s   | d S )Nr3   r&   )rM   r&   r&   r'   rN   l  s    zcalendar_view.<locals>.<lambda>)rO   c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN   n  s    c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN   q  s    c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN   s  s    )rP   rQ   rR   rS   z There are no details to display.rT   ):r
   r   rU   rV   rW   r   rX   rY   r   rZ   postget_active_inventory_improvedrp   rq   rr   rs   r]   r   r#   r^   r   rb   rc   rd   re   rf   rg   r`   rh   ri   r1   rj   rk   r    rl   r   r   rm   rn   ro   get_active_facilities_improvedrx   r   ry   rz   r{   r|   r}   r~   r   r   r   r   r   ru   lenr   r   )@r,   r   r   r   r   r   r   r   r   r   get_inventory_improved!get_all_active_inventory_improvedr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r}   r   rF   r   r   r   r   r   r   r   r   r   r   r   r   external_facility_idr   r   number_bookingsr   uniq_bokingsnumberr   r   
camping_idr   r   r   r   r   r   r&   r&   r'   calendar_view  s   




























 















r   z/calendar/view/inventoryc           >   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 g }g }tjt jd }tjt jd }td	d
}x ||kr|j| ||7 }qW y,t	j
tt jd t jd dd}|j }W n< t	jjt	jjt	jjfk
r| }	 ztddiS d }	~	X nX yTxL|d D ]>}
i }|
d |d< |
d j |d< |
d }||d< g }x|D ]}tj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|kjtj t!dkjtj t!dkj"t#t$j% }i }i }|
d rx>|
d D ]2}|d |j&dk|d |j&dk@ rp|}n qpW |s"|r||d< ||d  |d< d|d < d|d!< g |d"< |j| n2||d< ||d< d|d < d|d!< g |d"< |j| ng }g }x2|D ]*}|j|j|j  |j|j|j  q0W |rr|j|d  ||d< |t'| |d< t'||d < t'||d!< g |d"< |j| qW ||d#< |j| qW W n tk
r   Y nX y"t(|d$d% d&}t|g g g d'S  t)k
r0   tdd(id)fS X d S )*Nr*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   )r*   r+   )r   rA   z Error getting inventory details.r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   z%Y-%m-%dr:   r   r;   r<   r   r=   r>   r?   r@   c             S   s   | d S )Nr3   r&   )rM   r&   r&   r'   rN     s    z)calendar_view_inventory.<locals>.<lambda>)rO   )rP   rQ   rR   rS   z There are no details to display.rT   )*r
   r   rU   rV   rW   r   rX   rY   r   rZ   r   r   rp   rq   rr   rs   r]   r   r#   r^   r   rb   rc   rd   re   rf   rg   r`   rh   ri   r1   rj   rk   r    rl   r   r   rm   rn   ro   r   r   )r,   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r'   calendar_view_inventory  s    













r   z/calendar/view/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 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 g }g }tjt jd }tjt jd }td	d
}x ||kr|j| ||7 }qW yt	j
t}|j }W n< t	jjt	jjt	jjfk
rf }	 ztddiS d }	~	X nX |d }
xP|
D ]F}i }y|d }|d |d< |d |d< t|d }t|d }||d< g }x|D ]}tj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|kjtj t!dkjtj t!dkj"t#t$j% }i }i }|d rx>|d D ]2}|d |j&dk|d |j&dk@ rv|}n qvW |s|r||d< ||d  |d< d|d< d|d < |j| n*||d< ||d< d|d< d|d < |j| qg }g }g }x2|D ]*}|j|j|j  |j|j|j  q,W ||d< ||d!< |d" d#kr|d	 |d< t'||d< t'||d < n|d" d$krl|| }t'|d	kt'||k @ rt'||t'|  }nt'|}|r4t(t)|t)| t)| |d  |d< t'||d< t'||d < n8t(t)|t)| t)| |d< t'||d< t'||d < |j| qW ||d%< W n$ tk
r } zW Y d d }~X nX |rx|j| n qxW y"t*|d&d' d(}t|g g g d)S  t+k
r   tdd*id+fS X d S ),Nr*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   rA   zError getting facility details.r/   r0   rD   r2   rE   r4   rF   r5   r6   r7   r8   r9   z%Y-%m-%dr:   r   r;   r<   r   r=   r>   rG   rH   rI   rJ   rK   c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN     s    z(calendar_view_facility.<locals>.<lambda>)rO   )rQ   rP   rR   rS   z There are no details to display.rT   ),r
   r   rU   rV   rW   r   rX   rY   r   rZ   r   #get_active_accommodation_facilitiesrp   rq   rr   rs   rx   r   r#   r^   r   rb   ry   rz   r{   r|   r`   rh   ri   r}   r~   r   rk   r    rl   r   r   rm   rn   ro   r   r   r   r   )r,   r   r   r   r   r   r   r   r   r   r   r   r   r}   r   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r'   calendar_view_facility  s   




















r   z /calendar/view/external-facilityc           ;   C   sH  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 g }g }tjt jd }tjt jd }td	d
}x ||kr|j| ||7 }qW yt	j
t}|j }W n< t	jjt	jjt	jjfk
rf }	 ztddiS d }	~	X nX |d }
x|
D ]}i }y<|d }|d |d< |d j |d< t|d }|d }||d< g }x|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 |kjtj!|kjtj"|kjtj#t$dkjtj#t$dkj%t&t'j( }i }i }|d rx>|d D ]2}|d |j)dk|d |j)dk@ r~|}n q~W |s |r||d< ||d  |d< d|d< d|d < |j| n*||d< d|d< d|d< d|d < |j| ng }g }g }g }x8|D ]0}t|j}|j| |jd |j|j q6W t*|}t+|}||d< ||d!< ||d< t,||d< d|d < |j| qW ||d"< W n$ tk
r } zW Y d d }~X nX |rx|j| n qxW y"t-|d#d$ d%}t|g g g d&S  t.k
rB   tdd'id(fS X d S ))Nr*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   rA   zError getting facility details.r/   r0   rD   r2   rE   r4   rF   r5   r6   r7   r8   r9   z%Y-%m-%dr:   r   r;   r<   r   r=   r>   rG   rL   c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN   ^  s    z1calendar_view_external_facility.<locals>.<lambda>)rO   )rR   rP   rQ   rS   z There are no details to display.rT   )/r
   r   rU   rV   rW   r   rX   rY   r   rZ   r   get_active_external_facilitiesrp   rq   rr   rs   r]   rx   r   r#   r^   r   rb   ry   rz   r{   r|   r`   r   r   rh   ri   r}   r~   r   rk   r    rl   r   r   rm   rn   ru   r   ro   r   r   )r,   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r'   calendar_view_external_facility  s    





 







r   z/calendar/view/camping-sitesc           ;   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 g }g }tjt jd }tjt jd }td	d
}x ||kr|j| ||7 }qW yt	j
t}|j }W n< t	jjt	jjt	jjfk
rf }	 ztddiS d }	~	X nX |d }
xP|
D ]F}i }y|d }|d |d< |d j |d< d	}|d }||d< g }x|D ]}tj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|kjtjt dkjtjt dkj!t"t#j$ }i }i }|d rx>|d D ]2}|d |j%dk|d |j%dk@ rj|}n qjW |s|r||d< d|d< d|d< d|d< |j| n*||d< ||d< d|d< d|d< |j| nrg }g }x2|D ]*}|j|j|j  |j|j|j  qW ||d< || |d< t&||d< t&||d< |j| qW ||d< W n$ tk
r } zW Y d d }~X nX |rx|j| n qxW y"t'|d d! d"}tg g g |d#S  t(k
r   tdd$id%fS X d S )&Nr*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   rA   zError getting facility details.r/   r0   rD   r2   rE   r4   r5   r6   r7   r8   r9   z%Y-%m-%dr:   r   r   r<   r=   r>   rK   c             S   s   | d S )NrE   r&   )rM   r&   r&   r'   rN     s    z6calendar_view_camping_sites_facility.<locals>.<lambda>)rO   )rP   rQ   rR   rS   z There are no details to display.rT   ))r
   r   rU   rV   rW   r   rX   rY   r   rZ   r   #get_active_camping_sites_facilitiesrp   rq   rr   rs   r]   r   r#   r^   r   rb   ry   r{   r|   rz   rh   ri   r}   r~   r   rk   r    rl   r   r   rm   rn   ro   r   r   )r,   r   r   r   r   r   r   r   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r'   $calendar_view_camping_sites_facilityj  s    













r   z/calendar/entry/viewc           "   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 g }tjt jd }tjt jd }td	d
}x ||kr|j| ||7 }qW t	j
jtjtjd kjtjj jttj }g }x|D ]z}i }	|j|	d< |j|	d< d|	d< g }
x:|D ]0}t	j
jtjttjtjkjtjtjjtjd kjtj |jkjtjdkjtj!t"dkjtj!t"dkjtj#|kjtj$|kjtjd kjtj!t"dkjtj!t"dkjttj }i }||d< |sjd|d< g |d< n<g }g }x|D ]}|jt%|j qxW t&||d< ||d< |
j| qW |
|	d< |j|	 qNW t	j
jt'jt'jd kjt'j(j jttj }g }x|D ]z}i }|j)|d< |j(|d< d|d< g }x:|D ]0}t	j
jt*jtt*jtjkjt*j+tjjt*jd kjt*j,|j)kjt*j+dkjt*j!t"dkjt*j!t"dkjtj#|kjtj$|kjtjd kjtj!t"dkjtj!t"dkjttj }i }||d< |s(d|d< g |d< n<g }g }x|D ]}|jt%|j+ q6W t&||d< ||d< |j| q>W ||d< |j| qW t||ddfS )Nr*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   vehicle_charge_public_idvehicle_charge_categoryu   ∞capacityr   r6   r5   r   vehicle_countr?   vehicle_detailspayment_public_idpayment_personconservancy_fee_countconservancy_fee_details)vehiclesconservancy_feesrT   )-r
   r   rU   rV   rW   r   rX   rY   r   r   r#   r^   r   rh   ri   order_byvehicle_charge_idascrl   r   r   rm   r   r   r   r_   r   gatepass_idgatepass_public_idrb   gatepass_vehicle_countr`   gatepass_vehicle_typerk   r    r*   r+   r   ro   r   r   r   r   gatepass_guest_countgatepass_guest_type)r,   r   r   r   r   r   get_vehicle_entry_feesvehicle_datasingle_vehiclereturn_vehicle_datavehicle_details_arrayr   get_booking_vehiclesr   	count_sumrG   single_booking_vehicleget_conservancy_feesconservancy_fee_datasinglereturn_conservancy_dataconservancy_fee_details_arrayget_conservancy_bookingsr   single_booking_feer&   r&   r'   view_entry_fees  s    












r   z/bookings/vehicles/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t jd }tj	j
tjttjtjkjtjtjtjtjtjjtjd kjtjd	kjtjt jd kjtjtd
kjtjtdkjtjtd
kjtjtdkjtj|kjtj|kj }|sg }|jd|jd  td|idfS g }x"|D ]}i }t|j|d< tj	j
tjtj |jkj! }|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< g }
tj	j
t*jt+t*j,t+j-kjtt*jtjkjt+j.t+j-t*j/t*j0t*j1t*j2jt*jd kjt*jtdkjtj|jkj3t4t5j }x0|D ](}i }|j.|d< |j/|d< |
j| qW |
|d< t|j|d< tj	j
t6jt6jd kjt6j|jkj! }tj	j
t7jt7jd kjt7j8|jkj! }|r|jdkrd
|d< dj9t:j;d |d < nd!|d< dj9t:j;d" |d < n|j<dkrd#|d< dj9t:j;d$ |d < nX|j=dkr2d%|d< d&j9t:j;d' |d < n,|jdkr^d
|d< dj9t:j;d |d < n |j>d(krdj9t:j;d) |d < n|j>d*krdj9t:j;d+ |d < n|j>d,krdj9t:j;d- |d < n|j>d.krdj9t:j;d/ |d < nn|j>dkrdj9t:j;d0 |d < nL|j>d1kr*dj9t:j;d2 |d < n*|j>d3krLdj9t:j;d4 |d < nd5|d < |j>|d< |j|d6< |j?|d7< |j@|d8< |jArtBjCtDj9|jA}|j d9 d: |j d;  |d<< |jA|d=< nd |d<< d |d=< |j| qW td>|id?fS )@N
vehicle_idzVehicle ID is empty.zVehicle ID is missing.r   zDate is empty.zDate is missing.r,   i  r   r6   r5   z5There are no vehicles arriving on the selected date: z%d %b %YrA   i  r   ra   booking_typebooking_type_idbooking_check_in_datebooking_check_out_datebooking_done_bybooking_ref_code
guest_typeno_of_guestsguestsguest_totalr-   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
created_at
updated_at
first_name 	last_namesession_user
session_idr/   rT   )Er
   r   rU   rV   rW   r   rX   rY   r   r#   r^   r   r_   r   r   r   rb   gatepass_vehicle_public_idr   r   gatepass_vehicle_no_of_nightsr`   rh   ri   rk   r    r*   r+   rm   rn   rx   r   ra   firstr   booking_type_public_idr   booking_type_namer   r   r   r  r   r   r   r   r   r   gatepass_discount_rategatepass_cost_per_ppgatepass_no_of_nightsrl   r   r   r   r   booking_status_public_idrw   r   configchecked_out
checked_inbooking_status_namer  r  r  rZ   r[   get_single_user)r,   r   requested_datereturn_bookingsrA   r/   r   return_dataget_bookingr   guest_arrayget_all_guests
each_guest
guest_datacheck_to_invoicer  get_userr&   r&   r'   list_vehicle_bookings  s   















 r8  z/bookings/guests/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t jd }tj	j
tjttjtjkjtjtjtjtjtjjtjd kjtjd	kjtjt jd kjtjtd
kjtjtdkjtjtd
kjtjtdkjtj|kjtj|kj }|sg }|jd|jd  td|idfS g }x"|D ]}i }t|j|d< tj	j
tjtj |jkj! }|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< g }
tj	j
tjt*tjt*j+kjttjtjkjt*j,t*j+tjtj-tj.tjjtjd kjtjtdkjtj|jkj/t0t1j }x0|D ](}i }|j,|d< |j|d< |
j| qW |
|d< t|j|d< tj	j
t2jt2jd kjt2j|jkj! }tj	j
t3jt3jd kjt3j4|jkj! }|r|jdkrd
|d< dj5t6j7d |d < nd!|d< dj5t6j7d" |d < n|j8dkrd#|d< dj5t6j7d$ |d < nX|j9dkr2d%|d< d&j5t6j7d' |d < n,|jdkr^d
|d< dj5t6j7d |d < n |j:d(krdj5t6j7d) |d < n|j:d*krdj5t6j7d+ |d < n|j:d,krdj5t6j7d- |d < n|j:d.krdj5t6j7d/ |d < nn|j:dkrdj5t6j7d0 |d < nL|j:d1kr*dj5t6j7d2 |d < n*|j:d3krLdj5t6j7d4 |d < nd5|d < |j:|d< |j|d6< |j;|d7< |j<|d8< |j=rt>j?t@j5|j=}|j d9 d: |j d;  |d<< |j=|d=< nd |d<< d |d=< |j| qW td>|id?fS )@Nguest_idz!Conservancy category ID is empty.z#Conservancy category ID is missing.r   zDate is empty.zDate is missing.r,   i  r   r6   r5   z3There are no guests arriving on the selected date: z%d %b %YrA   i  r   ra   r   r   r   r   r   r  r  r  r  r  r-   r  z!background-color: {}; color: #fffr  r  z
To Invoicer	  zChecked Outr
  z
Checked Inz background-color:{}; color: #fffr  r  r  r  r  zNo-Showr  r  r  r  r  r  r  r  z&background-color: #fff; color: #000000r  r  r  r  r  r  r  r  r/   rT   )Ar
   r   rU   rV   rW   r   rX   rY   r   r#   r^   r   r_   r   r   r   rb   gatepass_guest_public_idr   r   r'  r`   rh   ri   rk   r    r*   r+   rm   rn   rx   r   ra   r"  r   r#  r   r$  r   r   r   r  r   r   r   r%  r&  rl   r   r   r   r   r(  rw   r   r)  r*  r+  r,  r  r  r  rZ   r[   r-  )r,   r   r.  r/  rA   r/   r   r0  r1  r   r2  r3  r4  r5  r6  r  r7  r&   r&   r'   list_guest_bookingsW  s   















 r;  z/calendar/view/partnerc           C   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 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 g }g }g }g }g }g }g }tjt jd }	tjt jd }
tdd}x"|	|
kr|j|	 |	|7 }	q`W yt	 }t
jt}|j }yx|d D ]}i }|d |d< |d j |d< g }xR|D ]H}tjjtjttjtjkjttjtjkjtjtjtjtjtjtjjtjd kjtj|d 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j#t jd kj$t%t&j' }i }|s||d< d|d< |j| nPg }x,|D ]$}|j|j|j |j |j  qW ||d< t(||d< |j| qW ||d< |j| qW W n tk
r^   Y nX W n< t
j)j*t
j)j+t
j)j,fk
r } ztddiS d }~X nX yt-|dd d}td|iS  t.k
r   tddid fS X d S )!N
partner_idzPartner ID is empty.zPartner ID is missing.r*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   r/   r0   r1   r2   r3   r5   r6   r   r   r=   r@   rA   z Error getting inventory details.c             S   s   | d S )Nr3   r&   )rM   r&   r&   r'   rN   	  s    z'view_partner_calendar.<locals>.<lambda>)rO   rP   z There are no details to display.rT   )/r
   r   rU   rV   rW   r   rX   rY   r   r   rZ   r[   r\   r]   r   r#   r^   r   r_   r   r`   ra   r   rb   rc   rf   rg   rd   re   rh   ri   r1   rj   rk   r    r<  rl   r   r   rm   ro   rp   rq   rr   rs   r   r   )r,   r   r   r   r   r   r   r   r   r   r   r   asyncRequestsZactive_inventoryr   r   r   r   r   r   r   r   r   r   r&   r&   r'   view_partner_calendar	  s    









r>  z/calendar/entry/view/partnerc           0   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 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 g }tjt jd }tjt jd }tdd}x"||krh|j| ||7 }qHW t	j
jtjtjd kjtjj jttj }g }x|D ]}i }	|j|	d< |j|	d< g }
xH|D ]>}t	j
jtjttjtjkjttjtjkjtj tjjtjd kjtj!|jkjtj dkjtj"t#dkjtj"t#dkjtj$|kjtj%|kjtjd kjtj"t#dkjtj"t#dkjtj&t jd kjttj }i }||d< |sd|d< n0g }x|D ]}|jt'|j  qW t(||d< |
j| qW |
|	d< |j|	 qW t	j
jt)jt)jd kjt)j*j jttj }g }x|D ]}i }|j+|d< |j*|d< g }xH|D ]>}t	j
jt,jtt,jtjkjttjtjkjt,j-tjjt,jd kjt,j.|j+kjt,j-dkjt,j"t#dkjt,j"t#dkjtj$|kjtj%|kjtjd kjtj"t#dkjtj"t#dkjtj&t jd kjttj }i }||d< |sd|d< n0g }x|D ]}|jt'|j- qW t(||d< |j| qW ||d< |j| qlW t||ddfS )Nr<  zPartner ID is empty.zPartner ID is missing.r*   zStart date is empty.zStart date is missing.r+   zEnd date is empty.zEnd date is missing.r,   i  r-   )r.   r   r   r   r6   r5   r   r   r   r   r   r   r   )r   r   rT   )/r
   r   rU   rV   rW   r   rX   rY   r   r   r#   r^   r   rh   ri   r   r   r   rl   r   r   rm   r   r   r   r_   r   r   r   r   r`   rb   r   r   rk   r    r*   r+   r<  r   ro   r   r   r   r   r   r   )r,   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r'   view_partner_entry_fees	  s    













r?  z/bookings/guests/partner/listc           2   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t jd }tj	j
tjttjtjkjttjtjkjtjtjtjtjtjjtjd k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dkjtjtdkjtj|kjtj|kjtjt jd kj }|s2g }|jd|jd  td|idfS g }x"|D ]}i }t |j|d< tj	j
t!jt!j"|jkj# }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< |j+|d< g }
tj	j
tjt,tjt,j-kjttjtjkjt,j.t,j-tjtj/tj0tjjtjd kjtjtdkjtj|jkj1t2t3j }x0|D ](}i }|j.|d< |j|d< |
j| qnW |
|d< t |j|d< tj	j
t4jt4jd kjt4j|jkj# }tj	j
t5jt5jd kjt5j6|jkj# }|rT|jdkr4d|d < d!j7t8j9d" |d#< nd$|d < d!j7t8j9d% |d#< n|j:dkrd&|d < d!j7t8j9d' |d#< nX|j;dkrd(|d < d)j7t8j9d* |d#< n,|jdkrd|d < d!j7t8j9d" |d#< n |j<d+krd!j7t8j9d, |d#< n|j<d-krd!j7t8j9d. |d#< n|j<d/kr>d!j7t8j9d0 |d#< n|j<d1kr`d!j7t8j9d2 |d#< nn|j<dkrd!j7t8j9d3 |d#< nL|j<d4krd!j7t8j9d5 |d#< n*|j<d6krd!j7t8j9d7 |d#< nd8|d#< |j<|d < |j|d9< |j=|d:< |j>|d;< |j?r<t@jAtBj7|j?}|j d< d= |j d>  |d?< |j?|d@< nd |d?< d |d@< |j| q>W tdA|idBfS )CNr9  z!Conservancy category ID is empty.z#Conservancy category ID is missing.r   zDate is empty.zDate is missing.r<  zPartner ID is empty.zPartner ID is missing.r,   i  r   r6   r5   z3There are no guests arriving on the selected date: z%d %b %YrA   i  r   r   ra   r   r   r   r   r  r  r  r  r  r-   r  z!background-color: {}; color: #fffr  r  z
To Invoicer	  zChecked Outr
  z
Checked Inz background-color:{}; color: #fffr  r  r  r  r  zNo-Showr  r  r  r  r  r  r  r  z&background-color: #fff; color: #000000r  r  r  r  r  r  r  r  r/   rT   )Cr
   r   rU   rV   rW   r   rX   rY   r   r#   r^   r   r_   r   r   r   r   r`   rb   r:  r   r   r'  rh   ri   rk   r    r*   r+   r<  rm   rn   rx   r   ra   r"  r   r#  r   r$  r   r   r   r  r   r   r   r%  r&  rl   r   r   r   r   r(  rw   r   r)  r*  r+  r,  r  r  r  rZ   r[   r-  )r,   r   r.  r/  rA   r/   r   r0  r1  r   r2  r3  r4  r5  r6  r  r7  r&   r&   r'   list_guest_bookings_for_partner3
  s   
















 r@  z/bookings/vehicles/partner/listc           2   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t jd }tj	j
tjttjtjkjttjtjkjtjtjtjtjtjjtjd k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dkjtjtdkjtj|kjtj|kjtjt jd kj }|s2g }|jd|jd  td|idfS g }x"|D ]}i }t |j|d< tj	j
t!jt!j"|jkj# }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< |j+|d< g }
tj	j
t,jt-t,j.t-j/kjtt,jtjkjt-j0t-j/t,j1t,j2t,j3t,j4jt,jd kjt,jtdkjtj|jkj5t6t7j }x0|D ](}i }|j0|d< |j1|d< |
j| qnW |
|d< t |j|d< tj	j
t8jt8jd kjt8j|jkj# }tj	j
t9jt9jd kjt9j:|jkj# }|rT|jdkr4d|d < d!j;t<j=d" |d#< nd$|d < d!j;t<j=d% |d#< n|j>dkrd&|d < d!j;t<j=d' |d#< nX|j?dkrd(|d < d)j;t<j=d* |d#< n,|jdkrd|d < d!j;t<j=d" |d#< n |j@d+krd!j;t<j=d, |d#< n|j@d-krd!j;t<j=d. |d#< n|j@d/kr>d!j;t<j=d0 |d#< n|j@d1kr`d!j;t<j=d2 |d#< nn|j@dkrd!j;t<j=d3 |d#< nL|j@d4krd!j;t<j=d5 |d#< n*|j@d6krd!j;t<j=d7 |d#< nd8|d#< |j@|d < |j|d9< |jA|d:< |jB|d;< |jCr<tDjEtFj;|jC}|j d< d= |j d>  |d?< |jC|d@< nd |d?< d |d@< |j| q>W tdA|idBfS )CNr   zVehicle ID is empty.zVehicle ID is missing.r   zDate is empty.zDate is missing.r<  zPartner ID is empty.zPartner ID is missing.r,   i  r   r6   r5   z5There are no vehicles arriving on the selected date: z%d %b %YrA   i  r   r   ra   r   r   r   r   r  r  r  r  r  r-   r  z!background-color: {}; color: #fffr  r  z
To Invoicer	  zChecked Outr
  z
Checked Inz background-color:{}; color: #fffr  r  r  r  r  zNo-Showr  r  r  r  r  r  r  r  z&background-color: #fff; color: #000000r  r  r  r  r  r  r  r  r/   rT   )Gr
   r   rU   rV   rW   r   rX   rY   r   r#   r^   r   r_   r   r   r   r   r`   rb   r   r   r   r!  rh   ri   rk   r    r*   r+   r<  rm   rn   rx   r   ra   r"  r   r#  r   r$  r   r   r   r  r   r   r   r   r   r   r%  r&  r'  rl   r   r   r   r   r(  rw   r   r)  r*  r+  r,  r  r  r  rZ   r[   r-  )r,   r   r.  r/  rA   r/   r   r0  r1  r   r2  r3  r4  r5  r6  r  r7  r&   r&   r'   !list_vehicle_bookings_for_partner
  s   
















 rA  )Imathosuuidr   r   r   pymysqlrZ   flaskr   r   r   r   r	   r
   r   database.booking_guest_typesr   database.booking_guestsr   database.booking_statusr   database.booking_typesr   database.bookingsr   database.facilityr   database.gatepassr   database.gatepass_guestsr   database.gatepass_vehiclesr   database.inventoryr   database.invoicer   database.mandatory_paymentsr   database.partnerr   database.vehicler   functions.async_functionsr   functions.date_operatorsroutesr   r   r   r   routes.bookings_urlsr    routes.seed_functionsr!   r"   	variablesr$   router   r   r   r   r   r   r   r8  r;  r>  r?  r@  rA  r&   r&   r&   r'   <module>   sp   $    f   w  2 (   B @  H