Ë
    í`¡j?à ã                   óÚ
  — d dl Z d dl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 d dlmZmZ d d	lmZmZ d d
lmZmZmZmZmZmZmZ d dlmZmZ d dl m!Z!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/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z? d dl@mAZAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZPmQZQ d dlRmSZSmTZTmUZUmVZVmWZW d dlXmYZY d dlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe d dlfmgZgmhZh ddlimjZjmkZkmlZlmmZmmnZnmoZo  e«       Zpe6jâ                  jä                  e6jâ                  jæ                  fZtecjê                  jì                  ecjê                  jî                  ecjê                  jð                  hZyecjê                  jô                  ecjê                  jö                  hZ| ed «      Z}d!Z~d"„ Zd™d#„Z€dšd$„Z�d%„ Z‚d&„ Zƒd›d'„Z„d(„ Z…d)„ Z†d*„ Z‡d+„ Zˆdœd,„Z‰d-„ ZŠd�d.„Z‹d/„ ZŒd0„ Z�d›d1„ZŽd2„ Z�d3„ Z�d4„ Z‘d5„ Z’d6„ Z“d7„ Z”d8„ Z•d9„ Z–d:„ Z—d;„ Z˜d<„ Z™d=„ Zše/d>„ «       Z›e/ e)d?g«      d@„ «       «       Zœe/dA„ «       Z�dB„ ZždC„ ZŸdD„ Z e/dE„ «       Z¡e/ e)d?g«      dF„ «       «       Z¢dG„ Z£dH„ Z¤e/dI„ «       Z¥e/ e)d?g«      dJ„ «       «       Z¦e/ e)d?g«      dK„ «       «       Z§e/ e)d?dLg«      dM„ «       «       Z¨e/ e)d?dLg«      dN„ «       «       Z©e/e*dO„ «       «       ZªdP„ Z«dQ„ Z¬dR„ Z­dS„ Z®e/dT„ «       Z¯e/ e)d?g«      dU„ «       «       Z°e/dV„ «       Z±e/e*dW„ «       «       Z²e/e*dX„ «       «       Z³e/e*dY„ «       «       Z´ eO«       ZµdZ„ Z¶d[„ Z·d\„ Z¸d]„ Z¹d^„ Zºe/d_„ «       Z»e/e*d`„ «       «       Z¼e/e*da„ «       «       Z½e/e*db„ «       «       Z¾e/e*dc„ «       «       Z¿e0 e)d?dLg«      dd„ «       «       ZÀe/de„ «       ZÁe/ e)d?g«      df„ «       «       ZÂdždg„ZÃdh„ ZÄdi„ ZÅdj„ ZÆe/dk„ «       ZÇe/ e)d?g«      dl„ «       «       ZÈe/ e)d?dLg«      dm„ «       «       ZÉe/e*dn„ «       «       ZÊe/do„ «       ZËe/ e)d?g«      dp„ «       «       ZÌe/ e)d?g«      dq„ «       «       ZÍdr„ ZÎe/ e)d?g«      ds„ «       «       ZÏe/ e)d?dLg«      dt„ «       «       ZÐdu„ ZÑdv„ ZÒdw„ ZÓdždx„ZÔdy„ ZÕdz„ ZÖdŸd{„Z×d|„ ZØe/d}„ «       ZÙe/ e)d?g«      d~„ «       «       ZÚe/e*d„ «       «       ZÛe/e*d€„ «       «       ZÜd�„ ZÝd‚„ ZÞdƒ„ Zßd„„ Zàd…„ Záe/d†„ «       Zâe/ e)d?g«      d‡„ «       «       Zãdˆ„ Zäe/d‰„ «       Zåe/dŠ„ «       Zæe/d‹„ «       Zçe/ e)d?dLg«      dŒ„ «       «       Zèe/d�„ «       Zée/dŽ„ «       Zêe/d�„ «       Zëe/d�„ «       Zìd‘„ Zíd’„ Zîd“„ Zïe/d”„ «       Zðe/ e)d?g«      d•„ «       «       Zñe/ e)d?g«      d–„ «       «       Zòe/d—„ «       Zóe/d˜„ «       Zôy) é    N)ÚdatetimeÚ	timedelta)ÚDecimal)Úsettings)Úmessages)Úget_user_model)Ú	Paginator)Ú
connectionÚtransaction)ÚHttpResponseÚJsonResponse)ÚCountÚMaxÚOuterRefÚPrefetchÚQÚSubqueryÚSum)Ú	TruncDateÚ
TruncMonth)Úget_object_or_404ÚredirectÚrender)Úreverse)Útimezone)Úrequire_http_methodsÚrequire_POST)ÚValidationError)Úadmin_requiredÚsuperuser_required)ÚKYCDocumentÚPlatformSettingsÚShipperProfileÚTransporterDriverLinkÚTransporterProfileÚUserRoleÚVehicleÚVehicleDocument)Únotify_users)ÚShipperRegisterSerializerÚTransporterRegisterSerializerÚresolve_trip_assigned_vehicle)Úget_latest_device_positionÚget_latest_positions_map)Ú_sync_shipment_status_from_trip)ÚPayment)ÚCOUNTRY_BY_CODEÚCOUNTRY_CHOICESÚcountry_name_for_codeÚcountry_name_to_codeÚis_valid_country_codeÚnormalize_country_code)Úcurrency_choicesÚcurrency_code_for_countryÚcurrency_map_for_frontend)Úapply_datatables_orderÚdatatables_responseÚis_datatables_requestÚpaginate_datatables_querysetÚparse_datatables_request)Úreverse_geocode_address)ÚAdminTripActionÚBidÚConversationÚFreightRouteÚMessageÚProofOfDeliveryÚRateRequestÚShipmentÚTripÚTripLocationÚZone)Úbulk_upsert_freight_routesÚparse_freight_route_uploadé   )ÚAdminUserCreateFormÚAdminUserEditFormÚKYCDocumentReviewWebFormÚPlatformSettingsFormÚTripStatusOverrideWebFormÚVehicleDocumentReviewWebFormz0.20zEn Route, In Transitc                 ó<  — t        j                  «       }|t        |dz
  ¬«      z
  } | j                  di |› d�||› d�|i¤Žj	                  t        |«      ¬«      j                  d«      j	                  t        d«      ¬«      }|D �ci c]  }|d   |d	   “Œ }}g g }	}t        |«      D ]h  }
|t        |
¬«      z   }|j                  |d
k  r|j                  d«      n|j                  d«      «       |	j                  |j                  |d«      «       Œj ||	dœS c c}w )NrM   ©ÚdaysÚ__date__gteÚ__date__lte©ÚbucketrZ   Úid©Úcr]   é   z%az%b %dr   ©ÚlabelsÚdata© )r   Ú	localdater   ÚfilterÚannotater   Úvaluesr   ÚrangeÚappendÚstrftimeÚget)ÚqsÚ
date_fieldrV   ÚendÚstartÚrowsÚrowÚcountsr`   ra   ÚoffsetÚdays               ú$/var/www/html/truck-me/core/views.pyÚ_daily_count_seriesru   W   s  € Ü
×
Ñ
Ó
€CØ”) ¨¡Ô*Ñ*€Eàˆ�	‰	ÑY˜
�| ;Ð/°¸:¸,ÀkÐ8RÐTWÐXÑYß	‰œ :Ó.ˆÓ	/ß	‰�Ó	ß	‰”E˜$“KˆÓ	 ð	 	ð 26Ö6¨#ˆc�(‰m˜S ™XÑ%Ð6€FÐ6Ø�rˆD€FÜ˜“+ò (ˆØ”i VÔ,Ñ,ˆØ�‰¨D°AªI�c—l‘l 4Ô(¸3¿<¹<ÈÓ;PÔQØ�‰�F—J‘J˜s AÓ&Õ'ð(ð  dÑ+Ð+ùò 7s   ÂDc                 ó~  ‡‡— t        j                  «       }|t        |dz  dz
  ¬«      z
  } | j                  di |› d�||› d�|i¤Žj	                  t        |«      ¬«      j                  d«      j	                  t        d«      ¬	«      }|D �ci c]  }|d   |d
   “Œ c}Šg g }}t        |«      D ]ƒ  }	|t        |	dz  ¬«      z   Št        ‰t        d¬«      z   |«      }
t        ˆˆfd„t        |
‰z
  j                  dz   «      D «       «      }|j                  d|	dz   › �«       |j                  |«       Œ… ||dœS c c}w )Nr^   rM   rU   rW   rX   rY   rZ   r[   r\   r]   é   c              3   ó\   •K  — | ]#  }‰j                  ‰t        |¬ «      z   d«      –— Œ% y­w)rU   r   N)rj   r   )Ú.0Údrq   Ú
week_starts     €€rt   ú	<genexpr>z'_weekly_count_series.<locals>.<genexpr>w   s&   øè ø€ ÒsÀa�F—J‘J˜z¬I¸1Ô,=Ñ=¸q×AÑsùs   ƒ),úWeek r_   rb   )r   rc   r   rd   re   r   rf   r   rg   ÚminÚsumrV   rh   )rk   rl   Úweeksrm   rn   ro   rp   r`   ra   Úweek_idxÚweek_endÚtotalrq   r{   s               @@rt   Ú_weekly_count_seriesr„   i   sB  ù€ Ü
×
Ñ
Ó
€CØ”) %¨!¡)¨q¡Ô1Ñ1€Eàˆ�	‰	ÑY˜
�| ;Ð/°¸:¸,ÀkÐ8RÐTWÐXÑYß	‰œ :Ó.ˆÓ	/ß	‰�Ó	ß	‰”E˜$“KˆÓ	 ð	 	ð 26Ö6¨#ˆc�(‰m˜S ™XÑ%Ò6€FØ�rˆD€FÜ˜%“Lò ˆØœY¨H°q©LÔ9Ñ9ˆ
Ü�z¤I°1Ô$5Ñ5°sÓ;ˆÜÔsÌ5ÐRZÐ]gÑRg×QmÑQmÐpqÑQqÓKrÔsÓsˆØ�‰˜˜h¨™l˜^Ð,Ô-Ø�‰�EÕðð  dÑ+Ð+ùò 7s   ÂD:c                 ó&  — t        j                  «       }g }|j                  |j                  }}t	        |«      D ]'  }|j                  ||f«       |dz  }|dk(  sŒ!d}|dz  }Œ) |j                  «        t        j                  t        |d   d   |d   d   d«      «      } | j                  di |› d�|i¤Žj                  t        |«      ¬«      j                  d«      j                  t        d«      ¬«      }	|	D �
ci c]*  }
|
d   sŒ	|
d   j                  |
d   j                  f|
d	   “Œ, }}
g g }}|D ]S  \  }}|j                  t        ||d«      j                  d
«      «       |j                  |j                  ||fd«      «       ŒU ||dœS c c}
w )NrM   r   é   Ú__gterY   rZ   r[   r\   r]   ú%br_   rb   )r   ÚnowÚyearÚmonthrg   rh   r   Ú
make_awarer   rd   re   r   rf   r   ri   rj   )rk   rl   Úmonthsr‰   Úmonth_startsrŠ   r‹   Ú_Ústart_dtro   rp   rq   r`   ra   ÚyÚms                   rt   Ú_monthly_count_seriesr“   }   sš  € Ü
�,‰,‹.€CØ€LØ—(‘(˜CŸI™Iˆ%€DÜ�6‹]ò ˆØ×Ñ˜T 5˜MÔ*Ø�‰
ˆØ�A‹:ØˆEØ�A‰I‰Dðð ×ÑÔÜ×"Ñ"¤8¨L¸©O¸AÑ,>ÀÈQÁÐPQÑ@RÐTUÓ#VÓW€Hàˆ�	‰	Ñ5˜
�| 5Ð)¨8Ð4Ñ5ß	‰œ JÓ/ˆÓ	0ß	‰�Ó	ß	‰”E˜$“KˆÓ	 ð	 	ð NRÖcÀcÐUXÐYaÓUbˆs�8‰}×!Ñ! 3 x¡=×#6Ñ#6Ð7¸¸S¹ÑAÐc€FÐcØ�rˆD€FØò +‰ˆˆ1Ø�‰”h˜q ! QÓ'×0Ñ0°Ó6Ô7Ø�‰�F—J‘J  1˜v qÓ)Õ*ð+ð  dÑ+Ð+ùò ds   Ã<
FÄ$Fc                 ó  ‡‡— t         j                  j                  t         j                  j                  ¬«      }g g g }}}| dk(  �r\t        j                  «       }|t        d¬«      z
  }|j                  ||¬«      j                  t        d«      ¬«      j                  d«      j                  t        d	«      ¬
«      }|D �	ci c]  }	|	d   |	d   xs t        d«      “Œ c}	Št        d«      D ]­  }
|t        |
dz  ¬«      z   Št        ‰t        d¬«      z   |«      }t        ˆˆfd„t        |‰z
  j                   dz   «      D «       «      }|j#                  d|
dz   › �«       |j#                  t%        |«      «       |j#                  t%        |t&        z  «      «       Œ¯ |||dœS | dk(  �rt        j                  «       j(                  }|dz
  }|j                  ||¬«      j                  d«      j                  t        d	«      ¬
«      j+                  d«      }|D �	ci c]  }	|	d   |	d   xs t        d«      “Œ c}	Št        ||dz   «      D ]r  }‰j-                  |t        d«      «      }|j#                  t/        |«      «       |j#                  t%        |«      «       |j#                  t%        |t&        z  «      «       Œt |||dœS |j                  |¬«      j                  t1        d«      ¬«      j                  d«      j                  t        d	«      ¬
«      }|D �	ci c]7  }	|	d   sŒ	|	d   j(                  |	d   j2                  f|	d   xs t        d«      “Œ9 c}	Št        dd«      D ]…  }|j#                  t5        ||d«      j7                  d«      «       ‰j-                  ||ft        d«      «      }|j#                  t%        |«      «       |j#                  t%        |t&        z  «      «       Œ‡ |||dœS c c}	w c c}	w c c}	w )N©ÚstatusÚweeklyé   rU   )Úcreated_at__date__gteÚcreated_at__date__lteÚ
created_atrY   rZ   Úamount©rƒ   rƒ   Ú0é   r^   rw   c              3   ón   •K  — | ],  }‰j                  ‰t        |¬ «      z   t        d«      «      –— Œ. y­w)rU   rž   N)rj   r   r   )ry   rz   Útotalsr{   s     €€rt   r|   z(_revenue_trend_series.<locals>.<genexpr>¨   s1   øè ø€ ò  DÐVW˜Ÿ™ J´ÀÔ1BÑ$BÄGÈCÃL×Qñ  Dùs   ƒ25rM   r}   )r`   ÚrevenueÚ
commissionÚyearly)Úcreated_at__year__gteÚcreated_at__year__lteÚcreated_at__year)r§   é   rˆ   )r0   Úobjectsrd   ÚStatusÚCAPTUREDr   rc   r   re   r   rf   r   r   rg   r~   r   rV   rh   ÚfloatÚCOMMISSION_RATErŠ   Úorder_byrj   Ústrr   r‹   r   ri   )ÚperiodrŠ   Úpay_qsr`   r¢   r£   rm   rn   ro   rp   r�   r‚   rœ   Úcurrent_yearÚ
start_yearr‘   r‹   r¡   r{   s                    @@rt   Ú_revenue_trend_seriesr´   —   s­  ù€ Ü�_‰_×#Ñ#¬7¯>©>×+BÑ+BÐ#ÓC€FØ"$ b¨"�ZˆG€Fà�ÓÜ× Ñ Ó"ˆØ”i RÔ(Ñ(ˆà�M‰M°ÈSˆMÓQß‰XœY |Ó4ˆXÓ5ß‰V�HÓß‰XœC ›MˆXÓ*ð	 	ð JNÖNÀ#�#�h‘-  W¡Ò!=´¸³Ñ=ÒNˆÜ˜a›ò 	?ˆHØ¤°¸1±Ô!=Ñ=ˆJÜ˜:¬	°qÔ(9Ñ9¸3Ó?ˆHÜô  DÔ[`ÐbjÐmwÑbw×a}Ña}ð  ABñ  bBó  \Cô  Dó  DˆFØ�M‰M˜E (¨Q¡, Ð0Ô1Ø�N‰Nœ5 ›=Ô)Ø×Ñœe F¬_Ñ$<Ó=Õ>ð	?ð !¨WÀJÑOÐOà�ÓÜ×)Ñ)Ó+×0Ñ0ˆØ! AÑ%ˆ
à�M‰M°
ÐR^ˆMÓ_ß‰VÐ&Ó'ß‰XœC ›MˆXÓ*ß‰XÐ(Ó)ð	 	ð TXÖXÈC�#Ð(Ñ)¨3¨w©<Ò+G¼7À3»<ÑGÒXˆÜ�z <°!Ñ#3Ó4ò 	?ˆAØ—Z‘Z ¤7¨3£<Ó0ˆFØ�M‰Mœ#˜a›&Ô!Ø�N‰Nœ5 ›=Ô)Ø×Ñœe F¬_Ñ$<Ó=Õ>ð		?ð
 !¨WÀJÑOÐOð 	�‰ tˆÓ,ß	‰œ LÓ1ˆÓ	2ß	‰�Ó	ß	‰œ˜H›ˆÓ	&ð	 	ð bfÖwÐZ]ÐilÐmuÓivˆs�8‰}×!Ñ! 3 x¡=×#6Ñ#6Ð7¸¸W¹Ò9UÌÐQTËÑUÒw€FÜ�q˜"“ò ;ˆØ�‰”h˜t U¨AÓ.×7Ñ7¸Ó=Ô>Ø—‘˜T 5˜M¬7°3«<Ó8ˆØ�‰”u˜V“}Ô%Ø×Ñœ% ¬Ñ 8Ó9Õ:ð	;ð
 ¨À
ÑKÐKùòO Oùò& Yùò xs   ÃO4ÈO9Ì
O>Ì&1O>c                  ó  — t         j                  j                  t        ¬«      } t	        | j                  dd¬«      «      }|j                  | j                  d¬«      j                  dd¬«      «       |j                  d «       |S )N©Ú
status__inÚtransporter_idT)Úflat)Úassigned_driver_id__isnullÚassigned_driver_id)rH   r©   ÚexcludeÚTRIP_TERMINAL_STATUSESÚsetÚvalues_listÚupdateÚdiscard)Úactive_tripsÚuser_idss     rt   Ú_drivers_on_trip_idsrÄ   Î   st   € Ü—<‘<×'Ñ'Ô3IÐ'ÓJ€LÜ�<×+Ñ+Ð,<À4Ð+ÓHÓI€HØ‡O�O�L×(Ñ(ÀDÐ(ÓI×UÑUÐVjÐquÐUÓvÔwØ×Ñ�TÔØ€Oó    c                 ó  — | xs i } t         j                  j                  t        ¬«      j	                  dddd«      j                  d«      d d }g }|D �]ª  }|j                  }|j                  }t        |j                  dd «      }|r/|j                  r#t        |j                  «      j                  «       nd	}|r7| j                  |«      }|r$|j                  d
|«      }|j                  d|«      }|j                  xs |j                  }	|	j                  › d|	j                   › �j                  «       xs |	j"                  }
|j%                  |j&                  t        |j(                  dd «      |j*                  |j-                  «       |
|j(                  j.                  |j(                  j0                  |j2                  r|j2                  j5                  «       nd |�t7        |«      nd |�t7        |«      nd dœ
«       �Œ­ |S )Nr¶   ÚshipmentÚtransporterÚ transporter__transporter_profileÚassigned_driverz-updated_até(   Útransporter_profileÚ ÚlatitudeÚ	longitudeÚ Ú	unique_id)
r[   rÑ   r–   Ústatus_displayÚdriver_nameÚpickupÚdeliveryÚ
updated_atÚlatÚlon)rH   r©   r¼   r½   Úselect_relatedr®   Úcurrent_latÚcurrent_lonÚgetattrrÈ   Útc_idr¯   Ústriprj   rÊ   Ú
first_nameÚ	last_nameÚemailrh   r[   rÇ   r–   Úget_status_displayÚpickup_addressÚdelivery_addressrÖ   Ú	isoformatr¬   )Útraccar_positionsÚtripsro   Útripr×   rØ   ÚprofilerÝ   ÚposÚdriverrÓ   s              rt   Ú_build_dashboard_active_tripsrì   Ö   sÂ  € Ø)Ò/¨RÐä�‰×ÑÔ(>ÐÓ?ß	‰ØØØ.Øó	

÷ 
‰�-Ó	   "ð	&ð 
ð €DØó ˆØ×ÑˆØ×ÑˆÜ˜$×*Ñ*Ð,AÀ4ÓHˆÙ.5¸'¿-º-”�G—M‘MÓ"×(Ñ(Ô*ÈRˆÙØ#×'Ñ'¨Ó.ˆCÙØ—g‘g˜j¨#Ó.�Ø—g‘g˜k¨3Ó/�Ø×%Ñ%Ò9¨×)9Ñ)9ˆØ×*Ñ*Ð+¨1¨V×-=Ñ-=Ð,>Ð?×EÑEÓGÒWÈ6Ï<É<ˆØ�‰Ø—'‘'Ü  §¡°¸TÓBØ—k‘kØ"×5Ñ5Ó7Ø&Ø—m‘m×2Ñ2ØŸ™×6Ñ6Ø9=¿º˜$Ÿ/™/×3Ñ3Ô5ÈdØ!$ ”5˜”:°dØ!$ ”5˜”:°dñ
ö 	ðð0 €KrÅ   c                 ó  — g }| r|j                  d| › d|› d�dœ«       t        j                  j                  t        j                  j
                  ¬«      j                  «       }|r|j                  d|› d�dœ«       t        j                  j                  d¬	«      j                  «       }|r|j                  d|› d
�dœ«       t        j                  j                  t        j                  j                  ¬«      j                  «       }|r|j                  d|› d�dœ«       t        j                  j                  t        ¬«      j                  «       }|r|j                  d|› d�dœ«       |s|j                  dddœ«       |S )NÚwarningz) trip(s) overdue with no update for over zh (En Route or In Transit).)ÚlevelÚmessage©Úreview_statusÚinfoz% vehicle document(s) awaiting review.F)Úverifiedz& KYC document(s) pending verification.r•   z  published load(s) on the board.r¶   z active trip(s) in progress.ÚsuccesszNo critical alerts right now.)rh   r(   r©   rd   ÚReviewStatusÚPENDINGÚcountr!   rG   rª   Ú	PUBLISHEDrH   r¼   r½   )Ústale_tripsÚstale_hoursÚalertsÚpending_vehicle_docsÚpending_kycÚunpublishedrÂ   s          rt   Ú_build_dashboard_alertsr   þ   s|  € Ø€FÙØ�‰ØØ%˜Ð&OÐP[È}Ð\wÐxñ
ô 	ô +×2Ñ2×9Ñ9Ì×HdÑHd×HlÑHlÐ9Óm×sÑsÓuÐÙØ�‰ØØ.Ð/Ð/TÐUñ
ô 	ô ×%Ñ%×,Ñ,°eÐ,Ó<×BÑBÓD€KÙØ�‰ØØ%˜Ð&LÐMñ
ô 	ô ×"Ñ"×)Ñ)´·±×1JÑ1JÐ)ÓK×QÑQÓS€KÙØ�‰ØØ%˜Ð&FÐGñ
ô 	ô —<‘<×'Ñ'Ô3IÐ'ÓJ×PÑPÓR€LÙØ�‰ØØ&˜Ð'CÐDñ
ô 	ñ Ø�‰ 	Ð6UÑVÔWØ€MrÅ   c                  óœ  — t         j                  j                  } t         j                  j                  }t	        t        t        dd«      xs d«      }t        j                  «       t        |¬«      z
  }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%                  «       }t        j                  j'                  t        j(                  j*                  t        j(                  j,                  g|¬	«      j%                  «       }t.        j                  j'                  t.        j(                  j0                  ¬
«      }	|	j3                  t5        d«      t        d«      ¬«      }
t6        j                  j%                  «       }t6        j                  j'                  d¬«      j%                  «       }||z
  }t8        j                  j;                  «       }t8        j                  j'                  |¬«      }t        j                  j;                  «       }|j'                  | ¬«      }|j%                  «       }|j'                  d¬«      j%                  «       }||z
  }|j'                  |t<        j>                  j@                  ¬«      }|j%                  «       }|j'                  d¬«      j%                  «       }||z
  }|j'                  |t<        j>                  jB                  ¬«      }|j'                  |t<        j>                  jD                  ¬«      }|j%                  «       }|j'                  d¬«      j%                  «       }|j%                  «       }|j'                  d¬«      j%                  «       }||z   }	 tG        «       } tK        «       }!g }"t6        j                  j'                  ddd¬«      jM                  d«      jO                  d«      d d }#|#D ]Ë  }$|$jP                  }%|%jR                  › d|%jT                  › �jW                  «       xs |%jX                  }&|%jZ                  |!v }'t]        |$d«      r|$j_                  «       n|$j`                  r|$j`                  gng }(|"jc                  |&|'rdnd|(rdje                  |(«      n|$j`                  |$jf                  dœ«       ŒÍ g })t        j                  j'                  t        j(                  jh                  ¬
«      jO                  d«      d d D ]®  }*|)jc                  |*jZ                  |*jj                  |*jl                  |*jn                  |*jp                  |*jr                  |*jt                  xs d |*jv                  |*jx                  �|*jx                  › d!�nd |*jz                  �t}        |*jz                  «      nd d"œ
«       Œ° t        j~                  «       j€                  }+t        j                  «       jƒ                  «       |j%                  «       |||d#œ|||d#œ|||||z
  d#œ||||z
  d#œd$œ|||d#œd%œ|||t„        |||
