3
؀hչ                @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZmZ d dl	Z	d dl
Z
d dlZd dlZd dlmZmZmZmZmZmZmZmZmZmZ d dlT 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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dlImJZJ d dlKmLZL d dlMmNZN d d lOmPZP d d!lQmRZR d d"lSmTZT d d#lUmVZV d d$lWmXZX d d%lYmZZZ d d&l[m\Z\ d d'l]m^Z^ d d(l_m`Z` d d)lambZb d d*lcmdZdmeZemfZfmgZgmhZhmiZi d dljT d dlkT d d+llmmZm d d,lnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZw d d-lxmyZymzZz d d.l{m|Z|m}Z}m~Z~mZ d dlT d/d0 Zd1d2 Zd3d4 Zeojd5d6gd7d8d9 Zeojd:d6gd7d;d< Zeojd:d6gd7d=d> Zeojd?d6gd7d@dA ZeojdBdCgd7dDdE ZeojdFdCgd7dGdH ZeojdId6gd7dJdK ZeojdLd6gd7dMdN ZdS )O    N)datedatetime	timedelta)
Flaskjsonjsonifyredirectrender_templaterequesturl_forResponsemake_response	send_file)*)BookingActivity)Detail)	GuestType)BookingGuest)BookingPayment)BookingStatus)Ticket)BookingType)Booking)
CreditNote)CreditNoteFacility)CreditNoteGuest)CreditNoteInventory)CreditNoteVehicle)Note)CheckInVehicle)Destination)Donation)Facility)Gate)Gatepass)GatepassDetail)GatepassGuest)GatepassVehicle)	Inventory)	Mandatory)Modify)Partner)PaymentMethod)SalesforceData)School)SchoolBooking)Sun)Transaction)Vehicle)VehicleDetail)AsyncRequests)bookingTotalget_details_donation_causeget_details_currencycreditNoteTotalgetBookingSessionUserget_details_user)validateEmail)	appbookings_loggerdbreceipt_print_options	FromCachedb_cachesessionTrackingticketGeneratorinvoice_options)currencyPostProcessorget_booking_status_id)BookingGuestTypesSeedBookingStatusSeedBookingTypeSeedMandatoryPaymentsSeedc             C   s   | j j  d S )N)sessionclose)self rN   )/booking_service/app/routes/print_urls.pyrL   D   s    rL   c       
      C   s   | |krt |S | |kr|dkrd| |d}tjt|d}|j d d d }t |t | }	t |	S | dkrt |t | }	t |	S dS )z
	Different from currencyHandler in that it does not get the current buying/selling rate,
	but works with buying/selling rate that's already been saved.
	z$162fface-f5f1-41de-913b-d2bb784dda3a)currency_idr   )r   datar   
buy_amountN)floatrequestspostget_currency_rate_at_timer   )

currencyTocurrencyFromamount
buyingRatesellingRater   	post_data	get_ratesbuying_ratevaluerN   rN   rO   currencyPostProcessorInvoiceH   s    
r`   c             C   s  | |kr|S | |kr|dkrt jtj| }y@|j d d d }|j d d d }t|t| }t|S  tk
r   d}t|S X n8| dkrt jtj|}y@|j d d d }|j d d d }t|t| }t|S  tk
r   d}t|S X nt jtj|}t jtj| }y||j d d d }	|j d d d }
|j d d d }|j d d d }t|t|
 }t|t| }|}t|S  tk
r   d}t|S X d S )Nz$162fface-f5f1-41de-913b-d2bb784dda3arQ   r   currency_buy_amountcurrency_sell_amount)rT   getget_buy_sell_rateformatr   rS   	Exception)rW   rX   rY   get_ratebuyingsellingr_   get_from_rateget_to_ratefrom_buyingfrom_selling	to_buying
to_selling	temp_fromtemp_torN   rN   rO   currencyHandler`   sT    

rr   z/print/receiptPOST)methodsc        )   >   C   s  g } y&t jd j  t jd s(| jd W n, tk
rV } z| jd W Y d d }~X nX y&t jd j  t jd s|| jd W n, tk
r } z| jd W Y d d }~X nX | rg }|jd td| id	fS tjjt	j
tt	jtjkj
tt	jtjkj
tt	jtjkj
tt	jtjkjt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	j t	j!t	j"t	jt	j#t	j$t	j%t	j&tj'tj(tj)tj*tj+tj,tj-tj.tj/tj0tj1tj2tj3!j4t	jt jd kj5t6t7j8 }|sg }|jd
 td|idfS g }i }|jj9d|d< |jj9d|d< |j|d< |j|d< |j!|d< |j)|d< |j*|d< |j1|d< t:t;|jd|d< t<j= j9d|d< y>|j2rtjjt>j4t>j?|j2kj8 }|j@|d< nd|d< W n tAk
