o
    [h                     @   sd   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
m
Z
 d dlmZ G dd deZd	S )
    )BaseCommand)transaction)Event	EventType)FeedbackFeedbackConfiguration)datetime)timezonec                   @   s    e Zd ZdZdd Zdd ZdS )Commandz2Migrate existing feedback to be linked with eventsc                 C   s6   |j dddd |j dtddd |j d	dd
d d S )Nz--create-legacy-event
store_truez6Create a "Legacy Feedback" event for unlinked feedback)actionhelpz--event-namezLegacy Feedback Collectionz?Name for the legacy event (default: Legacy Feedback Collection))typedefaultr   z	--dry-runz.Show what would be done without making changes)add_argumentstr)selfparser r   S/var/www/html/smartRegister/feedback/management/commands/migrate_legacy_feedback.pyadd_arguments   s    
zCommand.add_argumentsc                 O   s  |d }|d }|d }t jjdd}| }| jd| d |dkr1| j| jd	 d S |rn| j| jd
 |j	ddd
 }|D ]}	|j|	d }
| jd|	 d|
 d qH|rl| jd| d d S t  |rtjjdddid\}}tjj||dt tjdd t tjdd ddddd\}}|j|d}| j| jd| d| d nUd}g }|D ](}|jrtjj|jd  }|r||_|  |d!7 }q|| q|| q| j| jd"| d# |r| j| jt| d$ | jd% W d    n	1 sw   Y  t jjdd }| jd&|  |dkrC| j| jd' d S d S )(Ndry_runcreate_legacy_event
event_nameT)event__isnullzFound z% feedback entries without event linksr   z1No unlinked feedback found. Migration not needed.z&DRY RUN MODE - No changes will be made)flat)r   z  - 'z': z feedback entrieszWould create legacy event: ''Legacydescriptionz%Legacy events for historical feedback)namedefaultsz1Legacy event created to archive existing feedbackim  )daysil  VariousF)
event_typer   
start_dateend_datelocationis_paid	is_active)eventzCreated legacy event 'z' and linked )name__icontains   zMatched z$ feedback entries to existing eventsz9 feedback entries could not be matched to existing eventsz;Consider running with --create-legacy-event to handle thesezRemaining unlinked feedback: z%All feedback is now linked to events!)r   objectsfiltercountstdoutwritestyleSUCCESSWARNINGvalues_listdistinctr   atomicr   get_or_creater   r	   now	timedeltaupdater   firstr)   saveappendlen)r   argsoptionsr   r   r   unlinked_feedbackunlinked_countevent_namesr   r.   legacy_typecreatedlegacy_eventupdated_countmatched_countunmatched_feedbackfeedbackexisting_eventremaining_unlinkedr   r   r   handle   s   



A
zCommand.handleN)__name__
__module____qualname__r   r   rM   r   r   r   r   r
   	   s    r
   N)django.core.management.baser   	django.dbr   registration.modelsr   r   feedback.modelsr   r   r   django.utilsr	   r
   r   r   r   r   <module>   s    