Ë
    Ë.“j©~  ã                   ón  — d Z ddlmZ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 ddlmZ dd	lmZmZ dd
lmZ ddlmZmZmZmZmZmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ ddlKmLZL  e	«       ZMd„ ZNd„ ZOd„ ZPd„ ZQd„ ZRd„ ZSd„ ZT edg«       eee8g«      d „ «       «       ZU edg«       eee8g«      d!„ «       «       ZV edg«       eee8g«      d"„ «       «       ZW edg«       eee8g«      d#„ «       «       ZX edg«       eee8g«      d$„ «       «       ZY edg«       eee8g«      d%„ «       «       ZZ edg«       eee8g«      d&„ «       «       Z[ ed'g«       eee8g«      d(„ «       «       Z\ edg«       eee8g«      d)„ «       «       Z] edd*g«       eee8g«      d+„ «       «       Z^ edg«       eee8g«      d,„ «       «       Z_ edg«       eee8g«      d-„ «       «       Z` edg«       eee8g«      d.„ «       «       Zad/„ Zbd0„ Zc edg«       eee8g«      d1„ «       «       Zd edd'g«       eee8g«      d2„ «       «       Ze eg d3¢«       eee8g«      d4„ «       «       Zf ed'g«       eee8g«      d5„ «       «       Zg edg«       eee8g«      d6„ «       «       Zh edg«       eee8g«      d7„ «       «       Zi edg«       eee8g«      d8„ «       «       Zj ed'g«       eee8g«      d9„ «       «       Zky:);ziPlatform admin JSON APIs (`/api/admin/...`) for dashboard, users, verification lists, and trip lifecycle.é    )ÚdatetimeÚ	timedelta)ÚDecimal)Úsettings)Úget_user_model)Útransaction)ÚCountÚQÚSum)Útimezone)Úapi_viewÚpermission_classes)ÚIsAuthenticated)ÚKYCDocumentÚShipperProfileÚTransporterProfileÚUserRoleÚVehicleÚVehicleDocument)ÚPayment)Ú!ensure_invoice_for_completed_trip)
ÚAdminTripActionÚBidÚConversationÚFreightRouteÚMessageÚProofOfDeliveryÚRateRequestÚShipmentÚTripÚTripLocation)Úbulk_upsert_freight_routesÚparse_freight_route_upload)ÚCOUNTRY_BY_CODEÚCOUNTRY_CHOICESÚcountry_name_to_codeÚnormalize_country_codeé   )Únotify_users)ÚIsPlatformAdmin)Úapi_response)Úrecord_trip_status)Ú!AdminConversationDetailSerializerÚAdminConversationListSerializerÚAdminShipmentSerializerÚFreightRouteSerializerÚKYCDocumentSerializerÚMessageSerializerÚPODSerializerÚRateRequestSerializerÚTripDetailSerializerÚTripListSerializerÚTripLocationSerializerÚVehicleDocumentSerializerÚVehicleSerializer)Ú_sync_shipment_status_from_tripc                 óv  — t        | |«       |t        j                  j                  k(  rf| j                  }|j
                  t        j                  j                  k7  r3t        j                  j                  |_        |j                  ddg¬«       |t        j                  j                  k(  rt        | ¬«       yy)z�
    Apply the same shipment mapping as driver status updates, plus CLOSED trip -> CLOSED shipment
    (driver helper does not map CLOSED).
    ÚstatusÚ
updated_at©Úupdate_fields©ÚtripN)
r:   r    ÚStatusÚCLOSEDÚshipmentr<   r   ÚsaveÚ	COMPLETEDr   )rA   Únew_trip_statusrD   s      ú'/var/www/html/truck-me/api/admin_api.pyÚ(_admin_sync_shipment_after_trip_overriderI   9   s‚   € ô
 $ D¨/Ô:Øœ$Ÿ+™+×,Ñ,Ò,Ø—=‘=ˆØ�?‰?œhŸo™o×4Ñ4Ò4Ü&Ÿo™o×4Ñ4ˆHŒOØ�M‰M¨°<Ð(@ˆMÔAØœ$Ÿ+™+×/Ñ/Ò/Ü)¨tÖ4ð 0ó    c                 óT  — | sy t        | t        «      r,t        j                  | «      r| S t        j                  | «      S 	 t        j
                  t        | «      j                  dd«      «      }t        j                  |«      r|S t        j                  |«      S # t        $ r Y y w xY w)NÚZz+00:00)	Ú
isinstancer   r   Úis_awareÚ
make_awareÚfromisoformatÚstrÚreplaceÚ
ValueError)ÚvalueÚdts     rH   Ú	_parse_dtrV   H   s�   € ÙØÜ�%œÔ"Ü ×)Ñ)¨%Ô0ˆuÐP´h×6IÑ6IÈ%Ó6PÐPðÜ×#Ñ#¤C¨£J×$6Ñ$6°s¸HÓ$EÓFˆÜ×&Ñ& rÔ*ˆrÐG´×0CÑ0CÀBÓ0GÐGøÜò Ùðús   ÁAB ÂB Â	B'Â&B'c                 ó(  — 	 t        dt        | j                  j                  dd«      «      «      }	 t        dt        dt        | j                  j                  dd«      «      «      «      }||fS # t        $ r d}Y ŒKw xY w# t        $ r d}Y ||fS w xY w)Nr(   ÚpageÚ1éd   Ú	page_sizeÚ20é   )ÚmaxÚintÚquery_paramsÚgetrS   Úmin)ÚrequestrX   r[   s      rH   Ú_page_paramsrd   T   sœ   € ðÜ�1”c˜'×.Ñ.×2Ñ2°6¸3Ó?Ó@ÓAˆðÜ˜œS ¤C¨×(<Ñ(<×(@Ñ(@ÀÈdÓ(SÓ$TÓUÓVˆ	ð �ˆ?Ðøô ò ØŠðûô ò Ø‰	Ø�ˆ?Ððús"   ‚/A/ ²9B  Á/A=Á<A=Â BÂBc                 ój   — t        | «      \  }}|j                  «       }|dz
  |z  }||||z    |||dœfS )Nr(   )rX   r[   Útotal)rd   Úcount)rc   ÚqsrX   r[   rf   Ústarts         rH   Ú	_paginaterj   `   sH   € Ü" 7Ó+�O€Dˆ)Ø�H‰H‹J€EØ�A‰X˜Ñ"€EØˆe�e˜iÑ'Ð(°4ÀiÐZ_Ñ*`Ð`Ð`rJ   c                 ól   — | €y t        | «      j                  «       j                  «       }|dv ry|dv ryy )N)rY   ÚtrueÚyesÚonT)Ú0ÚfalseÚnoÚoffF)rQ   ÚstripÚlower)ÚrawÚss     rH   Ú_parse_bool_paramrw   g   s>   € Ø
€{ØÜˆC‹�‰Ó×ÑÓ €AØÐ&Ñ&ØØÐ'Ñ'ØØrJ   c           
      ó  — d }	 | j                   j                   }| j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  |dœ	S # t        j                  $ r Y Œqw xY w)N)	ÚidÚemailÚusernameÚ
