From 9f0927a406f447b55270e4c59e1b6f22d8674bee Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sun, 1 Feb 2026 17:33:49 +0000 Subject: [PATCH] add a list --- core/__pycache__/urls.cpython-311.pyc | Bin 5589 -> 6855 bytes core/__pycache__/views.cpython-311.pyc | Bin 62581 -> 63424 bytes core/templates/core/shipment_request.html | 2 +- core/urls.py | 12 ++++++++++-- core/views.py | 13 +++++++++++++ 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index c75b3ce4799f0c749b8ddeeb7be8ce4342eeb628..86f05eb6ca87569b095026fecb1b31dd3b3e1880 100644 GIT binary patch literal 6855 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 delta 8787 zcma)B33yahmadnoR1&h2fFyxztQ8Q55Rz5_4M}iG<3a?ag`%i>NeU`e#eFYG0#Ynt zRE%`!3uv>btv$+S5BhW*6>+EAZbn1ne4|hF>u#5Ev|I60yW5_{IsdtpRGCT7bUyjL z@2=Y-x_oK4!La=G(LEn6ORF2nfC zdHj0nJ-0`Wb4_kYaV&HM=Jz-PSLoWqPFj)vslVl2fh&6)%ew>hgd1tZf+6!emTwA- zUhMERSogU)oz@*0;nYSuP3Y@7b;A^w(=6gT0y{4n@|mp>(cz7XNNX^pi)CoL5pX@= z1_C3Upj`dQuhOftQiI`uzCn1YdWv;b?&Dg@mkt@(Rb-9IKcGccQ?(~uET;d77C;W* zCIUN^77s@4tcHkgEQ*+o8-j*uYhK}^MvqI}f{qw2bU-VCfhH_1R#L&vGKJ5-)*JN+ zzaA26sH)MbD44CyKcewyLqm7fH(ls$G`}uHm@1dhKcj$Pi{stQ{JzQkC3DVZ*1nlp z+wZCst62JDg_~X4Mp;#Kn|6ylT(oUMl)BsLLBqS=7YYV!m*HEli+QL_YxfyG(-gvx zi;CxJH_6`OVy#6!Qamj)NbRB)uvxxWJZ=TY~@12zJ7$-I(F#`2Ex2Bh>F?ZIf2 zq6ip;bi4Id<)4T~tAE0CPVFwaYf6O&%D}r~W=L;%8PL~s#FcbLo8((lWQ><*389Tj zLY9UZ0y%19Stvor)!w0Pwwr7V=Ek%!W6a%A^h!gAG^5k+*9}9oqYC@;q$(r8q1kDj zhDR6PV1T8voe?u?U~S$v>$vE}K)}ze+^XM<(7NS?*;8jWQ-wzp_@7unU}psM5J=Gj z;tFoFM;NBh>@>XIU|3u!udUgnt&qQ{xkRg%|4|chpT@{~8J*J-dltnXVNkiqMH!p4 zv)gpj8xdZ=&}olKz6>&y)xL0;7Qq3ja~)*O9zkth>TX2B>O33KDF*!KZULtQD0jy z>@y=mJdKtWfRj?ItIqs6ioXE7Cg;`_=dMKY_yGKi)mrzhODnZn=YHcHZC*+B@xM)u zK>nuGP3eJ=vbw%NE0B%#O_@CI3F;x5<-Yo=ENDg(o2zJ*XX>N!=z_8tFfO~GEfQ%9 z>D~@s)bRSELGN0<%Tr;yJ0f&QhA6}wtVm1cpBI!a?dLHazF^qY!@jVe29n13+Vmt{ z7Ep@&WH$btLl1L``BJhxG0H8#3aoF8W9 z%YR)sA%*<%Wp5N)Gp?#}x|!Psx#rrb3&C~wMK?z}MY+%Kk93C3@}Nn+r4Q@R2CzPyK#4D?RLl_%R`^VH`OdPUA|+pEG(Zl~tGuiDnz}wDvu}PReq^uT zywG_Oy9%7sfNC~l>X+rT6+z9E`&KNPuFM~`tYX9IW8!?e<;azl+Cf>fvRdntZ7b*H z-GY%U8S9uXpIo^p9&7}|K{E&eqrNWKpl}g;k6UHlN1#>JdXe>;Rh21YQ>d0_7%&zk zBIbQbmioJ5aUK(%I!PY%nnYk1;*#*U>;AQoPSb0U+ak?i8&n!_33?78w;y%Puv=-x zpeQOP{1y{uO^#3IC9-`6)>f9IF2z4#4#2PE+`yN-uR}E~u}dv?038O;QgqN~Qs5~5 zjAp=ZrL%Q5jX&R7B>OsM%B`)1RUtGE8DZ!6gc$^UAf)3J&cX*!}I;%wEw z6H8ZM`FsE?N#f=lPj#L+XF0UI?F#wmh8)orp?jY$K;5uiU`rHHV}i0P#7g-$v@-%(@}UQ1idGMbpsk zp@FK`BX z4?95~#YG*4*B=Q7NPtM#5LGntKk46hpCPqpGwa^Wtm}8x(X6n**TSc@3id{YSZXu) zxSfFLO{$P5qP;O(yq+u-trw#o594@q4nBVj7-C_qsDp*6Yu%~L3^S3skxMYtv8mfy z;96$*7J}nW-{N>HEvIMmy`z7fCZAn*j(F^!P$UnF)3F9jx`3cN-yaeBjQEpsdb`;X zBAv(8hd1c@pnj`Cmm<4fz7HGGLJuLoPC;tGD|{vecZTisg+eMUFug>GnxD4p)OBZEp}E1P?Zq=d-#O)h)Vfk z*TixYm7Rd~5HTmdBd_xEqDxkFPbl7q_AP*IfbD=CfSt0vdx|=vGId5JsOB^Jdz2Ck zs3XI|eQ4lw;|uH%J|$oeU@u@F;2uB$fNh1ZqrG_xu(OGyXMO9S|wHpFJA?05-VzTa+S+OX3+B)|hKZ=Aj$Q zB%37#QZMgj>af!~*84JIvB<8msZ)4P_%OCLk7j4<^r8vT>r>z0^P6;^@F{GQmh7k+ zVssfGD-@wuTv93n!7`cOHG5`jJ7jE6d1hjT$K=sH7ssOL!1gd6C1#}!r7QrO46Djg zeC7g}$9X78z;Na^6AcvrRyek~gbuNx)uMH?gI4BOhMm#40YNYHu`?ofUuVQS=lxWp3lBacqG3@t2e01?nW0(X@|QZ|!|1b^c?J0aG@0=UpA< z+*Nsez;tmPmOqRh%;BI}w(!%J-1G@~_P}Ms@|U2Fx6k|~tc=a2Z*by?D8WVsQW}F& zsm;SshH6n>+&n^&Y&ve<)-5FNXV$$37rHW8e^@!T%1<6BcJq<9S|fh4Uej{r)(68= z8);5Ejc#0eDw}EMsmJG!Ta9U49lo`?Jp$+r zb|9bdJuKHJeaEL?!S(^upeT|Sv0ag<9=2UkpV@A^=!G8;AWh6bj}f<0PN$2arLbwc zu4?&yv-rj#-#9)hler}4LB2zNeteSqHVj!IOCG(r2-F!l)TF}p0i;;e_h?D#{nT1( zZGH52sfw0qOv`qwKzYZF@}N~z#tutOi6wZk%~)XzV5@x7DvxbPv4_A@GMv}s)Goc$ zT3glqIK+PzV%|X}L?0&G4fqkD7jQQ~0)7Y>Bt`7O=Zd|+Z!pb1lqR4A@;xJzyowyu zCN^>aJr4p70qz4ZT_dR908vO0$o?lrr#?u{LF>~e?n#*v!aN-W2GtGZz_ScLW!*?) zI4Jrlwe-rPPnD8ie(k9{ojwTD)IFvJNp%Xj%EO%8&Cn}BC*QnoMQ zsi7K*diL4un%Pmp!quII^@iqRUPj$P07SA!BKkK>`Gb>%+S@XEa| zT~j=##T#JbLJm{iVs<7Kee`5)LqhW?hVX0pB&LUl7@FIX`Ol3>wWwjQHT}7XX(c#Z z+fBC{9=$MceBdq+4Kn=76gPAGqCEIYsrHh5_LX|~zhUMlrSsJZ%-AANkqBT}9ncD( zTO~Q+G=!D}eF<(7>iaszGC_k$8AW6t8fF1z1E9mJ#Tvq7cc{_{PeKSbyaW}0#q|}% z6CvuCns`3M>s#a7AfBRGUa-I|LXLphuZ=YSRWwPb5BR(YOof}uc(IS>kOe4eRrfQSq{&Ow#R`~qf zr6sS@BuD5y4N(!=h*MO-FkUviS)IlWr!*PeHOAWWW`Anz1+;VM0-I8Y$Y*NevlFl$ za0B{rT(yNhDFR>)Hle8tu$iDchm*+72rkR7Yq?%5ra_e2`#W^taN`b??gX?@lby3( zzHcwd+=dGFM>oobcXp^BiP$*7Vp50+C!=0|tZWjWdjNX@`vCUo-KGt@cA-CO_0Q#u^(V6;_sRS74)O;>mL-4V*NXVp#U#-`Hdz|o!@Qk z`tVklibZBoEK(vTeNvRq4(n?4#@XVbcKs)-W7krJry$AnnsEZWf0k#6H#&`0K8Z4v zSW5<765`cpMBo?fQ)p$M!l$0RjX`6@&oHw3)53TrT8$lelbs{Ec3LYxy-{7j_<7xMao_@PSFK?sg)cAz~a z7*R1JLLobiB0xXI5aLqw@&eWX!hnYW4+DAuOx*`4eGIq&_!{7%nJ9A`Bm6VIkw+Ef z0A%kt2gg}7m6k$|M{s5U&uGyMz%xkT(ZDgcKqx5?BniYm!UEv_5%8-59!xnL)@?p| z5H&&k5-qDB0+iw}>6g>5bDbf5p7=dA(0>kNoYi}w%_&p9x_$IiE$xDX;0vcCC9kLS RLJBIDTlar8&gsG&{{vdDR%HMH diff --git a/core/templates/core/shipment_request.html b/core/templates/core/shipment_request.html index 3b94464..d6469db 100644 --- a/core/templates/core/shipment_request.html +++ b/core/templates/core/shipment_request.html @@ -410,7 +410,7 @@ const errorMessage = document.getElementById('pricingErrorMessage'); if (pickupLat && pickupLng && deliveryLat && deliveryLng && weight) { - fetch('{% url "api_pricing" %}', { + fetch('{% url "api_calculate_price" %}', { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/core/urls.py b/core/urls.py index 6e4d483..759da82 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,4 +1,5 @@ from django.urls import path +from django.contrib.auth import views as auth_views from . import views, api_views urlpatterns = [ @@ -11,7 +12,7 @@ urlpatterns = [ path('login/', views.CustomLoginView.as_view(), name='login'), path('login/2fa/select/', views.select_2fa_method, name='select_2fa_method'), path('login/2fa/verify/', views.verify_2fa_otp, name='verify_2fa_otp'), - path('logout/', views.logout, name='logout'), + path('logout/', views.logout_view, name='logout'), path('dashboard/', views.dashboard, name='dashboard'), path('shipment-request/', views.shipment_request, name='shipment_request'), @@ -34,6 +35,12 @@ urlpatterns = [ path('rate-driver//', views.rate_driver, name='rate_driver'), + # Password Reset + path('password-reset/', auth_views.PasswordResetView.as_view(template_name='core/password_reset_form.html', email_template_name='core/emails/password_reset_email.html', subject_template_name='core/emails/password_reset_subject.txt'), name='password_reset'), + path('password-reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='core/password_reset_done.html'), name='password_reset_done'), + path('password-reset-confirm///', auth_views.PasswordResetConfirmView.as_view(template_name='core/password_reset_confirm.html'), name='password_reset_confirm'), + path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(template_name='core/password_reset_complete.html'), name='password_reset_complete'), + # OTP Login / Passwordless path('ajax/request-login-otp/', views.request_login_otp, name='request_login_otp'), path('ajax/verify-login-otp/', views.verify_login_otp, name='verify_login_otp'), @@ -61,6 +68,7 @@ urlpatterns = [ # API Endpoints (for Mobile App) path('api/v1/parcels/', api_views.ParcelListCreateView.as_view(), name='api_parcel_list'), path('api/v1/parcels//', api_views.ParcelDetailView.as_view(), name='api_parcel_detail'), - path('api/v1/pricing/', api_views.PriceCalculatorView.as_view(), name='api_pricing'), path('api/v1/calculate-price/', api_views.PriceCalculatorView.as_view(), name='api_calculate_price'), + path('api/v1/pricing/', api_views.PriceCalculatorView.as_view(), name='api_pricing'), + path('api/v1/calculate-price/', api_views.PriceCalculatorView.as_view(), name='api_calculate_price'), path('api/v1/profile/', api_views.UserProfileView.as_view(), name='api_profile'), ] diff --git a/core/views.py b/core/views.py index edf3331..6020839 100644 --- a/core/views.py +++ b/core/views.py @@ -37,6 +37,11 @@ from io import BytesIO import base64 from .pricing import get_pricing_breakdown # Import pricing logic +def logout_view(request): + logout(request) + messages.success(request, _("You have been logged out.")) + return redirect("index") + def index(request): # If tracking_id is present, redirect to the new track view tracking_id = request.GET.get('tracking_id') @@ -338,6 +343,14 @@ def shipment_request(request): platform_profile = PlatformProfile.objects.first() google_maps_api_key = platform_profile.google_maps_api_key if platform_profile else None + # DEBUG: Verify reverse + try: + url1 = reverse('api_pricing') + url2 = reverse('api_calculate_price') + print(f"DEBUG REVERSE: api_pricing={url1}, api_calculate_price={url2}") + except Exception as e: + print(f"DEBUG REVERSE ERROR: {e}") + return render(request, 'core/shipment_request.html', { 'form': form, 'google_maps_api_key': google_maps_api_key