B
    Ob#                 @   s  d dl Z d dlZd dl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 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 d dlmZmZ d dlmZ d\ZZZG dd dejZG dd dejZ G dd deZ!G dd deZ"G dd deej#ej$ej%Z&dS )    N)	FilterSet)gettext)settings)mixins)serializers)status)Response)Transaction)viewsets)tasks)save_capturevalid_distance_check)APPCustomizeResponseModelMixin)         c                   s^   e Zd Ze Ze Ze ZdZ fddZ	dd Z
dd Zdd	 ZG d
d dZ  ZS )TransactionSerializerNc                s,   t t| j|| | jd jdd | _d S )NrequestHTTP_TIMEZONE)superr   __init__contextMETAgettz)selfargskwargs)	__class__ FG:\easytimepro\master/mysite/mobile\api_rest\views\view_transaction.pyr      s    zTransactionSerializer.__init__c             C   s8   | j r tjj|j | j d}ntj|j }|jS )N)tzinfo)r   arrowArrowZfromdate
punch_timedate	timestamp)r   objZatt_dater   r   r    get_punch_date"   s    z$TransactionSerializer.get_punch_datec             C   s0   | j rtjj|j| j d}ntj|j}|jS )N)r!   )r   r"   r#   Zfromdatetimer$   r&   )r   r'   r$   r   r   r    get_punch_time)   s    z$TransactionSerializer.get_punch_timec             C   s6   |j tkr|jS |j tkrdS |j tkr.|jS dS d S )NzManual Punch )sourceDEVICEZterminal_alias
MANUAL_LOGAPPgps_location)r   r'   r   r   r    get_description0   s    


z%TransactionSerializer.get_descriptionc               @   s   e Zd ZeZdZdS )zTransactionSerializer.Meta)emp_code
punch_dater$   punch_stater+   descriptionr/   Zterminal_snN)__name__
__module____qualname__r	   modelfieldsr   r   r   r    Meta:   s   r:   )r5   r6   r7   r   ZSerializerMethodFieldr2   r$   r4   r   r   r(   r)   r0   r:   __classcell__r   r   )r   r    r      s   
r   c               @   s(   e Zd ZejdddZG dd dZdS )TransactionCreateSerializerTF)Z
allow_nullrequiredc               @   s   e Zd ZeZdZdS )z TransactionCreateSerializer.Meta__all__N)r5   r6   r7   r	   r8   r9   r   r   r   r    r:   C   s   r:   N)r5   r6   r7   r   Z	CharFieldcapturer:   r   r   r   r    r<   @   s   r<   c               @   s6   e Zd ZejdddZejdddZG dd dZdS )SetTimeTransactionFilterr$   Zgte)
field_namelookup_exprZltec               @   s   e Zd ZeZddgZdS )zSetTimeTransactionFilter.Meta
start_dateend_dateN)r5   r6   r7   r	   r8   r9   r   r   r   r    r:   L   s   r:   N)r5   r6   r7   django_filtersZ
DateFilterrC   rD   r:   r   r   r   r    r@   H   s   r@   c               @   s.   e Zd ZejdddZejddZdd ZdS )	TransactionFilterr1   exact)rA   rB   date_filter)methodc             C   s0   t j |d}|t jdd }|j||d}|S )Nz%Y-%m-%dr   )Zdays)Zpunch_time__gteZpunch_time__lt)datetimestrptimeZ	timedeltafilter)r   querysetnamevalueZtodayZtmwr   r   r    rH   U   s    zTransactionFilter.date_filterN)r5   r6   r7   rE   Z
CharFilterr1   r%   rH   r   r   r   r    rF   Q   s   rF   c                   sr   e Zd Zej dZeZ	ee
dZeZdZdd Z fddZ fdd	Z fd
dZdd Zdd Z  ZS )TransactionViewSetz-punch_time)listcreate)z-punch_timec             C   s   | j | jd S )N)serializer_class_dictr   action)r   r   r   r    get_serializer_classi   s    z'TransactionViewSet.get_serializer_classc                s   t t| j||S )N)r   rP   get_serializer)r   r   r   )r   r   r    rV   l   s    z!TransactionViewSet.get_serializerc                s(   t t|  }| jjj}|j|d}|S )N)
company_id)r   rP   get_querysetr   userrW   rL   )r   rM   rW   )r   r   r    rX   o   s    
zTransactionViewSet.get_querysetc                s   t t| j|f||S )N)r   rP   rQ   )r   r   r   r   )r   r   r    rQ   u   s    zTransactionViewSet.listc          
   O   sd  dd l }ddlm} |j}|jdd}d\}}	d}
yT|dd |dd  }}	|dd}
t||	fr| t|t|	}|r|}W n2 t	k
r } zdd l
}|  W d d }~X Y nX |std	}t|tjd
S | j|d}tjrt|j|	|}|rtd|gitjd
S ||jj|jj|d|
tj d | j|d}| | t|tjd
S )Nr   )tzwherer   r*   )r*   r*   latitude	longituder3   zlatitude and longitude error.)r   )r   messagezYYYY-MM-DD HH:mm:ss)Zemp_idr1   r$   r3   Zupload_time)data)r"   Ztzwhere.tzwhererZ   r^   r   r   allZtzNameAtfloat	Exception	traceback	print_exc_r   r   ZHTTP_400_BAD_REQUESTZnowtor   ZACTIVE_APP_LOCATIONr   rY   &HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONSupdateZpkr1   formatrJ   rV   perform_createZHTTP_201_CREATED)r   r   r   r   r"   rZ   r^   r   r[   r\   r3   Z_tzerb   msgZclock_inresultZ
serializerr   r   r    rR   x   sB    
zTransactionViewSet.createc          
   C   s   t f |}| jjj|_|  |dd }| jj}|ry0tjrTtj	
|j|j| nt|j|j| W nP tk
r } z2dd l}|  dtd}td|gitjdS d }~X Y nX d S )Nr?   r   z{0}Zapp_clockIn_upload_failedr]   )r   )r	   r   rY   rW   Zsaver   r   ZACTIVE_CELERYr   Zsave_clock_captureZdelayidr$   r   r1   ra   rb   rc   rh   rd   r   r   rf   )r   r^   Ztransr?   Zcurrent_emprj   rb   r]   r   r   r    ri      s    
z!TransactionViewSet.perform_create)r5   r6   r7   r	   Zobjectsr_   Zorder_byrM   r   r   r<   rS   rF   Zfilter_classZordering_fieldsrU   rV   rX   rQ   rR   ri   r;   r   r   )r   r    rP   \   s   (rP   )'rJ   r"   rE   Zdjango_filters.rest_frameworkr   Zdjango.utils.translationr   rd   Zdjango.confr   Zrest_frameworkr   r   r   Zrest_framework.responser   Zmysite.iclock.modelsr	   Zmysite.mobile.api_restr
   Zmysite.mobiler   Zmysite.mobile.utilsr   r   Z(mysite.mobile.api_rest.app_customize_mixr   r,   r-   r.   ZModelSerializerr   r<   r@   rF   ZListModelMixinZCreateModelMixinZGenericViewSetrP   r   r   r   r    <module>   s.   
(	