first_nameÚ	last_nameÚ	is_activeÚis_staffÚdate_joinedÚrole)r�   r   ÚDoesNotExistry   rz   r{   r|   r}   r~   r   r€   )Úur�   s     rH   Ú_user_list_rowr„   r   sz   € Ø€DðØ�v‰v�{‰{ˆð �d‰dØ—‘Ø—J‘JØ—l‘lØ—[‘[Ø—[‘[Ø—J‘JØ—}‘}Øñ
ð 
øô × Ñ ò Ùðús   „A6 Á6BÂBc                 ó®  — t        | «      }	 | j                  }|j                  |j                  |j                  |j
                  dœ|d<   	 | j                  }|j                  |j                  |j                  dœ|d<   |j                  d«      }|t        j                  j                  k(  r�dt        j                   j#                  | ¬«      j%                  «       i|d<   t        j                   j#                  | ¬«      j'                  d	«      d d
 }t)        |d¬«      j*                  |d<   |S |t        j                  j,                  k(  r½t.        j                   j#                  | ¬«      j%                  «       t0        j                   j#                  | ¬«      j%                  «       dœ|d<   t0        j                   j#                  | ¬«      j3                  d«      j'                  d	«      d d
 }t5        |d¬«      j*                  |d<   |S i |d<   g |d<   g |d<   |S # t        j                  $ r	 d |d<   Y �Œéw xY w# t        j                  $ r	 d |d<   Y �ŒÔw xY w)N)Úaccount_typeÚcompany_nameÚkyc_verifiedÚcredit_approvedÚshipper_profile)r†   r‡   Údocuments_verifiedÚtransporter_profiler�   Ú	shipments)ÚshipperÚcountsú-idé
   T©ÚmanyÚrecent_shipments)Útransporter)ÚbidsÚtripsrD   Úrecent_trips)r„   rŠ   r†   r‡   rˆ   r‰   r   r‚   rŒ   r‹   r   ra   r   ÚRoleÚSHIPPERr   ÚobjectsÚfilterrg   Úorder_byr/   ÚdataÚTRANSPORTERr   r    Úselect_relatedr6   )ÚuserÚrowÚspÚtpr�   Úrecents         rH   Ú_user_detail_payloadr¦   …   s/  € Ü
