B
    Ob>                 @   s2  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mZmZmZ d d
lmZ d dlmZ d dlmZ G dd deejZG dd deejZG dd deejZG dd deejZG dd dej Z!G dd deej"ej#ejZ$dd Z%dS )    N)gettext)mixins)serializers)action)Response)status)viewsets)ClientDetailsOutdoorSchedulePlannerOutdoorEmployeeScheduleOutdoorTrack)Employee)Q)APPCustomizeResponseModelMixinc               @   s   e Zd Zdd ZdS )OutdoorCustomersViewc       	      O   sf   | j jdd }|j}|jj}tjj|d	d}|rJ|
 }|j|d}dd |D }t|tjdS )Nsearch_item)companyid)Zcompany_name__icontainsc             S   sF   g | ]>}|j |j|j|j|j|j|j|j|j|j	d t
|j dqS )z/files/)r   customer_namecust_idcontact_person
contact_nolatitude	longitudepunch_radiusaddressbranchlogo)r   company_name	client_idr   mobiler   r   punch_location_radiusr   r   strr   ).0obj r%   BG:\easytimepro\master/mysite/mobile\api_rest\views\view_outdoor.py
<listcomp>$   s   z-OutdoorCustomersView.list.<locals>.<listcomp>)r   )requestquery_paramsgetuserr   r   r	   objectsfilterorder_bystripr   r   HTTP_200_OK)	selfr(   argskwargsr   emp
company_idZobj_querysetchoicesr%   r%   r&   list   s    zOutdoorCustomersView.listN)__name__
__module____qualname__r7   r%   r%   r%   r&   r      s   r   c               @   s   e Zd Zdd ZdS )OutdoorSchedulePlannerViewc             O   s   |j }|jj}tjj|dd}dd |D }xX|D ]P}t|d }	x4|	D ],}
t	jj|
d d}dd |D }||
d	< qNW |	|d< q6W t
|tjd
S )N)r   r   c             S   s   g | ]}|j |j|jd qS ))r   plannerplanner_details)r   schedule_nameschedule_details)r#   r$   r%   r%   r&   r'   2   s   z3OutdoorSchedulePlannerView.list.<locals>.<listcomp>r=   r   )r   c             S   s:   g | ]2}|j |j|j|j|j|j|j|j|j|j	d 
qS ))
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r    r   r   r!   r   r   )r#   r$   r%   r%   r&   r'   9   s   client_details)r   )r+   r   r   r
   r,   r-   r.   jsonloadsr	   r   r   r0   )r1   r(   r2   r3   r4   r5   r<   r6   datar=   data1clientsclients_detailsr%   r%   r&   r7   -   s    

zOutdoorSchedulePlannerView.listN)r8   r9   r:   r7   r%   r%   r%   r&   r;   +   s   r;   c               @   s   e Zd Zdd ZdS )OutdoorEmployeeScheduleViewc             O   s   | j jdd }|j}|jj}|r6tjjd||d}ntjjd|d}dd |D }xX|D ]P}	t	
|	d }
x4|
D ],}tjj|d d	}d
d |D }||d< qrW |
|	d< qZW t|tjdS )Nr      )#employee__enable_outdoor_managementr   Zemployee__emp_code__icontains)rI   r   c             S   sT   g | ]L}|j t|jt|j|j|jj|jj|jj	|jj
|jd t|jj d
qS )z/files/)
r   
start_dateend_dateemployee_idemployee_nameemp_coder>   r?   assigned_byphoto)r   r"   rJ   rK   rL   employee
first_namerN   schedule_plannerr>   r?   rO   rP   )r#   r$   r%   r%   r&   r'   P   s   z4OutdoorEmployeeScheduleView.list.<locals>.<listcomp>r?   r   )r   c             S   s:   g | ]2}|j |j|j|j|j|j|j|j|j|j	d 
qS ))
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r    r   r   r!   r   r   )r#   r$   r%   r%   r&   r'   Y   s   r@   )r   )r(   r)   r*   r+   r   r   r   r,   r-   rA   rB   r	   r   r   r0   )r1   r(   r2   r3   r   r4   r5   schEmployeer6   rC   r=   rD   rE   rF   r%   r%   r&   r7   E   s(    


