o
    hZ                     @   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Zd d	lmZ d
dlmZmZ edd Zedd Zeedd Zedd Zedd ZdS )    )renderredirectget_object_or_404)JsonResponseHttpResponse)messages)timezone)Count)csrf_exempt)login_requiredN)datetime   )RegisteredUser
Attendancec                 C   s   t jjdd  tj jdd d t j D ]}|jr+d|j_|j	|j_
|j  qddlm} |j }tjjdd }|dkrFdn|| d }dd	lm} |jjdd
d}| }g }	ddlm} |D ]O}
|
j }|jj|
d }d}t jj|d}| st jj|d}| }|dkrdn|| d }|	|
j|
jt|
dr|
j nd ||t|dd qj|	s|dkrtjd }|D ]4}
|
d }tjj|d }tjj|dd }|dkrdn|| d }|	d |d ||t|dd q||t|d||	d}t| d|S )NT)user__isnullF)has_attended	timestampr   Registration)r   d   Event	is_activename)event
event_name)event_name__iexact
start_dater   )idr   date
registeredattended
percentager   )r   r   )total_registeredtotal_attendedattendance_percentagetotal_eventsevent_statszattendance/dashboard.html)r   objectsfilterdeleter   allupdateuserr   check_in_timer   saveregistration.modelsr   countr   order_byr   stripexistsappendr    hasattrr   r!   roundvaluesdistinctr   )request
attendancer   r%   r&   r'   RegistrationEventeventsr(   r)   r   r   r"   r#   attendancesr$   legacy_eventscontext rC   //var/www/html/smartRegister/attendance/views.py	dashboard   sp   






rE   c                 C   sZ  | j dd}| j dd}| j dd}ddlm} |rm|jj|d}tjj|d}td	d
 |D }g }|D ]1}	|	j|v }
|dkrF|
sFq8|dkrM|
rMq8|	|	j|	j
|	j|	jjt|	ddt|	dd|
|	jd q8|}nN|j d}tj }tdd
 |D }g }|D ]1}	|	j|v }
|dkr|
sq|dkr|
rq|	|	j|	j
|	j|	jjt|	ddt|	dd|
|	jd q|}|rg }|D ]%}| |d  v s| |d  v s| |d  v r|	| q|}ddlm} ddlm} | jjrt|jjddjdddd}n|jj| jddd}dd |D }|||||d }t| d!|S )"Nr    r=   searchr   r   event__namer   c                 s       | ]
}|j r|j jV  qd S Nr/   registration_code.0arC   rC   rD   	<genexpr>       z"attendance_list.<locals>.<genexpr>r#   not_attendedorganisationpayment_statusNot Required)rM   	full_nameemailr   rT   rU   r   r   c                 s   rJ   rK   rL   rN   rC   rC   rD   rQ      rR   rW   rM   rX   r   RegistrationEventAssignmentr   Tr   r   )flatr/   r   registration_eventc                 S   s   g | ]
}|j jr|j jqS rC   )r]   r   r   rO   
assignmentrC   rC   rD   
<listcomp>   s    z#attendance_list.<locals>.<listcomp>)usersr?   event_filterattendance_filtersearch_queryzattendance/attendance_list.html)GETgetr2   r   r*   r+   r   setrM   r7   rW   rX   r   r   getattrregistered_atr-   select_relatedlowermodelsrZ   r   r/   is_superuserlistvalues_listr4   r   )r<   rb   rc   rd   r   registrationsr@   attended_codes
users_dataregr   ra   filtered_usersr/   rZ   r>   r?   assignmentsrB   rC   rC   rD   attendance_listn   s   










$rv   c                 C   s  | j dkro| jdd}| jdd}| jdd}|r<|s<ddlm} z|jj|d}|j}W n
 |jy;   Y nw |r@|sGtd	d
dS d }d }z	t	jj|d}W n
 t	jy^   Y nw ddlm
} z|jj||dddgd}W n
 |jy}   Y nw |s|std	ddS |r|}	d}
