3
qi~                 @   s  d dl mZmZmZmZmZmZmZ d dlmZm	Z	 d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl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,T d dl-T d dl.m/Z/ ej0ddgddd Z1dd Z2dd Z3dd Z4dd Z5dd  Z6ej0d!d"d# Z7dS )$    )Flaskjsonifyrender_templateurl_forrequestredirectjson)datetime	timedeltaN)EmailContentMailPersonalization)app)Booking)BookingActivity)BookingGuest)BookingType)BookingStatus)Partner)Transaction)Detail)db)get_booking_status_id)*)or_z/bookings/no_showPOST)methodsc               C   s   t ddidfS )NmessageOk   )r    r!   r!   7/booking_service/app/routes/bookings_operations_urls.py
getNoShows   s    r#   c              C   s  t j tdd } | jd}tjjtjtj	d kjtj
d kjtjd kjtjtdkjtj|kj }t j tdd jd}ytjd }W n tk
r   d }Y nX |sg }|jd td|idfS x^|D ]V}|jjd|krtd	|_t j |_tttj |jd
|t j d}tjj| qqW ytjj  tjj  W n6 tk
r|   tjj  tjj  tddidfS X tddidfS d S )N   )daysz%Y-%m-%dUnconfirmed
session_idz*There are no bookings to mark as no-shows.r   i  zNo-Showz%Booking status was updated to No Show)booking_activity_public_id
booking_idbooking_activity_descriptionr'   
created_atz4There was an error marking the booking as a no-show.r    r   ) r	   todayr
   strftimer   sessionqueryr   filterdeletion_markeractual_booking_check_in_date
checked_instatusr   booking_check_in_dateallnowr   r   	Exceptionappendr   
updated_atr   struuiduuid4booking_public_idaddcommitcloserollback)yesterday_datetime	yesterdayZget_bookingsr'   r   singlebooking_activityr!   r!   r"   changeToNoShows   sP    









rG   c        0      C   sL	  t j } | jd}t j tdd }t j tdd jd}t j tdd jd}t j tdd jd}tjjtj	tj
d kj	tjd kj	tjd kj	tj|kjtjj j }tjjtj	tj
d kj	tjd kj	tjd kj	tj|kjtjj j }tjjtjttjtjkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tjd kj	tjd kj	tjd kj	tj|kj	tj|k jtjj j }tjjtjttjtjkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tjd kj	tj
d kj	tj|k j	tj|kj	tjd kjtjj j }	tjjtjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tj(d kj	tj|kj	tj|kj	tj'dkj	tj#dkptj#d kjtjj j }
tjjtjt)tjt)jkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tj|kjtjj j }g }g }g }g }g }g }x>|D ]6}i }|j|d< |j$|d	< d
|j |d< |j*| qnW x>|D ]6}i }|j|d< |j$|d	< d
|j |d< |j*| qW xf|D ]^}i }|j|d< |j$|d	< |j|d< |j|d< |j&|d< |j'|d< d
|j |d< |j*| qW xR|	D ]J}i }|j|d< |j$|d	< |j'|d< |j|d< d
|j |d< |j*| qVW xZ|
D ]R}i }|j|d< |j$|d	< |j&|d< |jp|j|d< d
|j |d< |j*| qW x>|D ]4}|j#}|dks<|dkr,qi }|j|d< |j$|d	< |j&|d< d
|j |d< |sld|d< n&|dkrd|d< n|dkrd|d< |jdkr*tjjt+j	t+j|jkj, }|r2t-j.t/j0|j1} |j%dkr| j2 d |d< n4|j%dkr2d| j2 kr| j2 d |d< nd|d< n|jdkrb|j%dkrLd|d< n|j%dkr2d|d< nyi }!t3|j |! |!d  dkr|j%dkr|!d! |d< n|j%dkr|!d |d< n*|j%dkrd"|d< n|j%dkrd#|d< W nN t4k
r0 }" z0|j%dkrd"|d< n|j%dkr d#|d< W Y d d }"~"X nX |j*| qW t j jd||||||d$}#t5j6  t7j8t5j9d% d&}$d'}%d'}&t:|%}'t:|&}(d(})t;d)t<d*|#d+}*t=|'|)|(|*}+y8|$j>j?j@jA|+j. d,},g }-|-j*tB|, tCd-d.id/fS  t4k
	r< }" z.tDjE }.tFjG }/t4d0tB|" d1 |/ W Y d d }"~"X nX W d Q R X d S )2Nz%Y-%m-%d   )r%      <   	Abandoned   r>   booking_ref_codez1https://bookings.olpejetaconservancy.org/booking/booking_urlr5   booking_check_out_datebooking_type_namer4   r2   r$   booking_typezNot Paidbooking_payment_status   z
