B
    Òîb>[  ã               @   sJ  d dl Z 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mZmZ d d	lmZ d d
lmZmZ d dl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!G dd„ de
j"e
j#eeƒZ$G dd„ de$ƒZ%G dd„ de$ƒZ&G dd„ de$ƒZ'G dd„ de$ƒZ(G dd„ de$ƒZ)G dd„ de$ƒZ*dS )é    N)ÚOrderedDict)ÚMax)Úgettext_lazy)Úmixins)ÚResponse)Úaction)ÚTokenAuthenticationÚBasicAuthenticationÚSessionAuthentication)ÚJSONWebTokenAuthentication)ÚMonthlySalaryÚSalaryStructure)Úserializers)ÚUtilGenericViewSetÚReportExportMixin)ÚLeaveCategory)Ú
Departmentc               @   s   e Zd ZdS )ÚMyReportSessionAuthenticationN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú>G:\easytimepro\master/mysite/payroll\api\views\views_report.pyr      s   r   c               @   sT   e Zd ZeZej ¡  ¡ Ze	e
eefZdd„ Zdd„ Zdd„ Zddd	„Zd
d„ ZdS )ÚBasePayrollReportViewSetc             C   s   | j  dd¡j| jjjdS )NÚemployeeÚemployee__department)Úemployee__company_id)ÚquerysetÚselect_relatedÚfilterÚrequestÚuserÚcurrent_company)Úselfr   r   r   Úget_queryset&   s    z%BasePayrollReportViewSet.get_querysetc             C   s   | j |ddS )NT)Úreport_flag)Ú	post_list)r#   r    r   r   r   Úget_export_data*   s    z(BasePayrollReportViewSet.get_export_datac             C   s   d S )Nr   )r#   Úserializer_datar   r   r   Úadd_extra_field-   s    z(BasePayrollReportViewSet.add_extra_fieldFc          	   O   sî   |   ¡ }|  |¡}|j}|j}d|_|j dd¡|d< |j dd¡|d< ||_|  |¡}|j d¡r|| j|dd}	t|ƒ}
n:|r˜| j|dd}	t|ƒ}
n| j|d d… dd}	t|ƒ}
|  	|	j¡ |rÌ|	jS t
td|
fdd	d
dd|	jfgƒƒS )NTÚpageé   Ú	page_sizeé   )ÚmanyÚcount)ÚnextÚ )Úpreviousr1   )Úmsgr1   )Úcoder   Údata)r$   Úqueryset_filterÚquery_paramsÚ_mutabler5   ÚgetÚpaginate_querysetÚget_serializerÚlenr)   r   r   )r#   r    r%   ÚargsÚkwargsr   r7   r8   r*   Ú
serializerÚtotal_countr   r   r   r&   0   s6    



z"BasePayrollReportViewSet.post_listc             C   sâ  ddl m} | j}d|jkrÊ|j d¡dkr¨d|jkrh|j d¡dkrh|j dd¡ d¡}|j|d}qÈd	|jkrÈ|j d	¡dkrÈ|j d	d¡ d¡}|j|d
 ¡ }n |j dd¡ d¡}|j|d}n\d|jkrö|j dd¡ d¡}|j|d}n0d	|jkr&|j d	d¡ d¡}|j|d
 ¡ }d|jkrvd|jkrvtj 	|jd d¡}tj 	|jd d¡}|j||fd}|j
jsÞ|j
j}	|j
j}
|
 ¡ rª|j|
 ¡ d}|	 ¡ rÞ|jj|j
jdj|	 ¡ d}|j|d}|S )Nr   )ÚEmployeeÚ	employeesz-1Údepartmentsr1   ú,)Úemployee__department__inÚareas)Úemployee__area__in)Úemployee__inÚ
start_dateÚend_datez%Y-%m-%d)Zcalc_time__range)Z
company_id)Zarea__in)Úmysite.personnel.modelsrA   r    r5   r9   Úsplitr   ÚdistinctÚdatetimeÚstrptimer!   Zis_superuserZget_auth_areaZget_auth_deptÚexistsÚallÚobjectsr"   )r#   r   rA   r    rC   ÚarearB   rI   rJ   Z	auth_areaZ	auth_deptZemp_list_by_arear   r   r   r6   T   sD    