|	j|	j|	j|t|	ddt|	dddd}n|}	d}
|	j|	j|	j||	jj d|	 dd}|
dkrtjj|	|d }nt	jj|d }|rtjj||d }n|	j}|rtddd|dS |
dkrtjj|	|t d }|	jsd|	_t |	_|	  nUt	jj||	j|	j|d|	jj dd!|	jj |	jjr0|	jjnd"|	 d	t d#
d$\}}tjj||t d }d|	_t |	_|	  |jsfd|_t |_|  tdd	d%|dS td	d&dS )'NPOSTrM   rF   r   event_idr   r   r    Fz-Registration code and event name are required)successmessage)rM   r   approvednot_required)rM   rI   statuspayment_status__inz:Registration code not found or not approved for attendancer=   package_namezN/ArU   zAttendance Module)rW   rX   rM   r   r   rU   sourceregistrationz RegistrationzRegistration Module)r/   r   )user__registration_coder   Tz(User has already been marked as attended)rz   already_attendedr{   r/   )r/   r   r0   zRegistration for g        )
rW   rX   r   r~   r   package_descriptionactivity_pricerU   r   r   )rM   defaultsz Attendance recorded successfullyzInvalid request method)methodrw   rf   r2   r   r*   r   DoesNotExistr   r   r   rW   rX   rM   rh   r   get_payment_status_displayr   r+   r6   r   creater   nowr   r1   get_or_createamountattendance_timestamp)r<   rM   r   rx   r>   r   attendance_userregistration_userr   r/   user_source	user_datar   registered_user_existsr=   registered_usercreatedrC   rC   rD   scan_barcode   s   









r   c                 C   s   g }d }d}g }ddl m} ddlm} | jjrD| jjsD|jj| jdd	d}|
 rDdd	 |D }t|dkr@|d }d
}n|}d}| jjrU|rU|jjddd}n
|s_| jjr_g }d
}| jd}|r|rz|jj|d}	|	|v rw|	}W n
 |jy   Y nw ||||d}
t| d|
S )NTr   rY   r   r   r\   r]   c                 S   s   g | ]}|j qS rC   )r]   r^   rC   rC   rD   r`     s    zscanner.<locals>.<listcomp>Fr   r   rx   ry   )r?   assigned_eventsassigned_eventshow_dropdownzattendance/scanner.html)rl   rZ   r2   r   r/   is_authenticatedrm   r*   r+   rj   r6   lenr4   is_staffre   rf   r   r   )r<   r   r   r   r?   rZ   r>   ru   rx   selected_eventrB   rC   rC   rD   scanner  sR   r   c                 C   s  | j dd}| j dd}d}|r;ddlm} z|jj|d}|j}d|jd	d
  }W n
 |jy:   Y nw |rJ|sJd|d	d
  }g }ddlm	} |r|jj
|d}tjj
|d}	tdd |	D }
|D ]=}|j|
v }d }|	D ]}|jr|jj|jkr|} nqx||j|j|j|jjt|ddt|dd||r|jn|jd qmnV|j d}tj }	tdd |	D }
|D ]=}|j|
v }d }|	D ]}|jr|jj|jkr|} nq||j|j|j|jjt|ddt|dd||r|jn|jd qtdd}d| d|d< t|}|g d |D ]/}||d |d |d |d |d |d |d r:d nd!|d" rG|d" d#ndg q|S )$Nr   rF   rx   attendance_exportr   r   ry   attendance_ _r   rH   r   c                 s   rJ   rK   rL   rN   rC   rC   rD   rQ     rR   z(export_attendance_csv.<locals>.<genexpr>rT   rU   rV   )rM   rW   rX   r   rT   rU   r#   r   c                 s   rJ   rK   rL   rN   rC   rC   rD   rQ     rR   ztext/csv)content_typezattachment; filename="z.csv"zContent-Disposition)zRegistration Codez	Full NameEmailr   OrganisationzPayment StatusAttended	TimestamprM   rW   rX   r   r#   YesNor   z%Y-%m-%d %H:%M:%S)re   rf   r2   r   r*   r   replacerk   r   r   r+   r   rg   rM   r/   r7   rW   rX   r   rh   r0   ri   r-   rj   r   csvwriterwriterowstrftime)r<   rb   rx   filenamer>   r   rr   r   rp   r@   rq   rs   r   attendance_recordattresponser   datarC   rC   rD   export_attendance_csv  s   











r   )django.shortcutsr   r   r   django.httpr   r   django.contribr   django.utilsr   django.db.modelsr	   django.views.decorators.csrfr
   django.contrib.auth.decoratorsr   r   r   rl   r   r   rE   rv   r   r   r   rC   rC   rC   rD   <module>   s,    
`
m "
=