r   d|d< Y nX tjjt	j4t	j%d kj4t	j|jkj8 }|j&}	|	stjjtBj4tBj%d kj4tBjCt<j= j9dkj8 }
|
stDd }tBtEtFjG t<j= j9d||dt<j= t<j= d}tjjH| ntD|
jI}||
_It<j= |
_"||_&n|	}||d< tJ||j |d  }g |d!< |d" d#krX|d$ }xt|D ]l}|d% d#kri }|d& }tK|d'kr |d#d' }|jL |d(< |d% |d)< |d* |d+< |d! j| qW |d, d#kr|d- }xt|D ]l}|d- d#krti }|d. }tK|d'kr|d#d' }|jL |d(< |d- |d)< |d/ |d+< |d! j| qtW |d0 d#krp|d1 }xt|D ]l}|d2 d#kr i }|d3 }tK|d'kr8|d#d' }|jL |d(< |d2 |d)< |d4 |d+< |d! j| q W tK|d5 d#kr|d5 }xD|D ]<}i }|d3 jL |d(< d6|d)< |d4 |d+< |d! j| qW tK|d#krFxf|D ]^}i }|d7 }tK|d'kr|d#d' }|jL |d(< |d8 |d)< |d9 |d+< |d! j| qW tjjtMj
tNtMjOtNjPkjtMjQtMjRtMjStMjTtMjUtMjVtMj tMjWtMjXtNjY
j4tMj%d kj4tMj|jkjZtMj[j\ j5t6t7j] }g }x|D ]}i } t;|jQ| d:< t;|jR| d;< t;|jS| d<< |jT| d=< |jY| d>< t^j_t`ja|jU}!t^j_t`ja|jV}"y|!j d? d# d@ | dA< W n. tAk
r   |"j d? d# d@ | dA< Y nX |"j d? d# d@ | dB< |"j d? d# d@ | dC< |j|  qW ||dD< t^j_tbjat jd }#y$|#j d d6 |#j d  |dE< W n tAk
r"   d|dE< Y nX |j| tjjc  tjjd  tjjtej4tej%d kj4tej|jkj] }$g }%x|$D ]}&|%j|&jf  qvW |%|dF< tgdG|dH}'thjidIdJ}(thjj|'dK|j3 dL tk|(dM tdNdOtljmdP  dQ |j3 dL dRdfS d S )SN
booking_idzBooking ID is empty.zBooking ID is missing.
session_idzSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.messagesi  z<The selected booking does not appear to exist in the system.message   z%a %d %b %Ybooking_check_in_datebooking_check_out_datebooking_done_bybooking_ref_code
created_at
first_name	last_namekra_pin_number   selling_ratez%d %B %Y %I:%M %pr   destinationzN/Az%Y-%m-%dTicketPrinter)booking_tickets_public_idticket_datefirst_ticketlast_ticketrv   r~   
updated_atbooking_ticketinventory_bookingsZitem_bookingsguest_totalr   guestspayment_guestspayment_person   Z	item_nameZitem_booking_guests"payment_person_cost_after_discountZitem_booking_total_costvehicle_totalvehiclesvehicle_charge_categoryvehicle_cost_after_discountfacility_bookings_totalfacility_bookingsfacility_booking_guestsfacility_namefacility_booking_total_costexternal_facility_bookings inventory_nameinventory_booking_guestsinventory_booking_total_costtransaction_original_costtransaction_totaltransaction_balancetransaction_datepayment_methodrQ   currency_nametransaction_payment_currencytransaction_total_currencycurrencybooking_paymentsZtellervehicle_detailszreceipt-template.html)rQ   z/usr/local/bin/wkhtmltopdf)wkhtmltopdfztickets/receipt-z-reprint.pdf)optionsconfigurationzSuccess.zhttps://SERVERz/docs/tickets/receipt-)rx   url)nr
   r   stripappendKeyErrorr   r>   rK   queryr   joinr   booking_typebooking_type_public_idr   statusbooking_status_public_idr   booking_public_idru   r$   add_columnsrz   r{   actual_booking_check_in_dateactual_booking_check_out_dater|   
checked_inchecked_outcurrency_buying_rate_at_timecurrency_selling_rate_at_timer}   rv   r~   r   payment_statusr   deletion_markerticketbooking_type_namebooking_status_namer   r   email_addressphone_numberaddressadditional_notecitycountryr   r   gatepass_ref_codefilterr   r@   rA   firststrftimeroundrS   r   nowr    gatepass_destination_public_idgatepass_destination_namerf   r   r   rC   struuiduuid4addr   r5   lentitler1   r,   transaction_payment_methodpayment_method_public_idr   r   r   r   r   r   $payment_currency_buying_rate_at_time%payment_currency_selling_rate_at_timepayment_method_nameorder_bytransaction_booking_iddescallrT   rc   get_currencyre   get_single_userrL   commitr   return_jsonr	   pdfkitr   from_stringr?   r<   config))rw   eoutputreturn_bookingrx   rQ   return_dataget_destinationget_booking_ticket	ticket_noget_last_ticketr   r   temp_inventory_data
guest_dataguest	guest_objnamevehicle_datavehiclevehicle_objfacility_datafacilityfacility_objZescapes_dataescapeZ
escape_obj	inventoryZinventory_objget_all_booking_paymentsbooking_payments_listeach_paymentr   r   r   Z
get_tellerget_detailsr   single_detailZreceiptr   rN   rN   rO   print_receipt   s   































$



 r  z/print/invoice/newc        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 | rg }|jd td| id	fS tjjt	j
t	jt jd kj
t	jd kj }|s g }|jd
 td|idfS tjjt	jtt	jtjkjtt	jtjkjtt	jtjkjt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jtj tj!tj"tj#tj$tj%tj&tj'j