d&   xs d't}        |
d(   xs t‡        d)«      «      ||t<        j                  j'                  d¬*«      j%                  «       d+œt‰        |d,d-«      t‹        |d,d.«      t�        |d,d/«      d0œt‰        |d1d-«      t‹        |d1d.«      t�        |d1d/«      d0œt‰        |d,d-«      t‹        |d,d.«      t�        |d,d/«      d0œt�        d2|+«      t�        d3|+«      t�        d4|+«      d5œd6œ|)t‘        | «      |"t“        ||«      d7œS c c}w c c}w # tH        $ r i } Y �Œ´w xY w)8NÚADMIN_STALE_TRIP_HOURSé0   )Úhoursr–   r[   r\   r]   r¶   )r·   Úupdated_at__ltr•   rœ   )rƒ   ÚnT)Úis_verified©Ú
role__role)Úshipper_profile__kyc_verified©r	  Ú!transporter_profile__account_type)Ú'transporter_profile__documents_verifiedF)Ú	is_activer  Úassigned_driver__isnullrÊ   Úregistration_numberé2   rÐ   Ú	type_listzOn TripÚ	Availableú, )Únamer–   Úvehicle_modelÚ
vehicle_noú-created_até   õ   â€”ú km)
r[   rÑ   rÔ   rÕ   Ú
cargo_typeÚweightÚ
dimensionsÚvehicle_typeÚdistanceÚprice)rƒ   rô   Ú
unverified)rƒ   Úindividual_driverÚfleet_driver)ÚusersÚshippersÚtransportersÚdriversÚvehiclesr  r   rƒ   rž   )Údocuments_verified)rÂ   rú   rû   Ústale_statuses_labelÚtrips_by_statusÚshipments_by_statusÚpayments_captured_countÚpayments_captured_totalÚvehicles_totalÚvehicles_verifiedÚtransporters_documents_verifiedÚdate_joinedr^   rŸ   rw   )Úweekr‹   Ú	sixmonthsr›   r—   Úmonthlyr¤   )r—   r6  r¤   )Úuser_registrationsÚtrip_historyr'  r¢   )rÖ   rq   ÚkpisÚchartsÚ	loadboardrÂ   r(  rü   )Jr&   ÚRoleÚSHIPPERÚTRANSPORTERÚintrÜ   Údjango_settingsr   r‰   r   rH   r©   rf   re   r   rG   r¼   r½   rø   rd   rª   ÚEN_ROUTEÚ
IN_TRANSITr0   r«   Ú	aggregater   r'   ÚUserÚallr%   ÚAccountTypeÚFLEET_OWNERÚDRIVERÚTRANSPORTER_DRIVERr.   Ú	ExceptionrÄ   rÙ   r®   rÊ   rß   rà   rÞ   rá   r[   Úhasattrr  r  rh   Újoinr  rù   rÑ   rã   rä   r  r  r  Úvehicle_type_requiredÚdistance_kmÚsuggested_pricer¯   rc   rŠ   rå   ÚSTALE_TRIP_STATUSES_LABELr   ru   r„   r“   r´   rì   r   ),Úshipper_roleÚtransporter_rolerû   Ústale_cutoffrp   r,  r-  rÂ   rú   Úpay_capturedÚpay_aggr0  r1  Úvehicles_unverifiedÚuser_qsÚtransporter_qsÚtrip_qsÚ
shipper_qsÚshippers_totalÚshippers_verifiedÚshippers_unverifiedÚfleet_owner_qsÚtransporters_totalÚtransporters_verifiedÚtransporters_unverifiedÚindividual_driver_qsÚfleet_driver_qsÚindividual_drivers_totalÚindividual_drivers_verifiedÚfleet_drivers_totalÚfleet_drivers_verifiedÚdrivers_totalræ   Úon_trip_idsÚdriver_rowsr)  Úvehiclerë   r  Úon_tripÚtypesr;  rÇ   r²   s,                                               rt   Ú_build_dashboard_payloadrn  "  sq  € Ü—=‘=×(Ñ(€LÜ—}‘}×0Ñ0ÐÜ”gœoÐ/GÈÓLÒRÐPRÓS€KÜ—<‘<“>¤I°KÔ$@Ñ@€Lô ,0¯<©<×+>Ñ+>¸xÓ+H×+QÑ+QÔTYÐZ^ÓT_Ð+QÓ+`öØ$'ˆˆH‰�s˜3‘xÑð€Oð ô ,4×+;Ñ+;×+BÑ+BÀ8Ó+L×+UÑ+UÔX]Ð^bÓXcÐ+UÓ+döØ$'ˆˆH‰�s˜3‘xÑðÐð ô —<‘<×'Ñ'Ô3IÐ'ÓJ×PÑPÓR€LÜ—,‘,×%Ñ%Ü—K‘K×(Ñ(¬$¯+©+×*@Ñ*@ÐAØ#ð &ó ÷ �eƒgð ô —?‘?×)Ñ)´·±×1HÑ1HÐ)ÓI€LØ×$Ñ$¬3¨x«=¼EÀ$»KÐ$ÓH€GÜ—_‘_×*Ñ*Ó,€NÜŸ™×.Ñ.¸4Ð.Ó@×FÑFÓHÐØ(Ð+<Ñ<Ðä�l‰l×ÑÓ €GÜ—\‘\×(Ñ(Ð4DÐ(ÓE€NÜ�l‰l×ÑÓ €Gà—‘¨<�Ó8€JØ×%Ñ%Ó'€NØ"×)Ñ)ÈÐ)ÓM×SÑSÓUÐØ(Ð+<Ñ<Ðà—^‘^Ø#Ü*<×*HÑ*H×*TÑ*Tð $ó €Nð (×-Ñ-Ó/ÐØ*×1Ñ1Ø04ð 2ó ç�eƒgð ð 1Ð3HÑHÐà"Ÿ>™>Ø#Ü*<×*HÑ*H×*OÑ*Oð *ó Ðð —n‘nØ#Ü*<×*HÑ*H×*[Ñ*[ð %ó €Oð  4×9Ñ9Ó;ÐØ"6×"=Ñ"=Ø04ð #>ó #ç�eƒgð  ð *×/Ñ/Ó1ÐØ,×3Ñ3Ø04ð 4ó ç�eƒgð ð -Ð/BÑB€MðÜ4Ó6Ðô 'Ó(€KØ€Kä�‰×Ñ¨¸4ÐY^ÐÓ_ß	‰Ð)Ó	*ß	‰Ð'Ó	(¨¨"ð	.ð ð
 ò ˆØ×(Ñ(ˆØ×#Ñ#Ð$ A f×&6Ñ&6Ð%7Ð8×>Ñ>Ó@ÒPÀFÇLÁLˆØ—)‘)˜{Ð*ˆÜ'.¨w¸Ô'D�×!Ñ!Ô#Ø&-×&:Ò&:ˆW×!Ñ!Ñ"Àð 	ð 	×ÑØÙ#*‘i°Ù16˜TŸY™Y uÔ-¸G×<PÑ<PØ!×5Ñ5ñ	
õ 	ðð €IÜ×$Ñ$×+Ñ+´8·?±?×3LÑ3LÐ+ÓM×VÑVÐWdÓeÐfiÐgiÐjò ˆØ×ÑØ—+‘+Ø!×+Ñ+Ø×-Ñ-Ø ×1Ñ1Ø"×-Ñ-Ø—o‘oØ"×-Ñ-Ò6°Ø$×:Ñ:Ø8@×8LÑ8LÐ8X˜8×/Ñ/Ð0°Ñ4Ð^cØ6>×6NÑ6NÐ6Z”S˜×1Ñ1Ô2Ð`eñ
õ 	ðô ×%Ñ%Ó'×,Ñ,€Lä—l‘l“n×.Ñ.Ó0à—]‘]“_à'Ø-Ø1ñð ,Ø1Ø5ñð 'à5Ø ;Ø":Ð=XÑ"Xñ&ð 1Ø 6Ø"5Ð8NÑ"Nñ!ñð (Ø-Ø1ññ3
ð@ )Ø&Ø&Ü$=Ø.Ø#6Ø'.¨s¡|Ò'8°qÜ'*¨7°7Ñ+;Ò+K¼wÀs»|Ó'LØ,Ø!2Ü/A×/IÑ/I×/PÑ/PÐdhÐ/PÓ/i×/oÑ/oÓ/qñ
ô ,¨G°]ÀAÓFÜ-¨g°}ÀaÓHÜ2°7¸MÈ1ÓMñ#ô ,¨G°\À1ÓEÜ-¨g°|ÀQÓGÜ2°7¸LÈ!ÓLñô ,¨N¸MÈ1ÓMÜ-¨n¸mÈQÓOÜ2°>À=ÐRSÓTñô 0°¸,ÓGÜ0°¸LÓIÜ/°¸,ÓGññ!
ð, Ü5Ð6GÓHØÜ)¨+°{ÓCñOHð HùòAùòøôj ò ØÓðús   Â.^2Ã:^7Ð
^< Þ<_ß
_c                  ó  — 	 t        j                  «       5 } t         j                  j                  | t        j
                  j                  «      }d d d «       t        d„ D «       «      S # 1 sw Y   ŒxY w# t        $ r Y yw xY w)NFc              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)Úis_platformuserN)r  )ry   Úcolumns     rt   r|   z1_auth_user_has_platform_column.<locals>.<genexpr>Ù  s   è ø€ ÒF°Fˆv�{‰{Ð/Õ/ÑFùs   ‚)	r
   ÚcursorÚintrospectionÚget_table_descriptionrD  Ú_metaÚdb_tablerJ  Úany)rs  Úcolumnss     rt   Ú_auth_user_has_platform_columnrz  Ó  st   € ðÜ×ÑÓ ð 	b FÜ ×.Ñ.×DÑDÀVÌTÏZÉZ×M`ÑM`ÓaˆG÷	bô ÑF¸gÔFÓFÐF÷		bð 	bûäò Ùðús(   ‚A5 –9A)ÁA5 Á)A2Á.A5 Á5	BÂ Bc                 ó–   — t        «       s| j                  «       S | j                  t        j                  j
                  › d�gdg¬«      S )Nz.is_platformuser = %sT)ÚwhereÚparams)rz  ÚnoneÚextrarD  rv  rw  )rk   s    rt   Ú_platform_user_querysetr€  Ü  sA   € Ü)Ô+Ø�w‰w‹yÐØ�8‰8œdŸj™j×1Ñ1Ð2Ð2GÐHÐIÐSWÐRXˆ8ÓYÐYrÅ   c                 óò   — t        «       sy t        j                  «       5 }|j                  dt        j
                  j                  › d�t        |«      | j                  g«       d d d «       y # 1 sw Y   y xY w)NzUPDATE z' SET is_platformuser = %s WHERE id = %s)	rz  r
   rs  ÚexecuterD  rv  rw  Úboolr[   )ÚuserÚvaluers  s      rt   Ú_set_platform_userr†  â  sb   € Ü)Ô+ØÜ	×	Ñ	Ó	ð 
 Ø�‰Ø”d—j‘j×)Ñ)Ð*Ð*QÐRÜ�%‹[˜$Ÿ'™'Ð"ô	
÷
÷ 
ñ 
ús    AA-Á-A6c                 ó>   — | j                   j                  d«      dk(  S )Nzx-requested-withÚXMLHttpRequest)Úheadersrj   ©Úrequests    rt   Ú_is_ajaxrŒ  ì  s   € Ø�?‰?×ÑÐ1Ó2Ð6FÑFÐFrÅ   c                 ó,   — t        d| |xs i dœ|¬«      S )NF)rõ   rð   Úerrorsr•   )r   )rð   rŽ  r–   s      rt   Ú_json_errorr�  ð  s   € Ü E°gÈÊÐSUÑVÐ_eÔfÐfrÅ   c                 óÎ   — | j                   t        | j                  «      | j                  | j                  xs d| j
                  r| j
                  j                  d«      dœS ddœS )NrÍ   ú%Y-%m-%d %H:%M)r[   rô   rò   Úreview_notesÚreviewed_at)r[   rƒ  rô   rò   r’  r“  ri   ©Údocs    rt   Ú_kyc_document_ajax_datar–  ô  s`   € à�f‰fÜ˜Ÿ™Ó&Ø×*Ñ*Ø×(Ñ(Ò.¨BØEHÇ_Â_�s—‘×/Ñ/Ð0@ÓAñð ð
 []ñð rÅ   c                 óö   — | j                   | j                  | j                  xs d| j                  r| j                  j	                  d«      nd| j
                  r| j
                  j	                  d«      dœS ddœS )NrÍ   ú%Y-%m-%dr‘  )r[   rò   r’  Úexpiry_dater“  )r[   rò   r’  r™  ri   r“  r”  s    rt   Ú_vehicle_document_ajax_datarš  þ  so   € à�f‰fØ×*Ñ*Ø×(Ñ(Ò.¨BØ?B¿º�s—‘×/Ñ/°
Ô;ÐTVØEHÇ_Â_�s—‘×/Ñ/Ð0@ÓAñð ð
 []ñð rÅ   c                 óÒ   — ddt        | «      dœ}d }|dk(  rt        | «      }|d   |d   d<   |S |dk(  rt        | «      }|d   |d   d<   |S |d	k(  rt        | «      }|d   |d   d<   |S )
NTúUser updated successfully.©rõ   rð   r„  ÚshipperÚkyc_verifiedr„  rÈ   r*  r(  )Ú_user_row_dataÚ_shipper_list_row_dataÚ_transporter_list_row_dataÚ_driver_list_row_data)r„  Ú	next_pageÚpayloadrp   s       rt   Ú_admin_user_edit_ajax_payloadr¦    s¥   € ØÐ+GÔQ_Ð`dÓQeÑf€GØ
€CØ�IÒÜ$ TÓ*ˆØ*-¨nÑ*=ˆ�‰˜Ñ'ð €Nð 
�mÒ	#Ü(¨Ó.ˆØ03Ð4HÑ0Iˆ�‰Ð,Ñ-ð €Nð 
�iÒ	Ü# DÓ)ˆØ03Ð4HÑ0Iˆ�‰Ð,Ñ-Ø€NrÅ   c                 ó
  — t        | dd «      }| j                  | j                  xs d| j                  xs d| j                  › d| j                  › �j	                  «       | j
                  xs dt        |dd«      xs dt        |dt        j                  j                  «      |r|j                  «       ndt        | j                  «      | j                  rdnd| j                  r| j                  j                  d«      d	œS dd	œS )
NÚrolerÍ   rÐ   Úphoner  ÚYesÚNor˜  )r[   rß   rà   r  rá   r©  r¨  Úrole_displayr  Úactive_displayÚjoined)rÜ   r[   rß   rà   rÞ   rá   r&   r<  ÚADMINÚget_role_displayrƒ  r  r3  ri   )r„  r¨  s     rt   r   r     sá   € Ü�4˜ Ó&€Dà�g‰gØ—o‘oÒ+¨Ø—^‘^Ò) rØ—?‘?Ð# 1 T§^¡^Ð$4Ð5×;Ñ;Ó=Ø—‘Ò!˜rÜ˜˜w¨Ó+Ò1¨rÜ˜˜f¤h§m¡m×&9Ñ&9Ó:Ù37˜×-Ñ-Ô/¸UÜ˜$Ÿ.™.Ó)Ø#'§>¢>™%°tØ;?×;KÒ;K�$×"Ñ"×+Ñ+¨JÓ7ñð ð RTñð rÅ   c                 óf  — | j                   }| j                  }| j                  | j                  | j                  |�t        |«      nd|�|› d�nd|�t        |«      nd|�t        |«      nd| j                  | j                  rdnd| j                  r| j                  j                  d«      dœ
S ddœ
S )NrÍ   r  r  rª  r«  r˜  )
r[   Úcountry_codeÚcountry_displayÚ	radius_kmÚradius_km_displayÚrate_per_kmÚrate_per_km_displayÚallow_return_tripsÚallow_return_trips_displayr›   )	r´  r¶  r[   r²  r³  r¯   r¸  r›   ri   )ÚzoneÚradiusÚrates      rt   Ú_zone_row_datar½  (  s²   € Ø�^‰^€FØ×Ñ€Dà�g‰gØ×)Ñ)Ø×/Ñ/Ø$*Ð$6”S˜”[¸BØ/5Ð/A ˜x s™^ÀuØ$(Ð$4”s˜4”y¸"Ø,0Ð,<œs 4œyÀ%Ø"×5Ñ5Ø/3×/FÒ/F¡eÈDØ>B¿oºo�d—o‘o×.Ñ.¨zÓ:ñð ð TVñð rÅ   c                 óz   — | xs dj                  «       }|sy	 t        |«      }|dk  ry|d fS # t        $ r Y yw xY w)NrÍ   )NzRadius (km) is required.)NzRadius must be a valid number.r   )NzRadius must be greater than 0.©rÞ   r   rJ  )Úrawr…  r´  s      rt   Ú_parse_zone_radius_kmrÁ  9  sR   € ØŠY�B×ÑÓ€EÙØ/ð6Ü˜E“Nˆ	ð �A‚~Ø5Ø�dˆ?Ðøô	 ò 6Ù5ð6úó   ™. ®	:¹:c                 óz   — | xs dj                  «       }|sy	 t        |«      }|dk  ry|d fS # t        $ r Y yw xY w)NrÍ   ©NN)Nz$Price per km must be a valid number.r   )Nz Price per km cannot be negative.r¿  )rÀ  r…  r¼  s      rt   Ú_parse_zone_rate_per_kmrÅ  F  sR   € ØŠY�B×ÑÓ€EÙØð<Ü�u‹~ˆð ˆa‚xØ7Ø�ˆ:Ðøô	 ò <Ù;ð<úrÂ  c                 óÆ  — | €yt        | dd«      }|�`|j                  t        j                  j                  k(  ry|j                  t        j                  j
                  k(  ry|j                  «       S t        | dd«      }|�`|j                  t        j                  j                  k(  ry|j                  t        j                  j                  k(  ry|j                  «       S y)zHCompany / Individual driver (transporter) or shipper account-type label.Nr  rÌ   ÚCompanyzIndividual driverÚshipper_profileÚ
Individual)
rÜ   Úaccount_typer%   rF  rG  rH  Úget_account_type_displayr#   ÚBUSINESSÚ
INDIVIDUAL)r„  rÈ   rž  s      rt   Ú_user_ownership_labelrÎ  S  sË   € à€|ØÜ˜$Ð 5°tÓ<€KØÐØ×#Ñ#Ô'9×'EÑ'E×'QÑ'QÒQØØ×#Ñ#Ô'9×'EÑ'E×'LÑ'LÒLØ&Ø×3Ñ3Ó5Ð5Ü�dÐ-¨tÓ4€GØÐØ×Ñ¤>×#=Ñ#=×#FÑ#FÒFØØ×Ñ¤>×#=Ñ#=×#HÑ#HÒHØØ×/Ñ/Ó1Ð1ØrÅ   c                 ó8   — t        | dd«      }|€yt        |«      S )z9Company-owned (fleet owner) vs individual driver vehicle.ÚownerNr  )rÜ   rÎ  )rk  rÐ  s     rt   Ú_vehicle_ownership_labelrÑ  h  s#   € ä�G˜W dÓ+€EØ€}ØÜ  Ó'Ð'rÅ   c                 óœ   — t        | dd «      }|€y|j                  › d|j                  › �j                  «       }|xs |j                  xs dS )NrÊ   rÍ   rÐ   r  )rÜ   rß   rà   rÞ   rá   )rk  rë   Ú	full_names      rt   Ú_vehicle_assigned_driver_namerÔ  p  sT   € Ü�WÐ/°Ó6€FØ€~ØØ×$Ñ$Ð% Q v×'7Ñ'7Ð&8Ð9×?Ñ?ÓA€IØÒ-˜Ÿ™Ò-¨Ð-rÅ   c                 óL  — t        | d«      r| j                  «       n| j                  r| j                  gng }| j                  | j                  |rdj                  |«      n| j                  || j                  | j                  r| j                  j                  ndt        | «      | j                  t        | «      t        | j                  «      | j                  | j                  | j                   r| j                   j#                  d«      ndt%        d| j                  g¬«      dœS )Nr  r  rÍ   r˜  zcore:vehicle_verify_modal)Úargs)r[   r  r  Úvehicle_typesÚowner_idÚowner_emailÚ	ownershipr»   Úassigned_driver_nameÚload_capacityr  r  r›   Úverify_modal_url)rK  r  r  r[   r  rL  rØ  rÐ  rá   rÑ  r»   rÔ  r¯   rÜ  r  r  r›   ri   r   )rk  rm  s     rt   Ú_vehicle_row_datarÞ  x  sð   € Ü#*¨7°KÔ#@ˆG×ÑÔØ")×"6Ò"6ˆ×	Ñ	Ñ¸Bð 
ð �j‰jØ&×:Ñ:Ù,1˜Ÿ	™	 %Ô(°w×7KÑ7KØØ×$Ñ$Ø.5×.>Ò.>�w—}‘}×*Ò*ÀBÜ-¨gÓ6Ø%×8Ñ8Ü =¸gÓ FÜ˜W×2Ñ2Ó3Ø×*Ñ*Ø×&Ñ&ØAH×ASÒAS�g×(Ñ(×1Ñ1°*Ô=ÐY[Ü#Ð$?ÀwÇzÁzÀlÔSñð rÅ   c                 óL  — | j                   xs d| j                  › �| j                  | j                  | j                  | j
                  | j                  xs d| j                  | j                  �| j                  › d�nd| j                  �t        | j                  «      dœ	S ddœ	S )Nú#r  r  )	Úshipment_idrÔ   rÕ   r  r  r  r  r   r!  )rÑ   r[   rã   rä   r  r  r  rM  rN  rO  r¯   ©rÇ   s    rt   Ú_loadboard_row_datarã  Ž  s§   € à×)Ñ)Ò>¨q°·±°Ð->Ø×)Ñ)Ø×-Ñ-Ø×)Ñ)Ø—/‘/Ø×)Ñ)Ò2¨UØ ×6Ñ6Ø4<×4HÑ4HÐ4T�x×+Ñ+Ð,¨CÑ0ÐZ_Ø2:×2JÑ2JÐ2V”�X×-Ñ-Ó.ñ
ð 
ð ]bñ
ð 
rÅ   c                 ó¦   — t         j                  j                  t         j                  j                  ¬«      }t        | |t        g d¢g d¢dg¬«      S )Nr•   )rÑ   rã   rä   r  r  r  rM  )	rÑ   rã   rä   r  r  r  rM  rN  rO  r  ©Úsearch_fieldsÚorder_fieldsÚdefault_order)rG   r©   rd   rª   rù   r=   rã  ©r‹  Úbase_qss     rt   Ú_dashboard_loadboard_datatablesrë  œ  sL   € Ü×Ñ×%Ñ%¬X¯_©_×-FÑ-FÐ%ÓG€GÜ'ØØÜò
ò

ð %�oô1ð rÅ   c                 ó&  — t        | |«       |t        j                  j                  k(  rh| j                  }|j
                  t        j                  j                  k7  r4t        j                  j                  |_        |j                  ddg¬«       y y y )Nr–   rÖ   ©Úupdate_fields)r/   rH   rª   ÚCLOSEDrÇ   r–   rG   Úsave)rè   Únew_trip_statusrÇ   s      rt   Ú"_sync_shipment_after_trip_overriderò  º  sk   € Ü# D¨/Ô:Øœ$Ÿ+™+×,Ñ,Ò,Ø—=‘=ˆØ�?‰?œhŸo™o×4Ñ4Ò4Ü&Ÿo™o×4Ñ4ˆHŒOØ�M‰M¨°<Ð(@ˆMÕAð 5ð -rÅ   c           
      óþ  — | j                   }|d   t        j                  j                  k(  rÖ|j                  st        d«      ‚|d   }t        j                  «       5  t        j                  j                  |||d   |j                  d«      xs d|j                  d«      xs d¬«      }t        j                  j                  |t        j                  j                  |j                  d	«      xs dd
¬«       ddd«       |S |d   |d   |j                  d«      xs d|j                  d«      xs d|j                  d	«      xs d|j                  d«      xs d|d   dœ}|d   t        j                  j                  k(  re|j                  d«      xs d|d<   |j                  d«      |d<   |j                  d«      xs d|d<   |j                  d«      |d<   t        |¬«      }nd
|d<   t        |¬«      }|j!                  «       st        |j"                  «      ‚	 |j%                  «       S # 1 sw Y   S xY w# t&        $ r¸}|j(                  }t+        |t,        «      r*t        d|D �	cg c]  }	t/        |	«      ‘Œ nc c}	w c}	i«      ‚t+        |t0        «      st        dt/        |«      gi«      ‚i }
|j3                  «       D ]&  \  }}t+        |t,        «      r|nt/        |«      g|
|<   Œ( t        |
«      ‚d}~ww xY w)zOCreate shipper/transporter via existing registration serializers (no HTTP API).r¨  z*Only superusers may create Admin accounts.rá   Úpasswordrß   rÍ   rà   )Úusernamerá   rô  rß   rà   r©  Úen©r„  r¨  r©  ÚlanguageNÚcompany_namerÊ  )rá   rô  rß   rà   r©  rù  rÊ  Únational_id_numberÚnational_id_expiry_dateÚpassport_numberÚpassport_expiry_date)ra   rø  Únon_field_errors)Úcleaned_datar&   r<  r¯  Úis_superuserÚ
ValueErrorr   ÚatomicrD  r©   Úcreate_userrj   Úcreater=  r*   r+   Úis_validrŽ  rð  ÚDRFValidationErrorÚdetailÚ
isinstanceÚlistr¯   ÚdictÚitems)ÚformÚacting_userÚcdrá   r„  r¥  ÚserÚver  ÚxÚoutÚkÚvs                rt   Ú_create_portal_user_from_formr  Ã  s»  € à	×	Ñ	€BØ	ˆ&�z”X—]‘]×(Ñ(Ò(Ø×'Ò'ÜÐIÓJÐJØ�7‘ˆÜ×ÑÓ!ñ 	Ü—<‘<×+Ñ+ØØØ˜J™ØŸ6™6 ,Ó/Ò5°2ØŸ&™& Ó-Ò3°ð ,ó ˆDô ×Ñ×#Ñ#ØÜ—]‘]×(Ñ(Ø—f‘f˜W“oÒ+¨Øð	 $ô ÷	ð ˆð �G‘Ø�z‘NØ—f‘f˜\Ó*Ò0¨bØ—V‘V˜KÓ(Ò.¨BØ—‘˜“Ò& BØŸ™˜~Ó.Ò4°"Ø˜>Ñ*ñ€Gð 
ˆ&�z”X—]‘]×*Ñ*Ò*Ø(*¯©Ð/CÓ(DÒ(JÈˆÐ$Ñ%Ø-/¯V©VÐ4MÓ-NˆÐ)Ñ*Ø%'§V¡VÐ,=Ó%>Ò%DÀ"ˆÐ!Ñ"Ø*,¯&©&Ð1GÓ*HˆÐ&Ñ'Ü'¨WÔ5‰à"ˆ�
ÑÜ+°Ô9ˆØ�<‰<Œ>Ü˜Ÿ™Ó$Ð$ðØ�x‰x‹zÐ÷K	ð ˆûô0 ò 	Ø—‘ˆÜ�fœdÔ#ÜÐ0À6Ö2J¸a´3°qµ6Ñ2JùÔ2JÐKÓLÐLÜ˜&¤$Ô'ÜÐ0´3°v³;°-Ð@ÓAÐAØˆØ—L‘L“Nò 	<‰DˆAˆqÜ$ Q¬Ô-‘Q´C¸³F°8ˆC�ŠFð	<ä˜‹oÐûð	ús2   ÁBH.ÈH; È.H8È;	K<É&K7É*I=É<A;K7Ë7K<c                 ó   — t        | d«      S )Nzcore/dashboard.html©r   rŠ  s    rt   Ú	dashboardr  ü  s   € ä�'Ð0Ó1Ð1rÅ   ÚGETc                 óŒ  — t        | «      rI| j                  j                  d«      xs dj                  «       j	                  «       dk(  rt        | «      S t        «       }| j                  j                  d«      }|r)	 t        |«      }t        d|«      |d   d   d<   ||d   d<   t        |«      }d	|d
<   |S # t        $ r Y Œw xY w)NÚtablerÍ   r;  rŠ   r6  r:  r¢   Úrevenue_yearz#no-store, no-cache, must-revalidatezCache-Control)r<   r  rj   rÞ   Úlowerrë  rn  r?  r´   r  r   )r‹  r¥  Ú
year_paramrŠ   Úresponses        rt   Údashboard_datar     sÈ   € ô ˜WÔ%¨7¯;©;¯?©?¸7Ó+CÒ+IÀr×*PÑ*PÓ*R×*XÑ*XÓ*ZÐ^iÒ*iÜ.¨wÓ7Ð7Ü&Ó(€GØ—‘—‘ Ó(€JÙð	Ü�z“?ˆDÜ6KÈIÐW[Ó6\ˆG�HÑ˜iÑ(¨Ñ3Ø04ˆG�HÑ˜nÑ-ô ˜GÓ$€HØ E€Hˆ_ÑØ€Oøô	 ò 	Ùð	ús   Á=(B7 Â7	CÃCc                 ó   — t        | d«      S )Nzcore/sidebar.htmlr  rŠ  s    rt   Úsidebarr"    s   € ä�'Ð.Ó/Ð/rÅ   c                  ó’   — t         j                  j                  t        j                  j
                  ¬«      j                  dd«      S )Nr  r¨  rÈ  )rD  r©   rd   r&   r<  r=  rÙ   rb   rÅ   rt   Ú_shippers_list_querysetr$    s7   € Ü�<‰<×Ñ¬(¯-©-×*?Ñ*?ÐÓ@×OÑOØØóð rÅ   c                 ó¨   — | sy| j                   xs dj                  «       }| j                  xs dj                  «       }|r	|r|› d|› �S |r|S |r|S y)Nr  rÍ   z / )rú  rÞ   rü  )ré   ÚnationalÚpassports      rt   Ú_shipper_id_or_passport_displayr(     sc   € ÙØØ×*Ñ*Ò0¨b×7Ñ7Ó9€HØ×'Ñ'Ò-¨2×4Ñ4Ó6€HÙ‘HØ�˜3˜x˜jÐ)Ð)ÙØˆÙØˆØrÅ   c           
      óž  — t        | dd «      }| j                  › d| j                  › �j                  «       }| j                  || j
                  xs dt        t        | dd «      dd«      xs d|rt        |j                  «      nd|r|j                  «       ndt        |«      | j                  r| j                  j                  d«      d	œS dd	œS )
NrÈ  rÐ   rÍ   r¨  r©  r  Fr˜  )r[   r  rá   r©  rŸ  Úaccount_type_displayÚid_or_passportr®  )rÜ   rß   rà   rÞ   r[   rá   rƒ  rŸ  rË  r(  r3  ri   ©r„  ré   r  s      rt   r¡  r¡  .  sÆ   € Ü�dÐ-¨tÓ4€GØ�o‰oÐ˜a §¡Ð/Ð0×6Ñ6Ó8€Dà�g‰gØØ—‘Ò!˜rÜœ  v¨tÓ4°g¸rÓBÒKÀeÙ6=œ˜W×1Ñ1Ô2À5ÙFM × @Ñ @Ô BÐSXÜ9¸'ÓBØ;?×;KÒ;K�$×"Ñ"×+Ñ+¨JÓ7ñ	ð 	ð RTñ	ð 	rÅ   c                 óx   — t        «       }t        | «      rt        | |t        g d¢g d¢dg¬«      S t	        | d«      S )N)rß   rà   rá   Úrole__phoneÚ#shipper_profile__national_id_numberÚ shipper_profile__passport_number)rß   rá   r.  r
  Úshipper_profile__account_typer/  r3  Nú-date_joinedrå  zcore/shipper.html)r$  r<   r=   r¡  r   ré  s     rt   rž  rž  =  sJ   € ä%Ó'€GÜ˜WÔ%Ü+ØØÜ"òò	ð *Ð*ô-
ð 	
ô0 �'Ð.Ó/Ð/rÅ   c           	      óÖ   — t        t        «       j                  t        dt	        «       ¬«      «      |¬«      }t        |j                  j                  «       «      }t        | d||dœ«      S )NÚkyc_documents©Úqueryset©Úpkz core/includes/shipper_modal.html©ÚuÚ	documents)	r   r$  Úprefetch_relatedr   Ú_person_kyc_documents_querysetÚ_uploaded_kyc_documentsr4  rE  r   ©r‹  Úuser_idr:  r;  s       rt   Úadmin_shipper_modalrA  \  sd   € ô 	ÜÓ!ß	Ñ	ÜØÜ7Ó9ôó

ð ô		€Aô (¨¯©×(;Ñ(;Ó(=Ó>€IÜ�'Ð=ÀQÐU^Ñ?_Ó`Ð`rÅ   c                  óÄ   — t         j                  j                  t        j                  j
                  t        j                  j                  ¬«      j                  dd«      S )Nr  r¨  rÌ   )
rD  r©   rd   r&   r<  r>  r%   rF  rG  rÙ   rb   rÅ   rt   Ú_transporters_list_querysetrC  m  sI   € Ü�<‰<×ÑÜ—=‘=×,Ñ,Ü*<×*HÑ*H×*TÑ*Tð ó ÷ �n�VÐ2Ó3ð4rÅ   c                 óÀ  — t        | dd «      }| j                  › d| j                  › �j                  «       }| j                  ||r|j
                  r|j
                  nd| j                  xs dt        t        | dd «      dd«      xs d|r|j                  «       nd|rt        |j                  «      nd| j                  r| j                  j                  d«      d	œS dd	œS )
NrÌ   rÐ   r  rÍ   r¨  r©  Fr˜  )r[   r  rù  rá   r©  r*  r*  r®  )rÜ   rß   rà   rÞ   r[   rù  rá   rË  rƒ  r*  r3  ri   r,  s      rt   r¢  r¢  t  sÔ   € Ü�dÐ1°4Ó8€GØ�o‰oÐ˜a §¡Ð/Ð0×6Ñ6Ó8€Dà�g‰gØÙ07¸G×<PÒ<P˜×,Ò,ÐV[Ø—‘Ò!˜rÜœ  v¨tÓ4°g¸rÓBÒKÀeÙFM × @Ñ @Ô BÐSXÙBIœd 7×#=Ñ#=Ô>ÈuØ;?×;KÒ;K�$×"Ñ"×+Ñ+¨JÓ7ñ	ð 	ð RTñ	ð 	rÅ   c                 óx   — t        «       }t        | «      rt        | |t        g d¢g d¢dg¬«      S t	        | d«      S )N©rß   rà   rá   Ú!transporter_profile__company_namer.  ©rß   rG  rá   r.  r  r  r3  Nr2  rå  zcore/transporter.html)rC  r<   r=   r¢  r   ré  s     rt   rÈ   rÈ   ƒ  sJ   € ä)Ó+€GÜ˜WÔ%Ü+ØØÜ&òò	ð *Ð*ô+
ð 	
ô. �'Ð2Ó3Ð3rÅ   c           	      óÖ   — t        t        «       j                  t        dt	        «       ¬«      «      |¬«      }t        |j                  j                  «       «      }t        | d||dœ«      S )Nr4  r5  r7  z$core/includes/transporter_modal.htmlr9  )	r   rC  r<  r   r=  r>  r4  rE  r   r?  s       rt   Úadmin_transporter_modalrJ  ¡  sd   € ô 	Ü#Ó%ß	Ñ	ÜØÜ7Ó9ôó

ð ô		€Aô (¨¯©×(;Ñ(;Ó(=Ó>€IÜ�'ÐAÈÐYbÑCcÓdÐdrÅ   c           	      óx  — t         j                  j                  ddd«      j                  dd¬«      }t	        | «      rt        | |t        g d¢g d¢d	g¬
«      S |j                  d«      }| j                  j                  d«      xs dj                  «       }|rB|j                  t        |¬«      t        |¬«      z  t        |¬«      z  t        |¬«      z  «      }| j                  j                  d«      dk(  st        | «      r$t        d|D �cg c]  }t        |«      ‘Œ c}i«      S t        | d||dœ«      S c c}w )Nr¨  rÈ  rÌ   TF)Úis_staffr   )rá   rõ  rß   rà   )rß   rá   r  r3  Nr2  rå  ú-idÚqrÍ   )Úemail__icontains)Úusername__icontains)Úfirst_name__icontains)Úlast_name__icontainsÚformatÚjsonra   zcore/admin/user_list.html)r%  rN  )rD  r©   rÙ   rd   r<   r=   r   r®   r  rj   rÞ   r   rŒ  r   r   )r‹  rê  rk   rN  r„  s        rt   Úadmin_usersrU  ²  s   € ô 	�‰×#Ñ# FÐ,=Ð?TÓUß	‰˜¨EˆÓ	2ð ô ˜WÔ%Ü+ØØÜÚJÚRØ)Ð*ô
ð 	
ð 
×	Ñ	˜%Ó	 €BØ	�‰�‰˜Ó	Ò	# ×*Ñ*Ó,€AÙØ�Y‰YÜ˜qÔ!¤A¸!Ô$<Ñ<¼qÐWXÔ?YÑYÔ\]ÐstÔ\uÑuó
ˆð ‡{�{‡��xÓ  FÒ*¬h°wÔ.?Ü˜VÀrÖ%J¸t¤n°TÕ&:Ò%JÐKÓLÐLÜ�'Ð6À"È1Ñ8MÓNÐNùò &Ks   ÄD7
ÚPOSTc           
      ó@  — | j                   dk(  �r�| j                  j                  d«      dk(  �rn| j                  j                  d«      xs dj	                  «       j                  «       }| j                  j                  d«      xs d}|s;t        | «      rt        dddgi«      S t        j                  | d«       t        d«      S t        |«      d	k  r;t        | «      rt        d
dd
gi«      S t        j                  | d
«       t        d«      S t        j                  j                  |¬«      j                  «       r;t        | «      rt        dddgi«      S t        j                  | d«       t        d«      S t!        j"                  «       5  t        j                  j%                  |||| j                  j                  d«      xs d| j                  j                  d«      xs ddd¬«      }t&        j                  j)                  |t&        j*                  j,                  | j                  j                  d«      xs dd¬«       t/        |d«       d d d «       t        | «      rt1        ddt3        «      dœ«      S t        j4                  | d«       t        d«      S t7        | j                  xs d | j8                  j:                  ¬«      }| j                   dk(  rr|j=                  «       rb	 t?        || j8                  «      }| j                  j                  d«      dk(  rt/        |d«       t        j4                  | d«       t        d«      S tQ        | dd|i«      S # 1 sw Y   �ŒxY w# t@        $ rª}|jB                  r|jB                  d   nd}tE        |tF        «      rX|jI                  «       D ]D  \  }}|dv rd n|}	tE        |tJ        «      r|n|g}
|
D ]  }|jM                  |	tO        |«      «       Œ ŒF n|jM                  d tO        |«      «       Y d }~ŒÊd }~ww xY w)NrV  Únextr%  rá   rÍ   rô  zEmail is required.ú
core:usersé   z'Password must be at least 8 characters.©rõ  ú&A user with this email already exists.rß   rà   T)rõ  rá   rô  rß   rà   rL  r  r©  rö  r÷  zUser created successfully.r�  )Úallow_admin_roler   zCould not create user.)Nrþ  zcore/admin/user_create.htmlr  ))Úmethodr  rj   rV  rÞ   r  rŒ  r�  r   Úerrorr   ÚlenrD  r©   rd   Úexistsr   r  r  r&   r  r<  r¯  r†  r   r   rõ   rN   r„  r   r  r  r  rÖ  r  r
  r  r	  Ú	add_errorr¯   r   )r‹  rá   rô  Úcreated_userr  ÚexcÚerrÚfieldÚmsgsÚfldÚseqr’   s               rt   Úadmin_user_createrj  Í  s¶  € ð ‡~�~˜Ó G§K¡K§O¡O°FÓ$;¸wÓ$FØ—‘×!Ñ! 'Ó*Ò0¨b×7Ñ7Ó9×?Ñ?ÓAˆØ—<‘<×#Ñ# JÓ/Ò5°2ˆÙÜ˜Ô Ü"Ð#7¸'ÐDXÐCYÐ9ZÓ[Ð[Ü�N‰N˜7Ð$8Ô9Ü˜LÓ)Ð)Üˆx‹=˜1ÒÜ˜Ô Ü"Ð#LÈzð  ]Fð  \Gð  OHó  Ið  IÜ�N‰N˜7Ð$MÔNÜ˜LÓ)Ð)Ü�<‰<×Ñ¨ÐÓ.×5Ñ5Ô7Ü˜Ô Ü"Ð#KÈgð  YAð  XBð  NCó  Dð  DÜ�N‰N˜7Ð$LÔMÜ˜LÓ)Ð)Ü×ÑÓ!ñ 	3ÜŸ<™<×3Ñ3ØØØ!Ø"Ÿ<™<×+Ñ+¨LÓ9Ò?¸RØ!Ÿ,™,×*Ñ*¨;Ó7Ò=¸2ØØð 4ó ˆLô ×Ñ×#Ñ#Ø!Ü—]‘]×(Ñ(Ø—l‘l×&Ñ& wÓ/Ò5°2Øð	 $ô ô ˜|¨TÔ2÷!	3ô" �GÔÜ¨DÐ=YÔcqÐr~Ócñ  !Aó  Bð  BÜ×Ñ˜Ð">Ô?Ü˜Ó%Ð%äØ�‰Ò˜Ø Ÿ™×2Ñ2ô€Dð ‡~�~˜Ò D§M¡M¤Oð	*Ü8¸¸w¿|¹|ÓLˆLð �{‰{�‰˜vÓ&¨'Ò1Ü" <°Ô6Ü×Ñ˜WÐ&BÔCÜ˜LÓ)Ð)Ü�'Ð8¸6À4¸.ÓIÐI÷Y	3ñ 	3ûô: ò 		/Ø!$§¢�#—(‘(˜1’+Ð/GˆCÜ˜#œtÔ$Ø#&§9¡9£;ò 4‘K�E˜4Ø"'Ð+EÑ"E™$È5�CÜ",¨T´4Ô"8™$¸t¸f�CØ ò 4˜ØŸ™ s¬C°«FÕ3ñ4ñ4ð —‘˜t¤S¨£XÔ.ÿøð		/ús&   ÆCMË-M* ÍM'Í*	PÍ3B PÐPc                 ón  — t        t        j                  j                  d«      |¬«      }| j                  dk(  rt        | j                  «      }nt        j                  |«      }| j                  j                  s[t        j                  j                  D �cg c]%  }|d   t        j                  j                  k7  sŒ$|‘Œ' c}|j                  d   _        | j                  dk(  �rï|j                  «       �rÞ|j                   }|d   }|j#                  d«      xs |j$                  xs dj'                  «       j)                  «       }|j#                  d«      xs d}|t        j                  j                  k(  rO| j                  j                  s9t+        | «      rt-        d«      S t/        j0                  | d«       t3        d	|¬
«      S |j4                  | j                  j4                  k(  rJ|j#                  d«      s9t+        | «      rt-        d«      S t/        j0                  | d«       t3        d	|¬
«      S |rË||j$                  j)                  «       k7  r®t        j                  j7                  |¬«      j9                  |j:                  ¬«      j=                  «       rft+        | «      rt-        dddgi«      S t/        j0                  | d«       | j>                  j#                  d«      dk(  rt3        d«      S t3        d	|¬
«      S tA        jB                  «       5  g d¢}	|j#                  d«      xs d|_"        |j#                  d«      xs d|_#        tI        |j#                  d«      «      |_%        |r!||_        ||_&        |	jO                  ddg«       |r"|jQ                  |«       |	jS                  d«       |jU                  |	¬«       t        j                  jW                  |||j#                  d«      xs dddœ¬«      \  }
}|s5||
_,        |j#                  d«      xs d|
_-        |
jU                  g d¢¬«       | j>                  j#                  d«      dk7  �r	 |j\                  }tI        |j#                  d«      «      |_/        tI        |j#                  d«      «      |_0        |jU                  g d¢¬«       	 |jf                  }tI        |j#                  d«      «      |_4        |jU                  dd g¬«       tI        |j#                  d«      «      stI        |j#                  d«      «      rCtl        j                  j7                  |¬!«      jo                  d"tq        jr                  «       ¬#«       | j>                  j#                  d«      dk(  rtu        |d"«       d d d «       t+        | «      re|jw                  «        	 |jX                   	 |j\                   	 |jf                   ty        t{        || j>                  j#                  d«      «      «      S t/        j|                  | d$«       | j>                  j#                  d«      d%k(  rt3        d&«      S | j>                  j#                  d«      d'k(  rt3        d(«      S | j>                  j#                  d«      d)k(  rt3        d*«      S | j>                  j#                  d«      dk(  rt3        d«      S t3        d«      S | j                  dk(  r/t+        | «      r$t-        d+|j~                  j�                  «       «      S tƒ        | d,||d-œ«      S c c}w # tb        jd                  $ r Y �Œ‡w xY w# tj        jd                  $ r Y �Œaw xY w# 1 sw Y   �ŒÆxY w# t        jd                  $ r Y �Œ·w xY w# tb        jd                  $ r Y �ŒÄw xY w# tj        jd                  $ r Y �ŒÑw xY w).Nr¨  r7  rV  r   rá   rÍ   rô  z*Only superusers may assign the Admin role.zcore:users_edit©r@  r  z'You cannot deactivate your own account.r[  r\  rX  r%  rY  )rß   rà   r  rß   rà   rõ  rí  r©  rö  )r¨  r©  rø  )r„  Údefaults)r¨  r©  rÖ   rŸ  Úcredit_approved)rŸ  rn  rÖ   r*  rÖ   ©r„  T)rô   r“  rœ  rž  úcore:shipperrÈ   úcore:transporterr(  úcore:driversúValidation failed.zcore/admin/user_edit.html)r  Ú	edit_user)Br   rD  r©   rÙ   r^  rO   rV  Úfor_userr„  r   r&   r<  Úchoicesr¯  Úfieldsr  rÿ  rj   rá   rÞ   r  rŒ  r�  r   r_  r   r[   rd   r¼   r8  ra  r  r   r  rß   rà   rƒ  r  rõ  ÚextendÚset_passwordrh   rð  Úget_or_creater¨  r©  rÈ  rŸ  rn  r#   ÚDoesNotExistrÌ   r*  r%   r!   rÀ   r   r‰   r†  Úrefresh_from_dbr   r¦  rõ   rŽ  Úget_json_datar   )r‹  r@  Útargetr  r]   r  Únew_roleÚ	new_emailÚnew_passwordrî  ÚurÚcreatedÚspÚtps                 rt   Úadmin_user_editr†    sd  € ô œtŸ|™|×:Ñ:¸6ÓBÀwÔO€Fà‡~�~˜ÒÜ  §¡Ó.‰ä ×)Ñ)¨&Ó1ˆØ�<‰<×$Ò$Ü2:·-±-×2GÑ2GÖ&g¨QÈ1ÈQÉ4ÔS[×S`ÑS`×SfÑSfÓKf¢qÒ&gˆ�‰�FÑÔ#à‡~�~˜Ó D§M¡M¥OØ×ÑˆØ�f‘:ˆØ—V‘V˜G“_Ò:¨¯©Ò:¸×AÑAÓC×IÑIÓKˆ	Ø—v‘v˜jÓ)Ò/¨RˆØ”x—}‘}×*Ñ*Ò*°7·<±<×3LÒ3LÜ˜Ô Ü"Ð#OÓPÐPÜ�N‰N˜7Ð$PÔQÜÐ-°wÔ?Ð?Ø�9‰9˜Ÿ™Ÿ™Ò'°·±°{Ô0CÜ˜Ô Ü"Ð#LÓMÐMÜ�N‰N˜7Ð$MÔNÜÐ-°wÔ?Ð?Ù˜ f§l¡l×&8Ñ&8Ó&:Ò:¼t¿|¹|×?RÑ?RÐ\eÐ?RÓ?f×?nÑ?nÐrx×r{Ñr{Ð?nÓ?|÷  @Dñ  @Dô  @FÜ˜Ô Ü"Ð#KÈgð  YAð  XBð  NCó  Dð  DÜ�N‰N˜7Ð$LÔMØ�{‰{�‰˜vÓ&¨'Ò1Ü Ó-Ð-ÜÐ-°wÔ?Ð?ä×ÑÓ!ñ /	1ÚDˆMØ "§¡ |Ó 4Ò :¸ˆFÔØ!Ÿv™v kÓ2Ò8°bˆFÔÜ# B§F¡F¨;Ó$7Ó8ˆFÔÙØ(�”Ø"+�”Ø×$Ñ$ g¨zÐ%:Ô;ÙØ×#Ñ# LÔ1Ø×$Ñ$ ZÔ0Ø�K‰K mˆKÔ4ä"×*Ñ*×8Ñ8Øà$ØŸV™V G›_Ò2°Ø $ñð 9ó ‰KˆB�ñ Ø"�”ØŸ6™6 '›?Ò0¨b�”Ø—‘Ò&E�ÔFà�{‰{�‰˜vÓ&¨'Ó1ðØ×/Ñ/�BÜ&*¨2¯6©6°.Ó+AÓ&B�B”OÜ)-¨b¯f©fÐ5FÓ.GÓ)H�BÔ&Ø—G‘GÒ*[�GÔ\ðØ×3Ñ3�BÜ,0°·±Ð8LÓ1MÓ,N�BÔ)Ø—G‘GÐ+?ÀÐ*N�GÔOô ˜Ÿ™˜~Ó.Ô/´4¸¿¹Ð?SÓ8TÔ3UÜ×'Ñ'×.Ñ.°FÐ.Ó;×BÑBØ!%Ü$,§L¡L£Nð Cô ð �{‰{�‰˜vÓ&¨'Ò1Ü" 6¨4Ô0÷_/	1ôb �GÔØ×"Ñ"Ô$ðØ—’ðØ×&Ò&ðØ×*Ò*ô  Ô =¸fÀgÇkÁkÇoÁoÐV\ÓF]Ó ^Ó_Ð_Ü×Ñ˜Ð">Ô?Ø�;‰;�?‰?˜6Ó" iÒ/Ü˜NÓ+Ð+Ø�;‰;�?‰?˜6Ó" mÒ3ÜÐ.Ó/Ð/Ø�;‰;�?‰?˜6Ó" iÒ/Ü˜NÓ+Ð+Ø�;‰;�?‰?˜6Ó" gÒ-Ü˜LÓ)Ð)Ü˜Ó%Ð%à‡~�~˜Ò¤H¨WÔ$5ÜÐ/°·±×1JÑ1JÓ1LÓMÐMÜ�'Ð6ÀÐTZÑ8[Ó\Ð\ùòM 'høôt &×2Ñ2ò Úðûô *×6Ñ6ò Úðú÷O/	1ñ /	1ûôj ×(Ñ(ò Úðûô "×.Ñ.ò Úðûô &×2Ñ2ò Úðús“   Â%\#Â=\#ÌE]ÑA\(Ò8?]Ó7B!]Ö<]) ×	^ ×^ Ü(\?Ü;]Ü>\?Ü?]Ý]Ý]Ý]Ý]Ý]&Ý)^ Ý?^ Þ^Þ^Þ^4Þ3^4c                 óP  — t        t        j                  j                  d«      |¬«      }|j                  | j
                  j                  k(  r7t        | «      rt        d«      S t        j                  | d«       t        d«      S |j                  rM| j
                  j                  s7t        | «      rt        d«      S t        j                  | d«       t        d«      S |j                  «        t        | «      rt        dddœ«      S t        j                  | d«       t        d«      S )	Nr¨  r7  z#You cannot delete your own account.rY  z/Only superusers may delete a superuser account.TzUser deleted successfully.)rõ   rð   )r   rD  r©   rÙ   r[   r„  rŒ  r�  r   r_  r   r   Údeleter   rõ   )r‹  r@  r~  s      rt   Úadmin_user_deleter‰  „  sâ   € ô œtŸ|™|×:Ñ:¸6ÓBÀwÔO€FØ‡y�y�G—L‘L—O‘OÒ#Ü�GÔÜÐDÓEÐEÜ�‰�wÐ EÔFÜ˜Ó%Ð%Ø×Ò 7§<¡<×#<Ò#<Ü�GÔÜÐPÓQÐQÜ�‰�wÐ QÔRÜ˜Ó%Ð%Ø
‡M�M„OÜ�ÔÜ¨Ð9UÑVÓWÐWÜ×Ñ�WÐ:Ô;Ü�LÓ!Ð!rÅ   c                 óx   — | sy| j                   t        j                  j                  k(  ry| j	                  «       S )Nr  zFleet driver)rÊ  r%   rF  rI  rË  )ré   s    rt   Ú_driver_account_type_displayr‹  ™  s5   € ÙØØ×ÑÔ1×=Ñ=×PÑPÒPØØ×+Ñ+Ó-Ð-rÅ   c                 óN  — t        | dd «      }|sy|j                  t        j                  j                  k(  r|j
                  xs d}d|› �S |j                  t        j                  j                  k(  ržt        d„ | j                  j                  «       D «       d «      }|sy|j                  }|j                  › d|j                  › �j                  «       }|s4t        |dd «      }|r|j
                  r|j
                  }n|j                  }d|› �S |j
                  xs d}d|› �S )NrÌ   r  z	Company: c              3   ó:   K  — | ]  }|j                   sŒ|–— Œ y ­w©N©r  )ry   rp   s     rt   r|   z9_driver_company_or_transporter_display.<locals>.<genexpr>©  s   è ø€ ÒS˜SÀSÇ]Ã]”SÑSùs   ‚”rÐ   zTransporter: )rÜ   rÊ  r%   rF  rH  rù  rI  rX  Úfleet_driver_linksrE  rÈ   rß   rà   rÞ   rá   )r„  ré   ÚcompanyÚlinkrÈ   r  Úowner_profiles          rt   Ú&_driver_company_or_transporter_displayr”  ¡  s!  € Ü�dÐ1°4Ó8€GÙØØ×ÑÔ1×=Ñ=×DÑDÒDØ×&Ñ&Ò/¨%ˆØ˜7˜)Ð$Ð$Ø×ÑÔ1×=Ñ=×PÑPÒPÜÑS D×$;Ñ$;×$?Ñ$?Ó$AÔSÐUYÓZˆÙØØ×&Ñ&ˆØ×(Ñ(Ð)¨¨;×+@Ñ+@Ð*AÐB×HÑHÓJˆÙÜ# KÐ1FÈÓMˆMÙ ×!;Ò!;Ø$×1Ñ1‘à"×(Ñ(�Ø˜t˜fÐ%Ð%Ø×"Ñ"Ò+ e€GØ�w�iÐ Ð rÅ   c            	      ó,  — t         j                  j                  t        j                  j
                  t        ¬«      j                  dd«      j                  t        dt        j                  j                  d¬«      j                  dd«      ¬	«      «      S )
N)r	  Ú%transporter_profile__account_type__inr¨  rÌ   r�  Tr�  rÈ   rÉ   r5  )rD  r©   rd   r&   r<  r>  Ú_DRIVER_ACCOUNT_TYPESrÙ   r<  r   r$   rb   rÅ   rt   Ú_drivers_list_querysetr˜  ¹  s{   € ä�‰×ÑÜ—}‘}×0Ñ0Ü2Gð 	ó 	
÷ 
‰˜Ð 5Ó	6ß	Ñ	ÜØ$Ü.×6Ñ6×=Ñ=ÈÐ=ÓM×\Ñ\Ø!Ø6óôó

ðrÅ   c                 óŒ  — t        | dd «      }| j                  › d| j                  › �j                  «       }| j                  |t        | «      | j                  xs dt        t        | dd «      dd«      xs dt        |«      |rt        |j                  «      nd| j                  r| j                  j                  d«      d	œS dd	œS )
NrÌ   rÐ   rÍ   r¨  r©  r  Fr˜  )r[   r  Úcompany_or_transporter_displayrá   r©  r*  r*  r®  )rÜ   rß   rà   rÞ   r[   r”  rá   r‹  rƒ  r*  r3  ri   r,  s      rt   r£  r£  Ì  s¾   € Ü�dÐ1°4Ó8€GØ�o‰oÐ˜a §¡Ð/Ð0×6Ñ6Ó8€Dà�g‰gØÜ*PÐQUÓ*VØ—‘Ò!˜rÜœ  v¨tÓ4°g¸rÓBÒKÀeÜ <¸WÓ EÙBIœd 7×#=Ñ#=Ô>ÈuØ;?×;KÒ;K�$×"Ñ"×+Ñ+¨JÓ7ñ	ð 	ð RTñ	ð 	rÅ   c                 óx   — t        «       }t        | «      rt        | |t        g d¢g d¢dg¬«      S t	        | d«      S )NrF  rH  r2  rå  zcore/drivers.html)r˜  r<   r=   r£  r   ré  s     rt   Úadmin_driversrœ  Û  sJ   € ä$Ó&€GÜ˜WÔ%Ü+ØØÜ!òò	ð *Ð*ô+
ð 	
ô. �'Ð.Ó/Ð/rÅ   c           	      óJ  — t        t        «       j                  t        dt	        «       ¬«      «      |¬«      }|j
                  }|d uxr' |j                  t        j                  j                  k(  }t        |j                  j                  «       «      }t        | d|||dœ«      S )Nr4  r5  r7  zcore/includes/driver_modal.html)r:  Úis_individual_driverr;  )r   r˜  r<  r   r=  rÌ   rÊ  r%   rF  rH  r>  r4  rE  r   )r‹  r@  r:  ré   rž  r;  s         rt   Úadmin_driver_modalrŸ  ù  s£   € ô 	ÜÓ ß	Ñ	ÜØÜ7Ó9ôó

ð ô		€Að ×#Ñ#€Gà�tÐÒ] × 4Ñ 4Ô8J×8VÑ8V×8]Ñ8]Ñ ]ð ô (¨¯©×(;Ñ(;Ó(=Ó>€IÜØØ)ØÐ)=ÈIÑVóð rÅ   c           	      ór  — t        | «      r5t        | t        j                  j	                  «       t
        dgg d¢dg¬«      S | j                  j                  d«      dk(  rBt        j                  j	                  «       }t        d|D �cg c]  }t        |«      ‘Œ c}i«      S t        | ddt        i«      S c c}w )	Nr²  )r²  r´  r¶  r¸  r›   Nrå  rS  rT  ra   zcore/zones.htmlÚcountry_choices)r<   r=   rJ   r©   rE  r½  r  rj   r   r   r2   )r‹  Úzonesrº  s      rt   Úadmin_zonesr£    s¯   € ä˜WÔ%Ü+ØÜ�L‰L×ÑÓÜØ)Ð*ÚoØ)Ð*ô
ð 	
ð ‡{�{‡��xÓ  FÒ*Ü—‘× Ñ Ó"ˆÜØ°eÖ<¨d”^ DÕ)Ò<ð
ó ð 	ô �'Ð,Øœ?ð/ó ð ùò =s   ÂB4
c                 ó\  — t        | j                  j                  d«      «      }|s9d}t        | «      rt	        |«      S t        j                  | |«       t        d«      S t        |«      s9d}t        | «      rt	        |«      S t        j                  | |«       t        d«      S t        j                  j                  |¬«      j                  «       r=d|› d�}t        | «      rt	        |«      S t        j                  | |«       t        d«      S t        | j                  j                  d«      «      \  }}|r7t        | «      rt	        |«      S t        j                  | |«       t        d«      S t        | j                  j                  d	«      «      \  }}|r7t        | «      rt	        |«      S t        j                  | |«       t        d«      S 	 t        j                  j                  |||| j                  j                  d
«      dk(  ¬«      }d|j                   › d�}t        | «      rt#        d|t%        |«      dœ«      S t        j&                  | |«       t        d«      S # t(        $ r? d}t        | «      rt	        |d¬«      cY S t        j                  | |«       Y t        d«      S w xY w)Nr²  úCountry is required.ú
core:zonesúSelect a valid country.©r²  ú	Zone for ú already exists.r´  r¶  r¸  Úon)r²  r´  r¶  r¸  ú	 created.T©rõ   rð   rº  zCould not create zone.éô  r•   )r6   rV  rj   rŒ  r�  r   r_  r   r5   rJ   r©   rd   ra  rÁ  rÅ  r  r³  r   r½  rõ   rJ  )r‹  r²  rð   r´  Úradius_errorr¶  Ú
rate_errorrº  s           rt   Úadmin_zone_creater±  '  sT  € ô *¨'¯,©,×*:Ñ*:¸>Ó*JÓK€LÙØ(ˆÜ�GÔÜ˜wÓ'Ð'Ü�‰�w Ô(Ü˜Ó%Ð%Ü  Ô.Ø+ˆÜ�GÔÜ˜wÓ'Ð'Ü�‰�w Ô(Ü˜Ó%Ð%Ü‡|�|×Ñ¨ÐÓ5×<Ñ<Ô>Ø˜l˜^Ð+;Ð<ˆÜ�GÔÜ˜wÓ'Ð'Ü�‰�w Ô(Ü˜Ó%Ð%Ü3°G·L±L×4DÑ4DÀ[Ó4QÓRÑ€Iˆ|ÙÜ�GÔÜ˜|Ó,Ð,Ü�‰�w Ô-Ü˜Ó%Ð%Ü5°g·l±l×6FÑ6FÀ}Ó6UÓVÑ€K�ÙÜ�GÔÜ˜zÓ*Ð*Ü�‰�w 
Ô+Ü˜Ó%Ð%ð)Ü�|‰|×"Ñ"Ø%ØØ#Ø&Ÿ|™|×/Ñ/Ð0DÓEÈÑMð	 #ó 
ˆð ˜d×2Ñ2Ð3°9Ð=ˆÜ�GÔÜ¨D¸WÌnÐ]aÓNbÑ cÓdÐdÜ×Ñ˜ 'Ô*ô �LÓ!Ð!øô ò )Ø*ˆÜ�GÔÜ˜w¨sÔ3Ò3Ü�‰�w Õ(Ü�LÓ!Ð!ð)ús   ÇA1I# ÉI# É##J+ÊJ+Ê*J+c                 óÄ  — t        t        |¬«      }t        | j                  j	                  d«      «      }|s9d}t        | «      rt        |«      S t        j                  | |«       t        d«      S t        |«      s9d}t        | «      rt        |«      S t        j                  | |«       t        d«      S t        j                  j                  |¬«      j                  |j                  ¬«      j                  «       r=d|› d�}t        | «      rt        |«      S t        j                  | |«       t        d«      S t!        | j                  j	                  d	«      «      \  }}|r7t        | «      rt        |«      S t        j                  | |«       t        d«      S t#        | j                  j	                  d
«      «      \  }}|r7t        | «      rt        |«      S t        j                  | |«       t        d«      S ||_        ||_        ||_        | j                  j	                  d«      dk(  |_        	 |j-                  «        d|j.                  › d�}t        | «      rt1        d|t3        |«      dœ«      S t        j4                  | |«       t        d«      S # t6        $ r? d}t        | «      rt        |d¬«      cY S t        j                  | |«       Y t        d«      S w xY w)Nr7  r²  r¥  r¦  r§  r¨  r©  rª  r´  r¶  r¸  r«  ú	 updated.Tr­  zCould not update zone.r®  r•   )r   rJ   r6   rV  rj   rŒ  r�  r   r_  r   r5   r©   rd   r¼   r8  ra  rÁ  rÅ  r²  r´  r¶  r¸  rð  r³  r   r½  rõ   rJ  )	r‹  r8  rº  r²  rð   r´  r¯  r¶  r°  s	            rt   Úadmin_zone_editr´  \  ss  € ô œT bÔ)€DÜ)¨'¯,©,×*:Ñ*:¸>Ó*JÓK€LÙØ(ˆÜ�GÔÜ˜wÓ'Ð'Ü�‰�w Ô(Ü˜Ó%Ð%Ü  Ô.Ø+ˆÜ�GÔÜ˜wÓ'Ð'Ü�‰�w Ô(Ü˜Ó%Ð%Ü‡|�|×Ñ¨ÐÓ5×=Ñ=ÀÇÁÐ=ÓI×PÑPÔRØ˜l˜^Ð+;Ð<ˆÜ�GÔÜ˜wÓ'Ð'Ü�‰�w Ô(Ü˜Ó%Ð%Ü3°G·L±L×4DÑ4DÀ[Ó4QÓRÑ€Iˆ|ÙÜ�GÔÜ˜|Ó,Ð,Ü�‰�w Ô-Ü˜Ó%Ð%Ü5°g·l±l×6FÑ6FÀ}Ó6UÓVÑ€K�ÙÜ�GÔÜ˜zÓ*Ð*Ü�‰�w 
Ô+Ü˜Ó%Ð%Ø$€DÔØ€D„NØ"€DÔØ%Ÿl™l×.Ñ.Ð/CÓDÈÑL€DÔð
)Ø�	‰	ŒØ˜d×2Ñ2Ð3°9Ð=ˆÜ�GÔÜ¨D¸WÌnÐ]aÓNbÑ cÓdÐdÜ×Ñ˜ 'Ô*ô �LÓ!Ð!øô ò )Ø*ˆÜ�GÔÜ˜w¨sÔ3Ò3Ü�‰�w Õ(Ü�LÓ!Ð!ð)ús   È3AJ É6J Ê#KÊ<KËKc                 óv  — t        t        |¬«      }|j                  }	 |j                  «        d|› d�}t	        | «      rt        d||dœ«      S t        j                  | |«       t        d	«      S # t        $ r? d}t	        | «      rt        |d¬«      cY S t        j                  | |«       Y t        d	«      S w xY w)
Nr7  r©  ú	 deleted.T©rõ   rð   r[   zCould not delete zone.r®  r•   r¦  )r   rJ   r³  rˆ  rŒ  r   r   rõ   rJ  r�  r_  r   )r‹  r8  rº  Úlabelrð   s        rt   Úadmin_zone_deleter¹  ‘  s²   € ô œT bÔ)€DØ× Ñ €Eð
)Ø�‰ŒØ˜e˜W IÐ.ˆÜ�GÔÜ¨D¸WÈBÑ OÓPÐPÜ×Ñ˜ 'Ô*ô �LÓ!Ð!øô ò )Ø*ˆÜ�GÔÜ˜w¨sÔ3Ò3Ü�‰�w Õ(Ü�LÓ!Ð!ð)ús   Ÿ/A0 ÁA0 Á0#B8ÂB8Â7B8c                 ó`  — | j                   | j                  t        | j                  «      | j                  t        | j                  «      t	        | j
                  «      | j
                  › d| j                  › �| j                  | j                  r| j                  j                  d«      dœ	S ddœ	S )NrÐ   r‘  rÍ   )	r[   Úorigin_country_codeÚorigin_country_nameÚdestination_country_codeÚdestination_country_nameÚmin_freightÚmin_freight_displayÚcurrencyrÖ   )	r[   r»  r3   r½  r¯   r¿  rÁ  rÖ   ri   )Úroutes    rt   Ú_freight_route_row_datarÃ  §  sž   € à�h‰hØ$×8Ñ8Ü4°U×5NÑ5NÓOØ$)×$BÑ$BÜ$9¸%×:XÑ:XÓ$YÜ˜5×,Ñ,Ó-Ø"'×"3Ñ"3Ð!4°A°e·n±nÐ5EÐFØ—N‘NØEJ×EUÒEU�e×&Ñ&×/Ñ/Ð0@ÓAñ
