U
    HÚêf‰C  ã                   @   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!Úsuccessú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   )r0   r   Z
admin_user© r:   úE/home/www/findmeahotel.co.uk/times_travel/app/routes/agency_routes.pyÚcreate_agency   s2    øü

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.Údangerúagency/agencies.html©Úagencies)ÚobjzAgency updated successfully!r-   r.   zagency/update_agency.htmlzUpdate Agency)r/   r0   r   )r   ÚqueryÚ
get_or_404r	   r,   Ú	agency_idr   r   r   r1   r"   r2   r#   r$   r%   r&   r'   r(   r)   r   r7   r9   r   r   )rD   r   r0   r:   r:   r;   Úupdate_agency3   s,    
ÿÿ











rE   z	/agenciesc                  C   s0   t ƒ stjdkrtj ¡ } ntjg} td| dS )Nr!   r>   r?   )r   r	   r,   r   rB   Úallr   r   r?   r:   r:   r;   Úview_agenciesQ   s    rG   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)rH   rJ   rK   rL   )r   r7   rB   r   Úcountr   ÚidÚlabelÚsumr   r   Úbooking_confirmedÚinvoice_paidÚfilterrD   ÚonerH   rJ   rK   rL   )rD   rB   Ústatsr:   r:   r;   Úget_agency_booking_stats]   s:    þýþýþýöòürV   z/agencies_dashboardc                  C   sh   t ƒ stjdkr(tj ttjƒ¡ ¡ } ntj	g} g }| D ] }t
|jƒ}| d|i|–¡ q8td| |dS )Nr!   r   zagency/agencies_dashboard.html)r@   Úagency_data)r   r	   r,   r   rB   Úoptionsr   ÚbookingsrF   r   rV   rN   Úappendr   )r@   rW   r   Zbooking_statsr:   r:   r;   Úagencies_dashboardy   s    
 ÿþr[   z/agency_detail/<int:agency_id>c                 C   sH  | 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rRz$t |d¡ ¡ }
|	 t
j|
k¡}	W n tk
rN   Y nX n´|dkršz$t |d¡ ¡ }
|	 t
j|
k¡}	W n tk
r–   Y nX nl|dkrÚzt|ƒ}|	 t
j|k¡}	W n tk
rÖ   Y nX n,|dkr|	 t
j¡ tj d|› d¡¡}	|rHz$t |d¡ ¡ }|	 t
j|k¡}	W n tk
rF   Y nX |rŠz$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 }|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‚t+| ƒ}|d }|d  }|d! }|d" }t,d#|||||||||||d$S )%Nz
auth.indexÚfilter_columnÚfilter_valueÚ
start_dateÚend_dateÚsort_byrN   Ú
sort_orderÚascÚ
hotel_nameú%ÚstatusÚ	confirmedÚ
agent_nameÚcheck_inú%Y-%m-%dÚ	check_outÚpriceÚpayment_methodrD   Ú
guest_nameÚselling_priceú, c                 S   s   g | ]
}|j ‘qS r:   ©Ú
first_name©Ú.0Zguestr:   r:   r;   Ú
<listcomp>÷   s     z!agency_detail.<locals>.<listcomp>úN/AÚ	ConfirmedÚPendingú SAR)	rN   rh   rj   rc   rg   Úguest_namesre   rk   rl   rH   rJ   rK   rL   zagency/agency_detail.html)r   rH   rJ   rK   rL   Úremaining_creditÚbooking_detailsr\   r]   r`   ra   )-r   r   r   rB   rC   r&   r'   r   ÚargsÚgetr   rS   rD   rc   ÚilikerQ   ÚlowerÚjoinÚagentr   r+   r   ÚstrptimeÚdaterh   Ú
ValueErrorrj   Úfloatrn   Úinvoicer   rl   Úorder_byrN   rb   ÚdescÚguestsr   rq   rX   r   rF   rZ   rV   r   )rD   r   rz   r\   r]   r^   r_   r`   ra   Úbookings_queryÚ
date_valueÚprice_valueÚstart_date_valueÚend_date_valuerY   r{   Úbookingr†   r‰   ry   rU   rH   rJ   rK   rL   r:   r:   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rhz(t |d¡ ¡ }	| tt
|ƒ|	k¡}W n tk
rd   Y nX nl|dkr¨zt|ƒ}
| t
j|
k¡}W n tk
r¤   Y nX n,|dkrÔ| t
j¡ tj d|› d¡¡}|rz$t |d¡ ¡ }| t
j|k¡}W n tk
r   Y nX |rXz$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	¡ |D ]€}d3 d4d5„ |j)D ƒ¡}| 1|j!|j 5d¡|j 5d¡|j|jr(|jjnd ||jr8d6nd7|j› d8|jrT|jjnd g	¡ qÞ| 6d9¡ t7|d:d;d<|j!› d=id>S )?NrD   )Útype)zAgency ID is requiredi  r*   )ÚUnauthorizedi“  r\   r]   r^   r_   r`   rN   ra   rb   rc   rd   re   rf   rg   )rh   rj   ri   rk   rl   rm   zAgency DetailsZIDÚNameÚEmailZPhonezCredit LimitzUsed CreditzRemaining Creditru   zBooking StatisticszTotal BookingszVouchered BookingszConfirmed BookingszPaid BookingsrH   rJ   rK   rL   zBooking DetailszCheck-Inz	Check-Outz
Hotel Namez
Agent NamezGuest NamesZStatusZPricezPayment Methodro   c                 S   s   g | ]
}|j ‘qS r:   rp   rr   r:   r:   r;   rt   „  s     z#export_agencies.<locals>.<listcomp>rv   rw   rx   r   ztext/csvzContent-Dispositionzattachment;filename=agency_z_details.csv)ÚmimetypeÚheaders)8r   r|   r}   Úintr	   r,   rD   r   rB   rC   r   rS   rc   r~   rQ   r   r€   r   r   r+   r   r‚   rƒ   Úgetattrr„   r…   rn   r†   r   rl   rh   rj   ÚhasattrrN   r   rq   r‡   rb   rˆ   rX   r   r‰   rF   rV   r&   r'   r   ÚcsvÚwriterÚwriterowr"   r#   r%   ÚstrftimeÚseekr   )rD   r   r\   r]   r^   r_   r`   ra   rŠ   r‹   rŒ   r   rŽ   Zsort_columnrY   rU   rz   Úoutputr›   r   ry   r:   r:   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=   r.   zAgency deleted successfully!r-   )r   rB   rC   r	   r,   rD   r   r   r   r   r7   Údeleter9   )rD   r   r:   r:   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<   rE   rG   rV   r[   r   r    r¢   r:   r:   r:   r;   Ú<module>   sT   $
 

	

 	
|