z OutdoorEmployeeScheduleView.listN)r8   r9   r:   r7   r%   r%   r%   r&   rG   C   s   rG   c               @   s   e Zd Zdd ZdS )OutdoorMyScheduleViewc             O   s   |j }tjj|jd}dd |D }xX|D ]P}t|d }x4|D ],}	tjj|	d d}
dd |
D }||	d< qBW ||d< q*W t|t	j
d	S )
N)rL   c             S   sT   g | ]L}|j t|jt|j|j|jj|jj|jj	|jj
|jd t|jj d
qS )z/files/)
r   rJ   rK   rL   rM   rN   r>   r?   rO   rP   )r   r"   rJ   rK   rL   rQ   rR   rN   rS   r>   r?   rO   rP   )r#   r$   r%   r%   r&   r'   h   s   z.OutdoorMyScheduleView.list.<locals>.<listcomp>r?   r   )r   c             S   s:   g | ]2}|j |j|j|j|j|j|j|j|j|j	d 
qS ))
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r    r   r   r!   r   r   )r#   r$   r%   r%   r&   r'   r   s   r@   )r   )r+   r   r,   r-   r   rA   rB   r	   r   r   r0   )r1   r(   r2   r3   r4   rT   r6   rC   r=   rD   rE   rF   r%   r%   r&   r7   e   s    

