B
    )¤éf.E  ã               @   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mZ d dlZd dlmZ d dlmZmZmZmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZmZ d dl m!Z! ddl"m#Z# ede$ƒZ%e%j&dddgde
e!ddƒdd„ ƒƒƒZ'e%j&dddgde
e!dddƒdd„ ƒƒƒZ(e%j&ddgde
e!dddƒdd„ ƒƒƒZ)dd„ Z*e%j&d dgde
e!dddƒd!d"„ ƒƒƒZ+e%j&d#dgde
e!dddƒd$d%„ ƒƒƒZ,e%j&d&dgde
e!dddƒd'd(„ ƒƒƒZ-e%j&d)dgde
e!ddƒd*d+„ ƒƒƒZ.dS ),é    )Ú	BlueprintÚrender_templateÚredirectÚurl_forÚflashÚrequestÚResponse)Úcurrent_userÚlogin_required)ÚStringION)Údb)ÚAgencyÚUserÚBookingÚInvoiceÚGuest)ÚfuncÚcaseÚand_)Ú
joinedload)Údatetime)Ú
AgencyFormÚUpdateAgencyForm)Úroles_requiredé   )Úis_super_adminÚagencyz/create_agencyÚGETÚPOST)ÚmethodsÚsuper_adminÚadminc           
   C   s²   t ƒ } |  ¡ r¤t| jj| jj| jj| jj| jj| j	j| j
j| jjd}t| jj| jjd|d}| | jj¡ tj |¡ tj |¡ tj ¡  tddƒ ttdƒƒS tdd| d	S )
N)ÚnameÚemailÚdesignationÚ	telephoneÚcredit_limitÚused_creditÚ	paid_backÚallowed_accountsÚagency_admin)Úusernamer#   Úroler   z+Agency and admin user created successfully!Úsuccesszagency.view_agencieszagency/create_agency.htmlzCreate Agency)ÚtitleÚform)r   Úvalidate_on_submitr   r"   Údatar#   r$   r%   r&   r'   r(   r)   r   Úadmin_usernameÚadmin_emailÚset_passwordÚadmin_passwordr   ÚsessionÚaddÚcommitr   r   r   r   )r/   r   Z
admin_user© r9   úIC:\Users\Lenovo\Desktop\Projects\times_travel\app\routes\agency_routes.pyÚcreate_agency   s.    

r;   z/update_agency/<int:agency_id>r*   c             C   sÔ   t j | ¡}tjdksBtjdkr*tj| ksBtddƒ td|gdS t|d}| 	¡ rÄ|j
j|_
|jj|_|jj|_|jj|_|jj|_|jj|_|jj|_|jj|_tj ¡  tdd	ƒ ttd
ƒƒS tdd||dS )Nr    r*   z*You are not allowed to update this agency.Údangerzagency/agencies.html)Úagencies)ÚobjzAgency updated successfully!r-   zagency.view_agencieszagency/update_agency.htmlzUpdate Agency)r.   r/   r   )r   ÚqueryÚ
get_or_404r	   r,   Ú	agency_idr   r   r   r0   r"   r1   r#   r$   r%   r&   r'   r(   r)   r   r6   r8   r   r   )rA   r   r/   r9   r9   r:   Úupdate_agency3   s&    












rB   z	/agenciesc              C   s0   t ƒ stjdkrtj ¡ } ntjg} td| dS )Nr!   zagency/agencies.html)r=   )r   r	   r,   r   r?   Úallr   r   )r=   r9   r9   r:   Úview_agenciesQ   s    rD   c             C   s°   t j t tj¡ d¡t t	t
tjdktjdkƒdfdd¡ d¡t t	tjdkdfdd¡ d¡t t	tjdkdfdd¡ d	¡¡ tj| k¡}| ¡ }|j|j|j|jd
œS )NÚtotal_bookingsFr   r   )Úelse_Úvouchered_bookingsTÚconfirmed_bookingsÚpaid_bookings)rE   rG   rH   rI   )r   r6   r?   r   Úcountr   ÚidÚlabelÚsumr   r   Úbooking_confirmedÚinvoice_paidÚfilterrA   ÚonerE   rG   rH   rI   )rA   r?   Ústatsr9   r9   r:   Úget_agency_booking_stats]   s(    


rS   z/agencies_dashboardc              C   sl   t ƒ stjdkr(tj ttjƒ¡ ¡ } ntj	g} g }x(| D ] }t
|jƒ}| d|i|–¡ q:W td| |dS )Nr!   r   zagency/agencies_dashboard.html)r=   Úagency_data)r   r	   r,   r   r?   Úoptionsr   ÚbookingsrC   r   rS   rK   Úappendr   )r=   rT   r   Zbooking_statsr9   r9   r:   Úagencies_dashboardy   s    