ð 
ð \^ñ
ð 
rÅ   c                 óz   — | xs dj                  «       }|sy	 t        |«      }|dk  ry|d fS # t        $ r Y yw xY w)NrÍ   )NzMinimum freight is required.)Nz'Minimum freight must be a valid number.r   )Nz#Minimum freight cannot be negative.r¿  )rÀ  r…  rœ   s      rt   Ú_parse_min_freightrÅ  µ  sR   € ØŠY�B×ÑÓ€EÙØ3ð?Ü˜“ˆð �‚zØ:Ø�4ˆ<Ðøô	 ò ?Ù>ð?úrÂ  c                 ó’   — | xs dj                  «       j                  «       }|syt        |«      dk7  s|j                  «       sy|dfS )zAKept for compatibility; prefer currency_code_for_country(origin).rÍ   rÄ  é   )Nz%Currency must be a 3-letter ISO code.N)rÞ   Úupperr`  Úisalpha)rÀ  Úcodes     rt   Ú_parse_currencyrË  Â  sC   € àŠI�2×ÑÓ×$Ñ$Ó&€DÙØÜ
ˆ4ƒy�A‚~˜TŸ\™\œ^Ø<Ø�ˆ:ÐrÅ   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 )NrÍ   )rÞ   r¾   r4   Úaddr  r1   r  r	  )ÚsearchÚneedleÚcodesÚexactÚloweredrÊ  r  s          rt   Ú_country_codes_matching_searchrÓ  Ì  s•   € ØŠl˜×!Ñ!Ó#€FÙØˆ	Ü‹E€EÜ  Ó(€EÙØ�	‰	�%ÔØ�l‰l‹n€GÜ%×+Ñ+Ó-ò ‰
ˆˆdØ�d—j‘j“lÑ" g°·±³Ò&=Ø�I‰I�d�Oðô �‹;ÐrÅ   c                 óÀ  — t        | «      \  }}}}|j                  «       }|r[t        |«      }t        «       }|rt        |¬«      t        |¬«      z  }|j	                  t        |¬«      t        |¬«      z  |z  «      }|j                  «       }	g d¢}
 |j
                  t        | |
