B
    L_b&                 @   s(  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 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mZ d dlmZmZ d dlmZ d dlm Z m!Z!m"Z" d dl#m$Z$ G dd dej%Z&G dd de Z'G dd dej(Z)e*eG dd dej+Z,dS )    N)gettext_lazy)forms)QF	DateFieldExpressionWrapper)admin)
Department)Location)db_const)Holiday)UNSCHEDULED_POLICYOVERTIME_LEVEL)fieldswidgets)AdminRuntimeWarning)	ModelFormValidationErrorModelChoiceField)get_current_company_idc               @   s   e Zd ZejedejdZej	ede
j
 dZejedddddZejed	ed
dZejedddddZejedddddZejedddddZejej edejddZejej edej ddZ!dS )DepartmentHolidayFormholiday_field_alias)label
max_lengthholiday_field_startDate)r   initialholiday_field_duration   i  )r   r   	min_valueZ	max_valueholiday_field_workType   )r   choicesr   holiday_field_overtimeLevel1r   )r   r   r   decimal_placesholiday_field_overtimeLevel2holiday_field_overtimeLevel3holiday_field_departmentF)querysetr   widgetrequiredholiday_field_locationTN)"__name__
__module____qualname__r   	CharField_r   MAX_HOLIDAY_ALIASaliasr   datetimenow
start_dateIntegerFieldduration_dayChoiceFieldr   	work_typeDecimalFieldovertime_lv1overtime_lv2overtime_lv3django_formsZModelMultipleChoiceFieldr	   objectsallr   ZDepartmentSelectMultiple
departmentr
   get_querysetZLocationSelectMultiplelocation rC   rC   7G:\easytimepro\master/mysite/att\admin\holiday_admin.pyr      s   r   c                   s   e Zd ZejedejdZej	ede
j
 dZejeddddZejeded	d
ZejedddddZejedddddZejedddddZejeddddZeej eddddZ fddZ fddZG dd dZ  ZS )DepartmentHolidayChangeFormr   )r   r   r   )r   r   r   r   )r   r   r   r   r    )r   r!   r   r"   r   )r   r   r   r#   r$   r%   r&   TF)r   disabledr)   r*   )r'   r   rF   r)   c                sD   t t| j|| | jr@t| jj| jd _t| jj| jd _d S )NdeptrB   )	superrE   __init__instancestrr@   r   r   rB   )selfargskwargs)	__class__rC   rD   rI   4   s    z$DepartmentHolidayChangeForm.__init__c                sh  t t|  }|d}|d}|d}tdtd }tjt|d }|t	t
|d  }tjjt|tj	dd t ddt|d	t|d
B j| jjdj| jjd}| rtd}	t|	|dkrd|dd}
|dd}|dd}t|
||dk rttdt|
||frdt
|dkrd||  krT|
ksdn ttdn d S )Nr8   r4   r6   z%Y-%m-%dr   )days)output_field)end_date)start_date__gt)end_date__lt)id)
company_idholiday_duration_invalidr   r:   r;   r<   'timeInterval_error_invalidOvertimeValue,timeInterval_error_invalidCheckOvertimeLevel)rH   rE   cleangetr   r2   strptimerK   date	timedeltaintr   r>   annotater   r   excluder   rJ   rU   filterrV   countr/   r   minany)rL   Zcleaned_datar8   r4   r6   _end	new_startrR   r'   messageot1ot2ot3)rO   rC   rD   rZ   :   s0    



z!DepartmentHolidayChangeForm.cleanc               @   s   e Zd ZeZdZdS )z DepartmentHolidayChangeForm.Meta)	r1   rG   rB   r4   r6   r8   r:   r;   r<   N)r+   r,   r-   r   Zmodelr   rC   rC   rC   rD   MetaV   s   rl   ) r+   r,   r-   r   r.   r/   r   r0   r1   r   r2   r3   r4   r5   r6   r7   r   r8   r9   r:   r;   r<   rG   r   r
   r>   rA   rB   rI   rZ   rl   __classcell__rC   rC   )rO   rD   rE   (   s   
rE   c               @   s0   e Zd ZedZedZedZeZdd Z	dS )AddDepartmentHolidayZ#holiday_action_addDepartmentHolidayZ.holiday_action_addDepartmentHolidayDescriptionZ*holiday_action_addDepartmentHolidayHelpTxtc
          	   C   s  t |}