To InvoicezIncomplete PaymentPB001A20z$162fface-f5f1-41de-913b-d2bb784dda3acustomer_codez$6bf74e49-7ff6-4555-a080-15541d62204acustomer_code_usd406B036GB601X10406B047has_accountcustomer_code_kes406GA001406GA002)r,   checkin_todaycheckout_today	overstaysnot_checked_inpayment_status_todayno_cuiSENDGRID_API_KEY)api_keyz$obtsbookings@olpejetaconservancy.orgzEnd Of Day Process Reminderz	text/htmlzbooking_endofday_process.html)data)request_bodyr   zSuccessfuly sent email.r    zUser email notification: z	. Trace: )Hr	   r7   r-   r,   r
   r   r.   r/   r   r0   r1   r2   r3   r5   order_byr)   descr6   actual_booking_check_out_datechecked_outrO   joinr   r>   r   rQ   booking_type_public_idr   r4   booking_status_public_idadd_columnsbooking_done_byr'   r+   r:   payment_statusrM   currencyrP   booking_status_namecuinvoicenumberr   r9   r   firstrequestsgetget_partner_detailsformat
partner_idr   getBookingSessionUserr8   r   app_contextsendgridSendGridAPIClientconfigr   r   r   r   clientmailsendpostr;   r   sysexc_info	traceback
format_exc)0r7   r,   a_week_ago_datetime
a_week_agotwo_days_agoZsixty_days_agoget_checkIn_bookingsget_checkOut_bookingsget_overstayed_bookingsget_not_checked_in
get_no_cuiget_payment_status_bookingsr^   r_   rb   r`   ra   rc   single_check_inreturn_data_checkinsingle_check_outreturn_data_checkoutsingle_overstayreturn_data_overstayssingle_not_checked_inreturn_data_not_checked_insingle_no_cuireturn_data_no_cuisingle_booking_paymentp_statusreturn_data_paymentget_partnerpartner_info	user_infoereminder_datasgsender	recipient
from_emailto_emailsubjectcontentr   responseemail_responseerror_tupletracer!   r!   r"   endOfDayEveningO   s   


































r   c        /      C   s4	  t j } | jd}t j tdd }t j tdd jd}t j tdd jd}tjjtj	tj
d kj	tjd kj	tjd kj	tj|kjtjj j }tjjtj	tj
d kj	tjd kj	tjd kj	tj|kjtjj j }tjjtjttjtjkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tjd kj	tjd kj	tjd kj	tj|kj	tj|k jtjj j }tjjtjttjtjkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tjd kj	tj
d kj	tj|k j	tj|kj	tjd kjtjj j }tjjtjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tj(d kj	tj|kj	tj|kj	tj'dkj	tj#dkpttj#d kjtjj j }	tjjtjt)tjt)jkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtj tj!tj"tjtj#tj$tj%tj&tj'j	tj
d kj	tj|kjtjj j }
g }g }g }g }g }g }x>|D ]6}i }|j|d< |j$|d< d	|j |d
< |j*| qVW x>|D ]6}i }|j|d< |j$|d< d	|j |d
< |j*| qW xf|D ]^}i }|j|d< |j$|d< |j|d< |j|d< |j&|d< |j'|d< d	|j |d
< |j*| qW xR|D ]J}i }|j|d< |j$|d< |j'|d< |j|d< d	|j |d
< |j*| q>W xZ|	D ]R}i }|j|d< |j$|d< |j&|d< |jp|j|d< d	|j |d
< |j*| qW x>|
D ]4}|j#}|dks$|dkrqi }|j|d< |j$|d< |j&|d< d	|j |d
< |sTd|d< n&|dkrhd|d< n|dkrzd|d< |jdkrtjjt+j	t+j|jkj, }|rt-j.t/j0|j1}|j%dkr|j2 d |d< n4|j%dkrd|j2 kr|j2 d |d< nd|d< n|jdkrJ|j%dkr4d|d< n|j%dkrd|d< nyi } t3|j |  | d dkr|j%dkr| d  |d< n|j%dkr| d |d< n*|j%dkrd!|d< n|j%dkrd"|d< W nN t4k
r }! z0|j%dkrd!|d< n|j%dkrd"|d< W Y d d }!~!X nX |j*| qW t j jd||||||d#}"t5j6  t7j8t5j9d$ d%}#d&}$d&}%t:|$}&t:|%}'d'}(t;d(t<d)|"d*})t=|&|(|'|)}*y8|#j>j?j@jA|*j. d+}+g },|,j*tB|+ tCd,d-id.fS  t4k
	r$ }! z.tDjE }-tFjG }.t4d/tB|! d0 |. W Y d d }!~!X nX W d Q R X d S )1Nz%Y-%m-%drH   )r%   rI   rK   rL   r>   rM   z1https://bookings.olpejetaconservancy.org/booking/rN   r5   rO   rP   r4   r2   r$   rQ   zNot PaidrR   rS   z
To InvoicezIncomplete PaymentrT   z$162fface-f5f1-41de-913b-d2bb784dda3arU   z$6bf74e49-7ff6-4555-a080-15541d62204arV   rW   rX   rY   rZ   r[   r\   r]   )r,   r^   r_   r`   ra   rb   rc   rd   )re   z'kenneth.kagunda@olpejetaconservancy.orgz"End Of Day Process Reminder - Testz	text/htmlzbooking_endofday_process.html)rf   )rg   r   zSuccessfuly sent email.r    zUser email notification: z	. Trace: )Hr	   r7   r-   r,   r
   r   r.   r/   r   r0   r1   r2   r3   r5   rh   r)   ri   r6   rj   rk   rO   rl   r   r>   r   rQ   rm   r   r4   rn   ro   rp   r'   r+   r:   rq   rM   rr   rP   rs   rt   r   r9   r   ru   rv   rw   rx   ry   rz   r   r{   r8   r   r|   r}   r~   r   r   r   r   r   r   r   r   r   r;   r   r   r   r   r   )/r7   r,   r   r   r   r   r   r   r   r   r   r^   r_   rb   r`   ra   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r"   endOfDayTestQ  s   


