ddg«      Ž }||||z    }t        |||	|D �cg c]  }t        |«      ‘Œ c}«      S c c}w )N)Úorigin_country_code__in)Údestination_country_code__in)Úorigin_country_code__icontains)Ú#destination_country_code__icontains)r»  r½  r¿  rÁ  rÖ   Nr»  r½  )	r>   rø   rÓ  r   rd   r®   r:   r;   rÃ  )r‹  rk   Údrawrn   ÚlengthrÎ  Úrecords_totalÚmatched_codesÚname_qÚrecords_filteredrç  Ú
ordered_qsÚpageÚitems                 rt   Ú_freight_routes_datatablesrâ  Û  sú   € Ü":¸7Ó"CÑ€Dˆ%�˜Ø—H‘H“J€MÙÜ6°vÓ>ˆÜ“ˆÙä¨-Ô8Ü°Ô?ñ@ð ð �Y‰YÜ¨VÔ4Ü°FÔ;ñ<àñó
ˆð
 —x‘x“zÐò€Lð �—‘Ü	 ¨Ð8MÐOiÐ7jÓ	kð€Jð �e˜E F™NÐ+€DÜØØØØ37Ö8¨4Ô	  Õ	&Ò8ó	ð ùò 	9s   ÃCc           
      ó´  — t         j                  j                  «       }t        | «      r|t	        | j
                  j                  d«      «      }t	        | j
                  j                  d«      «      }|r|j                  |¬«      }|r|j                  |¬«      }t        | |«      S t        | dt        t        t        j                  t        «       «      dœ«      S )NÚoriginÚdestination)r»  )r½  zcore/freight_routes.html)r¡  r7   Úcurrency_by_country_json)rC   r©   rE  r<   r6   r  rj   rd   râ  r   r2   ÚFREIGHT_CURRENCY_CHOICESrT  Údumpsr9   )r‹  rk   rä  rå  s       rt   Úadmin_freight_routesré     s¬   € ä	×	Ñ	×	!Ñ	!Ó	#€BÜ˜WÔ%Ü'¨¯©¯©¸Ó(AÓBˆÜ,¨W¯[©[¯_©_¸]Ó-KÓLˆÙØ—‘¨v�Ó6ˆBÙØ—‘°K�Ó@ˆBÜ)¨'°2Ó6Ð6Ü�'Ð5Ü*Ü4Ü$(§J¡JÔ/HÓ/JÓ$Kñ8ó ð rÅ   c                 óf  — t        | j                  j                  d«      «      }t        | j                  j                  d«      «      }|r|s;d}t        | «      rt	        |«      S t        j                  | |«      xs t        d«      S t        |«      rt        |«      s;d}t        | «      rt	        |«      S t        j                  | |«      xs t        d«      S ||k(  r;d}t        | «      rt	        |«      S t        j                  | |«      xs t        d«      S t        j                  j                  ||¬«      j                  «       rBd|› d	|› d