z(BasePayrollReportViewSet.queryset_filterN)F)r   r   r   r   ÚmodelrR   rQ   rM   r   r   r   r	   r   Zauthentication_classesr$   r'   r)   r&   r6   r   r   r   r   r      s   
$r   c               @   sR   e Zd ZejejejejdœZddd„Zdd„ Zdd„ Ze	d	gdd
dd„ ƒZ
dS )Ú MonthlySalaryDetailReportViewSet)Úlistr&   ÚretrieveÚexportFc          	   O   sØ   |   ¡ }|  |¡}|j}|j}d|_|j dd¡|d< |j dd¡|d< ||_|j d¡rf|  |¡}	n|}	tj 	¡ }
x|	D ]}|
|B }
qzW t
|ƒ}| j|
dd}|  |j¡ |r¶|jS ttd|fdd	d
dd|jfgƒƒS )NTr*   r+   r,   r-   )r.   r/   )r0   r1   )r2   r1   )r3   r1   )r4   r   r5   )r$   r6   r7   r8   r5   r9   r:   r   rR   Únoner<   r;   r)   r   r   )r#   r    r%   r=   r>   r   Úvalue_querysetr7   r8   r*   Únew_pageÚeachr@   r?   r   r   r   r&   †   s4    


z*MonthlySalaryDetailReportViewSet.post_listc             C   s   t tdƒƒS )NZsalary_detail_report)ÚstrÚ_)r#   r   r   r   Úget_file_titleª   s    z/MonthlySalaryDetailReportViewSet.get_file_titlec             C   sº   t j d¡}dd„ |D ƒ}xš|D ]’}t | dd¡¡}t | dd¡¡}t | dd¡¡}xD|D ]<}| |d¡||< | |d	¡||d
 < | |d	¡||d < q`W |d= |d= |d= q W d S )NÚcategory_namec             S   s   g | ]}t |d  ƒ‘qS )r`   )r]   )Ú.0Úir   r   r   ú
<listcomp>¯   s    zDMonthlySalaryDetailReportViewSet.add_extra_field.<locals>.<listcomp>Úleavez{}Úleave_formulaÚleave_formula_namer   r1   z formulaz formula_name)r   rR   ÚvaluesÚjsonÚloadsr9   )r#   r(   Ú	categorysr\   Ú	all_leaveÚall_leave_formularf   Úkr   r   r   r)   ­   s    

z0MonthlySalaryDetailReportViewSet.add_extra_fieldZpost)ÚmethodsÚdetailc             C   s*   |j  d¡}tjj|d ¡  tddiƒS )NÚtime)Z	calc_timero   ZOK)r5   r9   r   rR   r   Údeleter   )r#   r    Zdelete_timer   r   r   Údelete_record¼   s    z.MonthlySalaryDetailReportViewSet.delete_recordN)F)r   r   r   r   Z#MonthlySalaryDetailReportSerializerÚserializer_dictr&   r_   r)   r   rr   r   r   r   r   rU   }   s   

$rU   c               @   s4   e Zd ZejejejejdœZddd„Zdd„ ZdS )	ÚIncreaseReportViewSet)rV   r&   rW   rX   Fc          	   O   sØ   |   ¡ }|  |¡}|j}|j}d|_|j dd¡|d< |j dd¡|d< ||_|j d¡rf|  |¡}	n|}	tj 	¡ }
x|	D ]}|
|B }
qzW t
|ƒ}| j|
dd}|  |j¡ |r¶|jS ttd|fdd	d
dd|jfgƒƒS )NTr*   r+   r,   r-   )r.   r/   )r0   r1   )r2   r1   )r3   r1   )r4   r   r5   )r$   r6   r7   r8   r5   r9   r:   r   rR   rY   r<   r;   r)   r   r   )r#   r    r%   r=   r>   r   rZ   r7   r8   r*   r[   r\   r@   r?   r   r   r   r&   Í   s4    