˜Ó
€Cð	&Ø×!Ñ!ˆàŸO™OØŸO™OØŸO™OØ!×1Ñ1ñ	"
ˆÐÑð*Ø×%Ñ%ˆàŸO™OØŸO™OØ"$×"7Ñ"7ñ&
ˆÐ!Ñ"ð �7‰7�6‹?€DØŒx�}‰}×$Ñ$Ò$àœ×)Ñ)×0Ñ0¸Ð0Ó>×DÑDÓFð
ˆˆH‰ô ×!Ñ!×(Ñ(°Ð(Ó6×?Ñ?ÀÓFÀsÈÐKˆÜ"9¸&ÀtÔ"L×"QÑ"QˆÐÑð €Jð 
”—‘×*Ñ*Ò	*ä—K‘K×&Ñ&°4Ð&Ó8×>Ñ>Ó@Ü—\‘\×(Ñ(°TÐ(Ó:×@Ñ@ÓBñ
ˆˆH‰ô —‘×$Ñ$°Ð$Ó6×EÑEÀjÓQ×ZÑZÐ[`ÓaÐbeÐceÐfˆÜ0°¸dÔC×HÑHˆˆNÑð
 €Jð ˆˆH‰Ø"$ˆÐÑØ ˆˆNÑØ€Jøô= ×&Ñ&ò &Ø!%ˆÐÔð&ûô ×*Ñ*ò *Ø%)ˆÐ!Ô"ð*ús#   �>H Á3H8 ÈH5È4H5È8IÉIÚGETc                 ó   — t        | j                  j                  d«      «      }t        t	        t
        dd«      xs d«      }t        j                  «       t        |¬«      z
  }t        j                  j                  t        j                  j                  h}t        |¬«       }t        j                  j                  |«      j!                  «       }t        j                  j                  t        j                  j"                  t        j                  j$                  g|¬«      j!                  «       }t        j                  j'                  d«      j)                  t+        d«      ¬	«      D �ci c]  }|d   |d
   “Œ }	}t,        j                  j'                  d«      j)                  t+        d«      ¬	«      D �ci c]  }|d   |d
   “Œ }
}t.        j                  j                  t.        j                  j0                  ¬«      }|r|j                  |¬«      }|j3                  t5        d«      t+        d«      ¬«      }|d   xs t7        d«      }|d   xs d}t8        j                  j!                  «       }t8        j                  j                  d¬«      j!                  «       }t8        j                  j                  dd¬«      j!                  «       }t:        j                  j                  d¬«      j!                  «       }t=        dd||||	dœd|
it?        |«      || j                  j                  d«      dœd ||||dœdœ¬«      S c c}w c c}w )NÚsinceÚADMIN_STALE_TRIP_HOURSé0   )Úhours)Ú
status__in)r­   Úupdated_at__ltr<   ry   )Úcr¯   ©r<   ©Úcreated_at__gteÚamount)rf   Únrf   ro   r´   r   T©Úis_verified)r¶   r~   )r‹   éÈ   z&Dashboard KPIs retrieved successfully.)Úactive_countÚstale_trips_countÚstale_trip_hours_thresholdÚ	by_statusr»   )Úcaptured_payments_totalÚcaptured_payments_countr©   )Úvehicles_totalÚvehicles_verifiedÚvehicles_active_and_verifiedÚtransporters_documents_verified)r—   r�   ÚrevenueÚ
commissionÚavailability©rž   ) rV   r`   ra   r_   ÚgetattrÚdjango_settingsr   Únowr   r    rB   rC   rF   r
   r›   rœ   rg   ÚEN_ROUTEÚ
IN_TRANSITÚvaluesÚannotater	   r   r   ÚCAPTUREDÚ	aggregater   r   r   r   r+   rQ   )rc   r©   Ústale_hoursÚstale_cutoffÚtrip_terminalÚtrip_active_qÚactive_tripsÚstale_tripsr¢   Útrip_by_statusÚshipment_by_statusÚpay_qsÚaggÚrevenue_totalÚpayments_captured_countr¾   r¿   Úvehicles_active_verifiedÚtransporters_verified_docss                      rH   Úadmin_dashboardrÝ   °   sß  € ô �g×*Ñ*×.Ñ.¨wÓ7Ó8€EÜ”gœoÐ/GÈÓLÒRÐPRÓS€KÜ—<‘<“>¤I°KÔ$@Ñ@€Lä—[‘[×'Ñ'¬¯©×)>Ñ)>Ð?€MÜ -Ô0Ð0€MÜ—<‘<×&Ñ& }Ó5×;Ñ;Ó=€Lä—,‘,×%Ñ%Ü—K‘K×(Ñ(¬$¯+©+×*@Ñ*@ÐAØ#ð &ó ÷ �eƒgð ô —<‘<×&Ñ& xÓ0×9Ñ9¼EÀ$»KÐ9ÓHöàð 	ˆH‰�s˜3‘xÑð€Nð ô ×#Ñ#×*Ñ*¨8Ó4×=Ñ=ÄÀdÃÐ=ÓLöàð 	ˆH‰�s˜3‘xÑðÐð ô
 �_‰_×#Ñ#¬7¯>©>×+BÑ+BÐ#ÓC€FÙØ—‘¨u�Ó5ˆØ
×
Ñ
¤ X£´%¸³+Ð
Ó
>€CØ˜‘LÒ0¤G¨C£L€MØ! #™hšm¨!Ðä—_‘_×*Ñ*Ó,€NÜŸ™×.Ñ.¸4Ð.Ó@×FÑFÓHÐÜ&Ÿ™×5Ñ5À$ÐRVÐ5ÓW×]Ñ]Ó_ÐÜ!3×!;Ñ!;×!BÑ!BÐVZÐ!BÓ![×!aÑ!aÓ!cÐäØØ0ð !-Ø%0Ø.9Ø+ñ	ð &Ð'9Ð:ä+.¨}Ó+=Ø+BØ ×-Ñ-×1Ñ1°'Ó:ñð
 à"0Ø%6Ø0HØ3Mñ	ñ
ôð ùò+ùòs   Å-MÆ9Mc                 ó  — t         j                  j                  d«      j                  d«      }| j                  j                  d«      }|r|j                  |¬«      }| j                  j                  d«      }|r	 |j                  t        |«      ¬«      }| j                  j                  d
«      | j                  j                  d«      }}t        |«      t        |«      }}|r|€t        ddd¬	«      S |r|€t        ddd¬	«      S |r|j                  |¬«      }|r|j                  |¬«      }t        | |«      \  }}	t        |d¬«      }
t        ddd|
j                  i|	¥¬«      S # t        $ r t        ddd¬	«      cY S w xY w)NrŽ   r�   r<   r°   Ú
shipper_id©rß   é�  zInvalid shipper_id.©ÚerrorÚcreated_fromÚ
created_toz/created_from must be a valid ISO-8601 datetime.zInvalid date.z-created_to must be a valid ISO-8601 datetime.r±   )Úcreated_at__lteTr’   r·   z!Shipments retrieved successfully.ÚresultsrÅ   )r   r›   r    r�   r`   ra   rœ   r_   rS   r+   rV   rj   r/   rž   )rc   rh   ÚstÚsidÚcfÚctÚdfrU   Úpage_qsÚmetaÚsers              rH   Úadmin_shipment_listrð   ð   sx  € ô 
×	Ñ	×	(Ñ	(¨Ó	3×	<Ñ	<¸UÓ	C€BØ	×	Ñ	×	!Ñ	! (Ó	+€BÙ	Ø�Y‰Y˜bˆYÓ!ˆØ
×
Ñ
×
"Ñ
" <Ó
0€CÙ
ð	YØ—‘¤c¨#£h�Ó/ˆBð ×!Ñ!×%Ñ% nÓ5°w×7KÑ7K×7OÑ7OÐP\Ó7]ˆ€BÜ�r‹]œI b›Mˆ€BÙ	ˆbˆjÜ˜CÐ!RÐZiÔjÐjÙ	ˆbˆjÜ˜CÐ!PÐXgÔhÐhÙ	Ø�Y‰Y rˆYÓ*ˆÙ	Ø�Y‰Y rˆYÓ*ˆä˜g rÓ*�M€GˆTÜ
! '°Ô
5€CÜ˜Ð@È	ÐSV×S[ÑS[ÐGdÐ_cÐGdÔeÐeøô ò 	YÜ Ð%:ÐBWÔXÒXð	Yús   Á<E' Å'FÆ Fc                 óf  — 	 t         j                  j                  d«      j                  |¬«      }t        |«      j                  }	 |j                  j                  |d<   t        dd	|¬
«      S # t         j                  $ r t        ddd¬«      cY S w xY w# t        j                  $ r d |d<   Y ŒOw xY w)NrŽ   ©Úpké”  úShipment not found.ú
Not found.râ   Útrip_idr·   z Shipment retrieved successfully.rÅ   )r   r›   r    ra   r‚   r+   r/   rž   rA   ry   r    )rc   Úshipment_idÚshrž   s       rH   Úadmin_shipment_detailrú     s®   € ðLÜ×Ñ×,Ñ,¨YÓ7×;Ñ;¸{Ð;ÓKˆô # 2Ó&×+Ñ+€DðØŸ'™'Ÿ*™*ˆˆY‰ô ˜Ð?ÀdÔKÐKøô × Ñ ò LÜ˜CÐ!6¸lÔKÒKðLûô
 ×Ñò ØˆˆY‹ðús#   ‚/A. ÁB Á.!BÂBÂB0Â/B0c                 óˆ  — t         j                  j                  ddd«      j                  d«      }| j                  j                  d«      }|r|j                  |¬«      }| j                  j                  d«      }|r	 |j                  t        |«      ¬«      }| j                  j                  d«      }|r	 |j                  t        |«      ¬«      }t        | |«      \  }}t        |d¬«      }t        ddd|j                  i|¥¬«      S # t        $ r t        d	d
d
¬«      cY S w xY w# t        $ r t        d	dd¬«      cY S w xY w)NrD   r•   Úaccepted_bidr�   r<   r°   Útransporter_id©rý   rá   zInvalid transporter_id.râ   rø   ©rø   zInvalid shipment_id.Tr’   r·   zTrips retrieved successfully.rç   rÅ   )r    r›   r    r�   r`   ra   rœ   r_   rS   r+   rj   r6   rž   )rc   rh   rè   ÚtidÚspkrí   rî   rï   s           rH   Úadmin_trip_listr    s>  € ô 
�‰×	$Ñ	$ Z°ÀÓ	O×	XÑ	XÐY^Ó	_€BØ	×	Ñ	×	!Ñ	! (Ó	+€BÙ	Ø�Y‰Y˜bˆYÓ!ˆØ
×
Ñ
×
"Ñ
"Ð#3Ó
4€CÙ
ð	aØ—‘¬#¨c«(�Ó3ˆBð ×
Ñ
×
"Ñ
" =Ó
1€CÙ
ð	[Ø—‘¤s¨3£x�Ó0ˆBô ˜g rÓ*�M€GˆTÜ
˜W¨4Ô
0€CÜ˜Ð<ÀIÈsÏxÉxÐC`Ð[_ÐC`ÔaÐaøô ò 	aÜ Ð%>ÐF_Ô`Ò`ð	aûô ò 	[Ü Ð%;ÐCYÔZÒZð	[ús$   Á>D
 Â7D' Ä
D$Ä#D$Ä'EÅ Ec                 ó‚  — 	 t         j                  j                  ddd«      j                  |¬«      }t        |«      j                  }	 t        j                  j                  |¬	«       d
|d<   t        dd|¬«      S # t         j                  $ r t        ddd¬«      cY S w xY w# t        j                  $ r d|d<   Y ŒOw xY w)NrD   r•   rü   rò   rô   úTrip not found.rö   râ   r@   TÚhas_podFr·   zTrip retrieved successfully.rÅ   )	r    r›   r    ra   r‚   r+   r5   rž   r   )rc   r÷   rA   rž   s       rH   Úadmin_trip_detailr  5  sÀ   € ðHÜ�|‰|×*Ñ*¨:°}ÀnÓU×YÑYÐ]dÐYÓeˆô   Ó%×*Ñ*€Dð Ü×Ñ×#Ñ#¨Ð#Ô.ØˆˆY‰ô ˜Ð;À$ÔGÐGøô ×Ñò HÜ˜CÐ!2¸,ÔGÒGðHûô ×'Ñ'ò  ØˆˆY‹ð ús#   ‚1A< Á	%B# Á<!B ÂB Â#B>Â=B>c                 óH  — t         j                  j                  |¬«      j                  «       st	        ddd¬«      S t
        j                  j                  |¬«      j                  d«      }t        | |«      \  }}t        |d¬	«      }t	        d
dd|j                  i|¥¬«      S )Nrò   rô   r  rö   râ   ©r÷   z-recorded_atTr’   r·   z&Trip locations retrieved successfully.rç   rÅ   )
r    r›   rœ   Úexistsr+   r!   r�   rj   r7   rž   )rc   r÷   rh   rí   rî   rï   s         rH   Úadmin_trip_locationsr
  E  s”   € ô �<‰<×Ñ 'ÐÓ*×1Ñ1Ô3Ü˜CÐ!2¸,ÔGÐGÜ	×	Ñ	×	$Ñ	$¨WÐ	$Ó	5×	>Ñ	>¸~Ó	N€BÜ˜g rÓ*�M€GˆTÜ
  ¨tÔ