�}t        | «      rt	        |«      S t        j                  | |«      xs t        d«      S t        | j                  j                  d«      «      \  }}|r9t        | «      rt	        |«      S t        j                  | |«      xs t        d«      S t        |«      }	 t        j                  j                  ||||¬«      }d|› d|› d�}t        | «      rt!        d|t#        |«      dœ«      S t        j$                  | |«       t        d«      S # t&        $ r? d}t        | «      rt	        |d¬«      cY S t        j                  | |«       Y t        d«      S w xY w)Nr»  r½  ú$Origin and destination are required.úcore:freight_routesú.Select valid origin and destination countries.ú3Origin and destination must be different countries.©r»  r½  úA route from ú to rª  r¿  )r»  r½  r¿  rÁ  úRoute õ    â†’ r¬  T©rõ   rð   rÂ  zCould not create freight route.r®  r•   )r6   rV  rj   rŒ  r�  r   r_  r   r5   rC   r©   rd   ra  rÅ  r8   r  r   rÃ  rõ   rJ  )r‹  rä  rå  rð   r¿  Úfreight_errorrÁ  rÂ  s           rt   Úadmin_freight_route_createrö    s¦  € ô $ G§L¡L×$4Ñ$4Ð5JÓ$KÓL€FÜ(¨¯©×)9Ñ)9Ð:TÓ)UÓV€KÙ™Ø8ˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ô ! Ô(Ô0EÀkÔ0RØBˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ð �ÒØGˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ô ×Ñ×"Ñ"Ø"Ø!,ð #ó ÷ �fƒhðð " & ¨¨k¨]Ð:JÐKˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ô "4°G·L±L×4DÑ4DÀ]Ó4SÓ!TÑ€K�ÙÜ-5°gÔ->Œ{˜=Ó)ð 	
Ü�N‰N˜7 MÓ2ÒU´hÐ?TÓ6Uð	
ô )¨Ó0€Hð)Ü×$Ñ$×+Ñ+Ø &Ø%0Ø#Øð	 ,ó 
ˆð ˜6˜( %¨ }°IÐ>ˆÜ�GÔÜØØ"Ü0°Ó7ñ!ó ð ô
 	×Ñ˜ 'Ô*ô Ð)Ó*Ð*øô ò )Ø3ˆÜ�GÔÜ˜w¨sÔ3Ò3Ü�‰�w Õ(ÜÐ)Ó*Ð*ð)ús   Ç8AI( ÉI( É(#J0ÊJ0Ê/J0c                 óÎ  — t        t        |¬«      }t        | j                  j	                  d«      «      }t        | j                  j	                  d«      «      }|r|s;d}t        | «      rt        |«      S t        j                  | |«      xs t        d«      S t        |«      rt        |«      s;d}t        | «      rt        |«      S t        j                  | |«      xs t        d«      S ||k(  r;d}t        | «      rt        |«      S t        j                  | |«      xs t        d«      S t        j                  j                  ||¬«      j                  |j                  ¬«      j                  «       rBd	|› d
|› d�}t        | «      rt        |«      S t        j                  | |«      xs t        d«      S t!        | j                  j	                  d«      «      \  }}|r9t        | «      rt        |«      S t        j                  | |«      xs t        d«      S t#        |«      }||_        ||_        ||_        ||_        	 |j-                  «        d|› d|› d�}t        | «      rt/        d|t1        |«      dœ«      S t        j2                  | |«       t        d«      S # t4        $ r? d}t        | «      rt        |d¬«      cY S t        j                  | |«       Y t        d«      S w xY w)Nr7  r»  r½  rë  rì  rí  rî  rï  rð  rñ  rª  r¿  rò  ró  r³  Trô  zCould not update freight route.r®  r•   )r   rC   r6   rV  rj   rŒ  r�  r   r_  r   r5   r©   rd   r¼   r8  ra  rÅ  r8   r»  r½  r¿  rÁ  rð  r   rÃ  rõ   rJ  )	r‹  r8  rÂ  rä  rå  rð   r¿  rõ  rÁ  s	            rt   Úadmin_freight_route_editrø  K  s·  € ô œl¨rÔ2€EÜ# G§L¡L×$4Ñ$4Ð5JÓ$KÓL€FÜ(¨¯©×)9Ñ)9Ð:TÓ)UÓV€KÙ™Ø8ˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ô ! Ô(Ô0EÀkÔ0RØBˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ð �ÒØGˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ô 	×Ñß	‰ FÀ[ˆÓ	Qß	‰�E—H‘HˆÓ	ß	‰‹ð	ð
 " & ¨¨k¨]Ð:JÐKˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ô "4°G·L±L×4DÑ4DÀ]Ó4SÓ!TÑ€K�ÙÜ-5°gÔ->Œ{˜=Ó)ð 	
Ü�N‰N˜7 MÓ2ÒU´hÐ?TÓ6Uð	
ô )¨Ó0€HØ &€EÔØ%0€EÔ"Ø#€EÔØ€E„Nð)Ø�
‰
ŒØ˜6˜( %¨ }°IÐ>ˆÜ�GÔÜØØ"Ü0°Ó7ñ!ó ð ô
 	×Ñ˜ 'Ô*ô Ð)Ó*Ð*øô ò )Ø3ˆÜ�GÔÜ˜w¨sÔ3Ò3Ü�‰�w Õ(ÜÐ)Ó*Ð*ð)ús   È?;J É;J Ê#K$ËK$Ë#K$c                 ó”  — t        t        |¬«      }|j                  › d|j                  › �}	 |j	                  «        d|› d�}t        | «      rt        d||dœ«      S t        j                  | |«       t        d
«      S # t        $ r? d}t        | «      rt        |d¬	«      cY S t        j                  | |«       Y t        d
«      S w xY w)Nr7  ró  rò  r¶  Tr·  zCould not delete freight route.r®  r•   rì  )r   rC   r»  r½  rˆ  rŒ  r   r   rõ   rJ  r�  r_  r   )r‹  r8  rÂ  r¸  rð   s        rt   Úadmin_freight_route_deleterú  †  sÇ   € ô œl¨rÔ2€EØ×(Ñ(Ð)¨¨u×/MÑ/MÐ.NÐO€Eð
)Ø�‰ŒØ˜5˜' Ð+ˆÜ�GÔÜ¨D¸WÈBÑ OÓPÐPÜ×Ñ˜ 'Ô*ô Ð)Ó*Ð*øô ò )Ø3ˆÜ�GÔÜ˜w¨sÔ3Ò3Ü�‰�w Õ(ÜÐ)Ó*Ð*ð)ús   ®/A? ÁA? Á?#CÂ$CÃCc           	      óØ  — | j                   j                  d«      }|s;d}t        | «      rt        |«      S t	        j
                  | |«      xs t        d«      S 	 t        |«      }t        |«      }d|d   › d	|d
   › dt        |d   «      › d�}t        | «      rt        d||dœ«      S t	        j                  | |«       t        d«      S # t        $ rN}t        |«      }t        | «      rt        |«      n"t	        j
                  | |«      xs t        d«      cY d }~S d }~wt        $ rB d}t        | «      rt        |d¬«      cY S t	        j
                  | |«      xs t        d«      cY S w xY w)NÚfilez%Choose a CSV or Excel file to import.rì  z Could not import freight routes.r®  r•   zImport complete: rƒ  z
 created, Úupdatedz
 updated, rŽ  z errors.T)rõ   rð   Úsummary)ÚFILESrj   rŒ  r�  r   r_  r   rL   rK   r  r¯   rJ  r`  r   rõ   )r‹  Úuploadedrð   ro   rþ  rd  s         rt   Úadmin_freight_route_bulk_importr  ™  sh  € ð �}‰}× Ñ  Ó(€HÙØ9ˆÜ'/°Ô'8Œ{˜7Ó#ð 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oð	
ð
Ü)¨(Ó3ˆÜ,¨TÓ2ˆð ˜G IÑ.Ð/¨zØ�9ÑÐ
˜j¬¨W°XÑ->Ó)?Ð(@Àð	Jð ô �ÔÜ¨¸ÈWÑUÓVÐVÜ×Ñ�W˜gÔ&ÜÐ)Ó*Ð*øô% ò 
Ü�c“(ˆÜ'/°Ô'8Œ{˜7Ô#Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oõ	
ûô ò 
Ø4ˆÜ3;¸GÔ3DŒ{˜7¨3Ô/ò 	
Ü�N‰N˜7 GÓ,ÒO´Ð9NÓ0Oò	
ð
ús+   ÁC	 Ã		E)ÃADÄE)Ä&E)Å#E)Å(E)c                 ó8  — t        j                  «       }t        | j                  xs d |¬«      }| j                  dk(  rN|j                  «       r>|j                  «        ddlm}  |«        t        j                  | d«       t        d«      S t        | dd|i«      S )	N)ÚinstancerV  r   )Ú!apply_platform_settings_to_djangozPlatform settings saved.zcore:settingszcore/settings.htmlr  )r"   ÚloadrQ   rV  r^  r  rð  Úaccounts.platform_configr  r   rõ   r   r   )r‹  Úpsr  r  s       rt   Úadmin_settingsr  º  s}   € ô 
×	Ñ	Ó	 €BÜ §¡Ò 4°¸rÔB€DØ‡~�~˜Ò D§M¡M¤OØ�	‰	ŒÝNá)Ô+Ü×Ñ˜Ð"<Ô=Ü˜Ó(Ð(Ü�'Ð/°&¸$°Ó@Ð@rÅ   c                 óB  — t         j                  j                  t        d«      ¬«      j	                  d«      j                  d«      d d }t        j                  j                  dd«      j                  t        |«      ¬«      j	                  d	«      }| j                  j                  d
«      xs dj                  «       }|r|j                  |¬«      }t        | «      rt        | |t        g d¢g d¢d	g¬«      S t!        | d|t        j"                  j$                  dœ«      S )Nr8  ©rá  r  r[   rM   rž  rè   )Úlatest_conversation_idrM  r–   rÍ   r•   )rÑ   Úshipper__emailrã   rä   r  r–   )rÑ   r  rã   rä   r  r–   Nrå  zcore/shipments.html)Ústatus_filterÚshipment_status_choices)rB   r©   rd   r   r®   rf   rG   rÙ   re   r   r  rj   rÞ   r<   r=   Ú_shipment_list_row_datar   rª   rv  )r‹  Úlatest_conv_subqrê  Ústs       rt   Úadmin_shipmentsr  É  s  € ô 	×Ñ×#Ñ#´¸³Ð#Ó?ß	‰�-Ó	 ß	‰�‹�b�qð	ð ô 	×Ñ×'Ñ'¨	°6Ó:ß	‰¬Ð2BÓ)CˆÓ	Dß	‰�%‹ð ð
 �+‰+�/‰/˜(Ó
#Ò
) r×	0Ñ	0Ó	2€BÙ	Ø—.‘.¨�.Ó+ˆÜ˜WÔ%Ü+ØØÜ#òòð !˜'ô+
ð 	
ô. ØØàÜ'/§¡×'>Ñ'>ñ	
óð rÅ   c                 óö   — t        t        j                  j                  dd«      |¬«      }t        j                  j                  |¬«      j                  d«      j                  dd«      }t        | d||d	œ«      S )
Nrž  rè   r7  râ  rë   Úbatch_numberr›   z!core/includes/shipment_modal.html)rÇ   Úrate_requests)r   rG   r©   rÙ   rF   rd   r®   r   )r‹  rá  rÇ   r  s       rt   Úadmin_shipment_modalr  ú  s‚   € ô !Ü×Ñ×'Ñ'¨	°6Ó:Øô€Hô  ×'Ñ'×.Ñ.¸Ð.ÓA×PÑPÐQYÓZ×cÑcÐdrð  uAó  B€MÜØØ+à Ø*ñ	
óð rÅ   c                 óR   — | r| › d�nd}t        di |di¤Žt        di |› d�di¤Žz   S )Nrü  rÍ   Ú__isnullTrb   ©r   )Úprefixrf  s     rt   Ú_vehicle_document_has_file_qr    s?   € Ù%ˆvˆh�d‰O¨6€EÜÑ�%˜�Ñ¤Ñ ?¨ w¨hÐ%7¸Ð$>Ñ ?Ñ?Ð@Ð@rÅ   c                  óP   — t         j                  j                  t        «       «      S rŽ  )r(   r©   rd   r  rb   rÅ   rt   Ú_existing_vehicle_documents_qsr    s   € Ü×"Ñ"×)Ñ)Ô*FÓ*HÓIÐIrÅ   c                  ó  — t         j                  j                  } t         j                  j                  }t         j                  j                  }t        d«      }t        j                  j                  dd«      j                  t        d|d¬«      t        d|t        | ¬«      z  d¬«      t        d|t        |¬«      z  d¬«      t        d|t        |¬«      z  d¬«      t        d|¬	«      t        d
|¬	«      ¬«      j                  d¬«      S )NÚdocuments__rÐ  Úowner__transporter_profiler;  T©rd   Údistinct)Údocuments__review_statusÚdocuments__submitted_at©rd   Údocuments__reviewed_at©Údocument_countÚpending_countÚrejected_countÚapproved_countÚlast_submitted_atÚlast_reviewed_atr   ©Údocument_count__gt)r(   rö   r÷   ÚREJECTEDÚAPPROVEDr  r'   r©   rÙ   re   r   r   r   rd   )ÚpendingÚrejectedÚapprovedÚhas_files       rt   Ú _vehicle_documents_list_querysetr6    sô   € Ü×*Ñ*×2Ñ2€GÜ×+Ñ+×4Ñ4€HÜ×+Ñ+×4Ñ4€HÜ+¨MÓ:€HÜ�?‰?×)Ñ)ØØ$ó÷ �hÜ˜[°ÀDÔIÜØØœa¸ÔAÑAØô
ô
 ØØœa¸ÔBÑBØô
ô
 ØØœa¸ÔBÑBØô
ô
 Ð7ÀÔIÜÐ5¸hÔGð% ó ÷& �f €fÓ"ð-#rÅ   c                 óè  — t        | dd«      xs d}t        | dd«      xs d}t        | dd«      xs d}t        | dd«      xs d}t        | dd «      }t        | dd «      }t        | dd «      }|r(t        j                  j                  }|d	kD  rd
|› d�nd}	ne|r(t        j                  j                  }|d	kD  rd|› d�nd}	n;|rt        j                  j
                  }d}	nt        j                  j                  }d}	| j                  | j                  | j                  xs d| j                  |r|j                  ndt        | «      |||	|r|j                  d«      nd|r|j                  d«      dœS ddœS )Nr)  r   r*  r+  r(  r,  r-  rÐ  rM   ú	Pending (ú)ÚPendingú
Rejected (ÚRejectedÚApprovedr  rÍ   r‘  r˜  )r[   Ú
vehicle_idr  rØ  rÙ  rÚ  r(  rò   Úreview_status_displayÚsubmitted_atr“  )rÜ   r(   rö   r÷   r0  r1  r[   r  rØ  rá   rÑ  ri   )
rk  r2  r3  r4  rƒ   Úlast_submittedÚlast_reviewedrÐ  rò   r?  s
             rt   Ú_vehicle_document_list_row_datarC  3  s„  € Ü�g˜°Ó2Ò7°a€GÜ�wÐ 0°!Ó4Ò9¸€HÜ�wÐ 0°!Ó4Ò9¸€HÜ�GÐ-¨qÓ1Ò6°Q€EÜ˜WÐ&9¸4Ó@€NÜ˜GÐ%7¸Ó>€MÜ�G˜W dÓ+€EÙÜ'×4Ñ4×<Ñ<ˆØ:?À!º) )¨G¨9°AÑ 6ÈÑÙ	Ü'×4Ñ4×=Ñ=ˆØ<AÀAºI *¨X¨J°aÑ 8È:ÑÙ	Ü'×4Ñ4×=Ñ=ˆØ *Ñä'×4Ñ4×<Ñ<ˆØ %Ðà�j‰jØ—j‘jØ&×:Ñ:Ò@¸bØ×$Ñ$Ù&+�u—{’{°Ü-¨gÓ6ØØ&Ø!6ÙES˜×/Ñ/Ð0@ÔAÐY[Ù=J�}×-Ñ-¨jÓ9ñð ð QVñð rÅ   c                 ó’   — ddl m}  |«        t        «       }t        | «      rt	        | |t
        ddgg d¢dg¬«      S t        | d«      S )	Nr   )Ú&sync_missing_kyc_vehicle_registrationsr  Úowner__email)r  rF  Ú(owner__transporter_profile__account_typer(  r)  r,  r-  Nú-last_submitted_atrå  zcore/vehicle_documents.html)Úaccounts.vehicle_docsrE  r6  r<   r=   rC  r   )r‹  rE  rê  s      rt   Úadmin_vehicle_documentsrJ  V  s\   € õ MÙ*Ô,ä.Ó0€GÜ˜WÔ%Ü+ØØÜ+à%Øðò	ð 0Ð0ô%
ð 	
ô* �'Ð8Ó9Ð9rÅ   c           	      óü   — t        t        j                  j                  d«      |¬«      }t	        t        «       j                  |¬«      j                  d«      j                  d«      «      }t        | d||dd dœ«      S )	NrÐ  r7  )r>  Úreviewed_byú-submitted_atz*core/includes/vehicle_documents_modal.htmlF)rk  r;  Úsingle_documentÚfocus_document_id)	r   r'   r©   rÙ   Ú_uploaded_vehicle_documentsr  rd   r®   r   )r‹  r>  rk  r;  s       rt   Úadmin_vehicle_documents_modalrQ  w  s{   € ô  ¤§¡× >Ñ >¸wÓ GÈJÔW€GÜ+Ü&Ó(×/Ñ/¸:Ð/ÓF×UÑUØó	
ç
‰(�?Ó
#ó€Iô
 ØØ4àØ"Ø$Ø!%ñ		
ó	ð 	rÅ   c                 óì  — t        t        j                  j                  dd«      |¬«      }t	        | j
                  xs d «      }| j                  dk(  rð|j                  «       rà|j                  }|d   |_	        |j                  d«      xs d|_        t        j                  «       |_        | j                  |_        g d¢}|j                  d	«      r|d	   |_        |j%                  d	«       |j'                  |¬
«       t)        | «      rt+        ddt-        |«      dœ«      S t/        j0                  | d«       t3        d«      S | j                  dk(  r“t)        | «      rˆg }|j4                  j7                  «       D ]2  \  }}|D ](  }	|j%                  |dk7  r|› d|	› �n
t9        |	«      «       Œ* Œ4 t;        |rdj=                  |«      nd|j4                  j?                  «       «      S tA        | d||dœ«      S )Nrk  Úvehicle__ownerr7  rV  rò   r’  rÍ   )rò   r’  r“  rL  r™  rí  TzDocument review saved.©rõ   rð   Údocumentzcore:vehicle_documentsÚ__all__z: z; rs  z!core/vehicle_document_review.html)rU  r  )!r   r(   r©   rÙ   rS   rV  r^  r  rÿ  rò   rj   r’  r   r‰   r“  r„  rL  r™  rh   rð  rŒ  r   rš  r   rõ   r   rŽ  r  r¯   r�  rL  r}  r   )
r‹  r8  r•  r  r  rî  Ú
error_bitsrf  Úerrsre  s
             rt   Úadmin_vehicle_document_reviewrY  Œ  sÌ  € ô œO×3Ñ3×BÑBÀ9ÐN^Ó_ÐdfÔ
g€CÜ'¨¯©Ò(<¸Ó=€DØ‡~�~˜Ò D§M¡M¤OØ×ÑˆØ˜Ñ/ˆÔØŸ6™6 .Ó1Ò7°RˆÔÜ"Ÿ,™,›.ˆŒØ!Ÿ,™,ˆŒÚWˆØ�6‰6�-Ô Ø  Ñ/ˆCŒOØ× Ñ  Ô/Ø�‰˜}ˆÔ-Ü�GÔÜØØ3Ü7¸Ó<ñ!ó ð ô
 	×Ñ˜Ð":Ô;ÜÐ0Ó1Ð1Ø‡~�~˜Ò¤H¨WÔ$5Øˆ
ØŸ;™;×,Ñ,Ó.ò 	Y‰KˆE�4Øò Y�Ø×!Ñ!°uÀ	Ò7I U G¨2¨c¨UÑ"3ÌsÐSVËxÕXñYð	Yô Ù%/ˆD�I‰I�jÔ!Ð5IØ�K‰K×%Ñ%Ó'ó
ð 	
ô �'Ð>ÈSÐZ^Ñ@_Ó`Ð`rÅ   c                 óz  — t        t        |¬«      }t        j                  «       }t	        t        «       j                  |¬«      j                  t        j                  j                  ¬«      «      }|D ]9  }t        j                  j                  |_        ||_        | j                  |_        Œ; |r"t        j                  j!                  |g d¢«       t        «       j                  |¬«      j#                  d«      }t%        dt'        |«      › d�t'        |«      |D �cg c]  }t)        |«      ‘Œ c}dœ«      S c c}w )	Nr7  )rk  rñ   )rò   r“  rL  rM  Tú document(s) approved.©rõ   rð   Úupdated_countr;  )r   r'   r   r‰   r	  r  rd   r¼   r(   rö   r1  rò   r“  r„  rL  r©   Úbulk_updater®   r   r`  rš  )r‹  r>  rk  r‰   Údocsr•  Ú	refresheds          rt   Ú#admin_vehicle_documents_approve_allra  °  s  € ô  ¤¨JÔ7€GÜ
�,‰,‹.€CÜÜ&Ó(×/Ñ/¸Ð/Ó@×HÑHÜ)×6Ñ6×?Ñ?ð 	Ió 	
ó€Dð
 ò 'ˆÜ+×8Ñ8×AÑAˆÔØˆŒØ!Ÿ,™,ˆ�ð'ñ Ü×Ñ×+Ñ+¨DÒ2aÔbÜ.Ó0×7Ñ7ÀÐ7ÓH×QÑQÐRaÓb€IÜØÜ˜$“i�[Ð 6Ð7Ü˜T›ØBKÖL¸3Ô1°#Õ6ÒLñ	ó ð ùò Ms   ÄD8c                 óª   — t         j                  j                  ddddd«      }t        | «      rt	        | |t
        g d¢g d¢dg¬	«      S t        | d
«      S )NrÐ  r   rÊ   Ú$assigned_driver__transporter_profileÚverified_by)r  r  rF  Úassigned_driver__emailÚassigned_driver__first_nameÚassigned_driver__last_name)	r  r  rG  rf  rÜ  r  r  r›   Nr  rå  zcore/vehicles.html)r'   r©   rÙ   r<   r=   rÞ  r   ré  s     rt   Úadmin_vehiclesrh  É  sf   € ä�o‰o×,Ñ,ØØ$ØØ.Øó€Gô ˜WÔ%Ü+ØØÜòò
ð )˜/ô/
ð 	
ô2 �'Ð/Ó0Ð0rÅ   c                 ó\  — t        t        j                  j                  ddd«      |¬«      }t	        |dd «      }t	        |dd «      }|xs |}t        |«      }|�2|j                  «       }t        |j                  «      }|j                  }	n:|�2|j                  «       }t        |j                  «      }|j                  }	nd}d}d}	|j                  › d|j                  › �j                  «       }
t	        |dd «      }t        | d	|||
xs |j                  |r|j                   nd||||	d
œ«      S )Nr¨  rÌ   rÈ  r7  r  FrÍ   rÐ   z&core/includes/vehicle_owner_modal.html)rÐ  ré   Ú
owner_namer©  Úownership_labelr*  r*  rù  )r   rD  r©   rÙ   rÜ   rÎ  rË  rƒ  r*  rù  rŸ  rß   rà   rÞ   r   rá   r©  )r‹  r@  rÐ  rÈ   rž  ré   rk  r*  r*  rù  rÓ  r¨  s               rt   Úadmin_vehicle_owner_modalrl  ï  sD  € ô Ü�‰×#Ñ# FÐ,AÐCTÓUØô€Eô ˜%Ð!6¸Ó=€KÜ�eÐ.°Ó5€GØÒ$˜W€GÜ+¨EÓ2€OØÐØ*×CÑCÓEÐÜ! +×"@Ñ"@ÓAÐØ"×/Ñ/‰Ø	Ð	Ø&×?Ñ?ÓAÐÜ! '×"6Ñ"6Ó7ÐØ×+Ñ+‰à$ÐØ"ÐØˆà×#Ñ#Ð$ A e§o¡oÐ%6Ð7×=Ñ=Ó?€IÜ�5˜& $Ó'€DÜØØ0àØØ#Ò2 u§{¡{Ù#'�T—Z’Z¨RØ.Ø$8Ø"4Ø(ñ		
óð rÅ   c                 ó  — t        t        j                  j                  dd«      j	                  t        dt        j                  j                  d¬«      j                  dd«      ¬«      «      |¬	«      }t        |dd «      }|r|j                  «       nd
}|j                  › d|j                  › �j                  «       }t        |dd «      }t        | d|||xs |j                  |r|j                  nd|t!        |«      dœ«      S )Nr¨  rÌ   r�  Tr�  rÈ   rÉ   r5  r7  r  rÐ   z'core/includes/vehicle_driver_modal.htmlrÍ   )rë   ré   rÓ   r©  r*  Úcompany_or_transporter)r   rD  r©   rÙ   r<  r   r$   rd   rÜ   rË  rß   rà   rÞ   r   rá   r©  r”  )r‹  r@  rë   ré   r*  rÓ  r¨  s          rt   Úadmin_vehicle_driver_modalro    sÿ   € ô Ü�‰×#Ñ# FÐ,AÓB×SÑSÜØ$Ü.×6Ñ6×=Ñ=ÈÐ=ÓM×\Ñ\Ø!Ø6óôó	
ð ô€Fô �fÐ3°TÓ:€GÙAH˜7×;Ñ;Ô=ÈeÐØ×$Ñ$Ð% Q v×'7Ñ'7Ð&8Ð9×?Ñ?ÓA€IÜ�6˜6 4Ó(€DÜØØ1àØØ$Ò4¨¯©Ù#'�T—Z’Z¨RØ$8Ü&LÈVÓ&Tñ	
óð rÅ   c                óª   — || _         || _        |r!t        j                  «       | _        || _        nd | _        d | _        | j                  g d¢¬«       y )N)r  r  Úverified_atrd  rÖ   rí  )r  r  r   r‰   rq  rd  rð  )rk  r„  r  r  s       rt   Ú_update_vehicle_verificationrr  :  sO   € Ø%€GÔØ!€GÔÙÜ&Ÿl™l›nˆÔØ"ˆÕà"ˆÔØ"ˆÔØ‡L�LÚ^ð õ rÅ   c                 ó   — t        d«      S )zALegacy URL: verification now opens from the vehicles table modal.úcore:vehicles)r   )r‹  r8  s     rt   Úadmin_vehicle_verifyru  H  s   € ô �OÓ$Ð$rÅ   c                 ó   — t        t        j                  j                  ddd«      |¬«      }| j                  dk(  rÅ| j
                  j                  d«      dk(  }| j
                  j                  d«      dk(  }t        || j                  ||¬	«       | j                  j                  d
