o
    [h(                     @   s|   d dl mZ d dlmZ d dlmZ d dl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dS )    )models)timezone)RegisteredUser)Eventc                   @   sV   e Zd ZejdddZejdddZejddZ	ej
ddZG dd dZd	d
 ZdS )FeedbackCategoryd   T
max_lengthuniqueblanknulldefaultauto_now_addc                   @   s   e Zd ZdZdgZdS )zFeedbackCategory.MetazFeedback CategoriesnameN)__name__
__module____qualname__verbose_name_pluralordering r   r   ./var/www/html/smartRegister/feedback/models.pyMeta   s    
r   c                 C      | j S Nr   selfr   r   r   __str__      zFeedbackCategory.__str__N)r   r   r   r   	CharFieldr   	TextFielddescriptionBooleanField	is_activeDateTimeField
created_atr   r    r   r   r   r   r      s    r   c                   @   sH   e Zd ZejdddZejddZejddZ	dd Z
G d	d
 d
ZdS )FeedbackTag2   Tr      r   r   c                 C   r   r   r   r   r   r   r   r       r!   zFeedbackTag.__str__c                   @   s   e Zd ZdgZdS )zFeedbackTag.Metaz-countN)r   r   r   r   r   r   r   r   r      s    
r   N)r   r   r   r   r"   r   PositiveIntegerFieldcountr'   r(   r    r   r   r   r   r   r)      s    r)   c                       s  e Zd ZdZejeejdddZej	ddddZ
ejdddZej	ddddZejdd	Zejeejd
dddZej	ddddZejeejdddZejeddZe ZejeddZejdddZeje j!d	Z"ejdd	Z#dd Z$dd Z%e&dd Z' fddZ(G dd dZ)  Z*S )Feedback))r+   z1 - Very Poor)   z2 - Poor)   z3 - Average)   z4 - Good)   z5 - ExcellentT)	on_deleter   r      )r	   r   r   r   r   Fr   	feedbacks)r3   related_namer   r   r0   )choicesr   )r   c                 C   sX   |   rd|    nd}| jrd| jj | S | jr$d| j | S d| j | S )Nz for  zFeedback from zAnonymous Feedback #)get_event_nameregistered_user	full_namer   id)r   
event_infor   r   r   r    =   s   zFeedback.__str__c                 C   s   | j r| j jS | jr| jS dS )zLGet event name, preferring the linked event over the legacy event_name fieldzLegacy Feedback)eventr   
event_namer   r   r   r   r9   F   s
   zFeedback.get_event_namec                 C   s   | j r| j S dS )z*Property to get event for display purposesN)r>   r   r   r   r   display_eventO   s   zFeedback.display_eventc                    s   | j sO| jrOztjj| jd}|| _ | js|j| _W n4 tjyN   zddlm} |jj| jd}| j	s8|j	| _	| js@|j	j
| _W n
 |jyK   Y nw Y nw | j	rZ| jsZ| j	j
| _t j|i | d S )N)registration_coder   )Registration)r:   rA   r   objectsgetr?   DoesNotExistregistration.modelsrB   r>   r   supersave)r   argskwargsuserrB   registration	__class__r   r   rH   T   s0   

zFeedback.savec                   @   s2   e Zd ZdgZejddgdejddgdgZdS )zFeedback.Metaz-created_atr>   r(   )fieldsr?   N)r   r   r   r   r   Indexindexesr   r   r   r   r   o   s
    r   )+r   r   r   RATING_CHOICESr   
