o
    p"Phv                     @   s  d dl mZmZmZ d dl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Zd
dlmZmZmZ d dlmZ d
dlmZmZmZmZ d dlmZ dd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&d!ddZ'dd  Z(d	S )"    )renderredirectget_object_or_404)JsonResponseHttpResponseBadRequest)reverse)messages)	send_mail)render_to_string)settings)timezoneN   )EventRegistrationPaymentProof)RegisteredUser)VerifyCodeFormEventSelectionFormRegistrationFormPaymentProofFormc           	      C   s   t  }tjjdt dd}| jddkrRd| j	v rR| j	d}t
 }t| }|D ]}q-tjj|d }|rI|jj}t| d| d	 t| d
||dS t| d||dS )zS
    Main registration page where users enter their code or choose to register
    T	is_activeend_date__gte
start_dateactionselect_eventregistration_coder   !You are currently registered for z=. Select a different event below to update your registration.!registration/event_selection.htmlformr   zregistration/home.html)r!   events)r   r   objectsfilterr   noworder_byGETgetsessionr   r   get_messagesr   firsteventnameinfor   )	requestr!   r"   r   
event_formstorage_existing_regcurrent_event r5   1/var/www/html/smartRegister/registration/views.pyregistration_home   s(   
r7   c                 C   s  | j dkrt| j}| r|jd }tjj|d}| }t	jj|d }|s-|r|| j
d< d| j
d< |rWd| j
d< |j| j
d< |j| j
d< |rVd	|_d	|_|  nd
| j
d< |ra|jn|j}| j
dd
rt| }|D ]}qrt }	t| d|j d t| d|	|dS |jdddjd
d }
|
rt| }|D ]}q|
jj}t| d| d t|
j| j
d< t| d|
|dS t| }|D ]}qt }	|r|jj}t| d| d n|rt| d|j d t| d|	|dS t| d tdS nt }t| dd|iS )zG
    Verify if the registration code exists and direct accordingly
    POSTr   r   Tis_existing_userfrom_attendance_moduleattendance_user_emailattendance_user_nameapprovedFzWelcome back, z:! Confirm by selecting the training you will be attending.r   r    pending)event__is_paidpayment_status)payment_proof__isnullz%Please upload your payment proof for z to complete your registration.registration_idz!registration/payment_options.html)registrationr   r   zE. You can select a different event below to update your registration.zd! As an existing ICTAZ member, you can select any training event below without payment requirements.z;Registration code not found. Please register as a new user.r7   zregistration/verify_code.htmlr!   )methodr   r8   is_validcleaned_datar   r#   r$   r+   AttendanceRegisteredUserr)   email	full_namestatusr@   saver(   r   r*   r   successr   excluder,   r-   warningstridr.   errorr   )r/   r!   r   existing_registrationsexisting_registrationexisting_attendance_user
user_emailr1   r2   r0   pending_payment_registration
event_namer4   r5   r5   r6   verify_code3   s   









frX   c                 C   s,  t t|d}| jdkrt| j}| r|jdd}||_tj	j
|jd}| r^| }|j
|d rAt| d|j d n| j}t| d|j d	|j d
 t| d||dS |  t|j| jd< |jrttd|jdS d|_|  t| t| d tdS nt }t| d||dS )z+
    Handle registration for new users
    pkr8   FcommitrH   r,   You are already registered for z with this email address.z$. Please use your registration code z to manage your registration.zregistration/register.html)r!   r,   rB   upload_paymentrB   r=   zRegistration successful!registration_success)r   r   rD   r   r8   rE   rK   r,   r   r#   r$   rH   existsr+   r   rQ   r-   r   r   rO   rP   r)   is_paidr   rJ   send_registration_emailrL   )r/   event_idr,   r!   rC   rR   r3   existing_eventr5   r5   r6   register_new_user   sH   



0rh   c                 C   s   t t|d}d| jvs| jd |krt| d tdS | jdkrit| j| j	}|
 rhztjj|d}|  W n
 tjyC   Y nw |jdd}||_|  d	|_|  t|d
d t| d tdS nt }t| d|||jt dS )z%
    Handle payment proof upload
    rY   rB   z1Invalid session. Please start registration again.r7   r8   )rC   Fr[   r>   T)payment_pendingz]Your payment proof has been updated and submitted. An administrator will review your payment.rb   z registration/upload_payment.html)r!   rC   r,   bank_details)r   r   r)   r   rQ   r   rD   r   r8   FILESrE   r   r#   r(   deleteDoesNotExistrK   rC   r@   re   rL   r   r,   get_bank_details)r/   rB   rC   r!   existing_proofpayment_proofr5   r5   r6   r`      s:   
