Ë
    Ši•jý!  ã                   óˆ  — d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ  e«       ZdZ G d„ dej                   «      Z G d	„ d
ej                   «      Z G d„ dej                   «      Z G d„ dej                   «      Z G d„ dej                   «      Z G d„ dej                   «      Z G d„ dej.                  «      Zy)é    )Úforms)Úget_user_model)ÚValidationError)ÚKYCDocumentÚShipperProfileÚTransporterProfileÚUserRoleÚVehicleDocument)ÚTrip))Ú
INDIVIDUALu   Shipper â€” Individual)ÚBUSINESSu   Shipper â€” Business)ÚDRIVERu   Transporter â€” Driver)ÚFLEET_OWNERu   Transporter â€” Fleet ownerc                   ó’  ‡ — e Zd Z ej                  «       Z ej                  ej                  d¬«      Z ej                  dd¬«      Z	 ej                  dd¬«      Z
 ej                  dd¬«      Z ej                  ej                  j                  dfej                  j                   dfg¬«      Z ej                  d	dd
ez   d¬«      Z ej                  dd¬«      Z ej                  ddd¬«      Z ej,                  dg d¢¬«      Z ej                  ddd¬«      Z ej,                  dg d¢¬«      Zddœˆ fd„
Zd„ Zˆ fd„Zˆ xZS )ÚAdminUserCreateFormé   )ÚwidgetÚ
min_lengthFT©ÚrequiredÚstripÚShipperÚTransporter©ÚchoiceszAccount type))Ú u   â€” (Admin only: leave blank)zERequired for Shipper and Transporter; leave blank when role is Admin.)Úlabelr   r   Ú	help_texté@   )r   r   Ú
max_length©z%Y-%m-%dz%m/%d/%Yz%d/%m/%Y©r   Úinput_formats)Úallow_admin_rolec                ó$  •— || _         t        ‰| �  |i |¤Ž t        j                  j
                  dft        j                  j                  dfg}|r+|j                  t        j                  j                  df«       || j                  d   _
        y )Nr   r   ÚAdminÚrole)r$   ÚsuperÚ__init__r	   ÚRoleÚSHIPPERÚTRANSPORTERÚappendÚADMINÚfieldsr   )Úselfr$   ÚargsÚkwargsÚrolesÚ	__class__s        €ú$/var/www/html/truck-me/core/forms.pyr)   zAdminUserCreateForm.__init__,   su   ø€ Ø 0ˆÔÜ‰Ñ˜$Ð) &Ò)Ü—-‘-×'Ñ'¨Ð3´h·m±m×6OÑ6OÐQ^Ð5_Ð`ˆÙØ�L‰Lœ(Ÿ-™-×-Ñ-¨wÐ7Ô8Ø&+ˆ�‰�FÑÕ#ó    c                 óÎ   — | j                   d   j                  «       j                  «       }t        j                  j                  |¬«      j                  «       rt        d«      ‚|S )NÚemail)Úusernamez&A user with this email already exists.)Úcleaned_datar   ÚlowerÚUserÚobjectsÚfilterÚexistsr   )r0   r8   s     r5   Úclean_emailzAdminUserCreateForm.clean_email4   sS   € Ø×!Ñ! 'Ñ*×0Ñ0Ó2×8Ñ8Ó:ˆÜ�<‰<×Ñ¨ÐÓ.×5Ñ5Ô7Ü!Ð"JÓKÐKØˆr6   c                 ó  •— t         ‰| �  «       }|s|S |j                  d«      }|j                  d«      }t        j                  j
                  t        j                  j                  h}t        j                  j                  t        j                  j                  h}|t        j                  j                  k(  r|S |xs dj                  «       }|s| j                  dd«       |S |t        j                  j                  k(  r||vr| j                  dd«       |t        j                  j                   k(  r||vr| j                  dd«       |t        j                  j                  k(  r�|j                  d«      xs dj                  «       }|j                  d«      xs dj                  «       }|s|s| j                  dd	«       |j                  d
«      r|s| j                  dd«       ||d<   |r|j#                  «       nd|d<   |S )Nr'   Úaccount_typer   zSelect an account type.z+For shipper, choose Individual or Business.z.For transporter, choose Driver or Fleet owner.Únational_id_numberÚpassport_numberz:Provide national ID or passport. At least one is required.Úpassport_expiry_datezBPassport number is required when passport expiry date is provided.)r(   ÚcleanÚgetr   ÚAccountTyper   r   r   r   r   r	   r*   r.   r   Ú	add_errorr+   r,   Úupper)	r0   Údatar'   ÚatÚ
shipper_okÚtransporter_okÚnational_idrD   r4   s	           €r5   rF   zAdminUserCreateForm.clean:   s´  ø€ Ü‰w‰}‹ˆÙØˆKØ�x‰x˜ÓˆØ�X‰X�nÓ%ˆÜ$×0Ñ0×;Ñ;¼^×=WÑ=W×=`Ñ=`Ðaˆ
Ü,×8Ñ8×?Ñ?ÔAS×A_ÑA_×AkÑAkÐlˆØ”8—=‘=×&Ñ&Ò&ØˆKØŠh�B×ÑÓˆÙØ�N‰N˜>Ð+DÔEØˆKØ”8—=‘=×(Ñ(Ò(¨R°zÑ-AØ�N‰N˜>Ð+XÔYØ”8—=‘=×,Ñ,Ò,°¸>Ñ1IØ�N‰N˜>Ð+[Ô\Ø”8—=‘=×(Ñ(Ò(ØŸ8™8Ð$8Ó9Ò?¸R×FÑFÓHˆKØ#Ÿx™xÐ(9Ó:Ò@¸b×GÑGÓIˆOÙ¡Ø—‘Ø(ØPôð �x‰xÐ.Ô/¹Ø—‘Ð0Ð2vÔwØ)4ˆDÐ%Ñ&ÙAP o×&;Ñ&;Ô&=ÐVXˆDÐ"Ñ#Øˆr6   )Ú__name__Ú
__module__Ú__qualname__r   Ú
EmailFieldr8   Ú	CharFieldÚPasswordInputÚpasswordÚ
first_nameÚ	last_nameÚphoneÚChoiceFieldr	   r*   r+   r,   r'   Ú_ACCOUNT_TYPE_CHOICESrB   Úcompany_namerC   Ú	DateFieldÚnational_id_expiry_daterD   rE   r)   r@   rF   Ú__classcell__©r4   s   @r5   r   r      sB  ø„ ØˆE×ÑÓ€EØˆu�‰ e×&9Ñ&9ÀaÔH€HØ �—‘¨%°tÔ<€JØ�—‘¨°dÔ;€IØˆE�O‰O U°$Ô7€EØˆ5×Ñ x§}¡}×'<Ñ'<¸iÐ&HÈ8Ï=É=×KdÑKdÐfsÐJtÐ%uÔv€DØ$�5×$Ñ$ØØØ8Ð;PÑPØYô	€Lð #�5—?‘?¨E¸Ô>€LØ(˜Ÿ™°%¸tÐPRÔSÐØ-˜eŸo™oØÚ:ôÐð &�e—o‘o¨u¸DÈRÔP€OØ*˜5Ÿ?™?ØÚ:ôÐð
 05ö ,ò÷ð r6   r   c                   óÞ  — e Zd Z ej                  d¬«      Z ej                  dej                  d¬«      Z ej                  dd¬«      Z	 ej                  dd¬«      Z
 ej                  d¬«      Z ej                  ej                  j                   ¬«      Z ej                  dd¬«      Z ej                  d¬«      Z ej                  d¬«      Z ej                  d¬«      Zed„ «       Zy	)
ÚAdminUserEditFormF)r   r   )r   r   r   Tr   r   c                 óT  — d }d}	 |j                   j                   }|j                   j                  xs d}|j                  xs dd|j                  xs d|j                  xs d|j                  ||ddddœ
}	 |j                  }|j                  |d<   |j                  |d<   	 |j                  j                  |d<    | |¬«      S # t        j                  $ r t        j                  j
                  }Y Œ¾w xY w# t        j                  $ r Y Œkw xY w# t         j                  $ r Y Œjw xY w)Nr   F)
r8   rV   rW   rX   Ú	is_activer'   rY   Úkyc_verifiedÚcredit_approvedÚdocuments_verifiedre   rf   rg   )Úinitial)r'   rY   r	   ÚDoesNotExistr*   r+   r8   rW   rX   rd   Úshipper_profilere   rf   r   Útransporter_profilerg   r   )ÚclsÚuserr'   rY   rh   Úsps         r5   Úfor_userzAdminUserEditForm.for_userg   s&  € àˆØˆð	)Ø—9‘9—>‘>ˆDØ—I‘I—O‘OÒ) rˆEð
 —Z‘ZÒ% 2ØØŸ/™/Ò/¨RØŸ™Ò-¨2ØŸ™ØØØ!Ø$Ø"'ñ
ˆð	Ø×%Ñ%ˆBØ&(§o¡oˆG�NÑ#Ø)+×);Ñ);ˆGÐ%Ñ&ð	Ø,0×,DÑ,D×,WÑ,WˆGÐ(Ñ)ñ ˜7Ô#Ð#øô3 ×$Ñ$ò 	)Ü—=‘=×(Ñ(ŠDð	)ûô& ×*Ñ*ò 	Ùð	ûô "×.Ñ.ò 	Ùð	ús5   †0C Á8*C8 Â#D Ã-C5Ã4C5Ã8DÄDÄD'Ä&D'N)rP   rQ   rR   r   rS   r8   rT   rU   rV   rW   rX   ÚBooleanFieldrd   rZ   r	   r*   r   r'   rY   re   rf   rg   Úclassmethodro   © r6   r5   rb   rb   [   sÜ   „ ØˆE×Ñ eÔ,€EØˆu�‰¨°e×6IÑ6IÐVWÔX€HØ �—‘¨%°tÔ<€JØ�—‘¨°dÔ;€IØ"�×"Ñ"¨EÔ2€IØˆ5×Ñ X§]¡]×%:Ñ%:Ô;€DØˆE�O‰O U°$Ô7€EØ%�5×%Ñ%¨uÔ5€LØ(�e×(Ñ(°%Ô8€OØ+˜×+Ñ+°UÔ;Ðàñ$ó ñ$r6   rb   c                   ó  — e Zd Z ej                  ej                  j                  dfej                  j                  dfg¬«      Z	 ej                  d ej                  ddi¬«      d¬	«      Z ej                  dg d
¢¬«      Zd„ Zy)ÚVehicleDocumentReviewWebFormÚApprovedÚRejectedr   FÚrowsé   ©ÚattrsT©r   r   r   r!   r"   c                 ó<   — | j                   j                  d«      }|S )NÚexpiry_date)r:   rG   )r0   Úvalues     r5   Úclean_expiry_datez.VehicleDocumentReviewWebForm.clean_expiry_date”   s   € Ø×!Ñ!×%Ñ% mÓ4ˆØˆr6   N)rP   rQ   rR   r   rZ   r
   ÚReviewStatusÚAPPROVEDÚREJECTEDÚreview_statusrT   ÚTextareaÚreview_notesr]   r}   r   rr   r6   r5   rt   rt   Š   s�   „ Ø%�E×%Ñ%à×)Ñ)×2Ñ2°JÐ?Ø×)Ñ)×2Ñ2°JÐ?ð
ô€Mð #�5—?‘?¨E¸.¸%¿.¹.ÐPVÐXYÈ{Ô:[ÐcgÔh€LØ!�%—/‘/¨5Ò@dÔe€Kór6   rt   c                   óð   ‡ — e Zd Z ej                  ej                  j                  dfej                  j                  dfg¬«      Z	 ej                  d ej                  ddi¬«      d¬	«      Zˆ fd
„Zˆ xZS )ÚKYCDocumentReviewWebFormru   rv   r   Frw   rx   ry   Tr{   c                 óø   •— t         ‰| �  «       }|j                  d«      }|j                  d«      xs dj                  «       }|t        j
                  j                  k(  r|s| j                  dd«       ||d<   |S )Nrƒ   r…   r   zRejection reason is required.)r(   rF   rG   r   r   r€   r‚   rI   )r0   ÚcleanedÚstatusÚnotesr4   s       €r5   rF   zKYCDocumentReviewWebForm.clean¢   sl   ø€ Ü‘'‘-“/ˆØ—‘˜_Ó-ˆØ—‘˜^Ó,Ò2°×9Ñ9Ó;ˆØ”[×-Ñ-×6Ñ6Ò6¹uØ�N‰N˜>Ð+JÔKØ"'ˆ�ÑØˆr6   )rP   rQ   rR   r   rZ   r   r€   r�   r‚   rƒ   rT   r„   r…   rF   r_   r`   s   @r5   r‡   r‡   ™   st   ø„ Ø%�E×%Ñ%à×%Ñ%×.Ñ.°
