From 8dcd7670a529143b0a7dd24441205125dd4a88bb Mon Sep 17 00:00:00 2001 From: JBthePenguin Date: Sun, 6 Jun 2021 12:02:18 +0200 Subject: [PATCH] modify db and add doc for it --- doc_db/LayoutwithTools.svg | 328 +++++++++++++++++++++++ doc_db/doc_db.md | 55 ++++ materiels.tar.gz | Bin 18678 -> 18707 bytes src/lib/Entry.php | 7 +- src/lib/Equipment.php | 4 +- src/schema.sql | 10 +- src/templates/entrees/index.tpl | 4 +- src/templates/entrees/non_repertorie.tpl | 4 +- src/templates/index.tpl | 4 +- src/www/admin/entrees/non_repertorie.php | 12 +- 10 files changed, 407 insertions(+), 21 deletions(-) create mode 100644 doc_db/LayoutwithTools.svg create mode 100644 doc_db/doc_db.md diff --git a/doc_db/LayoutwithTools.svg b/doc_db/LayoutwithTools.svg new file mode 100644 index 0000000..a89295c --- /dev/null +++ b/doc_db/LayoutwithTools.svg @@ -0,0 +1,328 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Plugin materiels database + (c) DbSchema + Hover columns to read the comments. + + + + + + Fk Fk_plugin_materiels_entry +plugin_materiels_entry ref plugin_materiels_equipment ( equipment_id -> id ) + +Fk Fk_plugin_materiels_entry +plugin_materiels_entry ref plugin_materiels_equipment ( equipment_id -> id ) +Fk_plugin_materiels_entry + + + Fk Fk_plugin_materiels_output +plugin_materiels_output ref plugin_materiels_equipment ( equipment_id -> id ) + +Fk Fk_plugin_materiels_output +plugin_materiels_output ref plugin_materiels_equipment ( equipment_id -> id ) +Fk_plugin_materiels_output + + + Fk Fk_plugin_materiels_equipment +plugin_materiels_equipment ref plugin_materiels_category ( category_id -> id ) + +Fk Fk_plugin_materiels_equipment +plugin_materiels_equipment ref plugin_materiels_category ( category_id -> id ) +Fk_plugin_materiels_equipment + + + + +plugin_materiels_entryTable Default.plugin_materiels_entry + Pk pk_plugin_materiels_entry ( id ) idid +* integer +integer kindkind +* varchar(20) +Achat, Don, Récupération, ... +varchar(20) equipment_numberequipment_number +* integer +integer equipment_idequipment_id +* integer +integerReferences plugin_materiels_equipment ( equipment_id -> id ) + entry_dateentry_date +* date +date additional_commentadditional_comment +varchar(255) +varchar(255) + + + + +plugin_materiels_outputTable Default.plugin_materiels_output + Pk pk_plugin_materiels_output ( id ) idid +* integer +integer kindkind +* varchar(20) +Vente, Don, Prêt, ... +varchar(20) equipment_numberequipment_number +* integer +integer equipment_idequipment_id +* integer +integerReferences plugin_materiels_equipment ( equipment_id -> id ) + output_dateoutput_date +* date +date additional_commentadditional_comment +varchar(255) +varchar(255) + + + + +plugin_materiels_categoryTable Default.plugin_materiels_category + Pk pk_plugin_materiels_category ( id ) idid +* integer +integerReferred by plugin_materiels_equipment ( category_id -> id ) + Unq sqlite_autoindex_plugin_materiels_category_1 ( name ) namename +* varchar(100) +varchar(100) + + + + +plugin_materiels_equipmentTable Default.plugin_materiels_equipment + Pk pk_plugin_materiels_equipment ( id ) idid +* integer +integerReferred by plugin_materiels_entry ( equipment_id -> id ) +Referred by plugin_materiels_output ( equipment_id -> id ) + category_idcategory_id +* integer +integerReferences plugin_materiels_category ( category_id -> id ) + stock_numberstock_number +* integer +integer Unq sqlite_autoindex_plugin_materiels_equipment_1 ( designation ) designationdesignation +* varchar(255) +varchar(255) + \ No newline at end of file diff --git a/doc_db/doc_db.md b/doc_db/doc_db.md new file mode 100644 index 0000000..3d23546 --- /dev/null +++ b/doc_db/doc_db.md @@ -0,0 +1,55 @@ +## Plugin materiels database + +![img](./LayoutwithTools.svg) + +### Table plugin_materiels_category +| Idx | Field Name | Data Type | +|---|---|---| +| *🔑 ⬋ | id| integer autoincrement | +| *🔍 | name| varchar(100) | +| Indexes | +| 🔑 primary key | pk_plugin_materiels_category || +| 🔍 unique | u_category_name | + +### Table plugin_materiels_equipment +| Idx | Field Name | Data Type | +|---|---|---| +| *🔑 ⬋ | id| integer autoincrement | +| *⬈ | category_id| integer | +| *| stock_number| integer | +| *🔍 | designation| varchar(255) | +| Indexes | +| 🔑 primary key | pk_plugin_materiels_equipment || ON id| +| 🔍 unique | u_equipment_designation || ON designation| +| Foreign Keys | +| | Fk_plugin_materiels_equipment | ( category_id ) ref plugin_materiels_category (id) | + +### Table plugin_materiels_entry +| Idx | Field Name | Data Type | Description | +|---|---|---|---| +| *🔑 | id| integer autoincrement | | +| *| kind| varchar(20) | Achat, Don, Récupération, ... | +| *| equipment_number| integer | | +| *⬈ | equipment_id| integer | | +| *| entry_date| date | | +| | additional_comment| varchar(255) | | +| Indexes | +| 🔑 primary key | pk_plugin_materiels_entry | | +| Foreign Keys | +| | Fk_plugin_materiels_entry | ( equipment_id ) ref plugin_materiels_equipment (id) | | + +### Table plugin_materiels_output +| Idx | Field Name | Data Type | Description | +|---|---|---|---| +| *🔑 | id| integer autoincrement | | +| *| kind| varchar(20) | Vente, Don, Prêt, ... | +| *| equipment_number| integer | | +| *⬈ | equipment_id| integer | | +| *| output_date| date | | +| | additional_comment| varchar(255) | | +| Indexes | +| 🔑 primary key | pk_plugin_materiels_output || ON id | | +| Foreign Keys | +| | Fk_plugin_materiels_output | ( equipment_id ) ref plugin_materiels_equipment (id) | | + +| * -> NOT NULL diff --git a/materiels.tar.gz b/materiels.tar.gz index 0c4647239170bb674af7ee69f14fdaae18d41bc5..3a210c69d102da479abd982990b2f83a4ec44d1a 100644 GIT binary patch delta 18527 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 delta 18526 zcmV)NK)1h>k^%OS0e>Hh2mt7*yI=qV?S1Q3+gP@4|3y!++9TcAdpKYl47(Gc2LUI= zX#!~=Rh`k*gCScos3J=)T_EgiUf?{%{#*Mz!v44OVrSmg(vmC#NfD~58;z;}wzMvD z%{AvYZ%dg!nTBrWr^{)aWPzV9Wz+C?_j`3Zowc=91wXs%{eO=AldqM|it4U*`fKaG zZf9jhb$XrE_1^DP=bpz=d*x~7CNPvAhS|A4^`o;qi0baU?R%bzGCzMK*T*0lg}LXe zaS-~O4cD6l(emlJ?|R4x4V48Me*TBF@tumnPwF`pV4yAHlz8aRO9d zzUMw*Kdi6!=kI^qFSP%A{nhpL9_{~L|97f?&*P}Q{>Ary7!2=wxo56Bum4(qrQhqS zPPgA#U3pyphq#LU4{|s0?|<|Ej@Q3`m-SzVjo)2^^?zSqUs-)z|A)A6{||o5gXsj; ze`$I?{R({`{#%`o|GKMPjsH5`?&=Dzf4}>P{~qMp_%p1z<3#SnPp9t4SFhY8alIh= z{tdyh?_Yy(08kL7&mAXEt?zeVz$c^7O;cqU$oc3fHBI8oA7#F$o{Zu!pG4_toOphs zHWfa5)qjM0lv)hD#Ww#Y$m8m?_$bOJLq9o<$EUt-JJsKLej1!bZWhGRB7D+FP=R+^RvAO);=2fO=x0a0ls>= z6-23@WX(mvq!T^)Vi=2UMeV{f*kIykc@iml7=LJiZ9)S_@#UUJ&0g0H&i8_>`6Te9 zsXGo)zI?isPvI&5E`x0I1DEH10{0_%6?EI0J22=G$JK(bKHAfp8O_tJagd}ysN=!@ zVCO{rn|gV4_*%^$k^1hN!O=hk9?b2}&t)7qr`mCZL7HucVUvimurPlVIN-aF;qYj8 zaDSv;yi*nnJzr#M{EONVmzS5zY*K0cAH~sW0+KGt&=|N6m2ivvU+Jx{8vDPu)(8B* zvf5jFl>ZNL&6WREabHyj-w%LauAbj=(~gMt+wLIz8Rp zJ32j8OKNd>X=(X1h(^e!i*Vl)l4o(yLp(M z%CmGcwI!dkZi8QA~TsD&TWkl`l}n8cwyTz-shgu#O9@~E*i8K1uQk$(h> zpaV~7%1D`DteWHIV(MP_i>($Z>Y1s-_xRf)3FhiN;7k1Nl;uR_9y2Gni+`6JD#L}Z zZEerG8;AB}94C{fTcdM-^uB3k(Ncf>qx!vkckZTxB#9GPwn9O{?BJ)UPUz47aiXbd z@f6&#Kwq7b0-|4^ZXrhaJAJoM8h@4A+)~XT%33qSZA&-v5K8GuO$X~C8@k}V`H0nM znt`+p<4ZrmHL~w&wdnbUg?|VFP=<~5@TF~9Ic(Id;?Etexm6QIlhB?KvII6ud?wwO z_(b2#6IfWFE&c3S0w5>>)@Z)jfBS0h;Pma$K5l5OgT#tJPm{BJ+Sj_6hyg@O+)A<#i2Gw z@dQMD#%uzxnpY8jqAhtq|*@W0U7_% z;o%9%^jV)o1(U$jNYP(fcm6Y6v$Xd7AKVJDe`X)I;6DI>Yl8o}>wl|&odEx>^*WFE z?;);VY5Yf+5#v8vo*IsP3<=%iHEaJ>_y5l~0B_s>y>1cz?e=K@_q!{P`~M-Xo9w?k z8(p8N&1*EwqdNbEu44aN@!!ICHg%Iz^Tn5ng4^;x`fFX@|1149zyPrS`|B%@`u{<$ zFZch<4QS_jo@q4tJVWIUo9EXl{PA_${_l2r zwEz44&dPeXr#fAL3y=H%L9UzjKS#tS(>TeR_6|-*=l;Z9N`HU+H8S+$^;uV~{=erw z?wtSA>#z2~Q0VkJE4cq3^FO}+Rjj|x|Gj@raI5@Z?-cpJ6#wh2cGe%||3h3~WdD7M z@n@x%KWdF%&sFSy6EC>;K5p~>Am)?&&()QcHQfIl%>R4b|6l*QY5!APmc6r2w<6#7 z-cHZpJB&&>V1IU*uX6n{*;8K@=)b|dyrUedkNnOtFY)HIhy+^!c4r(XzKdZ-xyen{ z6AGwrsV5h1nEPaN@|S!#vC4NTuiQ)TiO54HddWKiq7*HbMO<>~udG z!S*i&?;Gko@yDBu*}S;M^=I}_lNz8~uZg-q^Bc>>uU11j= zwagqR@nn}|$X7b^#QwT2 zyXA)4%}q;IrcKc^{6fS0xGdAUrdji3;TK$mt$%-(AmnWP@BVS%ZTN3(b-jrHt)czj z?ROsY{~zS~8Tp@gMRJmc`58H!^+>KJwbL=OrkvebgXQGDd1#Km)_AT+88;BoMs#*! z+>MZqTm7<}r+WZ*cew77YxQ&cxMlyZbl1BD{##k4_`^Y2iEK7LVt(=XG*7~7!a@aF0yTaERP+{eJDqb5@+*KOL!8N}Px;3T`!>8# z!;1|s+u9(sr{K2D#+dRZ8-ls$i!B9ssu>T%;LOcp5Q8noR9?oI!!uZAVS`gC70Tqz z2DPLDuV~d^nkw$%JalNrJyt`t!|({;lzG zIT&AW$mI9^Gsz|h?@}$He}*f5^+OGzUgK;DO~_I zB3@WhS=@#aMdNK|N$x8`o~2$GF6w^tU(y)E;rY#_nLpiZbQ=mb3jLfJ8aF6RvVV+R zvQXws!lZ4zbuwBJVs!6hQmfK!2cZ++P(vunbq(tTwLKc%U7Y9jykd#sls(s zslZH!x7s{c$8~TI%7qHwk(Y*@C;076jEA@2U~8GLmi=ZKP_y7dl{GT|LuMGTFb)iN z>{{90RnC~WA41R%+4*Lp*YBgnQ-9(B%ap79G1WF*nhz%dS#=8^DPfxKQh-S|O-Tf@ z^GC5ZdCc;Zj2a6(%y0)$;-3K?N|3?DHcf)FbGTc&oVY<$W5>$#+fkH<*0cTx3@4b&(;(y)VYG2oXcUD(0|EmLb;3NKfh=1!>ivNfi z3H{y8>2-q>%NE%+ez6^$_Av9^-Thq@ClGHJ{9fw6@mz(7Hua zjFEC$(%>}?ORPvQ9G0;cfaXcGZ*n4ko0@90)c*|V;18Z&LmCb)_X0c6{sld0zs;*Q z|0m6-(y72H)aT8m zu`dsg279j#)L#bg>g!_{sFB&)*cn2@(^-J-Q&3@rpCwg3*qK0mAAjsE4>*GyFQ5J! z%o8Od2Mlg1mNliabGoc4lf@$0h1<(xYY8~FLUvTDU9FV0erbkyop}AF(xR*Z#*;}L zEz1@_df%5Za9jT0T3`IXz18*p3d;XpfBiB4??JA+dRG-5C-ih2kMb0~UI-_vE>YXZ zrHWAf$0z*Db=9|ZzJH=Y>ZO}RL3GxDd*#<_@`k~lhWm_rWEjSy_sR|ZB*R*Y&7;rS-2bVbOrUB%i*xk6Z2k6|w(UJDvUtp8pAQ;4%LD zAlI+d{x6vEb3#C$C!~}mq_oK^hkA@`zq*x7WW{{ux{dK)JAaxm6F`XbWaPtMw;jga zPN!i<4De?u@9EJ;{CIthtFZsIRd)Y<+=l;pt5W~b@2;-)==|5U$MfGF=DM-|F9q`o zgzVETkzm`S5q#3rpFewcJlHweI|SS6cyM&wR>c?FJ3E8p2U0y&4=0j<)yJo3}6a_jVNgKR7rZICW3K^{t=a_E#%y)%}w?h%bCP6|mRotUHd{ ziKkZtEL3x+MIWk{iSMi9c$|UR=c|`-9(fe*XsbO?Mt@);X4y1-w!Az}$4hZ?whT~c zaN#FcapbEYRZ~9!RD&lCXR#VV^U94pMIYhB1U1_3hq~O!KFAlH30~&YKAyX5SGJ;c#I0a)qf*%U}Ty59&W#MuhbPL>*M@AFeKm` z0FTlVErL&DqehmLdT~V_#l%gswu2AW6P5c5q73jlQ{pUl6BqvWtNl4M{Q(t`U66l? z$S$5^eU`YBr%$1w2@V{oimZ|Nh=@~au2?9f3pNsDsmg(hDUt5Gb04Vh<6^n*v0Z$~ zkbka?U*W@mmBB_q)`QMum~CW0XPUs|fCh)ROxtFFVzk-0o8jD@bAbFrQ;X)-M&bQ2 zGd|T63MFUEme9fk&+CLHfv3{*R@-y|a~S!-g*I@YNkH~M6R-gATxr@<^q_MIO9Fpd zkK#Snx|{Cdaf~j&*hV}$Y$QTozeD4cC4Yj=fa5gHy^rEc)2rsU3zz4?=v}77@sg4l5>Qtw4iHSi|0U_%d{!MhP^8FN0Z%#Jq_E(bAOX7 zHG~O{frvm#4_GepkmZnTiDMTHcLYorCz!z0L5yRd8raIi?FIK|eiFGXU(JTWeq}w{ zxYF?Vm7{s$G64RZf|T^ICy=%L!{t4s8s61Ox>)zC?5anH}SnmW9Y!kIt@K8&<|~5+;xN`nb3R-(>gla3M^ zf3wd3O#VK1Q-_%rH!+2F=RPPRQ|}*mjC#a%1T^WR$|~@lVQ~;eqX2aRJeD#H00|jT zt_;Z{6td8UC1>>>WXg{iSB+!Dhx5_l$>8YqvD!Y^RXc|VyL)IXALGrPCD1|RAmSeB z`NoN*2pWtChy(Q0SM=m>-Jjf^!P^axf7mIY0^fzn8Qt_W4Blf3^`+=QcRHmFTtSK0rA8=hK$Jp6&RvBn;yZz^KXrz%Q~z< z9ou&aRA`Jq-6wDle%26D_<;-qgse48V{#81A#3qE# z*ir#)#`;6_m}67#GR{MfF)l(RPLlxEg>h)06TqKgpn(M}&KOsNV2m&vayx8d$}Kc& z1e>9)d`g>uAO0xM#2Cb_@1WeHN)m&$SW^Q+zi=5t z00&L2DUfXNBkW$9c98k8U2SQ^iNXGCM<7!3#S}|8P{Zr$63$eZv6G*jgQ74r746L{ z4$4A-wHKvhUz9szUa`q}fBZlht@KPk7e04DAB@qRDTx^%G`6QWtt7yu+9z0j5QD7> z!b4*X|3iihLNg{qLl)2F9wW+VL7GEDlOTe>fXyxfQsvIrcQa#gp)Fu~hF$JjeHZK& zQUAs!a57jVMgc-4Hxn#E69-kCpf!6%3Q9{J)f9#m-moVj4+LT&e+nM*w9%#oY)ZnC zsY-27yM${J|#)j?EW)D~hA1g5z|fZb|SSXD*5^ zPwi=<6^~nlpaPk&QyYf3Agpk?(_DRBT(`Z6E});yG*+ zH@M-@ofrf}I*r+d!h)tGPJ(iqlEOel3PY!Alj8A8;a^~f8o<IUen*62sN`>s~ob;=ki=Eyc zs4*cMhcB)ocf#%z2h%1{Zs$Wo8jT8!H83{}e;~e+wxiYQ5S{*6Frji;eD9z*SHzYj ztCv|}3`Q+jPuZpKM@(eL9)soZ2kNFJ^6CvzM_1zV5)T>Juidao>Y&p$@%1)PZl1+3 zWSJmaW3zpix^uX@o5xb#s#UpXJfNvNv1Zm=QZL*TB-0yXkgyrK4R#?rhSeE`9K0F; ze??5Gzt$iQT@a{kW}L=vv@;dSO_2?l#YN0Ui^g)yR~fRQW4SQ!_KBZqr;P63|A1Cc zfVkBK)PTMZa%tyL7)%0eqwH$dvSrrl6XO(&7R-X8RnhJVMT@+cQQ$iPluEM7ETf1MvF>?pnj{ztEe$IzLJ?rvVibqLwXtVyZxg7#5b=>K zYoVinG{#GGQc1iCeGI@f6b;g&5zt=gTzojG;juJEmSH*U04>hl3vqN#*n}%%e_607 z!aRkA2-((vagjvV4pj=`pv(iw7=$c&@xH==iegzDM;52*Xb(CNuZR|o-T`UVh`>#0 z3_WtYaP=AEGtm%CVMmNY5?yBHh&M>@oae@`UK(U&(Hxnon&kKzuNYUxrUYyWTA-nS z?uO&G>~H#reGmcqdD)eSLuu1Sf2O(7)PWG^!H`@VKz7vbMXSp~t9#H%}oZsP2K_L=2JK{CoG{QlIm970DPLBuXjQ@_NcBw%3X z=lx8-Nbaqd1JuP?>;j z=~ASkppoSif^DzHc?jA(B);Jj6^IyeKN>>-!n$3pg1*~(b7%>UEb(2i)m;zFT8^SDW@e~4vuI8|HEH!$m#lsJtxjCoVTYQnfn;?nxh;BP zqMsMj5~N|}V#2WjhvtxYuvvn9QZJ^XbP5K4oTnjW);N|M3qFx>5pp&aLrVhAjn1y; z&U@dV;)J;kcD0UUCCueZm}V@AAB7@&#(_GwMc|da zeyHq6K(H&z$ym#jL~bD!H4}(m2e^WrL>RNYz~mM@ok)U$!!PQK642xg>=Fm9Gbeaw z*qWO61K%sOf1+mAHB=U>kbFlnn^e*wiZ9S0(uBqZ#1^H~wJd1#~y&o&8 z-bf4P4Ub6);+dGPt)&Nz+EyQ8m`TbPS)*-PvNJdFe?ko4Bi2TL`8jSKbitEL(f6u` z3nu_XOzE->X46tzs|BFDbg$SKX?bXvIU_J_0y-v(w6oQy@U)vt zDX*pWEOmMArZfCaDX%FfQ8*8igFW*ufFu#`R}t42qn8aC3_V3;vehjgMd{%`J)^>>IdXH(5KK#Q$VLxE?6bfMx*_77 zHCv}109X-q`VtmrjxH@bN@^U&Mgy`iataNYf@DVG_vb1?E1)-ljS0N-6cg}B=GA({ ze=40-Ar13WY**t#u1)PRswK!Q_;+6)}4vl(9f2JC@j~ zVWt9b0>e8P!w@4=YjIKCI&aUSlteNqd6pN!fa#n3wyfdp#W5TpBN7}n*ZJ74=Len$ z5&Z7_(AE)BLhho)CoyLOh}Q_VUK&S|aKZs_-6z^oc1%O?OyT`9u$Z_C(}#=ve?T!0 zZsLA~+%x%+E+S7cK?(#X{A@|rvUO=Mon&-a3pUG-I6^xOvu=PkhSRCVWTd9rsl<-r zcrHTffbd(Nn#i%%jUfk-&HJNi%gUt!hvTRiC7rA$+9R-XLz?gmz8+q zapoUyZW%#6z-JsDtiN+~h(A8*Uvz|m^wrd>Q# zwL;5@`k*Sb$|&O2DRMGLo70jtnaZy5=kA)E{DM>8Po8G+Q~b&4Unb>GQ<&Ppkp~g` z3pfzyQ&I`jt|k&*jtycHf5M?9Utoe+=qzo=q%dTeBwB4Uv(2s%_l?-vmYDEN*#%k% zq+RgkXNB|88X(#U7^JY>9)Uz)aKgr4QoqG;bCiPbAO+3F9hyM4SB|F4h(aq337zq1 zhoKH_&`>N5O}T?kcbBJ<-NcJ5~ z(lzKIkhH(jWZRAx=fiBAhg{H5L>*vh;_!m$Ja#X*CV`NLO9J&}C47+_Zs&x=!YD6~2B$;>augOGEE znC61jZM1%S<5CbUnh}+@D^?4AvG}k%4(r)jIb*3~WHZpFZjl>gq5aV)M@ubrOc0aR zp{u*HcA{jAjBW2IHd*kdQ(8?-Ymv-qOUD^#C;3%VGe66*Mp)xghb?GIRcY3`H_IbT zNjbt_fQ0`;5{`YRR)z7r%l>UmRB|N_ecSGJq=;|cleQ!#0V|W;BpQFC!`Cg7wq%dr zvZLlreKteSbt+BhU1m3@O?t$Rl#Z^WN5s(i6kW)i8zHeD+Ox&BF?2|*shCnr;j6Z= zk~2dd!_C2MjiRD329WD$n?T^c=aXCH^4yPRf>0=^{BUd%DRel~Ls{l?G8Abm68A;u zn5B>I2*z>|#B?+XPcDBCIb{z8b{3B?yKyYaxX7w=M@gKfc0-b)al>9#`ay8du0)_D)}+%WI3}jU9Rwpm8gR}C z7r9}c7~AXso4J_APFA-aS*2VIN2^p0II*v9rsfH=+DOy6wPSbK^R2Vg?HpPYw`KPq zej_`OpnMTea_8vA{@c25451sssc$7s{v@(>Ya1 zQ?eZ`oo>5zqo63KDbZI&@MBjJlE|9W=@%H^!k8D8$pjii7@w3*XV#9IYLY{$x_uI+ z-L>i%o+E$8)Io?NQ*KITOLAep5&=CVJLJ-WqYaRJv43@9*AqsiYb4l;=PXkMkJC{Gc$xM0gGF;8C=T z+u67jBuMm0i+;y8r(wW*5|z^GikVPeggp&c0z`)RSLGZJl+I~sx~i$GY%9wsnKv!o zg?xW35P2W4AS0iM+NR-HsJ#M4$C}pBm3^ORPEHxBZPyeV13-!?gI(Ok_(v@POmzTD zxk?gSHQR)AHo7MO-=SP5md}vj4Iz({=_u@kk;Q)z zag;L?>?i?cgYma#60)rQ6IXXsTLUUdS(m_YQF3b~JZa2j&L~0ImuUcA7y-{6_5mP^ z+Hnn;uJ{o^Y0!B8eTfW|fM48G%KM;tG*dBB9NAP^IVtF-F`zO`0ZbcCnoR>lyBGm# zh9_rcR^132`KC8VdgH_GF5*D!Ov-PbqB0T7g*`BZDXQ(sR-##M06}7 zT63D2l750_68Nb#7w7i5$T3?19Pg{i@=TwJV z6djCm2{0C|8v3r-^mQcT1BQPyHHI?}ik*9fe86vK_E_1GW88Yhu0)ENO@_{2Igta= z6xn5l6gqvwbU+iu+05?dC9PM?&D0ioXJr37tD>2S}P3pdc`*%CD4>R8&81Mof@GoL9;)eW}D|%aISoUEB2wPgnon*KFufaJ z;v0~Bz|Kb|@r53u!>NqqnNw?3j;fTjtCmx#1#oBWOJhv5r4YAm&;om$WmWi~7wR+3 zITS(ot3=rHUO>0A99n~+30?NYb(sNCZD_|rNU|6VX`eB+9Vvf&RW}(=Mf|71h~JI~ znV1vz!=;*h;FWzO7elZjj*HtRBn!;vtXnV{^*xlK#=v8?jftO}G3VIleUW^dw_W+v z8_r|aSzD2sot>n)bC8Hg4NAkFD+*z2iEZ)0nI@Q=Yi_{29o(XYJlFLG9BbiV`_&>A z2l^gWQL-C`f}DR~MSzg@*g(ib&mm7-0k<$L8pJu3Cotjy_#EaqE~!$i)>X_6)Y(%o z>^f&m2xpw?_mtG1RgQ#}l0T#B{qY!6u4Z7f*xM+1YD}n9N8Y5&(8N9~CHbiGsqTFq zkS-k!Ax5EN_h0N-Ji0lFuiQ`~WwDh)$JJZKSgPZgcea1hl|5rTZGzr%4nLV+ol>$e z1(u$286>YiWu(&I6!gK8(i~kS7(P4GM!aJIb-B3^*j^C@X|q;p1Q=HS|PfY^-=3*>8DToK091Lg*9)87AyTd(`ImJySzcy0bV8$0oZ(sZhR^ zK6XIy_?~qdhZRq?8g3U!OCd(h@LW*=Ij}mYNEzzuPup5k;Nf``7PMBJ05^cS2;r_N z33p~wrpHz0Aa^0xNK06(N|d%U%uTh9j!g4Z=MH~~0#9@RSOqBQyT_m0GcU~=b}>7(TbJcjfvEA>?uh|QTR%mIClv12+f5>+u6c*cf@k7tFljY0`2LLz_b zRCWX{6^39VIY@0Uj5)cixng=~+Y-sSgG8E5BcK!lPdJ4(MQEE%#v&?80r14bzf_q; zA6#fWGZINLhw~^t-4zvsb^%maOUWrHR?4z7lQ90$J{KMs7Y^3dRyyS;S^F4+ z)lT&Yu$&Xr45x52X3;@WM;cJ3=1zb7E{J5A9m2rB@QWl2*>!kcc#`HWCuA{fhG|BA z>6lbhu37bO zbqDAefM$*s(%HUdY+7MBCZK_H)u;X0mePzh9o29Ny+476j~b!m!e&+$mk)m)&Q(;e zl)GTyM~-lcRGXs>1h8&b2?Jd<@cfY^Ae9m)S5z5WcSIh?>G-fen4Oh9#F^o3bK*-{ zHD4H8r^TUO#d!;i3<^W1lAdJHOOb+9PDh<@g)EhguBviiQi&&rz-wU!qhc!9(*yyn zgi478IudIdB7&48(xTjv{A7RnWf?rcBIShC;MBdEP@Yp<1Qeu)(y0`3G>!JJ${~SQ zoR}|SrE*4}-CwnB#%67Oq`48*h2xbaiT2aY><;aCZBtp2%|2CuPp6a4N`-PIUP+{x zBw9({X>$Ht;LA%p#9oh6eL{1Kl?MhPU>sE9$SIzYSJ$=KqLSyH3iN-_W!kBhi4>i! z*}xJ=!Lj+|Bk=f42Vu}ctU0Ezv`iCx4T11&yYRaA{$0Ix6Id;Lo0QHkIuG>GvX1)gc2J6Cg43z?{Zbyq;ui+%%#YHmzJf$ zBo8w;^7%+2&eWSZnXBXy&_|@`N-^|Q(A0~^M7_-T$X-3_ZC3WOaVwmB9;O)KQ-1q00?Ohh?hCAE4<~2x;IeNr;A3;J>42x>o*~9B8?~uBbo*Yv_ zO17JI9Da-HO6W^|8=Dp3nK3e)!l1HS7oexT;H5Xl)E39yUI<>;Qw06Yf#T)}02j2C zIWSFXU|nbWIHov^ z*ghSk@`e#9-m1@$r(6-cillTz3T2X+8qXON;ONBfVy>q2gAQsi2iy=|r`lvY<4W(U zJCJ}S(<*;TCRihQ{9E6CQ(46khx48HDoW0wmZR$jfOM$NlaP3#W`<$5=W0tObcsb-5cZc$fdYRs)^}2(z~b+l!O=kN9jk*w_1*T-(e}Z~ zJN5GL2)|Hojt*ZPZNF}-lSBG@@VAq}!HIe^IC{Nzax&OeFWx!ZZ{FzK_JKw;c+b{O^_kdpbj<`=Wv+}(SL%OZ@kb9nIW;N7ufQw8W;ufo2@&8$YuL+bsH?WlFVwc#ItA>~5cID;hEUd@;bgj|K-o zDB5G&J3DWWV87uV_ymmR_$}$Z;yYfjE6lR0tvB6 zVnAyp_>SXN+rhRB0=}Q{TW+ycoc3+q>WH(RP%6V32!46PO*fAarEz zTVGIPiF;RLa(2UPscPG>Gvs1@ZcWkM81_Z)|xNrJ@gU@7vXdbn`S1$;^C zJm+ote5v)>P__acVeX^YldD42X(rekhgAD)!*F z24Uz^ADSOtIfP=r#HVhZtyw-An_8kK(sS}A5fayD5Rz%sFqo!+rm#5Y)HEi?2z$Bo z8BXKeoG^^D86!j$<~qZEVZS|{hWQ!%;Jjf!Oy#sIjhmV~E!FGvx=Q_@7trJzA5EBu z+aSNhw38`1CmHbt6bU+9*VZi8F}G$-m!*0-6w@^?MLWlnX*wte&%;uxz*5JPm^v&Q zHqNtbnm$`zzP!9#I*an9I5}I^X+_IhFtBZt-#Q>2DP~B)9IZqT>)^_fTf8xo$I9=x zzQM!knAdY&6_Xr0A_3HsKRY9T3tzhqOBlN73=h*-Zr>p5|Osc%@(mZ*u+&Yqt4u0nPsB+<$T(#2Ppq#|zc;>8yF zC5?X4qBK1;7GcZs8}ulUiHBP8p>A4c7J#WyWM-I?`ti^l^BR|zCQYJ$%%jNor8k8# z+`$jTL^b<~-un%-aBkfZzk9sC&IJTtcD+duEo1e>S&XltTgKw<4@=YY>HYN4>2%iC zRu%m0uJ=3kPrAA*opse+?ey1r{qEYzit6-w-G2Xfs&hZx-+bkWg-*OlY<<7O{BrfYeBav) zbSpe8BJ30$%C5 z=9~Suul5d3-yZGb{OY#RB0hKREWmdFlAGTjVKM2%ALt5W^~7)ScyMxnz~H~;6aVQJ zi22tjZ_oT@tF0D)-yZD!_3c1X81S4~st)x%9vwcvAQOfe(S)0eJE)03=VzaOqG5r$ z#k4@>efsH#Pye+}8Rb&JbPx z3Vnb)Twm|cmH#9!N&bWM@AN?a!`J=Q->Lpr7|YD{FE0PJF@4I$^imK7_udEU|JC{W zzq8t9{on7d_Ito6onEKAy85X9AL5GQ$!6n~pK_%+^J~=Ppx*lOKXjPJv~y$|I^65Ky`ZmecXnB|GR4<|JQq+wUsrL|LZI3kNf{2 zt_@gqJ}Z2)k-5XPvE?jm*xGQ_ zdE$@Zc2*{*u(#pky$DZcb^$DJEW2A9VApSvv+Sn!3!HbCPRQ@P*{Flw4R~b7fZwzj z!Oio3LuuxJR_F3Wx#xih#k+PZqVrVOCtiHk5aemy`7!@_*S^7)ImZ{;_@B|Ec}Dkn zq(88F-B?C`+E@lo+xpiNu)p%F@c&4fY;vmODfi|8x&{CBy1kyr|4tu7Kl*=GJH1Ew z{}9&={-2xOKZ76hV2Tdv+iv_)KT*j^=Sh4?t>78t#{bf6?Dz$yRnemONTzPO)PP2==eVix!?e!#@g${~ zjPITDW6=N8Em2Qbr-4`XaQOgXPklYH(?uWvJwkWhqr(f;u22iRY)U6>^>+!vFIt0t zBtIAv6uP&+Xtnk2`mI(##FE=A&5|s}cXuT?bo;JW3!c84E3N83Q|gy-pjoT|YcNtH za;bTreloMVcce~xG1 zw)J0MTaox*Z?)g)0siavx}C@Me~9a&uE1i0j!l8nbKmuF#TzOMGW`4xY2!cL;SZ^HG?i~Yg-?nW3ubK8H6gJI4-{MGpQ2{1Z_rr? zfBiE*@-`dCnx#d1TLCf8Qt+wzbHiDi+>gT5yk<( z36~oTUAwja{eS8Ysrujlfrex_qa{Sw&Vn2I2~2Gp&m87dmhzJk9_EM%GiU1$5R zzYf2yp#9fb>pzqHK^=eZ68~NAb=Fb;ch`EImB;w+LtJ4nTt+YT)mO&`80zTol%n}1R=w8A%;qjYZpN!%#pG4^?AFRDe zr@UM>$#I0vId&l}z7HbvJJ-FQ#^b^jmg?^c=UDM9zL}8j#_oUVLv&y${c<|}B2k5o zxxYX^X%k=W{ZZcbLxn5WprFC+(K&iZ^q;$NRQz%D>8DXX1suk1EdCt&Q|h{|PfRI$ z0t0km=70Z3OFQ3oUp#wu=4bS3KhUbp*3&JpzX2CE7X`JNY6d+mMa{4WtfnLO>PMmukFb{P#XD76b+tP<-gz$m!Rtp%@!1#Z|F7N0UG;yz+v~5acR~L5 zyWL0q{~%Wih*YrKgRzal zq*~*_-}a7Aj%Nk24gsmAvk-VSRi0Rua|X&D8##EpzpvDrqrKNyUjCQCJ35~c497$c zdRsuuG1J5a*5oe#ZSNhNsN4+Xl$wyBPLtkdr&VPKIRQ5Dl>S*wC za5OmB8Qj1ZO+~jJ9)MQf9{~A}1~8UAQ0?&1+c&$oB0Jm1JKMX1&tD|c_JGvxVTIHJ zqRzRj*DG`09hXTh*bw!Gbyo{z1S1!ISh}mc8l`{6Z(a^_>(^Y5IM1f}eeIa9upDe~8a{^x^S zU!4E*mCL_OR?SUWJ)_%_dMc5g`ox}U9*$9bl!i0Eky4Pq)9y>kp`}-&w`{@7`MXasNNW^_$55 z*`U{VPyFmW_Mo>o%^LEmQ7rnyH|a>J5deRj4bZfqm-?A5GNJ^at?eITI;uO5Y$UR= zEML>TAF-QLpAg$MKkbEE5&(i}puwA6O<@w5{{e=8uxzt||29Hre@R1EgC+8eaCe#%ikTangJ^2{J6d0tiG1geIZ@hin>jc}?FA^DKYE zgH~uL@|+9?;i(yn%(;Qb&f%?c^p05>Gby0D%Am5iL6n z32sh^67Y++^%21`B~e{NbDsG^4@-aEI@{1oMazYVO$a5^&!=JRdWJgtj6usKuTtq$ z81PfKVg>&>@HYS8ncOZI7;^cI9V5y&-M$tuXu7JkwZEVjPKGo6n1naoQC(8!+@6TS zn%3|Ot;WY?S-5LjS6)u|1zBY4a}&=VuV2Mg=>M^?&^?`u}?U&ZGbDL9SmZ{v!+IbD$r(?A@p1c$5Pm=n@pD!nrxf zP%C6LvNEm9z|ew$8(y}xK`Iu{$J=a-QJdN&=I|tbyQKgYHRZJT7|>vg0g{&$EqMiC z+29&2L2*{-t)W0a>t1XCP{w~yRETI}C_9p}A@4%CaKqe3vWb@G8t`(dBD-DjTcy7M z=per}s3N?K$GGj%&^PT@`5a*^HZ56KY}ZUcX<$ z+-0B(f7K!I8v*#8@%JD~{4+dI^)?J%MRXd!M^PSH&-x$meL;ffY^Q%G;jyU&+wTs= z<|Js}tBkqL|F_cVi~kQa!5Yf{&ibSM|1j6DRQ?-gtSSF_G%W7%!u)R?c>7vGfZO7~ ztNQ%U)y~RVcNP7=E4@ej_aN83Q>Hu!e zrmh(nyLNDB^QSNO+}LwF^o3Dw3~NJE^T>b^cj~H=D__$oN2qU0;5K=K-_eVPXb^vX zF0-DSL4U6~$;;{xi@0`GvsncKo-d&wuWBR=R-y);d`K^(gc{DKLWtV>+yQL9 diff --git a/src/lib/Entry.php b/src/lib/Entry.php index a455462..8cd3942 100644 --- a/src/lib/Entry.php +++ b/src/lib/Entry.php @@ -9,9 +9,10 @@ class Entry protected $columns_order = array( 'id', 'kind', - 'number_of_equipments', + 'equipment_number', 'equipment_id', - 'date_of_entry', + 'entry_date', + 'additional_comment', ); public function listKinds() @@ -36,6 +37,6 @@ class Entry public function listAll() { - return DB::getInstance()->get('SELECT * FROM plugin_materiels_entry ORDER BY date_of_entry DESC;'); + return DB::getInstance()->get('SELECT * FROM plugin_materiels_entry ORDER BY entry_date DESC;'); } } diff --git a/src/lib/Equipment.php b/src/lib/Equipment.php index c8c2193..565a94b 100644 --- a/src/lib/Equipment.php +++ b/src/lib/Equipment.php @@ -9,8 +9,8 @@ class Equipment protected $columns_order = array( 'id', 'category_id', - 'number_of_equipments', - 'designation' + 'stock_number', + 'designation', ); public function add($data = []) diff --git a/src/schema.sql b/src/schema.sql index 8af9085..c29ffec 100644 --- a/src/schema.sql +++ b/src/schema.sql @@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS plugin_materiels_category ( CREATE TABLE IF NOT EXISTS plugin_materiels_equipment ( id integer NOT NULL PRIMARY KEY autoincrement, category_id integer NOT NULL, - number_of_equipments integer NOT NULL, + stock_number integer NOT NULL, designation varchar(255) NOT NULL, CONSTRAINT u_equipment_designation UNIQUE ( designation ), FOREIGN KEY ( category_id ) REFERENCES plugin_materiels_category( id ) ON DELETE RESTRICT ON UPDATE CASCADE @@ -16,17 +16,19 @@ CREATE TABLE IF NOT EXISTS plugin_materiels_equipment ( CREATE TABLE IF NOT EXISTS plugin_materiels_entry ( id integer NOT NULL PRIMARY KEY autoincrement, kind varchar(20) NOT NULL, - number_of_equipments integer NOT NULL, + equipment_number integer NOT NULL, equipment_id integer NOT NULL, - date_of_entry date NOT NULL, + entry_date date NOT NULL, + additional_comment varchar(255), FOREIGN KEY ( equipment_id ) REFERENCES plugin_materiels_equipment( id ) ON DELETE RESTRICT ON UPDATE CASCADE ); CREATE TABLE IF NOT EXISTS plugin_materiels_output ( id integer NOT NULL PRIMARY KEY autoincrement, kind varchar(20) NOT NULL, - number_of_equipments integer NOT NULL, + equipment_number integer NOT NULL, equipment_id integer NOT NULL, output_date date NOT NULL, + additional_comment varchar(255), FOREIGN KEY ( equipment_id ) REFERENCES plugin_materiels_equipment( id ) ON DELETE RESTRICT ON UPDATE CASCADE ); diff --git a/src/templates/entrees/index.tpl b/src/templates/entrees/index.tpl index 4f7500a..9b2854d 100644 --- a/src/templates/entrees/index.tpl +++ b/src/templates/entrees/index.tpl @@ -18,9 +18,9 @@ {foreach from=$entries item="entry"} - {$entry.date_of_entry} + {$entry.entry_date} {$entry.kind} - {$entry.number_of_equipments} + {$entry.equipment_number} {$entry.equipment.designation} {/foreach} diff --git a/src/templates/entrees/non_repertorie.tpl b/src/templates/entrees/non_repertorie.tpl index 504d976..e741bbd 100644 --- a/src/templates/entrees/non_repertorie.tpl +++ b/src/templates/entrees/non_repertorie.tpl @@ -15,8 +15,8 @@ {/foreach} - {input type="date" name="date_entree" default=$default_date label="Date d'entrée" required=true } - {input type="number" name="number" label="Nombre d'entrée" required=true step="1" min="1" default=$default_number} + {input type="date" name="entry_date" default=$default_date label="Date d'entrée" required=true } + {input type="number" name="equipment_number" label="Nombre" required=true step="1" min="1" default=$default_number}