t	jd kj
tjd kj
tjd kj
tj(t)dkj
t	jt jd kj }i }t*|t jd  |j}|j|d< |jj+d|d< |jj+d|d< |jj+d|d< |jj+d|d< y|j|d< W n, t,k
r } zd|d< W Y d d }~X nX |jr|jdkr|j|d< nRy i }t-|j| |d |d< W n0 t.tfk
r } zd|d< W Y d d }~X nX nd|d< y|j%|d< W n, t,k
rT } zd|d< W Y d d }~X nX |j'|d< |j$|d< |j&|d< |j|d< |j|d< |j|d < |j/j+d|d!< y@t jd" |d#< t0j1t2j3t jd" }	|	j d$ d% d& |d'< W nJ t,k
r,   |j|d#< t0j1t2j3|j}	|	j d$ d% d& |d'< Y nX y|d# }
|d  }|d }|d }|
|krxt4|d(|d)< t4|d(|d*< n|
|kr|d+kr|j/j+d,}|
|d-}t0j5t6|d.}|j d$ d% d/ }|j d$ d% d0 }t4|d(|d)< t4|d(|d*< n&|
d+krt4|d(|d)< t4|d(|d*< W n@ t,k
r^ } z"t4|d(|d)< t4|d(|d*< W Y d d }~X nX |d1 |d2< |d3 |d4< |jj+d|jj+dkrd5|d6< nd7|d6< |jd8krd9|d:< |jd(krd;|d:< |jd<krd=|d:< |jd>krd?|d:< |jsd@|d:< y>|j"r8tjjt7j
t7j8|j"kj }|j9|dA< nd|dA< W n t,k
r`   d|dA< Y nX g }tjjt:j
t:jd kj
t:j;d kj
t:j|jkj< }|snx|D ]}|j|j qW dB|i}t0j5t=|d.}g }|snx|D ]}i }|j>|dC< |j?|dD< y4x.|j d$ D ]}|dE |jkr|dF }qW W n: t.tfk
rV   d}Y n t@tAfk
rr   dG}Y nX ||dH< |j/|d!< |j| qW tjjtBj
tBj|jkj }|r\dI|dJ< |jC|dK< y6t0j1tDj3|jE}|j }|d }|dL }|dM } W n4 t0jFjGk
r6 }! zd}d}d} W Y d d }!~!X nX ||dN< | |dO< ||dP< |jH|dQ< ndR|dJ< tjjtIj
tIj|jkj }"|"rdI|dS< |"jJjK|dT< |"jJjL|dU< ndR|dS< tjjtMj
tMjd kj
tMj|jkj< }#g }$x<|#D ]4}%|j/j+d,}&|$jtN|j|%jO|%jP|%jQ|%jR|& qW tS|$}'|'|dV< |dW |' |dX< |}(tjjtTj
tTjd kj
tTj|jkj< })|dY |dZ  |d[  |d\  |d]< |d^ |d_  |d`< |d] |d`  |da< g }*|)
rHx|)D ]|}+i },|+jU|,db< |+jV|,dc< tW|+jX|,dd< |+jY|,de< tZ|+jV}-|-j d$ d% d& |,df< t[|+jY}.|.j dL |,dg< |*j|, 	qW tjjt\j
t\jt jd kj
t\jd kj }/tjjt	j
t	jt jd kj
t	jd kj
t	j]d8kj }0tjjt	j
t	jt jd kj
t	jd kj
t	jd<kj }1tjjt	j
t	jt jd kj
t	jd kj
t	j(dhkj }2t^|/s>|2s>|0s>|1rBdindj|(||*dk}3t_j`dldm}4tajb }5t_jc|3dn| do td|5|4dp tetftgjh t jd dqt jd tajb dr}6tjji|6 ytjjj  tjjk  W n* t,k
r   tjjl  tjjk  Y nX tdsdttmjndu  dv | do dwdxfS )yNru   zBooking ID is empty.zBooking ID is missing.rv   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.rw   i  z,The selected booking does not seem to exist.rx   i  Updatedbooking_refz%d %b %Yrz   r{   booking_check_inbooking_check_outr|    r   session_userr   zN/Ar   r   r   r   r^   r   booking_currencyr~   rP   invoice_currencyrQ   r   r   r   r   current_buying_ratecurrent_selling_ratez$162fface-f5f1-41de-913b-d2bb784dda3az%Y-%m-%d)rP   r   )r   rR   sell_amount	_vat_ratevat_rate_catering_levy_ratecatering_levyDayunitNight   Paidr   Deposit   Complimentary   z
To InvoicezNot Paidr   	users_idsbooking_note_public_idnote	public_id	full_namezNetwork ErroruserTpartner_bookingpartner_emailr   telpartner_namepartner_phonepartner_kra_pinpartner_booking_refFschool_bookingschool_nameprimary_contactpayment_total
total_costpayment_balanceguest_total_discountvehicle_total_discountfacility_total_discountinventory_only_discount_amounttotal_invoice_dicountfacility_agent_discount_total%inventory_total_agent_discount_amounttotal_agent_invoice_discounttotal_booking_dicountdonation_public_iddonation_currencydonation_amountdonation_causedonation_currency_namedonation_cause_namez$d0c9dc58-4bd7-4279-85e1-70b8b1632f02zinvoice_new.htmlzProforma_invoice.html)rQ   booking_notes	donationsz/usr/local/bin/wkhtmltopdf)r   zinvoices/invoice-z.pdf)r   r   zBooking invoice printed)booking_activity_public_idru   booking_activity_descriptionrv   r~   zSuccess.zhttps://r   z/docs/invoices/invoice-)rx   r   ry   )or
   r   r   r   r   r   r>   rK   r   r   r   r   r   r   r   r   r   r   r   ru   r$   r   r|   gatepass_idr   r{   rz   r}   r   r   rv   r   gatepass_public_idr   r   r   r   r   r   r   r   rF   r5   r   rf   r9   
