B
    bX                 @   s   d dl Z d dlZd dl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mZmZ dd	d
dZG dd deZdd ZdS )    N)	ModelFormValidationError)models)gettext_lazy)forms)widgets)AttShiftAttRuleShiftDetail         )r   r      c                   sv   e Zd Ze Ze ZejedddZ	G dd dZ
 fddZdd	 Z fd
dZd fdd	Zdd Z  ZS )AttShiftCreationFormZattShift_field_autoShiftF)labelrequiredc               @   s    e Zd ZeZdZddddgZdS )zAttShiftCreationForm.Meta__all__Zwork_weekendZweekend_typeZwork_day_offZday_off_typeN)__name__
__module____qualname__r   ZmodelfieldsZexclude r   r   8G:\easytimepro\master/mysite/att\forms\attshift_forms.pyMeta   s   r   c                s  t t| j|| | jrtjj| jddddddd}g }t	| jj
 }xDt| jjD ]4}d|d i}xt|D ]}d||< qvW || q\W i }	i }
xt|tdD ]\}}|| }|| }t|}|rf|d	 dd	rfi }|d	 d |d< d
|d< d|d< |d	 d |d< |d	| ddd |D |	|< |rddd |D || |< qddd |D |	|< |rddd |D || |< qW t|	| jd _t|| jd _d S )N)shift	day_indextime_interval_idtime_interval__aliasweekend_daycycler    r   wzWeek off,c             s   s   | ]}t |d  V  qdS )r   N)str).0itemr   r   r   	<genexpr>?   s    z0AttShiftCreationForm.__init__.<locals>.<genexpr>c             s   s   | ]}|d  V  qdS )r   Nr   )r$   r%   r   r   r   r&   A   s    c             s   s   | ]}t |d  V  qdS )r   N)r#   )r$   r%   r   r   r   r&   C   s    c             s   s   | ]}|d  V  qdS )r   Nr   )r$   r%   r   r   r   r&   E   s    daily_shiftdaily_shift_display)superr   __init__instancer
   objectsfiltervaluesZorder_by	UNIT_DAYSZ
cycle_unitrangeshift_cycleappend	itertoolsgroupbyoperator
itemgetterlistgetinsertjoinjsondumpsr   initial)selfargskwargsquerysetr(   Zdaysxr%   yr'   Z_itemr   itemsZ_cycleZ_indexZ_itemsZweekend_data)	__class__r   r   r*   #   sD    
 zAttShiftCreationForm.__init__c             C   s
   | j d S )Nr'   )cleaned_data)r>   r   r   r   clean_daily_shiftI   s    z&AttShiftCreationForm.clean_daily_shiftc                s   t t|  }t| |S )N)r)   r   cleandata_pre_check)r>   rF   )rE   r   r   rH   L   s    zAttShiftCreationForm.cleanTc                s(   t t| jdd}|  | | |S )NF)commit)r)   r   savesave_shift_detail)r>   rJ   obj)rE   r   r   rK   Q   s    
zAttShiftCreationForm.savec          
   C   s  ddl m} | jdd }|s"d S t|}g }x| D ]\}}|sHq:|d}t|d dkr|d= |j	j
|d}	xj|	D ]$}
t||
jd||
dd	}|| q|W q:|j	j
|d}	x,|	D ]$}
t||
jd||
dd	}|| qW q:W |r
tj	j
|d
  tj	| d S )Nr   )TimeIntervalr'   r"   r!   )Zid__inz00:00:00r   )r   in_timeZout_timer   Ztime_intervalr   )r   )mysite.att.modelsrN   rF   r8   r;   loadsrD   splitr#   r,   r-   r
   rO   r2   deleteZbulk_create)r>   rM   rN   daily_shifts_jsondaily_shiftsZobjskvtbsrA   qZ_objr   r   r   rL   W   s.    



z&AttShiftCreationForm.save_shift_detail)T)r   r   r   r   Z	CharFieldr'   r(   ZBooleanField_
auto_shiftr   r*   rG   rH   rK   rL   __classcell__r   r   )rE   r   r      s   &r   c             C   s  dd l }ddlm} | dd }| dd }|d kr@ttd| dd }|d kr`ttd| dd }|rx|d	krttd
ddtdd t|	 D }|rttd
ddi }t|}	x|	
 D ]\}
}|sq|d}|sg }x|D ]}|dkr
q||kr0|jj|dd }|||< n|| }x|D ]}|j |jdd}||j|jd }|j |jdd}||j|jd }t||t||k r>ttdd||tt|
d ddq>W || qW qW d S )Nr   )rN   r[   aliasZatt_shift_alias_requiredr1   Zatt_shift_cycle_requiredr'   z{}Zshift_select_datez-1)codec             s   s   | ]}|d kV  qdS )r    Nr   )r$   valuer   r   r   r&      s    z!data_pre_check.<locals>.<genexpr>r"   r!   )idz%H:%M:%S)ZminuteszA%(t)s and %(ss)s time_period_are_duplicated!_In_section %(d)s dayr   )tZssd)r^   Zparams)datetimerP   rN   r8   r   rZ   allr;   rQ   r.   rD   rR   r,   r-   strptimerO   strftimeZ	timedeltaZwork_time_durationmaxminr#   intr2   )rF   rc   rN   r[   r]   r1   rT   Zdaily_shifts_dataZall_tbsrU   rV   rW   rX   ZtmpstbZ	timetabletmpZscsZsceZtmp_sZtmp_er   r   r   rI   s   sV    






rI   )r3   r5   r;   Zdjango.formsr   r   Z	django.dbr   Zdjango.utils.translationr   rZ   Zmysite.adminr   Zmysite.admin.formsr   rP   r   r	   r
   r/   r   rI   r   r   r   r   <module>   s   [