
    nxfx*                        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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 d dlmZmZ  G d de      Z G d de      Z G d de      Z G d de      Z  G d de       Z! G d de       Z" G d de       Z# G d de       Z$ G d  d!e       Z% G d" d#e       Z&y$)%    )APIViewResponsestatus)JSONWebTokenAuthentication)IsAdminUser)authenticate   )VehicleVehicleType)VehicleSerializerVehicleTypeSerializer)TokenAuthentication)IsAuthenticated)r   VehicleAssignment)Device)timezone)NotFoundPermissionDeniedc                       e Zd ZegZegZd Zy)ListInactiveVehiclesViewc                     t         j                  j                  d      }|D cg c]0  }|j                  |j                  j                  |j
                  d2 }}t        dd|dt        j                        S c c}w )NFr   )idvehicle_typeplate_numberr   z)Inactive vehicles retrieved successfully.)r   messagedata)	r   objectsfilterr   r   r   r   r   HTTP_200_OK)selfrequestinactive_vehiclesvehiclevehicle_datas        8C:\Users\user\Documents\project_loop\vehiclehub\views.pygetzListInactiveVehiclesView.get   s    #OO22%2@ -
 	 jj ' 4 4 A A ' 4 4
 
 F$
 %%
 	

s   5A;N)__name__
__module____qualname__r   authentication_classesr   permission_classesr(        r'   r   r      s    12)*
r/   r   c                       e Zd ZegZegZd Zy)AssignVehicleViewc                    |j                   }|j                  j                  d      }|st        dddt        j
                        S 	 t        j                  j                  |      }|j                  rt        dddt        j                        S |j                  |       t        j                  j                  |d|i	       t        d
ddt        j                        S # t        j                  $ r t        ddd      cY S w xY w)Ndevice_tokenr   zDevice token is required.r   r   r   )r   zVehicle not found.z!This vehicle is already assigned.)userdefaultsr   z(Vehicle assigned to driver successfully.)r5   r   r(   r   r   HTTP_400_BAD_REQUESTr   r   DoesNotExistr!   
set_activer   update_or_create)r"   r#   
vehicle_iddriverr3   r%   s         r'   postzAssignVehicleView.post.   s   ||''7)DE22 
	Loo))Z)8G >>)LM)) 
 	6" 	''$l3 	( 	

 %OP%%
 	
# ## 	Lq5IJKK	Ls   	 C% %!D	D	Nr)   r*   r+   r   r,   r   r-   r=   r.   r/   r'   r1   r1   *   s    12)* 
r/   r1   c                       e Zd ZegZegZd Zy)ReleaseVehicleViewc                 z   |j                   }	 t        j                  j                  ||d      }|j                  j                          t        j                  j                  |      j                          t        dddt        j                  	      S # t        j                  $ r t        ddd      cY S w xY w)
NT)r;   r<   activer   z!Vehicle not assigned to this userr4   )r5   r   zVehicle released successfully.r   )r5   r   r   r(   r8   r   r%   set_inactiver   r    deleter   r!   )r"   r#   r;   r<   vehicle_assignments        r'   r=   zReleaseVehicleView.postU   s    	!2!:!:!>!>%fT "? " 	""//16*113%EF%%
 	
 !-- 	)LM 	s   "B !B:9B:Nr>   r.   r/   r'   r@   r@   Q   s    12)*
r/   r@   c                   B    e Zd ZdZegZegZddZe	j                  fdZy)BaseVehicleViewz.
    Base view for vehicle-related views.
    Nc                 h    d|d}|r|j                  |       t        |t        j                        S )Nr   r4   r   )updater   r   r!   )r"   r   r   response_datas       r'   success_responsez BaseVehicleView.success_responses   s0    #$9  &f.@.@AAr/   c                 "    t        d|d|      S )Nr   r4   r   r   )r"   r   status_codes      r'   error_responsezBaseVehicleView.error_responsey   s    19+NNr/   )N)r)   r*   r+   __doc__r   r,   r	   r-   rK   r   r7   rN   r.   r/   r'   rG   rG   k   s1     99%B 392M2M Or/   rG   c                       e Zd ZdZd Zy)ListVehiclesViewz:
    View to list all vehicles with optional filters.
    c                 6   	 t         j                  j                         }|j                  }|r |j                  di |}t        |d      }| j                  dd|j                  i      S # t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)NTmanyzVehicles retrieved successfullyvehiclesr.   )