IndexErrorr~   rT   rc   r   re   r   rU   rV   r    r   r   r   show_on_invoicer   get_user_from_aumrabooking_notes_public_idr   AttributeErrorUnboundLocalErrorr+   agent_emailget_partner_details
partner_id
exceptionsConnectionErrorr*  r/   school_detailsr,  r-  r1   r`   r   r   r   r   sumr!   r:  r;  rS   r<  r=  r7   r6   r   r   r	   r   r   r   r   r   rD   r   r   r   r   r   r   rL   rollbackr<   r   )7rw   r   r   r   get_booking_detailsr   r}   	user_info
user_errorr   currency_tocurrency_fromr^   r   booking_dater\   r]   r   id_array	get_notesone_notereturn_usernotessingle_notereturn_notesr#  r   get_partner_bookingpartner_temppartner_detailsr)  r'  r(  connection_errorget_school_bookingget_paymentstransaction_datasingle_paymenttransaction_booking_dater.  
print_dataget_all_booking_donationsdonation_datasingle_donationreturn_donation_datacurrency_detailscause_detailsreturn_booking_paymentr   isComplimentaryZisConfirmedinvoicer   current_datebooking_activityrN   rN   rO   print_invoice  s(   




















 















 



rv  c        6      C   s  g } y&t jd j  t jd s(| jd W n, tk
rV } z| jd W Y d d }~X nX y&t jd j  t jd s|| jd W n, tk
r } z| jd W Y d d }~X nX | rg }|jd td| id	fS tjjt	j
t	jt jd kj
t	jd kj }|s g }|jd
 td|idfS tjjt	jtt	jtjkjtt	jtjkjtt	jtjkjt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jt	jtj tj!tj"tj#tj$tj%tj&tj'j
t	jd kj
tjd kj
tjd kj
tj(t)dkj
t	jt jd kj }i }t*|t jd  |j}|j|d< |jj+d|d< |jj+d|d< |jj+d|d< |jj+d|d< y|j|d< W n, t,k
r } zd|d< W Y d d }~X nX |jr|jdkr|j|d< nRy i }t-|j| |d |d< W n0 t.tfk
r } zd|d< W Y d d }~X nX nd|d< y|j%|d< W n, t,k
rT } zd|d< W Y d d }~X nX |j'|d< |j$|d< |j&|d< |j|d< |j|d< |j|d < |j/j+d|d!< y@t jd" |d#< t0j1t2j3t jd" }	|	j d$ d% d& |d'< W nJ t,k
r,   |j|d#< t0j1t2j3|j}	|	j d$ d% d& |d'< Y nX y|d# }
|d  }|d }|d }|
|krxt4|d(|d)< t4|d(|d*< n|
|kr|d+kr|j/j+d,}|
|d-}t0j5t6|d.}|j d$ d% d/ }|j d$ d% d0 }t4|d(|d)< t4|d(|d*< n&|
d+krt4|d(|d)< t4|d(|d*< W n@ t,k
r^ } z"t4|d(|d)< t4|d(|d*< W Y d d }~X nX |d1 |d2< |d3 |d4< |jj+d|jj+dkrd5|d6< nd7|d6< |jd8krd9|d:< |jd(krd;|d:< |jd<krd=|d:< |jd>krd?|d:< |jsd@|d:< y>|j"r8tjjt7j
t7j8|j"kj }|j9|dA< nd|dA< W n t,k
r`   d|dA< Y nX g }tjjt:j
t:jd kj
t:j;d kj
t:j|jkj< }|snx|D ]}|j|j qW dB|i}t0j5t=|d.}g }|snx|D ]}i }|j>|dC< |j?|dD< y4x.|j d$ D ]}|dE |jkr|dF }qW W n: t.tfk
rV   d}Y n t@tAfk
rr   dG}Y nX ||dH< |j/|d!< |j| qW tjjtBj
tBj|jkj }|r\dI|dJ< |jC|dK< y6t0j1tDj3|jE}|j }|d }|dL }|dM } W n4 t0jFjGk
r6 }! zd}d}d} W Y d d }!~!X nX ||dN< | |dO< ||dP< |jH|dQ< ndR|dJ< tjjtIj
tIj|jkj }"|"rdI|dS< |"jJjK|dT< |"jJjL|dU< ndR|dS< tjjtMj
tMjd kj
tMj|jkj< }#g }$x<|#D ]4}%|j/j+d,}&|$jtN|j|%jO|%jP|%jQ|%jR|& qW tS|$}'|'|dV< |dW |' |dX< |}(tjjtTj
tTjd kj
tTj|jkj< })|dY |dZ  |d[  |d\  |d]< |d^ |d_  |d`< |d] |d`  |da< g }*|)
rHx|)D ]|}+i },|+jU|,db< |+jV|,dc< tW|+jX|,dd< |+jY|,de< tZ|+jV}-|-j d$ d% d& |,df< t[|+jY}.|.j dL |,dg< |*j|, 	qW tjjt\j
t\jt jd kj
t\jd kj }/tjjt	j
t	jt jd kj
t	jd kj
t	j]d8kj }0tjjt	j
t	jt jd kj
t	jd kj
t	jd<kj }1t^|/
s|0
s|1rdhndi|(||*dj}2t_j`dkdl}3tajb }4t_jc|2dm| dn td|4|3do tetftgjh t jd dpt jd tajb dq}5tjji|5 ytjjj  tjjk  W n* t,k
r   tjjl  tjjk  Y nX tdrdstmjndt  du | dn dvdwfS )xNru   zBooking ID is empty.zBooking ID is missing.rv   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.rw   i  z,The selected booking does not seem to exist.rx   i  r  r  z%d %b %Yrz   r{   r  r	  r|   r
  r   r  r   zN/Ar   r   r   r   r^   r   r  r~   rP   r  rQ   r   r   r   r   r  r  z$162fface-f5f1-41de-913b-d2bb784dda3az%Y-%m-%d)rP   r   )r   rR   r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  z
To InvoicezNot Paidr   r  r  r   r!  r"  zNetwork Errorr#  Tr$  r%  r   r&  r'  r(  r)  r*  Fr+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  zinvoice_new.htmlzProforma_invoice.html)rQ   r@  rA  z/usr/local/bin/wkhtmltopdf)r   zinvoices/invoice-z.pdf)r   r   zBooking invoice printed)rB  ru   rC  rv   r~   zSuccess.zhttps://r   z/docs/invoices/invoice-)rx   r   ry   )or
   r   r   r   r   r   r>   rK   r   r   r   r   r   r   r   r   r   r   r   ru   r$   r   r|   rD  r   r{   rz   r}   r   r   rv   r   rE  r   r   r   r   r   r   r   r   rF   r5   r   rf   r9   rF  r~   rT   rc   r   re   r   rU   rV   r    r   r   r   rG  r   rH  rI  r   rJ  rK  r+   rL  rM  rN  rO  rP  r*  r/   rQ  r,  r-  r1   r`   r   r   r   r   rR  r!   r:  r;  rS   r<  r=  r7   r6   r   r   r	   r   r   r   r   r   rD   r   r   r   r   r   r   rL   rS  r<   r   )6rw   r   r   r   rT  r   r}   rU  rV  r   rW  rX  r^   r   rY  r\   r]   r   rZ  r[  r\  r]  r^  r_  r`  r#  r   ra  rb  rc  r)  r'  r(  rd  re  rf  rg  rh  ri  r.  rj  rk  rl  rm  rn  ro  rp  rq  r   rr  rs  r   rt  ru  rN   rN   rO   print_invoice_new  s    




















 



















rw  z/email/invoicec        >   S   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 j  t jd s| jd W n, tk
r } z| jd	 W Y d d }~X nX | rg }|jd
 td| idfS g }x2t jd D ]$}t|}|r,n|j|d  qW |rVtd|idfS tjj	t
jt
jt jd kjt
jd kj }|sg }|jd td|idfS tjj	t
jtt
jtjkjtt
jtjkjt
jt
jt
jt
jt
jt
jt
jt
jt
jt
jt
jt
jtjtjtj tj!tj"tj#jt
jd kjtjd kjtjd kjtj$t%dkjt
jt jd kj }i }t&|t jd  |j}	|j}
|j|d< |jj'd|d< |jj'd|d< |j|d< |j"|d< |j#|d< |j|d< |j|d< |j|d< y@t jd |d< t(j)t*j+t jd }|j d d d  |d!< W nJ t,k
rz   |j|d< t(j)t*j+|j}|j d d d  |d!< Y nX |d" |d#< |d$ |d%< |jj'd|jj'dkrd&|d'< nd(|d'< |jd)krd*|d+< |jd,krd-|d+< |jd.krd/|d+< |jd0krd1|d+< |js d2|d+< y>|j rTtjj	t-jt-j.|j kj }|j/|d3< nd4|d3< W n t,k
r|   d4|d3< Y nX t0 }g }tjj	t1jt1jd kjt1j2d kjt1j|jkj3 }|snx|D ]}|j|j4 qW d5|i}t(j5t6|d6}g }|snx|D ]}i }|j7|d7< |j8|d8< y4x.|j d D ]}|d9 |j4kr6|d: }q6W W n: t9tfk
rx   d4}Y n t:t;fk
r   d;}Y nX ||d<< |j<|d=< |j| q
W tjj	t=jt=j|jkj }|rd>|d?< |j>|d@< ndA|d?< tjj	t?jt?j|jkj }|r>d>|dB< |j@jA|dC< |j@jB|dD< ndA|dB< tjj	tCjtCjd kjtCj|jkj3 }g }x.|D ]&}|jtD|j|jE|jF|jG|jH qzW tI|}||dE< |dF | |dG< |dH |dI  |dJ  |dK  |dL< |dM |dN  |dO< |dL |dO  |dP< |}tjj	tJjtJjd kjtJj|jkj3 }g } |rx|D ]|}!i }"|!jK|"dQ< |!jL|"dR< tM|!jN|"dS< |!jO|"dT< tP|!jL}#|#j d d d  |"dU< tQ|!jO}$|$j dV |"dW< | j|" qNW tjj	tRjtRj|jkjtRjd kj }%tjj	t
jt
j|jkjt
jd kjt
jSd)kj }&tjj	t
jt
j|jkjt
jd kjt
jd.kj }'tT|%sx|&sx|'r|dXndY||| dZ}(tUjVd[d\})tWjX }*tUjY|(d]|	 d^ tZ|*|)d_ d`}+g },i }-|	|-da< |
|-db< tWjX j'dc|-dd< tWjX j'de|-df< t[j\t]j^dg dh}.d]|	 d^ }/t_|/di}0|0j` }1|0ja  W d Q R X tbjc|1jd }2x`t jd D ]P}3te|+}4te|3}5dj|	 dk }6tfdltTdm|-dn}7tg }8|2|8_hdo|8_idp|	 dq |8_jdr|8_ktl|4|6|5|7}9|9jm|8 y|.jnjojpj5|9j) ds}:tqtrtsjt t jd dt|3 du |+ dv t jd tWjX dw};tjju|; ytjjv  tjja  W n* t,k

