From 795b23fbaea9c5dfd9d595f4b271a888b0226d6f Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Wed, 11 Jun 2025 11:33:56 -0500 Subject: [PATCH] Add worklog form fields and enhance templates for better data handling - Introduced worklog form fields for start and end timestamps, contact, work item, completion status, follow-up, analysis, and notes. - Updated worklog.html to include a save button and improved layout. - Enhanced datalist.js for dynamic data binding between input fields and datalists. - Refactored inventory.html and user.html for consistency and readability. - Added form.html template for future use. --- __pycache__/routes.cpython-313.pyc | Bin 18377 -> 20410 bytes routes.py | 13 +- static/js/datalist.js | 20 +++ templates/form.html | 10 ++ templates/inventory.html | 81 ++++++----- templates/layout.html | 1 + templates/user.html | 222 ++++++++++++++--------------- templates/worklog.html | 90 +++++++++--- 8 files changed, 265 insertions(+), 172 deletions(-) create mode 100644 static/js/datalist.js create mode 100644 templates/form.html diff --git a/__pycache__/routes.cpython-313.pyc b/__pycache__/routes.cpython-313.pyc index 5802dc833a1b734ab906a4353eaa42a5bb0ae280..826fd928329956cdf380eeb3cbea2549d51b142b 100644 GIT binary patch delta 3497 zcmX@v&$w$oBj0CUUM>a(28LIQJTqAICh|!ze%PpP$XFk&CB+b|EyWP5BgGJ`E5#73 zC&dt~FU1gSAjJ@DD8&$Lq{mUDD#sA)6>J=%X2KL~BE^u!lEql04igJDjnN1;i_r`= zkI@LWh!Khr)@O_niP2*&$s1^L7R;*-c7To=+ZucsAWPb)kT zd_MYQ^mX5)i@r%87#Lib0zvMU31YfXUWv>n(jSi4{ZRvQNEe6zC8b*&nI);YAomyb zfC8VXr~o9T3nCz{bwhHk_J*np8QIq}O0Q>>o^U?zd(!v1Ps&A~ln)FH9!xA1cqD> zjJ+5bdr2k^zoGRYGms6f0ttW(b@T)oDhzh%1vT>nQWwG^uZJaF3`@EslU$_5z`&3U zE!V(B8ay4Ep#)8oEu#ilo`E5SiGe`@TqM8~;Vo9b{F2n-TO1{+6(xy9sfplZ_>vzK zbC}7mD8IZ|lkpa79!O6S*pY!=AV-RW9l5}KgVzb+^O7ee&&yv3i@1=Ka!E23>`+aP zTdc*P(&rX)YF-K?{aS-O3XT_WID-8>lYxO@GpBSHBjcROQ)Ge-=YS)#AhjsIATd3) z$P%PwK8RQVA{K&Vxl8g(5_94~iLSV4(PRl(9oDrB3=F=TJ!MZZ#()&BWGVtV@)m1y zYEDjZ5nOB0B9Je+Zn0&gCZ?no70m#dxei1ilz<#iv< z$|{fuSQS_&TtU%BkOWxg>dC9*tyy<6FfgP}ekK2qaoyxI3UaJ_85kJqCcjt6W85@3 zPEnrq00RR<)8;0{9+2Ppl{YZ%pL{^sk+E+wlS;fiHd_!DY?$1jqGteB!ws@^35YNN z5hftQ2tY0kb&RsS6o{9q3B?bltP?1M(v zOA$D4SAz@yr+#p1oj*BN%bjBjC=|Gg)=gfcWy5%7@=Gl(sk0z;=Rm}H5Fr90E`W$t zlXbP#8JABE)z*#&MNZLekSHi_iooRp3y8ZPWS{^zs*0|FVwOKMuPimMB)_OKzOXd4 zsImy0Vy=PIUI!63K#F+F^NX@`^3$P8ZcV1&1g|3@J=NTwV|Xj+z%B)YMKvtYu>Z#Zu9g$^GUTj7KN`Fn4D>G}*zzjB)cPf?BR?BtJh(;!WmRzK zYKlVA0@yVmn{RQ00|FY;V8?^Jaf`bsKR>q^Dhx^#MGruxeFG&APIwwBdIS=D3=)(| z%giZBElQm{-AY9MAxIePJFt(RfVkj<21+$W?UPSgDRY6WDFP9DHh;I`XF*9Jg7zIk zkQ4$*)zE~o+TMim_2dWkpoGEipq7LuVMu_iL<>JYkQg{&fWrtQVeo(x1~ly#u`n_) zJeoY+p_Pl1fq?}LpOwq%?9+DW0F6_NtLIRhMspnQ0X8`QXq zPs>crNh#LkFT&}jyC8>w1&Y;M!cYgsBN^_e$p(p6kOOXU zfua-|bs)#w;sO=qPyvv`ia}Wkl5N3RqKKK1fdNc>0A-f7leam~)%e1|P{QcW^pSyq z#{<+rWA$KyR6C4C(?J=Mu?Uo%HBBbxx$Lh01xf;fo_>zbA)aBb@xdXEA)&#p!QjHN z2%HVULCy}c2V9PUQtd6~;*z3UEGe1EB}JfUxy4$PUs{q{1S-XgKt*>Es3e6HC7_H7 zPA%Yg0lT$m4=7APRd$gisLZ*=VUwGmQks)$S0uv7zyPYoiw!65aXqE?QH+7lhv_2| z1CI-c6bJ&5yunO21!8Xs#N8A~zR8>VQIJ!d=>miB2bs+sZu*Qu9!#H^8JHA5GO;m2 GJq`fe7 delta 2095 zcmdlrpYdcrBj0CUUM>a(28REwo*6$hC-O-!p4zBx$QUHY5bPMN6{Bjx6s#@9kj0Y4 zSfmCM3)YEI57v#*2-b^H57v(niV@alj1h^^U}a!nFku3b!3HtvCOpB0P@S4FvO%Gf z1?7YljZ7IqwlOdS8%r^mLYNFi+QBAL3`IIHRnn$#Rc1)4bm8*maCr+Pc|EwiC0yPL zNnRf&Klw4E7^?w{CvOW^?G$V$#gN4acb6edjkG;njRTU2M(He?&YNYJUyCzVP3DkR z-#l5Vi;=N@vYbk=VLbx_!!3@2)S~!;#Prl6O9lppq9zd03?f=UvfL&4C5bulnI);Y z#YL@?7pds5PGDeQaN2xXNG$Gvu5U{q*fFy zWME(@o?M}k$2fKJa}9acB@7G<<(s)RdqCkdLu&)$;>n)cj*QKdyS3xxk?n_BkFa_2 zWKJDD1F#xykTvZf!T>~=fCwWH0diN-Dh39Il}trokMvGX*HK{I#=yW(wYf*fl2vgT z0|UcLP#V=_DXIZ!sRj|XAfgULG);bH=*}@66i!@46DOM**)Z;yTx6srwGkw{2}EoL z5h5UB3yA2Qyv<0Rv1{@@BW*Qs!0rc$f}*cT7sLXEbJ1dufdb%wF4{3!-&jh17f5b5 zh}Z)PFW&O}qU@af^!UQk)S}9weUmecRRs2eq(LEki#aDhy=cwkImU8a>p_AbqGR(B z<4;W7V1KfM1eZ-dXx1vd5@Z$AEuPZi)S`Gu0x1UDU$lC1qPY>{n#ohl^`h5-f`mUe zF*8puC$qRD9;CYX77K_f+5j?vyNC^BCYrZJL1IXL2XT2p1UTf+f>>K8%UZ~=USMEg zSiITJ;tCrZD9DR;OqQ_EU|c!5(cYbL`{a}MW{gdf9F*B_vHIngq!v%saFAhxM8ae* z2Okx1`13(h^m&k>h=5{CEG|whDK1(yd6$D$?j?{UIGDhpegMSX2O@TW{Gfo<57?X! z_E#4uB3SZLD@uy^L1u`92r&==PH+b&2Rdp(q8OCKAlX?0B+UoX$d#O*SCW`q5}%n; zw14sfM~QlHq>Dl#9qdq$qi%77!nhb3&tQLne0YnyC_g_JCJagvMMpqJ-vJrTnVDCX znpcuvR9SQkBzPPoD3z9(Q<7Sgni3C}g-7>MkSZx~K!5}11c+}9BG!P2lam9Tl(|6G z7J-P3o9mqTSx^$v47Uy;NJ1(C2Q0`d;PfLp+1*{9@xkPDcRj{+lc%|>+2ctq;J`r( zZctbifl~|E;H{H?yUVe@VqjpnK3UGAm5YOcfq|KUf#LI!&1*dlGO`3STe42B@lvQ~ zfux3$Aoqhq4V1$)`HFDbaS)^uRD2d40GPy`{x z&n>RZl2n~ss0hf~Vo=sl0D~e>X;<_TWCMtJ3M%gwOwRP4D}9kW?E*_0xJcAwdFIEI7 { + const datalistSelector = input.dataset.datalistBind; + const hiddenSelector = input.dataset.hiddenTarget; + const datalist = document.querySelector(datalistSelector); + const hidden = document.querySelector(hiddenSelector); + + if (!datalist || !hidden) return; + + input.addEventListener('input', function () { + const value = this.value; + const options = datalist.querySelectorAll('option'); + let foundId = ''; + options.forEach(option => { + if (option.value === value) { + foundId = option.dataset.id || ''; + } + }); + hidden.value = foundId; + }); +}); diff --git a/templates/form.html b/templates/form.html new file mode 100644 index 0000000..74b7ba4 --- /dev/null +++ b/templates/form.html @@ -0,0 +1,10 @@ + +{% extends "layout.html" %} + +{% import "_table_fragment.html" as tables %} + +{% block title %}{{ title }}{% endblock %} + +{% block content %} + +{% endblock %} diff --git a/templates/inventory.html b/templates/inventory.html index ce13946..b488c22 100644 --- a/templates/inventory.html +++ b/templates/inventory.html @@ -9,10 +9,12 @@ -
-
-
-
- - -
- -
- - -
-
- -
-
- - - - - {% for supervisor in users %} - - {% endfor %} - -
- -
- - - - - {% for location in rooms %} - - {% endfor %} - -
-
-
-
- - -
-
- - -
-
-
-
- {% if inventory_rows %} -
-
- {{ tables.render_table(inventory_headers, inventory_rows, 'inventory_item', title='Assets') }} -
-
- {% endif %} - {% if worklog_rows %} -
-
- {{ tables.render_table(worklog_headers, worklog_rows, 'worklog_entry', title='Work Done') }} -
-
- {% endif %} -
+
+
- {% if inventory_pagination['total_pages'] > 1 %} -
- {{ tables.render_pagination( - page=inventory_pagination['page'], - has_prev=inventory_pagination['has_prev'], - has_next=inventory_pagination['has_next'], - total_pages=inventory_pagination['total_pages'], - endpoint='main.user', - page_variable='asset_page', - extra_args={'id': user.id, 'worklog_page': worklog_page} - ) }} -
- {% endif %} - {% if worklog_pagination['total_pages'] > 1 %} -
- {{ tables.render_pagination( - page=worklog_pagination['page'], - has_prev=worklog_pagination['has_prev'], - has_next=worklog_pagination['has_next'], - total_pages=worklog_pagination['total_pages'], - endpoint='main.user', - page_variable='worklog_page', - extra_args={'id': user.id, 'worklog_page': worklog_page} - ) }} -
- {% endif %} -
-
-{% endblock %} +
+ + +
-{% block script %} -document.getElementById('supervisor').addEventListener('input', function() { - const input = this.value; - const options = document.querySelectorAll('#supervisorList option'); - let foundId = ''; - options.forEach(option => { - if (option.value === input) { - foundId = option.dataset.id; - } - }) - document.getElementById('supervisorId').value = foundId; -}); +
+ + +
+
+ +
+
+ + + + + {% for supervisor in users %} + + {% endfor %} + +
+ +
+ + + + + {% for location in rooms %} + + {% endfor %} + +
+
+
+
+ + +
+
+ + +
+
+ +
+ {% if inventory_rows %} +
+
+ {{ tables.render_table(inventory_headers, inventory_rows, 'inventory_item', title='Assets') }} +
+
+ {% endif %} + {% if worklog_rows %} +
+
+ {{ tables.render_table(worklog_headers, worklog_rows, 'worklog_entry', title='Work Done') }} +
+
+ {% endif %} +
+
+ {% if inventory_pagination['total_pages'] > 1 %} +
+ {{ tables.render_pagination( + page=inventory_pagination['page'], + has_prev=inventory_pagination['has_prev'], + has_next=inventory_pagination['has_next'], + total_pages=inventory_pagination['total_pages'], + endpoint='main.user', + page_variable='asset_page', + extra_args={'id': user.id, 'worklog_page': worklog_page} + ) }} +
+ {% endif %} + {% if worklog_pagination['total_pages'] > 1 %} +
+ {{ tables.render_pagination( + page=worklog_pagination['page'], + has_prev=worklog_pagination['has_prev'], + has_next=worklog_pagination['has_next'], + total_pages=worklog_pagination['total_pages'], + endpoint='main.user', + page_variable='worklog_page', + extra_args={'id': user.id, 'worklog_page': worklog_page} + ) }} +
+ {% endif %} +
+ {% endblock %} \ No newline at end of file diff --git a/templates/worklog.html b/templates/worklog.html index e8376f5..7ee507e 100644 --- a/templates/worklog.html +++ b/templates/worklog.html @@ -7,54 +7,102 @@ {% block content %} -{% endblock %} + +{% endblock %} \ No newline at end of file