zOutdoorMyScheduleView.listN)r8   r9   r:   r7   r%   r%   r%   r&   rU   c   s   rU   c               @   s   e Zd ZG dd dZdS )OutdoorSerializerc               @   s   e Zd ZeZdZdS )zOutdoorSerializer.Meta__all__N)r8   r9   r:   r   ZmodelZfieldsr%   r%   r%   r&   Meta~   s   rX   N)r8   r9   r:   rX   r%   r%   r%   r&   rV   |   s   rV   c                   s   e Zd Zej ZeZeeedZ	dd Z
 fddZedgddd	d
 Zedgdddd Zedgdddd Z  ZS )OutdoorView)applyschedule_reportschedule_employeec             C   s   | j | jtS )N)serializer_class_dictr*   r   rV   )r1   r%   r%   r&   get_serializer_class   s    z OutdoorView.get_serializer_classc                s(   t t|  }| jjj}|j|d}|S )N)Zemployee__company_id)superrY   get_querysetr(   r+   r5   r-   )r1   querysetr5   )	__class__r%   r&   r`      s    
zOutdoorView.get_querysetZpostT)methodsZdetailc          
   O   sr  | j |jd}| r^|jd}|jd}|jd}|jd}|jd}	|jd}
|jd}|jd	}|jd
}|jd}|r@|r|sdtd}t|tjdS t	j
j|d}|
dkrtj
j|
d}tj
j|jjd}t|j|jf||f}|jd }||kr0td}t|tjdS |dkrntj
j|j||	|d}|rXntd}t|tjdS yt }|j|_|	|_||_|
dkr||_||_|dkr||_||_||_||_||_n||_ ||_!||_"||_#||_|$  ddtdi}t|tj%dS  t&k
r< } zt|tjdS d }~X Y nX ndtd}t|tjdS nt|j'tjdS d S )N)rC   date
punch_type
punch_timecaptureschedule_typeschedule_idr   r   r   summaryz{0}Zapp_clockIn_gps_required)r   )r   i  Zinvalid_punched_locationrH   )rL   r   rh   rd   z$please_select_punch_type_as_check-inr   messagezRequest already processingZapp_clockIn_upload_failed)(Zget_serializerrC   Zis_validr*   format_r   r   HTTP_406_NOT_ACCEPTABLEr	   r,   r   r
   rS   r   distancer   r   r!   r   r-   r+   rQ   rh   clientschedulerd   checkincheckin_latitudecheckin_longitudecheckin_capturerj   checkoutcheckout_latitudecheckout_longitudecheckout_captureZsaver0   	Exceptionerrors)r1   r(   r2   r3   Z
serializerrd   re   rf   rg   rh   ri   r   r   r   rj   rl   r@   ZscheduleEmp_detailsZschedulePlanner_detailsZpunched_radiusZactual_radiusZoutDoorTrackr$   rC   er%   r%   r&   rZ      s|    







zOutdoorView.applyr*   c          
   O   s:  |j }|jj}|jd}tj|d}|jd}tj|d}|jd}|jd}	y|	dkrztjj	|	|||d}
nJt
jj|jd}|j}|d	krtjj	|j|||d}
ntjj	||||d
}
ydd |
D }t|tjdS    dd |
D }t|tjdS W n. tk
r4 } zt|tjdS d }~X Y nX d S )NrJ   z%Y-%m-%drK   rh   rL   z-1)rL   rh   	date__gte	date__lte)r   )rH   )rh   r   r~   r   c             S   sd   g | ]\}|j |jj|j|j|j|jt|jt|j	|j
|jt|j|j|j|j|jj|jjd qS ))emp_idemp_namer   ri   image_in	image_outrd   zcheckin-timezcheckin-latitudezcheckin-longitudezcheckout-timezcheckout-latitudezcheckout-longituderj   client_namer>   )rL   rQ   rR   r   ri   rv   rz   r"   rd   rs   rt   ru   rw   rx   ry   rj   rq   r   rr   r>   )r#   r$   r%   r%   r&   r'      s   z/OutdoorView.schedule_report.<locals>.<listcomp>)r   c             S   s^   g | ]V}|j |jj|j|j|j|jt|jt|j	|j
|jt|j|j|j|j|jjd qS ))r   r   r   ri   r   r   rd   zcheckin-timezcheckin-latitudezcheckin-longitudezcheckout-timezcheckout-latitudezcheckout-longituderj   r   )rL   rQ   rR   r   ri   rv   rz   r"   rd   rs   rt   ru   rw   rx   ry   rj   rq   r   )r#   r$   r%   r%   r&   r'      s   )r+   r   r   r)   r*   datetimestrptimer   r,   r-   r   app_roler   r   r0   r{   ro   )r1   r(   r2   r3   r4   r5   rJ   rK   rh   rL   Zoutdoor_detailsZEmpr   r6   r}   r%   r%   r&   r[      s:    


zOutdoorView.schedule_reportc       	   
   O   sx   |j }|jj}y8tjjt|jd d|d}dd |D }t|tj	dS  t
k
rr } zt|tjdS d }~X Y nX d S )N)r   rH   )Zenable_outdoor_managementr5   c             S   s   g | ]}|j |j|jd qS ))r   r   rN   )r   rR   rN   )r#   r$   r%   r%   r&   r'     s    z1OutdoorView.schedule_employee.<locals>.<listcomp>)r   )r+   r   r   r   r,   r-   r   r   r   r0   r{   ro   )	r1   r(   r2   r3   r4   r5   Zoutdoor_employeesr6   r}   r%   r%   r&   r\     s    zOutdoorView.schedule_employee)r8   r9   r:   r   r,   allra   rV   Zserializer_classr]   r^   r`   r   rZ   r[   r\   __classcell__r%   r%   )rb   r&   rY      s   
H*rY   c             C   s   | \}}|\}}d}t || }t || }t |d t |d  t t |t t | t |d  t |d   }	dt t |	t d|	  }
||
 }|S )Ni     rH   )mathZradiansZsinZcosZatan2Zsqrt)originZdestinationZlat1Zlon1Zlat2Zlon2ZradiusZdlatZdlonacdr%   r%   r&   rp     s    > rp   )&rA   r   r   Zdjango.utils.translationr   rn   Zrest_frameworkr   r   Zrest_framework.decoratorsr   Zrest_framework.responser   r   Zmysite.mobile.api_restr   Zmysite.att.modelsr	   r
   r   r   Zmysite.personnel.modelsr   Zdjango.db.modelsr   Z(mysite.mobile.api_rest.app_customize_mixr   ZGenericViewSetr   r;   rG   rU   ZModelSerializerrV   ZListModelMixinZRetrieveModelMixinrY   rp   r%   r%   r%   r&   <module>   s*     