rn   tjjw  tjja  Y nX W n8 t,k

r } ztxjy }<tzj{ }=|=}:W Y d d }~X nX 	q\W tdxtr|:dydzfS ){Nru   zBooking ID is empty.zBooking ID is missing.emailzEmail is empty.zEmail is missing.rv   zSession ID is empty.zSession ID is missing.z5You appear to be missing some data. Please try again.rw   i  z is not a valid email addressz,The selected booking does not seem to exist.rx   i  r  r  z%d %b %Yrz   r{   r|   r   r   r^   r   r  rP   r  rQ   r   r   r   r  r  r  r  r  r  r  r  r  r   r   r  r  r  r  z
To InvoicezNot Paidr   zN/Ar  )r   r  r   r!  r"  zNetwork Errorr#  r~   Tr$  r*  Fr+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r   r?  zinvoice_new.htmlzProforma_invoice.html)rQ   r@  rA  z/usr/local/bin/wkhtmltopdf)r   zinvoices/invoice-z
-email.pdf)r   r   z$reservations@olpejetaconservancy.orgr}   clientz%B %Ytodayz%Ycopyright_yearSENDGRID_API_KEY)apikeyrbzBooking Invoice (#)z	text/htmlzinvoice_email.html)rQ   zapplication/pdfzinvoice-z.pdf
attachment)request_bodyzBooking invoice email sent to z from .)rB  ru   rC  rv   r~   zEmail successfuly sent.)rx   responsery   )|r
   r   r   r   r   r   r;   r>   rK   r   r   r   r   r   r   r   r   ru   r$   r   r   r|   rD  r   r{   rz   r}   r   r   r   rE  r   r   r   r   r   r   rF   r5   r   rT   rc   r   re   rf   r    r   r   r4   r   rG  r   rv   rU   rH  rI  r   rF  rJ  rK  r~   r+   r*  r/   rQ  r,  r-  r1   rE   r   r   r   r   rR  r!   r:  r;  rS   r<  r=  r7   r6   r   r   r	   r   r   r   r   r   rD   sendgridSendGridAPIClientr<   r   openreadrL   base64	b64encodedecodeEmailContent
