3
	h,                 @   s  d dl mZmZmZmZmZmZmZmZ d dl	m
Z
mZmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lZd d
lmZ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$Z$d d	l%Z%d d	l&Z&d dl'm(Z( ee)Z*ee* e!j+d e*j,d< e!j+d e*j,d< de*j,d< de*j,d< de*j,d< e!j+d dkrte!j+d e*j,d< e!j+d e*j,d< n0e!j+d dkre!j+d e*j,d< e!j+d e*j,d< dj-e*j,d e*j,d< dj-e*j,d e*j,d< dj-e*j,d e*j,d < d!e*j,d"< d#e*j,d$< d%e*j,d&< de*j,d'< de*j,d(< d)e*j,d*< d+e*j,d,< d-e*j,d.< d/e*j,d0< d1e*j,d2< d3e*j,d4< d1e*j,d5< d6e*j,d7< d8e*j,d9< d:e*j,d;< d<e*j,d=< d>e*j,d?< d@e*j,dA< dBe*j,dC< dDe*j,dE< ee_.e
e*dFeidGZ/ee*Z0ee*dHdIdJdKZ1ee*dHdLd dMdKZ2dNZ3dOZ4dNZ5dOZ6d dPl7m8Z8 d dQl9m:Z: e:e*j,d& Z;dRdSdTdUdUdUdUdVdWdgdZd[Z<d\d] Z=d d^l>m?Z?m@Z@mAZA d_d` ZBedadbZCeCjDeBdcdddedfdg eCjE  dhdi ZFdjdk ZGdldm ZHe*jIdndo ZJdpdq ZKdrds ZLdtdu ZMe*jIdvdw ZNd dxlOmPZPmQZQmRZRmSZS dydz ZTedadbZUeUjDeTdcddd{dfdg eUjE  edadbZVeVjDeKdcddd|d}dg eVjE  edadbZWeWjDeLdcddd{d~dg eWjE  edadbZXeXjDeMdcddd{ddg eXjE  d dlYmZZZ d dl[m\Z\ e*jIdd Z]d dl^m_Z_ d dl^m`Z`maZambZbmcZcmdZdmeZe d dl^mfZfmgZgmhZhmiZimjZjmkZk d dl^mlZlmmZmmnZnmoZo d dl^mpZpmqZqmrZrmsZsmtZtmuZu d dl^mvZvmwZwmxZxmyZy d dl^mzZzm{Z{m|Z| d dl^m}Z}m~Z~mZmZmZ d dl^mZmZmZmZmZ d dl^mZmZmZmZmZmZ d	S )    )Flaskjsonifyrender_templateurl_forrequestredirectjsonmake_response)
SQLAlchemy	functoolsModel)CORScross_origin)datetime	timedelta)wraps)CachingQuery	FromCache)Cache)BackgroundSchedulerN)MailEmailContentPersonalization)or_SQLALCHEMY_DATABASE_URIZSENDGRID_API_KEYFSQLALCHEMY_TRACK_MODIFICATIONS   SQLALCHEMY_MAX_OVERFLOW(   SQLALCHEMY_POOL_SIZEENVIRONMENTDevelopmentZDEVELOPMENT_IPZSERVERZ	SERVER_IP
ProductionZPRODUCTION_IPz"https://{}:5004/v1/members/reportsZMEMBERSHIP_SERVICEz'https://{}:5012/v1/applications/reportsZVOLUNTEER_SERVICEz$https://{}:5008/v1/donations/reportsZDONATION_SERVICEz?http://bookings.olpejetaconservancy.org:900/request/details/newZLOGGING_URLZVUsIUkFDNUL4wm2AGbZoPoNzXGHgzlXKcJFk9M3J2iP_jOB30dtVK24NjOjdN_d5052lUg_udIoPhftpsHtOYqQZLOG_AUTH_KEYZ 826229ff88b14e5f8387f7f489f64759ZBOOKING_KEYJSONIFY_PRETTYPRINT_REGULARJSON_SORT_KEYSz#0084ffZ	CONFIRMEDz#f0932bZUNCONFIRMEDz#00a8ffZ	ABANDONEDz#e74c3c	CANCELLEDz#9b59b6ZNO_SHOWz#00cec9ZUPDATEDZ
TO_INVOICEz#487eb0ZDEPOSITz#8c7ae6ZCOMPLIMENTARYz#2196f3Z
CHECKED_INz#73a533ZCHECKED_OUTz#800080Z	POSTPONEDZ8352622747345177671ZSF_CONSUMER_SECRETzU3MVG9yZ.WNe6byQD858v6Un58ByCtjUKlb8DId1hjyRhGxOXwS2PGaE.vG46BdI_.uX.whSJwkx8clIJr1oghZSF_CONSUMER_KEYz6https://bookings.olpejetaconservancy.org:5005/callbackZSF_REDIRECT_URI	query_cls)session_options
filesystemz/var/backups)
CACHE_TYPE	CACHE_DIR)configz/var/report_cache)r*   r+   ZCACHE_DEFAULT_TIMEOUT      )SessionTracking)Loggerz10.0inz50.0inZ50z0.0inZ400zUTF-8Accept-Encodinggzipz3.4)z
page-widthzpage-heightzminimum-font-sizez
margin-topzmargin-rightzmargin-bottomzmargin-leftZdpiencodingzcustom-headerzoomc             C   s.   ddgdd| j d d | j d d	d
}|S )NzUTF-8Accept-Encodingr2   z0.75zInvoice generated at z%I:%M %pz on z%d %B %Yr.   )r3   zcustom-headerr4   zfooter-leftzfooter-font-size)r5   r2   )strftime)current_dateZinvoice_print_options r8   '/booking_service/app/routes/__init__.pyinvoice_optionst   s    
r:   )send_visit_datasend_driver_detailssend_visit_data_scheduledc               C   s
   t   d S )N)r=   r8   r8   r8   r9   salesforce_record_keeping   s    r>   T)daemonZcron*2Z30)Zday_of_weekhourminutec                s   t   fdd}|S )Nc           
      sl   t j}t|}tt jt jt||d |d t jjt jj	t
j d}tjj| tjj  tjj   | |S )Nz
User-AgentzAccept-Language)methodurlheaders
user_agentlanguageplatformbrowser
created_at)r   rF   dictr/   rD   rE   strrG   rI   rJ   r   nowdbsessionaddcommitclose)argskwargsZget_header_detailsZheader_dictrP   )funcr8   r9   getHeaderDetails   s    

z)sessionTracking.<locals>.getHeaderDetails)r   )rV   rW   r8   )rV   r9   sessionTracking   s    rX   c             C   sB   | sd}d}n| j d\}}t|t }t|jt}|d | S )NS0-)splitintschoolCodeIntervalrM   zfillschoolZeroPadding)prevCodecode_prefixprev_code_valuenew_code_valueZschool_coder8   r8   r9   schoolCodeGenerator   s    re   c             C   sP   | sdt j jd }d}n| jd\}}t|t }t|jt}|d | S )NZTKTz%d%m%YrZ   r[   )	r   rN   r6   r\   r]   ticketCodeIntervalrM   r_   ticketZeroPadding)ra   rb   rc   rd   Zticket_coder8   r8   r9   ticketGenerator   s    rh   c              C   s   dd } t | dS )Nc             S   sj   t jt| d} y"t| jd}ttd }d}W n  tk
rR   t| }d}Y nX |dkrfdj|}|S )N   .r   z{:,})mathceilroundformatr\   r]   	Exception)amountsplit_amountsignificantdecimal	formattedr8   r8   r9   return_formatted_fee   s    

z(format_fee.<locals>.return_formatted_fee)ru   )rL   )ru   r8   r8   r9   
format_fee   s    rv   c               C   s
   t   d S )N)endOfDayEveningr8   r8   r8   r9   end_of_day_evening   s    rx   c               C   s
   t   d S )N)endOfDayMorningr8   r8   r8   r9   end_of_day_morning   s    rz   c               C   s
   t   d S )N)sendPaymentRemindersr8   r8   r8   r9   send_payment_reminders   s    r|   c              C   s   dd } t | dS )Nc             S   s   y*t | jd}t|d }t|d }W n  tk
rJ   t| }d}Y nX |dkrbt |d }n|dkrnd}dj|}|d | }|S )Nrj   r   r-   Z00z{:,})rM   r\   r]   ro   rn   )rp   rq   rr   rs   Zformatted_decimalZformatted_significantrt   r8   r8   r9   return_formatted_tax   s    

z(format_tax.<locals>.return_formatted_tax)r}   )rL   )r}   r8   r8   r9   
format_tax   s    r~   )changeToNoShowsrw   ry   r{   c               C   s
   t   d S )N)r   r8   r8   r8   r9   no_shows  s    r   8Z16Z20Z35Z58)Booking)get_currency_rate_at_timec              C   s   dd } t | dS )Nc             S   s   t |d}| |krt|S | |kr|dkrtjjtjtjd kjtj|kj	 }|j
jd}| |d}tjt|d}	|	j d d d }t|t| }
t|
S | dkrt|t| }
t|
S d S )	N   z$162fface-f5f1-41de-913b-d2bb784dda3az%Y-%m-%d)Zcurrency_iddate)r   datar   Z
buy_amount)rm   floatrO   rP   queryr   filterZdeletion_markerZbooking_ref_codefirstrK   r6   requestspostr   r   )Zcurrency_toZcurrency_fromrp   Zbuying_rateZselling_rateZbooking_refZget_bookingZbooking_dateZ	post_dataZ	get_ratesvaluer8   r8   r9   return_converted_amount@  s$    

z/convert_amount.<locals>.return_converted_amount)r   )rL   )r   r8   r8   r9   convert_amount>  s    r   )seed_functions)	base_urlspayment_methods_urlspartners_payment_methods_urlsguests_payment_methods_urlsbooking_types_urls
autos_urls)bookings_urlsbookings_facility_urlsbookings_inventory_urlsbookings_search_urlscalendar_urlsold_calendar_urls)express_checkout_urlsbookings_payments_urlsvehicles_urlsbookings_batchfile_urls)bookings_count_urlspayments_urlsdestinations_urlspartner_bookings_urlsgroup_bookings_urlsreminders_urls)	gate_urlsbookings_graphs_urls
print_urlspickup_locations_urls)bookings_csv_urlsbooking_filtersfacility_pricing_types_urls)mandatory_payments_urlsgatepass_urls	batchfilesalesforce_v2bookings_operations_urls)contact_list_urlscallback_urlsbooking_notes_urlsdocuments_urlspayment_gateways_urls)booking_reports_urlsbooking_activity_urlsschool_urlscredit_note_urlsentry_mode_urlsbooking_finances)r1   r2   )flaskr   r   r   r   r   r   r   r	   flask_sqlalchemyr
   r   r   
flask_corsr   r   r   r   r   Zflask_sqlalchemy_cacher   r   Zflask_cacher   Z!apscheduler.schedulers.backgroundr   ZsendgridZsendgrid.helpers.mailr   r   r   r   pymysqlosrk   r   uuidsys	traceback
sqlalchemyr   __name__appenvironr,   rn   query_classrO   Zdb_cacheZmemoise_cacheZreport_cacher^   r`   rf   rg   Zdatabase.sessionr/   Zfunctions.logging_servicer0   Zbookings_loggerZreceipt_print_optionsr:   Zroutes.salesforce_v2r;   r<   r=   r>   Zschedule_taskZadd_jobstartrX   re   rh   context_processorrv   rx   rz   r|   r~   Zroutes.bookings_operations_urlsr   rw   ry   r{   r   Zschedule_task_showZschedule_task_eveningZschedule_task_morningZschedule_task_payment_remindersZdatabase.bookingsr   	variablesr   r   routesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r8   r8   r8   r9   <module>   s  (8



























"   