B
    c@              	   @   s   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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mZ dddddddddZG dd dej Z!G dd dej"eZ#dS )    )datetime)gettext_lazyactivate)mixinsserializers)Response)QCaseWhenValue	TextField)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBase)get_item_name_and_symbolget_item_symbols)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGZInZOut)IO012345c               @   s  e Zd ZejedddZejeddddZejedd	ddZejed
dddZ	ejeddddZ
ejeddddZejeddddZejeddddZejeddddZejeddddZejedddZejedddZejeddZejeddddZejed d!ddZejed"d#ddZejed$d%ddZejed&d'ddZejed(d)ddZejed*d+ddZejed,d-ddZejed.d/ddZejed0d1ddZejed2d3ddZejed4d5ddZejed6d7ddZ ejed8d9dd:d;Z!ejed<d=dd:d;Z"ejed>d?dd@d;Z#ejedAdBdd@d;Z$ejedCdDdd@d;Z%ejedEdFdd@d;Z&ejedGdHdd@d;Z'ejedIdJdd@d;Z(ejedKdLddZ)ejedMdNddZ*ejedOdPddZ+ejedQdRddZ,ejedSdTdd:d;Z-ejedUdVdd:d;Z.ejedWdXdd:d;Z/ejedYdZdd:d;Z0ejed[d\dd:d;Z1ejed]d^dd:d;Z2ejed_d`dd:d;Z3ejedadbdd:d;Z4ejedcdddd:d;Z5ejededZ6dfdg Z7dhdi Z8G djdk dkZ9dlS )mDailyAttendanceSerializerZreport_column_empCodezemp.emp_code)labelsourceZreport_column_firstNamezemp.first_nameT)r   r    
allow_nullZreport_column_lastNamezemp.last_nameZreport_column_nickNamezemp.nicknameZreport_column_genderzemp.get_gender_displayZreport_column_departmentCodezemp.department.dept_codeZreport_column_departmentNamezemp.department.dept_nameZreport_column_positionCodezemp.position.position_codeZreport_column_positionNamezemp.position.position_nameZreport_column_timeIntervalNameztimetable.aliasZreport_column_attendanceDateZget_att_date_displayZreport_column_attendanceWeekdayZget_weekday_displayZreport_column_exception)r   Zreport_column_checkInTimeZget_check_in_displayZreport_column_checkOutTimeZget_check_out_displayZreport_column_clockInTimeZget_clock_in_displayZreport_column_clockOutTimeZget_clock_out_displayZreport_column_totalTimeDurationZget_total_time_displayZreport_column_dutyWorkedTimeZget_duty_worked_displayZreport_column_actualWorkedTimeZget_actual_worked_displayZreport_column_unscheduledZget_unscheduled_displayZreport_column_remainingZget_remaining_displayZ!report_column_totalWorkedDurationZget_total_worked_displayZreport_column_timetableDurationZget_duration_displayZreport_column_workDayZget_work_day_displayZ report_column_attendanceDurationZget_duty_duration_displayZreport_column_breakOutTimeZget_break_out )r   r    r!   defaultZreport_column_breakInTimeZget_break_inZreport_column_breakTimeDurationZget_break_durationr   Z%report_column_actualBreakTimeDurationZget_actual_breakZreport_column_breakTimeZget_taken_breakZreport_column_breakLateDurationZget_break_lateZ%report_column_breakEarlyLeaveDurationZget_break_early_leaveZ%report_column_breakTimeAbsentDurationZget_break_absentZreport_column_lateDurationZget_late_displayZ report_column_earlyLeaveDurationZget_early_leave_displayZreport_column_absentDurationZget_absent_displayZreport_column_leaveDurationZget_leave_displayZreport_column_normalWorkTimeZget_normal_wtZreport_column_normalOvertimezovertime.get_normal_ot_displayZreport_column_weekendOvertimezovertime.get_weekend_ot_displayZreport_column_holidayOvertimezovertime.get_holiday_ot_displayzTotal OTzovertime.get_total_ot_displayZreport_column_overtimeLevel1Z
get_ot_lv1Zreport_column_overtimeLevel2Z
get_ot_lv2Zreport_column_overtimeLevel3Z
get_ot_lv3Zreport_column_attendance_statusattendance_status_Zreport_column_punchTimec          	   C   s^  |j dkrddlm} y|| jd jj}W n    || jd jj}Y nX |di }|jj	}|r||j
i }|| ||jd }|rdtdd|d i  S n|j d	krdtd
 S |j dkrdtd S |j dkrX|j }g }	|rTxP|D ]H}
y|	|
jjjdkrW n& tk
rB   |	|
jjj Y nX  qW d|	S dS |j S )N   r   )	C_HOLIDAYrequestz%sz%report_exceptionDisplay_(%(holiday)s)holidayalias   Zreport_exceptionDisplay_day_off   Zreport_exceptionDisplay_weekend,r"   )day_offmysite.att.global_cacher&   getcontextusercurrent_company
company_idemplocationidupdateatt_date_Zpayloadexception_setallindexitemcategoryZcategory_name	Exceptionappendjoin)selfobjr&   Zall_holidaysZholidaysr5   Zlocation_holidaysr(   
exceptionsZexception_namesZexcep rD   IG:\easytimepro\master/mysite/att\api\views\view_report_dailyattendance.pyget_att_exceptionw   s>    






z+DailyAttendanceSerializer.get_att_exceptionc             C   s   dd l }ddlm} ddlm}m} |j}|j ||jj	}|j ||jj
}|jj|j||fdd}	g }
xZ|	D ]R}||j}t|jd}|jrd|jj d }nd}|d	 | | }|
| qtW d
|
}|S )Nr   )Transaction)short_date_formatshort_time_format)r4   Zpunch_time__range
punch_timer"   ():z, )r   Zmysite.iclock.modelsrG   mysite.att.utilsrH   rI   r8   Zcombinetimeminmaxobjectsfilterr4   order_byrJ   
PUNCH_DICTr/   Zpunch_stateZterminalr)   r?   r@   )rA   rB   r   rG   rH   rI   r8   Z	from_dateZto_dateZtransaction_queryZpunch_lstZp_timeZp_stateZ
p_terminalZpunch_detail	punch_setrD   rD   rE   get_punch_set   s&    