4€CÜ˜ÐEÈYÐX[×X`ÑX`ÐLiÐdhÐLiÔjÐjrJ   c           	      óT  — t         j                  j                  |¬«      j                  «       st	        ddd¬«      S 	 t
        j                  j                  |¬«      }t	        dd	t        |d
| i¬«      j                  ¬«      S # t
        j                  $ r t	        ddd¬«      cY S w xY w)Nrò   rô   r  rö   râ   r  zPOD not yet submitted.r·   zPOD retrieved successfully.rc   ©ÚcontextrÅ   )
r    r›   rœ   r	  r+   r   ra   r‚   r3   rž   )rc   r÷   Úpods      rH   Úadmin_trip_podr  P  s    € ô �<‰<×Ñ 'ÐÓ*×1Ñ1Ô3Ü˜CÐ!2¸,ÔGÐGðOÜ×%Ñ%×)Ñ)°'Ð)Ó:ˆô ˜Ð:ÄÈsÐ]fÐhoÐ\pÔAq×AvÑAvÔwÐwøô ×'Ñ'ò OÜ˜CÐ!9ÀÔNÒNðOús   ¾ B Â!B'Â&B'ÚPOSTc           	      ó:  — 	 t         j                  j                  d«      j                  |¬«      }| j                  j                  d«      xs dj                  «       }| j                  j                  d	«      xs dj                  «       }|st        d
dd¬«      S |t         j                  j                  vrt        d
dd¬«      S |j                  }||k(  rt        d
dd¬«      S t        j                  «       5  ||_
        |j                  ddg¬«       t        ||«       t        ||«       t         j                  j#                  || j$                  |||¬«       d d d «       t'        |j(                  j*                  |j,                  gdt/        |j0                  «      t/        |j2                  «      t/        |«      ddœdd|› �¬«       t        ddt5        |«      j                  ¬«      S # t         j                  $ r t        ddd¬«      cY S w xY w# 1 sw Y   Œ¸xY w)NrD   rò   rô   r  rö   râ   Ú
new_statusÚ Újustificationrá   z0justification is required and must be non-empty.zMissing justification.zInvalid new_status for trip.úInvalid status.zTrip is already in this status.z
No change.r<   r=   r>   )rA   Úperformed_byÚprevious_statusr  r  ÚTRIP_STATUST)r÷   rø   r<   Úadmin_overridezTrip update (admin)zTrip status set to )ÚtitleÚbodyr·   z$Trip status overridden successfully.rÅ   )r    r›   r    ra   r‚   r+   rž   rs   rB   rË   r<   r   ÚatomicrE   r,   rI   r   Úcreater¡   r)   rD   rß   rý   rQ   ry   rø   r6   )rc   r÷   rA   r  r  Úprevs         rH   Úadmin_trip_status_overrider  \  sì  € ðHÜ�|‰|×*Ñ*¨:Ó6×:Ñ:¸gÐ:ÓFˆð —,‘,×"Ñ" <Ó0Ò6°B×=Ñ=Ó?€JØ—\‘\×%Ñ% oÓ6Ò<¸"×CÑCÓE€MÙÜ˜CÐ!SÐ[sÔtÐtØœŸ™×+Ñ+Ñ+Ü˜CÐ!?ÐGXÔYÐYà�;‰;€DØˆzÒÜ˜CÐ!BÈ,ÔWÐWä	×	Ñ	Ó	ñ 
Ø ˆŒØ�	‰	 ¨<Ð 8ˆ	Ô9Ü˜4 Ô,Ü0°°zÔBÜ×Ñ×&Ñ&ØØ Ÿ™Ø Ø!Ø'ð 	'ô 	
÷
ô Ø	�‰×	!Ñ	! 4×#6Ñ#6Ð7Øä˜4Ÿ7™7“|Ü˜t×/Ñ/Ó0Ü˜*“oØ"ñ		
ð $Ø" : ,Ð/õô ØØ.Ü Ó%×*Ñ*ôð øôO ×Ñò HÜ˜CÐ!2¸,ÔGÒGðHú÷
ð 
ús   ‚/G* Ã8A"HÇ*!HÈHÈHc                 óˆ  — t         j                  j                  d«      j                  d«      }| j                  j                  d«      }|r<|t        j                  j                  vrt        ddd¬«      S |j                  |¬«      }t        | j                  j                  d«      «      }|�|j                  |¬	«      }| j                  j                  d
«      xs dj                  «       }|r(|j                  t        |¬«      t        |¬«      z  «      }t        | j                  j                  d«      «      }|�|j                  |¬«      }t        | j                  j                  d«      «      }|�|j                  |¬«      }t        | |«      \  }}t        ddd|D �	cg c]  }	t        |	«      ‘Œ c}	i|¥¬«      S c c}	w )Nr�   r�   rá   zInvalid role filter.úInvalid role.râ   )Ú
role__roler~   ©r~   Úsearchr  )Úemail__icontains)Úusername__icontainsrˆ   )Úshipper_profile__kyc_verifiedr‹   )Ú'transporter_profile__documents_verifiedr·   zUsers retrieved successfully.rç   rÅ   )ÚUserr›   r    r�   r`   ra   r   r™   rË   r+   rœ   rw   rs   r
   rj   r„   )
rc   rh   r�   Úactiver$  ÚkycÚdocsrí   rî   rƒ   s
             rH   Úadmin_user_listr-  �  sŠ  € ô 
