B
    CcD                 @   sP  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZ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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* d dl+m,Z, d dl-m.Z.m/Z/ ej01e#dZ2G dd deZ3G dd dej4Z5G dd dej6eZ7dS )    N)APIException)QCaseWhenIntegerFieldValue	TextField
FloatField)Sum	Aggregate)gettext_lazyactivate)mixinsserializers)Response)NoneSerializer)ReportGenericFilterReportUtilGenericViewSetIntegerFormatCountField)PayloadBase)ADDITION_FILE_ROOT)report_dict)CHOICE_GENDER)get_item_symboldates_function)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGZreportsc                   s@   e Zd Z fddZ fddZ fddZ fddZ  ZS )	GroupContactc                sH   d| _ d| _tt| j||f|\}}|dd}|jddd}||fS )zZ
        SQL Server 2017 Support STRING_AGG
        STRING_AGG(column, separator)
        ZSTUFFz%(function)s((
            SELECT ',' + %(expressions)s
            FROM [{table}] as {copy}
            WHERE {copy}.[emp_id] = [{table}].[emp_id]
            FOR xml path('')
        ), 1, 1, '')z[att_payloadbase]z{copy}Zatt_payloadbasea)tablecopy)functiontemplatesuperr   as_sqlreplaceformat)selfcompiler
connectionextra_contextsqlparams)	__class__ LG:\easytimepro\master/mysite/att\api\views\view_report_monthlybasicstatus.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))mysiter1   Zp_query_oner"   r#   r$   r   r%   )	r(   r)   r*   r+   r1   Zrowsversionr,   r-   )r.   r/   r0   	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/   r0   as_mysql<   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/   r0   as_postgresqlB   s    zGroupContact.as_postgresql)__name__
__module____qualname__r%   r5   r6   r7   __classcell__r/   r/   )r.   r0   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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eddddZeeddddZe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Zejed&d'dZ fd(d)Zd*d+ ZG d,d- d-Z  ZS ). MonthlyAttSheetSummarySerializerZreport_column_empCodeemp__emp_code)labelsourceZreport_column_firstNameemp__first_nameT)r>   r?   
allow_nullZreport_column_lastNameemp__last_nameZemp_field_localizedNameemp__nicknameZreport_column_gender)r>   Z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_namePresentsum_present_timespresent)r>   r?   Z
format_keyAbsentsum_absent_timesabsentzTotal Leavesum_leave_timesleaveHolidaysum_holiday_timeszHoliday Presentsum_holiday_present_timeszWeek Offsum_week_off_timeszWeek Off Presentsum_week_off_present_timesc                sL   | d}tt| j|| x*|jD ] \}}}tj||dd| j|< q$W d S )NviewT)r>   r?   rA   )popr$   r<   __init__date_periodr   	CharFieldfields)r(   argskwargsrU   r?   Zfiledr>   )r.   r/   r0   rW   a   s
    
z)MonthlyAttSheetSummarySerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r(   objr/   r/   r0   
get_genderh   s    z+MonthlyAttSheetSummarySerializer.get_genderc               @   s   e Zd ZeZdZdS )z%MonthlyAttSheetSummarySerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_nametotal_present_timestotal_absent_timestotal_leave_timestotal_holiday_timestotal_holiday_present_timestotal_week_off_timestotal_week_off_present_timesatt_dateN)r8   r9   r:   r   modelrZ   r/   r/   r/   r0   Metak   s   rt   )r8   r9   r:   r   rY   _rb   rc   rd   re   ZSerializerMethodFieldrf   rg   rh   ri   rj   r   rk   rl   rm   r   rn   ro   rp   rq   rW   ra   rt   r;   r/   r/   )r.   r0   r<   I   s2   

r<   c                   s   e Zd ZeZej  Ze	Z
dgZdgZeedZdZdZi Z fddZdd Z fd	d
Zdd Zdd Zdd Zdd Zdd Zdd Z  ZS )MonthlyBasicStatusReportViewSetZ	total_empzNo.)listZexportNc                s   | j jj}| j jj}| j jj}| j jj}tt|  j	|d}y| j jj
s| rb|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 }W n tk
r   tdY nX |S )	N)Zemp__company_id)Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__statuszPlease Check with Admin)requestusercurrent_companyZget_auth_deptZget_auth_areaZget_auth_posr$   rv   get_querysetfilterZis_superuserallZdistinctexistsstrr   r_   r   r   r   	Exceptionr   )r(   
company_idZ	auth_deptZ	auth_areaZauth_posquerysetrx   )r.   r/   r0   r}      s*    




$z,MonthlyBasicStatusReportViewSet.get_querysetc             C   s  | ddddddddd	d