r   c              C   sn  y t j } | jd}| tdd jd}tjjtjt	tj
t	jkjttj
tjkjtjj j }g }x|D ]}tjjt	jt	j|j
kjt	jdkj }| sr|j rqr|j d|j }|jjd}d|j
 }	tjtjd d}
d	}t|}t|j}td
}d|j }d| d|j d| d|	 d|	 d}td|}t|||d}t }|j| |j | |j!| y:|
j"j#j$j%|j& d}|j'|j|jd
dt(|j)d W qr t*k
r } z$|j'|j|jd
dt(|d W Y dd}~X qrX qrW t+dt,dd |D  d|ddfS  t*k
rh } z(t-j. }t/j0 }t+dt(||d d!fS d}~X nX dS )"z[Send payment reminders to clients with pending payments for bookings starting within a weekz%Y-%m-%drH   )r%   N z1https://bookings.olpejetaconservancy.org/booking/rd   )re   z$obtsbookings@olpejetaconservancy.orgz'kenneth.kagunda@olpejetaconservancy.orgz-Payment Reminder for Your Upcoming Booking - zi
            <html>
            <body>
                <h2>Payment Reminder</h2>
                <p>Dear z[,</p>
                <p>This is a reminder that payment for your upcoming booking <strong>zN</strong> 
                is still pending. Your check-in date is on <strong>z</strong>.</p>
                <p>Please complete your payment to confirm your reservation.</p>
                <p>You can view your booking and make payment here: <a href="z">z</a></p>
                <br>
                <p>Best regards,<br>Ol Pejeta Conservancy Booking Team</p>
            </body>
            </html>
            z	text/html)r   r   Zhtml_content)rg   sent)booking_refclient_emailcc_emailr4   r   failed)r   r   r   r4   errorz)Payment reminder process completed. Sent c             S   s   g | ]}|d  dkr|qS )r4   r   r!   ).0rr!   r!   r"   