Ð;Ø×%Ñ%×.Ñ.°
Ð;ð
ô€Mð #�5—?‘?¨E¸.¸%¿.¹.ÐPVÐXYÈ{Ô:[ÐcgÔh€L÷ð r6   r‡   c                   óŒ   — e Zd Z ej                  ddgej
                  ¬«      Z ej                  ddgej
                  ¬«      Zy)ÚVehicleVerifyWebForm)ÚtrueÚVerified)ÚfalsezNot verified)r   r   )rŽ   ÚActive)r�   ÚInactiveN)rP   rQ   rR   r   rZ   ÚRadioSelectÚis_verifiedrd   rr   r6   r5   r�   r�   ¬   sL   „ Ø#�%×#Ñ#Ø%Ð'@ÐAØ× Ñ ô€Kð "�×!Ñ!Ø#Ð%:Ð;Ø× Ñ ô�Ir6   r�   c                   ó¬   — e Zd Z ej                  ej                  j                  ¬«      Z ej                  d ej                  ddi¬«      dd¬«      Zy	)
ÚTripStatusOverrideWebFormr   é   rw   é   ry   Tz"Justification (required for audit))r   r   r   r   N)rP   rQ   rR   r   rZ   r   ÚStatusr   Ú
new_statusrT   r„   Újustificationrr   r6   r5   r–   r–   ·   sI   „ Ø"�×"Ñ"¨4¯;©;×+>Ñ+>Ô?€JØ#�E—O‘OØØˆu�~‰~ V¨Q KÔ0ØØ2ô	�Mr6   r–   c                   ó8   ‡ — e Zd Z G d„ d«      Zˆ fd„Zd„ Zˆ xZS )ÚPlatformSettingsFormc                   óT   — e Zd ZddlmZ eZdgZd ej                  ddddœ¬«      iZ	y	)
úPlatformSettingsForm.Metar   )ÚPlatformSettingsÚbidding_rate_distribution_countz?settings-input text-lg font-bold text-gray-800 text-center w-36é   Ú1)ÚclassÚminÚplaceholderry   N)
rP   rQ   rR   Úaccounts.modelsr    Úmodelr/   r   ÚNumberInputÚwidgetsrr   r6   r5   ÚMetarŸ   Â   s>   „ Ý4à ˆà-ð
ˆð .Ð/@¨u×/@Ñ/@à^ØØ#&ñô0ð
‰r6   r«   c                 ó¾   •— t        ‰| �  |i |¤Ž i | _        | j                  j	                  «       D ])  \  }}|j
                  xs d| j                  |<   d|_        Œ+ y )Nr   )r(   r)   Ú