z'DailyAttendanceSerializer.get_punch_setc               @   s   e Zd ZeZdZdS )zDailyAttendanceSerializer.Meta)1Zuuidemp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_namer8   weekdayatt_exception	timetablecheck_in	check_outclock_in	clock_out
total_timeduty_wt	actual_wtunscheduledtotal_workeddurationduty_duration	break_outbreak_inbreak_durationactual_breaktaken_break
break_latebreak_earlybreak_absentlateearly_leaveabsentwork_day	remainingleave	normal_wt	normal_ot
weekend_ot
holiday_otot_lv1ot_lv2ot_lv3attendance_statusrW   total_otN)__name__
__module____qualname__r   modelZfieldsrD   rD   rD   rE   Meta   s   r   N):r   r   r   r   Z	CharFieldr9   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rd   r8   rb   ZSerializerMethodFieldrc   re   rf   rg   rh   ri   rj   rk   rl   r|   rm   rn   r{   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r}   r~   r   r   r   r   r   r   r   r   rW   rF   rX   r   rD   rD   rD   rE   r      s   




"r   c                   sv   e Zd ZeZej  ddZ	e
ZdgZeedZdZ fddZdd	 Zd
d Zdd Zdd Zdd Z  ZS )DailyAttendanceReportViewSetemp_idr8   ZRemarks)listZexport)rx   rn   ry   rz   rn   ro   r{   ri   rj   rk   rl   r|   rs   rt   ru   rv   rw   r}   rm   r~   rr   r   r   r   r   r   r   r   c                s   t t|  }| jjj}| jjjs|j|d}| jjjs| jjj	}| jjj
}| jjj}i }| rn| |d< | r| |d< | r| |d< |r|jf | }tt|d}|dkr|ttdtd dB ttdB }|S )N)Zemp__company_idZemp__department__inZemp__area__inZemp__position__in
resign_empr   )Zemp__status)superr   get_querysetr'   r1   r2   Zis_employeerS   Zis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsr:   Zdistinctstrr   r/   r   r   r   )rA   querysetr3   Z	auth_deptZ	auth_areaZauth_posfiltersr   )	__class__rD   rE   r      s,    





 z)DailyAttendanceReportViewSet.get_querysetc             C   s  | j jj}| j}dttdddttd||dtdddttd||dtddtd	d
tdttd||dtdttd||dtdttd||dtdtd	dtdtd	dtdttd||dtdttd||dtdttd||dtdttd||dtddttd||dtddttd||dt di}|j	f |}x\|D ]T}|j
d	kr\t|jj|jj|jjd}t|j||| j}|ptd || j|_
q\W |S )!Nr$   r%   FZ	holiday_p)r-   clock_in__isnullclock_out__isnullthenr+   Zweekdayoff_pr   Zget_attendance_status)r-   	leave__gtr   r*   r-   )r-   r   Zweekendr(   )half_dayr   )r   r   rz   )Z
absent__gtr   Zlate_in)Zlate__gtr   Z	early_out)Zearly_leave__gtr   Zpresent)Zduty_worked__gtr   TZmiss_in)r   r   r   Zmiss_out)Zoutput_field)yearmonthdayr   )r'   r1   r2   file_formatr	   r
   r   r   r   Zannotater$   r   r8   r   r   r   r   r   )rA   r   r3   r   valuesdatar8   Zattendance_symbolrD   rD   rE   annotate_queryset   s:    



z.DailyAttendanceReportViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetr   r   )rA   r   rD   rD   rE   get_export_queryset  s    
z0DailyAttendanceReportViewSet.get_export_querysetc             O   s`   |  |  }| |}| |}|d k	rH| j|dd}|j}| |S | j|dd}t|jS )NT)Zmany)r   r   r   Zpaginate_querysetZget_serializerr   Zget_paginated_responser   )rA   r'   argskwargsr   ZpageZ
serializerresultrD   rD   rE   r     s    


z!DailyAttendanceReportViewSet.listc             C   s   | j | jtS )N)serializer_dictr/   actionr   )rA   rD   rD   rE   get_serializer_class  s    z1DailyAttendanceReportViewSet.get_serializer_classc             C   s   t d tdS )NZenZdaily_attendance_report)r   r9   )rA   rD   rD   rE   get_file_title   s    z+DailyAttendanceReportViewSet.get_file_title)r   r   r   r   r   rR   r   Zselect_relatedrT   r   r   Zfilter_classZexport_headers_pror   r   Zsummary_fieldsr   r   r   r   r   __classcell__rD   rD   )r   rE   r      s   "r   N)$r   Zdjango.utils.translationr   r9   r   Zrest_frameworkr   r   Zrest_framework.responser   Zdjango.db.modelsr   r	   r
   r   r   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   Zmysite.att.modelsr   rN   r   r   r.   r   Zmysite.admin.modelsr   r   rU   ZModelSerializerr   ZListModelMixinr   rD   rD   rD   rE   <module>   s*    '