o
    h/                     @   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Zd dl	Z	d dl
Z
d dlmZ d dlmZ dd	lmZmZmZmZmZ G d
d dejZG dd dejZG dd dejZG dd dejZG dd dejZejee ejee ejee ejee ejee dS )    )admin)path)renderredirect)messagesN)timezone)User   )RegisteredUser
AttendanceEventEventAssignmentRegistrationEventAssignmentc                       sB   e Zd ZdZdZdZdZdZ fddZdd	d
Z	dd Z
  ZS )RegisteredUserAdmin)registration_code	full_nameemail
event_namepayment_statushas_attended	timestamp)r   r   r   )r   r   r   )r   z%admin/registered_user_changelist.htmlc                    s$   t   }td| jddg}|| S )Nzupload-csv/
upload_csv)name)superget_urlsr   r   )selfurlsmy_urls	__class__ //var/www/html/smartRegister/attendance/admin.pyr      s   
zRegisteredUserAdmin.get_urls c                 C   s   ||  | |dd|dd  g}|D ]}||v r'|| r'||   S q| D ]}|  dddd|  krD||   S q,|S )N_ -)lowerupperreplacekeys)r   row
field_namedefault
variationsvarkeyr    r    r!   get_field_value   s   
 z#RegisteredUserAdmin.get_field_valuec                 C   sD  |j dkr|jd}|s| j|dtjd tdS |jds.| j|dtjd tdS zH|	 
d}t|}t|}|jrNd	d
 |jD |_n| j|dtjd tdW S d}d}t|}|st| j|dtjd tdW S |D ]}	| |	d}
|
s| j|d|	 tjd qvzw| |	d}| |	d}| |	d}| |	d}| |	d}| |	d}| |	d}| |	dd}zt|}W n ty   d}| j|d| d|
 tjd Y nw tjj|
d }|r|d7 }ntjj|
||||||||d	}|d7 }W qv ty( } z| j|d|
 d t| tjd W Y d }~qvd }~ww |dkrD|dkrD| j|d!| d"| d#tjd n/|dkrW| j|d!| d$tjd n|dkrj| j|d%| d&tjd n	| j|d'tjd tdW S  ty } z| j|d(t| tjd tdW  Y d }~S d }~ww t|d)S )*NPOSTcsv_filezNo file uploaded)levelz..z.csvzFile is not a CSVzutf-8c                 S   s   g | ]
}|  d dqS )u   ﻿r"   )stripr(   ).0fnr    r    r!   
<listcomp>F   s    z2RegisteredUserAdmin.upload_csv.<locals>.<listcomp>z Warning: No columns found in CSVr   z"Warning: CSV file has no data rowsRegistration_Codez*Skipping row, no registration code found: Email	Full_Name
Event_NameStatusPayment_StatusPackage_NamePackage_DescriptionActivity_Price0g        z"Warning: Could not convert price "z" to number for )r   r	   )	r   r   r   r   statusr   package_namepackage_descriptionactivity_pricezError processing row with code z: zCSV upload complete: z new users created, z existing users skippedz new users createdzCSV upload complete: All z+ users already exist (no new users created)z'CSV upload complete: No users processedzError processing CSV: zadmin/csv_upload.html)methodFILESgetmessage_userr   ERRORr   r   endswithreaddecodeioStringIOcsv
DictReader
fieldnamesWARNINGlistr0   float
ValueErrorr
   objectsfilterfirstcreate	ExceptionstrSUCCESSINFOr   )r   requestr2   	file_datacsv_datareader	new_countskipped_count	rows_listr*   r   r   r   r   rB   r   rC   rD   activity_price_strrE   existing_useruser	row_errorer    r    r!   r   0   s   




	






zRegisteredUserAdmin.upload_csv)r"   )__name__
__module____qualname__list_displaylist_filtersearch_fieldsreadonly_fieldschange_list_templater   r0   r   __classcell__r    r    r   r!   r      s    
r   c                   @      e Zd ZdZdZdZdZdS )AttendanceAdmin)rh   r   check_in_time)r   rv   )user__full_nameuser__registration_coder   rv   Nrk   rl   rm   rn   ro   rp   date_hierarchyr    r    r    r!   ru      
    ru   c                   @   rt   )
EventAdmin)r   date	is_active
created_at)r~   r}   )r   descriptionr}   Nry   r    r    r    r!   r|      r{   r|   c                       sP   e Zd ZdZdZdZdZddgZ fddZdd
dZ	dddZ
dd Z  ZS )EventAssignmentAdmin)rh   eventassigned_at)r   r   )user__usernameevent__namer   rh   r   c                    *   |j jr
t |S t |j|j dS N)rh   rh   is_superuserr   get_querysetrX   r   r_   r   r    r!   r         z!EventAssignmentAdmin.get_querysetNc                 C      |j jS Nrh   r   r   r_   objr    r    r!   has_change_permission      z*EventAssignmentAdmin.has_change_permissionc                 C   r   r   r   r   r    r    r!   has_delete_permission   r   z*EventAssignmentAdmin.has_delete_permissionc                 C   r   r   r   r   r    r    r!   has_add_permission   r   z'EventAssignmentAdmin.has_add_permissionr   )rk   rl   rm   rn   ro   rp   rz   autocomplete_fieldsr   r   r   r   rs   r    r    r   r!   r      s    

r   c                       sZ   e Zd ZdZdZdZdZdgZ fddZdd	d
Z	dddZ
dd Z fddZ  ZS ) RegistrationEventAssignmentAdmin)rh   registration_eventr   r~   )r   r~   r   )r   user__first_nameuser__last_nameregistration_event__namer   rh   c                    r   r   r   r   r   r    r!   r      r   z-RegistrationEventAssignmentAdmin.get_querysetNc                 C   r   r   r   r   r    r    r!   r      r   z6RegistrationEventAssignmentAdmin.has_change_permissionc                 C   r   r   r   r   r    r    r!   r      r   z6RegistrationEventAssignmentAdmin.has_delete_permissionc                 C   r   r   r   r   r    r    r!   r      r   z3RegistrationEventAssignmentAdmin.has_add_permissionc                    s>   |j dkrddlm} |jjdd|d< t j||fi |S )Nr   r   )r   T)r~   queryset)r   registration.modelsr   rW   rX   r   formfield_for_foreignkey)r   db_fieldr_   kwargsRegistrationEventr   r    r!   r     s   
z9RegistrationEventAssignmentAdmin.formfield_for_foreignkeyr   )rk   rl   rm   rn   ro   rp   rz   r   r   r   r   r   r   rs   r    r    r   r!   r      s    

r   )django.contribr   django.urlsr   django.shortcutsr   r   r   rP   rN   	tracebackdjango.utilsr   django.contrib.auth.modelsr   modelsr
   r   r   r   r   
ModelAdminr   ru   r|   r   r   siteregisterr    r    r    r!   <module>   s*     2"