B
    gca              '   @   s  d dl 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 d dlmZmZmZ d dlmZ d dl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' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@ d dl=mAZAmBZB dd ZCdd ZDed d! ZEed"d# ZFd$d% ZGed&d' ZHed(d) ZId*d+ ZJed,d- ZKed.d/ ZLd0d1 ZMed2d3 ZNed4d5 ZOed6d7 ZPd8d9 ZQed:d; ZRed<d= ZSed>d? ZTed@dA ZUedBdC ZVedDdE ZWedFdG ZXedHdI ZYedJdK ZZedLdM Z[dNdO Z\dPdQ Z]eej^dRdS Z_dTdU Z`dVdW ZadXdY ZbedZd[ Zced\d] Zdd^d_ Zed`da ZfedbeCddceddeDddcedeeQd9dcedfeNd3dcedgeOd5dcedhePd7dcedeeQd9dcedieEd!dcedjeFd#dcedkeGd%dcedleHd'dcedmeId)dcedneJd+dcedoeKd-dcedpeLd/dcedqeMd1dcedreTedsd?dcedteRd;dcedueUdAdcedveVedsdCdcedweWedsdEdcedxeXedsdGdcedyeYedsdIdcedzeZd{d|ed}e	d~ddedeSddcede[ddcede_ede`ddcedeaddcedebddcedecd[dcededd]dcedeed_dcedefdadcg#ZgdS )    N)SumF)gettext_lazy)urlinclude)TemplateResponse)login_required)HttpResponseHttpResponseForbiddenJsonResponse)Q)transaction)datedatetimetime	timedelta)AdminRuntimeWarning)GetLeaveClasses)insert_non_model_permission)LeaveSchedule)AttRule)Employee)Leave)LeaveSettings)LeaveCategory)AUDIT_SUCCESSREFUSECANCEL_AUDIT_SUCCESS)department_scheduleemployee_schedule)ShiftDetail)TempSchedule)TimeInterval)ReimbursementPurposeTypeAllowanceType)check_continuous_days$check_all_applied_days_have_schedulecheck_leave_balance)%non_continuous_days_leave_combination!continuous_days_leave_combinationc       	      C   s8  ddl m} ddlm} ddlm} | j}|j}|jr2|j	j
|d }| j dkr|rh|d|}dd	 |jD }t| d
||dS | j dkr2| jd|}|s| }| j|_|d|i |  tddtd d}|r.||r.t| dr|| j|j< n|j|j||j|j|j d |S t! S )Nr   )settings)translation)EmployeeProfile)empGETlanguagec             S   s    g | ]}|d  d|d  fqS )r   z%s    ).0Z_lngr2   r2   *G:\easytimepro\master/mysite/staff\urls.py
<listcomp>1   s    z&staff_set_language.<locals>.<listcomp>zstaff/set_language.html)r0   	languagesPOSTz%sZ%userProfile_languageChange_successful)codemsgsession)Zmax_agepathZdomain)"Zdjango.confr+   Zdjango.utilsr,   Zmysite.personnel.modelsr-   userZLANGUAGE_CODEis_employeeobjectsfilterfirstmethodupperZget_preferencesZ	LANGUAGESr   r7   getr.   Zset_preferencessaver   _Zcheck_for_languagehasattrr:   ZLANGUAGE_SESSION_KEYZ
set_cookieZLANGUAGE_COOKIE_NAMEZLANGUAGE_COOKIE_AGEZLANGUAGE_COOKIE_PATHZLANGUAGE_COOKIE_DOMAINr
   )	requestr+   r,   r-   r<   Z	lang_codeZepr6   retr2   r2   r4   staff_set_language&   sB    
rI   c          
   C   s  | j }|rl|jrl| j dkr.t| di S | j dkrlyddlm} | jdd }|svt	ddt