help_textsr/   Úitemsr   )r0   r1   r2   ÚnameÚfieldr4   s        €r5   r)   zPlatformSettingsForm.__init__Ó   sZ   ø€ Ü‰Ñ˜$Ð) &Ò)ØˆŒØŸ;™;×,Ñ,Ó.ò 	!‰KˆD�%Ø$)§O¡OÒ$9°rˆD�O‰O˜DÑ!Ø ˆE�Oñ	!r6   c                 ó`   — | j                   j                  d«      }|�|dk  rt        d«      ‚|S )Nr¡   r¢   z3Bidding rate distribution count must be at least 1.)r:   rG   r   )r0   Úvals     r5   Ú%clean_bidding_rate_distribution_countz:PlatformSettingsForm.clean_bidding_rate_distribution_countÚ   s5   € Ø×Ñ×#Ñ#Ð$EÓFˆØˆ;˜# š'Ü!Ð"WÓXÐXØˆ
r6   )rP   rQ   rR   r«   r)   r³   r_   r`   s   @r5   r�   r�   Á   s   ø„ ÷
ñ 
ô"!ör6   r�   N)Údjangor   Údjango.contrib.authr   Údjango.core.exceptionsr   r§   r   r   r   r	   r
   Úcore.modelsr   r<   r[   ÚFormr   rb   rt   r‡   r�   r–   Ú	ModelFormr�   rr   r6   r5   ú<module>rº      s›   ðÝ Ý .Ý 2ç fÕ fÝ áÓ€ðÐ ôE˜%Ÿ*™*ô EôP,$˜Ÿ
™
ô ,$ô^ 5§:¡:ô ô˜uŸz™zô ô&˜5Ÿ:™:ô ô §
¡
ô ô˜5Ÿ?™?õ r6   