<listcomp>   s    z(sendPaymentReminders.<locals>.<listcomp>z emails.)r   detailsr    z!Error in payment reminder process)r   r   r   i  )1r	   r7   r-   r
   r   r.   r/   r   rl   r   r>   r)   r   rh   r5   ascru   r0   r1   email_address
first_name	last_namer}   r~   r   r   r   rM   r   r   r   add_toadd_ccadd_personalizationr   r   r   r   rw   r9   r;   status_coder8   r   lenr   r   r   r   )r7   r,   Zone_week_from_nowZpending_payment_bookingsZemail_responsesbookingbooking_detailsZclient_namecheck_in_daterN   r   r   r   r   r   r   Zemail_contentr   r   personalizationr   r   r   r   r!   r!   r"   sendPaymentRemindersR  sz    

&



$r   c               C   s6  t j tdd } | jd}tjjtjtj	d kjtj
d kjtjd kjtj|kjtjj j }tjjtjtj	d kjtjd kjtjd kjtj|kjtjj j }tjjtjttjtjkjttjtjkjttjtjkjtjtjtjtjtj
tjtjtjtjtjtj tj!tjtj"tj#tj$tj%tj&jtj	d kjtj|kjtjj j }g }g }g }x>|D ]6}i }	|j|	d< |j#|	d< d|j |	d< |j'|	 qvW x>|D ]6}
i }|
j|d< |
j#|d< d|
j |d< |j'| qW x>|D ]4}|j"}|dks,|dkrqi }|j|d< |j#|d< |j%|d	< d|j |d< |s\d
|d< n&|dkrpd|d< n|dkrd|d< |jdkrtjjt(jt(j|jkj) }|r"t*j+t,j-|j.}|j$dkr|j/ d |d< n4|j$dkr"d|j/ kr|j/ d |d< nd|d< n|jdkrR|j$dkr<d|d< n|j$dkr"d|d< nyi }t0|j| |d dkr|j$dkr|d |d< n|j$dkr|d |d< n*|j$dkrd|d< n|j$dkrd|d< W nN t1k
r  } z0|j$dkrd|d< n|j$dkrd|d< W Y d d }~X nX |j'| qW t j2 jd|||d}t3j4 X t5j6t3j7d d}d}d }t8|}t8|}d!}g }t9d"t:d#|d$}t;||||}W d Q R X y4|j<j=j>j?|j+ d%}|j't@| tAd&d'id(fS  t1k
r0 } z.tBjC }tDjE }t1d)t@| d* | W Y d d }~X nX d S )+Nr$   )r%   z%Y-%m-%dr>   rM   z1https://bookings.olpejetaconservancy.org/booking/rN   rL   rQ   zNot PaidrR   rS   z
To InvoicerI   zIncomplete PaymentrT   z$162fface-f5f1-41de-913b-d2bb784dda3arU   z$6bf74e49-7ff6-4555-a080-15541d62204arV   rW   rX   rY   rZ   r[   r\   r]   )r,   r^   r_   rb   rd   )re   z'patricia.kanana@olpejetaconservancy.orgz$obtsbookings@olpejetaconservancy.orgzEnd Of Day Process Reminderz	text/htmlzbooking_endofday_process.html)rf   )rg   r   zSuccessfuly sent email.r    zUser email notification: z	. Trace: )Fr	   r,   r
   r-   r   r.   r/   r   r0   r1   r2   r3   r5   rh   r)   ri   r6   rj   rk   rO   rl   r   r>   r   rQ   rm   r   r4   rn   ro   rp   r'   r+   r:   rq   rM   rr   rP   rs   r9   r   ru   rv   rw   rx   ry   rz   r   r{   r8   r7   r   r|   r}   r~   r   r   r   r   r   r   r   r   r   r;   r   r   r   r   r   ) rC   rD   r   r   r   r^   r_   rb   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"   endOfDayMorning  s    


