ForeignKeyr   SET_NULLr:   r"   r   
EmailFieldemailrA   r%   is_anonymousr   CASCADEr>   r?   r   categoryPositiveSmallIntegerFieldratingr#   commentManyToManyFieldr)   tagsGenericIPAddressField
ip_addressr'   r   nowr(   is_publishedr    r9   propertyr@   rH   r   __classcell__r   r   rM   r   r.      s,    			
r.   c                   @   s  e Zd ZdZdZedfedfgZejdeeddZej	e
ejddd	d
dZeje
ddddZejddZejdddZejdddZejdddZejdddZejddZejddZG dd dZdd Zedd  Zd!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+S ),FeedbackConfigurationsinglemultizSingle Active Eventz$Multiple Active Events (User Choice)
   zEChoose whether to allow single or multiple active events for feedback)r	   r7   r   	help_textTfeedback_config_singlezFPrimary active event (used in single mode or as default in multi mode))r3   r   r   r6   ri   feedback_config_multiz8Multiple events that can receive feedback simultaneously)r   r6   ri   r   FzCAutomatically enable events happening today for feedback collection)r   ri   zJWelcome to our feedback system! Your input helps us improve future events.z+Message shown to users on the feedback formz:Thank you for your feedback! Your input is valuable to us.z2Message shown after successful feedback submissionzCFeedback collection is currently disabled. Please check back later.z'Message shown when feedback is disabledr   )auto_nowc                   @   s   e Zd ZdZdZdS )zFeedbackConfiguration.MetazFeedback ConfigurationzFeedback ConfigurationsN)r   r   r   verbose_namer   r   r   r   r   r      s    r   c                 C   s:   | j | jkr| j }d| dS | jrd| jj S dS )NzMulti-Event Config (z active events)zSingle Event Config: z(Feedback Configuration (No active event))event_selection_modeMULTI_EVENTactive_eventsr-   active_eventr   )r   r-   r   r   r   r       s   
zFeedbackConfiguration.__str__c                 C   s.   | j jdd| jdd\}}|jr|  |S )z/Get or create the active feedback configurationr+   T)feedback_enabledrn   )r<   defaults)rC   get_or_createSINGLE_EVENTauto_enable_eventsauto_enable_todays_events)clsconfigcreatedr   r   r   get_active_config   s   
	z'FeedbackConfiguration.get_active_configc                 C   sl   | j sg S | j| jkr)t| jjdd}| jr'| jjr'| j|vr'|d| j |S | jr4| jjr4| jgS g S )z?Get list of events available for feedback based on current modeT)r&   r   )	rr   rn   ro   listrp   filterrq   r&   insert)r   eventsr   r   r   get_available_events   s   z*FeedbackConfiguration.get_available_eventsc                 C   s    | j r|jsdS |  }||v S )z0Check if a specific event is active for feedbackF)rr   r&   r   )r   r>   available_eventsr   r   r   is_event_active   s   z%FeedbackConfiguration.is_event_activec                 C   sn   | j sdS t  }tjj|dd}| j| jkr&|D ]}| j	
| qdS | }|r5|| _|   dS dS )z+Automatically enable events happening todayNT)start_date__dater&   )rv   r   ra   dater   rC   r}   rn   ro   rp   addfirstrq   rH   )r   todaytodays_eventsr>   first_eventr   r   r   rw      s    z/FeedbackConfiguration.auto_enable_todays_eventsc                 C   s.   | j | jkr|| _|   dS | j| dS )zFAdd an event to active events (switches to multi-event mode if needed)N)rn   ru   rq   rH   rp   r   r   r>   r   r   r   add_active_event  s   z&FeedbackConfiguration.add_active_eventc                 C   s8   | j | jkr| j| | j|krd| _|   dS dS )z"Remove an event from active eventsN)rn   ro   rp   removerq   rH   r   r   r   r   remove_active_event  s   
z)FeedbackConfiguration.remove_active_eventN)"r   r   r   ru   ro   EVENT_SELECTION_CHOICESr   r"   rn   rS   r   rT   rq   r]   rp   r%   rr   rv   r#   welcome_messagethank_you_messagedisabled_messager'   r(   
updated_atr   r    classmethodr{   r   r   rw   r   r   r   r   r   r   re   v   sl    
	

re   N)	django.dbr   django.utilsr   attendance.modelsr   rF   r   Modelr   r)   r.   re   r   r   r   r   <module>   s    X