dd}i }| jjdd }| jjdd }|| _|| _| j}g }|rR|rR| jjj	}t
d}tj|d|d d d}tj|d|d d d}x||krPttt|dddttd||dt|dd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t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(ttd)||d*t|d(ttd+||d,t d-||d.< ||d.|d/|d0f |tjdd17 }| j|d/ qW || _td2t d-|d3< td t d-|d4< tttdd5d6t d-|d7< tttdtdd8t d-|d9< tttddtdd:t d-|d;< tttddtdd<t d-|d=< tttddtdd:t d-|d>< td?t d-|d@< tdAt d-|dB< tttddCdDt d-|dE< |jf |}x|D ]}	t
d}tj|d| jd d d}
tj|d| jd d d}t|	d|
|| jjj	|}|r|x| D ]\}}||	|< qW q|W |S )FNZemp_idr=   r@   rB   rC   r]   rD   rE   rF   rG   Zemp__department_id
start_dateend_datez[-:\s]r2      z%Y%m%d   F	holiday_p)rr   day_offclock_in__isnullclock_out__isnullthen   Zweekdayoff_p   r   )rr   r   r   Zweekendholidayr   half_day)rr   r   r   rM   )rr   Z
absent__gtr   Zlate_in)rr   Zlate__gtr   Z	early_out)rr   Zearly_leave__gtr   rJ   )rr   Zduty_worked__gtr   TZmiss_in)rr   r   r   Zmiss_out)rr   r   r   )Zoutput_fieldz%Y/%m/%dz%m/%dz%d)daysZduty_workedrI   rL   rO   )Z	leave__gtr   rN   )r   r   rQ   )r   Ztotal_worked__gtr   rR   )r   rO   r   rS   rT   ZdurationZsum_durationZduty_durationZsum_duty_durationZwork_day)Zduration__gtr   Zsum_work_day) valuesZorder_byrz   GETr_   start_date_newend_date_newfile_formatr{   r|   recompiledatetimestrptimesubr   r   r   r   r   r   strftimeappendZ	timedeltasummary_fieldsrX   r
   r   r	   Zannotater   items)r(   r   r   r   r   r   rX   r   patternZqueryr   r   Z	data_dictkeyvalr/   r/   r0   annotate_queryset   s    



"$

  z1MonthlyBasicStatusReportViewSet.annotate_querysetc                s   | |d< t t| j||S )NrU   )r$   rv   get_serializer)r(   r[   r\   )r.   r/   r0   r      s    z.MonthlyBasicStatusReportViewSet.get_serializerc             C   s   | j | jtS )N)serializer_dictr_   actionr   )r(   r/   r/   r0   get_serializer_class   s    z4MonthlyBasicStatusReportViewSet.get_serializer_classc             C   s   t d tdS )NZenz#Monthly Status Report(Basic Report))r   ru   )r(   r/   r/   r0   get_file_title   s    z.MonthlyBasicStatusReportViewSet.get_file_titlec             C   s0   |   }| j| | |  }| |}|S )N)generate_time_mapextra_headers_translation_dictupdatefilter_querysetr}   r   )r(   time_mapr   r/   r/   r0   get_export_queryset   s
    
z3MonthlyBasicStatusReportViewSet.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_querysetr   dataZget_paginated_responser   )r(   rz   r[   r\   r   ZpageZ
serializerresultr/   r/   r0   rw     s    


z$MonthlyBasicStatusReportViewSet.listc                s  ddl m} t|| jjj}|dddid |dddid |ddd	id |d
ddid |dddid |dddid |dddid d g }t| drjdd | jj	j
D }|   }| fdd| D  |  x|D ]h}||krt| j|rt| j|}t|dr8|j||< qt|trt|drt|jdr|jj||< qW nt| jrt| j }ni }t| dr|| j xT|D ]L}	||	rt||	}
nt|	}
|	dkr|
dkrd}
||
 qW |S )Nr   )get_report_settingrJ   ZsymbolPrM   Ar   Hr   ZHPZweekday_offZWOZ	weekday_pZWOPrO   L)rH   rK   rP   zHoliday PresentzWeek OffzWeek Off PresentzTotal Leavers   c             S   s   i | ]}|j |jqS r/   )Zverbose_namename).0fieldr/   r/   r0   
<dictcomp>  s    zKMonthlyBasicStatusReportViewSet.get_headers_translation.<locals>.<dictcomp>c                s(   i | ] \}}|j r |j |j |qS r/   )r>   r_   )r   r   r   )export_dictr/   r0   r     s    short_descriptionfgetr   idZID)mysite.att.utilsr   r^   rz   r{   r|   r_   hasattrrs   Z_metarZ   r   Z
get_fieldsr   r   getattrr   
isinstancepropertyr   r   basenamer   r   r   )r(   Zexport_headersr   r   Ztranslated_headersZverbose_namesrZ   r   attrheaderZtemp_headerr/   )r   r0   get_headers_translation  sN    





z7MonthlyBasicStatusReportViewSet.get_headers_translationc             C   s   dddddddg}i }| j jdd }|d	\}}}tt|t|d
 }xbt|D ]V}tt|t||d
 }	|	dd t
|d
 	d }
d|d
 ||	 f ||
< qXW |S )NMTWZThFZStSr   -r   r   /z%s %s)rz   r   r_   splitcalendarZ
monthrangeintrangeZweekdayzfillr   )r(   Zsym_weekr   r   ymru   r   iZwofkr/   r/   r0   r   ?  s     z1MonthlyBasicStatusReportViewSet.generate_time_map)r8   r9   r:   r   rs   Zobjectsr   Zselect_relatedr   r   Zfilter_classr   Zexport_headers_pror<   r   Z
categoriesrX   r   r}   r   r   r   r   r   rw   r   r   r;   r/   r/   )r.   r0   rv   t   s&   T2rv   )8r   r   osr   Zrest_framework.exceptionsr   Zdjango.db.modelsr   r   r   r   r   r   r	   Zdjango.db.models.aggregatesr
   r   Zdjango.utils.translationr   ru   r   Zrest_frameworkr   r   Zrest_framework.responser   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   r   Zmysite.att.modelsr   Zmysite.settingsr   Zmysite.api.report_export_dictr   Zmysite.personnel.db_constr   r   r   r   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   pathjoinZEXPORT_ROOTr   ZModelSerializerr<   ZListModelMixinrv   r/   r/   r/   r0   <module>   s,   $-+