�‰×	$Ñ	$ VÓ	,×	5Ñ	5°eÓ	<€BØ×Ñ×#Ñ# FÓ+€DÙØ”x—}‘}×+Ñ+Ñ+Ü Ð%;À?ÔSÐSØ�Y‰Y $ˆYÓ'ˆÜ˜w×3Ñ3×7Ñ7¸ÓDÓE€FØÐØ�Y‰Y ˆYÓ(ˆØ×"Ñ"×&Ñ& xÓ0Ò6°B×=Ñ=Ó?€FÙØ�Y‰Y”q¨&Ô1´AÈ&Ô4QÑQÓRˆÜ
˜G×0Ñ0×4Ñ4°^ÓDÓ
E€CØ
€Ø�Y‰Y°SˆYÓ9ˆÜ˜W×1Ñ1×5Ñ5Ð6JÓKÓL€DØÐØ�Y‰Y¸tˆYÓDˆä˜g rÓ*�M€GˆTÜØØ'Ø°WÖ=°œ.¨Õ+Ò=ÐFÀÐFôð ùò >s   Æ"F?ÚPATCHc                 óB  — 	 t         j                  j                  d«      j                  |¬«      }| j                  dk(  rt        dd	t        |«      ¬
«      S | j                  }t        |t        «      st        ddd¬«      S || j                  j                  k(  r!|j                  d«      du rt        ddd¬«      S d|v rÁ|j                  d«      }|t        j                  j                  vrt        ddd¬«      S |t        j                  j                   k(  r$| j                  j"                  st        ddd¬«      S t        j                  j%                  ||dddœ¬«      \  }}|s||_        |j)                  ddg¬«       d|v rI|j                  d«      }t        |t*        «      st        ddd¬«      S ||_        |j)                  dg¬«       d|v rW|j                  d«      }t        |t*        «      st        dd d!¬«      S 	 |j.                  }||_        |j)                  ddg¬«       d$|v rW|j                  d$«      }t        |t*        «      st        dd%d!¬«      S 	 |j.                  }||_        |j)                  d$dg¬«       d&|v rW|j                  d&«      }t        |t*        «      st        dd'd!¬«      S 	 |j6                  }	||	_        |	j)                  d&dg¬«       |j=                  «        t        dd)t        |«      ¬
«      S # t         j                  $ r t        ddd¬«      cY S w xY w# t0        j                  $ r t        dd"d#¬«      cY S w xY w# t0        j                  $ r t        dd"d#¬«      cY S w xY w# t8        j                  $ r t        dd(d#¬«      cY S w xY w)*Nr�   rò   rô   zUser not found.rö   râ   r§   r·   zUser retrieved successfully.rÅ   rá   zJSON object body required.zInvalid body.r~   Fz4You cannot deactivate your own account via this API.zForbidden self-change.zInvalid role value.r!  i“  z9Only Django superusers may assign the ADMIN role via API.z
Forbidden.r  Úen)r�   ÚphoneÚlanguage)r¡   Údefaultsr=   r>   zis_active must be a boolean.zInvalid is_active.rˆ   zkyc_verified must be a boolean.zInvalid field.zUser has no shipper profile.zInvalid target.r‰   z"credit_approved must be a boolean.r‹   z%documents_verified must be a boolean.z User has no transporter profile.zUser updated successfully.)r)  r›   r    ra   r‚   r+   Úmethodr¦   rž   rM   Údictr¡   ry   r   r™   rË   ÚADMINÚis_superuserÚget_or_creater�   rE   Úboolr~   rŠ   r   rˆ   r‰   rŒ   r   r‹   Úrefresh_from_db)
rc   Úuser_idr¡   r  Únew_roleÚurÚcreatedÚvalr£   r¤   s
             rH   Úadmin_user_detailr@  ­  sŒ  € ðHÜ�|‰|×*Ñ*¨6Ó2×6Ñ6¸'Ð6ÓBˆð ‡~�~˜ÒÜ˜CÐ!?ÔFZÐ[_ÓF`ÔaÐaà�<‰<€DÜ�dœDÔ!Ü˜CÐ!=À_ÔUÐUà�'—,‘,—/‘/Ò! d§h¡h¨{Ó&;¸uÑ&DÜ˜CÐ!WÐ_wÔxÐxà��~Ø—8‘8˜FÓ#ˆØœ8Ÿ=™=×/Ñ/Ñ/Ü Ð%:À/ÔRÐRØ”x—}‘}×*Ñ*Ò*°7·<±<×3LÒ3LÜØØKØ"ôð ô
 ×&Ñ&×4Ñ4ØØ&°ÀÑFð 5ó 
‰ˆˆGñ ØˆBŒGØ�G‰G 6¨<Ð"8ˆGÔ9à�dÑØ�h‰h�{Ó#ˆÜ˜#œtÔ$Ü Ð%CÐK_Ô`Ð`ØˆŒØ�	‰	  ˆ	Ô.à˜ÑØ�h‰h�~Ó&ˆÜ˜#œtÔ$Ü Ð%FÐN^Ô_Ð_ð	^Ø×%Ñ%ˆBð ˆŒØ
�‰˜~¨|Ð<ˆÔ=à˜DÑ Ø�h‰hÐ(Ó)ˆÜ˜#œtÔ$Ü Ð%IÐQaÔbÐbð	^Ø×%Ñ%ˆBð !ˆÔØ
�‰Ð0°,Ð?ˆÔ@à˜tÑ#Ø�h‰hÐ+Ó,ˆÜ˜#œtÔ$Ü Ð%LÐTdÔeÐeð	bØ×)Ñ)ˆBð !$ˆÔØ
�‰Ð3°\ÐBˆÔCà×ÑÔÜ˜Ð9Ô@TÐUYÓ@ZÔ[Ð[øôQ ×Ñò HÜ˜CÐ!2¸,ÔGÒGðHûôX ×*Ñ*ò 	^Ü Ð%CÐK\Ô]Ò]ð	^ûô ×*Ñ*ò 	^Ü Ð%CÐK\Ô]Ò]ð	^ûô "×.Ñ.ò 	bÜ Ð%GÐO`ÔaÒað	búsG   ‚/L ÈL, ÉM Ê7M: Ì!L)Ì(L)Ì,!MÍMÍ!M7Í6M7Í:!NÎNc                 óÈ  — t         j                  j                  ddd«      j                  d«      }| j                  j                  d«      }|r|j                  |¬«      }| j                  j                  d«      }|r	 |j                  t        |«      ¬«      }t        | |«      \  }}t        |dd| i¬«      }g }t        |j                  |«      D ]b  \  }}	t        |«      }
|	j                  j                   |
d<   t#        |	j                  j$                  dd«      xs d|
d<   |j'                  |
«       Œd t        ddd|i|¥¬«      S # t        $ r t        d	d
d
¬«      cY S w xY w)NÚvehicleÚvehicle__ownerÚreviewed_byú-submitted_atÚreview_status)rF  Ú
vehicle_id)rG  rá   zInvalid vehicle_id.râ   Trc   ©r“   r  Úvehicle_owner_idrz   r  Úvehicle_owner_emailr·   z)Vehicle documents retrieved successfully.rç   rÅ   )r   r›   r    r�   r`   ra   rœ   r_   rS   r+   rj   r8   Úziprž   r5  rB  Úowner_idrÆ   ÚownerÚappend)rc   rh   ÚrsÚvidrí   rî   rï   ÚrowsÚitemÚdocr¢   s              rH   Úadmin_vehicle_document_listrT  ý  s`  € ô 
×	 Ñ	 ×	/Ñ	/°	Ð;KÈ]Ó	[×	dÑ	dÐetÓ	u€BØ	×	Ñ	×	!Ñ	! /Ó	2€BÙ	Ø�Y‰Y RˆYÓ(ˆØ
×
Ñ
×
"Ñ
" <Ó
0€CÙ
ð	YØ—‘¤c¨#£h�Ó/ˆBô ˜g rÓ*�M€GˆTÜ
# G°$ÀÈGÐ@TÔ
U€CØ€DÜ˜Ÿ™ 7Ó+ò ‰	ˆˆcÜ�4‹jˆØ"%§+¡+×"6Ñ"6ˆÐÑÜ%,¨S¯[©[×->Ñ->ÀÈÓ%LÒ%RÐPRˆÐ!Ñ"Ø�‰�CÕð	ô
 ˜ÐHÐPYÐ[_ÐOhÐcgÐOhÔiÐiøô ò 	YÜ Ð%:ÐBWÔXÒXð	Yús   Á>E ÅE!Å E!c                 ó^  — t         j                  j                  ddd«      j                  d«      }t	        | j
                  j                  d«      «      }|�|j                  |¬«      }t	        | j
                  j                  d«      «      }|�|j                  |¬«      }| j
                  j                  d	«      }|r	 |j                  t        |«      ¬