d	 d
S | jdd }| jdd }|st	ddt
d d
S ||krt	ddt
d d
S |j|dst	ddt
d d
S y(|| |  ||  t	ddd
S  tk
rJ } zt	ddt
d d
S d }~X Y nX W n   dd l}|  Y nX t	ddt
d d
S )Nr/   zstaff/set_password.htmlr7   r   )logoffZold_passwordz%sZthe_old_pwd_is_required)r8   r9   Znew_passwordZconfirm_passwordZthe_new_pwd_is_requiredZthe_two_password_are_different)Zraw_passwordZthe_old_pwd_is_wrong Zsetting_employee_pwd_failedZsystem_exception_illegal_login)r<   r=   rA   rB   r   Zmysite.authurlsrJ   r7   rC   r   rE   Zcheck_passwordZset_passwordrD   	Exception	traceback	print_exc)rG   r<   rJ   Zold_pwdZnew_pwdZconfirm_pwderN   r2   r2   r4   staff_set_passwordM   s:    
(rQ   c             C   sd   t jj| jjd }|rNt|d d }t|d d }dd||d}n
ddd}t| d	|S )
N)employee_idr   leave_detailsZmonthly_leave_detailsZstaffLeaveRequestleave)
model_namemodelZ
leave_typeZmonthly_leave_type)rU   rV   zstaff/leave/request_grid.html)	r   r>   r?   r<   idvaluesjsonloadsr   )rG   ZleavequerysetZleavedetailZmonthlyLeaveDetailscontextr2   r2   r4   staff_leave_requestm   s    
r\   c             C   s   ddd}t | d|S )NZstaffLeaveApproverT   )rU   rV   zstaff/leave/approve_grid.html)r   )rG   r[   r2   r2   r4   staff_leave_approve   s    r]   c             C   sZ   ddl m} |jj| jjd }|rB|d d }| jd|d}n| jdd}t| d|S )	Nr   )r   )rR   rS   Zstaff_leave)r<   rU   Zleave_schedule_data)r<   rU   zstaff/leave/add.html)Z%mysite.att.models.model_leavescheduler   r>   r?   r<   rW   rX   r   )rG   r   Zleave_schedule_queryZleave_schedule_typer[   r2   r2   r4   staff_leave_add   s    
r^   c             C   s   ddd}t | d|S )NZstaffOvertimeRequestovertime)rU   rV   z staff/overtime/request_grid.html)r   )rG   r[   r2   r2   r4   staff_overtime_request   s    r`   c             C   s   ddd}t | d|S )NZstaffOvertimeApprover_   )rU   rV   z staff/overtime/approve_grid.html)r   )rG   r[   r2   r2   r4   staff_overtime_approve   s    ra   c             C   s   | j dd}t| d|S )Nstaff_manuallog)r<   rU   zstaff/overtime/add.html)r<   r   )rG   r[   r2   r2   r4   staff_overtime_add   s    rc   c             C   s   ddd}t | d|S )NZstaffManualLogRequest	manuallog)rU   rV   z!staff/manuallog/request_grid.html)r   )rG   r[   r2   r2   r4   staff_manuallog_request   s    re   c             C   s   ddd}t | d|S )NZstaffManualLogApproverd   )rU   rV   z!staff/manuallog/approve_grid.html)r   )rG   r[   r2   r2   r4   staff_manuallog_approve   s    rf   c             C   s   | j dd}t| d|S )Nrb   )r<   rU   zstaff/manuallog/add.html)r<   r   )rG   r[   r2   r2   r4   staff_manuallog_add   s    rg   c             C   s   ddd}t | d|S )NZstaffChangeScheduleApproveZchangeschedule)rU   rV   z&staff/changeschedule/approve_grid.html)r   )rG   r[   r2   r2   r4   staff_changeschedule_approve   s    rh   c             C   s   ddd}t | d|S )NZstaffTrainingRequesttraining)rU   rV   z staff/training/request_grid.html)r   )rG   r[   r2   r2   r4   staff_training_request   s    rj   c             C   s   ddd}t | d|S )NZstaffTrainingApproveri   )rU   rV   z staff/training/approve_grid.html)r   )rG   r[   r2   r2   r4   staff_training_approve   s    rk   c             C   s   | j dd}t| d|S )NZstaff_training)r<   rU   zstaff/training/add.html)r<   r   )rG   r[   r2   r2   r4   staff_training_add   s    rl   c             C   s   | j dd}t| d|S )NZstaff_transactionReport)r<   rU   z#staff/report/transactionreport.html)r<   r   )rG   r[   r2   r2   r4   staff_transaction   s    rm   c             C   s   | j dd}t| d|S )Nstaff_leavedetailsReport)r<   rU   z$staff/report/leavedetailsreport.html)r<   r   )rG   r[   r2   r2   r4   rn      s    rn   c             C   s   | j dd}t| d|S )NZstaff_scheduledLogReport)r<   rU   z$staff/report/scheduledlogreport.html)r<   r   )rG   r[   r2   r2   r4   staff_scheduledlog  s    ro   c             C   s   | j dd}t| d|S )NZstaff_timeCardReport)r<   rU   z staff/report/timecardreport.html)r<   r   )rG   r[   r2   r2   r4   staff_timecard  s    rp   c             C   s   | j dd}t| d|S )NZstaff_totalTimeCardReport)r<   rU   z%staff/report/totaltimecardreport.html)r<   r   )rG   r[   r2   r2   r4   staff_attdetail  s    rq   c             C   sD   ddl m} | jdd}|j dd}|d|i t| d|S )	Nr   )r   Zstaff_empSummaryReport)r<   rU   rW   Zcategory_namecategoryz'staff/report/employeesummaryreport.html)mysite.att.modelsr   r<   r>   allrX   updater   )rG   r   r[   Zobjsr2   r2   r4   staff_summary   s    rv   c             C   s   | j dd}t| d|S )NZstaff_mulTransactionReport)r<   rU   z+staff/report/multipletransactionreport.html)r<   r   )rG   r[   r2   r2   r4   staff_multipletransaction,  s    rw   c             C   s   | j dd}t| d|S )NZstaff_mulBreakTimeReport)r<   rU   z!staff/report/breaktimereport.html)r<   r   )rG   r[   r2   r2   r4   staff_breaktime5  s    rx   c             C   s   t d| jjd}tt|S )Nr1   )
company_id)r   r<   current_companyr	   rY   dumps)rG   resr2   r2   r4   getLeaveClass>  s    r}   c             C   s   | j dd}t| d|S )Nstaff_holidaydetailsReport)r<   rU   z&staff/report/holidaydetailsreport.html)r<   r   )rG   r[   r2   r2   r4   r~   D  s    r~   c       
      C   s   dddddddg}t | |||d ||d	 |d
 |d ||d |d |d |d }	|	dkr|d  |kr|dkr~t|| n
t|| tjj|d jdjt	d|d  d d S )Nr   r1                  r.   Zmax_leave_per_monthleave_scheduleZleave_monthly_scheduleZeffective_dateZincrement_dateZcontinous_daysZleave_type_for_dates
start_time)rR   leave_balance
total_days)r   )
r(   Zweekdayr)   r*   r   r>   r?   rW   ru   r   )
full_month_calleave_cal_start_dateleave_cal_end_datedatastatusrr   continuous_days
leave_dataZweekday_valuesZ	check_balr2   r2   r4   update_leave_settingsM  s    

r   c             C   sD   t | d | d | d |j|| d | d |jd|d	}|  d S )Nr.   r   end_timer   r   zday-type)	employeer   r   Zcategory_idleave_payment_typedaysr   day_typeapply_reason)r   rW   r7   rC   rD   )r   rr   r   rG   leave_apply_reasonobjr2   r2   r4   
save_leave^  s    
r   c          
   C   s  | j d}tjj|d}|j|jjdg}|jjj}tjjdt	|
dd d }t|d d	 }d
| krt|d
 }nd}d }}	d| krt|d }t|d }	| j d}
| j d}t| j d}| j d}| j d}tjj|d}|dkrttdyt| j d}W n   ttdS t|dkr\ttdS tt| }|dkr
yZt||||||	}t|g||||
|}x|D ]}t|||| | qW ttdddS  tk
r } ztd t|S d }~X Y nX nyRd| kr*t|d }nd}|d rDt|d nd}|d r^t|d nd}t||||||	}t|g||||
|}x|D ]}||	 |d< |d< |dkrt|||| | n|d dkrttd|d  j  t!|d! |d" krttd#|d  j |d$ f dd%g}|||||d&}t"|||||||| qW ttdddS  tk
r } ztd t|S d }~X Y nX d S )'Nr   )rW   )rW   Zdepartment_idZglobal_att_rule_-rL   )Z
param_namer   Zparam_valueZleavemng_conditionerrorprefixsuffixr   zday-typer   rr   r   Zatt_leave_management_conditionZleave_applied_dataZatt_leave_apply_date_validationr1   rK   ZSuccess)rH   messageTZ	fullmonthZleave_calculation_start_dayZleave_calculation_end_dayr   Z&att_leave_schedule_settings_validationr.   r   r   Z!att_leave_balance_used_validationr   r   )rr   r   r   reasoncompany)#r7   rC   r   r>   rW   
departmentr   r   r?   strreplacerX   rY   rZ   keysintr   r   rE   r	   lencollectionsOrderedDictsorteditemsr&   r'   r   r{   rM   r   Zset_rollbackZ
first_namefloatr   )rG   Zuser_idr.   r   rz   Z	leave_calZleave_cal_jsonZleave_management_conditionr   r   r   r   r   Zleave_categoryr   rr   Zleave_apply_detailsr   Zemployee_leave_datar   rP   r   r   r   r   r   r2   r2   r4   staff_leave_multiple_addk  s    
"








r   c             C   s   | j dd}t| d|S )Nstaff_scheduledetailsReport)r<   rU   z'staff/report/scheduledetailsreport.html)r<   r   )rG   r[   r2   r2   r4   r     s    r   c             C   s   | j dd}t| d|S )Nstaff_scheduletrackReport)r<   rU   z%staff/report/scheduletrackreport.html)r<   r   )rG   r[   r2   r2   r4   r     s    r   c             C   s   | j dd}t| d|S )Nstaff_unscheduletrackReport)r<   rU   z'staff/report/unscheduletrackreport.html)r<   r   )rG   r[   r2   r2   r4   r     s    r   c             C   s   ddd}t | d|S )NZstaffReimbursementRequestreimbursement)rU   rV   z%staff/reimbursement/request_grid.html)r   )rG   r[   r2   r2   r4   staff_reimbursement_request  s    r   c             C   s   ddd}t | d|S )NZstaffReimbursementApprover   )rU   rV   z%staff/reimbursement/approve_grid.html)r   )rG   r[   r2   r2   r4   staff_reimbursement_approve  s    r   c             C   s   y| j j}W n   | j jjj}Y nX tjj|d }|rVdd |D }t	
|}nd}tjj|d }|rdd |D }t	
|}nd}| j d||d}t| d|S )	N)ry   c             S   s   g | ]}|d  |d dqS )rW   allowance_name)rW   r   r2   )r3   xr2   r2   r4   r5     s    z+staff_reimbursement_add.<locals>.<listcomp>rL   c             S   s   g | ]}|d  |d dqS )rW   purpose_name)rW   r   r2   )r3   r   r2   r2   r4   r5     s    r   )r<   rU   allowance_typpurpose_typzstaff/reimbursement/add.html)r<   rz   r   r   rW   r%   r>   r?   rX   rY   r{   r$   r   )rG   ry   allowanceTypeQuerysetallowanceTypepurposeTypeQuerysetpurposeTyper[   r2   r2   r4   staff_reimbursement_add  s&    r   c             C   s   | j d }y| jj}W n   | jjjj}Y nX tjj|d	 }|r`dd |D }t
|}nd}tjj|d	 }|rdd |D }t
|}nd}| jd||d|d	}t| d
|S )NrW   )ry   c             S   s   g | ]}|d  |d dqS )rW   r   )rW   r   r2   )r3   r   r2   r2   r4   r5     s    z,staff_reimbursement_edit.<locals>.<listcomp>rL   c             S   s   g | ]}|d  |d dqS )rW   r   )rW   r   r2   )r3   r   r2   r2   r4   r5     s    r   False)r<   rU   r   r   addrW   zstaff/reimbursement/add.html)r/   r<   rz   r   r   rW   r%   r>   r?   rX   rY   r{   r$   r   )rG   rW   ry   r   r   r   r   r[   r2   r2   r4   staff_reimbursement_edit  s,    
r   z^setLanguage/$)namez^changePassword/$z^training_add/$z^staff_changeschedule_approve/$z^staff_training_request/$z^staff_training_approve/$z^staff_leave_request/$z^staff_leave_approve/$z^leave_add/$z^staff_overtime_request/$z^staff_overtime_approve/$z^staff_overtime/$z^staff_manuallog_request/$z^staff_manuallog_approve/$z^staff_manuallog/$z^staff_scheduledlog/$Zreportz^staff_transaction/$z^staff_timecard/$z^staff_attdetail/$z^staff_summary/$z^staff_multipletransaction/$z^staff_breaktime/$z^get_leave_class/$Zget_leave_class)viewr   z^api/zmysite.staff.api.urlsZbiotime_staff_api)	namespacez^staff_leavedetails/$Zstaff_leavedetailsz^staff_holidaydetails/$Zstaff_holidaydetailsz^staff_leave_mul_add/$z^staff_scheduledetails/$Zstaff_scheduledetailsz^staff_scheduletrack/$Zstaff_scheduletrackz^staff_unscheduletrack/$Zstaff_unscheduletrackz^staff_reimbursement_request/$z^staff_reimbursement_approve/$z^staff_reimbursement/$z^staff_reimbursement_edit/$)hrY   Zdjango.db.modelsr   r   Zdjango.utils.translationr   rE   Zdjango.conf.urlsr   r   Zdjango.template.responser   Zdjango.contrib.auth.viewsr   Zdjango.http.responser	   r
   r   r   r   Z	django.dbr   r   r   r   r   Zmysite.admin.exceptionsr   Zmysite.att.att_paramr   Zmysite.admin.utilsr   rs   r   Zmysite.att.models.model_attruler   Z&mysite.personnel.models.model_employeer   Zmysite.att.models.model_leaver   Z%mysite.att.models.model_leavesettingsr   Z%mysite.att.models.model_leavecategoryr   Zmysite.att.models_choicesr   r   r   Zmysite.att.calc.utilsr   r   Z#mysite.att.models.model_shiftdetailr    Z$mysite.att.models.model_tempscheduler!   Z$mysite.att.models.model_timeintervalr"   Z)mysite.payroll.models.model_reimbursementr#   r$   r%   Z mysite.att.actions.leave_actionsr&   r'   r(   r)   r*   rI   rQ   r\   r]   r^   r`   ra   rc   re   rf   rg   rh   rj   rk   rl   rm   rn   ro   rp   rq   rv   rw   rx   r}   r~   r   r   Zatomicr   r   r   r   r   r   r   r   Zurlpatternsr2   r2   r2   r4   <module>   s   ' 																S		