AttachmentcontenttypefilenamedispositionMailadd_attachmentry  mailsendr   r   r   r   r   r   rS  sysexc_info	traceback
format_exc)>rw   r   r   Zemail_errorssingle_emailvalidr   rT  r   r}   r|   r   r   asyncRequestsrZ  r[  r\  r\   r]  r^  r_  r`  r#  r   ra  re  rf  rg  rh  r.  rj  rk  rl  rm  rn  ro  rp  rq  r   rr  rs  r   rt  senderemail_responsebooking_detailssg	file_pathfileZinvoice_dataZencoded_invoice	recipient
from_emailto_emailsubjectr  Zinvoice_attachr  r  ru  error_tupletracerN   rN   rO   email_invoice6  s   


































r  z/invoice/generate/<booking_id>GETc       7   m   C   s
  g }y| j   | s|jd W n, tk
rJ } z|jd W Y d d }~X nX |rng }|jd td|idfS tjjtjtj	| kjtj
d kj }|sg }|jd td|idfS tjjtjttjtjkjttj	tjkjttj	tjkjtj	tjtjtjtjtjtjtjtjtjtjtjtjtjtjtj tj!tj"tj#tj$tj%jtj
d kjtj
d kjtj
d kjtj&t'd	kjtj	| kj }i }t(||  |j}|j|d
< |jj)d|d< |jj)d|d< |jj)d|d< |jj)d|d< y|j|d< W n, t*k
r( } zd|d< W Y d d }~X nX |jr|jdkrJ|j|d< nRy i }t+|j| |d |d< W n0 t,tfk
r }	 zd|d< W Y d d }	~	X nX nd|d< y|j#|d< W n, t*k
r } zd|d< W Y d d }~X nX |j%|d< |j"|d< |j$|d< |j|d< |j|d< |j|d< |j-j)d|d< y@t.j/d |d< t0j1t2j3t.j/d }
|
j/ d  d! d" |d#< W nJ t*k
r   |j|d< t0j1t2j3|j}
|
j/ d  d! d" |d#< Y nX y|d }|d }|d }|d }||krt4|d$|d%< t4|d$|d&< n||kr|d'kr|j-j)d(}||d)}t0j5t6|d*}|j/ d  d! d+ }|j/ d  d! d, }t4|d$|d%< t4|d$|d&< n&|d'krt4|d$|d%< t4|d$|d&< W n@ t*k
r } z"t4|d$|d%< t4|d$|d&< W Y d d }~X nX |d- |d.< |d/ |d0< |jj)d|jj)dkr(d1|d2< nd3|d2< |jd4krDd5|d6< |jd$krXd7|d6< |jd8krld9|d6< |jd:krd;|d6< |jsd<|d6< y>|j rtjjt7jt7j8|j kj }|j9|d=< nd|d=< W n t*k
r   d|d=< Y nX g }tjjt:jt:j
d kjt:j;d kjt:j|j	kj< }|s0nx|D ]}|j|j q6W d>|i}t0j5t=|d*}g }|snnx|D ]}i }|j>|d?< |j?|d@< y4x.|j/ d  D ]}|dA |jkr|dB }qW W n: t,tfk
r   d}Y n t@tAfk
r   dC}Y nX ||dD< |j-|d< |j| qtW tjjtBjtBj|j	kj }|rdE|dF< |jC|dG< y6t0j1tDj3|jE}|j/ }|d }|dH } |dI }!W n4 t0jFjGk
r }" zd}d} d}!W Y d d }"~"X nX | |dJ< |!|dK< ||dL< |jH|dM< ndN|dF< tjjtIjtIj|j	kj }#|#r6dE|dO< |#jJjK|dP< |#jJjL|dQ< ndN|dO< tjjtMjtMj
d kjtMj|j	kj< }$g }%x<|$D ]4}&|j-j)d(}'|%jtN|j|&jO|&jP|&jQ|&jR|' qrW tS|%}(|(|dR< |dS |( |dT< |})tjjtTjtTj
d kjtTj|j	kj< }*|dU |dV  |dW  |dX  |dY< |dZ |d[  |d\< |dY |d\  |d]< g }+|*	rx|*D ]|},i }-|,jU|-d^< |,jV|-d_< tW|,jX|-d`< |,jY|-da< tZ|,jV}.|.j/ d  d! d" |-db< t[|,jY}/|/j/ dH |-dc< |+j|- 	qTW tjjt\jt\j| kjt\j
d kj }0tjjtjtj	| kjtj
d kjtj]d4kj }1tjjtjtj	| kjtj
d kjtjd8kj }2t^|0
sx|1
sx|2
r|ddnde|)||+df}3t_j`dgdh}4tajb }5t_jc|3di| dj td|5|4dk tetfdl| dj dm| dj dn}6do| dj |6jgdp< |6S )qNzBooking ID is empty.zBooking ID is missing.z5You appear to be missing some data. Please try again.rw   i  z,The selected booking does not seem to exist.rx   i  r  r  z%d %b %Yrz   r{   r  r	  r|   r
  r   r  r   zN/Ar   r   r   r   r^   r   r  r~   rP   r  rQ   r   r   r   r   r  r  z$162fface-f5f1-41de-913b-d2bb784dda3az%Y-%m-%d)rP   r   )r   rR   r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  z
To InvoicezNot Paidr   r  r  r   r!  r"  zNetwork Errorr#  Tr$  r%  r   r&  r'  r(  r)  r*  Fr+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  zinvoice_new.htmlzProforma_invoice.html)rQ   r@  rA  z/usr/local/bin/wkhtmltopdf)r   zinvoices/invoice-z.pdf)r   r   z"/booking_service/invoices/invoice-zinvoice-)attachment_filenamezattachment; filename = invoice-zContent-Disposition)hr   r   r   r   r>   rK   r   r   r   r   r   r   r   r   r   r   r   ru   r$   r   r|   rD  r   r{   rz   r}   r   r   rv   r   rE  r   r   r   r   r   r   r   r   rF   r5   r   rf   r9   rF  r~   r
   r   rT   rc   r   re   r   rU   rV   r    r   r   r   rG  r   rH  rI  r   rJ  rK  r+   rL  rM  rN  rO  rP  r*  r/   rQ  r,  r-  r1   r`   r   r   r   r   rR  r!   r:  r;  rS   r<  r=  r7   r6   r   r   r	   r   r   r   r   r   rD   r   r   headers)7ru   rw   r   r   r   rT  r   r}   rU  rV  r   rW  rX  r^   r   rY  r\   r]   r   rZ  r[  r\  r]  r^  r_  r`  r#  r   ra  rb  rc  r)  r'  r(  rd  re  rf  rg  rh  ri  r.  rj  rk  rl  rm  rn  ro  rp  rq  r   rr  rs  r   rt  pdf_responserN   rN   rO   generate_invoice  s   



















 
















r  z /print/credit_note/<booking_ref>c             C   s  t jjtjtj| kjtjd kj }|sJg }|jd t	d|idfS t jjtj
ttjtjkj
ttjtjkjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjjtjd kjtjd kjtjd kjtjt dkjtj|jkj }i }t!||j |j}|j|d< |jj"d|d< |jj"d|d< |jj"d|d	< |jj"d|d
< |j|d< |j|d< |j|d< |j|d< |j|d< |j|d< y@t#j$d |d< t%j&t'j(t#j$d }|j$ d d d |d< W nJ t)k
r.   |j|d< t%j&t'j(|j}|j$ d d d |d< Y nX |d |d< |d |d< |jj"d|jj"dkrld|d< nd|d< |jdkrd|d < |jd!krd"|d < |jd#krd$|d < |jd%krd&|d < |jsd'|d < y>|jrt jjt*jt*j+|jkj }|j,|d(< nd)|d(< W n t)k
r0   d)|d(< Y nX t jjt-jt-j|jkj }|rjd*|d+< |j.|d,< nd-|d+< t jjt/jt/j|jkj }	|	rd*|d.< |	j0j1|d/< |	j0j2|d0< nd-|d.< t jjt3jt3jd kjt3j|jkj4 }
g }x.|
D ]&}|jt5|j|j6|j7|j8|j9 qW t:|}||d1< |d2 | |d3< |}t;d4|d5}t<j=d6d7}t>j? }t<j@|d8| d9 tA||d: tBtCd;| d9 d<| d9 d=}d>| d9 |jDd?< |S )@Nz,The selected booking does not seem to exist.rx   i  r  r  z%d %b %Yrz   r{   r  r	  r|   r   r   r^   r   r  rP   r  rQ   r   r   r   r  r  r  r  r  r  r  r  r  r   r   r  r  r  r  z
To InvoicezNot Paidr   zN/ATr$  r*  Fr+  r,  r-  r.  r/  r0  zcredit_note.html)rQ   z/usr/local/bin/wkhtmltopdf)r   zinvoices/credit-note-z.pdf)r   r   z&/booking_service/invoices/credit-note-zcredit-note-)r  z#attachment; filename = credit-note-zContent-Disposition)Er>   rK   r   r   r   r}   r   r   r   r   r   r   r   ru   r$   r   r   r|   rD  r   r{   rz   r   r   r   rE  r   r   r   r   r   r   rF   r5   r   r
   r   rT   rc   r   re   rf   r    r   r   r+   r*  r/   rQ  r,  r-  r1   r   rE   r   r   r   r   rR  r	   r   r   r   r   r   rD   r   r   r  )r  r   r   rT  r   r}   r   r   ra  re  rf  rg  rh  r.  rj  rs  r   rt  r  rN   rN   rO   print_credit_note5	  s    

















r  z/print/booking_credit_notec               C   sF	  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 sn| 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jt	j
t	jd kj
t	jt jd kj }|sZg }|jd td|idfS tjjtj
tjt jd kj
tjd kj }tjjtjttjtjkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtjtjtj tj!tj"tj#tj$tj%tj&tj'tj(j
tjd kj
tjd kj
tjd kj
tj)t*dkj
tjt jd kj }i }yt+t jd t jd | W n0 t,k
r } zt,t-|W Y d d }~X nX yr|j.}||d< |j|d< |jj/d|d< |jj/d|d< |jj/d|d< |jj/d|d< |j|d< |j&|d< |j'|d< |j |d< |j!|d< |j|d< |j0j/d|d< y@t jd |d< t1j2t3j4t jd }|j d  d! d" |d#< W nJ t,k
r   |j|d< t1j2t3j4|j}|j d  d! d" |d#< Y nX y|d }	|d }
|d }|d }|	|
kr2t5|d$|d%< t5|d$|d&< n|	|
kr|
d'kr|j0j/d(}|	|d)}t1j6t7|d*}|j d  d! d+ }|j d  d! d, }t5|d$|d%< t5|d$|d&< n&|	d'krt5|d$|d%< t5|d$|d&< W n@ t,k
r } z"t5|d$|d%< t5|d$|d&< W Y d d }~X nX t1j2t3j4|j}|j d  d! d" |d#< |j(|d-< |j0j/d|d< |jd.krrd/|d0< |jd$krd1|d0< |jd2krd3|d0< |jd4krd5|d0< |jsd6|d0< y|jr4|jd7kr|j|d8< nRy i }t8|j| |d9 |d8< W n0 t9tfk
r0 } zd:|d8< W Y d d }~X nX nd:|d8< W n0 t,k
rn } zt,t-|W Y d d }~X nX y|j:|d;< W n, t,k
r } zd<|d;< W Y d d }~X nX y>|j$rtjjt;j
t;j<|j$kj }|j=|d=< nd:|d=< W n t,k
r   d:|d=< Y nX tjjt>j
t>j|jkj }|rd>|d?< |j?|d@< y6t1j2t@j4|jA}|j }|d; }|dA }|dB }W n4 t1jBjCk
r } zd<}d<}d<}W Y d d }~X nX ||dC< ||dD< ||dE< |jD|dF< ndG|d?< tjjtEj
tEj|jkj }|rd>|dH< |jFjG|dI< |jFjH|dJ< ndG|dH< W n0 t,k
rX } zt,t-|W Y d d }~X nX |}tIdK|dL}tJjKdMdN}tLjM }tJjN|dO| dP tO||dQ tPt-tQjR t jd dR| dS t jd tLjM dT}tjjS| ytjjT  tjjU  W n* t,k
	r   tjjV  tjjU  Y nX tdUdVtWjXdW  dX | dP dYdZfS )[Nru   zBooking ID is empty.zBooking ID is missing.credit_note_idzCredit note ID is empty.zCredit note ID is missing.rv   zSession ID is empty.zSession ID is missing.rw   i  z2The selected credit note does not appear to exist.rx   i  r  credit_note_refr  z%d %b %Yrz   r{   r  r	  r|   r   r   r^   r   r  r~   rP   r  rQ   r   r   r   r   r  r  z$162fface-f5f1-41de-913b-d2bb784dda3az%Y-%m-%d)rP   r   )r   rR   r  r   r  r  r   r  r  r  r  z
To InvoicezNot Paidr   r  r   zN/Ar   r
  r   Tr$  r%  r   r&  r'  r(  r)  r*  Fr+  r,  r-  zcredit_note_new.html)rQ   z/usr/local/bin/wkhtmltopdf)r   zinvoices/credit-note-z.pdf)r   r   zBooking credit note ref. #z printed)rB  ru   rC  rv   r~   zSuccess.zhttps://r   z/docs/invoices/credit-note-)rx   r   ry   )Yr
   r   r   r   r   r   r>   rK   r   r   r   r   credit_note_public_idr   r   r   r   r   ru   r$   r   r   r   r   r|   rD  r   r{   rz   r}   r   rv   r   r   rE  r   r   r   r   r   r   r   rF   r8   rf   r   r  r   r~   rT   rc   r   re   r   rU   rV   r9   rF  r   r    r   r   r+   rL  rM  rN  rO  rP  r*  r/   rQ  r,  r-  r	   r   r   r   r   r   rD   r   r   r   r   r   rL   rS  r<   r   ) rw   r   get_credit_noterx   r   rT  return_credit_note_datar  r   rW  rX  r^   r   rY  r\   r]   rU  rV  r   ra  rb  rc  r)  r'  r(  rd  re  rj  credit_noter   rt  ru  rN   rN   rO   print_booking_credit_note
  s   




























r  z/print/booking_credit_note_newc               C   sF	  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 sn| 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jt	j
t	jd kj
t	jt jd kj }|sZg }|jd td|idfS tjjtj
tjt jd kj
tjd kj }tjjtjttjtjkjttjtjkjttjtjkjtjtjtjtjtjtjtjtjtjtjtjtj tj!tj"tj#tj$tj%tj&tj'tj(j
tjd kj
tjd kj
tjd kj
tj)t*dkj
tjt jd kj }i }yt+t jd t jd | W n0 t,k
r } zt,t-|W Y d d }~X nX yr|j.}||d< |j|d< |jj/d|d< |jj/d|d< |jj/d|d< |jj/d|d< |j|d< |j&|d< |j'|d< |j |d< |j!|d< |j|d< |j0j/d|d< y@t jd |d< t1j2t3j4t jd }|j d  d! d" |d#< W nJ t,k
r   |j|d< t1j2t3j4|j}|j d  d! d" |d#< Y nX y|d }	|d }
|d }|d }|	|
kr2t5|d$|d%< t5|d$|d&< n|	|
kr|
d'kr|j0j/d(}|	|d)}t1j6t7|d*}|j d  d! d+ }|j d  d! d, }t5|d$|d%< t5|d$|d&< n&|	d'krt5|d$|d%< t5|d$|d&< W n@ t,k
r } z"t5|d$|d%< t5|d$|d&< W Y d d }~X nX t1j2t3j4|j}|j d  d! d" |d#< |j(|d-< |j0j/d|d< |jd.krrd/|d0< |jd$krd1|d0< |jd2krd3|d0< |jd4krd5|d0< |jsd6|d0< y|jr4|jd7kr|j|d8< nRy i }t8|j| |d9 |d8< W n0 t9tfk
r0 } zd:|d8< W Y d d }~X nX nd:|d8< W n0 t,k
rn } zt,t-|W Y d d }~X nX y|j:|d;< W n, t,k
r } zd<|d;< W Y d d }~X nX y>|j$rtjjt;j
t;j<|j$kj }|j=|d=< nd:|d=< W n t,k
r   d:|d=< Y nX tjjt>j
t>j|jkj }|rd>|d?< |j?|d@< y6t1j2t@j4|jA}|j }|d; }|dA }|dB }W n4 t1jBjCk
r } zd<}d<}d<}W Y d d }~X nX ||dC< ||dD< ||dE< |jD|dF< ndG|d?< tjjtEj
tEj|jkj }|rd>|dH< |jFjG|dI< |jFjH|dJ< ndG|dH< W n0 t,k
rX } zt,t-|W Y d d }~X nX |}tIdK|dL}tJjKdMdN}tLjM }tJjN|dO| dP tO||dQ tPt-tQjR t jd dR| dS t jd tLjM dT}tjjS| ytjjT  tjjU  W n* t,k
	r   tjjV  tjjU  Y nX tdUdVtWjXdW  dX | dP dYdZfS )[Nru   zBooking ID is empty.zBooking ID is missing.r  zCredit note ID is empty.zCredit note ID is missing.rv   zSession ID is empty.zSession ID is missing.rw   i  z2The selected credit note does not appear to exist.rx   i  r  r  r  z%d %b %Yrz   r{   r  r	  r|   r   r   r^   r   r  r~   rP   r  rQ   r   r   r   r   r  r  z$162fface-f5f1-41de-913b-d2bb784dda3az%Y-%m-%d)rP   r   )r   rR   r  r   r  r  r   r  r  r  r  z
To InvoicezNot Paidr   r  r   zN/Ar   r
  r   Tr$  r%  r   r&  r'  r(  r)  r*  Fr+  r,  r-  zcredit_note_new.html)rQ   z/usr/local/bin/wkhtmltopdf)r   zinvoices/credit-note-z.pdf)r   r   zBooking credit note ref. #z printed)rB  ru   rC  rv   r~   zSuccess.zhttps://r   z/docs/invoices/credit-note-)rx   r   ry   )Yr
   r   r   r   r   r   r>   rK   r   r   r   r   r  r   r   r   r   r   ru   r$   r   r   r   r   r|   rD  r   r{   rz   r}   r   rv   r   r   rE  r   r   r   r   r   r   r   rF   r8   rf   r   r  r   r~   rT   rc   r   re   r   rU   rV   r9   rF  r   r    r   r   r+   rL  rM  rN  rO  rP  r*  r/   rQ  r,  r-  r	   r   r   r   r   r   rD   r   r   r   r   r   rL   rS  r<   r   ) rw   r   r  rx   r   rT  r  r  r   rW  rX  r^   r   rY  r\   r]   rU  rV  r   ra  rb  rc  r)  r'  r(  rd  re  rj  r  r   rt  ru  rN   rN   rO   print_booking_credit_note_newK  s   




























r  )r  mathosr  r  r   r   r   r   r   pymysqlrT   r  flaskr   r   r   r   r	   r
   r   r   r   r   sendgrid.helpers.maildatabase.booking_activity_logr   database.booking_detailsr   database.booking_guest_typesr   database.booking_guestsr   database.booking_paymentsr   database.booking_statusr   database.booking_ticketsr   database.booking_typesr   database.bookingsr   database.credit_noter   database.credit_note_facilitiesr   database.credit_note_guestsr   database.credit_note_inventoryr   database.credit_note_vehiclesr   database.bookings_notesr   database.check_in_vehiclesr   database.destinationr    database.donationr!   database.facilityr"   database.gater#   database.gatepassr$   database.gatepass_detailsr%   database.gatepass_guestsr&   database.gatepass_vehiclesr'   database.inventoryr(   database.mandatory_paymentsr)   database.modifyr*   database.partnerr+   database.payment_methodsr,   database.salesforcer-   database.schoolr.   database.school_bookingr/   database.sunr0   database.transactionr1   database.vehicler2   database.vehicle_detailsr3   functions.async_functionsr4   functions.booking_snippetsr5   r6   r7   r8   r9   r:   functions.currency_operatorsfunctions.date_operatorsfunctions.validationr;   routesr<   r=   r>   r?   r@   rA   rB   rC   rD   routes.bookings_urlsrE   rF   routes.seed_functionsrG   rH   rI   rJ   	variablesrL   r`   rr   router  rv  rw  r  r  r  r  r  rN   rN   rN   rO   <module>   s   0 ,7              
  z f  3