«      }t        | |«      \  }}t        |d¬«      }t        ddd|j                  i|¥¬«      S # t        $ r t        ddd¬«      cY S w xY w)NrM  Úassigned_driverÚverified_byr�   r¶   rµ   r~   r#  rL  )rL  rá   zInvalid owner_id.râ   Tr’   r·   z Vehicles retrieved successfully.rç   rÅ   )r   r›   r    r�   rw   r`   ra   rœ   r_   rS   r+   rj   r9   rž   )rc   rh   ÚivÚiaÚoidrí   rî   rï   s           rH   Úadmin_vehicle_listr[    s   € ô 
�‰×	'Ñ	'¨Ð1BÀMÓ	R×	[Ñ	[Ð\aÓ	b€BÜ	˜7×/Ñ/×3Ñ3°MÓBÓ	C€BØ	€~Ø�Y‰Y 2ˆYÓ&ˆÜ	˜7×/Ñ/×3Ñ3°KÓ@Ó	A€BØ	€~Ø�Y‰Y ˆYÓ$ˆØ
×
Ñ
×
"Ñ
" :Ó
.€CÙ
ð	UØ—‘¤C¨£H�Ó-ˆBô ˜g rÓ*�M€GˆTÜ
˜G¨$Ô
/€CÜ˜Ð?ÀyÐRU×RZÑRZÐFcÐ^bÐFcÔdÐdøô ò 	UÜ Ð%8Ð@SÔTÒTð	Uús   Â?D ÄD,Ä+D,c                 ó,  — t         j                  j                  d«      j                  t         j                  ¬«      j                  d«      }t        | j                  j                  d«      «      }|�|j                  |¬«      }| j                  j                  d«      }|r	 |j                  t        |«      ¬«      }t        | |«      \  }}t        |dd| i¬«      }t        ddd|j                  i|¥¬«      S # t        $ r t        dd	d	¬
«      cY S w xY w)Nr¡   )Údocument_type__inrE  Úverified)r^  r;  )r;  rá   zInvalid user_id.râ   Trc   rH  r·   z%KYC documents retrieved successfully.rç   rÅ   )r   r›   r    ÚexcludeÚLEGACY_VEHICLE_KYC_TYPESr�   rw   r`   ra   rœ   r_   rS   r+   rj   r1   rž   )rc   rh   r^  Úuidrí   rî   rï   s          rH   Úadmin_kyc_document_listrb  ,  s  € ô 
×	Ñ	×	+Ñ	+¨FÓ	3×	;Ñ	;Ü%×>Ñ>ð 
<ó 
ç�hˆÓð ô ! ×!5Ñ!5×!9Ñ!9¸*Ó!EÓF€HØÐØ�Y‰Y ˆYÓ)ˆØ
×
Ñ
×
"Ñ
" 9Ó
-€CÙ
ð	SØ—‘¤3 s£8�Ó,ˆBô ˜g rÓ*�M€GˆTÜ
 ¨d¸YÈÐ<PÔ
Q€CÜ˜ÐDÈIÐWZ×W_ÑW_ÐKhÐcgÐKhÔiÐiøô ò 	SÜ Ð%7Ð?QÔRÒRð	Sús   Â#C9 Ã9DÄDc                 ó\  — | xs dj                  «       }|sg S t        «       }t        |«      }|r|j                  |«       |j	                  «       }t        j                  «       D ];  \  }}||j	                  «       v s||j	                  «       v sŒ+|j                  |«       Œ= t        |«      S )zMResolve search text to ISO codes using core.countries as the source of truth.r  )rs   Úsetr&   Úaddrt   r$   ÚitemsÚlist)r$  ÚneedleÚcodesÚexactÚloweredÚcodeÚnames          rH   Ú_country_codes_matching_searchrn  A  s•   € àŠl˜×!Ñ!Ó#€FÙØˆ	Ü‹E€EÜ  Ó(€EÙØ�	‰	�%ÔØ�l‰l‹n€GÜ%×+Ñ+Ó-ò ‰
ˆˆdØ�d—j‘j“lÑ" g°·±³Ò&=Ø�I‰I�d�Oðô �‹;ÐrJ   c                 óÂ  — t         j                  j                  «       }t        | j                  j                  d«      «      }t        | j                  j                  d«      «      }|r|j                  |¬«      }|r|j                  |¬«      }| j                  j                  d«      xs dj                  «       }|r[t        |«      }t        «       }|rt        |¬«      t        |¬«      z  }|j                  t        |¬	«      t        |¬
«      z  |z  «      }| j                  j                  d«      xs dj                  «       }h d£}||vrd}|j                  |«      S )NÚoriginÚdestination)Úorigin_country_code)Údestination_country_coder$  r  )Úorigin_country_code__in)Údestination_country_code__in)Úorigin_country_code__icontains)Ú#destination_country_code__icontainsÚorderingú-updated_at>   ú-min_freightú-origin_country_codeú-destination_country_coder=   Úmin_freightrr  rs  ry  )r   r›   Úallr'   r`   ra   rœ   rs   rn  r
   r�   )	rc   rh   rp  rq  r$  Úmatched_codesÚname_qrx  Úalloweds	            rH   Ú_freight_route_querysetr‚  Q  s@  € Ü	×	Ñ	×	!Ñ	!Ó	#€BÜ# G×$8Ñ$8×$<Ñ$<¸XÓ$FÓG€FÜ(¨×)=Ñ)=×)AÑ)AÀ-Ó)PÓQ€KÙØ�Y‰Y¨6ˆYÓ2ˆÙØ�Y‰Y°ˆYÓ<ˆØ×"Ñ"×&Ñ& xÓ0Ò6°B×=Ñ=Ó?€FÙÜ6°vÓ>ˆÜ“ˆÙä¨-Ô8Ü°Ô?ñ@ð ð �Y‰YÜ¨VÔ4Ü°FÔ;ñ<àñó
