B
    b##                 @   s   d dl 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
 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 d dlmZ d dlmZ d dl Z d dlmZ G dd deZd dlmZ d dlmZ d dlmZ eej eddd Z!dS )    N)	timedelta)models)gettext_lazy)MinValueValidator)AdminRuntimeWarning)AbstractCloud)db_const)models_const)	APP_LABEL)	BreakTime)BreakTimeManyToManyField)models_choices)AttSchedulec                   s$  e Zd ZejedejdZej	edde
jdZejedejdZejedd	dZejed
d	dZejedd	dZejedd	dZejeddeddZej	edde
jdZej	edde
jdZejeddeddZejeddeddZejeddeddZej	edde
jdZ ejedd	de!dgeddZ"ej	edde
jdZ#ejedd	de!dgeddZ$ej	edde
j%dZ&ejed ded!dZ'ejed"ded!dZ(ejed#ded!dZ)ej	ed$de
jdZ*ej	ed%de
j+dZ,ejed&dde!dgeddZ-ejed'dded(d)Z.ej	ed*de
jdZ/ej	ed+de
j0dZ1ejed,e23ddddZ4e5e6ed-d.d/Z7ejed0ej8dZ9ejed1ej:dZ;ej<ed2ddZ=d3d4 Z>d5d6 Z? fd7d8Z@d> fd:d;	ZAG d<d= d=ZB  ZCS )?TimeIntervalZtimeInterval_field_alias)Z
max_lengthZtimeInterval_field_typer   )defaultchoicesZtimeInterval_field_checkIn)r   Z timeInterval_field_inAheadMargin<   Z timeInterval_field_inAboveMarginZ!timeInterval_field_outAheadMarginZ!timeInterval_field_outAboveMarginZ%timeInterval_field_attendanceDurationi  Ztime_unit_minute)r   	help_textZtimeInterval_field_inRequired   ZtimeInterval_field_outRequiredZtimeInterval_field_allowLateZ"timeInterval_field_allowLeaveEarlyZtimeInterval_field_paidDayg      ?Ztime_unit_dayZtimeInterval_field_earlyInZtimeInterval_field_minEarlyInF)r   blankZ
validatorsr   ZtimeInterval_field_lateOutZtimeInterval_field_minLateOutZ timeInterval_field_overtimeLevelZ!timeInterval_field_overtimeLevel1Ztime_unit_hourZ!timeInterval_field_overtimeLevel2Z!timeInterval_field_overtimeLevel3Z#timeInterval_field_useMultiplePunchZ-timeInterval_field_availablePunchIntervalTypeZ'timeInterval_field_duplicatePunchPeriodZ#timeInterval_field_workTimeDurationZ*timeInterval_field_workTimeDurationHelpTxt)r   r   r   Z"timeInterval_field_baseOnPunchTypeZtimeInterval_field_workTypeZtimeInterval_field_dayChangeZtimeInterval_field_breakTimeT)verbose_namer   Z#timeInterval_field_firstHalfOutTimeZ#timeInterval_field_secondHalfInTimeZfield_isDefaultc             C   s   d | jS )Nz{0})formatalias)self r   =G:\easytimepro\master/mysite/att\models\model_timeinterval.py__str__H   s    zTimeInterval.__str__c             C   s&   ddl m} t| jj}|| d S )Nr   )C_TIME_INTERVAL)Zmysite.att.global_cacher   strZcompanyidZrefresh)r   r   
company_idr   r   r   refresh_cacheK   s    zTimeInterval.refresh_cachec                s   d}| j dks| j dkr td}|r,t|| jrH| jdkrH| j}|| _tjj	| j
| jdj| jd }|rzttdtt| j|| |   d S )N r   
   Z!timeInterval_error_invalidWorkDay)r   r    )pkZ,time_table_with_the_same_name_already_exists)work_day_r   r$   use_modework_time_durationdurationr   objectsfilterr   r    Zexcludeexistssupersaver!   )r   argskwargsmessageZ	work_timeZget_time_table)	__class__r   r   r.   P   s    zTimeInterval.saveNc                sZ   d}| j rtd}|rt|| j }| r<ttdtt| || | 	  d S )Nr"   Z$default_time_table_cannot_be_removedZtimetable_is_already_in_use)

is_defaultr&   r   Zshiftdetail_setallr,   r-   r   deleter!   )r   ZusingZkeep_parentsr1   Zobj_set)r2   r   r   r5   j   s    
zTimeInterval.deletec               @   s&   e Zd ZdgZeZedZeZdZ	dS )zTimeInterval.Metar   Zatt_model_timeInterval)r5   ZchangeviewN)
__name__
__module____qualname__Zorderingr
   Z	app_labelr&   r   Zverbose_name_pluralZdefault_permissionsr   r   r   r   Meta{   s
   r:   )NF)Dr7   r8   r9   r   Z	CharFieldr&   r   ZMAX_TIME_INTERVAL_ALIASr   ZSmallIntegerFieldmcZTIME_INTERVALr'   Z	TimeFieldr	   ZIN_TIMEin_timeZIntegerFieldZin_ahead_marginZin_above_marginZout_ahead_marginZout_above_marginr)   ZBOOLEANSZin_requiredZout_requiredZPositiveIntegerFieldZ
allow_lateZallow_leave_earlyZ
FloatFieldr%   ZUNSCHEDULED_POLICYZearly_inr   Zmin_early_inZlate_outZmin_late_outZOVERTIME_LEVELZovertime_lvZovertime_lv1Zovertime_lv2Zovertime_lv3Zmultiple_punchZAVAILABLE_PUNCH_TYPEZavailable_interval_typeZavailable_intervalr(   Zfunc_keyZ	WORK_TYPEZ	work_typedatetimetimeZ
day_changer   r   Z
break_timeZFIRST_HALF_OUT_TIMEZfirst_half_out_timeZSECOND_HALF_IN_TIMEZsecond_half_in_timeZBooleanFieldr3   r   r!   r.   r5   r:   __classcell__r   r   )r2   r   r      s^   




r   )signals)receiver)TempSchedule)senderc          	   K   s   t jj|jd}g }x|D ]}tj|j |j}|j	d }tjtddd|j}	|	tj
|d  }
tj|j |
}|t |j|||d t jj|d  qW t j| d S )N)Ztime_interval__idr   r   )Zhours)employeetime_interval
start_timeend_time)rE   )rB   r*   r+   r   r=   ZcombinerF   dater<   r)   r   r>   rG   appendrD   r5   Zbulk_create)rC   instanceZcreatedr0   ZscheduleZobjsiZdate_time_startZ
work_hoursZtmp_datetimeZtime_addZdate_time_endr   r   r   update_combination2area   s    

rL   )"r=   r   Z	django.dbr   Zdjango.utils.translationr   r&   Zdjango.core.validatorsr   Zmysite.admin.exceptionsr   Z!mysite.admin.abstract_cloud_modelr   Z
mysite.attr   r	   Zmysite.att.db_constr
   Z!mysite.att.models.model_breaktimer   r   r   r;   Z#mysite.att.models.model_attscheduler   r   Zdjango.db.modelsr@   Zdjango.dispatch.dispatcherrA   Z$mysite.att.models.model_tempschedulerB   Z	post_saverL   r   r   r   r   <module>   s&   l