r`   c              	   C   s  | j dks
d| jvrtdS t| j}| jd}| jdd}|rKd| jvs,d| jvrKtjj|d	 }|rD|j
| jd< |j| jd< nd}d| jd< | r|jd	 }|r| jd}| jd}tjj|d
	 }|st|||d|d}	|jr~d|	_nd|	_|	  t|	j| jd< t| d|j d tdS ntjj|d	 }|st| d tdS |j
}|j}tjj|d
}
|
j|d r~|
j|d}|rd|_d|_|  t|j| jd< t| d|j d tdS |jrOz|j}d}W n ty   d}Y nw |s&t| d|j d t|j| jd< td|jdS |rN|jdkrNt| d|j d t|j| jd< t| d||dt dS n|jrh|rhd|_d|_|  t|j| jd< t| d|j d |rztdS tdS |
j |d}| rV|	 }| jddkrE||_!|jr|s|j!jrnd|_n|jr|rd|_d|_nd|_d|_|  t| d |j d |jr#|s#z|j}d}W n ty   d}Y nw |st| d!|j d t|j| jd< td|jdS |r"|jdkr"t|j| jd< t| d||dt dS n|jr0|r0d|_d|_|  t|j| jd< d| jd"< tdS |j!j}t| d#||j||jd$S z't||||dd%}	|jrk|skd|	_n|jrx|rxd|	_d|	_|	  W n( ty   t|||dd&}	|jr|rd|	_n|jrd|	_|	  Y nw t|	j| jd< t"|	 t| d'|j d( tdS t| d)||d*S )+z3
    Handle event selection for existing users
    r8   r   r7   r:   Fr;   r<   r   r,   r]   r=   )rI   rH   r   rJ   r,   not_requiredrB   z*You have been successfully registered for .rb   zARegistration code no longer valid. Please register as a new user.r^   r_   Tz%You need to upload payment proof for r`   ra   r>   zYour payment proof for z, has been uploaded and is awaiting approval.z&registration/update_payment_proof.html)rC   r,   has_existing_proofrj   confirm_updateyesz&Your registration has been updated to z Please upload payment proof for is_registration_updatez registration/confirm_update.html)r4   	new_eventr   rf   )rI   rH   r,   r   rJ   )rI   rH   r,   rJ   zSuccessfully registered for !r   r    )#rD   r)   r   r   r8   r(   rG   r#   r$   r+   rH   rI   rE   rF   r   rd   r@   rK   rO   rP   r   rL   r-   rQ   rc   rJ   r.   rp   	ExceptionrN   r   rn   rM   r,   re   )r/   r!   r   r:   attendance_userselected_eventrU   user_fullnamerS   new_registrationall_user_registrationsexisting_event_regrp   has_payment_proofother_eventsother_eventother_event_namer5   r5   r6   process_event_selection  sJ  



	


	r   c                 C   s   | j d}| j dd}|rktjj|d }|r-tdd t| D s-t	| d n|sFtdd t| D sFt	| d	|j
 d
 d| j v rO| j d= d| j v rX| j d= d| j v ra| j d= d| j v rj| j d= nd}t| dd|iS )z1
    Display success page after registration
    rB   rv   FrY   c                 s       | ]}|j d kV  qdS rL   Ntags.0mr5   r5   r6   	<genexpr>4      z'registration_success.<locals>.<genexpr>z0Your registration has been updated successfully.c                 s   r   r   r   r   r5   r5   r6   r   6  r   z3Registration successful! Your registration code is rr   r   r9   Nzregistration/success.htmlrC   )r)   r(   r   r#   r$   r+   anyr   r*   rL   r   r   )r/   rB   	is_updaterC   r5   r5   r6   rb   )  s*   



rb   c              
   C   s8   t jjdt dddddddd	d
}tt|ddS )z7
    API endpoint to get the list of active events
    Tr   rP   r-   event_type__namer   end_datelocationrd   amountF)safe)r   r#   r$   r   r%   valuesr   list)r/   r"   r5   r5   r6   event_list_apiI  s   r   Fc              
   C   s   d| j j }| | j |d}z%td|}td|}t||tj| jg|dd}td| j d|  W d	S  tyS } ztd
| j dt	|  W Y d}~dS d}~ww )z.
    Send registration confirmation email
    zICTAZ Event Registration: )rC   r,   ri   z$registration/email/confirmation.htmlz#registration/email/confirmation.txtF)subjectmessage
from_emailrecipient_listhtml_messagefail_silentlyzEmail sent to z - Result: TzError sending email to z: N)
r,   r-   r
   r	   r   DEFAULT_FROM_EMAILrH   printry   rO   )rC   ri   r   context
email_html
email_textresulter5   r5   r6   re   V  s.   

re   c                   C   s   dddddddS )z)
    Return bank details for payment
    zABSA BANK ZAMBIA PLCzCHINGOLA BRANCH	032268749z?Information And Communications Technology Association of ZambiaBARCZMLX020303)	bank_namebranchaccount_numberbeneficiary
swift_code	sort_coder5   r5   r5   r5   r6   rn   w  s   rn   )F))django.shortcutsr   r   r   django.httpr   r   django.urlsr   django.contribr   django.core.mailr	   django.template.loaderr
   django.confr   django.utilsr   jsonmodelsr   r   r   attendance.modelsr   rG   formsr   r   r   r   r7   rX   rh   r`   r   rb   r   re   rn   r5   r5   r5   r6   <module>   s0    #q@0   
!