ˆð
 ×$Ñ$×(Ñ(¨Ó4ÒE¸×LÑLÓN€Hò€Gð �wÑØ ˆØ�;‰;�xÓ Ð rJ   c                 ó*  — | j                   j                  d«      xs dj                  «       j                  «       }g }t        D ]@  \  }}|r%||j                  «       vr||j                  «       vrŒ-|j                  ||dœ«       ŒB t        dd|¬«      S )Nr$  r  )rl  rm  r·   z!Countries retrieved successfully.rÅ   )r`   ra   rs   rt   r%   rN  r+   )rc   r$  rç   rl  rm  s        rH   Úadmin_country_listr„  s  sŒ   € ð ×"Ñ"×&Ñ& xÓ0Ò6°B×=Ñ=Ó?×EÑEÓG€FØ€GÜ%ò 5‰
ˆˆdÙ�f D§J¡J£LÑ0°VÀ4Ç:Á:Ã<Ñ5OØØ�‰ ¨dÑ3Õ4ð5ô ˜Ð@ÀwÔOÐOrJ   c                 ó„  — | j                   dk(  rCt        | «      }t        | |«      \  }}t        |d¬«      }t	        ddd|j
                  i|¥¬«      S t        | j
                  ¬«      }|j                  «       st	        dd	|j                  ¬
«      S |j                  «       }t	        ddt        |«      j
                  ¬«      S )Nr§   Tr’   r·   z&Freight routes retrieved successfully.rç   rÅ   rá   úValidation failed.râ   éÉ   z#Freight route created successfully.)	r4  r‚  rj   r0   r+   rž   Úis_validÚerrorsrE   )rc   rh   rí   rî   rï   Úroutes         rH   Úadmin_freight_route_list_creater‹    s³   € ð ‡~�~˜ÒÜ$ WÓ-ˆÜ! '¨2Ó.‰ˆ�Ü$ W°4Ô8ˆÜØØ4Ø˜SŸX™XÐ.¨Ð.ô
ð 	
ô ! g§l¡lÔ
3€CØ�<‰<Œ>Ü˜CÐ!5¸S¿Z¹ZÔHÐHØ�H‰H‹J€EÜØØ-Ü# EÓ*×/Ñ/ôð rJ   )r§   r.  ÚPUTÚDELETEc                 óP  — 	 t         j                  j                  |¬«      }| j
                  dk(  r!t	        ddt        |«      j                  ¬	«      S | j
                  d
k(  r |j                  «        t	        ddd|i¬	«      S | j
                  dk(  }t        || j                  |¬«      }|j                  «       st	        dd|j                  ¬«      S |j                  «       }t	        ddt        |«      j                  ¬	«      S # t         j                  $ r t	        ddd¬«      cY S w xY w)Nrò   rô   zFreight route not found.rö   râ   r§   r·   z%Freight route retrieved successfully.rÅ   r�  z#Freight route deleted successfully.ry   r.  )rž   Úpartialrá   r†  z#Freight route updated successfully.)r   r›   ra   r‚   r+   r4  r0   rž   Údeleterˆ  r‰  rE   )rc   ró   rŠ  r�  rï   s        rH   Úadmin_freight_route_detailr‘  —  s  € ðQÜ×$Ñ$×(Ñ(¨BÐ(Ó/ˆð ‡~�~˜ÒÜØØ3Ü'¨Ó.×3Ñ3ô
ð 	
ð ‡~�~˜Ò!Ø�‰ŒÜ˜CÐ!FÈdÐTVÈZÔXÐXà�n‰n Ñ'€GÜ
  ¨W¯\©\À7Ô
K€CØ�<‰<Œ>Ü˜CÐ!5¸S¿Z¹ZÔHÐHØ�H‰H‹J€EÜØØ-Ü# EÓ*×/Ñ/ôð øô' ×$Ñ$ò QÜ˜CÐ!;À<ÔPÒPðQús   ‚ D Ä!D%Ä$D%c                 óü   — | j                   j                  d«      }|st        ddd¬«      S 	 t        |«      }t        |«      }t        dd|¬	«      S # t        $ r!}t        ddt        |«      ¬«      cY d }~S d }~ww xY w)
NÚfilerá   r†  zfile is required.râ   zUnable to parse upload.r·   z$Freight route bulk import completed.rÅ   )ÚFILESra   r+   r#   rS   rQ   r"   )rc   ÚuploadedrQ  ÚexcÚsummarys        rH   Úadmin_freight_route_bulk_importr˜  ¶  s€   € ð �}‰}× Ñ  Ó(€HÙÜ˜CÐ!5Ð=PÔQÐQðLÜ)¨(Ó3ˆô )¨Ó.€GÜ˜ÐCÈ'ÔRÐRøô	 ò LÜ˜CÐ!:Ä#ÀcÃ(ÔKÕKûðLús   ­A Á	A;ÁA6Á0A;Á6A;c                 ó4  — t         j                  j                  ddddddddd	«	      j                  d
«      j	                  d«      }| j
                  j                  d«      xs dj                  «       }|r2	 |j                  t        t        |«      ¬«      t        |¬«      z  «      }| j
                  j                  d«      xs dj                  «       }|r	 |j                  t        |«      ¬«      }| j
                  j                  d«      xs dj                  «       }|r	 |j                  t        |«      ¬«      }| j
                  j                  d«      xs dj                  «       }|r	 |j                  t        |«      ¬«      }| j
                  j                  d«      xs dj                  «       }|r*|dk(  r|j                  d¬«      }n|j                  |¬«      }| j
                  j                  d«      xs dj                  «       }|rÅ|j                  t        |¬«      t        |¬«      z  t        |¬«      z  t        |¬«      z  t        |¬ «      z  t        |¬!«      z  t        |¬"«      z  t        |¬#«      z  t        |¬$«      z  t        |¬%«      z  t        |¬&«      z  t        |¬'«      z  t        |¬(«      z  «      j                  «       }	 t        t        | j
                  j                  d)d*«      «      d+«      }	 t        t        | j
                  j                  d,d-«      «      d-«      }	|	d-z
  |z  }
|j!                  «       }||
|
|z    }t#        |dd.| i¬/«      }t%        d0d1||	||j&                  d2œ¬3«      S # t        t        f$ r |j                  |¬«      }Y �Œÿw xY w# t        t        f$ r Y �ŒÊw xY w# t        t        f$ r Y �Œ•w xY w# t        t        f$ r Y �Œ`w xY w# t        t        f$ r d*}Y Œúw xY w# t        t        f$ r d-}	Y Œáw xY w)4NrD   rŽ   Úshipper__roleÚshipper__shipper_profiler•   Útransporter__roleÚ transporter__transporter_profilerA   Útrip__assigned_driverÚmessagesz-created_atrø   r  rÿ   )Úshipment__unique_id__iexactr÷   r  rß   rà   rý   rþ   r<   ÚPRE_TRIPT)Útrip__isnull)Útrip__statusr$  )Úshipment__unique_id__icontains)Ú#shipment__pickup_address__icontains)Ú%shipment__delivery_address__icontains)Úshipment__cargo_type__icontains)Úshipper__email__icontains)Úshipper__first_name__icontains)Úshipper__last_name__icontains)Útransporter__email__icontains)Ú"transporter__first_name__icontains)Ú!transporter__last_name__icontains)Ú9transporter__transporter_profile__company_name__icontains)Ú'trip__assigned_driver__email__icontains)Úmessages__text__icontainsr[   r]   rZ   rX   r(   rc   rH  r·   z%Conversations retrieved successfully.)rf   rX   r[   ÚconversationsrÅ   )r   r›   r    Úprefetch_relatedr�   r§   ra   rs   rœ   r
   r_   rS   Ú	TypeErrorÚdistinctrb   r^   rg   r.   r+   rž   )rc   rh   rø   r÷   rß   rý   Ústatus_filterr$  r[   Úpage_numÚoffsetrf   rf  Ú
serializers                 rH   Úadmin_conversations_listr¹  Æ  sô  € ô 	×Ñ×+Ñ+ØØØØ&ØØØ.ØØ#ó
	
÷ 
Ñ	˜*Ó	%ß	‰�-Ó	 ð ð  —;‘;—?‘? =Ó1Ò7°R×>Ñ>Ó@€KÙð	DØ—‘œ1¬¨[Ó)9Ô:¼QÐ[fÔ=gÑgÓhˆBð �{‰{�‰˜yÓ)Ò/¨R×6Ñ6Ó8€GÙð	Ø—‘¤3 w£<�Ó0ˆBð —+‘+—/‘/ ,Ó/Ò5°2×<Ñ<Ó>€JÙð	Ø—‘¤c¨*£o�Ó6ˆBð —k‘k—o‘oÐ&6Ó7Ò=¸2×DÑDÓF€NÙð	Ø—‘¬#¨nÓ*=�Ó>ˆBð —[‘[—_‘_ XÓ.Ò4°"×;Ñ;Ó=€MÙØ˜JÒ&Ø—‘¨�Ó-‰Bà—‘¨�Ó6ˆBà�k‰k�o‰o˜hÓ'Ò-¨2×4Ñ4Ó6€FÙØ�Y‰YÜ¨VÔ4Ü°FÔ;ñ<ä°fÔ=ñ>ô °Ô7ñ8ô ¨&Ô1ñ	2ô
 ¨vÔ6ñ7ô ¨fÔ5ñ6ô ¨fÔ5ñ6ô °6Ô:ñ;ô °&Ô9ñ	:ô È&ÔQñ
Rô ¸Ô?ñ@ô ¨&Ô1ñ2ó
÷ ‰(‹*ð 	ð Üœ˜GŸK™KŸO™O¨K¸Ó<Ó=¸sÓCˆ	ðÜ”s˜7Ÿ;™;Ÿ?™?¨6°1Ó5Ó6¸Ó:ˆð ˜‰l˜iÑ'€FØ�H‰H‹J€EØˆv�f˜yÑ(Ð)€Eä0°¸TÈIÐW^ÐK_Ô`€JÜØØ/àØØ"Ø'Ÿ_™_ñ	
ô	ð 	øô} œIÐ&ò 	DØ—‘°{�ÓC‹Bð	Dûô œIÐ&ò 	Úð	ûô œIÐ&ò 	Úð	ûô œIÐ&ò 	Úð	ûô< œ	Ð"ò ØŠ	ðûô œ	Ð"ò ØŠðúsl   Á61N ÃN* Ä"O  Å-O Ë/O, Ì/P Î!N'Î&N'Î*N=Î<N=Ï OÏOÏO)Ï(O)Ï,P Ï?P ÐPÐPc                 ó&  — 	 t         j                  j                  ddddd«      j                  dd«      j	                  |¬«      }t        |d| i¬«      }t        dd|j                  ¬«      S # t         j
                  $ r t        d	d
d¬«      cY S w xY w)NrD   rŽ   r•   rA   rž  rŸ  Úmessages__senderrò   rô   zConversation not found.rö   râ   rc   r  r·   z-Conversation messages retrieved successfully.rÅ   )	r   r›   r    r²  ra   r‚   r+   r-   rž   )rc   Úconversation_idÚconvr¸  s       rH   Úadmin_conversation_messagesr¾  '  s¢   € ðPä× Ñ ×/Ñ/ØØØØØ'ó÷ Ñ˜jÐ*<Ó=ß‰S�OˆSÓ$ð 	ô 3°4À)ÈWÐAUÔV€JÜØØ7Ø�_‰_ôð øô	 ×$Ñ$ò PÜ˜CÐ!:À,ÔOÒOðPús   ‚AA, Á,!BÂBc           
      óÐ  — 	 t         j                  j                  |¬«      }t
        j                  j                  |¬«      j                  dd«      j                  d	d