r   r   allr   r    r   rK   	ExceptionrN   str)r"   r#   rU   filters
serializeres         r'   r(   zListVehiclesView.get   s    	/**,HllG*8??5W5*8$?J((1J
3P   	/&&s1v..	/s   A(A+ +	B4BBBNr)   r*   r+   rO   r(   r.   r/   r'   rQ   rQ   }   s    /r/   rQ   c                       e Zd ZdZd Zy)AddVehicleViewz$
    View to add a new vehicle.
    c                 p   	 |j                   j                  d      }t        j                  j                  |      }t        j                  j                  ||j                   j                  d      |j                   j                  d      |j                   j                  d            }t        |      }| j                  dd|j                   i      S # t        j                  $ r# | j                  d	t        j                        cY S t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)
Nr   pkr   r   vehicle_pic)r   r   r   rb   zVehicle added successfullyr%   z Invalid vehicle type ID provided)r   r(   r   r   r   creater   rK   r8   rN   r   HTTP_404_NOT_FOUNDrW   rX   )r"   r#   vehicle_type_idr   r%   rZ   r[   s          r'   r=   zAddVehicleView.post   s   	/%ll..~>O&..22o2FLoo,,)||''1$\\--n=#LL,,];	 - G +73J((,y*//.J  '' 	&&2F4M4M   	/&&s1v..	/s$   CC 3D5	D5D0*D50D5Nr)   r*   r+   rO   r=   r.   r/   r'   r^   r^      s    /r/   r^   c                   "    e Zd ZdZd Zd Zd Zy)VehicleDetailViewz8
    View to retrieve, update, or delete a vehicle.
    c                 ^   	 t         j                  j                  |      }t        |      }| j	                  dd|j
                  i      S # t         j                  $ r# | j                  dt        j                        cY S t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)Nr`   zVehicle retrieved successfullyr%   Vehicle not found)r   r   r(   r   rK   r   r8   rN   r   rd   rW   rX   )r"   r#   ra   r%   rZ   r[   s         r'   r(   zVehicleDetailView.get   s    		/oo))R)0G*73J((09joo2N  ## 	W&&':F<U<UVV 	/&&s1v..	/s$   AA 3B, B,B'!B,'B,c                    	 t         j                  j                  |      }|j                  j                  d      }t        j                  j                  |      }|j                  j                  d|j
                        |_        |j                  j                  d|j                        |_        |j                  j                  d|j                        |_        |j                          t        |      }| j                  dd|j                  i      S # t         j                  t        j                  f$ r# | j                  dt
        j                        cY S t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)	Nr`   r   r   r   rb   zVehicle updated successfullyr%   z!Vehicle or Vehicle Type not found)r   r   r(   r   r   r   r   rb   saver   rK   r8   rN   rd   rW   rX   )r"   r#   ra   r%   re   r   rZ   r[   s           r'   patchzVehicleDetailView.patch   s>   	/oo))R)0G%ll..~>O&..22o2FL$\\--hGGN#*<<#3#3 4 4$G  #*,,"2"2='BUBU"VGLLN*73J((.JOO0L  $$k&>&>? 	&&3V5N5N   	/&&s1v..	/s%   DD AFF$F=FFc                 N   	 t         j                  j                  |      }|j                          | j	                  d      S # t         j
                  $ r# | j                  dt        j                        cY S t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)Nr`   zVehicle successfully removedrj   )r   r   r(   rD   rK   r8   rN   r   rd   rW   rX   )r"   r#   ra   r%   r[   s        r'   rD   zVehicleDetailView.delete   s    	/oo))R)0GNN(()GHH## 	W&&':F<U<UVV 	/&&s1v..	/s$   A A 3B$8B$ BB$B$Nr)   r*   r+   rO   r(   rm   rD   r.   r/   r'   rh   rh      s    