rX   z/agency_detail/<int:agency_id>c             C   sL  | st tdƒƒS tj | ¡}|j|j }tj 	d¡}tj 	d¡}tj 	d¡}tj 	d¡}tj 	dd¡}tj 	dd	¡}t
j t
j| k¡}	|r|r|d
kr¸|	 t
j d|› d¡¡}	nN|dkrÜ|	 t
j| ¡ dkk¡}	n*|dkr
|	 t
j¡ tj d|› d¡¡}	nü|dkrRy$t |d¡ ¡ }
|	 t
j|
k¡}	W n tk
rN   Y nX n´|dkršy$t |d¡ ¡ }
|	 t
j|
k¡}	W n tk
r–   Y nX nl|dkrÚyt|ƒ}|	 t
j|k¡}	W n tk
rÖ   Y nX n,|dkr|	 t
j¡ tj d|› d¡¡}	|rHy$t |d¡ ¡ }|	 t
j|k¡}	W n tk
rF   Y nX |rŠy$t |d¡ ¡ }|	 t
j|k¡}	W n tk
rˆ   Y nX |dkr¼|	  |d	kr¬t
j! "¡ nt
j! #¡ ¡}	nš|dkrö|	 t
j¡  |d	krætj "¡ ntj #¡ ¡}	n`|dkr(|	  |d	krt
j "¡ nt
j #¡ ¡}	n.|dkrX|	  |d	krJt
j "¡ nt
j #¡ ¡}	nþ|d
krˆ|	  |d	krzt
j "¡ nt
j #¡ ¡}	nÎ|dkrÀ|	 t
j$¡  |d	kr²t%j& "¡ nt%j& #¡ ¡}	n–|dkrð|	  |d	krât
j "¡ nt
j #¡ ¡}	nf|dkr |	  |d	krt
j "¡ nt
j #¡ ¡}	n6|dkrV|	 t
j¡  |d	krJtj "¡ ntj #¡ ¡}	|	 't(t
jƒt(t
j$ƒt(t
jƒ¡ )¡ }g }x„|D ]|}|j}|j$}d dd„ |D ƒ¡}| *|j!|j|j|j|jrÌ|jjnd||jrÜdnd|j› d|rô|jnddœ	¡ q„W t+| ƒ}|d }|d  }|d! }|d" }t,d#|||||||||||d$S )%Nz
auth.indexÚfilter_columnÚfilter_valueÚ
start_dateÚend_dateÚsort_byrK   Ú
sort_orderÚascÚ
hotel_nameú%ÚstatusÚ	confirmedÚ
agent_nameÚcheck_inz%Y-%m-%dÚ	check_outÚpriceÚpayment_methodrA   Ú
guest_nameÚselling_pricez, c             S   s   g | ]
}|j ‘qS r9   )Ú
first_name)Ú.0Úguestr9   r9   r:   ú
<listcomp>÷   s    z!agency_detail.<locals>.<listcomp>zN/AÚ	ConfirmedÚPendingz SAR)	rK   re   rf   r`   rd   Úguest_namesrb   rg   rh   rE   rG   rH   rI   zagency/agency_detail.html)r   rE   rG   rH   rI   Úremaining_creditÚbooking_detailsrY   rZ   r]   r^   )-r   r   r   r?   r@   r&   r'   r   ÚargsÚgetr   rP   rA   r`   ÚilikerN   ÚlowerÚjoinÚagentr   r+   r   ÚstrptimeÚdatere   Ú
ValueErrorrf   Úfloatrj   Úinvoicer   rh   Úorder_byrK   r_   ÚdescÚguestsr   rk   rU   r   rC   rW   rS   r   )rA   r   rr   rY   rZ   r[   r\   r]   r^   Úbookings_queryÚ
date_valueÚprice_valueÚstart_date_valueÚend_date_valuerV   rs   Úbookingr~   r   rq   rR   rE   rG   rH   rI   r9   r9   r:   Úagency_detailŽ   sÐ    
$



