Ë
    a%9j  ã                   ót  — d dl mZ d dlmZmZmZ  G d„ dej                  «      Z G d„ dej                  «      Z G d„ dej                  «      Z	 G d	„ d
ej                  «      Z
 G d„ dej                  «      Z G d„ dej                  «      Z G d„ dej                  «      Z G d„ dej                  «      Zy)é    )Úpermissions)ÚTransporterProfileÚTransporterDriverLinkÚUserRolec                   ó   — e Zd ZdZd„ Zy)Ú	IsShipperz#Only allow users with role SHIPPER.c                 óò   — |j                   r|j                   j                  sy	 |j                   j                  j                  t        j                  j
                  k(  S # t        j                  $ r Y yw xY w©NF)ÚuserÚis_authenticatedÚroler   ÚRoleÚSHIPPERÚDoesNotExist©ÚselfÚrequestÚviews      ú)/var/www/html/truck-me/api/permissions.pyÚhas_permissionzIsShipper.has_permission	   sZ   € Ø�|Š| 7§<¡<×#@Ò#@Øð	Ø—<‘<×$Ñ$×)Ñ)¬X¯]©]×-BÑ-BÑBÐBøÜ×$Ñ$ò 	Ùð	úó   ¥:A  Á A6Á5A6N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © ó    r   r   r      s
   „ Ù-ór   r   c                   ó   — e Zd ZdZd„ Zy)ÚIsShipperVerifiedz?Shipper and KYC verified (for actions like creating shipments).c                 ó@  — |j                   r|j                   j                  sy	 |j                   j                  j                  t        j                  j
                  k7  ry|j                   j                  j                  S # t        j                  t        f$ r Y yw xY wr
   )
r   r   r   r   r   r   Úshipper_profileÚkyc_verifiedr   ÚAttributeErrorr   s      r   r   z IsShipperVerified.has_permission   su   € Ø�|Š| 7§<¡<×#@Ò#@Øð	Ø�|‰|× Ñ ×%Ñ%¬¯©×)>Ñ)>Ò>ØØ—<‘<×/Ñ/×<Ñ<Ð<øÜ×%Ñ%¤~Ð6ò 	Ùð	úó   ¥;B Á!B ÂBÂBNr   r   r   r   r    r       s
   „ ÙIór   r    c                   ó   — e Zd ZdZd„ Zy)ÚIsTransporterzDOnly allow users with role TRANSPORTER (e.g. for driver POD submit).c                 óò   — |j                   r|j                   j                  sy	 |j                   j                  j                  t        j                  j
                  k(  S # t        j                  $ r Y yw xY wr
   )r   r   r   r   r   ÚTRANSPORTERr   r   s      r   r   zIsTransporter.has_permission#   sZ   € Ø�|Š| 7§<¡<×#@Ò#@Øð	Ø—<‘<×$Ñ$×)Ñ)¬X¯]©]×-FÑ-FÑFÐFøÜ×$Ñ$ò 	Ùð	úr   Nr   r   r   r   r'   r'       s
   „ ÙNór   r'   c                   ó   — e Zd ZdZd„ Zy)ÚIsTransporterVerifiedzHTransporter with documents_verified=True (for bidding, trip assignment).c                 ó@  — |j                   r|j                   j                  sy	 |j                   j                  j                  t        j                  j
                  k7  ry|j                   j                  j                  S # t        j                  t        f$ r Y yw xY wr
   )
