From 67c55455071701e77527fc63cabf3e8944a3230e Mon Sep 17 00:00:00 2001 From: nataly Date: Tue, 23 Jan 2024 11:13:38 +0200 Subject: [PATCH] New changes. --- osinaweb/db.sqlite3 | Bin 638976 -> 643072 bytes osinaweb/input.css | 2 +- .../__pycache__/models.cpython-311.pyc | Bin 19765 -> 19863 bytes .../__pycache__/views.cpython-311.pyc | Bin 70643 -> 73424 bytes .../osinacore/migrations/0052_note_project.py | 19 ++++ .../0052_note_project.cpython-311.pyc | Bin 0 -> 1028 bytes osinaweb/osinacore/models.py | 1 + osinaweb/osinacore/views.py | 73 ++++++++++++-- .../osinaweb/__pycache__/urls.cpython-311.pyc | Bin 12715 -> 13013 bytes osinaweb/osinaweb/urls.py | 7 +- osinaweb/static/dist/output.css | 15 ++- osinaweb/static/js/pop-modals.js | 2 + .../delete-project-note-modal.html | 30 ++++++ .../details_pages/business-details.html | 29 +++--- .../details_pages/customer-details.html | 26 +++-- .../details_pages/project-details.html | 72 ++++++++------ .../details_pages/staff-details.html | 26 +++-- .../templates/details_pages/task-details.html | 32 ++++--- osinaweb/templates/index.html | 90 +++++------------- .../listing_pages/business-types.html | 26 +++-- .../templates/listing_pages/businesses.html | 26 +++-- .../templates/listing_pages/customers.html | 26 +++-- .../listing_pages/daily-reports.html | 26 +++-- osinaweb/templates/listing_pages/notes.html | 26 +++-- .../listing_pages/project-types.html | 26 +++-- .../templates/listing_pages/projects.html | 57 ++++++----- .../templates/listing_pages/references.html | 26 +++-- .../listing_pages/staff-positions.html | 27 ++++-- osinaweb/templates/listing_pages/staffs.html | 27 ++++-- osinaweb/templates/listing_pages/tags.html | 26 +++-- osinaweb/templates/listing_pages/tasks.html | 27 ++++-- .../popup_modals/add-project-note-modal.html | 9 +- 32 files changed, 490 insertions(+), 289 deletions(-) create mode 100644 osinaweb/osinacore/migrations/0052_note_project.py create mode 100644 osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-311.pyc create mode 100644 osinaweb/templates/delete_modals/delete-project-note-modal.html diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index a568af4d159c1cbf97cdf23853c6778e72d1e7fa..051849d6268c4feff4a49da0b290dd23410560d5 100644 GIT binary patch delta 2766 zcmajgPi))P831rTQ4}p(6zw#rn>dbX%V}cQl1YjZC3Q>d*l`@kmYq3q(r%qYi=;@2 zmSj=#5(9y(IDgtLhjuQeOVb%Bf?hJfs}T#^jA7lO$j~L&VL*2Zdg!IV+HUJGqv*2j zeNvJ-$bcH=k5BI(AHPTPTUt7>w0hw6wicTpi0k-x`1ipZeL-aZ^6a}EY!mw_^A7tP zc7go~d(->%`qSJrgP8R>|0~GBj;;JL(7)@cCbGwowatu@$mX?~OtzpAS67<*UqHPp zll}WqX=S1RH8lJl@63^76tzOH9>gty)$Wy(t0PW|a{1Q>IL&#in;b`r*7-=dP}HO6 z&!uIa=Tj3`BYsb5n&&{maOa(sju zFBZn>)}9`8*;gemIlQQH>x$!SCA;kSv6CRs?&|$zN5eI@7ZL0T`@R=dz0Ks8OwYw3 zUlTESiQL_ZP+R8&1d~%0+nCKNd6m<%d2V9r*vY|(@yhkRq9 zX2aXN-m-Sv6QM}AgScAra?RzMS8A4PE;&gz$^sdn1YD?o{u$ZeK#Nzmz96exUpN__ ze3sNIG)Em`?^173I@RyILu$_JP7CkCSID#6Uv@SSS6bWL0|;(tPvvLFTpgvMqG@xQ zrJ1^xQMrsZU(~ovHp3P3I2yTZzM%ARxS&~;Wd%=L>q0vsGPJ?WC?MK3&uFs8D~d1-}@qJ@!&e3mvs@l@WNDE zwSBXCh3%#$O3wR)w;fl;kDTV>6M-^K6T4yYDqfqS`t;d^u0uuRZI=fiOiuJ+^&)rN_oKtzZJ<)Du*(L@^zs$B;M_Q{CVN8t6z(XbTp^dmpP}fF$zJE43jLyM%HiCD-^SmP-JNeTE~2Be-90iqG&(YTd}!*MVB!y@ zAaeub)k8zB58C!Io_T`ZWG}J-@0Z?py=iYB^BJ?sOnLt9x#^k5(@l7uj}B8rNB_X1 zgaBWqT2h$F<+CX*QTS$dj+bM+7~>-WAuP)w>FQ0(g%7%V(`q=gLK^h7TeSPO16`}$ zb+|X3F8BmBGS#2b?)<9_4rY_^-eWeap4Z)L%)yHtacX>deBj$MNac;Zd#yAzD8*ya z;gj>@1LL{r`E+72XP>iP7L^l;!$*$~9!(9#MNJLorQG1DsXTw8zUGI?VSDbl*fCza z?zbhSfHrz=I(5XJNTvo(Ro>3K-x-}cycmonQ;SE=Br^H2iDKsT(d>wIPB}3~;99_gRoP5NU z`l(z$Em0&wKHM97!ATO3e+bAw1WE%bzyu5+3Fv?Zs6Yak1r*>cFoTm9fqn?Q0{j5@ zKJYT|5^x4M4NL>4fRn%!@IBxJFbPZmabO%61C9fuz%gJ1I0_6q$r6E%Kye5d1P%iO zz>B~Oz#-tfz;}S>ffx`4B7h8pfe;`8K|llqfCu`40N@8oec*FIFVF)V1P%bt0{ek( zzz1{zod5@P0Q-P;U@y=H>;ZNI&j78!)4(oZC-9Urj@<#p7N8km0WZJ+9-s+m1l&La OKm!!u1RNwuxc>)HDxNI> delta 1184 zcmah|OKclO7~a|OdcCoCH)-mm$c?-qDNUo;ncekkjS_Ix3e&{FZ2+~0w)l-h{K(pI zn_LJ9s737|sS$JGVF^_|5KxFoS5SnggisGbzy%}@RS&&XqAgHV3qgQM(nJ*;n796! zZ@&5d`Tv>P-kF)b^NyAQilW{keXD%A(5Hfdk6yUs6fNQ{{yp)ESP{>Oi(Z-fnE)G+>K%tb)#}WlSbuuwoDi?Cq=Kd!@TQ%Ch2NbK7{@205Wn?PC zA*Q#=)_SUPt&1khXKP{F?5c;P^QP`@7y%g#ja7;h({f3zqyy9G(y2;pDt2lrpPQD) z6;FC@E_;{T|`157151*)Wt$4N0DL6kzpEJ$2MOb5Pj<%fVL@OnR#jB##5SrmV{^eAu zEEV-aMo*PWQaq+7OX*}flqhE_DFrF2OGYkLwlh&hMF<79Oh^{qr~G!iqZ4qB&M9(9 zGLcL~Q~6{zpV>HsG?${;H(~y53-ax1qS{*t3^+Q=nPfVVNhdQ8;|QPPeZVK9ZJ^hM zG>QVxwLYNCXX9g&W0U_vB0m?M?Gvn&{Z;tL#?!*tY!<)08}(?nrbVg|uC`0%%& zUXMyFe6yQ5VImqQaOiv3*15?XkdPKcYEV|(0Zmn8?`&?IrCw`ya3TERW6WV7ZA{z4 ze&jBiDF@ls%c*ioFL$NmiF9iHRHUiK-+P!ly)DYaktzFC&G;+I z9JB0@eG&=;y(DB+H}d*bS*s7f_=ee7JISy&;6BqJW}h^Vk`TWMjll!vuN=E=wna+( zOq>HWw2`DZ+* zBbCrZAg?_YJM9~K+NVcQazxFJ4x`cdkZ&qn3T--xgus8&^m2_eHA8`pVRnh@ASwoE KBeu-F%l`w*=}}z( diff --git a/osinaweb/input.css b/osinaweb/input.css index f3ffb053..c9028ebf 100644 --- a/osinaweb/input.css +++ b/osinaweb/input.css @@ -148,7 +148,7 @@ -@media screen and (max-width: 650px) { +@media screen and (max-width: 798px) { #notesContainer { display: block; } diff --git a/osinaweb/osinacore/__pycache__/models.cpython-311.pyc b/osinaweb/osinacore/__pycache__/models.cpython-311.pyc index 22004f5352146ac0bab486c86b48c0fad09b8b86..58635d6540e0d3f28bd81049b61dcc2c9ba0f1a1 100644 GIT binary patch delta 310 zcmdlwi*fpFM&9MTyj%=G5Sy|-b=F2+Mia(MlMS?NC;ONr88I=WGG}psWI-U656AY>V9qmJ1;f7x*GC@Lz4?vxYevS`n{U`EGctbI{Krm}k?jP?*x8dGYKTu>AjPxU%V7yKlbK0{~*m BS-k)N delta 188 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 delta 11590 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 literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/models.py b/osinaweb/osinacore/models.py index ec296931..b481741b 100644 --- a/osinaweb/osinacore/models.py +++ b/osinaweb/osinacore/models.py @@ -194,6 +194,7 @@ class Note(models.Model): date = models.DateTimeField(null=True,blank=True) user = models.ForeignKey(User, on_delete=models.CASCADE, null=True,blank=True) color = ColorField(default='#FF0000',blank=True) + project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True, blank=True) class Task(models.Model): diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py index f0e3f775..0cf2b9cd 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -71,6 +71,7 @@ def home(request, *args, **kwargs): +from django.db.models import Subquery, OuterRef #Listing Pages @login_required @@ -84,11 +85,19 @@ def my_projects(request, *args, **kwargs): # Non-superuser, filter projects where the user is either the manager or a member projects = Project.objects.filter(Q(manager=user.staffprofile) | Q(members=user.staffprofile)).distinct().order_by('-project_id') + # Annotate each project with its most recent note + projects = projects.annotate( + recent_note_text=Subquery( + Note.objects.filter(project=OuterRef('pk')).order_by('-date').values('text')[:1] + ), + recent_note_color=Subquery( + Note.objects.filter(project=OuterRef('pk')).order_by('-date').values('color')[:1] + ), + recent_note_date=Max('note__date') + ) context = { - - 'projects' : projects, - + 'projects': projects, } return render(request, 'listing_pages/projects.html', context) @@ -233,6 +242,8 @@ def detailed_project(request, project_id): epics = Epic.objects.filter(project=project) latest_epic = Epic.objects.filter(project=project).last() + project_notes = Note.objects.filter(project=project).order_by('-id') + if latest_epic: epics = epics.exclude(pk=latest_epic.pk) @@ -250,11 +261,14 @@ def detailed_project(request, project_id): 'epics': epics, 'selected_epic': selected_epic, 'related_tasks': related_tasks, - 'latest_epic': latest_epic + 'latest_epic': latest_epic, + 'project_notes' : project_notes, } return render(request, 'details_pages/project-details.html', context) + + @login_required def customerdetails(request, customer_id): customer = get_object_or_404(CustomerProfile, customer_id=customer_id) @@ -433,10 +447,13 @@ def add_note_modal(request, *args, **kwargs): return render(request, 'popup_modals/addnote-modal.html', context) -def add_project_note_modal(request, *args, **kwargs): - context = { +def add_project_note_modal(request, project_id): + project = get_object_or_404(Project, project_id=project_id) + context = { + 'project' : project } + return render(request, 'popup_modals/add-project-note-modal.html', context) @@ -696,6 +713,31 @@ def save_note(request): return render(request, 'addnote-modal.html') +def save_project_note(request): + + if request.method == 'POST': + text = request.POST.get('note_text') + color = request.POST.get('note_color') + user = request.user + date = timezone.now() + + project_id = request.POST.get('project') + project = get_object_or_404(Project, id=project_id) + + note = Note( + text=text, + color=color, + user=user, + date=date, + project=project, + ) + note.save() + + return HttpResponse('') + + return render(request, 'add-project-note-modal.html') + + @login_required def save_project(request): @@ -1697,6 +1739,25 @@ def delete_note_modal(request, note_id): return render(request, "delete_modals/delete-note-modal.html", context) +@login_required +def delete_project_note_modal(request, note_id): + note = get_object_or_404(Note, id=note_id) + + if request.method == 'POST': + project_id = note.project_id + project = get_object_or_404(Project, id=project_id) + note.delete() + + return redirect('detailed-project', project_id=project.project_id) + + context = { + 'note': note, + } + + return render(request, "delete_modals/delete-project-note-modal.html", context) + + + @login_required def delete_business_modal(request, business_id): business = get_object_or_404(Business, id=business_id) diff --git a/osinaweb/osinaweb/__pycache__/urls.cpython-311.pyc b/osinaweb/osinaweb/__pycache__/urls.cpython-311.pyc index 44568f536debf4e3687f9c6092050042544ec281..fa089b971d9c1d7783d12a75b89420c2a7581cca 100644 GIT binary patch delta 1847 zcmZ`(TTEP46rDS>r*kO2Taf{CHTwkc+QNHm7}O#I>8<`^PB?XM)p8-J`n#&gf%Mvd_#XJxIu*V+5t zeINJZKT5gxa&ivp=*k^?B$Yara?QeTpLx~+wdvhx8{8S2aUlyW>Wz6@(t*)Y)v2z; zFEi&`I^ts z=`M~ZzU|SKeV2KXYlckGi+>1cFTWBM7Tj?-qKQOcDmghS#Z!Ta$&?g2Ih{(@?nfdc ziMq_gf_Ds+r3quNl{ORbd6w&Ij4!bY> zGnQ$xylWIDGuuUl0(xHjB!BmCLP|wP#-)UIEb~K&sJHD}cy%orVQtxEpdCktDcMc$ zIC%yYJJ$~ns&q(&hzi4K$5|=F(V^1C>_;>p&^_IfgYK2yI*}Ig^v^)N*?iZ$ShZZc zTrY!@fKxH53FUy!m_<{Ci>_t=YCndc3_$`x#gsUWtahg{CUTt5y4PMo*v* zyjHP>@n!+tbX&z1fvH!~Q?IS-G#9M`n+?vguT~Lf)n*rlb{X0Uv@31g(XKg)R||-} za;pm?XOgb(I2`nAmBzQWB{wQ_;=84~Ki zXJZ)RGQUuGGB%%Dtj?zv9`>p6TP*Sk!|xgHG0gF+&M?CshO>SLFWrwG`)!5` z`ZW5&?`UJ=yrkcsU}&R&RCMFMNeojmOc9t;2KCGmNfTAo<1#ZWCn zHGyj72G2Jb)V}^k0~>RbVgE@Ktr|(m30&WUp;v}p0=>#B+|q17c|rOmaMg+aq@s(9 z*HB5wEWXY~H);r3#4}u+MbVH|?BSwU6JrUY~7ZTGz{R_ zbqw<|%oCVb;@pxz?}xoUiHpmc|J3FTslR}SXEDslFh^icxxy`1(a&M8IKo8|St@Me hG#4p!l8PBF=24`=lD)vh&1|Is(Cvy+cu4=ne*x=RJ%<1Q delta 1674 zcmZvc%TF6e9LH_%&+(d9f>MI91Lo})HsIO`A*mgj7>ao{Kxi=L6<7)mkCayvC^(T? z$!#Om>2N@mBDqqUSS4*izR>1Edg>{eRi}qmJ>)NFmqQOdRPF2xR#mAh?N{Hgf1mly z?#y_9l6EEv9_Q!hXy|ol{aR|TxL;t>KH9UT0sR5B=mpefEc$ihg-A?_=`>P~loz|9 z!sV(jb?}5{94P`Xd9up2`_^J@;fYCUd3hy~j>9pvZstyFzUz`}CVKJ)8uqq?y+iIV79Q{_E%zZ+C(9(P9uRQc& z&E0`@?Qz{p5bs=0n3Ddj=B=O%RRpROy;@L?Y4k=~Do)mH)upas@W|jH;86^$D)MSc zGPKo|He&F~;3eQyjO%Eu)}~!YiCR0=J?4LAsnSa2lPi>{g zSpRaAvYYJ{%vZ9xu+f#iO5B%lIErCdhG7E3N)-dD(Mx-Yp@#WdWToE5yd4GYCWC`{ zCmOMv4KC*EP@H-<^B#2~Lp}2i=o#f3nfJ1uuQKoZ)L}CCnLUH7j$*@E=9?IPj`?O3 zb(jt3nQuiK4vW~PW#J8!a#-5hc?fHdUZo=CCsqFaE(~EA!UV!f2PZnSgf&$}Dt!Av z3>`9b5a>|4=vvh{)fH=XR#Kf|{v&63HJfNUJM#3lM9P|R%M}d0GV~JYRc0vuoZ-Ja zE2uAYsSSKC)ekVe#q=|m+WsliUm5eatCFwrX10CFwx3vh`+OruXc zW^smx7~1n##2Y-!suklL5A!;@hn)*N+|=>YTee+9N}Ri;80gUt5(p~qaA1)G*vQt> zhtJcE>XxCKK)15Qk!6%ir&{4*6>ZjA#CLhPg+8x08E^Bjrp_B*=i$9<+p?6NlsDmE zABKJz`U&(a8ywlpBL6dUoFlEm(IIlA{lxX!0e!aYKDP<{%yA-dI=QkHPe-s9nq+7q z(4@3;Ae?PcnF>AZ*>_?H$q*tCQaU)$iN0zui(Nc)v(UrCo9G3tT;ZV?9X43veLVDM zn|gOc#Mg=YBn(qBOc9t;u5x4`i`1nh;(7fCD~3TC1_=x*Z*k&UmMBlvJoN0|#?T@| z3xO78kOPq{z}D~_zSxI8Zp;yfcr}V1G+M-A9!AhXqg@>3VGJp>GS0(wbkb{&Pw+4+ zXy`}Kheh_63*gWY7NW8cB|=o0VVrM-m0wdSY_y=3^ls l3jrbolobZt$yL?_jW#c_npjOvlT-G6^qsdDzNFvde*mJo11|so diff --git a/osinaweb/osinaweb/urls.py b/osinaweb/osinaweb/urls.py index 8ee611c5..9a111e28 100644 --- a/osinaweb/osinaweb/urls.py +++ b/osinaweb/osinaweb/urls.py @@ -37,7 +37,6 @@ urlpatterns = [ path('addstaff/', views.addstaff, name='adduser'), path('staffs/', views.staffs, name='users'), path('staffpositions/', views.staff_positions, name='staffpositions'), - path('projectdetails//', views.detailed_project, name='detailed-project'), path('createproject/', views.create_project, name='createproject'), path('createepic//', views.create_epic, name='createepic'), path('createtask/', views.create_task, name='createtask'), @@ -59,6 +58,7 @@ urlpatterns = [ path('customers//', views.customerdetails, name='customerdetails'), path('staffs//', views.staffdetails, name='userdetails'), path('tasks//', views.detailed_task, name='detailed-task'), + path('projectdetails//', views.detailed_project, name='detailed-project'), @@ -72,7 +72,7 @@ urlpatterns = [ #Modals urls path('add-status/', views.add_status_modal, name='addstatus'), path('add-note/', views.add_note_modal, name='addnote'), - path('add-project-note/', views.add_project_note_modal, name='addprojectnote'), + path('add-project-note//', views.add_project_note_modal, name='addprojectnote'), path('add-file/', views.add_file_modal, name='addfile'), path('add-user-story//', views.add_user_story_modal, name='adduserstory'), path('add-credentials/', views.add_credentials_modal, name='addcredentials'), @@ -98,9 +98,12 @@ urlpatterns = [ path('deleteprojectmodal/', views.delete_project_modal, name='deleteprojectmodal'), path('deletetaskmodal/', views.delete_task_modal, name='deletetaskmodal'), path('deletenotemodal/', views.delete_note_modal, name='deletenotemodal'), + path('deleteprojectnotemodal/', views.delete_project_note_modal, name='deleteprojectnotemodal'), #Save Urls path('save_note/', views.save_note, name='save_note'), + path('save_project_note/', views.save_project_note, name='save_project_note'), + path('save_project/', views.save_project, name='save_project'), path('save_epic/', views.save_epic, name='save_epic'), path('save_task/', views.save_task, name='save_task'), diff --git a/osinaweb/static/dist/output.css b/osinaweb/static/dist/output.css index 57417685..1cf35dbe 100644 --- a/osinaweb/static/dist/output.css +++ b/osinaweb/static/dist/output.css @@ -1080,6 +1080,10 @@ video { min-width: 100%; } +.max-w-0 { + max-width: 0rem; +} + .max-w-2xl { max-width: 42rem; } @@ -1389,6 +1393,11 @@ video { border-color: rgb(59 130 246 / var(--tw-border-opacity)); } +.border-gray-100 { + --tw-border-opacity: 1; + border-color: rgb(243 244 246 / var(--tw-border-opacity)); +} + .border-gray-200 { --tw-border-opacity: 1; border-color: rgb(229 231 235 / var(--tw-border-opacity)); @@ -2285,7 +2294,7 @@ video { } } -@media screen and (max-width: 650px) { +@media screen and (max-width: 798px) { #notesContainer { display: block; } @@ -2439,6 +2448,10 @@ video { display: block; } + .md\:flex { + display: flex; + } + .md\:hidden { display: none; } diff --git a/osinaweb/static/js/pop-modals.js b/osinaweb/static/js/pop-modals.js index 020c4e55..456b5873 100644 --- a/osinaweb/static/js/pop-modals.js +++ b/osinaweb/static/js/pop-modals.js @@ -74,6 +74,8 @@ document.addEventListener("DOMContentLoaded", function () { addButtonClickListener("deleteProjectButton", "400px", "140px"); addButtonClickListener("deleteTaskButton", "400px", "140px"); addButtonClickListener("deleteNoteButton", "400px", "140px"); + addButtonClickListener("deleteProjectNoteButton", "400px", "140px"); + diff --git a/osinaweb/templates/delete_modals/delete-project-note-modal.html b/osinaweb/templates/delete_modals/delete-project-note-modal.html new file mode 100644 index 00000000..63c9d6ed --- /dev/null +++ b/osinaweb/templates/delete_modals/delete-project-note-modal.html @@ -0,0 +1,30 @@ +{%load static%} + + + + + + + + + + + + + + +
+ {% csrf_token %} + +
+

Are you sure you want to delete this note?

+ +
+ +
+
+
+ + + \ No newline at end of file diff --git a/osinaweb/templates/details_pages/business-details.html b/osinaweb/templates/details_pages/business-details.html index 99901f7d..32a80899 100644 --- a/osinaweb/templates/details_pages/business-details.html +++ b/osinaweb/templates/details_pages/business-details.html @@ -30,11 +30,11 @@ -
+\
-
+ -