t |}t |	}t|
||dk r4ttdt|
||frrt|dkrr||  krb|
ksrn ttdn | jjj}|rt	j
j|||d }nt	j
j|d |d }|rttd| jjdd }| jjdd }tj|d }|tt|d	  }td
td }t	j
jt|tjd	d t ddt|dt|dB }|rd|j|d}n|jd d}|r|j||d}n|jd |d}| rtd}t||||||||	| jj d}|rg }x:|D ]2}t|}|d|i t	f |}|| qW t	j
| |rpg }x:|D ]2}t|}|d|i t	f |}|| q.W t	j
| |s|st	f |}|   d S )Nr   rX   rY   )r1   rB   rV   Zatt_holiday_alias_validationr@   rB   z%Y-%m-%dr   r4   r6   )rP   )rQ   )rR   )rS   )rT   )department__in)r@   )Zlocation__inrV   )rB   rV   rW   )r1   r4   r6   r8   r:   r;   r<   ZcompanyZdepartment_idZlocation_id)!floatrd   r   r/   re   r_   requestusercurrent_companyr   r>   rb   existsZPOSTZgetlistr2   r\   r]   r^   r   r`   r   r   ra   r   rc   Zget_current_companycopyZdeepcopyupdateappendZbulk_createZsave)rL   r1   r4   r6   r8   r@   rB   r:   r;   r<   ri   rj   rk   rV   Zholiday_aliasZdeptsZ	locationsrg   rR   rf   r'   rh   rN   ZholidaysrG   _kwargsZholidayrC   rC   rD   actionc   sj    








zAddDepartmentHoliday.actionN)
r+   r,   r-   r/   Zverbose_nameZshort_descriptionZhelp_txtr   Zaction_formry   rC   rC   rC   rD   rn   ]   s
   rn   c                   sR   e Zd ZdZdZefZeZe	j
dejie	jdejiiZdd Z fddZ  ZS )HolidayAdmin)rU   r1   rB   r4   r6   r8   )r1   Zlocation__location_namer(   c             C   s   dS )NFrC   )rL   rq   rC   rC   rD   has_add_permission   s    zHolidayAdmin.has_add_permissionc                sV   |j j}tt| |j|j jd}|j jsR| rR|t	|
 dt	d dB }|S )N)rV   )ro   )r@   )rr   Zget_auth_deptrH   rz   rA   rb   rs   Zis_superuserrt   r   r?   )rL   rq   Z	auth_deptZ	query_set)rO   rC   rD   rA      s
    zHolidayAdmin.get_queryset)r+   r,   r-   Zlist_displayZlist_filterrn   ZactionsrE   Zformr   ZDepartmentForeignKeyr   ZDepartmentRadioSelectZLocationForeignKeyZLocationRadioSelectZformfield_overridesr{   rA   rm   rC   rC   )rO   rD   rz      s   rz   )-r2   ru   Zdjango.utils.translationr   r/   Zdjangor   r=   Zdjango.db.modelsr   r   r   r   mysiter   Zmysite.adminZmysite.personnel.modelsr	   r
   Z
mysite.attr   Zmysite.att.modelsr   Zmysite.att.models_choicesr   r   Zmysite.personnelr   r   Zmysite.admin.exceptionsr   Zdjango.formsr   r   r   Zmysite.att.utilsr   ZZKActionFormr   rE   ZZKModelActionrn   registerZZKModelAdminrz   rC   rC   rC   rD   <module>   s(   5I