r   r   r   r   r   r)   Útransporter_profileÚdocuments_verifiedr   r$   r   s      r   r   z$IsTransporterVerified.has_permission/   su   € Ø�|Š| 7§<¡<×#@Ò#@Øð	Ø�|‰|× Ñ ×%Ñ%¬¯©×)BÑ)BÒBØØ—<‘<×3Ñ3×FÑFÐFøÜ×%Ñ%¤~Ð6ò 	Ùð	úr%   Nr   r   r   r   r+   r+   ,   s
   „ ÙRór   r+   c                   ó   — e Zd ZdZd„ Zy)ÚIsPlatformAdminz+Allow Django staff/superuser or role ADMIN.c                 ó   — |j                   }|r|j                  sy|j                  s|j                  ry	 |j                  j                  t
        j                  j                  k(  S # t
        j                  $ r Y yw xY w)NFT)	r   r   Úis_staffÚis_superuserr   r   r   ÚADMINr   )r   r   r   r   s       r   r   zIsPlatformAdmin.has_permission=   se   € Ø�|‰|ˆÙ˜4×0Ò0ØØ�=Š=˜D×-Ò-Øð	Ø—9‘9—>‘>¤X§]¡]×%8Ñ%8Ñ8Ð8øÜ×$Ñ$ò 	Ùð	ús   ¶0A' Á'A=Á<A=Nr   r   r   r   r0   r0   :   s
   „ Ù5ó	r   r0   c                   ó   — e Zd ZdZd„ Zy)ÚIsFleetOwnerTransporterz.Transporter role and account_type=FLEET_OWNER.c                 óv  — |j                   r|j                   j                  sy	 |j                   j                  j                  t        j                  j
                  k7  ry|j                   j                  j                  t        j                  j                  k(  S # t        j                  t        f$ r Y yw xY wr
   )r   r   r   r   r   r)   r-   Úaccount_typer   ÚAccountTypeÚFLEET_OWNERr   r$   r   s      r   r   z&IsFleetOwnerTransporter.has_permissionL   s‡   € Ø�|Š| 7§<¡<×#@Ò#@Øð	Ø�|‰|× Ñ ×%Ñ%¬¯©×)BÑ)BÒBØØ—<‘<×3Ñ3×@Ñ@ÔDV×DbÑDb×DnÑDnÑnÐnøÜ×%Ñ%¤~Ð6ò 	Ùð	ús   ¥;B Á!:B ÂB8Â7B8Nr   r   r   r   r6   r6   I   s
   „ Ù8ór   r6   c                   ó   — e Zd ZdZd„ Zy)ÚIsFleetDriverTransporterzYTransporter role, fleet-driver account type (or legacy DRIVER + link), active fleet link.c                 ó   — |j                   r|j                   j                  sy	 |j                   j                  j                  t        j                  j
                  k7  ry|j                   j                  }t        j                  j                  |j                   d¬«      j                  «       sy|j                  t        j                  j                   t        j                  j"                  fv S # t        j                  t        f$ r Y yw xY w©NFT)ÚdriverÚ	is_active)r   r   r   r   r   r)   r-   r   r$   r   ÚobjectsÚfilterÚexistsr8   r   r9   ÚTRANSPORTER_DRIVERÚDRIVER)r   r   r   Úprofiles       r   r   z'IsFleetDriverTransporter.has_permissionZ   sÒ   € Ø�|Š| 7§<¡<×#@Ò#@Øð	Ø�|‰|× Ñ ×%Ñ%¬¯©×)BÑ)BÒBØØ—l‘l×6Ñ6ˆGô %×,Ñ,×3Ñ3¸7¿<¹<ÐSWÐ3ÓX×_Ñ_ÔaØØ×#Ñ#Ü×*Ñ*×=Ñ=Ü×*Ñ*×1Ñ1ð(
ð 
ð 	
øô ×%Ñ%¤~Ð6ò 	Ùð	ús   ¥;C1 Á!C1 Ã1DÄDNr   r   r   r   r<   r<   W   s
   „ Ùcó
r   r<   c                   ó   — e Zd ZdZd„ Zy)ÚIsIndividualDriverTransporterz«
    Transporter role and account_type=DRIVER, but not linked as a fleet driver.
    Useful to keep the existing "individual driver" flow distinct from fleet drivers.
    c                 óî  — |j                   r|j                   j                  sy	 |j                   j                  j                  t        j                  j
                  k7  ry|j                   j                  j                  t        j                  j                  k7  ry	 t        j                  j                  |j                   d¬«      j!                  «        S # t        j                  t        f$ r Y yw xY wr>   )r   r   r   r   r   r)   r-   r8   r   r9   rE   r   r$   r   rA   rB   rC   r   s      r   r   z,IsIndividualDriverTransporter.has_permissionr   s¾   € Ø�|Š| 7§<¡<×#@Ò#@Øð	Ø�|‰|× Ñ ×%Ñ%¬¯©×)BÑ)BÒBØØ�|‰|×/Ñ/×<Ñ<Ô@R×@^Ñ@^×@eÑ@eÒeØð fô
 )×0Ñ0×7Ñ7¸w¿|¹|ÐW[Ð7Ó\×cÑcÓeÐeÐeøô ×%Ñ%¤~Ð6ò 	Ùð	ús   ¥;C Á!;C ÃC4Ã3C4Nr   r   r   r   rH   rH   l   s   „ ñó
fr   rH   N)Úrest_frameworkr   Úaccounts.modelsr   r   r   ÚBasePermissionr   r    r'   r+   r0   r6   r<   rH   r   r   r   ú<module>rM      s    ðÝ &ç OÑ Oô	�×*Ñ*ô 	ô˜×2Ñ2ô ô	�K×.Ñ.ô 	ô˜K×6Ñ6ô ô�k×0Ñ0ô ô˜k×8Ñ8ô ô
˜{×9Ñ9ô 
ô*f K×$>Ñ$>õ fr   