Ë
    n¼xfx*  ã                   ó˜  — 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‰   € Ü#ŸO™O×2Ñ2¸%Ð2Ó@Ðð -ö
ð ð	 —j‘jØ '× 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Ü—o‘o×)Ñ)¨ZÐ)Ó8ˆGð �>Š>ÜØÐ)LÑMÜ×)Ñ)ôð ð
 	×Ñ˜6Ô"ô 	�‰×'Ñ'ØØ$ lÐ3ð 	(ô 	
ô
 ØÐ%OÑPÜ×%Ñ%ô
ð 	
øô# ×#Ñ#ò 	LÜ qÐ5IÑ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×!:Ñ!:×!>Ñ!>Ø%¨f¸Tð "?ó "Ðð 	×"Ñ"×/Ñ/Ô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ð 39×2MÑ2Mô 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à—l‘lˆGÙØ*˜8Ÿ?™?Ñ5¨WÑ5�Ü*¨8¸$Ô?ˆJØ×(Ñ(Ø1°JÀ
ÇÁÐ3Póð øô ò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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  € ð	/Ø%Ÿl™l×.Ñ.¨~Ó>ˆOÜ&×.Ñ.×2Ñ2°oÐ2ÓFˆLÜ—o‘o×,Ñ,Ø)Ø—|‘|×'Ñ'¨Ó1Ø$Ÿ\™\×-Ñ-¨nÓ=Ø#ŸL™L×,Ñ,¨]Ó;ð	 -ó ˆGô +¨7Ó3ˆJØ×(Ñ(Ø,¨y¸*¿/¹/Ð.Jóð øô ×'Ñ'ò 	Ø×&Ñ&Ø2´F×4MÑ4Móò ô ò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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™   € ð		/Ü—o‘o×)Ñ)¨RÐ)Ó0ˆGÜ*¨7Ó3ˆJØ×(Ñ(Ø0°9¸j¿o¹oÐ2Nóð øô ×#Ñ#ò 	WØ×&Ñ&Ð':¼F×<UÑ<UÓVÒVÜò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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>  € ð	/Ü—o‘o×)Ñ)¨RÐ)Ó0ˆGØ%Ÿl™l×.Ñ.¨~Ó>ˆOÜ&×.Ñ.×2Ñ2°oÐ2ÓFˆLà$Ÿ\™\×-Ñ-¨h¸¿¹ÓGˆGŒNà#*§<¡<×#3Ñ#3Ø × 4Ñ 4ó$ˆGÔ ð #*§,¡,×"2Ñ"2°=À'×BUÑBUÓ"VˆGÔØ�L‰LŒNÜ*¨7Ó3ˆJØ×(Ñ(Ø.°¸J¿O¹OÐ0Lóð øô ×$Ñ$¤k×&>Ñ&>Ð?ò 	Ø×&Ñ&Ø3´V×5NÑ5Nóò ô ò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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ˆ   € ð	/Ü—o‘o×)Ñ)¨RÐ)Ó0ˆGØ�N‰NÔØ×(Ñ(Ð)GÓHÐHøÜ×#Ñ#ò 	WØ×&Ñ&Ð':¼F×<UÑ<UÓVÒVÜò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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Ó5ˆMÜ.¨}À4ÔHˆJÜ˜JŸO™O´F×4FÑ4FÔGÐGøÜò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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Ñ2°bÐ2Ó9ˆLÜ.¨|Ó<ˆJÜ˜JŸO™O´F×4FÑ4FÔGÐGøÜ×'Ñ'ò 	Ø×&Ñ&Ø(¬&×*CÑ*Cóò ô ò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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Ñ2°bÐ2Ó9ˆLÜ.Ø 7§<¡<¸ôˆJð ×"Ñ"Ô$Ø—‘Ô!Ü 
§¡¼×8JÑ8JÔKÐKÜ˜J×-Ñ-´f×6QÑ6QÔRÐRøÜ×'Ñ'ò 	Ø×&Ñ&Ø(¬&×*CÑ*Cóò ô ò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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Ñ2°bÐ2Ó9ˆLØ×ÑÔ!ÜØÐ?Ð@Ü×)Ñ)ôð øô ×'Ñ'ò 	Ø×&Ñ&Ø(¬&×*CÑ*Cóò ô ò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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€   € ð	/Ü.°G·L±LÔAˆJØ×"Ñ"Ô$Ø—‘Ô!Ü 
§¡¼×8OÑ8OÔPÐPÜ˜J×-Ñ-´f×6QÑ6QÔRÐRøÜò 	/Ø×&Ñ&¤s¨1£vÓ.Õ.ûð	/ú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/   