B
    cC                 @   s   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mZ d dl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  G dd deZ!G dd dej"Z#G dd dej$eZ%dS )    )datetime)QCaseWhenValue	TextField)	Aggregate)gettext_lazyactivate)mixinsserializers)Response)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBase)get_item_name_and_symbolget_item_symbols)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc                   s@   e Zd Z fddZ fddZ fddZ fddZ  ZS )	GroupContactc                sJ   |   d }d| _dj|j|jjd| _tt| j	||f|\}}||fS )zZ
        SQL Server 2017 Support STRING_AGG
        STRING_AGG(column, separator)
        r   ZSTUFFz%(function)s((
            SELECT ',' + [{column}]
            FROM [{table}]
            FOR xml path('')
        ), 1, 1, ''))tablecolumn)
Zget_source_expressionsfunctionformataliasZfieldZattnametemplatesuperr   as_sql)selfcompiler
connectionextra_contextZ
expressionsqlparams)	__class__ GG:\easytimepro\master/mysite/att\api\views\view_report_totaltimecard.pyr      s
    zGroupContact.as_sqlc       	         sj   ddl m} |d}|r"|d p$d}|dkr<d| _d| _nd| _d	| _tt| j||f|\}}||fS )
Nr   )	sql_utilsz7select DISTINCT(VERSION) from product_component_version z11.0ZlistaggzB%(function)s(%(expressions)s, ',') within group(order by att_date)Z	WM_CONCATz%(function)s(%(expressions)s))mysiter)   Zp_query_oner   r   r   r   r   )	r    r!   r"   r#   r)   Zrowsversionr$   r%   )r&   r'   r(   	as_oracle(   s    
zGroupContact.as_oraclec                s.   d| _ d| _tt| j||f|\}}||fS )NZGROUP_CONCATz"%(function)s(%(expressions)s, ','))r   r   r   r   r   )r    r!   r"   r#   r$   r%   )r&   r'   r(   as_mysql5   s    zGroupContact.as_mysqlc                s.   d| _ d| _tt| j||f|\}}||fS )NZARRAY_TO_STRINGz-%(function)s(ARRAY_AGG(%(expressions)s), ','))r   r   r   r   r   )r    r!   r"   r#   r$   r%   )r&   r'   r(   as_postgresql;   s    zGroupContact.as_postgresql)__name__
__module____qualname__r   r-   r.   r/   __classcell__r'   r'   )r&   r(   r      s   r   c               @   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;Z4dcdd Z5G dedf dfZ6dgS )hTotalTimeCardReportSerializerZreport_column_empCodezemp.emp_code)labelsourceZreport_column_firstNamezemp.first_nameT)r5   r6   
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)r5   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_outr*   )r5   r6   r7   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report_column_overtimeLevel1Z
get_ot_lv1Zreport_column_overtimeLevel2Z
get_ot_lv2Zreport_column_overtimeLevel3Z
get_ot_lv3Zreport_column_attendance_statusattendance_status_c          	   C   sf  |j dkrddlm} y|| jd jj}W n( tk
rV   || 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r`|j }g }	|r\xP|D ]H}
y|	|
jjjdkr"W n& tk
rJ   |	|
jjj Y nX qW d|	S dS |j S )N   r   )	C_HOLIDAYrequestz%sz%report_exceptionDisplay_(%(holiday)s)holidayr      Zreport_exceptionDisplay_day_off   Zreport_exceptionDisplay_weekend,r*   )day_offmysite.att.global_cacher;   getcontextusercurrent_company	Exception
company_idZemplocationidupdateatt_date_Zpayloadexception_setallindexitemcategoryZcategory_nameappendjoin)r    objr;   Zall_holidaysZholidaysrI   Zlocation_holidaysr=   
exceptionsZexception_namesZexcepr'   r'   r(   get_att_exception   s>    






z/TotalTimeCardReportSerializer.get_att_exceptionc               @   s   e Zd ZeZdZdS )z"TotalTimeCardReportSerializer.Meta)/Zuuidemp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_namerL   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_statusN)r0   r1   r2   r   modelZfieldsr'   r'   r'   r(   Meta   s   r   N)7r0   r1   r2   r   Z	CharFieldrM   rW   rX   rY   rZ   r[   r\   r]   r^   r_   rb   rL   r`   ZSerializerMethodFieldra   rc   rd   re   rf   rg   rh   ri   rj   rz   rk   rl   ry   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   r{   r|   r}   r~   r   r   r   r   r   rV   r   r'   r'   r'   r(   r4   B   s   




#r4   c                   sp   e Zd ZeZej  ddZ	e
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 ) TotalTimeCardReportReportViewSetemp_idrL   )listZexport)rv   rl   rw   rx   rl   rm   ry   rg   rh   ri   rj   rz   rq   rr   rs   rt   ru   r{   rk   r|   rp   r}   r~   r   r   r   r   c                s   t t|  }| jjjs| jjj}|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_emp0)Zemp__status)r   r   get_querysetr<   rE   Zis_employeerF   filterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsrN   Zdistinctstrr   rC   r   r   r   )r    querysetrH   Z	auth_deptZ	auth_areaZauth_posfiltersr   )r&   r'   r(   r      s.    





 z-TotalTimeCardReportReportViewSet.get_querysetc             C   s  | j jj}| j}dt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 )!Nr9   r:   FZ	holiday_p)rA   clock_in__isnullclock_out__isnullthenr?   Zweekdayoff_pr   Zget_attendance_status)rA   	leave__gtr   r>   rA   )rA   r   Zweekendr=   )half_dayr   )r   r   rx   )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<   rE   rF   file_formatr   r   r   r   r   r   Zannotater9   r   rL   r   r   r   r   r   )r    r   rH   r   valuesdatarL   Zattendance_symbolr'   r'   r(   annotate_queryset   s<    



z2TotalTimeCardReportReportViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetr   r   )r    r   r'   r'   r(   get_export_queryset  s    
z4TotalTimeCardReportReportViewSet.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   )r    r<   argskwargsr   ZpageZ
serializerresultr'   r'   r(   r   "  s    


z%TotalTimeCardReportReportViewSet.listc             C   s   | j | jtS )N)serializer_dictrC   actionr   )r    r'   r'   r(   get_serializer_class-  s    z5TotalTimeCardReportReportViewSet.get_serializer_classc             C   s   t d tdS )NZenZtotal_time_card_report)r
   rM   )r    r'   r'   r(   get_file_title1  s    z/TotalTimeCardReportReportViewSet.get_file_title)r0   r1   r2   r   r   Zobjectsr   Zselect_relatedZorder_byr   r   Zfilter_classr4   r   Zsummary_fieldsr   r   r   r   r   r3   r'   r'   )r&   r(   r      s   (r   N)&r   Zdjango.db.modelsr   r   r   r   r   Zdjango.db.models.aggregatesr   Zdjango.utils.translationr	   rM   r
   Zrest_frameworkr   r   Zrest_framework.responser   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   Zmysite.att.modelsr   Zmysite.att.utilsr   r   rB   r   Zmysite.admin.modelsr   r   r   ZModelSerializerr4   ZListModelMixinr   r'   r'   r'   r(   <module>   s   + 
