From 4d804d5bead8352cafdd910ca96c823838f3ab9f Mon Sep 17 00:00:00 2001 From: Babit Shrestha Date: Sun, 12 Jan 2025 21:31:12 +0545 Subject: [PATCH] fixed requestsend and approval part --- sahara/db.sqlite3 | Bin 167936 -> 167936 bytes sahara/main/__pycache__/urls.cpython-312.pyc | Bin 972 -> 1142 bytes sahara/main/__pycache__/views.cpython-312.pyc | Bin 9817 -> 11553 bytes sahara/main/templates/main/profile.html | 7 ++- sahara/main/urls.py | 4 +- sahara/main/views.py | 42 +++++++++++++++--- 6 files changed, 43 insertions(+), 10 deletions(-) diff --git a/sahara/db.sqlite3 b/sahara/db.sqlite3 index 3638b510b6ee07dfec099708c930dd4763618e02..4a9c6a53e8037c1dca91c326072d3ea6bd65eeab 100644 GIT binary patch delta 1878 zcmb7FZA=?=7{7ntuUz|Qa|{M5E#jswl)LM_^tw#fLV;4sOQ9`gSy<^^ftJ3%mmv(I z#+f(?#xrInX!c<-(QU!m#4pn?esM-)qRSTbi!RYmi!sLNqIfMERbyQI^5n_g^ZPx& z=k0D~Q@gUMeW_IjwCfMrC42eguO`s8G1Ywt7`IltUp$7Xx3yQ%JDNWrr}}iu*2pWj zR&s<)(NIE$H?9;0n@*oXA3#nYwb4z@s78a>5FZDHbEL{C`+(V7B>Nnk=kRP`#+7B~W4`WjDjIY%{vp4o&{K}g9wl*-?!t*K zf;14c)l6BM8r42J_YQDwk@OKNBv%<8~~NEYBh$MZ5Q1aK}AB0iRw!L zSDt`=I96dUfhJfB#%jS>Ef{MTLs!8C<$6N|X_NS-8V;>KqEfooytXnw8!hJNW95Z# zy2Q=!v*~2AM3*u-IugvAd2#(?&?H{F2HsdM7oyg_@xx=~huGxEiA(>iVNGm~^ECgwxY5i)4Qp!DUizK4qU^x;tCxf_9 zj0hngw-#hNW zSs!2EeL}*1oioGcgq6tp%cY{#ANB>PLeE6hIi1V&4`t({0fM75eUXXmTq;Hm z57TyX#5w0%$b|mUr=9&FND{|aI~27xm2%;bnH6u{2CbEEJ^`1(^8FeoRCjGh$s`jM zl7e%r6dUw}T(RMq3~x6V2HpO_fIU9qC=BFB!nQDx-z75ok+Gbcl;2Kjy2>d&k;pwzX>22dY-zBA#uR<>bxqjHouqIvdWyGw=$$2w#IQOT|n;akE>d*xRO% zqo4*;)?kX3>T{lKhGhiafv>|A_%pl>e}Lb@ui_6G-+>q4n^1)7 z@CEpcMA{3RtEtgCDOMxJTEz9IWJy$a4r#{DBf42pdrW3*z;$0?zv#|mH?i|lJ#lQA zYQqo!j0kE2C_wkg>Kjt`?tVsT)?phlfU zDG5VfePyLiRrd@8WhJ>~E6JEFIA>ujdId)B#}L`B82R_wdU)O20a|I?#IP*M;(E*s zFhsMPupU|WY8Z>v%$W$1V<}uO!{9AMBS+ dkgcWf!e^%TtHdy}L;X&LsUUXo^)U lF}nGGh^0*wPSISYaai^R&`Y=5RuwF@PwG(RrxBU%*q>r7>8Jnz delta 1198 zcmaizOKcle6o%)HlQ_=n1l+WRlr$kxD^+rQ?>uaer9j3ev6I?K9NY0@)A%t?Y{&5< zevDmJc}ZnQ8@!kmlEng5LeN$wSg;8!U=t7(5~>0M7N`=evOplAik6{j5lBVd+|51r z{@?k}f3_N3TaB*kFVfVVy)!oTyuJL#I674i8_%Pm=8o}=$)4_N*MaVS=K~NrzG{m7 z@%H9ciO_A(gWUD~%B&!6keT&(HSgL8q{Bv^Gm&y;*|^`vu2hUh&jf=R-hhdLFvFO& zGT6#7<7R?+lTg1}EuB=qnWMHR#EF4Xolch)H6ywgw)OQ$cHmqhLmiH}YO8#0h6LDJD`UAPvN34Xg5tIf#SZ2T54HL(cVJ1HE|1_fcirJX(e`m zZnR(TPEmu+k>POn`JK^@cK5DdED?gG8oMD!V%%Dm5voF2AgfYYGNqU(DJy%2XkgPY z6_~qd$kl92VTp}-MBbm1{Yh6j<+W#4*2C*8n{?TWxd=D6R7kG5mzE;-_%%-iLX$1eE_Q86Bv zUUN(r=3Sd&G+j)DRxoENt<=I&GMvuyH7+4K`9)tsb*&gE=NGNTaQM=E$QG0qTnp~X z>^kocaY9nIkr8J@#<=jAq4*DESN9;4yb4_~6&X!G9;PeYJc{HS-8 zVKL#ibIj7JGr5tHTx>c~tHv177xhKGA{PB@(2<{UFx85a;HNTRvxTt;y%a?aX_qPZ z5Nhy>(su`$)Ll8FZ7ttL?{%W@n$KRa2CP~ z%BK$z?)hgGRC8K?K1AC7Ha%RUl)irYoEl)duZ4$b2U1=-OP^M*oux|}Jv0>UFg>Q( zhnp&A0hET3j$hEj9tHQ|E%*(N;TQM`zK6T;HGBb|!zb`Dd;ssm4R{+A*i#?HK-qhh z&goPe^u0$E+*7(H=@HHEy+^9%yS?VYQ#}-oMyO5-=}@QU=dLGS5~i-Zxo|d6v#iR?ZH+ p8KU!LXUeXKyuxY@;_J^)ov$}jZ$;G=R;v%9-26<9+(nW=Eda9PJn{el delta 101 zcmeyyafV&}G%qg~0}!ONG^Z;vF)%y^abSQ4%J`hHQ9YKCBb_6Pr&3f?Z1Nq(i_CtS nypta=B~JEcj^>gCs$&G=;(3!dFwf%oAjrwj)W}^V4io|a7)=!_ diff --git a/sahara/main/__pycache__/views.cpython-312.pyc b/sahara/main/__pycache__/views.cpython-312.pyc index 75dc713272669c39ba861dea8231b79dcdf7732f..0b69e7edb1e3427ed40de362f6be66209e3c0a03 100644 GIT binary patch delta 3014 zcma)8O>7&-6`t8${%I*nBt?ppDT>q|wUQ;vjhwW#q1f_IZCJKb*e)s}C`)VCG-dwC z!@Y$P6`L?T9TVuVw#x7094acM&0?Rw)Z ziFfF3z)sx**rj^`yMgV}o9_8)Ox-_A<|>m&Jf=4Tr)N9Ii0FY$)&^VK&KuN&o3wcE zb~l9G0?YU5I{9mupCIW~IuH1kx<=bVK- zeb^mB*nT8-0*N@9>Xw=+HMXFUd#`C(t z8eqV>5IXtq8+&OF|EMu~=(}jBM;J!HUDyEt&B8E-vUMu0pL=$wY%%i}ja*rVp$Ms9 z0WZb_0r5e%-*O7Zhv$#GKa|3izlXCeMmCwwuxFsJN$mUZV9)TKO)r%2uW3%P5_=ZS z7(!V|=g#LVG2pqdUIYh%4M9YR!7&-28ew%+wBk{TL)#i0*vfTNkcvbmpGxQ088DpX z|84rzBNl~RI)o!J#WH-^_twD1Ioze<2nwjy>anY}h4ND-8v}cezwIBOXZfNp$p7UZ z9{M5JwoDL05MZLC5nzU_sP3Dwg_d1Q>fnMh$j;9HxcRRN?d69;N9Y0mi_kF|;-7@} z(Vg7W+C_)?w_D$#9sG;dW?v`FXFhta%O5s>}Mo?fX8+P-1p#D zcpYGd{F(ou6E3?Ml5W>2gs@U>S?HdGZr3e#6z$2u^#= zS(GNcXgo)WiTV>wS9D8}O!#Z#&F4g5vtR3_DP+Hvb=kzK7Og1PB05bvAYMM_3Y9tu zbHP>{BwebJ#-%ZGnoN_Q$YW%h-nE?+YADyiO_*ni$z;knQ?^&rSYVhIsBr7W=_E@P zw0gFgLQzYiLKGk|R19kZD9gEgX}au4rkG*qiF}TU+VY}bB)AoNca<$^-;J}>>YjLw zY`d#%Re7>kfcOFY3fBN;$eJWux>vl>hhA;bt3CAgFM9j$dltO?OC|5nb^Dr?gd#IX zmzBUuF#1O5PUy8Tj{J`l=d}|rpO`(h;tAgFeMi6lz4u4o9ew}QyQdcV4=sBR&m3P- zy*H09sgVUG@}DR5#M$yt?Os&79}^1uH8kILE;V$0Z0}l=VfdgQh0%jk~RF)7fV58#;rv@d^`doBFEyB>ZT*uO`9`?$bob zehN!zE~dfb=>kJ-u@XSpwQ(;b;666QmGliFD-rfG(6@=nUYpE*4$eO!;Vl4ot0<1^ z?X$<8E-KX26Dw(py^*<-c`b)p+VQBOu;8YqV3nSSb#04vZRuqt@^py-uMfodHL1D( zAF17ljP#KQec^*n`9qZgYW;j)=NAW5eIl7l!8+VJuf^(l_^ zE)h4WxTU|c@5|=(sf;nqeg!1dQ(+MRs)y3g$>fbJ&|Lo(ks5EumTCLCB-7R}Wg>Mzo@ndiI!br1TWj7&w0>RMO;1o{xGFRS m$Lr_e1G=_?O7~S)fZlowp$)g2KOxb_l7mLS3^-|2#Qr~1*P!eG delta 1521 zcmY*ZTW=dh6y8~TeT^MEPU6Ik?ZmlmlIBt(ZcQ6Xn~0!X5Qai6s?^C$90%JQX6>Lr zqEsTNydbq2gajf|kwBsZq!#}GKs>e&k@7&hx zKhNBo3f>L`d zimI^a^0VT=8@U+RA$WwMWD+#ErDT${7O<6u0NZF7FvWtjZcEv*-IPo_jR4!hf~b8SK#jNW>a}%7xn-N+8EVs${YJP$7r1;VGhISmd zP&MWL&gnvt_Xx}XcU>ELY7>)F<7r-J(+_IQK^?^t2v48`VWtzlt+04M5+2TSd9%zo zKLcuC_5HwxBZ;CO=6-Z=QMO=E#%n?0?FcE+7VafoVk+Er?r9_f2%`viHXj4fHI6r1 zu1cQHKRIG)W#dg&vK*kwKuis+7zKnOZiO4QY0%GB?}UF+6LwO#TVus+zQBh;)>S?W zA3iL;t$%3~6VhwsNqhup48d~dON)jb16G6gAb1hn2r@zpjynJjBRo76SuBt&)#Jed zXZb47fVqN^%a{1eK%~Wb!#$B}{9@oJ=^I4mYZ5RYR@VP$mr*J6^S~FxGtmK(7E96B zMqUN|F=yFl8_*B}xUBr*4`1!xjScSkhjyJqJY9Vlec&WL;^&qLGA0u7NfHxF@lnz% zzKnO0QE@x|)p5+*axR-j$@QA565+mv$rY?u6qtx z6NgDQ+y;C4yi0k`=2r9UZC(O-uADr4*AT34uN-L-?wg_Ty;6x}<+qagDbzyyrYCHPwYyg8R$S>eVi zqpv(7Yk*uZiYoj~`3R$5QR-*Y*4l@zk?a|G5!Z47fLD;*PFR+27aS)}BCnDO{Noud8njYir}-Ax@tK&Ph!^^G*L@{;U-65L{-Njh tPbg~WKy{G#LkCFvDE;9hWO&~N>Rl2zP>0DhL1WPNa7ulV_{gZd>tEg|W9$F` diff --git a/sahara/main/templates/main/profile.html b/sahara/main/templates/main/profile.html index d078f42..b4407a8 100644 --- a/sahara/main/templates/main/profile.html +++ b/sahara/main/templates/main/profile.html @@ -91,7 +91,7 @@ {% for req in pending_requests %}
  • {{ req.service_offered }} request from {{ req.client.first_name|capfirst }} {{ req.client.last_name|capfirst }} - Accept + Accept
  • {% empty %}
  • @@ -101,7 +101,7 @@ - + {% endif %}

    Completed/Active Requests

    @@ -110,7 +110,7 @@ {% for service in current %}
  • {{ service.service_offered }} request from {{ service.client.first_name|capfirst }} {{ service.client.last_name|capfirst }} - Complete + Complete
  • {% empty %}
  • @@ -120,7 +120,6 @@ - {% endif %} {% endblock %} diff --git a/sahara/main/urls.py b/sahara/main/urls.py index c6bf744..2988fff 100644 --- a/sahara/main/urls.py +++ b/sahara/main/urls.py @@ -9,5 +9,7 @@ urlpatterns = [ path('logout/', views.user_logout, name='logout'), path('hire/', views.hire_view, name='hire'), path('services/',views.services,name='services'), - path('profiles/',views.profie_View, name="profiles") + path('profiles/',views.profie_View, name="profiles"), + path('approve/',views.approve, name="approve"), + path('complete/',views.complete, name="complete"), ] \ No newline at end of file diff --git a/sahara/main/views.py b/sahara/main/views.py index be646c3..8d054a9 100644 --- a/sahara/main/views.py +++ b/sahara/main/views.py @@ -6,8 +6,10 @@ from django.contrib.auth.decorators import login_required from django.contrib import messages from .models import User,Service,ServiceRequest from .forms import UserRegistrationForm +from django.urls import reverse import logging import json +from django.utils import timezone from django.http import JsonResponse from django.views.decorators.csrf import csrf_protect @@ -105,7 +107,7 @@ def user_login(request): form = None # Optionally, you can replace this with your login form return render(request, 'main/login.html', {'form': form}) -@login_required +@login_required(login_url='login') def user_logout(request): logout(request) messages.success(request, 'You have been logged out.') @@ -114,7 +116,7 @@ def user_logout(request): def services(request): return render(request,'main/services1.html') -@login_required +@login_required(login_url='login') @csrf_protect def hire_view(request): if request.method == 'POST': @@ -167,14 +169,44 @@ def hire_view(request): messages.error(request, 'Invalid request method') return JsonResponse({'error': 'Invalid request method'}, status=405) +@login_required(login_url='login') def profie_View(request,pk): if request.method == "GET": user = get_object_or_404(User,id=pk) pending_requests = ServiceRequest.objects.filter(service_provider=user, is_approved=False) - current = ServiceRequest.objects.filter(service_provider=user, is_approved=True) + current = ServiceRequest.objects.filter(service_provider=user, is_approved=True, is_completed=False) completed = ServiceRequest.objects.filter(service_provider=user, is_completed=True) context = {'user':user, 'pending_requests':pending_requests, - 'completed_orders' : completed + 'completed_orders' : completed, + 'current':current, } - return render(request,'main/profile.html', context) \ No newline at end of file + return render(request,'main/profile.html', context) + +login_required(login_url='login') +def approve(request, pk): + try: + instance = ServiceRequest.objects.get(id=pk) + except ServiceRequest.DoesNotExist: + return redirect('error_page') + instance.is_approved = True + instance.agreed_on = timezone.now() + instance.save() + profile_url = reverse('profiles', kwargs={'pk': request.user.id}) + return redirect(profile_url) + + +def complete(request, pk): + print(pk) + try: + instance = ServiceRequest.objects.get(id=pk) + except ServiceRequest.DoesNotExist: + return redirect('error_page') + instance.completed_date = timezone.now() + instance.is_completed = True + instance.save() + print(instance.is_completed) + profile_url = reverse('profiles', kwargs={'pk': request.user.id}) + print(profile_url) + return redirect(profile_url) +