"
(
0
(
&
&
.
&
&
,

rˆ   z/export_agenciesc              C   sŠ  t jjdtd} | sdS tjdkr0tj| kr0dS tj 	| ¡}t j d¡}t j d¡}t j d¡}t j d	¡}t j d
d¡}t j dd¡}t
j t
j| k¡}|rÔ|rÔ|dkrÌ| t
j d|› d¡¡}n|dkrî| t
j| ¡ dkk¡}næ|dkr| t
j¡ tj d|› d¡¡}n¸|dkrhy(t |d¡ ¡ }	| tt
|ƒ|	k¡}W n tk
rd   Y nX nl|dkr¨yt|ƒ}
| t
j|
k¡}W n tk
r¤   Y nX n,|dkrÔ| t
j¡ tj d|› d¡¡}|ry$t |d¡ ¡ }| t
j|k¡}W n tk
r   Y nX |rXy$t |d¡ ¡ }| t
j|k¡}W n tk
rV   Y nX t t
|ƒrntt
|ƒnt
j!}|dkr†tj}n"|dkr˜t"j#}n|dkr¨tj}| $|dkr¾| %¡ n| &¡ ¡}| 't(t
jƒt(t
j)ƒt(t
jƒ¡ *¡ }t+| ƒ}|j,|j- }t.ƒ }t/ 0|¡}| 1dg¡ | 1dddddddg¡ | 1|j!|j2|j3|j4pNd |j,|j-|g¡ | 1g ¡ | 1d!g¡ | 1d"d#d$d%g¡ | 1|d& |d' |d( |d) g¡ | 1g ¡ | 1d*g¡ | 1dd+d,d-d.d/d0d1d2g	¡ xˆ|D ]€}d3 d4d5„ |j)D ƒ¡}| 1|j!|j 5d¡|j 5d¡|j|jr*|jjnd ||jr:d6nd7|j› d8|jrV|jjnd g	¡ qàW | 6d9¡ t7|d:d;d<|j!› d=id>S )?NrA   )Útype)zAgency ID is requiredi  r*   )ÚUnauthorizedi“  rY   rZ   r[   r\   r]   rK   r^   r_   r`   ra   rb   rc   rd   )re   rf   z%Y-%m-%drg   rh   ri   zAgency DetailsZIDÚNameÚEmailZPhonezCredit LimitzUsed CreditzRemaining CreditzN/AzBooking StatisticszTotal BookingszVouchered BookingszConfirmed BookingszPaid BookingsrE   rG   rH   rI   zBooking DetailszCheck-Inz	Check-Outz
Hotel Namez
Agent NamezGuest NamesZStatusZPricezPayment Methodz, c             S   s   g | ]
}|j ‘qS r9   )rk   )rl   rm   r9   r9   r:   rn   „  s    z#export_agencies.<locals>.<listcomp>ro   rp   z SARr   ztext/csvzContent-Dispositionzattachment;filename=agency_z_details.csv)ÚmimetypeÚheaders)8r   rt   ru   Úintr	   r,   rA   r   r?   r@   r   rP   r`   rv   rN   rw   rx   ry   r   r+   r   rz   r{   Úgetattrr|   r}   rj   r~   r   rh   re   rf   ÚhasattrrK   r   rk   r   r_   r€   rU   r   r   rC   rS   r&   r'   r   ÚcsvÚwriterÚwriterowr"   r#   r%   ÚstrftimeÚseekr   )rA   r   rY   rZ   r[   r\   r]   r^   r‚   rƒ   r„   r…   r†   Zsort_columnrV   rR   rr   Úoutputr“   r‡   rq   r9   r9   r:   Úexport_agencies  s¶    
$


"


 

"





r˜   z/delete_agency/<int:agency_id>c             C   sl   t j | ¡}tjdks@tjdkr*tj| ks@tddƒ ttdƒƒS t	j
 |¡ t	j
 ¡  tddƒ ttdƒƒS )Nr    r*   z*You are not allowed to delete this agency.r<   zagency.view_agencieszAgency deleted successfully!r-   )r   r?   r@   r	   r,   rA   r   r   r   r   r6   Údeleter8   )rA   r   r9   r9   r:   Údelete_agency˜  s    



rš   )/Úflaskr   r   r   r   r   r   r   Úflask_loginr	   r
   Úior   r’   Úappr   Ú
app.modelsr   r   r   r   r   Ú
sqlalchemyr   r   r   Úsqlalchemy.ormr   r   Ú	app.formsr   r   Zapp.decoratorsr   Úutilsr   Ú__name__Ú	agency_bpÚrouter;   rB   rD   rS   rX   rˆ   r˜   rš   r9   r9   r9   r:   Ú<module>   sF   $
!
 
}