o
    fsi                     @   s   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	 d dl
mZ d dlZd dlZdd	lmZmZmZ d d
lmZ eeG dd dejZeeG dd dejZeeG dd dejZdS )    )admin)format_html)renderredirect)path)messages)HttpResponseN   )RegisteredMemberAttendanceRecordScannerAssignment)Eventc                       st   e Zd Zg dZg dZg dZddgZdgZ fddZd fd
d	Z	dd Z
dd Zde_dd Zde_  ZS )RegisteredMemberAdmin)	full_nameregistration_codeemailevent_categorypackage_namepayment_statusattendance_status
created_at)r   statusr   )r   r   r   r   
updated_atexport_as_csvc                    s,   t   }td| j| jddg}|| S )Nzimport-csv/&attendance_registeredmember_import_csv)name)superget_urlsr   
admin_site
admin_view
import_csv)selfurlscustom_urls	__class__ </var/www/html/smartRegister/backend/apps/attendance/admin.pyr      s   
zRegisteredMemberAdmin.get_urlsNc                    s    |pi }d|d< t  j||dS )NTshow_import_csv)extra_context)r   changelist_view)r!   requestr)   r$   r&   r'   r*      s   z%RegisteredMemberAdmin.changelist_viewc                 C   sL  |j dkr|jd}|st|d tdS d }|jd}|rGztjj	j
jddjj|d}W n tyF   t|d	 td Y S w z| d
}tt|}d}d}g }	t|ddD ]g\}
}|dd }|s{|	d|
 d qc|dd |dd |dd |dd |dd |dd |ddpdd}|r||d< tjj||d\}}|r|d7 }qc|d7 }qct|d| d | d! |	r|	d d" D ]}t|| qtdW S  ty } zt|d#t|  tdW  Y d }~S d }~ww dd$lm} |j d%}t |d&d'|iS )(NPOSTcsv_filezPlease select a CSV file.z..event_category_ideventsEventCategory)idz"Selected event category not found.z	utf-8-sigr      )startRegistration Code zRow z%: Missing registration code, skipped.Email	Full NameStatusapprovedPayment StatuspaidPackage NamePackage DescriptionActivity Price)r   r   r   r   r   package_descriptionactivity_pricer   )r   defaultsr	   zImport complete. z
 created, z	 updated.
   zError processing CSV: )r0   r   z1admin/attendance/registeredmember/import_csv.html
categories)!methodFILESgetr   errorr   r,   r   objectsmodel_metaapps	get_model	Exceptionreaddecodecsv
DictReaderioStringIO	enumeratestripappendr
   update_or_createsuccesswarningstrapps.events.modelsr0   allorder_byr   )r!   r+   r-   r   category_iddecodedreadercreated_countupdated_counterrorsirowreg_coderA   _createderrer0   rC   r&   r&   r'   r    !   sn   "	



z RegisteredMemberAdmin.import_csvc                 C   s   | j j}tdd}d|j d|d< t|}|g d |D ]}||j|j|j	|j
r1|j
jnd|j|j|j|j|jg	 q |S )Nztext/csv)content_typezattachment; filename=z.csvzContent-Disposition)	r4   r7   r6   zEvent Categoryr8   r:   r<   r=   r>   r5   )rI   rJ   r   verbose_name_pluralrP   writerwriterowr   r   r   r   r   r   r   r   r?   r@   )r!   r+   querysetmetaresponserm   objr&   r&   r'   r   b   s   

z#RegisteredMemberAdmin.export_as_csvzExport selected as CSVc                 C   sz   t |jjddd}|stdS h d|rtdS ddh|r&td	S dd
h|r1tdS d|v r9tdS tdS )N	scan_typeT)flatu1   <span style="color:gray;">— Not attended</span>>   SESSIONCHECK_IN	CHECK_OUTu5   <span style="color:#059669;">✓ Verified Full</span>rv   rw   u7   <span style="color:#16a34a;">✓ Full Attendance</span>ru   z-<span style="color:#2563eb;">~ Partial</span>z-<span style="color:#d97706;">~ Briefly</span>)setattendance_recordsvalues_listr   issubset)r!   rr   scansr&   r&   r'   r   r   s   z'RegisteredMemberAdmin.attendance_status
Attendance)N)__name__
__module____qualname__list_displaylist_filtersearch_fieldsreadonly_fieldsactionsr   r*   r    r   short_descriptionr   __classcell__r&   r&   r$   r'   r      s    Ar   c                   @   s*   e Zd Zg dZddgZddgZdgZdS )AttendanceRecordAdmin)membereventrs   	scan_timerecorded_byr   rs   member__full_namemember__registration_coder   N)r~   r   r   r   r   r   r   r&   r&   r&   r'   r      s
    
r   c                   @   s$   e Zd Zg dZddgZddgZdS )ScannerAssignmentAdmin)userr   	is_activeassigned_atr   r   user__usernameevent__nameN)r~   r   r   r   r   r   r&   r&   r&   r'   r      s    r   )django.contribr   django.utils.htmlr   django.shortcutsr   r   django.urlsr   r   django.httpr   rP   rR   modelsr
   r   r   r[   r   register
ModelAdminr   r   r   r&   r&   r&   r'   <module>   s     t