«      dk(  r1t        dd|j                  |j                  |j                  dœdœ«      S t        j                  | d«       t!        d«      S t#        | dd|i«      S )NrÐ  rÊ   rd  r7  rV  r  r«  r  )r„  r  r  zX-Requested-Withrˆ  TzVehicle verification updated.)r[   r  r  )rõ   rð   rk  rt  z'core/includes/vehicle_verify_modal.htmlrk  )r   r'   r©   rÙ   r^  rV  rj   rr  r„  r‰  r   r[   r  r  r   rõ   r   r   )r‹  r8  rk  r  r  s        rt   Úadmin_vehicle_verify_modalrw  O  s  € ô  Ü�‰×&Ñ&ØØØó	
ð
 ô€Gð ‡~�~˜ÒØ—l‘l×&Ñ& }Ó5¸Ñ=ˆØ—L‘L×$Ñ$ [Ó1°TÑ9ˆ	Ü$ØØ—‘Ø#Øõ		
ð �?‰?×ÑÐ1Ó2Ð6FÒFÜØØ:à!Ÿ*™*Ø#*×#6Ñ#6Ø!(×!2Ñ!2ññ!ó ð ô 	×Ñ˜Ð"AÔBÜ˜Ó(Ð(Ü�'ÐDÀyÐRYÐFZÓ[Ð[rÅ   c                 ó\   — | syt        | dd «      xs dj                  «       }t        |«      S )NFr  rÍ   )rÜ   rÞ   rƒ  )Ú
field_filer  s     rt   Ú_file_field_uploadedrz  r  s.   € ÙØÜ�J ¨Ó-Ò3°×:Ñ:Ó<€DÜ�‹:ÐrÅ   c           
      ó„   — | D �cg c]0  }t        t        |dd «      «      st        t        |dd «      «      r|‘Œ2 c}S c c}w )Nrü  Ú	file_back©rz  rÜ   ©r_  rz   s     rt   r>  r>  y  sD   € àöØÜ¤¨¨6°4Ó 8Ô9Ü¤¨¨;¸Ó =Ô>ò 	
òð ùò s   …5=c           
      óZ   — | D �cg c]  }t        t        |dd «      «      sŒ|‘Œ c}S c c}w )Nrü  r}  r~  s     rt   rP  rP  �  s'   € ØÖN�!Ô3´G¸A¸vÀtÓ4LÕMŠAÒNÐNùÒNs   …(¡(c                 óª   — | r| › d�nd}| r| › d�nd}t        di |di¤Žt        di |› d�di¤Žz  }t        di |di¤Žt        di |› d�di¤Žz  }||z   S )Nrü  r|  rÍ   r  Trb   r  )r  Ú
file_fieldÚ
back_fieldÚempty_frontÚ
empty_backs        rt   Ú_kyc_document_has_file_qr…  …  s…   € Ù$*�F�8˜4‘°€JÙ)/�F�8˜9Ñ%°[€JÜÑ'�z 2Ð&Ñ'¬!Ñ*N°*°¸XÐ/FÈÐ.MÑ*NÑN€KÜÑ&�j "Ð%Ñ&¬Ñ)M°°¸HÐ.EÀtÐ-LÑ)MÑM€JØ˜:Ñ%Ð&Ð&rÅ   c                  óª   — t         j                  j                  t         j                  ¬«      j	                  t        «       «      j                  d«      S )uB   KYC rows for people/company identity â€” not vehicle registration.)Údocument_type__inrM  )r!   r©   r¼   ÚLEGACY_VEHICLE_KYC_TYPESrd   r…  r®   rb   rÅ   rt   r=  r=  �  sA   € ä×Ñ×&Ñ&Ü%×>Ñ>ð 'ó ç�fÔ%Ó'Ó(¯©°/Ó)BðCrÅ   c                  óP   — t        d«      t        t        j                  ¬«       z  S )NÚkyc_documents__)Ú kyc_documents__document_type__in)r…  r   r!   rˆ  rb   rÅ   rt   Ú_kyc_person_docs_relation_qrŒ  ”  s*   € Ü#Ð$5Ó6¼!Ü)4×)MÑ)Mô;ð :ñ ð rÅ   c                 ón  — t        «       }t        j                  j                  }t        j                  j                  }t        j                  j
                  }t        j                  j                  dd«      j                  t        d|d¬«      t        d|t        |¬«      z  d¬«      t        d|t        |¬«      z  d¬«      t        d|t        |¬«      z  d¬«      t        d|¬«      t        d	|¬«      ¬
«      j                  d¬«      }| r(|j                  t        d¬«      t        d¬«      z  «      }|S )NrÌ   rÈ  r4  Tr!  )Úkyc_documents__review_statusÚkyc_documents__submitted_atr%  Úkyc_documents__reviewed_atr'  r   r.  )Úpending_count__gt)Úrejected_count__gt)rŒ  r!   rö   r÷   r0  r1  rD  r©   rÙ   re   r   r   r   rd   )Úpending_onlyÚperson_docsr2  r3  r4  rk   s         rt   Ú_kyc_documents_list_querysetr•  š  s  € Ü-Ó/€KÜ×&Ñ&×.Ñ.€GÜ×'Ñ'×0Ñ0€HÜ×'Ñ'×0Ñ0€HÜ	�‰×	$Ñ	$ØØó
÷ �hÜ˜_°[È4ÔPÜØØ¤ÀÔ!HÑHØô
ô
 ØØ¤ÀÔ!IÑIØô
ô
 ØØ¤ÀÔ!IÑIØô
ô
 Ð;ÀKÔPÜÐ9À+ÔNð% ó ÷& �f €fÓ"ð- ñ. Ø�Y‰Y”q¨1Ô-´ÀQÔ0GÑGÓHˆØ€IrÅ   c                 óš  — t        | dd«      xs d}t        | dd«      xs d}t        | dd«      xs d}t        | dd«      xs d}t        | dd «      }t        | dd «      }|r(t        j                  j                  }|dkD  rd	|› d
�nd}ne|r(t        j                  j                  }|dkD  rd|› d
�nd}n;|rt        j                  j
                  }d}nt        j                  j                  }d}| j                  | j                  | j                  xs dt        | «      ||||r|j                  d«      nd|r|j                  d«      dœ	S ddœ	S )Nr)  r   r*  r+  r(  r,  r-  rM   r8  r9  r:  r;  r<  r=  r  rÍ   r˜  )	r[   r@  Ú
user_emailrÚ  r(  rò   Úverified_displayr@  r“  )
rÜ   r!   rö   r÷   r0  r1  r[   rá   rÎ  ri   )	r„  r2  r3  r4  rƒ   rA  rB  rò   r˜  s	            rt   Ú_kyc_document_list_row_datar™  »  s_  € Ü�d˜O¨QÓ/Ò4°1€GÜ�tÐ-¨qÓ1Ò6°Q€HÜ�tÐ-¨qÓ1Ò6°Q€HÜ�DÐ*¨AÓ.Ò3°!€EÜ˜TÐ#6¸Ó=€NÜ˜DÐ"4°dÓ;€MÙÜ#×0Ñ0×8Ñ8ˆØ5:¸Q²Y˜Y w i¨qÑ1ÀIÑÙ	Ü#×0Ñ0×9Ñ9ˆØ7<¸q²y˜Z¨ z°Ñ3ÀjÑÙ	Ü#×0Ñ0×9Ñ9ˆØ%Ñä#×0Ñ0×8Ñ8ˆØ Ðà�g‰gØ—7‘7Ø—j‘jÒ& BÜ*¨4Ó0ØØ&Ø,Ù?M˜×/Ñ/°
Ô;ÐSUÙ=J�}×-Ñ-¨jÓ9ñ
ð 
ð QVñ
ð 
rÅ   c                 ó¾   — | j                   j                  d«      dk(  }t        |¬«      }t        | «      rt	        | |t
        g d¢g d¢dg¬«      S t        | dd	|i«      S )
Nr2  Ú1)r“  )rá   rß   rà   )rá   Nr(  r)  r,  r-  NrH  rå  zcore/kyc_documents.htmlr“  )r  rj   r•  r<   r=   r™  r   )r‹  r“  rê  s      rt   Úadmin_kyc_documentsrœ  Û  sp   € à—;‘;—?‘? 9Ó-°Ñ4€LÜ*¸ÔE€GÜ˜WÔ%Ü+ØØÜ'òò
ð 0Ð0ô%
ð 	
ô( ØØ!Ø	˜Ð&óð rÅ   c           	      ó¾   — t        t        j                  j                  «       |¬«      }t	        t        «       j                  |¬«      «      }t        | d||dd dœ«      S )Nr7  rl  z&core/includes/kyc_documents_modal.htmlF)r„  r;  rN  rO  )r   rD  r©   rE  r>  r=  rd   r   )r‹  r@  r„  r;  s       rt   Úadmin_kyc_documents_modalrž  û  sa   € ô œTŸ\™\×-Ñ-Ó/°GÔ<€DÜ'Ü&Ó(×/Ñ/¸Ð/Ó@ó€Iô ØØ0àØ"Ø$Ø!%ñ		
ó	ð 	rÅ   c                 óö  — ddl m} t        t        |¬«      }d| j                  v r¸t        | j                  «      }|j                  «       sPt        | «      r$t        d|j                  j                  «       «      S t        j                  | d«       t        d«      S 	  |||j                  d   |j                  j                  d«      xs d| j                   d	¬
«       nm| j                  j                  d«      dk(  } |||rt        j&                  j(                  nt        j&                  j*                  d|r| j                   ndd¬
«       t        | «      rt-        d	dt/        |«      dœ«      S t        j0                  | d«       | j2                  j                  d«      dk(  rt        d«      S | j2                  j                  d«      dk(  rt        d«      S | j2                  j                  d«      dk(  rt        d«      S t        d«      S # t"        $ re}t        | «      r&t        t%        |«      dt%        |«      gi«      cY d}~S t        j                  | t%        |«      «       t        d«      cY d}~S d}~ww xY w)z?Approve or reject a single KYC document (legacy URL name kept).r   ©Úapply_kyc_reviewr7  rò   rs  zcore:kyc_documentsr’  rÍ   T©rò   r’  ÚreviewerÚnotifyNrô   r›  FzKYC document updated.rT  rX  rž  rp  rÈ   rq  r(  rr  )Úaccounts.kyc_reviewr¡  r   r!   rV  rP   r  rŒ  r�  rŽ  r}  r   r_  r   rÿ  rj   r„  r  r¯   rö   r1  r÷   r   r–  rõ   r  )r‹  r8  r¡  r•  r  rd  Úflags          rt   Úadmin_kyc_document_verifyr§  	  s  € õ 5ä
œK¨BÔ
/€Cà˜'Ÿ,™,Ñ&Ü'¨¯©Ó5ˆØ�}‰}ŒÜ˜Ô Ü"Ð#7¸¿¹×9RÑ9RÓ9TÓUÐUÜ�N‰N˜7Ð$8Ô9ÜÐ0Ó1Ð1ð	2ÙØØ"×/Ñ/°Ñ@Ø!×.Ñ.×2Ñ2°>ÓBÒHÀbØ Ÿ™Øöð �|‰|×Ñ 
Ó+¨sÑ2ˆÙØñ ô ×(Ñ(×1Ò1ä ×-Ñ-×5Ñ5àÙ%)�W—\’\¨tØõ
	
ô �ÔÜØØ.Ü/°Ó4ñ
ó ð 	ô
 ×Ñ�WÐ5Ô6Ø‡{�{‡��vÓ )Ò+Ü˜Ó'Ð'Ø‡{�{‡��vÓ -Ò/ÜÐ*Ó+Ð+Ø‡{�{‡��vÓ )Ò+Ü˜Ó'Ð'ÜÐ(Ó)Ð)øôA ò 	2Ü˜Ô Ü"¤3 s£8¨n¼sÀ3»x¸jÐ-IÓJÕJÜ�N‰N˜7¤C¨£HÔ-ÜÐ0Ó1Õ1ûð		2ús+   ÂAH
 È
	I8È+I3È>I8É)I3É-I8É3I8c                 óè  — ddl m} t        t        |¬«      }t	        t        «       j                  |¬«      j                  t        j                  j                  ¬«      «      }|D ]1  } ||t        j                  j                  d| j                  d¬«       Œ3 t        «       j                  |¬«      }t        d	t        |«      › d
�t        |«      |D �cg c]  }t        |«      ‘Œ c}dœ«      S c c}w )Nr   r   r7  ro  rñ   rÍ   Fr¢  Tr[  r\  )r¥  r¡  r   rD  r	  r=  rd   r¼   r!   rö   r1  r„  r   r`  r–  )r‹  r@  r¡  r„  r_  r•  r;  s          rt   Úadmin_kyc_user_verify_allr©  H	  sæ   € õ 5äœT gÔ.€DÜÜ&Ó(×/Ñ/°TÐ/Ó:×BÑBÜ%×2Ñ2×;Ñ;ð 	Có 	
ó€Dð
 ò 
ˆÙØÜ%×2Ñ2×;Ñ;ØØ—\‘\Øö	
ð
ô /Ó0×7Ñ7¸TÐ7ÓB€IÜØÜ˜$“i�[Ð 6Ð7Ü˜T›Ø>GÖH°sÔ-¨cÕ2ÒHñ	ó ð ùò Is   ÃC/c           
      óP  — dd„}| j                   | j                  xs d| j                   › �| j                  r| j                  j                  nd || j
                  «       || j                  «      | j                  xs d| j                  | j                  «       | j                  dœ	S )Nc                 ó€   — | xs dj                  «       }t        |«      |k  r| xs dS dj                  |d | «      dz   S )NrÍ   rÐ   õ   â€¦)Úsplitr`  rL  )Útextrø   Úwordss      rt   Útruncate_wordsz/_shipment_list_row_data.<locals>.truncate_wordse	  sD   € Ø’˜×"Ñ"Ó$ˆÜˆu‹:˜ÒØ’:˜2ÐØ�x‰x˜˜f˜u˜Ó&¨Ñ.Ð.rÅ   rà  rÍ   )	r[   rá  Úshipper_emailrã   rä   r  r–   rÒ   Úconversation_id)rZ  )r[   rÑ   Ú
shipper_idrž  rá   rã   rä   r  r–   râ   r  )rÇ   r°  s     rt   r  r  d	  s’   € ó/ð �k‰kØ×)Ñ)Ò>¨q°·±°Ð->Ø3;×3FÒ3F˜×)Ñ)×/Ò/ÈBÙ(¨×)@Ñ)@ÓAÙ*¨8×+DÑ+DÓEØ×)Ñ)Ò/¨RØ—/‘/Ø"×5Ñ5Ó7Ø#×:Ñ:ñ
ð 
rÅ   c                  óh   — t         j                  j                  dddddd«      j                  d«      S )NrÇ   Úshipment__shipperrÈ   rÉ   rÊ   ÚpodÚpod__photos)rH   r©   rÙ   r<  rb   rÅ   rt   Ú_trips_list_querysetr¸  x	  s8   € Ü�<‰<×&Ñ&ØØØØ*ØØó÷ Ñ�}Ó%ð&rÅ   c                 ó‚   — | sy| j                   › d| j                  › �j                  «       }|xs | j                  xs dS )Nr  rÐ   )rß   rà   rÞ   rá   )r„  r  s     rt   Ú_user_display_namerº  ƒ	  s?   € ÙØØ�o‰oÐ˜a §¡Ð/Ð0×6Ñ6Ó8€DØÒ&�4—:‘:Ò& Ð&rÅ   c                 ót  — | j                   j                  xs d| j                  › �}| j                  rt	        | j
                  dd «      nd }|d uxr' |j                  t        j                  j                  k(  }|rd}t        | j
                  «      }n£| j                  r=| j
                  j                  › d| j
                  j                  › �j                  «       nd}|r|}n0|r|j                  r|j                  }nt        | j
                  «      }| j                  rt        | j                   «      nd}| j"                  || j                  r | j                   j$                  j&                  nd|||| j(                  | j+                  «       | j,                  r| j,                  j/                  d«      dœ	S ddœ	S )	Nrà  rÌ   zIndividual DriverrÐ   rÍ   r  r‘  )	r[   rá  r±  Útransporter_displayÚtransporter_is_individualÚdriver_displayr–   rÒ   rÖ   )rÇ   rÑ   rá  r¸   rÜ   rÈ   rÊ  r%   rF  rH  rº  rß   rà   rÞ   rù  r»   rÊ   r[   rž  rá   r–   râ   rÖ   ri   )rè   Úshipment_labelré   rž  r¼  r¾  r  s          rt   Ú_trip_list_row_datarÀ  Š	  sš  € Ø—]‘]×,Ñ,ÒF°!°D×4DÑ4DÐ3EÐ0F€NØHL×H[ÒH[Œg�d×&Ñ&Ð(=¸tÔDÐae€Gà�tÐÒ] × 4Ñ 4Ô8J×8VÑ8V×8]Ñ8]Ñ ]ð ñ Ø1ÐÜ+¨D×,<Ñ,<Ó=‰ð ×"Ò"ð ×Ñ×*Ñ*Ð+¨1¨T×-=Ñ-=×-GÑ-GÐ,HÐI×OÑOÔQàð 	ñ
 Ø"&ÑÙ˜×-Ò-Ø")×"6Ñ"6Ñä"4°T×5EÑ5EÓ"FÐà8<×8OÒ8OÔ˜t×3Ñ3Ô4ÐUZð 	ð
 �g‰gØ%Ø8<×8HÒ8H˜Ÿ™×.Ñ.×4Ò4ÈbØ2Ø%9Ø(Ø—+‘+Ø×1Ñ1Ó3ØDHÇOÂO�d—o‘o×.Ñ.Ð/?Ó@ñ
ð 
ð Z\ñ
ð 
rÅ   c                 ó  — t        | «      } | D �cg c]  }|j                  ‘Œ }}|D �ci c]  }|g “Œ }}|rct        j                  j	                  |¬«      j                  d«      D ]1  }||j                     }t        |«      dk  sŒ!|j                  |«       Œ3 |D �ci c]  }|g “Œ }}|rrt        j                  j	                  |¬«      j                  d«      j                  d«      D ]1  }||j                     }t        |«      dk  sŒ!|j                  |«       Œ3 g }	| D ]Î  }|j                  |j                  g «      }
|	j                  ||j                  |j                  g «      |
t        |
«      D �cg c]G  }t        |j                  «      t        |j                  «      |j                   j#                  d«      dœ‘ŒI c}d	|j                  › �t%        d
|j                  › �¬«      dœ«       ŒÐ |	S c c}w c c}w c c}w c c}w )N)Útrip_id__inú-recorded_atr  Úperformed_byr  é   ú%Y-%m-%d %H:%M:%S)r×   rØ   Úrecorded_atztrip-locations-data-Úo)r  )rè   Úrecent_actionsÚ	locationsÚlocations_map_dataÚlocations_script_idÚoverride_form)r	  r[   rI   r©   rd   r®   Útrip_idr`  rh   r@   rÙ   rj   Úreversedr¬   r×   rØ   rÇ  ri   rR   )rç   rè   Útrip_idsrÎ  Úlocations_by_tripÚlocationrZ   Úactions_by_tripÚactionÚ	trip_rowsrÊ  Úlocs               rt   Ú_build_trip_row_contextr×  ±	  sï  € Ü�‹K€EØ$)Ö*˜D�—“Ð*€HÐ*à4<Ö=¨˜ "™Ð=ÐÐ=ÙÜ$×,Ñ,×3Ñ3ÀÐ3ÓI×RÑRÐSaÓbò 	(ˆHØ& x×'7Ñ'7Ñ8ˆFÜ�6‹{˜RÓØ—‘˜hÕ'ð	(ð
 3;Ö; w�w ‘{Ð;€OÐ;Ùä×#Ñ#×*Ñ*°xÐ*Ó@ß‰^˜NÓ+ß‰X�mÓ$ò	&ˆFð
 % V§^¡^Ñ4ˆFÜ�6‹{˜RÓØ—‘˜fÕ%ð	&ð €IØò ˆØ%×)Ñ)¨$¯'©'°2Ó6ˆ	Ø×ÑØØ-×1Ñ1°$·'±'¸2Ó>Ø"ô $ IÓ.ö#ð ô	 ! §¡›>Ü  §¡›>Ø#&§?¡?×#;Ñ#;Ð<OÓ#Póò#ð &:¸$¿'¹'¸Ð#CÜ6ÀÀ$Ç'Á'À¸mÔLñ
õ 	ðð" ÐùòM +ùâ=ùò <ùò$#s   �G5©
G:Â
G?Å6AHc                 ó–   — t        «       j                  d«      }t        | «      rt        | |t        g d¢g d¢dg¬«      S t        | d«      S )NrM  )
Úshipment__unique_idÚshipment__shipper__emailÚtransporter__emailÚtransporter__first_nameÚtransporter__last_nameÚ.transporter__transporter_profile__company_namere  rf  rg  r–   )rÙ  rÚ  rÞ  rf  r–   rÖ   Nrå  zcore/trips.html)r¸  r®   r<   r=   rÀ  r   ré  s     rt   Úadmin_tripsrß  Ü	  sT   € ä"Ó$×-Ñ-¨eÓ4€GÜ˜WÔ%Ü+ØØÜòòð !˜'ô3
ð 	
ô6 �'Ð,Ó-Ð-rÅ   c                 óh   — t        t        «       |¬«      }t        |g«      }t        | dd|d   i«      S )Nr7  zcore/includes/trip_modals.htmlrp   r   )r   r¸  r×  r   )r‹  rÎ  rè   ro   s       rt   Úadmin_trip_modalsrá  þ	  s9   € ô Ô1Ó3¸Ô@€DÜ" D 6Ó*€DÜ�'Ð;¸eÀTÈ!ÁWÐ=MÓNÐNrÅ   c                 ó¢  — t        t        j                  j                  dddddd«      |¬«      }|j                  }|j
                  }|rt        |dd «      nd }|r/|j                  r#t        |j                  «      j                  «       nd }d }d }|sd	}nd|r`	 t        |«      }	|	j                  d