zIncreaseReportViewSet.post_listc             C   s   t tdƒƒS )NZbonus_report)r]   r^   )r#   r   r   r   r_   ñ   s    z$IncreaseReportViewSet.get_file_titleN)F)r   r   r   r   ZIncreaseReportSerializerrs   r&   r_   r   r   r   r   rt   Ä   s   

$rt   c               @   s<   e Zd ZejejejejdœZd
dd„Zdd„ Zdd„ Zd	S )ÚDeductionReportViewSet)rV   r&   rW   rX   Fc          	   O   sØ   |   ¡ }|  |¡}|j}|j}d|_|j dd¡|d< |j dd¡|d< ||_|j d¡rf|  |¡}	n|}	tj 	¡ }
x|	D ]}|
|B }
qzW t
|ƒ}| j|
dd}|  |j¡ |r¶|jS ttd|fdd	d
dd|jfgƒƒS )NTr*   r+   r,   r-   )r.   r/   )r0   r1   )r2   r1   )r3   r1   )r4   r   r5   )r$   r6   r7   r8   r5   r9   r:   r   rR   rY   r<   r;   r)   r   r   )r#   r    r%   r=   r>   r   rZ   r7   r8   r*   r[   r\   r@   r?   r   r   r   r&   þ   s4    


z DeductionReportViewSet.post_listc             C   s   t tdƒƒS )NZdeduction_report)r]   r^   )r#   r   r   r   r_   "  s    z%DeductionReportViewSet.get_file_titlec             C   sº   t j d¡}dd„ |D ƒ}xš|D ]’}t | dd¡¡}t | dd¡¡}t | dd¡¡}xD|D ]<}| |d¡||< | |d	¡||d
 < | |d	¡||d < q`W |d= |d= |d= q W d S )Nr`   c             S   s   g | ]}t |d  ƒ‘qS )r`   )r]   )ra   rb   r   r   r   rc   '  s    z:DeductionReportViewSet.add_extra_field.<locals>.<listcomp>rd   z{}re   rf   r   r1   z formulaz formula_name)r   rR   rg   rh   ri   r9   )r#   r(   rj   r\   rk   rl   rf   rm   r   r   r   r)   %  s    

z&DeductionReportViewSet.add_extra_fieldN)F)	r   r   r   r   ZDeductionReportSerializerrs   r&   r_   r)   r   r   r   r   ru   õ   s   

$ru   c               @   s4   e Zd ZejejdœZd
dd„Zdd„ Zdd„ Zd	S )ÚCalcParamReportViewSet)r&   rX   Fc          	   O   sØ   |   ¡ }|  |¡}|j}|j}d|_|j dd¡|d< |j dd¡|d< ||_|j d¡rf|  |¡}	n|}	tj 	¡ }
x|	D ]}|
|B }
qzW t
|ƒ}| j|
dd}|  |j¡ |r¶|jS ttd|fdd	d
dd|jfgƒƒS )NTr*   r+   r,   r-   )r.   r/   )r0   r1   )r2   r1   )r3   r1   )r4   r   r5   )r$   r6   r7   r8   r5   r9   r:   r   rR   rY   r<   r;   r)   r   r   )r#   r    r%   r=   r>   r   rZ   r7   r8   r*   r[   r\   r@   r?   r   r   r   r&   <  s4    


z CalcParamReportViewSet.post_listc             C   s   t tdƒƒS )NZattendance_parameter_report)r]   r^   )r#   r   r   r   r_   `  s    z%CalcParamReportViewSet.get_file_titlec             C   sP   xJ|D ]B}t  | dd¡¡}x|D ]}| |d¡||< q"W d|kr|d= qW d S )NZformat_dictz{}r1   )rh   ri   r9   )r#   r(   r\   Zparamsrm   r   r   r   r)   c  s    

z&CalcParamReportViewSet.add_extra_fieldN)F)	r   r   r   r   ZCalcParamReportSerializerrs   r&   r_   r)   r   r   r   r   rv   5  s
   