r   z/reminders/<booking_id>c             C   s  t j tdd j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tjtjtjtjtjtjtjtjtjtjt	jt	jt	jt	jt	j t	j!j"tj#d kj"tj
| kj"t	jt$dkj"t	jt$dkj% }|sg }|j&d t'd|idfS g }g }t(j)t*j+d	 d
}d}x|D ]}i }	t j jd|	d< |j|	d< |jjd|	d< |jjd|	d< d|j d |j |	d< |j|	d< |j
|	d< t j jd|	d< g }
tjjt,jt-t,j.t-j/kjt-j0t,j1j"t,j#d kj"t,j|j
kj% }x|D ]}|
j&t2|j1 qW t3|
|	d< g }t3||	d< t4|}t4|j}d}t5dt6d|	d}t7||||}y.|j8j9j:j;|j< d}|j&d|j d  W n2 t=k
r } z|j&t>| W Y d d }~X nX qW t'd|iS d S ) Nr$   )r%   z%Y-%m-%dUpdated	Cancelled.r   i  rd   )apikeyz$reservations@olpejetaconservancy.orgz%B %Yr,   rM   z%A %d %B %Yr   check_out_dater   r   r   r)   z%Ycopyright_yearnum_of_guestsnum_of_vehicleszBooking Reminderz	text/htmlzbookingreminder.html)rf   )rg   zReminder email sent to )?r	   r7   r
   r-   r   r.   r/   r   rl   r   r>   r)   ro   rQ   r5   rO   r2   rj   rp   r3   rk   rM   r'   r+   r:   r4   rq   rr   r   r   r   phone_numberaddressadditional_noter0   r1   r   r6   r9   r   r}   r~   r   r   r   	GuestType
guest_typebooking_guest_type_public_idbooking_guest_type_nameguest_countintsumr   r   r   r   r   r   r   r   rw   r8   r;   )r)   Ztomorrowget_all_bookingsr   Zreturn_arrayZerror_arrayr   r   Zeach_bookingr   	guest_sumZget_all_guests
each_guestvehicle_sumr   r   r   r   r   r   r   r!   r!   r"   sendReminderEmail_  sn    





&r   )8flaskr   r   r   r   r   r   r   r	   r
   pymysqlosmathrv   r<   r   r   r}   sendgrid.helpers.mailr   r   r   r   routesr   database.bookingsr   database.booking_activity_logr   database.booking_guestsr   database.booking_typesr   database.booking_statusr   database.partnerr   database.transactionr   database.booking_detailsr   r   Zroutes.bookings_urlsr   functions.booking_snippets	variables
sqlalchemyr   router#   rG   r   r   r   r   r   r!   r!   r!   r"   <module>   s<   $87    m !