B
    b                  @   s|   d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dlm
Z
mZmZmZmZmZmZmZ d dlmZ G dd deZdS )    N)ladonize)request_validstamp2datetimedatetime2stamponline_employee_new
get_hr_minget_hr_min_sec)SUCCESS_CODEMESSAGE_CODESYSTEM_EXCEPTIONDATA_EXCEPTIONinterface_response
user_photoWEEKDAYformat_date)gettext_lazyc               @   sZ   e Zd ZdZeeeeeeeddd Zeeeeeeeeeeeeeeddd Z	dS )BioTimeAppAttendanceu   
    【Attendance】
    )Zrtypec          
   C   s   ddl m} d|tddd|tddd|td	dd
|tddd|tddd|tddd|tddg}ttt|ddS )u  
        get date choices
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype: execute result
            success:
                {"code":1, "error":"", "describe":"", "message":"", "data": [{"code":value,"name":"display name"}]}
                when code = 1, it's user defined
            fail:
                {"code":-10001, "error":"", "describe":"", "message":"Pop-up message", "data": ""}
        r   )	force_str   Zapp_attendance_date_today)codename   Zapp_attendance_date_yesterday   Zapp_attendance_date_this_week   Zapp_attendance_date_last_week   Zapp_attendance_date_this_month   Zapp_attendance_date_last_month   z app_attendance_date_user-defined )Zdjango.utils.encodingr   _r   r	   jsondumps)selfsourcedevice_tokenlanguagetokenr   data r'   >G:\easytimepro\master/mysite/mobile\services\app_attendance.pydate   s    zBioTimeAppAttendance.datec       '      C   sL  ddl m} ddlm} ddl m}m} ddlm} ddlm	} ddl
}|j
  }|dkr|t|}t||jd	d
 }n|||\}}| }t|	}|j}|j}y^t|}t|}g }d}|pd	}|d	 | }|| }|s| }|jj||f|jjjd}|dkr|j|d}|r<|||d||dB }|rbdd |dD }|j|d}|dd d}||| }|rdd |D }nX|jj||f|jjj|ddj|d|d|ddd}||| }|rx|D ]}|dd} |dd}!| ddd|
d d	d	fkr2d} |!ddd|
d d	d	fkrRd}!d}"| r|!r|!| kr|!|  }#|#jd! d" d" |#j }"| rt | } |!rt |!}!|d}d#!t"|# t || d$|!d$d%t$|"d	dd&
}$|%|$ qW t&t't()|ddS  t*k
rF }% z ddl+}&|&,  t&t-dd|%t.S d}%~%X Y nX dS )'u  
        get attendance log
        @param search_item:     query condition (emp_code/name), null
        @param pin:             emp_code,
            1：Attendance -> My Attendance（uplaod emp_code, return attendance log）
            2：Attendance -> Staff Attendance(emp_code is null，return employees list)
        @param department:　    department, joined by ','
        @param date:            date（1， 2， 3， 4， 5， 6， 7）
            1  used as User Defined，when select 1, Start and End are required.
        @param page_num:        15items/page
        @param start:           start date（stamp）
        @param end:             end date（stamp）
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype: execute result
            success：
                {"code":1,"error":"","describe":"","message":"",
                "data":[{"weekday":"","date":"","clock_in":"check in(stamp)",
                "in_describe":"when clock_in=0 display this value(string)","clock_out":"check out (stamp)",
                "out_describe":"when clock_out=0 display this value(string)",
                "total_describe":"","total":"work time(00:00)"}]}
            fail:
                {"code":-10001, "error":"", "describe":"", "message":"Pop-up message", "data": ""}
        r   )Q)	TruncDate)MaxMin)date_period)TransactionN)r   r   )days   )punch_time__rangeemp__department__company_idr   )Zemp__department_id)Zemp__emp_code__icontains)Zemp__first_name__icontainsc             S   s   g | ]}t |qS r'   )int).0ir'   r'   r(   
<listcomp>o   s    z8BioTimeAppAttendance.pull_attendance.<locals>.<listcomp>,)Zemp__department__inemp__emp_codeemp__first_namec             S   s(   g | ] }|d  |d t |d  dqS )r9   r:   )pinr   Zphoto)r   )r5   rr'   r'   r(   r7   t   s   )r2   r3   r9   Z
punch_time)att_dateclock_in	clock_outr=   r>   r?   r   Noneil     <   z{0}zN/AZWorkTime)
weekdayr)   r>   Zin_describer?   Zout_describeZtotal_describetotalZ	data_typeZdescribe)/Zdjango.db.modelsr*   Zdjango.db.models.functionsr+   r,   r-   mysite.mobile.utilsr.   Zmysite.iclock.modelsr/   datetimenowr)   r   Z	timedeltastripr   app_role
departmentr   ZobjectsfilterZcompanyidsplitvaluesZdistinctZorder_byZannotategetr0   Zsecondsr   formatr   rC   r   appendr   r	   r   r    	Exception	traceback	print_excr
   r   )'r!   Zsearch_itemr;   rJ   r)   startendZpage_numr"   r#   r$   r%   r*   r+   r,   r-   r.   r/   rF   rG   ZemprI   Zemp_deptZ
start_dateZend_dater&   Z	page_sizeZ	start_pagZend_pagZquerysetZrowsr<   Zcheck_inZ	check_outrD   ZdeltaitemerS   r'   r'   r(   pull_attendance.   s    

z$BioTimeAppAttendance.pull_attendanceN)
__name__
__module____qualname____doc__r   r   r4   strr)   rY   r'   r'   r'   r(   r      s
   r   )r   Zmysite.ladon.ladonizerr   rE   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Zdjango.utils.translationr   r   objectr   r'   r'   r'   r(   <module>   s
    (