//0/r/   rh   c                       e Zd ZdZd Zy)VehicleTypeListViewz)
    View to list all vehicle types.
    c                    	 t         j                  j                         }t        |d      }t	        |j
                  t        j                        S # t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)NTrS   r   )r   r   rV   r   r   r   r   r!   rW   rN   rX   )r"   r#   vehicle_typesrZ   r[   s        r'   r(   zVehicleTypeListView.get   sc    	/'//335M.}4HJJOOF4F4FGG 	/&&s1v..	/s   AA 	A?A:4A?:A?Nr\   r.   r/   r'   rq   rq      s    /r/   rq   c                   "    e Zd ZdZd Zd Zd Zy)VehicleTypeDetailViewz=
    View to retrieve, update, or delete a vehicle type.
    c                 l   	 t         j                  j                  |      }t        |      }t	        |j
                  t        j                        S # t         j                  $ r# | j                  dt        j                        cY S t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)Nr`   r   Vehicle type not found)r   r   r(   r   r   r   r   r!   r8   rN   rd   rW   rX   r"   r#   ra   r   rZ   r[   s         r'   r(   zVehicleTypeDetailView.get   s    		/&..22b29L.|<JJOOF4F4FGG'' 	&&(&*C*C   	/&&s1v..	/s$   AA 3B3B3B.(B3.B3c                    	 t         j                  j                  |      }t        ||j                  d      }|j                         r5|j                          t        |j                  t        j                        S t        |j                  t        j                        S # t         j                  $ r# | j                  dt        j                        cY S t        $ r$}| j                  t!        |            cY d }~S d }~ww xY w)Nr`   T)r   partialr   rw   )r   r   r(   r   r   is_validrl   r   r   r!   errorsr7   r8   rN   rd   rW   rX   rx   s         r'   rm   zVehicleTypeDetailView.patch   s    	/&..22b29L.7<<J ""$!
8J8JKKJ--f6Q6QRR'' 	&&(&*C*C   	/&&s1v..	/s*   A<B$ ?$B$ $3DD!D :D Dc                 f   	 t         j                  j                  |      }|j                          t	        ddit
        j                        S # t         j                  $ r# | j                  dt
        j                        cY S t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)Nr`   r   z!Vehicle type deleted successfullyr   rw   )r   r   r(   rD   r   r   r!   r8   rN   rd   rW   rX   )r"   r#   ra   r   r[   s        r'   rD   zVehicleTypeDetailView.delete  s    	/&..22b29L!?@))  '' 	&&(&*C*C   	/&&s1v..	/s$   AA 3B0B0B+%B0+B0Nro   r.   r/   r'   ru   ru      s    
//"/r/   ru   c                       e Zd ZdZd Zy)AddVehicleTypeViewz)
    View to add a new vehicle type.
    c                 d   	 t        |j                        }|j                         r5|j                          t	        |j                  t
        j                        S t	        |j                  t
        j                        S # t        $ r$}| j                  t        |            cY d }~S d }~ww xY w)N)r   r   )r   r   r{   rl   r   r   HTTP_201_CREATEDr|   r7   rW   rN   rX   )r"   r#   rZ   r[   s       r'   r=   zAddVehicleTypeView.post%  s    	/.GLLAJ""$!
8O8OPPJ--f6Q6QRR 	/&&s1v..	/s$   AB $B 	B/B*$B/*B/Nrf   r.   r/   r'   r   r      s    /r/   r   N)'rest_framework.viewsr   rest_framework.responser   rest_frameworkr   !rest_framework_jwt.authenticationr   rest_framework.permissionsr	   django.contrib.authr
   modelsr   r   serializersr   r   rest_framework.authenticationr   r   r   accounts.modelsr   django.utilsr   rest_framework.exceptionsr   r   r   r1   r@   rG   rQ   r^   rh   rq   ru   r   r.   r/   r'   <module>r      s    ( , ! H 2 , ( A = 6 . " ! @
w 
2$
 $
N
 
4Og O$/ /(/_ /61/ 1/h// ///O //d/ /r/   