B
    bO                 @   s   d dl m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Zd dlZd dlm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 d dlmZ d dlm Z  e!eG dd dej"Z#G dd deZ$dS )    )gettext_lazy)adminconfig)DepartmentSchedule)AddDepartmentSchedule)STATUS_RESIGNN)cache)db_constactions)ActionHandleError)
ImportData)AdminRuntimeWarning)AttShift)
Department)Employee)settingsc                   s   e Zd ZdZdZejegZdd Ze	de_
dd Ze	de_
d	d
 Ze	de_
dd Ze	de_
dddZdd Z fddZdd Z  ZS )DepartmentScheduleAdmin)iddepartment_codedepartment_nameemployee_countshift_alias
start_dateend_date)department__dept_codedepartment__dept_namec             C   s   |j jp
dS )N )
department	dept_code)selfobj r!   BG:\easytimepro\master/mysite/att\admin\departmentschedule_admin.pyr   !   s    z'DepartmentScheduleAdmin.department_codeZdepartment_field_codec             C   s   |j jp
dS )Nr   )r   Z	dept_name)r   r    r!   r!   r"   r   &   s    z'DepartmentScheduleAdmin.department_nameZdepartment_filed_namec             C   sh   ddl m} | }|j}|j}tjj|jd}|	 rH|j|
 d}|	 r`|j|
 d}| S )Nr   )threadlocals)r   )Zarea__in)Zposition__in)Zmysite.baser#   Zget_current_userZget_auth_areaZget_auth_posr   objectsfilterr   existsallcount)r   r    r#   userZareaZpositionZ	emp_countr!   r!   r"   r   +   s    z&DepartmentScheduleAdmin.employee_countZdepartment_filed_employeeCountc             C   s   |j jS )N)shiftalias)r   r    r!   r!   r"   r   :   s    z#DepartmentScheduleAdmin.shift_aliasZattShift_field_aliasNc             C   s   dS )NFr!   )r   requestr    r!   r!   r"   has_change_permission?   s    z-DepartmentScheduleAdmin.has_change_permissionc             C   s   dS )NFr!   )r   r,   r!   r!   r"   has_add_permissionB   s    z*DepartmentScheduleAdmin.has_add_permissionc                s\   ddl m} |jj}tt| |j|jjd}|jj	sP|
 rP|j| d}| }|S )Nr   )r   )department__company_id)Zdepartment__in)Zmysite.personnel.modelsr   r)   Zget_auth_deptsuperr   get_querysetr%   current_companyZis_superuserr&   r'   Zselect_related)r   r,   r   Z	auth_deptZqueryset)	__class__r!   r"   r1   E   s    z$DepartmentScheduleAdmin.get_querysetc             C   s<   t |d| jj| jjd}|  |j}|r8td|d S )Nimport_data)req
input_name	app_label
model_name;)ImportDepartscheduleDataZoptsr7   r8   Zexe_import_data
error_infor   join)r   r,   Z
obj_importZ	ret_errorr!   r!   r"   
dataimportO   s    z"DepartmentScheduleAdmin.dataimport)N)__name__
__module____qualname__Zlist_displayZlist_filterr
   ZImportr   r   _Zshort_descriptionr   r   r   r-   r.   r1   r=   __classcell__r!   r!   )r3   r"   r      s   






r   c                   s   e Zd Zd fdd	Zdd Zdd Zd	d
 Zdd Zxee	dg D ]Z
ee
 qDW dd Zdd Zdd Zdd Zdd Zdd Z  ZS )r:   r4   Nc       	         s   ddl m} |j}tj}|d|}|r0|| tt| |||| d | _	|jj
| _td| j	| jf tj d g | _dtd dtd dtd	 dtd
 g| _g | _d | _d | _d | _d | _d S )Nr   )activateZlanguagezdeptschedule_import_%s_%s   z%sdeptSchedule_field_departmentdeptSchedule_field_shiftdeptSchedule_field_startDatedeptSchedule_field_endDate)django.utils.translationrC   r)   r   ZLANGUAGE_CODEZget_preferencesr0   r:   __init__stampr2   
company_idr   setdatetimenowZcalculate_fields_verboserA   Zmust_fieldsexist_codesdCodesNamesDateeDate)	r   r5   r6   r7   r8   rC   ZprofileZdefault_language_codeZlng)r3   r!   r"   rJ   Y   s(    
 


z!ImportDepartscheduleData.__init__c       	      C   s   |g}x|r|  }|d| xp|D ]h}y|| j }W n   d}Y nX |rV| pXd}|| j }|pjd}|r&||kr&||krdS || q&W qW dS )uK   判断是否设置了一个部门的上级部门为其自身或其子部门r   r   FT)popinsertrT   striprQ   append)	r   elemrecordsstoreZ
check_listZ
check_itemdZe_Dated_coder!   r!   r"   is_valid_recordt   s"    


z(ImportDepartscheduleData.is_valid_recordc       #   	      s  dd l }dd l}t j}d jp&d j}dd|dddd}t||	|d d	d
ddgdd  j
D }tfdd|D }|sttdxxtt j
D ]f} j
| }	|	dtd kr| _|	dtd kr| _|	dtd kr| _|	dtd kr| _qW t j j j j}
| j}tjj jddd
dd} fdd|D }dd |D  _xt jD ]~\}}||kr|| }dg|
d  }|d | j< |d pd| j< |d pd| j< |d pd| j< || qW i }xt jD ]\}}|d7 }| j }y| j }W n tk
rX   d}Y nX y| j }W n tk
r   d}Y nX y| j }W n tk
r   d}Y nX |s̈ jtdd |i  |rtjj| jd! }|s4 jtd"d |i  n,t|t j!kr4 jtd#|t j!d$  |sR jtd%d |i  |rt"jj| jd& }|s jtd'd |i  n,t|t j#kr jtd(|t j#d$  |s؈ jtd)d |i  |d k	r(yt$j$%|d*}|| j< W n(    jtd+d |i  wY nX |sF jtd,d |i  |d k	ryt$j$%|d*}|| j< W n(    jtd-d |i  wY nX |rt$j$%|d*}t$j$%|d*}|& |& k r jtd.d |i  g } '|||s jtd/||d0  d1S xFt|D ]:\}}d| }|(|g }||krN|| |||< qW ||d2< t)|t)| |d3< d4* jd d5 |d6< t||	|d qW |+ } t,j-rdd7l.m/}! t0| |!d8d9 d:}"n| 1d;d9 }"|" _d<S )=Nr   z%deptSchedule_import_processor_{0}_{1}r   z{0}zValidating...   )statustotalfinishtpfpi,  zdepartment idr*   z
start datezend datec             S   s   g | ]}|  qS r!   )lower).0itemr!   r!   r"   
<listcomp>   s    z:ImportDepartscheduleData.before_insert.<locals>.<listcomp>c             3   s   | ]}| kV  qd S )Nr!   )rf   rY   )valid_headersr!   r"   	<genexpr>   s    z9ImportDepartscheduleData.before_insert.<locals>.<genexpr>z9Invalid import data,Please check the headers or file dataz%srE   rF   rG   rH   )r/   r   r   r   c                s   g | ]}| j  qS r!   )rQ   )rf   r\   )r   r!   r"   rh      s    c             S   s   g | ]}|d  qS )r   r!   )rf   r\   r!   r!   r"   rh      s          z3error_data_on_row(%(index)s)_department_id_is_emptyindex)r   rL   z5error_data_on_row(%(index)s)_department_id_is_invalidzNerror_data_on_row(%(index)s)_the_length_of_department_id_maximum_is_%(length)s)rm   lengthz;error_data_on_row(%(index)s_the_shift_name_can_not_be_empty)r+   rL   z5error_data_on_row(%(index)s_the_shift_name_is_invalidzKerror_data_on_row(%(index)s)_the_length_of_shift_name_maximum_is_%(length)sz;error_data_on_row(%(index)s_the_start_date_can_not_be_emptyz%Y-%m-%dz5error_data_on_row(%(index)s_the_start_date_is_invalidz9error_data_on_row(%(index)s_the_end_date_can_not_be_emptyz3error_data_on_row(%(index)s_the_end_date_is_invalidzAerror_data_on_row(%(index)s_end_date_can_not_less_than_start_dateznthe_%(index)s_rows_of_data_can_not_be_set_higher_authorities_to_%(index_name)s_sector_or_sub-sector_of_its_own)rm   Z
index_nameFrb   rd   r9      r;   )
cmp_to_keyc             S   s   t | d t |d  S )Nr   )int)x1x2r!   r!   r"   <lambda>5      z8ImportDepartscheduleData.before_insert.<locals>.<lambda>)keyc             S   s   t | d t |d  S )Nr   )rq   )rr   rs   r!   r!   r"   rt   7  ru   T)2jsoncopylenrZ   formatrK   rL   r   rM   dumpsheadr'   r   rA   rangerQ   rR   rS   rT   maxZdeepcopyr   r$   r%   Zvalues_listrP   	enumeraterX   
IndexErrorr;   r   r&   r	   ZMAX_DEPARTMENT_CODEr   ZMAX_SHIFT_NAMErN   strptimedater^   getfloatr<   itemssixZPY3	functoolsrp   sortedsort)#r   rw   rx   _lenprocessor_keyprocessor_dataZheadersresultrm   r\   Zmax_lenZall_recordsZ
exist_dataZ	new_codesicZdb_datadataZd_levelrY   r]   Zs_nameZs_dateZe_dateZvalidate_departmentZvalidate_shiftZ_validate_s_dateZ_validate_e_dater[   vrv   Zscheduler   rp   Z
list_itemsr!   )r   ri   r"   before_insert   s   













z&ImportDepartscheduleData.before_insertc             C   s   d S )Nr!   )r   Zinsert_deptr!   r!   r"   records_analysis;  s    z)ImportDepartscheduleData.records_analysisc       !   
      sb  dd l }t| j}d| jpd| j}dd|dddd}t|||d t| j	}i }| j
}d}x| jD ]\}	}
x|
D ]}td	| j| jf d }tj }|r||k rt||  d
krP nP |d7 }i }|| j }|| j }|| j }|| j }|| jks|rxt|D ]}x.| j D ] \}}||kr2|| ||< q2W || jkr"||  | j|}| j| }|jr fdd|jD }|r|d  |j}| | }|||< q"W | ||}y.tj j!|| j"j#j$d}|r|d j%|d< W n& t&k
r*   dd l'}|(  Y nX t)j j!|| j"j#j$d}|rV|d j%|d< yt*j j!|| j"j#j$||d}|r|r|d } x`| D ]\}}t+| || | ,  qW n4|j-r| j./t0d||d  t*f |} | ,  nt*f |} | ,  W q t&k
r$   dd l'}|(  Y qX qW ||d< t1|t1| |d< t|||d qrW d S )Nr   z%deptschedule_import_processor_{0}_{1}r   z{0}zProcessing...r_   )r`   ra   rb   rc   rd   i,  zdeptschedule_import_%s_%s
   c                s    g | ]}|d   kr|d qS )r_   r   r!   )rf   r\   )	tmp_valuer!   r"   rh   k  s    z8ImportDepartscheduleData.data_insert.<locals>.<listcomp>)r+   rL   shift_id)r   rL   department_id)r   Zdepartment__company__idZstart_date__lteZend_date__gtezgInvalid import data,Please check the start date %(start_date)s  or end date %(end_date)s  already Exist)r   r   rb   rd   )2rw   ry   rZ   rz   rK   rL   r   rM   r{   r|   Zneed_update_old_recordr   rN   rO   absZtotal_secondsrQ   rR   rS   rT   rP   r}   Zcalculate_fields_indexr   Zvalid_head_indexsrm   Zvalid_model_fieldschoicesZattnameZget_db_valueprocess_rowr   r$   r%   r,   r)   r2   r   	Exception	traceback	print_excr   r   setattrZsaver&   r;   rX   rA   r   )!r   rw   r   r   r   Zhead_lencalculate_dictZ	overwriter(   levelZdsr\   Zimport_heartrO   Zrow_fields_selectcodeZ