«      }
|	j                  d«      }|
�-|�+t        |
«      t        |«      }}||t        ||«      xs ddœ}nd}nd}d }|j                  �l|j                   �`t        |j                  «      }t        |j                   «      }|j"                  xs dj                  «       }|st        ||«      xs d}|||dœ}d }|j$                  �l|j&                  �`t        |j$                  «      }t        |j&                  «      }|j(                  xs dj                  «       }|st        ||«      xs d}|||dœ}|j*                  }d}g }|r"|r |t,        v r|rd}||ddœ||ddœg}n||ddœg}t/        j0                  dd«      xs dj                  «       j3                  d«      }|r	|r|› d|› �nd }|ro|j4                  › d|j6                  › �j                  «       xs |j8                  }|j:                  ||j8                  t        t        |dd «      dd«      xs d||dœ}n	d dddd d dœ}t=        |«      }|rËt?        |d«      r|jA                  «       ng }|j:                  |jB                  |jD                  xs	 |r|d   nd||jF                  |jH                  |jJ                  |jL                  |jN                  xs dj                  «       |jP                  xs dj                  «       |jR                  |jT                  dœ} nd } |||| |||||||rtW        jX                  |«      nd |rtW        jX                  |«      nd |rtW        jX                  |«      nd tW        jX                  |«      d!œ}!t[        | d"|!«      S # t        $ r}t        |«      }Y d }~�ŒPd }~ww xY w)#NrÇ   rµ  rÈ   rÊ   Úassigned_driver__rolerc  r7  rÌ   z#No driver is assigned to this trip.rÎ   rÏ   rÍ   )r×   rØ   Úaddressz,Traccar returned invalid driver coordinates.z2Driver tracking is not configured (missing tc_id).Údriver_to_destinationÚdriver_to_pickup_to_destinationÚdriver_to_pickup)ÚfromÚtor  Úpickup_to_destinationÚTRACCAR_URLú/z/#/devices/rÐ   r¨  r©  )r[   r  rá   r©  rÝ   Útraccar_device_url_hintr  r  r   )r[   r  r  r×  rÜ  Úmax_length_mÚmax_width_mÚmax_height_mÚspecial_featuresÚ
avatar_urlr  r  Únull)rè   rÇ   Údriver_infoÚvehicle_infor–   Údriver_positionrÔ   rå  Útracking_modeÚtraccar_errorÚdriver_jsonÚpickup_jsonÚdestination_jsonÚroute_legs_jsonzcore/public_trip_tracking.html).r   rH   r©   rÙ   rÇ   rÊ   rÜ   rÝ   r¯   rÞ   r-   rj   r¬   r?   rJ  Ú
pickup_latÚ
pickup_lonrã   Údelivery_latÚdelivery_lonrä   r–   ÚPRE_PICKUP_STATUSESÚosÚgetenvÚrstriprß   rà   rá   r[   r,   rK  r  r  r  rÜ  rî  rï  rð  rñ  rò  r  r  rT  rè  r   )"r‹  rÎ  rè   rÇ   rë   ré   rÝ   rö  rø  rê   r×   rØ   Úlat_fÚlon_frd  rÔ   rý  rþ  rã   rå  Údest_latÚdest_lonÚdest_addressr–   r÷  Ú
route_legsÚbaserí  rÓ   rô  rk  rm  rõ  Úcontexts"                                     rt   Úpublic_trip_trackingr  
  ss  € ÜÜ�‰×#Ñ#ØØØØØ#Ø2ó	
ð ô
€Dð �}‰}€Hà×!Ñ!€FÙ>DŒg�fÐ3°TÔ:È$€GÙ*1°g·m²mŒC�—‘Ó×$Ñ$Ô&È€Eà€OØ€MÙØ=‰Ù	ð	%Ü,¨UÓ3ˆCØ—'‘'˜*Ó%ˆCØ—'‘'˜+Ó&ˆCØˆ 3 ?Ü$ S›z¬5°«:�u�à Ø Ü6°u¸eÓDÒJÈñ#‘ð !O�øð Mˆà€FØ×ÑÐ&¨8×+>Ñ+>Ð+JÜ˜8×.Ñ.Ó/ˆ
Ü˜8×.Ñ.Ó/ˆ
Ø"×1Ñ1Ò7°R×>Ñ>Ó@ˆÙÜ4°ZÀÓLÒRÐPRˆNàØØ%ñ
ˆð
 €KØ×ÑÐ(¨X×-BÑ-BÐ-NÜ˜×.Ñ.Ó/ˆÜ˜×.Ñ.Ó/ˆØ ×1Ñ1Ò7°R×>Ñ>Ó@ˆÙÜ2°8¸XÓFÒLÈ"ˆLàØØ#ñ
ˆð �[‰[€FØ+€MØ€JÙ™;ØÔ(Ñ(©VØ=ˆMà(°Ð@RÑSØ {Ð<SÑTð‰Jð )°ÐE\Ñ]ðˆJô �I‰I�m RÓ(Ò.¨B×5Ñ5Ó7×>Ñ>¸sÓC€DÙ=AÁe   k°%°Ñ9ÐQUÐÙØ×*Ñ*Ð+¨1¨V×-=Ñ-=Ð,>Ð?×EÑEÓGÒWÈ6Ï<É<ˆà—)‘)ØØ—\‘\ÜœW V¨V°TÓ:¸GÀRÓHÒNÈBØØ'>ñ
‰ð ØØØØØ'+ñ
ˆô ,¨DÓ1€GÙÜ'.¨w¸Ô'D�×!Ñ!Ô#È"ˆà—*‘*Ø#*×#>Ñ#>Ø#×0Ñ0ÒOÁ°U¸1²XÈBØ"Ø$×2Ñ2Ø#×0Ñ0Ø"×.Ñ.Ø#×0Ñ0Ø!(×!9Ñ!9Ò!?¸R× FÑ FÓ HØ"×-Ñ-Ò3°×:Ñ:Ó<Ø"×.Ñ.Ø ×*Ñ*ñ
‰ð ˆð ØØ"Ø$ØØ*ØØ"Ø&Ø&Ù6E”t—z‘z /Ô2È6Ù-3”t—z‘z &Ô)¸Ù7BœDŸJ™J {Ô3ÈÜŸ:™: jÓ1ñ€Gô  �'Ð;¸WÓEÐEøôO ò 	%Ü ›HŽMûð	%ús   ÂAP/ Ð/	QÐ8Q	Ñ	Qc                 ó\  — t        t        j                  j                  dddd«      |¬«      }t        j                  j                  |¬«      j                  «       }t        j                  j                  |¬«      j                  d«      j                  d«      d d	 }t        | d
|||dœ«      S )NrÇ   rµ  rÈ   Úaccepted_bidr7  ©rè   rÄ  r  rÅ  zcore/trip_detail.html)rè   Úhas_podrÉ  )
r   rH   r©   rÙ   rE   rd   ra  r@   r®   r   )r‹  rÎ  rè   r  rÉ  s        rt   Úadmin_trip_detailr  ”
  s£   € äÜ�‰×#Ñ# JÐ0CÀ]ÐTbÓcØô€Dô ×%Ñ%×,Ñ,°$Ð,Ó7×>Ñ>Ó@€GÜ$×,Ñ,×3Ñ3¸Ð3Ó>×MÑMÈnÓ]×fÑfÐgtÓuÐvyÐwyÐz€NÜØØØ '¸^ÑLóð rÅ   c                 ó  — t        t        |¬«      }t        j                  j	                  |¬«      j                  d«      }t        |d«      }|j                  | j                  j                  d«      xs d«      }t        | d||dœ«      S )	Nr7  r  rÃ  r  rà  rM   zcore/trip_locations.html)rè   Úpage_obj)r   rH   rI   r©   rd   r®   r	   Úget_pager  rj   r   )r‹  rÎ  rè   rk   Ú	paginatorrà  s         rt   Úadmin_trip_locationsr  £
  sv   € äœT gÔ.€DÜ	×	Ñ	×	$Ñ	$¨$Ð	$Ó	/×	8Ñ	8¸Ó	H€BÜ˜"˜bÓ!€IØ×Ñ˜gŸk™kŸo™o¨fÓ5Ò:¸Ó;€DÜ�'Ð5ÀÐRVÑ7WÓXÐXrÅ   c                 ó˜   — t        t        |¬«      }t        t        j                  j	                  d«      |¬«      }t        | d||dœ«      S )Nr7  Úphotosr  zcore/trip_pod.html)rè   r¶  )r   rH   rE   r©   r<  r   )r‹  rÎ  rè   r¶  s       rt   Úadmin_trip_podr  ¬
  sA   € äœT gÔ.€DÜ
œO×3Ñ3×DÑDÀXÓNÐUYÔ
Z€CÜ�'Ð/¸$ÀsÑ1KÓLÐLrÅ   c           	      ó
  — t        t        j                  j                  d«      |¬«      }t	        | j
                  xs d «      }| j                  dk(  �r•|j                  «       �r„|j                  d   }|j                  d   j                  «       }|j                  }||k(  rt        j                  | d«       �n/t        j                  «       5  ||_
        |j                  ddg¬	«       t!        ||«       t"        j                  j%                  || j&                  |||¬
«       d d d «       t)        |j*                  j,                  |j.                  gdt1        |j2                  «      t1        |j4                  «      t1        |«      ddœdd|› �¬«       t        j6                  | d«       | j8                  j;                  d«      dk(  rt=        d«      S t=        d|j2                  ¬«      S t?        | d||dœ«      S # 1 sw Y   ŒÖxY w)NrÇ   r7  rV  Ú
new_statusÚjustificationzTrip is already in this status.r–   rÖ   rí  )rè   rÄ  Úprevious_statusr  r  ÚTRIP_STATUST)rÎ  rá  r–   Úadmin_overridezTrip update (admin)zTrip status set to )ÚtitleÚbodyz9Trip status updated and shipment synced where applicable.rX  rç   z
core:tripszcore:trip_detail)rÎ  zcore/trip_override.html)rè   r  ) r   rH   r©   rÙ   rR   rV  r^  r  rÿ  rÞ   r–   r   r_  r   r  rð  rò  r@   r  r„  r)   rÇ   r³  r¸   r¯   r[   rá  rõ   r  rj   r   r   )r‹  rÎ  rè   r  r  r  Úprevs          rt   Úadmin_trip_status_overrider$  ³
  s¶  € ô œTŸ\™\×8Ñ8¸ÓDÈÔQ€DÜ$ W§\¡\Ò%9°TÓ:€DØ‡~�~˜Ó D§M¡M¥OØ×&Ñ& |Ñ4ˆ
Ø×)Ñ)¨/Ñ:×@Ñ@ÓBˆØ�{‰{ˆØ�:ÒÜ�N‰N˜7Ð$EÖFä×#Ñ#Ó%ñ 
Ø(�”Ø—	‘	¨°<Ð(@�	ÔAÜ2°4¸ÔDÜ×'Ñ'×.Ñ.ØØ!(§¡Ø$(Ø)Ø"/ð /ô ÷	
ô Ø—‘×)Ñ)¨4×+>Ñ+>Ð?Øä" 4§7¡7›|Ü#& t×'7Ñ'7Ó#8Ü! *›oØ&*ñ	ð ,Ø*¨:¨,Ð7õô ×Ñ˜WÐ&aÔbØ�{‰{�‰˜vÓ&¨'Ò1Ü Ó-Ð-ÜÐ.¸¿¹Ô@Ð@Ü�'Ð4¸tÈTÑ6RÓSÐS÷7
ð 
ús   ÃAG9Ç9Hc                 ó    — t        | dddi«      S )Núcore/admin/section_page.htmlÚ
page_titleÚPricingr  rŠ  s    rt   Úadmin_pricingr)  Ý
  s   € ä�'Ð9¸LÈ)Ð;TÓUÐUrÅ   c           
      ó  — t         j                  j                  t         j                  j                  ¬«      }|j                  t        d«      ¬«      }|d   }|�t        |«      nd}t        | ddd|j                  «       › d	|› d
�dœ«      S )Nr•   rœ   r�   rƒ   rž   r&  zFinancial managementzCaptured payments: z records, total amount ú.)r'  Ú
extra_note)
r0   r©   rd   rª   r«   rC  r   r¯   r   rø   )r‹  ÚcapturedÚaggrƒ   Ú	total_strs        rt   Úadmin_financialr0  â
  sŒ   € ä�‰×%Ñ%¬W¯^©^×-DÑ-DÐ%ÓE€HØ
×
Ñ
¤3 x£=Ð
Ó
1€CØ�‰L€EØ#Ð/”�E”
°S€IÜØØ&à0Ø/°·±Ó0@Ð/AÐAXÐYbÐXcÐcdÐeñ	
óð rÅ   c                 ó    — t        | dddi«      S )Nr&  r'  zInvoice & accountingr  rŠ  s    rt   Úadmin_invoices_accountingr2  ò
  s   € ä�'Ð9¸LÐJ`Ð;aÓbÐbrÅ   c                 ó    — t        | dddi«      S )Nr&  r'  zTicket managementr  rŠ  s    rt   Úadmin_ticketsr4  ÷
  s   € ä�'Ð9¸LÐJ]Ð;^Ó_Ð_rÅ   c                  óz   — t         j                  j                  ddddddddd	d
ddd«      j                  ddd«      S )NrÇ   rµ  rž  Úshipper__roleÚshipper__shipper_profilerÈ   Útransporter__rolerÉ   rè   Útrip__shipmentÚtrip__assigned_driverÚtrip__assigned_driver__roleÚ*trip__assigned_driver__transporter_profiler   Úmessages__senderÚmessages__sender__role)rB   r©   rÙ   r<  rb   rÅ   rt   Ú_conversations_list_querysetr?  þ
  sX   € ä×Ñ×+Ñ+ØØØØØ&ØØØ.ØØØ#Ø)Ø8ó	
÷ 
Ñ	ØØØ$ó

ð!rÅ   c                 ó
  — | sy|j                   r| j                  |j                   k(  ry|j                  r:|j                  j                  r$| j                  |j                  j                  k(  ry|j
                  rQ| j                  |j
                  k(  r8t        | dd«      }|r(|j                  t        j                  j                  k(  ryyt        | dd«      }|r(t        |d«      r|j                  «       S |j                  S y	)
zGDetermine sender display role within the specific conversation context.ÚSystemÚShipperÚDriverrÌ   NÚTransporterr¨  r°  rD  )r³  r[   rÎ  rè   r»   r¸   rÜ   rÊ  r%   rF  rH  rK  r°  r¨  )r„  Úconversationr…  Úrole_objs       rt   Ú_conversation_sender_role_labelrG    sÚ   € áØØ×Ò 4§7¡7¨l×.EÑ.EÒ#EØØ×Ò × 1Ñ 1× DÒ DÈÏÉÐT`×TeÑTe×TxÑTxÒIxØØ×"Ò" t§w¡w°,×2MÑ2MÒ'MÜ�TÐ0°$Ó7ˆÙ�"—/‘/Ô%7×%CÑ%C×%JÑ%JÒJØØä�t˜V TÓ*€HÙÜ.5°hÐ@RÔ.Sˆx×(Ñ(Ó*ÐfÐYa×YfÑYfÐfØrÅ   c                 óà  — | j                   r'| j                  j                  xs d| j                   › �nd}| j                   r| j                  j                  nd}| j                   r| j                  j                  nd}| j                   r| j                  j
                  nd}t        | j                  «      }t        | j                  «      }| j                  r5| j                  j                  rt        | j                  j                  «      nd }t        | j                  j                  «       «      }t!        |«      }	|r|d   nd }
