B
    b=%                 @   s   d dl 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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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 )    N)	Aggregate)gettext_lazyactivate)mixinsserializers)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBaseAttReportSetting)Response)Q)
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__ BG:\easytimepro\master/mysite/att\api\views\views_report_halfday.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_mysql2   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_postgresql8   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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d(d) ZG d*d+ d+Zd,S )-HalfDayReportSerializerZreport_column_empCodezemp.emp_code)labelsourceZreport_column_firstNamezemp.first_nameT)r/   r0   Z
allow_nullZreport_column_lastNamezemp.last_nameZ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_attendanceDateZget_att_date_displayZreport_column_attendanceWeekdayZget_weekday_displayZreport_column_timeIntervalNameztimetable.aliasZreport_column_checkInTimeZget_check_in_displayZreport_column_checkOutTimeZget_check_out_displayZ report_column_attendanceDurationZget_duty_duration_displayZreport_column_clockInTimeZget_clock_in_displayZreport_column_clockOutTimeZget_clock_out_displayZreport_column_totalTimeDurationZget_total_time_displayZreport_column_halfDayStatusZget_half_dayc          	   C   s:  |j dkrddlm} t|jjjj}||}|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r4|j }	g }
|	r0xL|	D ]D}y|
|jjjdkrW q tk
r    |
|jjj Y qX qW d|
S dS |j S )N   r   )	C_HOLIDAYz%sz%report_exceptionDisplay_(%(holiday)s)holidayr      Zreport_exceptionDisplay_day_off   Zreport_exceptionDisplay_weekend,r$   )Zday_offmysite.att.global_cacher2   strZempZ
departmentZcompanyidgetlocationupdateatt_date_Zpayloadexception_setallindexitemcategoryZcategory_name	Exceptionappendjoin)r   objr2   
company_idZall_holidaysZholidaysr;   Zlocation_holidaysr3   
exceptionsZexception_namesZexcepr!   r!   r"   get_att_exception_   s:    







z)HalfDayReportSerializer.get_att_exceptionc               @   s   e Zd ZeZdZdS )zHalfDayReportSerializer.Meta)Zuuidemp_code
first_name	last_namegender	dept_code	dept_nameposition_codeposition_namer=   weekday	timetablecheck_in	check_outclock_in	clock_out
total_timeZdurationduty_durationhalf_dayN)r*   r+   r,   r
   modelZfieldsr!   r!   r!   r"   Meta   s   r\   N)r*   r+   r,   r   Z	CharFieldr>   rJ   rK   rL   rM   rN   rO   rP   rQ   r=   rR   rS   rT   rU   rY   rV   rW   rX   rZ   rI   r\   r!   r!   r!   r"   r.   ?   s@    r.   c                   sV   e Zd ZeZejjdd dZ	e
ZeedZ fddZdd Zd	d
 Z  ZS )HalfDayReportViewSetF)Zhalf_day__isnullr=   )listZexportc                s   t t|  }| jjj}| jjjs6d|i}|jf |}| jjjs| jjj	}| jjj
}| jjj}| rv|j| d}| r|j| d }| r|j| d}tt|d}|dkr|ttdtd dB ttdB }|S )NZemp__company_id)Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__status)r   r]   get_querysetZrequestuserZcurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsr?   Zdistinctr8   r   r:   r   r   r   )r   querysetrG   Zbase_filterZ	auth_deptZ	auth_areaZauth_posr_   )r    r!   r"   ra      s(    





 z!HalfDayReportViewSet.get_querysetc             C   s   | j | jtS )N)serializer_dictr:   actionr   )r   r!   r!   r"   get_serializer_class   s    z)HalfDayReportViewSet.get_serializer_classc             C   s   t d tdS )NZenZmenu_att_halfdayReport)r   r>   )r   r!   r!   r"   get_file_title   s    z#HalfDayReportViewSet.get_file_title)r*   r+   r,   r
   r[   Zobjectsrc   Zselect_relatedZorder_byre   r	   Zfilter_classr.   rf   ra   rh   ri   r-   r!   r!   )r    r"   r]      s   r]   ) ZjsonZdjango.db.models.aggregatesr   Zdjango.utils.translationr   r>   r   Zrest_frameworkr   r   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r	   Zmysite.att.modelsr
   r   Zrest_framework.responser   Zdjango.db.modelsr   r7   r   Zmysite.admin.modelsr   r   r   ZModelSerializerr.   ZListModelMixinr]   r!   r!   r!   r"   <module>   s   +I