shift_namer   r   rm   kr   Zf_indexZ	tmp_fieldZtvrv   valuerow_datar   r   dept_idZobjsr    r!   )r   r"   data_insert>  s    












z$ImportDepartscheduleData.data_insertZ
cache_keysc             C   s   |    d S )N)r   )r   r!   r!   r"   sqlserver_insert  s    z)ImportDepartscheduleData.sqlserver_insertc             C   s   |    d S )N)r   )r   r!   r!   r"   mysql_insert  s    z%ImportDepartscheduleData.mysql_insertc             C   s   |    d S )N)r   )r   r!   r!   r"   oracle_insert  s    z&ImportDepartscheduleData.oracle_insertc             C   s   |    d S )N)r   )r   r!   r!   r"   postgresql_insert  s    z*ImportDepartscheduleData.postgresql_insertc             C   s   t d| j| jf  d S )Nzdeptschedule_import_%s_%s)r   deleterK   rL   )r   r!   r!   r"   after_insert  s    z%ImportDepartscheduleData.after_insertc             C   sD   dt d }||d}|r@tjj|| jjjdd }|j|d< |S )Nz%srF   r   )r   rL   r   r   )	rA   r   r   r$   r%   r,   r)   r2   r   )r   r   r   rv   rQ   r   r!   r!   r"   r     s    
z$ImportDepartscheduleData.process_row)r4   NN)r>   r?   r@   rJ   r^   r   r   r   getattrr   r   r   r   r   r   r   r   r   r   rB   r!   r!   )r3   r"   r:   X   s    1ir:   )%rI   r   rA   mysiter   r   Zmysite.att.modelsr   Zmysite.att.actionsr   Zmysite.admin.modelsr   r   rN   Zdjango.core.cacher   Z
mysite.attr	   r
   Zmysite.admin.actionr   Zmysite.personnel.import_datar   Zmysite.admin.exceptionsr   Z mysite.att.models.model_attshiftr   Z(mysite.personnel.models.model_departmentr   Z&mysite.personnel.models.model_employeer   Zdjango.confr   registerZZKModelAdminr   r:   r!   r!   r!   r"   <module>   s$   
>