d}d}d}|
r‹|
j"                  }|
j"                  t$        j&                  j(                  k(  rd}n:|
j*                  xs dj-                  «       }|r|d d t!        |«      dkD  rdndz   nd	}|
j.                  j1                  d
«      }| j                  r| j                  j2                  nd}| j                  r| j                  j5                  «       nd}i d| j6                  “d| j                   “d|“d|“d|“d|“d| j8                  “d| j                  r| j                  j:                  nd“d|“d| j<                  “d| j                  r| j                  j:                  nd“d|“d|“d| j                  “d|“d|“d|	“|||| j.                  j1                  d
«      dœ¥S )Nrà  r  rÍ   éÿÿÿÿÚTEXTu   ðŸŽ¤ Voice recordingéP   r¬  zEmpty messager‘  ÚPRE_TRIPúPre-Trip / Biddingr[   rá  r¿  rÔ   rÕ   Úcargor³  r±  Úshipper_displayr¸   Útransporter_emailr¼  Úassigned_driver_displayrÎ  Útrip_statusÚtrip_status_displayÚmessages_count)Úlast_message_previewÚlast_message_typeÚlast_message_timer›   )rá  rÇ   rÑ   rã   rä   r  rº  rž  rÈ   rÎ  rè   r»   rÊ   r	  r   rE  r`  Úmessage_typerD   ÚMessageTypeÚVOICEr®  rÞ   r›   ri   r–   râ   r[   r³  rá   r¸   )r]   r¿  rÔ   rÕ   rN  rO  r¼  rQ  rg  rT  Úlast_msgrU  rW  rV  r®  rR  rS  s                    rt   Ú_conversation_list_row_datar\  +  sÚ  € ØDEÇMÂM�Q—Z‘Z×)Ñ)Ò@¨q°·±°Ñ-@ÐW\€NØ*+¯-ª-ˆQ�Z‰Z×&Ò&¸R€FØ./¯mªmˆq�z‰z×*Ò*À€HØ%&§]¢]ˆA�J‰J×!Ò!¸€Eä(¨¯©Ó3€OÜ,¨Q¯]©]Ó;ÐØMNÏYÊYÐ[\×[aÑ[a×[tÒ[tÔ0°·±×1GÑ1GÔHÐ{Ðô �—
‘
—‘Ó Ó!€DÜ˜“Y€NÙˆt�BŠx T€Hà ÐØÐØÐÙØ$×1Ñ1ÐØ× Ñ ¤G×$7Ñ$7×$=Ñ$=Ò=Ø#9Ñ à—M‘MÒ' R×.Ñ.Ó0ˆDÙTX 4¨¨ 9¼¸T»ÀRº±ÈRÒ#PÐ^mÐ Ø$×/Ñ/×8Ñ8Ð9IÓJÐà#$§9¢9�!—&‘&—-’-°*€KØ9:¿º˜!Ÿ&™&×3Ñ3Ô5ÐH\ÐðØˆa�d‰dðà�q—}‘}ðð 	˜.ðð 	�&ð	ð
 	�Hðð 	�ðð 	�a—l‘lðð 	¨A¯IªI˜Ÿ™Ÿš¸2ðð 	˜?ðð 	˜!×*Ñ*ðð 	°A·M²M˜QŸ]™]×0Ò0Àrðð 	Ð2ðð 	"Ð#:ðð 	�1—9‘9ðð 	�{ðð  	Ð2ð!ð" 	˜.ð#ð$ !5Ø.Ø.Ø—l‘l×+Ñ+Ð,<Ó=ò+ð rÅ   c           	      ó  — t        «       j                  d«      }| j                  j                  d«      xs dj	                  «       }|r*|dk(  r|j                  d¬«      }n|j                  |¬«      }| j                  j                  d«      xs dj	                  «       }|r2	 |j                  t        t        |«      ¬	«      t        |¬
«      z  «      }t        | «      rt        | |t        g d¢g d¢dg¬«      S dgt        j                  j                  ¢}t!        | d||t"        j$                  j'                  «       t(        j$                  j'                  «       dœ«      S # t        t        f$ r |j                  |¬
«      }Y Œ¯w xY w)Nr  r–   rÍ   rL  T)Útrip__isnull)Útrip__statusrá  r
  )Úshipment__unique_id__iexact)rÙ  Úshipment__pickup_addressÚshipment__delivery_addressÚshipment__cargo_typer  Úshipper__first_nameÚshipper__last_namerÛ  rÜ  rÝ  rÞ  Útrip__assigned_driver__emailÚ!trip__assigned_driver__first_nameÚ trip__assigned_driver__last_nameÚmessages__text)r[   rÙ  r  rÛ  r_  r›   Nrå  )rL  rM  zcore/conversations.html)Útrip_status_choicesr  Útotal_conversationsÚtotal_messages)r?  r®   r  rj   rÞ   rd   r   r?  r  Ú	TypeErrorr<   r=   r\  rH   rª   rv  r   rB   r©   rø   rD   )r‹  rê  r  Úshipment_filterrj  s        rt   Úadmin_conversationsro  b  sk  € ä*Ó,×5Ñ5°mÓD€Gà—[‘[—_‘_ XÓ.Ò4°"×;Ñ;Ó=€MÙØ˜JÒ&Ø—n‘n°$�nÓ7‰Gà—n‘n°-�nÓ@ˆGà—{‘{—‘ }Ó5Ò;¸×BÑBÓD€OÙð	RØ—n‘nÜœc /Ó2Ô3´aÐTcÔ6dÑdóˆGô ˜WÔ%Ü+ØØÜ'òò"ð )˜/ô=
ð 	
ðD 	+ðä	�‰×	Ñ	ðÐô ØØ!à#6Ø*Ü#/×#7Ñ#7×#=Ñ#=Ó#?Ü%Ÿo™o×3Ñ3Ó5ñ		
ó	ð 	øôS œIÐ&ò 	RØ—n‘nÀ�nÓQŠGð	Rús   Â#1E  Å !FÆFc                 ó–  — t        t        «       |¬«      }|j                  j                  dddd«      j	                  d«      }g }|D �]  }t        |j                  |«      }|j                  xr |j                  |j                  k(  }|j                  r|j                  j                  nd }|j                  |j                  |j                  t        |j                  «      |j                  r|j                  j                  nd|||j                  |j                   ||j"                  |j"                  j%                  d«      d	œ«       �Œ t'        | d
||j(                  |j*                  |j,                  |j.                  |j*                  r,|j*                  j0                  r|j*                  j2                  nd |t5        |«      dœ«      S )Nr7  ÚsenderÚsender__roleÚsender__shipper_profileÚsender__transporter_profiler›   rÍ   rÆ  ©r[   Ú	sender_idÚsender_nameÚsender_emailÚsender_roleÚ
is_shipperrX  r®  Ú	voice_urlr›   Úcreated_at_displayz%core/includes/conversation_modal.html)rE  rÇ   rè   rž  rÈ   rÊ   Úchat_messagesrT  )r   r?  r   rÙ   r®   rG  rq  r³  rv  Ú
voice_fileÚurlrh   r[   rº  rá   rX  r®  r›   ri   r   rÇ   rè   rž  rÈ   r»   rÊ   r`  )	r‹  r²  ÚconvÚmessages_qsÚmessage_itemsr’   Ú
role_labelrz  r{  s	            rt   Úadmin_conversation_modalr„  ¨  st  € ô Ô9Ó;ÀÔP€DØ—-‘-×.Ñ.ØØØ!Ø%ó	÷
 �hˆ|Óð ð €MØó ˆÜ4°Q·X±X¸tÓDˆ
Ø—o‘oÒH¨!¯+©+¸¿¹Ñ*Hˆ
Ø()¯ª�A—L‘L×$Ò$¸$ˆ	Ø×ÑØ—$‘$ØŸ™Ü-¨a¯h©hÓ7Ø./¯hªh˜AŸH™HŸNšN¸BØ%Ø$ØŸN™NØ—F‘FØ"ØŸ,™,Ø"#§,¡,×"7Ñ"7Ð8KÓ"Lñ
ö 	ð	ô$ ØØ/à ØŸ™Ø—I‘IØ—|‘|Ø×+Ñ+Ø=A¿YºYÈ4Ï9É9×KgÒKg˜tŸy™y×8Ò8ÐnrØ*Ü! -Ó0ñ		
óð rÅ   c                 ój  — t        t        «       |¬«      }| j                  j                  d«      }|j                  j                  dddd«      j                  d«      }|r	 |j                  t        |«      ¬«      }g }|D ]ù  }t        |j                  |«      }|j                  xr |j                  |j                  k(  }|j                  r|j                  j                   nd }	|j#                  |j$                  |j                  t'        |j                  «      |j                  r|j                  j(                  nd	|||j*                  |j,                  xs d	|	|j.                  j1                  d
«      dœ
«       Œû t3        d|j$                  |t5        |«      dœ«      S # t        t        f$ r Y �Œ5w xY w)Nr7  Úafter_idrq  rr  rs  rt  r›   )Úid__gtrÍ   rÆ  )
r[   rv  rw  rx  ry  rz  rX  r®  r{  r|  éÈ   )Ústatus_coder²  Únew_messagesÚ	total_new)r   r?  r  rj   r   rÙ   r®   rd   r?  r  rm  rG  rq  r³  rv  r~  r  rh   r[   rº  rá   rX  r®  r›   ri   r   r`  )
r‹  r²  r€  r†  r�  r  r’   rƒ  rz  r{  s
             rt   Úadmin_conversation_syncrŒ  Ö  s{  € ô Ô9Ó;ÀÔP€DØ�{‰{�‰˜zÓ*€HØ—-‘-×.Ñ.ØØØ!Ø%ó	÷
 �hˆ|Óð ñ ð	Ø%×,Ñ,´C¸³MÐ,ÓBˆKð €EØò ˆÜ4°Q·X±X¸tÓDˆ
Ø—o‘oÒH¨!¯+©+¸¿¹Ñ*Hˆ
Ø()¯ª�A—L‘L×$Ò$¸$ˆ	Ø�‰Ø—$‘$ØŸ™Ü-¨a¯h©hÓ7Ø./¯hªh˜AŸH™HŸNšN¸BØ%Ø$ØŸN™NØ—F‘F’L˜bØ"Ø"#§,¡,×"7Ñ"7Ð8KÓ"Lñ
õ 	ð	ô" ØØŸ7™7ØÜ˜“Zñ	ó ð øô+ œIÐ&ò 	Úð	ús   Á!F ÆF2Æ1F2c                 ó&  — t        t        «       |¬«      }|j                  j                  dddd«      j	                  d«      }g }|D �]  }t        |j                  |«      }|j                  xr |j                  |j                  k(  }|j                  r|j                  j                  nd }|j                  |j                  |j                  t        |j                  «      |j                  r|j                  j                  nd|||j                  |j                   ||j"                  |j"                  j%                  d«      d	œ«       �Œ d }	|j&                  r-|j(                  j*                  r|j(                  j*                  }	nj|j,                  r^|j.                  rRt0        j2                  j5                  |j,                  |j.                  ¬
«      j	                  d«      j7                  «       }	t9        | d||j:                  |j(                  |	|j<                  |j>                  |j(                  r,|j(                  j@                  r|j(                  jB                  nd |tE        |«      tG        jH                  «       j%                  d«      dœ
«      S )Nr7  rq  rr  rs  rt  r›   rÍ   ú%Y-%m-%d %H:%M:%S UTCru  )rá  r¸   r  zcore/conversation_detail.html)
rE  rÇ   rè   Úbidrž  rÈ   rÊ   r}  rT  Úgenerated_at)%r   r?  r   rÙ   r®   rG  rq  r³  rv  r~  r  rh   r[   rº  rá   rX  r®  r›   ri   rÎ  rè   r  rá  r¸   rA   r©   rd   Úfirstr   rÇ   rž  rÈ   r»   rÊ   r`  r   r‰   )
r‹  r²  r€  r�  r‚  r’   rƒ  rz  r{  r�  s
             rt   Úadmin_conversation_detailr’    s  € äÔ9Ó;ÀÔP€DØ—-‘-×.Ñ.ØØØ!Ø%ó	÷
 �hˆ|Óð ð €MØó ˆÜ4°Q·X±X¸tÓDˆ
Ø—o‘oÒH¨!¯+©+¸¿¹Ñ*Hˆ
Ø()¯ª�A—L‘L×$Ò$¸$ˆ	Ø×ÑØ—$‘$ØŸ™Ü-¨a¯h©hÓ7Ø./¯hªh˜AŸH™HŸNšN¸BØ%Ø$ØŸN™NØ—F‘FØ"ØŸ,™,Ø"#§,¡,×"7Ñ"7Ð8OÓ"Pñ
ö 	ð	ð& €CØ‡|‚|˜Ÿ	™	×.Ò.Ø�i‰i×$Ñ$‰Ø	×	Ò	˜d×1Ò1Ü�k‰k× Ñ ¨T×-=Ñ-=Èd×NaÑNaÐ Ób×kÑkÐlyÓz÷  Añ  Aó  CˆäØØ'à ØŸ™Ø—I‘IØØ—|‘|Ø×+Ñ+Ø=A¿YºYÈ4Ï9É9×KgÒKg˜tŸy™y×8Ò8ÐnrØ*Ü! -Ó0Ü$ŸL™L›N×3Ñ3Ð4KÓLñ	
óð rÅ   c                 ó
  — t        t        «       |¬«      }|j                  j                  dddd«      j	                  d«      }| j
                  j                  d«      xs dj                  «       j                  «       }t        j                  «       j                  d	«      }g }t        |d
¬«      D ]ú  \  }}t        |j                  |«      }	|j                  r;t!        |j                  d«      r%| j#                  |j                  j$                  «      nd }
|j'                  ||j(                  |j*                  j                  d	«      |j,                  t/        |j                  «      |j                  r|j                  j0                  nd|	|j2                  |j4                  xs d|
dœ
«       Œü |dk(  �rÌ|j6                  rt9        |j6                  dd «      nd }|r|j:                  r|j:                  nd }d|j(                  › �||j(                  |j*                  j                  d	«      |j<                  r½|j>                  |j<                  r|j<                  j@                  nd |j<                  r|j<                  jB                  nd |j<                  r|j<                  jD                  nd |j<                  r|j<                  jF                  nd |j<                  r|j<                  jH                  nd dœnd |jJ                  r1|jL                  |jJ                  r|jJ                  jH                  nd dœnd |jN                  rE|jP                  |jN                  r|jN                  j0                  ndt/        |jN                  «      dœnd |j6                  rF|jR                  |j6                  r|j6                  j0                  ndt/        |j6                  «      |dœnd |jJ                  rk|jJ                  jT                  rU|jJ                  jT                  |jJ                  jV                  j0                  t/        |jJ                  jV                  «      dœnd tY        |«      |dœ}t[        |ddi¬«      }d|j(                  › d�|d<   |S |j<                  r,|j<                  j@                  r|j<                  j@                  nd|j>                  › �}|j<                  r|j<                  jD                  nd}|j<                  r|j<                  jF                  nd}|j<                  r|j<                  jB                  nd}|j<                  r|j<                  j\                  nd}|jJ                  r|jJ                  j_                  «       nd}|jN                  r/t/        |jN                  «      › d |jN                  j0                  › d!�nd}|j6                  rt9        |j6                  dd «      nd }|r|j:                  rd"|j:                  › d#�nd}|j6                  r1t/        |j6                  «      › |› d |j6                  j0                  › d!�nd}|jJ                  rY|jJ                  jV                  rCt/        |jJ                  jV                  «      › d |jJ                  jV                  j0                  › d!�nd$}d%d&d%d'|j(                  › �d(|› d)|› d*|› d!�d+|› d,|› �d-|› d.|jL                  xs d/› d!�d0|› �d1|› �d2|› �d3|› �d4tY        |«      › �d%d5d%g}|D ]™  }|j'                  d6|d7   › d8|d9   › d:|d;   › d"|d<   › d=|d>   › d?�«       |j'                  d@|dA   › �«       |dA   dBk(  r|j'                  dC|dD   xs dE› �«       |dF   r|j'                  dG|dF   › �«       |j'                  dH«       Œ› |j'                  d%«       |j'                  dI«       |j'                  d%«       dJja                  |«      }tc        |dK¬L«      }d|j(                  › dM�|d<   |S )NNr7  rq  rr  rs  rt  r›   rS  ÚtxtrŽ  rM   )rn   r  rÍ   )
Úindexr[   Ú	timestamprv  rw  rx  ry  Útyper®  r{  rT  rÌ   zCONV-)r[   rÑ   r  rã   rä   r–   )r[   r–   )r[   rá   r  )r[   rá   r  rù  )Údispute_evidence_caser�  r²  r›   rÇ   rè   rž  rÈ   rÊ   rl  r   Úindenté   )Újson_dumps_paramsz.attachment; filename="dispute_transcript_conv_z.json"zContent-Dispositionrà  r  rM  z (r9  z [ú]zNone assignedzP================================================================================z7TRUCK ME - DISPUTE COMMUNICATION AUDIT LOG & TRANSCRIPTzCase / Thread ID : #zShipment         : z	 (Cargo: z
, Weight: zRoute            : z -> zTrip Lifecycle   : z (Trip ID: #zN/AzShipper          : zTransporter      : zAssigned Driver  : zExport Date      : zTotal Messages   : zCHRONOLOGICAL MESSAGES TIMELINEú[r•  z] r–  z | SENDER: rw  ry  z] <rx  Ú>z
    TYPE: r—  rZ  z    AUDIO RECORDING: r{  zVoice note attachedr®  z    MESSAGE: zP--------------------------------------------------------------------------------z)END OF TRANSCRIPT - OFFICIAL AUDIT RECORDÚ
ztext/plain; charset=utf-8)Úcontent_typez.txt")2r   r?  r   rÙ   r®   r  rj   r  rÞ   r   r‰   ri   Ú	enumeraterG  rq  r~  rK  Úbuild_absolute_urir  rh   r[   r›   rv  rº  rá   rX  r®  rÈ   rÜ   rù  rÇ   rá  rÑ   r  rã   rä   r–   rè   rÎ  rž  r³  r¸   r»   rÊ   r`  r   r  râ   rL  r   )r‹  r²  r€  r�  ÚfmtÚgenerated_at_strÚmsg_listÚidxr’   rƒ  r{  r…  Útransporter_companyr¥  ÚrespÚshipment_uniquerÔ   rÕ   rN  r  Útrip_status_lblÚshipper_lblÚtransporter_comp_strÚtransporter_lblÚ
driver_lblÚlinesrá  Úcontents                               rt   Úadmin_conversation_exportr±  8  sZ  € äÔ9Ó;ÀÔP€DØ—-‘-×.Ñ.ØØØ!Ø%ó	÷
 �hˆ|Óð ð �;‰;�?‰?˜8Ó$Ò-¨×
4Ñ
4Ó
6×
<Ñ
<Ó
>€CÜ—|‘|“~×.Ñ.Ð/FÓGÐð €HÜ˜K¨qÔ1ò ‰ˆˆQÜ4°Q·X±X¸tÓDˆ
ØEFÇ\Â\ÔV]Ð^_×^jÑ^jÐlqÔVr�G×.Ñ.¨q¯|©|×/?Ñ/?Ô@Ðy}ˆ	Ø�‰ØØ—$‘$ØŸ™×.Ñ.Ð/FÓGØŸ™Ü-¨a¯h©hÓ7Ø./¯hªh˜AŸH™HŸNšN¸BØ%Ø—N‘NØ—F‘F’L˜bØ"ñ
õ 	ðð  ˆfƒ}ØGK×GWÒGWŒW�T×%Ñ%Ð'<¸dÔCÐ]aˆÙ24¸¿º˜bŸošoÈtÐà',¨T¯W©W¨IÐ%6Ø,Ø#Ÿw™wØŸ/™/×2Ñ2Ð3JÓKð —’ð ×&Ñ&Ø8<¿º˜TŸ]™]×4Ò4È4Ø:>¿-º-˜dŸm™m×6Ò6ÈTØBFÇ-Â- $§-¡-×">Ò">ÐUYØFJÇmÂm D§M¡M×$BÒ$BÐY]Ø26·-²-˜$Ÿ-™-×.Ò.ÀTòð %)ð —’ð —l‘lØ.2¯iªi˜$Ÿ)™)×*Ò*¸Tòð !%ð
 —’ð —o‘oØ/3¯|ª|˜Ÿ™×+Ò+ÀÜ*¨4¯<©<Ó8òð $(ð ×!Ò!ð	 ×)Ñ)Ø37×3CÒ3C˜×)Ñ)×/Ò/ÈÜ*¨4×+;Ñ+;Ó<Ø 3ò	ð
 (,ð
 —)’) §	¡	× <Ò <ð —i‘i×2Ñ2ØŸ™×2Ñ2×8Ñ8Ü*¨4¯9©9×+DÑ+DÓEò ð DHÜ! (›mØ ñE#
ˆôH ˜G¸À!°}ÔEˆØ(VÐW[×W^ÑW^ÐV_Ð_eÐ&fˆÐ"Ñ#Øˆð 37·-²-ÀDÇMÁM×D[ÒD[�d—m‘m×-Ò-ÐdeÐfj×fvÑfvÐewÐbx€OØ-1¯]ª]ˆT�]‰]×)Ò)À€FØ15·²ˆt�}‰}×-Ò-ÀE€HØ(,¯ªˆD�M‰M×$Ò$¸5€EØ%)§]¢]ˆT�]‰]×!Ò!¸€FØ8<¿	º	�d—i‘i×2Ñ2Ô4ÐG[€OØRV×R^ÒR^Ô'¨¯©Ó5Ð6°b¸¿¹×9KÑ9KÐ8LÈAÑNÐdi€KØCG×CSÒCSŒ�×!Ñ!Ð#8¸$Ô	?ÐY]€BÙ79¸b¿oºo˜R §¡Ð0°Ñ2ÐTVÐØtx÷  uEò  uEÔ+¨D×,<Ñ,<Ó=Ð>Ð?SÐ>TÐTVÐW[×WgÑWg×WmÑWmÐVnÐnoÑpð  KP€OØlp×luÒluÐz~÷  {Dñ  {D÷  {Tò  {TÔ& t§y¡y×'@Ñ'@ÓAÐBÀ"ÀTÇYÁY×E^ÑE^×EdÑEdÐDeÐefÑgð  [j€Jð 	ØAØØ
˜tŸw™w˜iÐ(Ø
˜oÐ.¨i¸°w¸jÈÈÐPQÐRØ
˜f˜X T¨(¨Ð4Ø
˜oÐ.¨l¸4¿<¹<Ò;PÈ5Ð:QÐQRÐSØ
˜k˜]Ð+Ø
˜oÐ.Ð/Ø
˜j˜\Ð*Ø
Ð.Ð/Ð0Ø
œc (›m˜_Ð-ØØ)Øð€Eð$ ò ˆØ�‰�q˜˜g™˜ r¨$¨{Ñ*;Ð)<¸KÈÈ]ÑH[ÐG\Ð\^Ð_cÐdqÑ_rÐ^sÐsvÐw{ð  }Kñ  xLð  wMð  MNð  Oô  	PØ�‰�z $ v¡, Ð0Ô1Ø�‰<˜7Ò"Ø�L‰LÐ0°°kÑ1BÒ1[ÐF[Ð0\Ð]Ô^Ø�Š<Ø�L‰L˜=¨¨f©¨Ð7Ô8Ø�‰�XÕðð 
‡L�L�ÔØ	‡L�LÐ<Ô=Ø	‡L�L�Ôà�i‰i˜Ó€GÜ˜Ð.IÔJ€DØ$RÐSW×SZÑSZÐR[Ð[`Ð"a€DÐ	ÑØ€KrÅ   )rŸ   )rw   rŽ  )T)Ni�  )rÍ   )F)õrT  r  r   r   Údecimalr   Údjango.confr   r@  Údjango.contribr   Údjango.contrib.authr   Údjango.core.paginatorr	   Ú	django.dbr
   r   Údjango.httpr   r   Údjango.db.modelsr   r   r   r   r   r   r   Údjango.db.models.functionsr   r   Údjango.shortcutsr   r   r   Údjango.urlsr   Údjango.utilsr   Údjango.views.decorators.httpr   r   Úrest_framework.serializersr   r  Úaccounts.decoratorsr   r    Úaccounts.modelsr!   r"   r#   r$   r%   r&   r'   r(   Ú
api.notifyr)   Úapi.serializersr*   r+   r,   Úapi.traccarr-   r.   Ú	api.viewsr/   Úbilling.modelsr0   Úcore.countriesr1   r2   r3   r4   r5   r6   Úcore.currenciesr7   r8   r9   Úcore.datatablesr:   r;   r<   r=   r>   Úcore.geocodingr?   Úcore.modelsr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   Úcore.freight_importrK   rL   ÚformsrN   rO   rP   rQ   rR   rS   rD  rF  rH  rI  r—  rª   ÚASSIGNEDrA  ÚARRIVED_PICKUPr  rï  Ú	COMPLETEDr½   r­   rP  ru   r„   r“   r´   rÄ   rì   r   rn  rz  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ž  rA  rC  r¢  rÈ   rJ  rU  rj  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  r  r6  rC  rJ  rQ  rY  ra  rh  rl  ro  rr  ru  rw  rz  r>  rP  r…  r=  rŒ  r•  r™  rœ  rž  r§  r©  r  r¸  rº  rÀ  r×  rß  rá  r  r  r  r  r$  r)  r0  r2  r4  r?  rG  r\  ro  r„  rŒ  r’  r±  rb   rÅ   rt   ú<module>rÑ     s˜  ðÛ Û 	ß (Ý å 3Ý #Ý .Ý +ß -ß 2ß M× MÑ Mß <ß @Ñ @Ý Ý !ß KÝ Lç B÷	÷ 	ó 	õ $÷ñ ÷
 MÝ 5Ý "÷÷ ÷ cÑ b÷õ õ 3÷ T÷  T÷  Tñ  Tß V÷÷ ñ Ó€ð ×"Ñ"×)Ñ)Ø×"Ñ"×5Ñ5ðÐ ð 	‡K�K×ÑØ‡K�K×ÑØ‡K�K×ÑðÐ ð Ÿ+™+×,Ñ,¨d¯k©k×.CÑ.CÐDÐ Ù˜&“/€Ø2Ð ò,ó$,ó(,ò44Lònó%òP!òHnòbGòZó
òGógòòóòò"ò"
ò
òò*(ò.òò,òò<Bò6ðr ñ2ó ð2ð Ù�u�gÓñó ó ðð" ñ0ó ð0òòòð ñ0ó ð0ð< Ù�u�gÓñaó ó ðaò4òð ñ4ó ð4ð: Ù�u�gÓñeó ó ðeð Ù�u�gÓñOó ó ðOð2 Ù�u˜f�oÓ&ñ?Jó 'ó ð?JðD Ù�u˜f�oÓ&ñn]ó 'ó ðn]ðb Øñ"ó ó ð"ò&.ò!ò0ò&ð ñ0ó ð0ð: Ù�u�gÓñó ó ðð. ñó ðð( Øñ0"ó ó ð0"ðf Øñ0"ó ó ð0"ðf Øñ"ó ó ð"ñ" ,Ó-Ð òò
òòò"ðJ ñó ðð" Øñ4+ó ó ð4+ðn Øñ6+ó ó ð6+ðr Øñ+ó ó ð+ð" Øñ+ó ó ð+ð> Ù�u˜f�oÓ&ñ
Aó 'ó ð
Að ñ-ó ð-ð` Ù�u�gÓñó ó ðó Aò
Jò#ò< ðF ñ:ó ð:ð@ Ù�u�gÓñó ó ðð& Ù�u˜f�oÓ&ñaó 'ó ðaðD Øñó ó ðð. ñ"1ó ð"1ðJ Ù�u�gÓñ%ó ó ð%ðP Ù�u�gÓñó ó ðò>ð Ù�u�gÓñ%ó ó ð%ð
 Ù�u˜f�oÓ&ñ\ó 'ó ð\òBòòOó'òCòóòBð@ ñó ðð> Ù�u�gÓñó ó ðð" Øñ5*ó ó ð5*ðp Øñó ó ðò4ò(&ò'ò$òN(ðV ñ.ó ð.ðB Ù�u�gÓñOó ó ðOòKFð\ ñó ðð ñYó ðYð ñMó ðMð Ù�u˜f�oÓ&ñ%Tó 'ó ð%TðP ñVó ðVð ñó ðð ñcó ðcð ñ`ó ð`òò2ò(4ðn ñBó ðBðJ Ù�u�gÓñ)ó ó ð)ðX Ù�u�gÓñ'ó ó ð'ðT ñ2ó ð2ðj ñxó ñxrÅ   