«      }t        |dd| i¬«      }t	        dd|j                  |j                  |j                  t        |j                  «      |j                  dœ¬«      S # t         j                  $ r t	        ddd¬«      cY S w xY w)z;List all rate requests distributed for a specific shipment.rò   rô   rõ   rö   râ   )rD   ÚdriverrD   Úbatch_numberÚ
created_atTrc   rH  r·   z%Rate requests retrieved successfully.)rø   Ú	unique_idÚshipment_statusrg   Úrate_requestsrÅ   )r   r›   ra   r‚   r+   r   rœ   r    r�   r4   ry   rÃ  r<   Úlenrž   )rc   rø   rD   Úrequests_qsrï   s        rH   Úadmin_shipment_rate_requestsrÈ  A  sÝ   € ðLÜ×#Ñ#×'Ñ'¨;Ð'Ó7ˆô ×%Ñ%×,Ñ,°hÐ,Ó?×NÑNÈxÐYcÓd×mÑmÐn|ð  Kó  L€KÜ
 °$ÀÈGÐ@TÔ
U€CÜ˜ÐDØ—{‘{Ø×'Ñ'Ø#Ÿ?™?Ü�S—X‘X“ØŸ™ñLô ð øô × Ñ ò LÜ˜CÐ!6¸lÔKÒKðLús   ‚ C Ã!C%Ã$C%c                 óÌ  — 	 t         j                  j                  |¬«      }|j
                  t         j                  j                  k7  rt	        dd|j
                  › d�d	¬«      S d
dlm	}  ||«      }t        |dd| i¬«      }t	        ddt        |«      › d�|j                  t        |«      |j                  dœ¬«      S # t         j                  $ r t	        ddd¬«      cY S w xY w)zJAdmin triggers dispatch of the next batch of rate requests for a shipment.rò   rô   rõ   rö   râ   rá   z-Cannot dispatch batch for shipment in status ú.r  r   )Ú#dispatch_rate_requests_for_shipmentTrc   rH  r·   zDispatched z rate requests.)rø   Údispatched_countrÅ  rÅ   )r   r›   ra   r‚   r+   r<   rB   Ú	PUBLISHEDÚcore.rate_distributionrË  r4   rÆ  ry   rž   )rc   rø   rD   rË  r>  rï   s         rH   Ú"admin_shipment_dispatch_next_batchrÏ  U  sÞ   € ðLÜ×#Ñ#×'Ñ'¨;Ð'Ó7ˆð ‡�œ(Ÿ/™/×3Ñ3Ò3Ü˜CÐ#PÐQY×Q`ÑQ`ÐPaÐabÐ!cÐk|Ô}Ð}åJÙ1°(Ó;€GÜ
 ¨d¸YÈÐ<PÔ
Q€CÜ˜˜{¬3¨w«<¨.¸ÐHØ—{‘{Ü ›LØŸ™ñPô ð øô × Ñ ò LÜ˜CÐ!6¸lÔKÒKðLús   ‚ B? Â?!C#Ã"C#N)lÚ__doc__r   r   Údecimalr   Údjango.confr   rÇ   Údjango.contrib.authr   Ú	django.dbr   Údjango.db.modelsr	   r
   r   Údjango.utilsr   Úrest_framework.decoratorsr   r   Úrest_framework.permissionsr   Úaccounts.modelsr   r   r   r   r   r   Úbilling.modelsr   Úbilling.servicesr   Úcore.modelsr   r   r   r   r   r   r   r   r    r!   Úcore.freight_importr"   r#   Úcore.countriesr$   r%   r&   r'   Únotifyr)   Úpermissionsr*   Úresponser+   Útrip_statusr,   Úserializersr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   Úviewsr:   r)  rI   rV   rd   rj   rw   r„   r¦   rÝ   rð   rú   r  r  r
  r  r  r-  r@  rT  r[  rb  rn  r‚  r„  r‹  r‘  r˜  r¹  r¾  rÈ  rÏ  © rJ   rH   ú<module>ræ     s‹  ðÙ oç (Ý å 3Ý .Ý !ß *Ñ *Ý !ß BÝ 6÷÷ õ #Ý >÷ N÷  N÷  Nß V÷ó õ !Ý (Ý "Ý +÷÷ ÷ õ õ 3áÓ€ò5ò	ò	òaòòò&(ñV 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñ;ó 8ó ð;ñ| 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñfó 8ó ðfñ6 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñ
Ló 8ó ð
Lñ 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñbó 8ó ðbñ. 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñHó 8ó ðHñ 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñkó 8ó ðkñ 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñxó 8ó ðxñ 
ˆ6ˆ(ÓÙ�_ oÐ6Ó7ñ.ó 8ó ð.ñb 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñó 8ó ðñ8 
ˆ5�'Ð
ÓÙ�_ oÐ6Ó7ñK\ó 8ó ðK\ñ\ 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñjó 8ó ðjñ. 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñeó 8ó ðeñ( 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñjó 8ó ðjò&ò !ñD 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñPó 8ó ðPñ 
ˆ5�&ˆ/ÓÙ�_ oÐ6Ó7ñó 8ó ðñ, 
Ò
+Ó,Ù�_ oÐ6Ó7ñó 8ó -ðñ: 
ˆ6ˆ(ÓÙ�_ oÐ6Ó7ñSó 8ó ðSñ 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñ\ó 8ó ð\ñ~ 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñó 8ó ðñ0 
ˆ5ˆ'ÓÙ�_ oÐ6Ó7ñó 8ó ðñ$ 
ˆ6ˆ(ÓÙ�_ oÐ6Ó7ñó 8ó ñrJ   