Matériel

diff --git a/src/templates/index.tpl b/src/templates/index.tpl index 8caa002..db0a1eb 100644 --- a/src/templates/index.tpl +++ b/src/templates/index.tpl @@ -4,7 +4,7 @@ - + @@ -12,7 +12,7 @@ {foreach from=$eqmts item="eqmt"} - +
NombreNombre en stock Désignation Categorie
{$eqmt.number_of_equipments}{$eqmt.stock_number} {$eqmt.designation} {$eqmt.category.name} diff --git a/src/www/admin/entrees/non_repertorie.php b/src/www/admin/entrees/non_repertorie.php index beb1969..eb4c043 100644 --- a/src/www/admin/entrees/non_repertorie.php +++ b/src/www/admin/entrees/non_repertorie.php @@ -28,8 +28,8 @@ $csrf_key = 'add_entry'; if (f('save')) { $selected_kind = f('kind'); - $default_date = f('date_entree'); - $default_number = f('number'); + $default_date = f('entry_date'); + $default_number = f('equipment_number'); $selected_cat = f('category_id'); if ($form->check($csrf_key) && !$form->hasErrors()) @@ -39,14 +39,14 @@ if (f('save')) $eqmt = new Equipment; $eqmt_id = $eqmt->add([ 'category_id' => (int) f('category_id'), - 'number_of_equipments' => (int) f('number'), + 'stock_number' => (int) f('equipment_number'), 'designation' => ucfirst(strtolower(f('designation'))), ]); $entry->add([ 'kind' => f('kind'), - 'number_of_equipments' => (int) f('number'), + 'equipment_number' => (int) f('equipment_number'), 'equipment_id' => $eqmt_id, - 'date_of_entry' => f('date_entree'), + 'entry_date' => f('entry_date'), ]); Utils::redirect(PLUGIN_URL . 'entrees/index.php'); } @@ -65,6 +65,6 @@ if (f('save')) $cancel_link = PLUGIN_URL . 'entrees/index.php'; -$tpl->assign(compact('kinds', 'date', 'cats', 'selected_kind', 'default_date', 'default_number', 'selected_cat', 'cancel_link', 'csrf_key')); +$tpl->assign(compact('kinds', 'cats', 'selected_kind', 'default_date', 'default_number', 'selected_cat', 'cancel_link', 'csrf_key')); $tpl->display(PLUGIN_ROOT . '/templates/entrees/non_repertorie.tpl');