B
    b                 @   s   d dl 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mZ d dlmZ d dlmZ d dlmZ d d	l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)gettext_lazy)	TruncDate)Count	Aggregate	TextField)mixinsserializers)NoneSerializer)UtilGenericViewSet)Transaction)short_date_formatc                   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STUFFa^  %(function)s((
            SELECT ',' + RIGHT(CONVERT(NVARCHAR(20), a.[{column}], 120), 8) 
            FROM [{table}] as a
            WHERE a.[emp_id]  = [{table}].[emp_id] and CONVERT(char(10), a.[{column}], 101) = 
            CONVERT(datetime, CONVERT(char(10), [{table}].[{column}], 101), 101) 
            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__ HG:\easytimepro\master/mysite/base\api\viewsets\dashboard_present_list.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listaggzu%(function)s(substr(to_char(%(expressions)s,'YYYY-MM-DD hh24:mi:ss'), 12, 8), ',')  within group(order by PUNCH_TIME)Z	WM_CONCATzM%(function)s(substr(to_char(%(expressions)s,'YYYY-MM-DD hh24:mi:ss'), 12, 8)))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_CONCATz3%(function)s(SUBSTRING(%(expressions)s, 12, 8), ''))r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   as_mysql3   s    zGroupContact.as_mysqlc                s.   d| _ d| _tt| j||f|\}}||fS )NZARRAY_TO_STRINGzC%(function)s(ARRAY_AGG(to_char(%(expressions)s,'hh24:mi:ss')), ','))r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   as_postgresql9   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ZejeddddZdd ZG dd dZdS )DailyPresentSerializerZreport_column_empCodeemp__emp_code)labelsourceZreport_column_firstNameemp__first_nameT)r,   r-   Z
allow_nullZreport_column_lastNameemp__last_nameZreport_column_nickNameemp__nicknameZreport_column_departmentCodeemp__department__dept_codeZreport_column_departmentNameemp__department__dept_nameZreport_column_positionCodeemp__position__position_codeZreport_column_positionNameemp__position__position_nameZreport_column_attendanceDate)r,   Zreport_column_punchTimetime_setr   )r,   r-   defaultc             C   s   | dd }|sdS t|S )N
punch_dater    )getr   )r   objatt_dater   r   r   get_att_dateP   s    z#DailyPresentSerializer.get_att_datec               @   s   e Zd ZeZdZdS )zDailyPresentSerializer.Meta)
emp_code
first_name	last_namenickname	dept_code	dept_nameposition_codeposition_namer:   	punch_setN)r&   r'   r(   r   modelZfieldsr   r   r   r   MetaV   s   rF   N)r&   r'   r(   r   Z	CharField_r<   r=   r>   r?   r@   rA   rB   rC   ZSerializerMethodFieldr:   rD   r;   rF   r   r   r   r   r*   @   s    r*   c                   s:   e Zd ZeZej ZdeiZ	dd Z
 fddZ  ZS )DailyPresentViewSetlistc             C   s   | j | jtS )N)serializer_dictr8   actionr	   )r   r   r   r   get_serializer_classe   s    z(DailyPresentViewSet.get_serializer_classc       	         sB  ddl m} tt|  }t| jj| rd| jjji}|j	f |}| jjj
si }| jjj}| jjj}| rz| |d< | r| |d< |r|j	f |}| }n|j	| jjjd}tj }|tjdd }|j	| | fd	jd d
}|jtdd}|dddddddddd
dd}|jtdt dd}|S )Nr   )get_user_modelZemp__company_idZemp__department__inZemp__area__in)r<      )Zdays)Zpunch_time__range)ZempZ
punch_time)r7   Zemp_idr+   r.   r/   r0   Zemp__genderr1   r2   r3   r4   r7   )Zoutput_field)r5   )Zdjango.contrib.authrM   r   rH   get_queryset
isinstanceZrequestuserZcurrent_companyfilterZis_superuserZget_auth_deptZget_auth_areaexistsallZdistinctr<   datetimenowZ	timedeltadateZexcludeZannotater   valuesZorder_byr   r   )	r   rM   querysetZbase_filterfiltersZ	auth_deptZ	auth_arearV   Ztmw)r   r   r   rO   i   s<    




 z DailyPresentViewSet.get_queryset)r&   r'   r(   r   rE   ZobjectsZselect_relatedrY   r*   rJ   rL   rO   r)   r   r   )r   r   rH   \   s
   
rH   )rU   Zdjango.utils.translationr   rG   Zdjango.db.models.functionsr   Zdjango.db.modelsr   r   r   Zrest_frameworkr   r   Zmysite.att.api.serializersr	   Zmysite.att.api.utils_classr
   Zmysite.iclock.modelsr   Zmysite.att.utilsr   r   ZModelSerializerr*   ZListModelMixinrH   r   r   r   r   <module>   s   -