$rv   c                   sb   e Zd ZeZej ¡ Zej	ej	ej	ej	dœZ
dd„ Z‡ fdd„Zdd„ Zdd	d
„Zdd„ Z‡  ZS )ÚSalaryStructureReportViewSet)rV   r&   rW   rX   c             C   s   t tdƒƒS )NZsalary_structure_report)r]   r^   )r#   r   r   r   r_   x  s    z+SalaryStructureReportViewSet.get_file_titlec                s:   t t| ƒ ¡ j| jjjd}| dd¡ ddddd¡}|S )	N)r   r   r   ZdeductionformulaZexceptionformulaZincreasementformulaZovertimeformulaZleaveformula__category)	Úsuperrw   r$   r   r    r!   r"   r   Zprefetch_related)r#   Úqs)Ú	__class__r   r   r$   {  s
    z)SalaryStructureReportViewSet.get_querysetc             C   s`  | j }d|jkr¾|j d¡dkrœd|jkr\|j d¡dkr\|j dd¡ d¡}|j|d}q¼d|jkr¼|j d¡dkr¼|j dd¡ d¡}|j|d ¡ }n |j dd¡ d¡}|j|d	}n\d|jkrê|j dd¡ d¡}|j|d}n0d|jkr|j dd¡ d¡}|j|d ¡ }d
|jkrFtj |jd
 d¡}|j|d}| d¡j	t
dƒd}|S )NrB   z-1rC   r1   rD   )rE   rF   )rG   )rH   rJ   z%Y-%m-%d)Zeffective_date__lter   Úeffective_date)r{   )r    r5   r9   rL   r   rM   rN   rO   rg   Úannotater   )r#   r   r    rC   rS   rB   rJ   Zvaluequerysetr   r   r   r6   ‚  s.    

z,SalaryStructureReportViewSet.queryset_filterFc          	   O   sê   |   ¡ }|  |¡}|j}|j}d|_|j dd¡|d< |j dd¡|d< ||_|j d¡rf|  |¡}	n|}	tj 	¡ }
x&|	D ]}|
|j
|d |d dB }
qzW t|ƒ}| j|
dd	}|  |j¡ |rÈ|jS ttd
|fddddd|jfgƒƒS )NTr*   r+   r,   r-   r   r{   )r   r{   )r.   r/   )r0   r1   )r2   r1   )r3   r1   )r4   r   r5   )r$   r6   r7   r8   r5   r9   r:   r   rR   rY   r   r<   r;   r)   r   r   )r#   r    r%   r=   r>   r   rZ   r7   r8   r*   r[   r\   r@   r?   r   r   r   r&   §  s6    


z&SalaryStructureReportViewSet.post_listc          	   C   sl   t j d¡}dd„ |D ƒ}xL|D ]D}| di ¡}x,|D ]$}d dd„ | |g ¡D ƒ¡||< q6W |d= q W d S )Nr`   c             S   s   g | ]}t |d  ƒ‘qS )r`   )r]   )ra   rb   r   r   r   rc   Î  s    z@SalaryStructureReportViewSet.add_extra_field.<locals>.<listcomp>rd   ú+c             S   s   g | ]}d | ‘qS )z(%s)r   )ra   rb   r   r   r   rc   Ò  s    )r   rR   rg   r9   Újoin)r#   r(   rj   r\   rk   rm   r   r   r   r)   Ì  s    

$z,SalaryStructureReportViewSet.add_extra_field)F)r   r   r   r   rT   rR   rQ   r   r   ZSalaryStructureReportSerializerrs   r_   r$   r6   r&   r)   Ú__classcell__r   r   )rz   r   rw   m  s   

%
%rw   c               @   sD   e Zd ZejejejejdœZdd„ Zdd„ Zdd„ Zdd	d
„Z	dS )Ú$DepartmentSummarySalaryReportViewSet)rV   r&   rW   rX   c             C   s   t tdƒƒS )NZ department_summary_salary_report)r]   r^   )r#   r   r   r   r_   ß  s    z3DepartmentSummarySalaryReportViewSet.get_file_titlec             C   sj  ddl m}m}m}m} | dd¡ d¡}|ddd|d|ƒ d	|d
|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d|ƒ d	|d |ƒ d	d!œ}|jf |Ž}|S )"Nr   )ÚSumÚCountÚIntegerFieldÚ
FloatFieldÚemployee__department__dept_codeZemployee__department__dept_namer   T)rM   Úbasic_salary)Zoutput_fieldÚtotal_salaryÚtotal_increaseÚtotal_deductionÚot1Úot2Úot3Ú	normal_otÚ
weekend_otÚ
holiday_otÚincreaseÚextra_increaseÚloan_increaseÚadvance_increaseÚreimbursementÚ	late_timeÚearly_leaveÚabsent_timeÚextra_deductionÚadvance_deductionÚloan_deductionÚtotal_loan_amountÚrefund_loan_amountÚunrefund_loan_amount)Z	emp_countr†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   rŽ   r   r   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r   )Údjango.db.modelsr   r‚   rƒ   r„   rg   Zorder_byr|   )r#   r   r   r‚   rƒ   r„   rg   r   r   r   Úannotate_querysetâ  s>    
z6DepartmentSummarySalaryReportViewSet.annotate_querysetc          
   C   s¶   t j d¡}dd„ |D ƒ}x–|D ]Ž}dd„ |D ƒ}|j|d d}xL|D ]D}|jrX|jnd}t |¡}	x$|D ]}
||
  |	 |
d	¡7  < qlW qHW x|D ]}
| |
d	¡||
< q–W q W d S )
Nr`   c             S   s   g | ]}t |d  ƒ‘qS )r`   )r]   )ra   rb   r   r   r   rc     s    zHDepartmentSummarySalaryReportViewSet.add_extra_field.<locals>.<listcomp>c             S   s   i | ]
}d |“qS )g        r   )ra   rb   r   r   r   ú
<dictcomp>
  s    zHDepartmentSummarySalaryReportViewSet.add_extra_field.<locals>.<dictcomp>Z	dept_code)r…   z{}r   )r   rR   rg   r   rd   rh   ri   r9   )r#   r(   Úrow_querysetrj   Z	each_deptZ
leave_dictry   Z	each_dataZ
leave_datark   rm   r   r   r   r)     s    



 
z4DepartmentSummarySalaryReportViewSet.add_extra_fieldFc          	   O   sþ   |   ¡ }|  |¡}|}|  |¡}|j}|j}d|_|j dd¡|d< |j dd¡|d< ||_|  |¡}	|j d¡rŠ| j|	dd}
t	|ƒ}n:|r¦| j|dd}
t	|ƒ}n| j|d d… dd}
t	|ƒ}|  
|
j|¡ |rÜ|
jS ttd|fdd	d
dd|
jfgƒƒS )NTr*   r+   r,   r-   )r.   r/   )r0   r1   )r2   r1   )r3   r1   )r4   r   r5   )r$   r6   rŸ   r7   r8   r5   r9   r:   r;   r<   r)   r   r   )r#   r    r%   r=   r>   r   r¡   r7   r8   r*   r?   r@   r   r   r   r&     s:    




z.DepartmentSummarySalaryReportViewSet.post_listN)F)
r   r   r   r   Z'DepartmentSummarySalaryReportSerializerrs   r_   rŸ   r)   r&   r   r   r   r   r€   Ö  s   
#r€   )+rh   rN   Úcollectionsr   rž   r   Zdjango.utils.translationr   r^   Zrest_frameworkr   Zrest_framework.responser   Zrest_framework.decoratorsr   Zrest_framework.authenticationr   r	   r
   Z!rest_framework_jwt.authenticationr   Zmysite.payroll.modelsr   r   Zmysite.payroll.apir   Zmysite.payroll.api.utils_classr   r   Z%mysite.att.models.model_leavecategoryr   rK   r   r   ZRetrieveModelMixinZDestroyModelMixinr   rU   rt   ru   rv   rw   r€   r   r   r   r   Ú<module>   s2   `G1@8i