From e7be62ded8ad5fc77f13c035d4266366046871d5 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Wed, 5 Jun 2024 19:14:15 +0530 Subject: [PATCH 01/24] added uml diagrams --- Final Project/UML/Class Diagram.png | Bin 0 -> 77795 bytes Final Project/UML/ER Diagram.png | Bin 0 -> 24149 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Final Project/UML/Class Diagram.png create mode 100644 Final Project/UML/ER Diagram.png diff --git a/Final Project/UML/Class Diagram.png b/Final Project/UML/Class Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0a52278d10f94ef7f883ee3d5fadb6eaa2bbe1a9 GIT binary patch literal 77795 zcmbrmby$>b*Ec#?C@2jQ4k41#qQHQnAktk*h?JysNgIID2ndRRbO}f|C=DW=N{4iJ ze`~oVl*^I@emiI(aQ8BYFXg91DR!To4z#tAIe9Vn85HvY$Nx ze`6NMiU+?j+lbt^(KWYtYO4R(1|h0%rf;QfqpwG;^OV}q#>T=L#m;VFs%>Ut`^1z@ z*ZhfHb0ZbJ1)Gu5eVc#&9)SVxt2LHH zXz-i7)~t~!Sg1QJ&ml~b88wuO!SB4|xeBJ(49O~6d|K&-yL z#eF!yQp8GQuAy1vg=do<$ zeYS|@pb=1~1pWq9o}k%Ma{^?YBLr+E46l;;%>Y69JLJ+^*4@GJk)7#-4G zsxEW?N`qns_uIjj;hAkdNwTb}C!y0% zip8sOzC@>Ym8;hhGz2L5Y_%)W=d*Y+%kPfT#Jzi5BOaQXKzjL+x&x8KNfWh_(UB;k z+3INv&u@-iJp8CLWcsFYnq-zNEBYtGiF~k15^j4lGT8V;iiWXh8>`0Jq-EVajV0^V z{p=df!iCfg-l@5rWy*Nf!%uDG()hWZ98VS9*^;DQSKAQA%2^l?||&uSw>4`554;XhYucpkNq*->Ztn6MDgeKXC?kR zO70ukH?N(`-8AGC2~xALJ8SiR&h^VBWOk!T8rI+k(v~P9`?J=d4xymzpwr7+yy8^cZB%eJ4y~e=E|Iuh*XOYk!BJvE`O(^K?a_Ah%a&{?gW1Q2*C;6 zyBtCsGWVJq_8bhF-z~eplakWIixj&jjS#sl?|U&YqLT5W;B9(RdJa!St>hQ7Q}RWq zWWL$G!}1pK@2M%%3qLdmxLdz$=G_03s##(;pE}r55M^$!8MS)|rHcM~bonWc*YURq zL=U=v;mdvY_;&=N5a;)I8koPo$vFA@n_(3C8;)~(n{J1jDT+xO7>Gn-BO{|Bx5Jyq zuTI4D!lg>=pTIwAkpuK{%9#` zcqQ5K%g~?l&%e0OhKrT&rB3sd+6xY|KWnN=vj#mjTDt;wxzQX&JAIoBLyD?v3g|%A> z_1N+3N&XS$U!JgAX5b?=OI#+X6F&#lT$+yj;UGXVu|+Z~-lhcb)j z%j4tqwpS*sC!3X-LsL>xbaizVNG5*$Qi$>J@bK~y)z*$_wf(?rS^4v)I(@LbM`@{m zYv{(t#s!KS^%GVU6cJNXQ-gyKM?6(N-PblUDl%-ltfpDkqMG^8WyIqm*R^Y$YJYBh zjb=F1{e#ao^TWy!5z%Jbag9cUA(isUt#Tfnp4my%%*;$ZP3z&v$VhW@^XJc>b91@V zeVDIay~w6Vj_LHnyTtW+k3OIU%q^4Z&z@|FFFx3EBAnih$w!Lii=e5N}-XU zV8u0q=2v`l68;St{e_k%$MhZ-`yXycAM!bE%uyXIdC6iRI!Lfa*4AuLveY~$5MOLb zugS>B%sdn-o@F!@m@n&BuNXqj&Ch>#t?umXtge2U+LqfbVpX*F^#!Ig?f(A0P)|(u zD`xAC0`nn%e}6j*i{T9)b7}hEfeJS*-DvxT{^`X6qhyIg`Yvq;9nTe0`4vqIUyb=;721@L0HT6tP(!6HR zVqr;$i%-wY#OAcu*PpGxQpU4J!Ulv7CMG5(y>hMF_O>V@oKwJQgN2`;Vj3U4&kUD0 zHwD$4gyzgv(wWp2=nu!olgz89o@$BSzI|Iow0++<}UU%8M5-`qw7Dg>5U> z`+d0Sr1GgnT3Q;`gF!Z`niu_SZa+AxR<}2A-n4UVCOf=ddp=~HA^ezicX%~Ygf)RY z`h%p~PrK5vw^51FvxPR(Z#39iT3QxoXG`oC2e(%z;S=)MVvTAC#+iNCGz!14t}HJ% z)Yp?zQkL7z{}`?D*;Y<|FBFrUoJ>keYWU=d-|N@%)2r*VJz9>_33GF%=ZVqHG~_h8 z&91#9SXk$r?V7*4)}oVJP8WEf^6BCBdXEfyf3!yZtbnDOFw2aw=>kT zp42%-f7s*BO#Jxqzz50@T9DIjn4o61X#)jCPr+Wo@BRvXhayQP66*qP`qUonZmnf# zMeJLy=+N?zN5hB{g*ZzUzJ7i#Ys;eFRJZ1ue$dfhnm{W5bc@b*m>!kIb@iq_YN!^- z9KY)7>P^>e>*=>IxV-8w$WyuPapE9hdK`YfWPWHPd3SAAgjHXSIR5i;?ob-W;j-4@ z>*H<=|Jgex2K}6(4_6K~raH~|n)efQ_7kU~57v@G9uK!-ps%C!Fk&_kN6N8m|K|8#+{$8 zf7837v^M&p#hz_*Gt%Iic}7!vhrzNaUxng!jqY-LjaGr{O{4vBDnfY;jZbong%4_1 z+15-hq5JGG%3Vb!5|wA%m3kqIlg#VTB6VSId&4J$B1A(_OU`;_OjfZ<3l|p$C-Kxt z^yqSTT4=GHCZZ}`E5^0P0N@(*uK`1#EyTv@v!B^!OK>-sm9Bt#zmjuEEw=M7>d2`To?8eV=JDc||QhJ}yq!#PzUS-8`j~M-;c`tFE!} z&RpNMy+RCqz!p#dffQeCrEv4jhoVaDy}TpO`kw!#QP=XO;9OMgzWRFFjiG}HS^GuF zp7%qCFk)CP?7E^6%AqXawqyPM_%#mWP=M8w2QMBXq-o;}0Z zk?jcSGuh)4+LDl8uUuKNVqi$h&dwGMpv=q74eS_hEGsKBF*f$}@}j!s93B!95*}V} z_F;gEot>Te(xppt3k&`M0RcWfRd~;jw$#xhCxHU*TBI!q*Zo@LKiX}TKTBOVTG6fL zJ?pSC{yHF_r7KNUIosLI?QnEdr<{v!9|Hr!u@L8YSbTO8@_ears>IUH?R`YVw#dz! zH|^}~NQKbo3Eg>MGCdCt4lWK0TtHz_$U3oaz8yuq+Szf`($dPNsuWUJ|9NoWTFxb{ z_?j|9_;?Js%>FeT>YJK;2Y5>a9s3D!edQid3OIbGLU0i4>FI@phDvA8ZjJh|qd_3L zz@N{C%d=<{e*QH7d{FiNL>JMg4K3C-TfD{6)n=GKeGket*m|mLTh+)lMdjq=V8E)X z_5kXtuYXm0Z*3M=qmJ7aspYz@f9DPc4lhDcL|Iwc(GleeYc*Wp-{%osLB)reRnkz9 zXjl}n7aSa&@pH-3rpIz|@Fu)bR21b1vGinfS+!*Q&t}8P8dtOq*R^};(LrTnjBqu?s5a`7xRY=J@7-6tahKLKXId>g+oB`CdWZ+Ctja51##a_i!Rii-hD2E)>f(9v;=F3an%Z zRaMn%*RF+n{WP{gYV5;^Y>DI#>le}1rcv$f@1L8UKox1|Iz&yRBW58SyARUd#o~&T1Eo`;!~7*-{oCpxqPV( zkNPyHRr$fr?Apy~P72*Ut!1t4mBue0zZ4c0LJis5+35^pyc9qngfMzI#Xq2IXNH6h z(@W#LUB(I=Fck3OJT9;0_0XzhJltO7cRgrmkX<##!kVe5FAA>! zO!uT>XH);yx6#qD46O?P5zNQx^#QA4Gf)*CLfXC2B{h_GI)OJBY>3gffOCbO{(!|O z&F0%3l8L;jSGa;dUJGLmqkMw_!Fab$Ty=)2rgLh=--XJ7eYLr{go?g z>+6;iLQ37rOzccdBT@RXO3aFiiXM}qwXyyE8qB$$KQApUF|x1_*-cl!CLA0bM$=F^!$eol0V@aZ5&$AzIW&k%*%_m9 zQQcPPov}$$(H=8e)E_LY6UHh|)E67`?YDJ!`czp}6$Y7|y?q^g)zld655M&Jzu8f$BNTnD=0o{EF(;smavu>Q5@MGS90 z`Vuv^+v!q+8NH~nu*l!?cu?bA0(#$DDQR`C-l_Epu@Y~H;rrDbIs5C^+YcWExVcaD zd`))eZm!o9g&Ncv?C8)nFh~lXJ$vq)k+JcpK}m5jH2FL>tn=r`wa(NOod}KAdg=50 z`SZ@*+h<<*p5mFGoV5SdM3&{+9z$PZHCB6J{oqaO@sK)hDMVc5+4eTEH7KJRtsSxwP)iE_R}?F}}` ztCF_XD}$MCl3k#FcZV&HQme*?Tw_9K4=l}Wr`}fL9q5ZB8@7}$W3}Z`( zZ~XbQBqnC0H%ph2l9C$)iysj@<}*ruZ9G{%yL{Db&OHu6Wjp(bO4{09#e0}|D}*zs zc=mSE)7(*ugJo%1FJaiw2X|5baV-6X+E9{Fj86tUKRQO_@PEF4`k!tH}PP; z0yU{q?j454B3#4KbmoMmXVwa4GR8LR1iKuALW^fV=jZ=2AiJ3Dqv`liNhw~AF*Pj> z^UN7^YY%g7&9A?ao0oS12Zx@4f&KnxY7UOTXg_c7_7w6sb6=lbvWw+DntJSZ9>h+v zH7NJMXyzVmGqZ#72EufCJUl$=jX9&*%aIwMV;lQ(Lqm!E@Q$X^9`pD;7*$uhTYxZP zl?5}%rfyQH-p4q5`u9F?kt=2btYGiZ7G#a&3tQ>i3<=gfhlBHW3bl3hQ*2z^c7iW< zUk%&M&CSgu4X@~g&JR}CUDfp{3yl`k?~kw)VMnHN?$j0*YU!xam)1XQvi-cN^y%c; z?G!7dM8X?^q{emC857N78*#R<$;rvh^>v_gi+kIv&Ul<8ZQNsKR-qz5o`*@cx3&NR z1h$p^VL{{S`QL^jdJ_=j`lQTyAde z+~Q)j#@G)ZE;Vkkvar>Ls_8d6mfPUQH=GkCK@M;;V&54Jjn(9T`$J(C0}26 z9W1u>xshwoLK$k6Wd^YE*$@ihp8du4)o6CBhtqJLYX)s*;&7lVXq_wDH>-gZyz6GERP*~%`-;Mqs12x3V}w_UmL~_GS7tAE2V^cZ{oTZ_P5kI zmal7kD~h`1BY5i#y@pz+!mpC{f|wW#Vf-e~!05yzfe$GdFLmA*;k>|1@6FtnNXRZP zcl|)2uf_N1_SffcF$(?3ge&A%9Rd zh_9;LS5sqC%bkKjuc7VawCj0+V%&=F2?~WOE+`0V12!~QhL;f)5s{|EY-Edzi(5*1 zmiqL&r?tAP{1N+F7vw7HgtrO+Vuhw@xgPQ?R#~|}AYK`3A*q%?@$>g&YAp^AKYH>+ z`up3kFzl9t{tlw4@rd{D8!?gTk_?uBzI1e+U%QUzX#am0?Bd%bcTCfPXDXah zrqDId%3zOMS6zgAJjyB#3!Yv--H&~$1t8g^&Ov7T;Z@$fE&!iC7uj{Tp7qV4*1o|# zIJ>wQ`GEFiV^?l9A>rV_tNKt?Rg}STN0!0Sie6hAWJaUC;;&!7g8cOr{S;?VXfm|| zjDnw^p9yt2|7}Huo24aZ#j7{2>5EzIQ>eYYz2*;mRky13#Og&pQy6TD&X!*rbUKaD zsFTtGUj3<*Wx4DLd**|Q?A96}*53!dvwv9>bX$)OsT*d%LG;9ElFV8Fm7t0_mVq%M(Qh`eT+G`)*-cu%z zjEqbpCLtlA^(BW|6|C&LF;vs{@6iHJW7B4rK4<4Y3aG;LEH!_4%01K+5?!~6sqIaKxfx(EhW+_QBcfB1lH{-u0yOBm0XJ;-h zE+FoinkD%T%Q{(u64L=hJ(dT1Py6G3-``q2$tZk{jRET5=jK*YR2-X_pxZMGl351c zZ{zsAsY#>AicZyax}B~_BPu$2sHX>1#G5E=z*ae$nCJ)U)N^OMI4vy=u#ZejB`q+= z{{DVg66GkRH1rBstQQ$f29*GAAIFM_h;VUnnQVF|oNWce>FAQGhkUH9ti+m+b-`tU zTO4T$f$Zg5I#h^9GrYDlA%RJ%VRDubwZk17>740GSIH(lat1mmDvi`MFbwVINr_ZIlQ^3|jtbd`@%<@lpW( ze1t_1OlJ|$w2sEt?FZCI1ogOOE{3}tTE&9R;2tP?L?jUi^fNpA6m$r$K%*TwJ^^f8 z1npB_`f%#5_l2~+EjToS+cbi7aX7-r+l-*VhNl+ln_g5n;l7+i{Yo*?|I8Tisa9Ez z0pY0SV%&HvL=#DmcGD2aZ3zU&52EVu1l`AlI8zMaLFoSZWzH5^nMoxfDY?J5XKHGC z35g^mAOO*;(27P)_&xjd+?+;*YZ+S6&AWbG{o%vr9wuN;gV!^Tm{VPC?UpU{9nj>Y zpcu$ozJE_>Bq1RIOzQBH5g|zW{bIDEq!&joS@sv!|L`T554>N)U~`oe6$P=hx*1FN zIy`>-t35$dpX*&gfxWPBRhDj@7|IZEQr=!f0G*1i-s>agnDwQ`t`c8YM=*)yT`php3s-rCwKEabgeE;cOrPiq65 zu9~574i|T_5tL%FTT_QiOB{T`$DW7l!0_-ezx_foxAKDrMHVBKfQn}*_JNywh9DjZ zFuihZr#Wxu$r2J4#?QwGD)ddqwd8~Zj}_aD(&Xe`kTFuU@W~$NjF1U+>ng`*TzN zpkQUo@c`N z;-G-HA1_QgcmBcB>MFnWFJDJ&ASzc*@3AEO0%;5`@x4U{bbIEUkdmq63uBYdtCtA! zc~pY45oLUHt5x=8Y0%5kTGZUu8`65x8HAKz&+^)|A`>}Hn{9l2eDBYn6}t;1AnTPm zZL(=S!}{Z<%ye*9ECAo?ig@#F0+&)?_#5B)*DojJNNC0HtOes}f4-)7=U7B5I}M!d z&50NmxpPBXIR-5+e=5A|N+DOzuHJ}@QTva;#>R!8pP0q;zg`!OOHlYMH66iUZM8Y* z@3u-9WkW-UAboy3iwe^E9Uth!d zfVG=lh4$!00QYUJx955wXD3GZxs0m*{ylJI$v3|@H)kXzc}4Hfq-AoS*@jl}#MHEK z+TGn9FkIx7GlCH(IFO2Xo;Jy!Y64F;wt?S}_Hbcw(QTohFNWo8CO_B5*+8}j1j^qU z8;vb20wcHcmG6(XUpubc2u}))q@b=`(L31N1~(H%a%G*|n@fS8?gPU4@x#;8Q$RF+wGnqT&yRql>W!}kyEij zPlGBtQ;E?i@A;$E6rjm`_trolXydwb4NpY*R5{ii7(b#v;|7|^lN$|3?0PmO@a zjuuEzC%~wJ#(wrG{29-CdK$H4coy;48jDMs7*Tl|ZzXsRg=Yh5(B2EUJs^foPoFmE zad`;g6A~(_sxpW$olm9>yn=Wf4}HA#?SYI90&k^*Q9V3y_$;E(-|h3$)n7nuRwK;I zVFMT0&UP=4)q$^jv%&JY`ziEOtG)CCE{Vo`DUiq06e9y{$9WV85-%`uxzD`D%NSo8 zslxK8tgasSa&x&OYh;uX9UTpuIxbEZ0F;&%)lhScuvek#hJ%BHp|gHKqvt~)oNaCL zuG7QA9|8D)vSHNrnvkKitSqHUB7uvYUA9+DT>RW70jFBX`}e3DH$1g5Ke7aGG;;W1 zeaxVl>)_C8@9Qga-FJi$4#KT*erc(ONxV-AVNgVbWGETIDTI)#njUuP*-!VgD%;zw z+G0gQh?gcH*{f~WB%;`3kt6rqdq`!l9vWfc`Hx>q(Q4P4vI zWMyRmXl1ZI1RccFUoOz3iSI9!{qK8DI7Fe+dalG-5}xr{P|r7+g4k$`#P7*(`9@TYZV?mm6tZ8p4yi?_1l zQOc=@?ds}k(ELH39W9J3Ea&J6oj7q~%kRz8;l$nDUFF9OnlLKTg&Y}a5INs$@u00h z_m`HCSXo~OI||w#QAbc+0F_B+P?Bu4aTBHKlP4a6^;SWjt{>hnveJh=B;8;7H2BS# za(@X$tD+AP^hoYqd=O*_2?EJv=poBUUH0q#p zYdxJHe!sO;g)1A0O6al$Qi!EUh=Bb(2YMNSk0VMQTN0So#=-yvA)zq&o1mbW>+Ln2 z;yTPHkGHYSU>FEV=kHXMzy2nBX}o6S0dZvRP1-c7H5rjtvtlK;X*D%bhkCA_d)U@$!;Z;oN?Z*l(Ncbpuyi z+Sz#zo{abOs|(Oo1z7W1_y7U zP-uw>k+c(Rec|uN z(hwgL^R=TxQQ~`cHdmtEb+23;?{XLS*XTx9`% z)$wb?`)D#v@{dDfe-AQ7Yy~{{U|<{6L>-m3!*3XlW|z$AZ~}~H#uzX6lsp7SNA=pU_>&oj<5S@RkI+jHQJgE zmTrIN0b3`+{NBBLW&_2xdt1w}F=>BbxM%ww8nicvD?&0!$d%kMbalt3rosaQTYGxy3aqDEX%>hzfpO?$PQ_LN z%2*g722BLWS)D&JZU?Q6tBvqif^k~da}xGGM0~)_$|!}FzrV8%e6PE^yOZz$|Gv%y zIOr5NOas47bWR=zs+f=@KT(Jrj?-#+N@Ef$7}q-9h&ND=?ab z3m6b3v+Y3dY5_9bVvj1T*24RZ)pagX`S9#$Ezj;GI zNSJ3Ao@I-8{1oeQBEnHayXGwSYoV_^0IrzM1N$-|m%-0o_5t=-qk)-# z)6dO!D)d1kYvJ^9ddn5qF&khuGe=-4%;v;;Vc1XCrhF5p`yrPwyYYpA zlD%S`iT`j4*V>7n+BSc!S0T>5kK#mFu0m{Kl5JE_B*BC$l|({wEKL^3u_kVWyBz62 zur;94FqQ|EIIii;w27y=S%0D8n_ygEMZUmdWo3m{3E`#~zsGudpTE6${=7c$52X;B z=5U%tH2osFyK_0+mh@R-+GU!H7-yf-o`1UWz+sf@0#xL^Nz_!e6h@OYbdntQ!uHhD z%oR@UYYrN}V_n^vg-=%#{roPJ^#4T~LU1JeQ6M605fEPpQt-kzEH1{;&;}@ak91`& z=kxth&I75Fh_f}FCI4?Df=3$isi!N_(q;kc02&7yC!o$&<9|9G0KfJM=)p1qO($Ll zbegNG8G2#6M}Eh7TwJXZyC={V6;MsR=nLa!Q)t6uI=W}@_$_((ZlkGtPD`cE>$Z%rADj5Yhl5L}k$RnQ=b{XPmxkXP5u4roU!~Je7bG z^89ZGvHDIzOspOZ8K`dd7yr7{0288c(dd z9*yqstK3W-VGlSgJj$V1B3+iwX(WeWPi@d z(Gm8EVQGIya=0Dxj2sED4C-+M>-w?k3*c%Z{#!r#4><{6$f$ClB!5xYgJAr|Epg{a zS;AjIG%@yYwzbhY&mp~}=&da+pN{$Q$V3Tj&-LYq`?#gg-!=s5(vC5G#9f3aK}#x| z9j2#*irU{CioWII`2GELNP)tNwc>+71@Vg8^|a#{;eHu^H1+2PklDFkm>eIkSL00# zaM_216=gYkN)_5ixpvi=A`LTLUBV-&=4v9X0O4Sv&ICrVPqSF4+-W6&d8u7B?TOUr}9{pVw4Wye1&92lNNjiR$XR>8O>e0Q1!tV!He<@*rhjpBC%_ zr|3L3wxpz_qIpqvwiSdkA&CNF*V<5D-#hcV&lD$M(c@3HW1vUmO9A)UR#DNt{eASF z%O=3X`y#!&y&cJC?O9fJh4acy1)G;bO7y|vrq5`vT!~Lfc^y4JGh=0MuWC*MPG`@p z=XRpHn6(u&M~ewh3GN9bzd{@ro9bhkIy%9Kc_fi(ZgHq0v%GQsX8{_xUAj~_bO~fq zn=brxRtu0>BKBWFMELdV*Pj#diZl*}zn&anTbd`e`yZ?2*@llLdF$5o8L^|_5Y~e| z;1WSW__o`vg)yM<>3@3**IL!yz5?A)4Hq^4Jly}k-v$>n$f$~UQT+D)(X4E2zuc}R zP($$a(+=}rLDGb&dN5sq3T@8yRhfP5@Bd)DVj?dK5@{}_O|5yN=KvlQJvA~A=UC$G ziJ9EjhR{!CMA}w(`~wdmd3kwG4vy9zKgbCQt3v3Ezk2lwGT8Cd9Z1c(Cezj|Bcg+|PviFQ(i_~q{66tB zE*_RHiT7(;q|I&BbhUMm7BvI1C6KNvDN5ZvJprp71ST4SFoYne&5uH@4VEk`1^0FW zPJ_)`R$8jZMb?)e9v)s?jACMyk`p6UccVwGcrXay{II-uF^p%>VGNE>fa-Sb5$?|) zKOk8M#zm4XRwY$(k@aM8Q4t*jgW|`pwoO*Zi19?c6-9y-fsP*ArhLQq{tPx}YkX~y z=4I6wYt9P43b(<9;{B8RiM!6@I<(Gq#~u zX6k5-&e3vype{; zP7mK1Q}6y&(35gq%c?_L{jU;X0YPVS8RoT_Y6W&UUHH_&frx~}_`*ru*?{|}vz9-0 z1nNdF)z;Pu2@3;hNbmSKf%@#cy#fmjk=o8qC1Wr1Ymo0`V>6>qpdJ_)Xc0UtZCt+i z)5VYK0)O#u^{1-+DC6?%%^7mO|4O)Qe1tem!p_VK64Z?t^db$}etw~88g&15+bI`k zqDrD7rDr(E3h&+|rj2RrUFYLu*0U=*B=>^bqFQN)?lBVWl=!bS3zjJ?U7c*XAsRK< z*SpU;cJgP1+aWy9F2NdbzsQ}T*a2MwF*b5G+(U4?a_reWeOmOl0Xy|#q)}W2DDVFk zUyVP-c!OKb^7G%4 zw7Ffpcrm?%8sk$L#}(Va(+s0AsAi4zpBL;B$bG%f{RLpa2-O^ZNA zw8CbuC0kLj`;hetUyl0@!|9RO)KumT1DcKLw0=v8+2&?Lt{;S`mz8Hdgk*axr&{PX zqH7Pvo7nSJ-H2>=1d)e$N%9hfRm&hyQBg&wsb;2LqIGj~^Hv_gB*Vk|=rv1C>jXiq zjn)|a+q5sx!B}{Hd$Gq(@!$k@W-y_hvMKS+yV@V5+g$s8{sdd;&B=I6spzx9M2t!{ zGba;th;;WZV+sCyS(b(4#FFk%5D>J(xs4V(Tic?NlGPj#Gsr2pJ&EozOmE$>@K6S8 zIb`7Cu3>MR^si?Tpt-BQqqC1WUW>Qq&$|tdp13>kPR4s0okNmt?~p1#f@}&9chB(S2=253<}GnWs6 z(q(XVy2$vO?^mB?d@uLlZfIY$M{km>t=&SuIN#KlFYce6^F{s?k7F@T&RTM==gm_8 z`0I1_+ossNC!HoE?Qtjt>TmI{e9eS}Z63F4)15naK)2IdhfVx0?V^QDsRNE+k; zZuFj)5f$}PNa1cKx+{WGm=)BQ#6-Siuh@fD;nb6%d32j?!cTgmBYRom%-b>3mzuDS zw|MZS6@~26ua9rha~5xxrTUgjs+_v|?9|kKd3hR^=qGJ@xzOo7@Uc9iGR6{Km_K2X z{bf5I>8+{FAo$4b5qKtXa&yzu_z%xnfN3)lV6&I0^y}9za<}-7Db!TekqzJdmkqzV zUPErM=EZ3TxOa7R)s}pL8A&QTE@momI_COCe)9I+k1Hn`rDvIy6$h!ZwB&1QUt|dT zw>|mM2PxE>P8(C)hA9kS&+C)~hlLdwb9DE@e?5r`tD9S=7vy(Xg zB(qP`(ZR@q=$b}RK!EJMd$n-gc_uw1>rOyR+y?fqk_f9sR3z zxpotp<5_fbj3f4b?V?r3q78)u*|y@rw2rOe=t3Tu^SvR15HJL@B34lG^o1Hgg;@z5 z6C?Ww)D7J$_%s2ALfmBA=a7(o$4DeRckUc)vhf&*tAM%y@8xqq%J2^qCO8jDXyR2c zHT(G^Am4J0i%Tg=+3Vo9#`)zO5;Dvu5r4~^|K;CRZH<^O0S-}NBqEPa<~XQj$oP5p z2)th5LE__oE#x#@**%Ab-o7epA9aBQmST8iVTgXDl%{zPxusK4Oh$Ha5KJdCuO|g* zCUlHduMPGFv~fS`UG@2cR}1^V>!}rPt&L-Er3RWVeWx?-jqXB!5kNPHIuYHqK(=ze z-1EhK8anwwMzrUd;Ry)HCDH=sBsn~YT&{Z!m~)A#K6qolnzyAJ^bqv|vq%g1yLVqM zxg;xYbz!?_lP1|%5JDWu?8%c0xVS_4Pbf4nZO+pOjtRTQ@)%snIN5e;7^TE#GljRA zNC_U-NQC1n&Tu;d`Vr7)aszmdd~|$~hgMYR{}C4t5Uki`JZXqO zhI&(Ic@mXpHaQy%ywmg>7&88(`0%03<;n`4!I~Nms%&tsh_cq)92^RBa;^cLV`cSQ zp05FKslaR?m68DjC@hcI;$p`~kK7^MacJzwWd3zLDJAW1yN{-8xG^Odt;IILAuM`2 zIy!p#Y{T7vWiRy3Ivn3x_i0%i$~~BKGs`?+%owkl+^jPRAwX3q_%7$z435^B zfq(^8Tt#wP+Be9Q#L$8Y3@L*m$MsYR^yJ*kakr3{lf&chu2%9e3BE<2eN_nisBRAR zMkXW1B=X%>l4J`jqE%gr7n<1Cjq~&K(eV?5q8t{UC+6nn8?=cK8K!Qw_=|XWw@mgft(~lZAWhh}8vk&} z>3Ns8ehM#tMbjVK-3;{pt0MZD(Ez0ph!ll5wq13nJ9411q^8pVw(Ov2R=s}mQCY$P z6 z)ks-^SA~w&d*u9cPRu~`)|RamGWYF0kv~U>k5h;E*g`jV;<6;qPoNJ8&dm{J47Rn! zC^5q`nD#-0)W|Wt^0t|Kvgb??|KjrIH}(p&TA4Q+J&hBGPF{&pPyV4lc}aJ$DoT} zS6}}+FK@lHR=M-LOm_4+MFpYv%j(7uB5`#sw^#?eQ99xVnTD2<-G$o^&WAsj3bnx- za@hoigFN)OjJ}J&f5!jiuoy~oqh&e&loEXxC{1mV&_48CXn4S8U|?Vv8B0QUim_KJHg zbsZeGe&m@z7MG-aO;~r#_dtwKy~7f(#C#5p=TiMRwdAn*)1(oY2MBCGB|G7>j+8?K8R?Y+*r0*=;%@ z%;A|3Hw3laMqXU?0wnmoJ?`x#*UaRyho8tj0{&0G&%JT3&XXv}rT++weq(y)ENw5@(LiV@>U>5k z>c5oss^)!o>e*wYf|d*iNwcA&q5sG88KJaTbq|3%F4EYm9BB|?2!g} zthrer3AZAc{*v^Uj^$d^uC+b;vn*f^6-{E#Rf(2*Dn$4osH~)zl-A&ks zqjagC27kgK)#uMoXk)IdtUv;It>f%_Mpo8@LC7-vIgDr2Z;yEV1nb1KyUo$^(cliF z;)Ud;FDv~1NfVkH8e2;+fmSy*64CZ&{ORN5xudhw$n30S(D z)L?OF)CoH5%o#QJ(0vOqb#gt7_{xyaW9OEZ^#e*1@_Abivge#X{El4u6dxT_TW<}5 zs8(C?3~}##L2hm`4>2jJ*v;{8P(a%vT<@eNiko6$XqY?IMgL0gOq~tCz;sr;ZX~nC zvK`-Mv?mZp3^V*DO@Ju|dMVZ{ktyq56VYZ{4ezu}VNCD&T=5b#ZD*wWXOuzsW1Bat zpn&I}+zfM)(M_8xbaWo?9U=Gu=_AL@1N#mh|ndN8#8L(JdZZKqY&f4Cc z*cYu7A>Ds;CJFYs7$#c&1@9kHb`uF-F>YSXEIp zm!NAw@R#VV9HdE`Mhw*dL}Vhq)z`P?xwyWKam>ibfF4|#2WKimBoYQumtF7?*O>lg z=}f(P;HaclMfp$^7-$K|3}x>d%@eu5*NGqh?26i2P>Ue_UfGhNQM3}^wiowV2p(@i zLBWnUkNIG3R#w}O@^F6+*K3e!``*%WF(dStEx(w3)mVO#qv~G{zzctty}fzXiH1`D zz35cgN*ULW5B*-ga6bIwajs%mAEnV{zV;o3(aTmRTOi72?GqwF$8`EIZ4`cnkAQ#x zG$6{ov(kk{Me?N9lHl$#Gc!9nIl(JIz!bO1&1X-fRT7;$_zVmf^1kPKynTHIEJt4w zMYfBJDs3R$$=-sg_LmQYw9#|x;Ol8Ba8nC<)8{-jR!qwl{UoJuIidDFgyY~GCy2ZN zk0Df2IfP}!o~PWv?ZM(n%<4ynn_=J-~hGN>FVUf&$ByUFvK;udyNt)KLo|8fK@48*V0^p z`*(?6xrx2Fn%Q_5J$Dy$Abrs{-alp&=9GnnUnC_>a_@`TEe`JQ%w}45a0f+2`DfwdR<)+=&yYJn#^zg)k+O3n1stFuk4hsia!+0dWohbxhD&K$+0*2X4XFX(LA=>%f zynGvs-*FJ0p-8pL9Ixx0fP+RJOt0=-sgX0n`dyMu&Y-gdgsx7kLXMMTPjc{n?_Bt&3igd>!SEct|MDsynYHo zUo})zYFpk|PR7w48^c zS1PiV5=AzJM1?|VAtf_JA(fF)D2hahtRhlYA>(_Tm%5+(`FuXV-}BdVhwD1e_jt|Y zI9>rDy32F0vQB+bT}oa$8I?qTKSJXJ^9jm*dup`#;0ax{vS`BsB%8$ubqDwzjO?F@z=Km zR?}jW$L5#%CJ4m-lPG~IWH;E5fU_s-0S?g{%BNQwvox0kp6q}EfQPfF_)hX6&A?<@1JyHyt=rWk25YpB>r2!2w)FR(}57 z_AvQ~ta(zy5<_)|%W_^)z%ME3-kPD`Kg+r+MmJ4%ES~FLsK?*0r>%(Ey*-`!fC+Qm z;Ch-%tilaEf=PgT5V(yM?+Q!C&tqG*2=6-55oek(HsAT-Z|X6&^qertxi|&?H+*Ter=suRAH#xk8eM70*$<+ubGIvvp6*K5zakBA3|rzp*+9rwbBY=i69t_4;V?N;*U z*Q{7ejz2@#`xK{A$*`W*0-bDlSHPo<&sd3~_Ykx&{jSXQs;+^7{O8TmEVOIYtS(F@ z9BMsTY#_M{z%7F41q@Be$TILppuDG}1Mt@;r@kMg;>v*A22=qZD)t($4XSJXq$uKR zGmV)qc*D^V%wtXhz}Y>w4B$LeDa!KV0PGARnViJtwnJMz$X_Q;UFAai9}1b^cTf8N z*}Mk;i4}#z-T$d!ZcQ#p?4@8sd5wYb_z?R08rD1;AvY2G?1mHC(CG({q99+#y#Y}K z(B|kTcDY$wbMzbe*+I}`tozA_#>PE@agg)*(_DW;>LnG4P#YyOGSY4O@6P%s_IErK zDz80&()gmu%?t+rKAj!X()V%t6oJ&)r?`Fl6R4g5W7FCfXWYrg&jg@UgE6gvfx)`o zR4WnL#YzS5(T+!6BVht8EG#E8-ep}vrLSW4GvOy!4-e;Amqc@`?v18@0}PEz0^|SD zQg^n~5a^^?^#f8QYXj8)&!p41seQkqVoB-yV*ozAj>RU%$LFGksQ8GH_5e(pKAI+dfwD{J`1;A5(lv^ZkuwyceOYBjHFzy3ZmKmn=>J&aAjv}QwfbIJTbQ$5)&Yh)>3 zeE$CZdju47-~0NinHqq!pxZa6s;sO>L*Qq`#q~$&8-euq^Yw+Y({TZt;DzbS0(&wI zcON0Js%-!NSk?L>Nu&#a{4tNA$45JSWA6*vWv|`%mx<@hagu~UH)|4z0aPL%`)vJ5 zuVy94OP#DYZ0Mf6hI-!(&QTH3y(dGCh=H?oiy_4B%8DpdX>a_V4ekG{bHZn=HL+^V zDd#ne%Rti;d)0C|E+pOZCW}+NZvU6JUuNljJXCn1u;D3>FM`&kfexGOO-nyM|MBs! zwO&O3?w8%Ys&>nbjk8u!$Ab*dE;I4|q=oER&)94Ns$!;5p}L{ywc9f8_4~)Zlcopx zo=dQ)Z}D1_F+O^psEaa_>!Mz3qS4iXbwlzD;!WIb72k=l&6^&}o3Q+g__uc?h=N>b zoWDXJC&npasC<|~?NC8ZuEJ}IdxelZNTIYzlA>O*;&|&ah2zq_18(mQbx=_c87AY!nXEr5P@|!CkZ*4o%KvudaR1))+Fkil#{VAmZH<>N&FT|+^Rxdp9?~U_v z_Rg{>dhlS~;-h*kVR`*aw*QI^F0}Om+R}JMynL2Vw(28=@SO+o@vQsiAjyC{bP70~ zfTI6`-1-iDc(w(- zs;(EwY=$-pc_ZikY-FX_4w1Y=O!<7n7EF(jb>>93$f^nn-wG>J>EG1Ud{ZTG4$;`G z|Mw^L!OdIlY&)}Q9$|;Qon59Xl917f)Kng6e)J<@A^7?j01Y=oX8Kn)jw3Eh3i zQ#mw!Ir1=mBc}auvttD+t)GOS$LmJKE<^7MLk}!Wsisj#y!L{I=dr7TvX2<^%4Jsl zxwV}ZmRs$1SIA^_`VgzIi>N78V*SPi}gP*p)wPp$H{g{OVYP zJ$vlC^k1D5eg?6P2=*^_34uGwPyeFcYgUr0OVjvrd%>5yHx9K`Vd%zWTcjK51}*$2 zs@dtgoPF;^`x8~}f3olAFD=Z?Cse;~tt*UgA7VJL%x`pVUFJ95Z~UKh^q{qK-x?vN zJFC>Bz{|%s>-rXzjOvNy-pWs|>A3s=f>;R-_e<->Y+FH0e-=dn| zzO8iPKN=-lz8Eu=eet|3pL)aYd-R+&<(9D!QrJA}S!K4%+<{YY#;eEaC!S#RXohZ(pJ_%|* zEim7o6#4&EKG@KE)Y?aoQ;kkKH2FO#C4eG+=D0enj`t;nMHh8~yD5C$chNOQI=QK~ zcJQKnw}S7)?H{f&{V^X<2ZV)3f^zI(Uf#v=bC0qvubQs6+1o{dj@WG;lRN&S7Lf)k zXjs%r83E04pogxM*NGE*_U_Fn%+ujB;nFvr3z4EgE%^>#R}J#2ilxQht#=Lbt%|f~ zoN~tN2bN)pTf`#Iol7KAvBMAe{a98 z@<3&J%4Ax(`MZXynU{>LY#W?pON$gz>cT>!Ly8U2x?vF!&Q4CAOei~Xv9P3F5#$jN z0RQXiZnZ@-oA?yy@`Aq^{O0zqQ6-&qL7a=0n%}4?TkbQstyE7GGFuOw9T@L~ciGi` zH73(St2OnGZMl0*Ep07oByYJY3Gc&C~hmukC-U(2yqpn9q zMImY*ip$8NK1A;f<`znEP)CIgy4`O0>D_PyC54OCoWu&2Hz!*jAOrJ#y<(V_jWP z)YellT?5r(09Z$}q3r;8NpJhk)e*Yc5qV;m4J2kMKS3p2!^nPBR{-L>#4;Y!4 zV$j;S7Y5*pbSriqHQD)hr>pZ@nTSI)Wwf&TsG^F}Q!T63o$o}1!(xw^S?%b{@{3o{ z8fcOY|0G?+dY}CExoDJrmZxyKnj3PlVpT)-?vYQbv9Y<)TsyA*yeyg1Egy1{4lIK* ztA+7;ZnK-j%hFgSEX`{MENRk@uFQ#zW$q2k37|GL5BBxU={|mD3sa_`?MkZ%vp2WS zJx=IZoEM)gnZJ9Z=)Qb|J1UE9s1Lo8{yZ|GzN_sx{9}_5?ng$l;rg1%RH+nG%Bj3E0ku6H4~OAKC(1MD6&DP7NaB0A!+9vL zF+SQTe2m#MPb5c2*(}EUi%Q_mpoiAi#^oKQ^IzKil9rP*ZO zh;@Q+1tf9DYQG*56lshbF1%^kqAzndW=Sklj85ug_Txvls3j`q-sTJGv2~X;Sp2U| z9XhruI-#!U+w-53Sy#%}XSwOPT(y=d`^aT5bFbhqbU5^rrNfhdj*q8x$3J?6lmd3v z(d+V;b9RNLj~-nuznz^8fzfQq+|Wms5A)47h-dxxTlM}qzcbbw9H+H9bAM#$*|xn2 zr4yCP(R6eiM3ENITOlfxK@Yo;DrWlVKeyk99YS(Xr%JC(K9&~l#cG^A@We1CNN9u} zyPI{s6)ATqD>HLfsEVUCT`LuqYah_}Sc^KR)0>~y{Xk`J{(yYk?7GVtoqm1ba9+Qj zE9J3c$CEG3DU(xO#d1X;*wcMVv?+A z&JGmBH+eUWbZeU92>Yb$8~Z|z6xylSesj;wg2{?&mn~fbG`kzdBQMpv-$?Aakj?8G zyldAkR2Bl?$XXwQ4wOCMMhQhgHG$y|4KAdJO`!1PzzY1d(DF_s;C?6+upTnxs0lR8 z1?U>h0=P}6zQTAlEx-P+Zy)NrkH27MWvzL#-PnZB>NKxOYw)yWySE{d82eq`sPkS?qs==|h9D9EZ z>=gV!VsIK6@_YTDuj%JfoPx!vJp~R1Cx2cHHuy(gv|@@7~>IbcI+(1S4l(^uBwUna91oGvZyb2fWr> z9N+YA=iR0O91GHT2PdEft0wnx-*i&%eKrabDIEOt)YJe3+qXO1q|p`U2^3z;=Uci` z`BaoS`Fh5dq@;W#;SJ`EF+4Jvj2|1&2Y6+U<-CX@lOxVtT1_Kum@gNSN|05`M6u11_B{)!G zwSbWnQdc52$}vPDQPqyT%g0F? z>n;TONYfbH94}TW7E|WmvIUxpX_cqFtDa7~9FM(piICnIF_c{BVPW!dS;5RvskmtI z_Esd5%8c4)Z;8$83_3%AFkpo0a|7RN%z=vTMDduHH~C_#Ylh}ziB9|w}Mw3zKSSwxv+(bvFJ8CRl9^ZgBGOZ=w~oF>)KXtXJQZcb@_dZxI(y-M1xLu&K3BGr*^ z0J=H9yjpue+P;qA@XjAStf?==>07kXv;NrCb@mh6-SuzbG@;dBN>kjXm=uWz!xV%i z6yQ@E6{MsL2MsK%%Vi#%tXXj73_QR?Dm+bNrQ_u_4bmYvY}yw$qU~|e(6I6zW<=N@ z+~Vfw_`tO_16kJ3eX8E08;-iUxF{U!Dur|a&^X@t7(VenXy!*RVjF4q$%PL+i-POV z!&R>{2k0MtuJ@OI2koD=h-`ek`an?FI>+CjF1~yBE=AV$4JhQv;kXrm6K|7~%TNZ3 zU&`0;ih@DVOhpjHPSCF^@o8;s<>TdDaq~R%i$Q7`t8j3+I?>hAQklY?5YE(cpJZ8| zdI&UefM({Q7=4_5s>lnk65*@$B!Del%J$QD2X>b|&;x;T^D(b><;}Y#mFyOi4qEAS z<#qJ0`=0ai?LjQUPE{+NpBGPXJJjguUSLq3sGoSmL095|i_D4&M;Aobjg8gMz7&%b z7xy}O^0on8zzaQSZP?k{ckZ@xcDBGBK!}1_7zmfzzraKuz6{CJJvl?I`2QJ)zjYM$ zPd2M2=68Uz3PgImpkt_t>s4O=#ijV;iAAjr`bZKmq9J&0%GJ?P;H{a{_P|8cndT&b z=>w6_3Z=B*zWG_BpVKe0K+><(FTh-n_kz6__dy}(!#);BUfV7@^W6^cq2o?-{z17s-S0184 zc_@Dx8mY-kEi$d3^}7iKO#eLVo}4{BKYId7@)h%glG1PMo;?ed``msMkQ*+`2q-{! zd&?~)r)!_yNWWM!JDEN@a$b`+xhnnW(WAwNKIz)YP&D~+GaMJh$aeMztBP79r7dS@ zByJtphlZh%qG`X{H%skHQVCSldOIrSCGW=ej9V&mbSAUMw8LoPWV^D?XrNB6+jaw; zuKtd6Zn_mbazjibKBp`k;Pl*s7q84(Csnwb|J0s+3DXU2|3?llE<-eUhtH3Y1AFPc zdWahbbN1+|>(wXi2_IQO64ndcTs{wq*o0Y5Zf+Aw3{#=yEzsnZ`#h$*$Iq72)QEeB zAOF%eltgg&?LZru-}GWZf^O}X=9v4S#OF)4b_gF)ihteNxl5qghbQpO6taR9SC|ZX zsfxu&?OSJdS0WV!54v=NpDQP2I`!9+@m^c!DKtuQHEjQG)x?WdmR|}#hY;JJTRrzo z@np%0`rZAV-VP?6rx0%mccISY2^0}0BQ=g!}r>v?TQV{}cUO>>mW5-mT;tFkg=>rVgbRWAruRab}LG2rtXAeFd4e+df2Vrd*&`m|wSK0d=gc=;~(xDvmmD`4LVL z9ZUR!tYNvKjZHJ>>yuy*k429%CHndKH8Jt2=Z1dWBE!FnhKee*z1`et4pOqCKO5G3 zdBN2D4hZVz=g&Xg+ihTwBJX~%L_#dfRMGVf|JBrHOgZSCty(EcUiLO3^G{4<)3O(e z;;K%lI&RI0K0`gV=6y=EmK z2=o65t3;k1dw*f+nCJRzE|{@_?kD;jCr&v~xhw};-iB){yjq^ZYD^I=TwrV1_N^z4Y{+%%dAdVZmNlmMYoXW53+r`dYV17zi2y&;{#e1#pxF60%F8k-Z9g8h&lvF5igM*CHE=kx5(a zfq#I;5y(#+W~S$dvIUyu{)SSYu$IpMyATezoi z0Dbl1xZd&q+F^>#kqJGE?R18BfSf^hLXLeNLi*LmvmcL zs7Mf@gt-n)2EGP#%Xq3iU{9St--s%`5o@3`Cy3V&Ky-C?#}9#(0E0txpBus+5~*0s zR_X-U`Cx3`+Em)s-ma*iu>XnQI<40_uhq4+X%Y&MC+qSf3zBBKgsEkaPb0sv?s3#^ z(GF^S$dPBW zB(-nQ$C#dEfm;S{j)jZDQb+RH5s^*Gdo1kpG)8XbD;TmzL+^r)&Mw2bDd{y+N$q5S ziSoL&?c+UA=m&at3yIW5_uxA^nKtMJRB&FhI|G@W8f{YhYk!n^&pHn?a*hm*j$Sx_ z9vrH*k(xO8Fl9iv9Bw+aw4zH|$Mwh&nQhzhva{`+P``LJxzg5>Ha9&bmx|P)gBcls zq!3f4v?y#j-xHyt>f(%jm%uj7TziOknR4DcP!1@x2ZZ3MXc>`k9{w1^Ax%q!NV!%; zrF)#3k~{#cnOCPC3GqTqT&ux*=~I>hR>8}V^!4*+?}>q3tl|4|`vDCCz7`e{43f>8 zH{*`GN%@U-Y=xZ4K9zq0q=a&)a|Tw2ts3Phjf80BF0b^c20??WK)663ZK_icUolbxYp;`K&@B49e_y@ySz&rIWjQ|W~ zXJ-f2SW{gViUOcm++Gc+I)Kh@4oyY$fv6hY&B*Yy?*gWN|L0WT$6+y>PNHKfpqmnJ zi(ds&(9KP(Xt&t<#024>JBrN*mA6~SRYwUvm(WdiNrV@P;Z$mebi$20?zihg-z1{N zy#CZKNWMY9iJMnQm6nOi!5NU`%6T88P4>r*?e%qWbxkw4D#&tq*IhJn`f7+!_fEi@ zyW!!~xm4u$6gqs`hom3Z3*OkRO{ShW`Pq+ea|_WqwqG*$?Q;8ly~jb)#%k(i?x^a8 z4=ibV%9iLV?M@TnxNB}|`h5QUfkBC>U4>%XdjaE04p&i8Az0mI<=2%?9eZEwTFfUi z@+S^L*pi1+FLUGCHB8Fch&fvJ^^94ja|nUFWo|z4@qA^^Ik2H=3Q?Y;(=PQkAHz$! z{3qCSkZp^z9^*uv3SysKw`NdIa)nMq=6m3wM+mn zD%;YztVE$N$2?Dc`^wY4SB{|_o2zk1*1k+hgx7trL^Zf^URP z_N`;TY4SVj`@O==5=~){Iy-ofOCN$uhDnY31HjJWT7ppFoEU2{^whDV;1D8$t`(8U zUJ)AA*3>8{DV?wFgY!)AA0N10uV|@ntdLU|ippZ6CGAU*B1T8~PLsXQeK$;|4P!T6 z7emZq`&ay%uwRmxN&Z7`iNzO@+0dr z_IJi}y=r!!LU_Pm!Jho#>b4_7K9K6*4L4aYdLl8iYY<>&jK+{1$DA?fN)`$$BW#Ng z{e6wJHoVny^LQs}JOgsay(#Wv3t)P#^8CzrnRf-6!dS9US(On&#rvQG#WRtz#bcfgGGl^7-Y%=IoGE{2FC$^2_tn5gqceEc?d72F*|+Tz zd}~ihwtZYPnlu-D;+RO#22(Aq@S>v0b1Zy9BnW!5+HtCT!#lHYJIuN*yX#{DrXEz= z(Dk6hcj3YXLi;5uDrpenaX>w9m6vCW)I@4}p6iS_4Ukp@$)i`HQA z4d>|o6ldDIOFcrrh@V#8t(LJPVCMMTfP~)Oy@H+ab^X4c#||GBiKP7oQLE4`U#f{C zBFv?+J%FNsQ9PXeiHt1muEVdaDa%?C9@|z?*2L3Ao)$I&-)ehMT$C64Qm$R5czc#k(5~382Jy%EN>G zu;h4)?1&FY+zgnv@_pm7Pv2cjHO@Wc?EQp#u*LrDr#;HDC&Jc|KZm&i>k7!wX5s`N zV0e(|gLB<-F!RY7Y`~(9a(ljwYJ3k3f{A_gv3`;DDNFOtVaG@=e5#m-2%m5W_GU?d zOJjbU1MvZdMfbo`57Rri+StpdN!bu1}-iXP+OPMV0TISY%yrto}&%% zauVc|C0ovnNd?XOuvUNS2VpurV-ZJrp=Uqw zm}i1-Nchv&Aap7YM|l`B(ev{GthFHkQjYfZ@h0pxV*MDNOBGIpLJV5t8;nn7omq4S z6wJrs!babjADgMmv1~d<3_MMZ{lA0f74cw}w4{AvT!7((_=G&Q2PJf-=dm9_mWzvP z1sK(kmFleEM>e)#gwBl=iaS!Hi` zYtmp1Uor>yrwYbizO1e_7KfWucOsQLWN`P^F02k(A1X;h?*eK@>A$#Xii&x@+p_!z@MJI0!<(xM=LUx;FD=$ys;9;VE2)VBG|M@-PxhT?FPj>t5pk3QYOKv;#ICPO}_Wcekere#lp>Pz$SI99T%Qh&E`wH?|_0y zHu!XKN+X{>h0x`!PtrN^*l(Kd&l{)(tFbVUw>`7^vQKPKs*oR*OigiF8T;Q~sHoez zCUOOzyc*L=1_sR)$~-JGH)&p9Ti^WR#j1DW%a2XfzFI?B?Gz@5JyX5#I|VHvgwK!1 zi)f`v>aVK?bN%_ON;U7g<;Ouq9To_Sb@3K6qwmIb8@Z@ymRD5!Ts`i>^3tQ83ZyS< z-)82=R}o(jQTWBRG3f8JQe%%*;Ewl|9^ZU(A$yI;Eu0e(iNDKul~QIU1$m!Y^dxbt zLsL+m(`d#A;J&vQj#nD4NL@oq8-XHQ{Ikj^+S*p1Dmf;c89F+;YC~B|+$Gpd3uQU? z?hCg_=cHseeU7GXGY=2`U;PIRJ;&DL;QW$B>}3*jkka*NEK=kB=$$`NDWm<4yERX_q<#_GZ^{%(<9*a zCLa!-_bZ4b#bqsqI#iwTB=IsFjeI!%$l$)DaWp#G{eEiK$oYtPsIQvy$&<1-si;a7 zMb@7;Vq|90H(|UWyL?F0Mrx_PtJ8>~;12|h5bf##qaWe#v~x%yC#yr^>5^~ zoEj^ZR;~Q`;km*7u&Yj-3Vc}8N}erXH`k;CPu0Fv))hK&6BE^C?R4WqW1^3KmtFTi zQ3}U>_}tuyrY#cc3GHcG@0f_qD%MuMe*OBRbuXv1-kp(fRx3rCiOPh>J=z?fDXr5v z3&qk)zlYMf4|uTr>`*KooP!%7g~&mE`9qNl%>l+-sxSK{Yc=B1wdb^PX|QUgD-UrB z`C_ANS8BZYq+^_*HxEWNo3{)3RVranVK|}=vhb|KNa^Tc!9dxY&F&MI< zLiN$6m&J_NkE{-3Uzg>nyToEq|!ZB;yeZ=1QYX*YeE*x`Zgfuo@Ui{mlDEd=UTNpwwQo6o-C>bO~M zS_$=|g^c>8LB#!%+VJUVf}R!gahy%a!XnSZlHGtTo0aYjx?d$T=;;>vFT4w0NDSZw zyliRyi)ym#Rkg(QvMmGFdUgXf- z%KU3~!5~l5EzQ)cCWRyEkbXkx^{sfde@`zeK-aEb^-QhZcc8Ct0>yI~`X!7}{r0guu@hQz(|1#X`o8-^w-hBDPn>7W z*v3^PpJznH<5N>LWn6m17X#IZ0Rg4WJYU;~P1bMo{#ATm^_Iv75?h+nzKFB?RSBcB zVW4m4N99^sp{SkioN77S5&cy>@x1FSRpE(_*mW`NGhyXI7S}U@7k!R4m&!$9N6-o1 z3gL+Rr_JyQgfsZjbMoX#bbr*8@n3xugM=Y~>6|L_aU;y}R!q}+el8|PXSZU(` zqtC*Gk*5fJ(uHW&mUo}=4Dp$w21NI)C+-#T0gqn(4dV(JQ`hx*^w(WH-B1aFSZ3Of zi3z}aB=+KIh)b9n(N}0!8-+=u)OQdMTqW+LgIbU?*bayo_dgBTzKu0?!_SHE#A$qHw5VC?oO-NvA3x-aNxL+6n&xyq4fNl=o37!|@$|7<}{U|J;vhfA_>3Q(A=!EoxyMXxToh=rEv^rJ$d}NLg1Wi)W+p+X|d=l z^qq8CUU!fhPkMM5mHVI)rG?Cwni{RY^jLTgVif}E`M6NF7oxMIZE+wzu%W5R)Z$E{ zq>W%4#?IC+9Qd;W$fZ&ECVyn94<cM_?k5$nFHsCA;?$3%K=I4t#jZa>6AeppKr=NYn`koP8hGwIJuQ5gU= zdj33pjfQ9vCZ1sMsS%@wiSp1WeZaddW?vw6kAJEl!YJD1ooitQh-fphyS-BRU6_xf zvJ{sOg(J*-zh6{jWVgHqBz;z4~7uy^*Js%c^F15I_kC+ ziWUzl8aH8o@JpmQb7khI#EQnHqyVT++-=GIr9X(FV|)b>jM88B)hQkqAO|JaY7kly z_et$pCz#ww6Mmz^Xueow?z80+5BN*rzke{@^D-Q{NV{tJ4^kywBEs%Vb6r7A4K5%3 zAW2sS<%PWo@xFu6^Va)a#CN+Eyuozdz~(haIGZHj`s|k`Uar_!+4IB+Bi5^-5S~11 z5CZlrTnypAR9y_s?$B#|rXD~UtnTPwXi~C_^ZmXmOC6A0Eycz2Ev=wF3moHdx>`bOBPyGV2G?M(ne;EkZb%15{C zM_1LBqRO<=#+K8z5@hAozSIY(=yW;@B_*A^H|t&+iWfF9bO~MeX3v`oOsey-HKDH_ zSc(a0BHlv$Cy6PoQ+_ z#JYa%g{K%pLpZ0cjOMTb$!nom?uEuD>q_!68jv(^Y^p(kJx9BSCQ9%fNS9sNX%_$# zLR1UqCUbS`V(?lPmeZFv<)U)cB8(m+8nst~o#~0o7}9>e9yhDyS(Tz%3ZYJp!`Hi1 z3CSI_w;3=jO4juYg;*4g^YBrktT7Z^sBg&@T{0zpd8DU>4Fo}WM!{LM5jR`%eFhXv86`{wV^2Y1bw z8S4I!{l%2=RP}A(qx$;ZqW+SjP$$>!C5|;|D$)mz^?3glWJy2_q&oPms?9LHoZqd& zZc?X+)&yo!7-?=~94?u+HotA0h1TIl1Mb}PrR^rhQ-?l9n5Z6)I#@pS;aSfeHfN_R zoVyl;`4%f5hFAQq35wDf>XKTsmz9;+zmTghnwkcpXv3eQawc@8yC3{8%t>J%=_o%X z8J_1uas6y7Mm@N@Hy^;gsffLW30cDP6f4@(*1;Vu^u`1qKj}ShGEo;-(kwJDnyL6; zqWQ?^rcv)L-?Sqs{=ACRQs*7!&S%f49N+k>{2rA#abgk_*{$t64;?WzW!3*>lt|U4 z3%)UAo{o55$<~HAFlL*HdR4TqZhxK9z#^xrZ0l{i*YTqG3$p6 z)NlNW?xKhupzsLat{y*i3P1*(LKg*q0R|#K#TbY{2=j{^tQ_O!q;G$%I*`(IYOXR; zQ(as9>HCGdSzNEuSL?*E4)3`x7##P=>N6XYzm9)bKRK#O4T39UA4yX1;9V5x@ele{ z-lLD`Q`lHK7NeWGAAg{jqQVg8`^Ciw8lIyHK#p~MQ&f&K;G67ox-!b^xjO{YHyt|v z40VPShn++N*(MUxn8qrpCHRBGHlpB1iw1RvF{0M`I75C9H%*6oFi@aY2 zjI&ODZOhWT^!~$#UyIX>sRo<3+-}v}(g?m4z(3sCXq#~>czupfTsp~qg#n%^% z?6r^1tH^zSADM3=_myL)v1h+Zt!q?6{jjkjl1_kBy254m&@X4bq@@_Nk^rNMs#uBGTwDMZ^>g<<<26NPBW5%ATRg|% zWVO=s#KP!ibDbjkci;9)28Y&v5xsS4v?I-!1P+}n5JO|tF)DLIsGjc^c;47}4TH-u zZX?U8qu3R*j@Zh71DD?Q@gpk0|3Id1Hwig7XnZc&m_U2$d>4EH|C&n{d+xje`3YJk z*ULRwA`IEhCm!1c5v{jL3hs{)&J1_HCMj-wWrIz|R-1Z*E90kYmG9(?RW zZgeZA8iycFok)Me7`kBC6{ z3g!dsG;&c0o_WUoTo$SlLW|erj=o1F6i|q^cfWek-lY&dB0Br~c|^>HSC%?s36w!2 zJoe+`(=5^*!&u&2@uq9?lA@yLb52%V5;cK;TDG^YHEa~9E5ymR%mgJ{Boy4#f z4#miW#A>mgIeP*lD3C^PZN+qflMO)W&@@I~nSE#Q(s z2Oh~PDOo!uJbk(dl<~|d3s=sr&DISMS%P>Lt%z)i!4*<8Ee=#I?+_?eE7GiP?aH{c zU8wxp{Ny%~F~KE?BVSNRq25=I_*B)0{x=6@c|&Wf%=YbN#@3GE=jVzp;KRfVF%0I(LUpYI3; zPl||%In=wXQe`H0A&Hm-@#_v_Ne^e(}1#H?c-m+aVYDO zkfi<7z`zD1KRZKB59Sn-Z$uE7t{~{n37=$FXlY@Qc!2kZS^*>BPAU~?xT0kG`ujD$ zGmK zA9yA_iCa5NK!1!3@e~mcV-pevr$>gV&F;>)Z%UkPd}91b`sl`OD}~gEEk!u2I1IjE z!J*LBV%HIwpI_d|3(qUfr7r%8RNA7XC@3h9Rzp1J(cYqF)oV*y@y7>wv{v2Vc;wNq z&B{rbWGvvzhVd6$Qkt&IY#C|ibZn?v{8r)l@>%l|(~)<#x`@BdOU=tW>eSMdd51oH zzVFhh>6+`$%Tj{oTq|~DAoUF5Z@i-oFDQRlT!lfEOmZ3r!?j-1opk^ocz2>xdDAZ zP{+(9RunL{+=b{XkcrBIf`Hc9qxp^2a!FxfGFXuy>On>Qe2N0uTibF5Qr5Bu$vBH} z>=Jlb;+*@ep~|TD<)F98jWFfCzcAAiDohjf$PACuk=F?21e}2l1GyOc`u3-0c*7;H z-}hb>9D3yE$ES7c(4$APqUhr^m|3q`W6CA4efuo1VX;<804qpzA*}!Xy+YM*YRG2c zs|CPJ1f=JRYT(=yf+bmUH;y~tM-?FAohtwbg1nlbUJ_3VIRhiU9Hmh`UdnUSx!sT3n9w-C!$q3`A$9lO&!C17HgpWmbTYQRsgc9flPwzd6)5)|}B zKtBf7CK%HJ_96b*+nIha8^HBDcLot?3oQ7|P6*`90Rx9NCp{gV3)^)~;t~-K0M`T_ zSi3iHV2W)#B7vWSqbR8Ba-zZ7OQIHy?izJ{W8cyzgn)jS_`d$SvafVe%iFgP3JMH^ z^5Hm)>&&!cxNuLK_U|ShPILzTxEeCHw8;9nZ9{a!IaNnw=2} zI2Dne?JomVS6wvc@4j04v1-(QP+gFw2alDg;bO)f@A%MbKBrKkov!||gn>g&4;Y~) zfNQqGg5O@@YBS%kb!Bcp9L)#B>7gL|k-vQF$z%l&yRik@3B^mlQV;f2e&S@jWt2WK zaB!%wWWJjA=FRztnUdh&^0Vc2n2dn>s=d=y%|3)BM6~wvr(pg}qs^i^Jy6|%^XE!c zVY85PGJj#jlmgNZ>*Zt8!q~M#`T3@SJp11UTHl`+rVr&dIl*8o2r6G+Vg^V7VDmwV z%`Y+3ly5w?2fAX4;7JGqQVr9#xcIB0(Y*+M0qm1cT_`hP7swBv#tHIMz>_Uz-HKOg zj%|L~!Y((e>-92?<82e^uH?g-Mz^1{?}Fz9C8C#@(aVK)9C7rJpCdlQs%&CmDMT06 z=^IWrQUS0I-vM%&vH6lNDwr<5SiiEeSuo$ndMbJ_TmuCN6Z7N`s!kx~wpfyH4R#JK zc0o_T_dXRI_Z>-E9Cv%eaHL+iX;c$I?lj}7gwCcHZ!e0e4;rD|-P_l9D?cCj=ni0| z?_^}C!0}jNEG<}}OOHhY2@olwlE?xK}GR2>HR@O7ns zADd9zOIPlISf8(3*l$R2s@{~fZ@(;=)M@p4k4yW>>J?*hBdxz?o3BSohmj!*gp13i z%H$ChZItKvl-YHoZ$8+nWK7S)W47eJG%HW8#>MuXo*%9?{qj5|t|;`+QU`)$=F{t* zNN>St93N8fBme0v4eCfk!6TnK&mOqry_VV2koaW6F$6$vhnkvJa^{=o<_aH&o-$SY zgEjM71eML7cWduV0i++IicrY}@_F=%0~@T( zU8=l;Pk{X@gvA+k!)Q9aGa$@C%?XoO#Ez<^pv*%K0tjZqkQ~Hspdz(Yv32Xcu`$*I z7r9lt-`CZBY&=rSy{NWzeNbPB*VHvHQ&ZD|M)2%`c<^)M{1Z1i15gioLx=c_tx3c9 zkjAFVVbA$>_j&?%CYOai=RfaEO3iDpdVEvsj?v1_I+PE7i9b8L+Ww&LuGY~jMBtaf zBO@wv$jyzI(|xS+9GwIQQ5GhbkVNw|W<(M`42_Ja0#p;swrJ&D{rvgLoJ8l3w=D{Jf0n7qeIV{V} z+}zJ5MHibceMaJ3Nj=Z|W4!{k&CRcTw$|CZH`-DRvlPCy%Q>uc*a)2&sM7->1>o6^ zB1YbA+Y)N*!8rgw-p5mdyvsp&E|*Ss@+&MKRTy>r+p=^0dwj_+NH#Hl>)ySaJNzFeCwFEVr3-aJqtW{sydoeMFc)u@5rfEDN1vjn zh1&PK*RL<_QpVYr1KzJRFHgK%3}GK#o(BIK{8Tjev-AT?s{0Hewt-!} z|KJykMacZzOCJTux9ju-bSi}sb^``x5RuwRj6!K^%XA}3z{Fy{ci>z`0D`#$%L@n~ zqTn4fFHax9!swlTjW7i4DG;tGsi=|%f!buXY;i_oCz%in1O%`gFnB_g)8R70RR`Pa2}9#&S#vDw+V_r{Bfrknd55*K_V0*=Mt|T%q@h==-+uFhmA@0kb>M z?@Fu7fU;(%nW;d6Rm6SPQsuxofH$vy4Br%*3~Wqcli03v4H*RF1m_`Dza2>zyFqzmwX#xi z!1eIqTN~NduI(Qk6$aRWR1s;slh!oU*A^YhmL}Wu;j5x2AHg}p7h2DRX$jZ$Hiuj17<%U{OfP*0qc>C$o zn>R28^KvyoQLAfdiB0}FH3b;e*cC6^uyrtPm5R@scdcV>?*k8{X{G4Zv3p)9Q3I?h z-3m?vu@umNpw>bZr<|r}NG*{z}7a+g?hO|Xxf4QY~p8Pnpu4gU9B!q?2 z8uq5hempRO=Fxv4>_J9Q)+d|_tgNk+C9D*q)&}^92>^vE5N-gF3%nJoY-6i4Sb1^6 zF0#wO_R8|}hy9+}BTY-k_FpL;4L5;$=TpK7#E4STh@lJT|3zo0-@PjB>J>qgQqK^-==FnUo_Bw;uIn(H29+fJD0 z_O!ilZJ-dm>Fx%8a%^a*)N922zkfkmS~^Mo+#deRVPPx6fB8}Tbqqw5ylex=&TQGY zl0E%jBMXAfhFIr!eW%L+=4OM3-20j{XRQM9; zzZVXZZQ@;+&Aj`kq8e|{fBhyJi~n$yoV#sC*MIi^u)9NXmCPlK`kAjVhhXE|-Qm}S za~>ij0F_5hMur2hM9wFvsUhW!$b?|*R9)ZPMyW%@O}2FQ?oo6SvV?}1p(3U%P|0=X zZdI@FYVrcNtR7)LUyB1kNy`uah+%{VPU89);)$xt1E_anx*B|-rlwSm(8<&dgLvxV zC>4~?60B(D2cZQ(Cn!_}>CCy?u3u*y8Ie)!K206?u%yJ~F~;CAb8wtjS;gQn(h~M{ zKUAJSHleq!`@jqIHutHSar^A)W#yC6od_y0eS8TxbA;$EErtoRcQ1Iv1VOsbQGn-m zm67?z<(=_w2Ug{OLY;3)h5H50K9B`#p-KX;4h@Av8AxdM_EMHd&3QVuSLvhb9qL*8 z%2@9cz|AKN(fcOUu0Mdk06C#l14@l9McFh(RJn?bl;Q+7zx9T}mK9C8N@k2bY|thO zkz=m`)|$x+t@!uj?3CTM4VXen`lqv!z}x>RyN~%pbBFJUCF~v^wv=eTP+!i{LAc zj`3bX7Oo@0vHIAeWAxtH-V(+|8XYSPmBsA}IcEKj0X_9*;^X7{g`1=g(dmm8F^=U1 zF!ONBBd9u|u@)P?(fEe%Kv>0l*f-Gmwuy;dFor6fEvI&}mr!Hy_dJbG30yFICh36{ z?XRT(u$|`lWKF%Bq&1{n_MP(rJ#y0yzj!5Wbp##a7$T*;Wd*=@<~Mw`Em!3}#K}ge z)l>|_9izI~AwCkjU2!m?Vnvv&!t%$4bnhdEvpYF`#-iai=45BXzOEPFSCfm%1yRAG z-7v+YmsScQ7vbWkG>d!ffL9IRKDm_o(THE<-0tLwQ~pUHdXwCSuMDrUI@9 zO(`e}K9tF*R0o7-ac3Omvv|O_cL57b;5C5%C@wAr6DYHok$3y{PUKSt1~Fe=l(BLf zKDV>AwM9ea`*#~t)3CocL60C&Gj-f~3DQwc?)%HJ|2En9+1cOjD?cA9N4SyEhJxJh zf&Ft&dxDpC$a9kK0@55JUCTTXW|jg(s=%66e%P_06c%%h0>x)^%aP@VTkS0C)_LJQ zfzbkP9!3mp^IKowMZ_O4zRZ6`YzGl(p3U@faBxsiP&lW_8>x9YHkM~{!)_dueGZ&g zZEld81UL$9b;BP3EoiDJof^XsoXWRv*9EHLTTkC7CzvFum472k2H{ev zJ(#TVj;+|c*3LieqFstqfuMZsN61aBr=Dp*Rn;%?I6%Id2A2;!j4d#E(Ilb{uQ22nc z&=P{Lf&;WQLBAgDe%4xxf)h< ztm)tw0Y0YcJAn$d6GFRDiRCQtfO-DG9p0ms7+m3vsc}i2xy8lt#;FFo)BbiQ)*oQo zklRk^?B{tPDRjHo_~J!c!Og=~n28G2g{-H{BdLcQ^?#r_E&X9-uH*bJVK?hc3U<|? zfS{m7z%3D{BE&GtN1c|~aq|((W5r!3hRGD#N0^EPF3xX{@iMH>my*arYatO#YqS=m zTKQ>Mw-)3GH5fT@HW+_WzeF3pdsO0Igp?%LKbBbdk0ln z?h}eepTAY{kwH7;wk0`oedmpa_~6Jk zGAgLBezONxrFsrbijE!gf~lxzof6RP_Als%w+){+38&e}_c!GAUE^x4w}smXu5HQLD~8i;CN??a`N(exmIy#D;5;AK`#hFb^pPCqXh#yxwzcy-E!nOj~_c0U@t@9 z5X5;v&XS3a1sQB0vZZBo0fD|KDw95iX>ajFlpqCFq)oyC>EnHGu7al%=IoJcTIqft z_eb$8VD=4|=-5sXaq;!**6|ApZfWR-=ET(o+em69r0^6Jb*BeUJ~u2zGc4`@P&CrN z_Ggq{iQjei{=f_nkBW{=tdX+(6Ss$KbN>~$xh4#X{s$JJ0>Jrj^`R>GOrP)2E#=<3 z_pbfcu#k|Zrz#In^t8N%>sVO4;onG{hWfrk!1*I0wwq-99o{uq;R%B~>fdOy|T3SwuT}}4^46d>EzrEsWbA^1E{(Ttv$CUvF zAS#1Vr%Ia-tXt;;uv<9U%E}6MB#Do+Gc)0w6tpqn%scHJj}^e!!6wzF~cBMu>Qt7Zu5XwiK*9p7?->js6Uu~tK?fcr=pRi&O zV<2R-cg^yu?^k*si?RtwhP)W0N|B7rIfJEHoxd;F4ZMWbmzD;~%D!kgqn_ToSI2|} zTS?<0i^z|~b2=b|T=ldRZe@?8Y+(I6xMxRS664Lb)j3e5{4X?PMR7YzGo?qcO?l&i zbLY-wi!=z>ZV^<=^-eh;5fU8#lh<9m2m)|hatBCsD9gV2Xh)d_(=q#T5 zkGv7K`rYXSvyEbdG0PcnAuu)|t(vsCcD&7=_Z-W<6rrKIj~`uN`&%-8@8BW2 zmIM9$MO+st2;^XmE_or7(tnPf_DpYIRuCSD@bdG62IrEk8R`A~S1oc|BAyE@+oZ49%>ui|ZEs5BAxb z+Hw+!75hAlMUbeVjMNku(widJYOe1|XY}*{PFQxnZbxkdO)c6Z7wb7q;LbqS@F~Pl zH%muwF#0GdDuU1gJGm_$EEj4Y3X6%=mX~8eP2u^1xfp3_mM@>Zsi@%P;D~>Dm7h8#8!>}SuCF!TcHil=SM9C_M-b) zCKIjB&Com+4B5hP!c@eMqrRa*#I!L1^s28BgvJ)D50K$ zHnERjz!VYS`TU=MSpJOvAH0V+*zjG;Sv9%!@b>{o%Y^m_lmOL}xNgxeGxfJ6Xur;* zXL$}J5aOUbb+^stCv2;^&d$5aO8iB&}cD%r7 zKaNANBaxAC29~$ANeBoaxz;?k)~PX#U6K|(7;#Zi%tQ3FnM7A97h5ODU<8x{+b-S* z>8FS6DsGr*IN0GN`&93W>=5X4(dsbL$ud2vRlCJ|>Yc@9`RX$7@rlMwbH1 z*H5!KV5L25XuWI@?||@FZEX+`Y*ZMO8jLRPmBVi<`}JE*U(U}}JG+sDkx`Zzp1QAp|_td-*6H2IIUlF7lXk01KT#q{-= zxQB;g7K0MsMA35`%6B&HCK9OTW{hi=<#XWb@ze_;yJ=DmGNFFBCOt-H+jW%9Nv?~2 zdexYw{`m`M7H5o_EXc=HYI_Sl`T81K>eqN930{GS6~ z4K7am#KhJfTrEL<)=^W)xiIA?rs)<*{u7Qld;sh}gxL5Bd9pO8?1 zu0Aj;y2Au!6%@W|)vC9prRj6a=lI?5EoA>o^%fc^<^K(cr3fDcV($B?xqj704a;yWFXc3*CzAH6jRGQhN@fHVt|FAEk=ZL ze2ZSG7B3aKPbE4#z~{FApF(c*jF7}aXu7feIByUCsIkX=B83?L$KbP<_lxBgRQMFb z+5T*)pXmA5_lLQfUmm!G3rc*T^i+y@Umy4x@O1-B?WMlQ)n-@tniRV{9=v zO2QdY7t_q|1xTPa~=c@Qx0W;w96TCglz8<_j1C)vHZ{dQ*U%N_eo8*zr_C?znk37=hc z=(MhGuFYUGFfr56O&d41Ty*86Z3@tj-Fqzwq3~^?i}$n|3Px} z!$>Iefef7V+@2!)RKb#`-6YqH;l%J9h7g0vo^AcT0cO=Rs``e#y}3*|vf05FT=P$Pbrzo3q7f`4L*l_|tKuhMdQ!E0Nt?Nyx zoTapT$D^qiGONQ@MT}f-6AGRPdi?l^WrqZD6K~GyG{)R&GWXMW8z1B1gn&)-rebMmi#M;*p z0SA@{1E-hOm6a$p58DiAPMp420;^)DjSz9YUv4}l2C673a?1bdJB6*d_3tJ(pSeBR z|B{*S`Q6O)bk2#cMa`7wcR>_~6rlh*YgBp|{VFH-mS{met#fmZAejJ~Qde(iZdQl{ z&5UWL>-`B;)jB}WMl7b8{xB}Tjbf!zOuihHv{B{kYdO4ceYwKmNhNcL`^FuS zw{N3Zf)lD0IR{^lrrH?HFP=EPkd~TyEs5ug(2ifuj6OIWGtG1kJ4kkF~Al}n2?PnXjm=mV$imceNs$(;o& zA0N0XGaK}YUxMjm|8vgX&AQxiLcsiREa89$+bR9Ui@*eu+$s44C^@bt(<|7Wj5|88 zb5+ZQ#l(bE#kWslcG*EaQTqN092}fYjtZthR|fu$C0tkFF{+R`r-D#0M=JmT~>WPk9>M%(uD> zJGbu@_jF9tO4hD_v|mIdrtj9Ae0o5yqGVtl=c&7aeCq?l!z)&Oj?=RXyar2&5XCsu zq+{gN&5$cd|h@vcGPW94Wo?;YB)4>^-#H}?Tyf%sR`bEgj62V>h-jA=6@p`SdJ zbZ&A38yi@z4U|9r8eW7PN#Wvxc(~NjKC|}- zJ=OA`Q#1*8z;!$a9W`t}6%{{Z^3c7iJ+42)nn3T`ys|mTPYNkb6shzO_@>ou6=1?( zeF_4+c-~*+U$03mHArdZKHxe)K|%ap6J-Qq~ zVuHCyyk_Ntv$Rq+QZ_{al*_+Qo8nW)zvH-**I)71wXiB^wgVK)u!GEy@~vfvy2*ik zsx0S}ZH}!kT`NmPfqN$|UaJfim{5u45<)~M)y4+Bv@McHGLV}& zoEP~76|-F#%$Z{Rw3I;6h=5s>pcJytlP6n>b}%Rg2M4QOf~xfCiAdO(qb7*?iHj&p zP-lq{xsY`?&#U-pT%54ly`kY@z>CKvR4FfBg>lNzP>hf`cKa>%iexIR?KxOZY+_Y6Mu98wcJ8c=9JtA``P(2jjdnO}@D)(cK?)Uu0#aBqT&_ zYJcr?NJ8S_l*5-NQZ~L`1MEIOC72G+`Rq?)nLSn>v)`MzHS4}r zAIgpkTQSGNu$;W`rB4TVl9D6BH?nF@c0BcFQChonZs0z1G+3!*+8YRnTjfr6ZPs za%+~iLQ#t*i8vQ7h#BB)Jz#u8M!2*>RSU*yyPmTr#o z9;Rp_l%}LcP~wq7A+o)>%3G@NTX`$s^h~M{_A5H+R zZ{OaQaK(NBtCR3wMTM>#r^<6o=eg`w5X)e2@Yf^K)R%3+u)yx&7cv7-g4Z2N?~ffF zkKypYG46f$I(xxPzq+Fda4Z=*noJA&7(B#+zwVr>((TeagvUnJ#Gnykc0cdli+-DRiNI@}FC=Z%dq69z9G zKnO5yN6LAu)|9^x!qX8G1MZGalHoYoU**yD_4P*iS1KXFeLW@$9Of z+?grLiFO9#`k&!08(;JnKgcM5a)iQdiwHlH2oZfxwy15A>Aw6avHEX41=NF<^0OPJyT8iKJn{3J2n+jw1az3ljXh428$GJr97u^lMpe%pH@&Z$8O9-OL?FE&m}nJ z^D2KuPWUlZZ(?f7soPI{UmWS@k50@bF0UDznBeE(>DRfblX5Bx@_FcSQ!$+qy<{ouUV*6s|+-~u3P3C;CVL-PMci-em)WBY39Nc%}h$#IfEg92&>43W`AiEZS-BmAo=n&H~wT<6kdBcrQm zWNK-oBqy(EHw(HmZwl36@GMX98_z4$!}mwy5XU%V&`y`7GjX zd8&MRs~ykNzMpi_HN=F9O@|$RnuEKy5L(r1E(rwVc*n|xAE+fRUK|}8gTd7%myg9s z{=6DbpZkDL)0hPtWP&N+qNovH`&q5$OwR&w0NsUJ=EOjp!QK=7>_~Svy7VKfDuCgU zr64!D3yJfZYSuR~%jB8lPIXU;Bw39lS#No>x`zPg&?eNXxlM0{?iHyV$SO!r(3`)% zEH&_Tc52WX;B5a^eY@iJ_D6b{qv0Ay>{kjVx1=WtsixWkNjB$S)L%Gz%SY_QoMT+T z0~!Ak@QqvK8&;Z24nT7ZA?$T64UHgR5IF;eM^A!n_`-}3+u$AD!U0_9%P^1C9;6x_ zEhDHmD~Ce&%B&VbyOoZP+aM_~Zx$HumNEHM9AkO+H^QjXXacVO5F@r;U|Eqs@0Z|T zGWgBp>FvFe+ZRHwjhR(_y|B|WIqM=_gy<))Cr`TZ=YnT-k+q40`?kCO>--X6Azq;( zCQX*>4xKk%?Y!}^^SZE06@4L_9go8BeS#iHN#mPe6q`8FY+nj*{@u!9QZvDf1BJPO z*xd3=M|k_6w`r)-|2V+;t>NRxZ!?^kJUu>Mbqx*o&>`Ehr5B`KBO^5p4K8cJ*hh`C zoHCssy@~x)=QW@jn?l3i@%Gf@q25GO!BZN2)jPqOFF(mt_NZna28EcTj22KS)1hg0 zv_ZO9Z@*llL`@`TLR4Cwf5}LlvEdwiQsC0ZrE7Y7bCdL?Y&P!QUyxyLEaMZpgKj1W zKP{g>m%V-Kl|T>Qjt+m$Z=8i_-Q5%)k%?BNeHsG!=u0?%7BXrX$R%u)8`vOab5YJ_ zRDkr|(t$YQvJP&7pBwUtUXvSkc5r3N1(7a3-g8K=TUQZ$|Ee*zvEL>IjUf5w% zaJ~PLyZw*E_Iu(ct_|jrd4|Qe(1pr!0KV@{tM>~~FtKRO&7}f)xw$L^uV$5u&Fzr# zT*%X*jmS9&*oj{!b%!$ld#6rLXF+vGhCtFPRhI2)ETS6PR)VBwcF8A-vyFtl;k>%X zbn)_K6H#mufJxy*nK_$GLZJJ7RV_~6Tb{Ld{W%6j79=JwzM9=Dkl4L54G!NE$bKdx zagjG5%EjXuUx`<}eC7b4GK_AP)bf*ojoJ8qeNgso$VLWck!AG(AWB#UD+2R`<2 zeygmhIWH-Hesp>oIZjltfrTyv-I(xxj2^?(!3XekcTd3>qROmeWAcBVt@**w%Qy$K z`onp<&iifkD0_H(=QI6R5jCKtDk~}u3=I{4(&^`?;-W?UdvAuRv&fZvoH0o>BGFLZ z|8BOv`7z_A@nfw2Iu)Nm0r~=cqJR^GT-Dqh$uLHO6|bckxC#&TMul2#9OBrCZ*9(C z_&9dPv7R&0*8*K&#(fGNJpyP7$Qq9baqNytN-~AjEe16K+XwxbDAO3;rpbHn<Ep`4jk5 zY-oL93Tb9GSl`T3R#pZ$A^5lkCkKboK3k3_8T2=`ll`xb^OQ7@3k(WFfnJ_q1z%Bw30W`4sD>Se2E9TeLx3{yfv00+)YG}wFRDr%MFr&CLD;{Ax(23g2Dr#%#*R31; z*!$r-tAt%tbFSK}YJ6U$aXQVWU6YG*#-*TBU`JZt1nK6kmlr7Lf$FbtHgzY-a`jao z+GX*5co>hfGyb^Pzw1a2A09!$-jVSJrM`1A@~0P>O&QB2zHc`E$f;fN z7))kaqykwVTu1^R@4E|Zwpc@K0#}@-_dL?te-<7Rfq-%Ep2V}v=d9Mk&W- z$r*o(b~PC0pKieudji}ryb!Q_qob!E`S3JhbjUsI!GlN)-7LsN{?Jnsw5=iWyJTF& z-5(!h>OIKiJX7$%ukl&k5AS7B_0^)xd~KkxZMXZHT;87PApX(4DeCGa*Dry~ymha> zu?~PoNTR*1=TXgo)k8jE8)SptOLtJ@Q(mIorE+;K>ceA^?=Z^ci(e7=&r#LR_OwU+ zcL*;Z>rHa0TlCz$%B1Ln22LqL0qI_Y5q*zIHl~qH>!L`p$^Ivnt{3%W7&gbmJH1v< zA@UUafan+ZxvdhuJ$CSC)Uvg;u{mtrA8;ypb2_iKsF1=yR~Lu=DbT`OeQS0zq~q*4 zBKT*$r4#)RZVNPe_u%@1#ny?Vm%RSWM8vetGw%aahzb6a7OneC!YHTN+fHa|ZJiVFc>Vgw`*UAr6&k>ctf;B+^Y)G@ zIeqdZq|0mc`tTYy-k_B+XzpBpSN-|C~I^&~nBd}{!wOaK-M!@+yJ51r>m3bX< zA!AiYSGxSAXE9f!adu2b>|Oo_yl7($*taHadOYzb*2xpW0qrlM8T9U8 z>k?f8dj#R|*lo8pJp)we^ljD*m(-AB7cTG04^qR&v_r2$rqu4Ubo?@1WXw7}uHUH< zG2Fl?a54a#!RvbwwxZQmp*I)jUyz#{UV~E3+|u$w10hOC8`!|BfHMq?fAQUi4mkjt zz=h^W26~@)DtA|!cq2Tmn>adOnW|jcXI5|dSb37SMU1wuTFMNYAJ1$~Vsj{ZWZSoG zdm(vv2UI!+Np9jLmF?|%1(`6R0KCvUQo>@yZLR-1B2vYXUgw-K4S6wg_xywIq)nX? z4E#!dJZ1$^*Odm|9NS5Fc0GCGwn*HIr6ShjNY zip1H`a{hh?V%K@r*cSd((j62LJNF`TWw`Rk_5tT_I)yWAL9 zuZc7d?p#&LGWh`%CK!8w$QnF3cI)%FfOgisBUs-&3S8NrLRu%~*{?Ek3l}dU_#)dY2fQk7% zGZjNL-AyuV>nq(97!>qIc>_$59znOg?#mk0S5iKjWi56cQKUK#0;EL-{c8!+O8-K5Yttl!M*#<*fa?>&MA352J45uJkr4q8@DH38 zbB_1tP{#@MpTvYyZ|(n1OnxzrN&td>Jg`CJ8}>08V{m^;DGW4@i(-)V7y!;epchx; zNgl(#fI`>96FC);gQ(>{*29VQf7bGj>nNIv^>$u$?ycN{S%EJ*olke~Zt~)gwOPJ1 zSFuEY)V$S?51)pxv9gj+QZn*$E+*-UZgRkUb?htjubRY}ovt?_x++sJV%!<>$8oWK zIdV;XedCM&<|9!MpwPS;Tti1!Q&rXdm=h;9m$`=T(QENkze(OJYb1#xp0MT(P z&>TI?$r%$DC$AW?BEg?Si)Fj`H>7jhL`|OGeRb-ZA^qY%2}WD)tER`A8Xn5V=g-#% zHtAa`D0rwR#%eX}rt7Kw>zHR8XJWfje+(I-_dVLA)@;|+G%whfuQTI36B_YZ{I(eA zh1_g}q6E^`NrOG18ILgZg?sAtWFZ(_(b2{52HvwLweSb&;+8~$758BbO+Ev=uGJWI za9x<4-Sw02U)Ds0UjKK6zBiVHf#bkgbK?`z(srlC7)YLIkVe?vxi|vjbNj(&!KQJ5 zNwC?kb8lP5qHV(Dk~RZMJZTdkzn3%`Io_VU@^veRalNcjtpp&L9sLEO7iuLyutvU) zcm|>0oJ67m?F_K}wm|~%eu-L$(?*UFm7Ky7ub#R(r@W17+|~7Vkgs%zac*5ryk3TF ziT*KpN!u#;m#+M3SJ`sNvCubS_LCKdxcg4ZnYBZlHr3|eexn1a6GoU}(DQVS(?@BV z1}5cMbRG)iH*zG&bC$WES;f%=vTqUde0zPpbohdmHgJQp=tH4h@bDp^zJFYZex05SCnQxruK4wB{9eXtYXO1Pg;Ab zCpBgVZ<3p>6lt|3bD+-(GORG7`5#yzqw!;00=?q3g*lx3$7a5(&F&79@qvX~Pa8Bq zC?L>ZP4uQ4S(6Nd*p4DvcNyU@1z3`Gg5Ynkn(^wHDJZj@nqvf!rNK`i&w`qw3Jlwdyt8?lkfv>TBpO zc^fZHUQ}{n17RVvq>nKlgGWY@H{7U(N~#+kO-Y}99%^!V2plOHAVvUaVX`PRz+&R! z8OeJLUJHnnc>h(LfAXKlRJJu#Nw7gX=)p#vM@;(Ti$8+iRBqp!(0*@zBi0G>Rg93S zb5YEAGze8MgyrR;sB3Z&qR`An!XK`+)}5FnG_>JKaWXxWD&PQtL;>*lQ%j3ifXN#q=ds^={MUe+Nh1F?pT%?E zvvm`b8&6Fh3!i`<Q ztKQcAKU^`D;7f>f&+k}vsA=r3$54Z?d@CD}`971^djIdlpfirX=|71+468z<1&<=~X248lXp*jc3*Z@}Np%aZc6*ffoRz6n)Y57i@2#phAtEFMlb_b~ z^XnW|H7OCfVVXMnk`ztSj_Mi*=6srd1M?UC!X_x3<)Yk#ijAT1#Nk8^SK+WXHRfFX zVQQT7+tc`X{t!iEp87p!)Yri*G3Ep4u{DvBk#jYN#jW-Xhmo7cY^XpihT^2i| z*fId(OS{%R22fA`JhKOmeEyJ1z`MX*RqUy-!O+G)&WH}-PO4?>!n0ASyE!Cy;}M9z zAT|QH1CiY1(yQqXGYbnAhHzoI$BgYN5Td{~+GGr6Feig%G-=;gI!xjU+)wv(ib<>~ zILD)#;JoX@5s<1gTNXs~zBk0U089?}1wTC;@PwHaF+3OSJEAPf5CRb5CTGY1M0`4+_j~>x_Vwd86yUf&$qmS&Wb;%0(Lo3BvC{1 z8Q+Mx6e_jv+I@5(3O@IBSd|icqv8!VXUsc!AIA0qdkqU}7bwk@>am49{oSYnrkBp?~Xd}!?!Kv{;8AlgtNNl(yG zJW(tr-`ZLvE4=@urPpMcRqp)n)TXnoZ63Yk>ZHm_#ew+mlDX_XZ-4#z1q1RI4)!;0 zbmZA6Wvz!31E*~^__`@6eyFbUPDa1_-{6T%lG_g6JMn`PGRSmpmwM1WGbw+Ci64Dv zF@VdB-nQap&vLKLVuG1lkEa(dPNfyxA{=09Q;R9hhv-ZXHInv8L{7RUu!(cdmza;k%57m%{-}vVYI3AQe@iZs~Rn-nbV(M z*5bfbZmp^s1Pgp938O%jl$5UTweoMe{u3)~y&;v)(D|fR{#F8X8DRkE;#IdM82}ym ziCr|nYl(Q=)6)a`Gg@ml0sFfL25x}e#^7=+Wne?Al7Ybz3bwBE>i%%cp|WJ#dhc+L z-koInF;byb@7f>otAd!M>C?C&?+tLlCFxYoDf;hH@S?rcXKPkzmi zmI>9l`9#BJ$Fsu=b3MmC0vih-1pB+m-dl4$3%OExe+tXT0eQ zob06+GT(lfvgg1Xq=ZMOsTqvM7ux(PDm8|t9`hVpkLu!yC*nQ8G(S9t2F&qtIRE)2 z8jYBk?v*a6wg1rY!odQwe!Vl{9Gx_btmsNw;5Y4tn1IuX_eVx9lSI0WKe#B0>g?|Q z6gBWw>r1~T3*)8aH{Rke7#DsfzF)EaotK1(OqNRO1STPTdIzI-;6&byMv?ES9&GsZ z|Mwt(|6gso^X%^UV)$KbmxbZGiG|;0`8nHTa|TpxL}s(fcOho(Ig?{(Y00)}(}%PV zch0Q2i((l*JH?H(7NThWW`+hcXuB0U5m{X9y)=y6kqr@;6wUS;*pT$@o ztMt)eN`Ik?R^!>cFp%BpI8lSwxZ{GFcIS;j!SB7X7MU_g?r!L)D)(b{Be(mQ`3y=>@~$LJNAi)oNWL+4G_02Yq{Mt zr1KJ~!NOOcz3R6XGc1#1gEdYooD7e=D(>>xs&`CEq{mcto_B~ zZ$8Q_2>&o^#W5(9{0CHWMqHoa$6EqA?~sPj<}F+5rE{n?7gk*pN^)C6LsL;+9zfjl zGHk@f{Q;PkfdLyMW41|61hKrlK@|Xj%3ngiy?u+8H+C|B**6^>&Tt+^j|}6#pDw{g zrmZ}8d#;mp5%LdGA6$q*)ymQEK~THLLRYd7aptRFA1{BNl+~3>#K>VV*LF#Yi--E{ zD5~Te39Z? zi3ahT@?dL|1SV@x*@;j~%vC;L#h5B9=^A15aLcZHyK=WHKaV2smbdVW=y00W5D5s-2{N`O7AW_W6z9-e^zSRrJ^lWCSe!?o{O1v;46rN< zoEw{eg7VE1`BKT={@|gjo~A5o4>Kpx1PZ#ds_`-=1(wOS{XT#H*;EWo98N=&+nt6} z!e3mSgCpfXuvM$#fl?Eix80Ovd=lJh`Nj7 zEL7IcbHgt$X8mRj64}~5WqbP>P_!UchlfGwI+OJjbpn8vunMP=NOCf}>AtW(@pIP0 z1h*ZB=KRR%XUHCPK3_j{Z7E#ql`JfVk))tOWh@eYW{>Ul>yHm!Gf`HqhDmk{d#n`y zuP<)vRcW5w2bu~z|LQex!GI1@HVM1FVge|bP%-<4Z4qLe(VmJ;bdS|$n*yy-e5RzO zU0}q_j6EA~Ze30*OId(y;;JCTMcuahMc2RprXXnFV*|#Mm5~9W##4)gn%SP96Xm)y zJ1(w-p*EB(sEW2GowZIkso9<n==&jI5*pNpzc+d=32Z@MP%wlUebEwpsZkU_2#v!?InQ+ zGmDugBqnxUmNf&;t<<`*Db9wVMD|sOqdZISR;vQQ{+$)|U!99c5$yk-XJu)f)}%gs zs?i$$s`#C&yAK<0!h4LKEMbcaZ&@H8ILSWIwIojVuR$bB+GB+<23Iu9v4&ezVmb;= zJ#?cYcvAylqz%A$0SyLCmO)@^mX<$${jw8_htE^^j-Xmh3{+yiVsK9=;c!}AK7DlZ zx@91Z(PNL0fPnJZ6g<-tk4PbNmv1*{K1T0dokVV|sXy{j-o;~WKnA^N`D59@8Pj=o zQre&1rfX6X&{{&mv6NJHwqtuj*FRuhwa=$r6byCMEl;+oPxTbsOFQ1DP~!IN-bgEk z6ybkIGX^jrm~d={+CV8)aska8ovA8VX7&rfCJQ~)LoSO281I}BsJ&w^15=?aQSq_ z@$*=w@1?NZ*bVQ4%U^|({fCm{{?fHvJYwJb)$PZ}w%5_unSuE=_i_X2iWvx%oNgmT zCZ>889j{~kX$Pl?8gUtiKr3|H3>*IR=+qLysGi&5`u4F7 zGQB(!iT4LTb|QWDPIb*Ppj-v7UVW11n+Fw=7ejFrY~J++t^lI`pe!g+X zjv)+Jc()16hZD-ma(VtLa{q*-vAEz1j7AiNL%(yXS+TbZ;8RrdhA?tC6fECcj&?E*H7Zz?* zXGw2-{`{*-{$jSz%(}gcLZhm_113E`ekPK<{>h-SPbezhOC|M3bH9A-I06MdSm1b_mY7}4;(_<$MxhqEWWI>vhdud|IRnc%-sAfJAaDnOp&Z3 zv&d(-Dvp~WHloSoDPz;Wa}`*j=}BD6fLxKn$*Z~c6Hk#B)UDxfddUbnKfq~aV!F5a zkvo*?2C+P7+!Z-8r2h0JTD?%Fo;}N%af~@WK0f)CJ~nb|nBHbm+9VM%dQ~ifA3b^n zvl(Z5Pqe6snwPs@GOI=T>4OKK39-nO2k;Go!PI)k+Z#fs+2NO+nmS$U#)T;k6?jv+ zJrM#19Y0-%SRbe#C|>z1Q=5q;X(B6fZY>0xSCV$_Ag8hcP4)9SIyv zLpz=zcSEQG(4a9@l6EHdYfsNUOj#d)prNjwlX?vxA5I15#hD8u`m}%?GMzv`3GozH zV$b~&yASr(7@Z881<3SI>O8KDLUQ;}rXTm`zj<9RT4TQ%u-vM08y)fXX}+9{d;o{@ zzr5iTqO;Q~weI(8vqCcQ-bb1CjWgnn-BuH0t7lqr3WrAdsA$t0INwT+8XD8Ie~s2) zc?*p6oAI-c$Jd0t+?#}Cr#tmM`@$C(AfRVtx^M3Kzv;5Bh3NKCP;~plL38{Rj?MBE zj+e4~LPejv!54(x6kpyPYogan09P@@P~u(B0y8c;ULNmKV}WJI(^)mVsCEtUfVu_rdqBt{1RkU-H~rUbdm2ON*AtI8Hucp~%hNop|q59?3InQ4gczTwc2Z zLKq@vCskHe^;+e^M)HT~7^=Dkj-3*txQMGK?cXFb36(46t1c9A2@79Ex7IiwB)dkh zME|JYx{Olxo{OL;Fd*c5F}}Np`c42gKPnw=rTeNR z5s~zQ0!JZ{jeq)nuBA9xxXa$bu1A88-ohhqJ97ey{ySG`ZI~n7q~->XxMdy+cD2_y z)6VSqA=kxMgd(H)e;`*o6-9@8hTrupuG^hLWZE2(rZb<=Tgx^82`eKY!J zXzBWMC6eEW@Nn46Zs(f9&%dBqI^5mu z7RtK(=TY-CcnfmR=xb|xwBie-))Y)G%W|lWVLERv19FPk!>Y^(ZeD->NNUM$cJe!> ze|57SjI2}gRU!7HsAvWq zvse`Q)_89?I1rhlMLnPp{0Xs0rJKQ8LL&s|bV0$6EMT=oUa}SpS;xTkw)?S`cs&h$ zVS&#bRB>NGx8d_=A7UvCgGWKt1}DzYN}arzr`FHS?4nuUNQK{j5`Y5|;vSfm!KI^- zinv~iVYh8XUoiN7CYN}SH82$gD9}({jjra}Eb;@FdO(cEJkpFJM#=|yI|>U-2#Hx` zN?yUDi}5dB)YsPf-?&VxLu`gYFK=%^&8J`8n8M@weK!ic$iqd#1voiZun@reDMjdt z-P~559ib%H;7oqjwze3@rMf2+W-542n$&gIv48o3DiHrRIIbse+l$c&36SAC!u{&^ z_VT5J=^|duUMqWSJX{d5yN`|I5rCc-uKW}B$}!{(;-K2Cpz`qU-Sy5|%lVE7M$>%) zL{MDZg=d}sx;quhC1q!q+7*O&g>S~4QqXcZ{2Vg+n#V4-2mjg~1g?p@OxKq$AdGmm zl9wRL2kkq0`@%zu?0m!$?ay$5nru;WBGR2aqfw|M@U`%gxe8{ zM~@!Gs|<&_<%_A41on^UffzEjk`-4Rbpo4RIFgvQQFZms$ateEe>yL_dk2aw=fh~#Q9X%X@P{D7Sr2M83STPtp8$;t zRy?n(yY2UPt-uYPch;2EBGz8v^qc_s)xV{dMtnxpJGj{*$>ZPb4adLb=fAn3t*zin zmkc3iYt+OGk59hHhWZ(AB0GE3%a>b;xI)2HgN|xNuNCkuU$@o7N~YX2E`?M5F{^-4 zDe_LsjQg&SU9`U)kNj8V4)O&Y`uiNZrbdY?%JlzdI~ofR-{q^nd=e4yPIEQ(l9WTS zP9OP>6+s8c%*c2kdf_h&=P@O^VNt_)^BnB#4EJ0k#{~I*jv?8bIEERix9gKb0Nd9&vnE0YWhtr7Z7m-pi5ssf|?|v*P zK`p*!d6nP1#o~ktp57HyA(Xrs*JwB&5Egb!un>*{F`J2vRuq6aUr$tdV3>kvL*DeR z3_TD>^S-G9xP_%YfDSa;)|=tAHG{d7&>>PaQBp*LtPrl8jd3Exy-RVs2KM3vqNd-` z&q9Nv!GV%u`&V>^;D?MyH6QeU>{eU}S1pVL*W1#$zL3VNKft^mrxxoBuoo2JSFQ-H z2qRu;g%ee@26V2%Zy@ZVM-bbOuH`cBbF^(E@f`7_482-l){O987|;+<)eF4a%a3?R zzygSL1j>cjj6UPZoGZ~2ReK%mZrpbF{9rLsIpV0P5d4@~e=IGg zMMZtdcz;A`wbZ(q{wJ7!U9ArQs$N%O;JoKSFGhjw3GSNIe3ZWCgR7c^t?!+KnPk;{ z>MeSQckMjbQaB%x#`r4l;zYAxg1AsyQn$;}vg%IiVZb;v_fOhT_$jn^SjJ)SIb7;2n{5k`@;Cm6bl2*P+BEcR`xMaO6 zM;rqG;loaLB%71_C=9K$|59aR1i_j?h@Oe9dR9KeyR? z|LPA1zjg*+xc@Cj@RSf!lk~u?Ov*bq|Eno86c4KEg(f@BaTY{y!U(ye7{X3y50R5% zAoN1K_3`60y&t5JXnhhjIe#8D&FV4f>GzCj|09(aBl?$MUyvaWDa(``Xo2tU+|Dg5O`3U=R9i;lm&(v$_t^LwlzR#P1WwA*Sb1$qs6kdvEl^e&1hER`=lskGO%r!ck}E_& zI~nujNvLO9zfRkNd|F=o)2A^56q;oRjL~&2OO0fDK2UxnXxjUMQe={>@s?!j#y#nG zpniBhvlIU0%66Xt=4u?VWv(=8KrRifWN;1;9=xkT@VEa*g6%K+{fG`OLRba}ztW!C z1-h_>CU-7y(%*bBCqJW03Vr#tds7d0bmq)mUtU#0su8<`N}|M6r}#qJYHD;{j_K|Q z8!&vy%fo|U%E65hu==oFHHO7!XYRG57Kw7?JCy>>lk=|p9qJ=2Qbj{yJ$La2?mzu_ zk;+|a0}W#Q_J}~F9r2F24u)5!b)KCOt{$d(1F5>P$hOuEnTRZ0GLTqMCmy=}de_~y zwz7{smge?m4nseUR9Olbw1@cDfrf@=s?|#)g_FV-PtNQ~OG=8_@iYI5;ySu5%R6EP zc9+fc7}J#^^P{_u-nl9Sh-lY|$8F#A+z7UAYm4u%JyR?VIdgI-^+3fyYK-Y=aN8h; z1ASvrJ`|>7N>sPV(WuzWaU{9X8kT>Ps;-AjQ3jL^$CpD zmfChG*|`)^W-LuQYr@_ocoR5%dqqV*6cSZ~p<|3GY-+PR)CP_uH-%4aLqI^SV8IJ=4eB=gxKMu4UoE{d|a_l%iFadm8XZ zx~8IcR=`3`jm&W|H8$P{YfDh6;IQ6ifPFzLa3)h|ZgP>sFP{xGEb~ty44pD>=bK6k z*}QYT5sCY^BI6m+A4%fi$$om-_KMBJ@%iA2*`O2_izBVmmXr%VsjL~c5w<_mzIjC7 zcC%zdrjl*i#Mfq)KtH;Ev*J7Ul_pB|3)8iSegwos$tfyUV)k)WUnKgW(UHGYr+eU%{%ndkvD5?Ub#(L zVV2^JHEZwj9I0}ABH1D#@s8P;U%I9q&?->dD^H?HMUqU8Mdl!Pj%i3Z&$rapjsPQl z_5SRk>WKY5R$*E@ciMGcqGP`=_8`Zq*FaWcS@Y^Wx2}mYGiKX&(GkeIj)*JzCS71R zUgRA65lyNiN!$1y0G{K#sAS+GDx+98{A5Y5Z)>`>{M$;S2QM6iQdSL{UA%Y_+MRsb zCd$P-j@ga@lo{a(S2%%HS+vilERdbzfRk8e-Ze_O*Jy(93~^hHkc z9kHUV^ys0%_>9|+=AQKlhmD-e4+c~yP&YnA#jlMWqQ#01RiX^ch5eJ9!(#m zq^@54V6X_BPOaw`#3nF`f&B2?HQ-vj-#`U_<>dGL7V+AjDvpd<%oLn?Q~b7liT&rw zF%9sP?zpJz3Fg|k#HzCD6cQped30kgUHU%zvct}Pv1bR)3_TN!d1O!1PbpRz)T1p&{?ye!EM7l&&IzJ5L3D|Cdf=qb>x}#7MQsCi+9U{n+QsIUI^ikjufEX1D+`B+$H}r@Ry&I~!>&{DN znFz77503JvRebu}8xE)QqOet3$b^RvARtz1{Fz!6{~2i9PLnU4NCz!@r1u1ei(T#d;bwfiBGjT3_>HmO(&FYvmL3LM-5KZ8USd($^^5YCU_xe`tHq(n2`{Z218`0$lyO)o(N#owy>0MvGc&_WL3=z*8 z-ghvM4}W1`yU#T41yZf?}ijs0>d09l= zf{vJvD}4%-9Ta3`eIA9O`X7BAMBJ`{+1$!fdyVqSB4OXC5JaIsUJ?jS8Oa8B2%ru1 zKj=y@oKhnW)^vSsR4WYPjU64zmUva57FNqV0TV$iqojklsLcC|ybtz){*!uT90TG{ zc{(eAv4fOs??>HfNHOm@I8eVYr)JQh1&MXAa{4R)*Y2-N8s|`Hg}!xb2sU33wD_$S z)SO@bH-aRaVgd*+l;U?bHG$>{4(aL*QbpCBUIKs@m|t2lF9*i!pI-VE zfIUEel*@J16lMNf^Qbbm3j=_=sw$y=tj4SK^pB7xfV3-Q>97%i^ieg-va6)^Q;tPQ zrmb@WosVs+XkR{ro6={TIt693*qiSBXcDwN=np2h7$0ku*t*Wfc8VVs7y=h_Lxr@ao=$(yfb*9g2Gw#!xy5xN-9#)cXy$>i)*F-TK|K| zta?ldEs04zHMQjZ!#-W^(kmzeVf3N%SI1cWI4O=cx&nNQUvK^qWFL>B&l(sS!r56U z3NQYIE~)B=KPbsf$ZH^?QoLmv{pit=tw_8j|9=upYc=u7ae6TD0XN&f)FoB{NIF!& z{k%jF%mr&p?#Rg{XVAP~h2FF3&AJA7Fhy|>IXq53@v%+;0e`fP#)gW20s__=uxIEl z7Om6SfHfTH7XE)l;&L3N|Dl7RNHTWxGXT_(jsp12^-^v2JywW+{www4BIf}_2YW1d z=;H-PGoq~1TO|144gSw%(fwQV2rXmVZ?XEt2GkJJ*+>)}3x~lHmrei8^D_W?;RMH# zjXLo6>5Gv!CBHESh!XYmdU&(E_ze`?ABa$;b}G=`Q=M0x1RNl z4IndAfNUFZ-ASf()vuge_~iFzlttKS1zl?@g0MGpAIp`!Y-`*dbtnCSFgFqw29;MJ zN4_7<%+3y6tr))NPv|NrpAm6OmVX9n%n%VVUIZZ55`+)XLxxwZu=dpSbn)05h4sRm zi#Nfi!Z|N|i12S>XAZ%u7=AW3TM*Z@4&y>_CXcxN=7(q~C?8yH|Kd^--8eRO02@!? z%C&41IK{n)jr|TA%5Lq|OS6ugzJ_T=pAw`r8oy3Ymw_z{d;rX_2jwtG>w+lQY1$(B z0r~0_%y)|71eE*w&P`5`{h?_r2C-nyo^oYe<*ShFe-9cEryYR|Y3(ehqH@_PH8;0a zy2H%M#s=`?EuA6;{OWfUv;9P%K)usxFtO|Z6hQ!%^|L2&Vr2Flb|l+FQtg! z*WG`FBJ4@47*4%wUG}8V(&2ak$NRLI&Tgv0Ve*8RH+4K_GTy$%n3k`H zcFb#s-I@I6k#sZk~5l3B^-l_GKbPpK+JKOvgZTJ zaPx~{KVJ);stbL$6PvWd_WrhUA!sAuTGkN6%ldjJh;ZSg14YUI z5K0vFa3`l1ezuWx{mpyqUai~puer#%>R5o;>y;M=0dvUq2R`tmQw3UjB>vk8A*}!R zTygNgNuwXW7PTNV1AMUlyVRiNbUw3pon@HlwCHlfjb% zs8TyWS0-WI1KOznX^AG?#qg%}k?PxpTsjcx`rgYrO+$zuZv2;iRveqAhGB8jIZ=sk z)A#4)dFNrk|_e z6e;hwd|&;300>F&Nejqgr=dO2bF9e;PrP8Im_x#TRIDJNL9d3l`?K ziq)oxW`FfIUo%xMs>v?e1veWHm`&fQ8@>Oc$2P~$kV`KLr~`i`VsE3sdy0Gk)P){8 z5swNFEkO0CWbi+1-GZ{|ih>rYIeklUMo9bJv;YOC;@-{lb9=kE+(&Rsvtag{tToe- zn=B*a1rXBSHcXOr<(FiB4=`!Z$GBY~74>@|79G^8D5)5(1k^3x#e6Q>Z8FNd9FRj! z+ZNWlFadQlKv}*l`8}_Tz#*Nb*GIn#jnVv)YZMt=#E=IZBgUlHokV2GM=cTmVT3sA z{+kg(a=u=Vp*)PJnRd0K9v$G4NTd|FKJuV5Cy^-P`hNzCPAo6KUMWk717JSwd?Fjj z{GaSaV+IA&_JPM2iabPlg zHCJGAe#>lF^373Ad^Q@2n`P`Y7zr#!B8H|TQT58JZ+OYRcGko%{vBi_Ebp=rAV4AX7eLp4) zri|e3#_S1Zxv5r(Zy53zNAFxTsXYV%l0{CpU+))8X$}X1n~}$glzf->rd@Q@{X2fq z4WhfY-~GjQZE0_jiMUtgkm&HTx!LORY6h628$(-cv3=2Pe&XXy%dP4ReacrPw|uww z7NO$!5`AWdXb$}=E`j6&jP-KWV>RTl(u+X9>`{SXUeZ7Sq03UidJ2#UvXlmuP9e`& zq+qyGF<>)L3!Z%dNd#6z?*X*NIi)6q8w_OU$_Lhwmjqb z0g+jW_N`lSSS(LuXS_W|`{8}Y@Jths>3K-LUTYNgs)^A>6}gAEf(^)iO)BCZwTlq? z=k=bvmUjnp-y);tbtEa*^)~mbA~$j3$UJf{g4YY z3GGbakAZk=mw%w*5#B-|85l4dvb+8OPj=wvb{YN;B!fLA$$ydzk_DNVq%3b`9TZeQ zIQ{xn%bLrP2|OmQlNT8a#Vc+(zrV$?M9?gG<6$or@#Gau&($C?yG1K&=em=l9IbGslB%TjI|IFc3Tm1>5-b zg~7=ECqw64FS=YyM}18uKCu01A-HXU55*OkH2ChckcohX=ed+s3+a&7#%ZOC7p^8? z(pEfLqYRiNa?J_auzWu)>O{`(51u(#S${ky8YT^2l2;7ExQ3c0zAETmZAm@2BV{O7 z$J#3FF%|nZW3SwlK;8ZDY|By{OZd+EpeCRmg*c~;WL{gCQp$Kr?wZ=6c6i|C8_!nv2i3HZ zv)#Dw5yy|X9QDd;)Dv|3opx;2Cw6)7%0TBzUvK{9Rvz3GhA(6AZqmRPl@j_>6=`ts z%8Rh}YzK$7z|te{wUE)tODdSQ?shD8{>9CzsS3}T(ABuV29TmdvTy0OP9})chgh0tMAX%4%)-+eKq!{4S_FGQpO{jWC|U? zm)0OvO=^SZn~&=1yEESQPDHP02j#|#`>LWHe{dV}8dHRrP`7i?22iS+7;uhODxL_x zn)W36dYQxZvPK`B^N9XOHwa12h{DC4q(35k8NWXjpO840<=ipC6>h_iy1b!g7bG0> z?)d!u$6v@eml}q8$!zdaP+T(a#XyB|-SPtCyIDqcq`NX5t!7euWr692(e-x0!izO* zjan`+kiU-f5hGFM9DC}LhBR>{gW*U>X%@r4iI0A8(X-Q`07jK4q=l^8|FN^MZT6&j zbfVU_l=$3)Sydp`@3DT<3>Aul~4(rTd}^;CjM^(*5}-gsb? zB4-Mn4M;aEC%ixsWE*s$?yX5325yN=i`3id9Ax95v0U-H}0d`U3XFL#|Di2Jw}KKk-ruBIUIiE$PT z2`cyDK4c}8j`NuX4pqDj;^0KSvBG#uB41%d)h>UfdYMh=lgIFfvhE{g$o6Bz5f5W$ z3(-hwOFay|J7?i>xLx>Mw|T7fVKtMoVjeHugc8t0JP_61{@_nE(-xanK>7Iw(P$6y zd_-g<@J2EUZUE7wDV)J7BY56Pc6wmoMkGG-2n+6ty?KQ(=}DIZQ4ro5wFfYoqwO-_ z?Yhf^Q;p8aXujTe#fc)xrpC_L@FAi=w`U|#*}&YK*)ba`C^Y;qs%&@lA2BtmdU`e^d?14F zv^<*MTyZzR^zNd|R>*ULa_-XJ+oZHt`Y#Tqeb1wLVAQNo_x7Vs{%y;UZdq}41bqoZ?UGuKY@CpIzD=c>Hlk>G2g-C}l6eFHH8}rT^b7+%2(D%p}+-URD3mLNF zI(a&D?)h?eCYI%a)i+3FEwhDeJU9i33hGcD`Gd2F+%PXl`q zaIwlAKb(rYn;Qz9fU)=dK={{Hq1>-=Qyx#&rg;z*?EGSPQn0>^2?|2h&;_Og#te?3 zwoue)x{z?(zWL33i@OQd22da%tO_b7Bcr2G^o&YKu>F!_!8~H!2P@s>o@RhY7=I!< zR>6c#bqy@FHI0qOp|k-Kl9#syp?N)UL%U1Wb>OF=6GbeEP2M*td>zkq$Gc-Sz&%X{ zkz^P&l-dU_YZrw-!bp=Z^k$t#$6(ra_-?>XMso0V&GLopPkkccmez+RoVic#sUKiM z^Bd1U8B5Hpax(owM3<+K*MtpOxCqjF;c;km-)eL!zUj|Kp89~7j{4?avXO@}q;ZO*^ZIEFNLc`-XbNAwY6aV^ zt$a#K>T2Ff^#bg3Ha6dF+B)pg@bX{}QJT7LKbjB`ac0hd)m zg-F(;D8BM187vxnev#YSj=Oeo+~ti!SsK<9HCs|VPt2VkcKZ!?zM~fs#YF;0iZlS0 zom^(@!49Us&{!+<%h<+R(|nNI%Y*kBOAb`+PnOK3$PEJ$PbP$B;~n1VQ%KZ0j@dJI zKlnPisgnE&dBUT-u8nQOlDjeVaBE_LCv;&AK1bqxzX0YfMgR14w66Lmib1^wBuN9ALxKe^Zw~GSvXw(b7 zt0vCOBwZzYE01yKxs$9iN`2dyA-*x>yoG>+-sM4FoAetuS$Xn|b6PZ&Bm}O)QQzSD zg@`-4j*RH(!bjr2hzo=@%7>f`En5tXvAU)cO0K$*+>atA5K6;t1pH)GOv>uhiAM}g zd6bIt$Md&kszHF3*ZnT^ct5rJWt=F%U4E$Azw^X(yhvLyb?2^VZhs1apg%dr6fE`^P^Q zKbp>WEo=N3=nmZ5)ZagKel?sM>CfirF%(~sORCil!Bb|sW>Z2Prlqu~_&xs0%v zf%Po2Vxb+E?}F@bo?L9!9dY@&ha-|dv}D6BQd{^?4k~Im?WNKWn+Sv8mbmy)n|a2w zF*IEmtCN@g=bqO#HW{(A#Ky#!8;C$(qRC)YcEs5+Z+eiWpF?^V3o#piK6xMgtL%|@AB&<$=S`4Ww|h)xDr4<*cr`CF zIil`fa#2V~Zxh6;YBFbudHE7Ryr1C}0#z%MhEu)Qyf+6epp6Y}tZjwnhm-VLhxbdy zPqQ(QjN$XFQMDt48y&6rxFIPALDVf|oN?98YWX#FrJ%AiMk1Eybd)AivOa4E!s#>k zghkVsFrighpg^R&|541qSD7c*EGqXaUAa-|qdh@Hl&gg(DO?lNFO4yo3+q+`Ci`=_ z1(q^k3)?F$cb!DPpHvy+J4gC)f^g&oUrk6+{x$3(rQ^{V+ilUfV}+GKPo!xlU<@gj z!-k%}9!hfiozD?aqD}u~#xg%4048^|-n$Mck%ut=+!EKIMx9^351X%aUs1o1UdE7B z(RecQWdB7gb9?vt+F#T0K$1;U1lR4FuE9aMw5oj#A%FHo3A+aFgLwhxC4Fh>6N%OM zbRN%9wqO=fa5^qUUX3RulKH`P;*r=aiC05UA9sq8qVY?zy;b?x$j8%bw2%=sb-vWyq)^c0j6P2yjV*86<}?B>3zx^2fe3EL&a9mFRV&-Zz*|| zqBB%!*$|4Egj(pUxlT|ig(gNGafVec?D9}10$SWNzRIYC+~a)?$v8qW^mx*ZlUybU z+7MCN0Gr@L2Q&-0yJ~z-S=Eo-q25Ud`%1!Ccx{@RC*Fy1GNJnKXy_+Ld*TZJGL>Sq zqi4dz3!ybzzW)rKBo>2oHr}aVx*FZS5wom}feWCTFQ<766%OG*yuGkY0kEs zumgPdhWh%!O|iwLvs!=?h5HUd0?_BGTs*7QlHi&M$SpwVL&*li*N;@usV|;;XQHik zBP3jKF;M)ORDaQiOI;V{XdEsYF<7c0$7{vfwPT+GlL=6Hz@Y&DdFb^6GQ9N-Cy{Ni zYeSnv00~ZsEhOu)zJLYR-oK;*#y`kGdwDq{-PK9d=C9@85jNmwzUj-VoTpd*8kqRo z<*U5aDN_Kz6*N>j&W78xi{?_k3m`iIt(Q#!9rT8?l9|Gm_ki9BjUNz#0!cE8bLR@D zhgcF_SyW2rA-3v|nhP?DlyLOBt~6V-vjn07pP!Ml&I-epb)abX2G!$>N$pj3lUU8H#2g zgFw_jzIQ-)l+r(4$Lkg^IzXl75hCvG^x&6_nq~KGMBHGZftCFD+LmEMfJH{{b_3WHCRAIp1DoF_+_Qb>(>^UMJl2vty=^U zhO}y5Up?1sQF##l#A;> zfspnmp59}a$J!c7m%^^3sL8f`%Zlx&GNFm!)C_2QjCT1ce`;QPaYEm}dt&H|)W;3~ zInm*hJ2^iZ=;^fC@Be&Yy7_ocHm}JT&)BuSi$A1rh;jC5!Uq9n&;87a?bVaW?iaRtB>d+++&U$H9+*~kJUvb~Uff#TN<5QaF zPyE{FZ3^i3{Pts}X#u~#DD&5%7`d)nN>|%ny&O4@>m%``41)HT*Xm@Sl6i1*-jik) zVPV76{hrrnqez7T&B!JObp}E?B6F{}Al~%PXe5g+v)&%YAc2*V;*;9$8A=QTKRTcW z@pyN3lcCoKFLx(!qAq;!GOd5D`42zIM z1T&A3ctGBn;dp~5WbaCIob?%3$rj0r$FGUBOVOx5)Wq-H&^;T6AJpn+EtMC6n_t|Q zv_*#@S_xT-Pe)lFDp}UE_nr_fgkO|4AS!1SI<>lI_53u9;ntU(d#2Lz^gqZ0#R*Br zHE~NgbAiRxbbi@&dJuK=lSPqhp$Bzr1WYG>7c+=#rnAVV_$0*ou!y|eD#UGCcum!0*mKdmV>6nrYdwd>T#9U@=7BQm)5l^t7l)Y z%iUSK{fj$-DY{6J{}&o77$MT3%Kq9_YxWN7-9~sYyBEjaC2lps-L zzk1Iz=Gy6)>r^pUbDrQXC@Nj=s(U9<|HRM$p+Unly{;2JD!8O}K)`U?*x5fotVV=* z)!1?Q?nqhayE3gU;R~@ikewP-7%}EW(}TV96d~U3Id*dI5AK<@Jw9%xuS1q=9BaFp z8>5EQO16SkQl>S_tu^BEq2&N0Q6qyb{MUiU$ot1F9hd9EsWB34^wlDWx9aKI`Lt*D z^N{hIXB#AGL^>}Wb<6O`N0rgqQ|ZU%##>l?;+(IYaweV;F8VVciYNy=DO>lwqo)5l zaa$%(~{5=jry5Ze}3ymrkK}(ma;gg0_uya_HGh=RMy$ zf6kw2a?ipce^58o=Dya5FF%6U+eJri(=zEr1;yRJ7gRX*?bZw|sBXs!aJ#YbFqv@U zu<5FHcit?Q@Y-(~q2Zjq6yDGpobs|-9r!Ku&kDWzIehB*AlpkK7NGB9c;KUn-`*)} z#Kg?(G(VtZG%*h2OVYFt2h&d#M48?r{W}>|bL>kJj#5op8yTId4;VPdoA;En zwFuJPL2hm)KJ6Ug(Dz1FKIa;V!JUK$(Dpz;h?@@OZf4oDhPj19@rklwLS-2xIMb2%npz+N~#&4R5Bf0hI$K zrT*$}#$Ly7GsRUjzgQM!h;D{UuL&{8F0z{WQeHU6*MDTq7NPmJAWa4jaWo61_(=S` zNDi&K?pJ}E0LErG+ji&t^GmU_+`!fYbBT8J+fWyd*4*%d9xq<)r@W&U$8tO~6kpWw z3tX|rOae8`;-)nMVVnh4mHpaA8`GJgw8V%XGqa4UNP;O{+Z0u&y%yNzFJxtLsC%0F z>e}L|GoCeoNJKC$(5TuC&1?`r*<>R4VyeGM+e#!ZSCVF#$2Y20J@mbpng+6jSWZGw z0}*%uAa()|rh~6vcU-qb_=w0{el(}^OKl_N85@J@l~kdu6_21v#Xc!am?>8fAH9@t zxBo{uFRvQKwZ|f{C-9||9A|r@p!wTXaRm?I7Z0>$h;Dbw15)6^ z?A}1FXv)Y~G!~y`J=21Pb+T1s8IzC%DxjM;CAO{} zt_$aUXX;;1gDVt*nF!oeTsj1wKQDFMKM#w(xPRd2 zgopnDe``-gW{>bmS;HBrj=aH{jKZfT4S)~T)yQ5x#JR8e<)c7@#jO)K@G>xWra>6B z$gDM{9pUrtmGd|xggQGoWb5IFzWC3HaWK0 literal 0 HcmV?d00001 diff --git a/Final Project/UML/ER Diagram.png b/Final Project/UML/ER Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..04f096d041798417a6d333d08651d89c6d7b054a GIT binary patch literal 24149 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%0Aq>2%}j+S;eIsTzP;CV--7 zMpt_cL81$f!Yjk)2wxj)^7SQ-ENmt~N@B9KHy;5StqMAR*WIjO=#9fhfMd>X886pZ zgPO8IX&=EbrlY+u7Y6jd$!F zlKSR7vK}mv)Aul#^ z|F+x8B2?~15iC^Cx2546%CtxC#AWo!3$$FVgeJefzY#o`e)~?K8=xO9&7`#3snCZF z_wsYft-{a)Y}CMczAAg(_VzYm-0WOfT;XWJy@DNXu6oLTz*5hgcVZ~qf=1{uQsAi) zuyzqoXVTS(dcm#k4Sj!Z35f>{1U51<*oU^&VxF(Vj6T0Of|A>e9#LTOrwksYm3kX( zjk6z@2XJAT7*vODWJmAd{id@c-qC~s1sc#!)6SLY45qIq%K%)G?|8g4^zlGBJLA`{ zU(kll=aX=p#mnd=xg1S0-Un?VD0{R|h&y6`vC)Z^$O1Hmv^qZ*`b`C}e4?aRWlyW% zqYgblmF2WX{$LFH4UyJEH9iTkHX}uM5A==gt*xPTUfR*uRF^JMsC2mdE}c>ISp!m*4)EU z_WX&k=ZaXF;__g~@Z|4#H&CH0MgJVtS_qEQ>9f5mV9>7XQ&;ypLt3$TF~MasGY-;t zs8#BVy@a|tFW9-YQ1#Mm1&jESxr5E$E?j{&e)PSw0`zKhW)~2;DNi)i)EGpcrTP2g ziu3751}r}TiR9^2eP|u)G#3!$*Q$rmCZ=b|wE)KuyV9HX2%$JcGZ9#j-QXXnqr(Jn6S<~tSN*<-YYaLot%w*_ik=(uEMhWQl;gu=2wzld%}Uv znFNsPbEjU(I&v61en~yjfQ6)@hJ_~*5fc;Y!S?Gd{golv-rQXJUd;S89=#taeSYG+ zmCl={3Ll^@aXhRg{oKn-`uSG-<-VeKO@ zt)nn%LMzTk|7CONpyqX4PIfi`e!Ekwyck~+NHZcI9U2dVR1W|Vv$M0GgYtO(kp7B{ zz!foD)VDMuIBJU}mZIH;?%JCR0w3OlhNkNan?E?OUN&ME!b!OT9&bU;X$StIzNZDb%T>lYbG{#F+kC4xp;1`OT5Qs=+7 zG~78ls^92d5aauR8o`dgzc!rX{JxLs(v->DMteCQ;~&vCbhmV*IC{tH(1hJDMbE_q6UauK!u9+!~I38N<;QK3NRL7UE&uY;~g=Ck{R=Gn7-U+v=6) zD677tmZAZbj%BiZ!L;CPNbF+(Hh`hTTuoQqgqsX;2AQD|a6AkwkZ_HIrSPa@@2f-% zhl0>v)%--!tDk;Tk*WAn34G|Y%}8H+uyk>A+dLky02^Nsw2+5LfT5XyYr*1qs&)SO7cN9Mq}6WRn)a4ECqxAZi)Ren`Y|}T3HdZ= zY#hwN@}zG#JJoo*1De2p&6&b)@@5Q6H((so8i#`f7P$O68Xgb5>Br@I)2-V@M0fd- zf`WG?Bk;|#O~Bixrw#_Fyh_kQ6ge;L%MVDOA8N7ttPSZidvAc3hZtsk+L@4cDB&ne zFlG6i`TSo)PHS#|BCYH;^mDfFCLm^|Vu_LYgZFmbHS$-c8ecG!SZHXh6vaLi#;`yIdUok3VIQLPCpa@t>0;1@3HCkkf4pBiZ#K4-5M9= zBm(yhtr5fA@#s>ZK*!Z$vh$J0uBE_ zv5mfd^DijsKfQLf9h66uZ|t72T$Q~2u=-j0Q43bQqkLs?es9662y6;7gFpZ_Y*pb; zC)Z=?g#qgCdCf2Wo=b{;9dw*|cP?P?l#rD4s*t5}EK>+mKzVujFAii1{RPxcnzZpz zsShHvi84ls->_Dj9HCAB7t$>tYasU^EUS@aBeZ2NO9R%G7)F!cQ7t zb3e@5f=E}mfT2c)hT05eg+@eZxVQ*Q3T?j1Mc)E*C`8qc^RBZLbb`Rn6`hnsf*DF- z7Epg6YWC}8^RGM8eU0WOZ9(m%Mx_=PGRU!!RF}jk;IZ_7{Yr(>N){J+_Un%MhkP?& zd!{~z9BXe4F~kEzmdT$#G0Xx612A^5{7B^#dLvTv56UzY6jAZ<)(2jf7%wHgeV=~| zed*SXRcVCkz4&N%wO{GyK#a3rFaKw4|NN<^yBkCc(wes)KYrY4f^L;X{O6}Xjq7be zR&3?@aUTl7>M9^^n4!oD=HQzyw;~rC02T=uGUHgKSyyZU)J#!P(E*2<1nSF|<#*PW zCcf;il5>V+lG8do-0M505`XR*_WHHl4yzgJ5{&Foav|$|&wT)Jx0ma^;yCtW;Bf0w z2A+QmqYSwZwayEU(l7xJ9)I4K#NIJLSS$(^KG~A zCvLwxNX1Eu3c7G1h2FZaP(sh!#t^<-l~m47!y06GOh0 z*H~FwMn_{SA3Wa7NW4>J(H=tC`u+=e0uom^HMCz93{5)7GE-#wE^w{OX9m9gH#p|H zKKH4>3T0(=uTH19@yHgVA0a<{tIb!5;oQkDOV+-sMuLphuP8;lfD!`TBCvDLTpF7y zEG)#3tB3^&yKjZf&CPG$ULrn6DPDWcz(h+qs;jwU-r=4Avm)S;lq<>UFjE|D26gTJ zL9Y%u)!p^{0PRZ=RTeO7mynRq>hkpIT5BM2L6>Z)6iY{-5j0)O!uFPaqN`b@dvBDy z{)Dg_NNa&(n)^2&;ND+sWWH^CXJ<^XQg#9p<1yhAmJ8)zUljo?b^G>2tNG2t)9wcR zojB$f)dkNSJmlSL)#F1xyut{Bj^!+;^0E7v@>;L~NlJe%^%MZZ9OW4lwp#+2@tupx zo^AFjM`b>Or!Ij;+S*ZiF_*1kHG9Kh4}O-Iw+#*Hm>+>gVj<1i^<=uyWH~ACjhd7l zxRt-O^4;c|_}YK}5tZ$?ET7d;++4p*NfSVw=@5B;P#1A_>2bkNzF0#FU40}RkWObfp0 z3->NzWt7=YH@;})xpAX7D=Vurl9~BG8}ABN1wFltQ&X;h6Bxb5#tdVfIbTo0R3|_P zV-|GRYtoB^>M&Fqx!Crcm$v=O7ss%G)YMefejl+7?eU;qu*6;kXUCn3DyxiOw^f+E z*|A(@q{v-s*?as&zUKs$-FGv;K2_9JC-RCwX~1=br@A1|!UBCZe#wXxfGz!^F=Qh+ z6GeL8y0rv2R9sUH5_XoyZeS8!3=b|Goo zoPPrR9~A}vmkFJxY!3{LV3z#$?OR0)w5c!SmqR&)rm!2~;?`N`uz_VEO`yfK2;cRq zS~vP(@Ra3p+lhyP|IM$43b)wVGwt@DZZ&Na`zBbGNxYC~I{RaH8F$;?XyIjFkUaCJ z@uLJiwajKh*`I*-M$Hu)%K$we&gv;;oeTF$1*(3=3wvK~lgA>PmnN5&yxk8T)Cd|F zO@wi>m{0Hd>PvdS2|3jZgRH~F|ILA<(_uEx`}Q$sHs4HuMf;7zfuC(x)9Ff#vhk6Z z8b;ZQ$_c0k)i*Ot%2GD4(R+fJ}Nf)VZNoYz8T(;CiAQ4B1-*u~V z$4`agJ8E$@cG2`3_KPfNS_*CFlG!tn$zq%l~>c7O2K;KsA zn)vNxQBDfoD0=c(S@|L}>Y5WS^eVpu6TGG!A%vmF03Dg&Epsp;@Tm1AiLqN=O_#jJ zLH}W|SR6Bv`kkZM_ukCIWT~4`zTXBj*&9<^PzjgOc#kbDT|m-v*Gr8w@UCZ-)+n*o z!&U26d*Lv%0~6db=`8@eJbM0+A|0fe&zd84Bt; z#5YLW)#^$3_Y~BEJ_b5R$n6IewxgnsszJz%}{2~s;x!-7a_p)A|~*@EU3 zNTmOnKx<*R2_TS|RW?~UAdB7y;$NfWwbkBpY^Lr*gCfruBrCzElcLRN%cTqPGAR7= ztt}_`vjnlXV|H`%Zm1hgRymkTJY~=CF$W>xCOY;`ooN^qFe*pQa-6gW zEvNfYPYy^s1%Q9!|KAvVp(d*{vaiO`f`m6KMu11KixT1gjtn_eThR}HK_K7d$uLnl z8fny+{Gwaxmm@DB%9u)K(>(6&`zv%;u2G>ZEyww|ywde@S)_L&twCb~Pn0+`$YEwH zFes?Z$e`_Q4gJETs9;c1)@xM~Cpu{qbESgJDx0wPSuR1D^2+Sz6Zl7Iize>r!aZ&@?@t2{7=K)!Xy`?}D`? z)N_ssH4`2CBB&m9snq7SvnY9>qMm!8aQcJ787~d+Yo8t`95@XA`3R%Zz6UeGED3Dp zichtvIs7aXE9>h|U~GARV}rtLEomiCC*998fGxjGy$_Y-{M+Sh=9-C~MHGx#B#@%< zo*Y@|axoWgbgdEcqVkoP-|o|V6XAnt-AKbcL?R63DDhg+zrAStXEJhr?3CH(pyk`Q zxQM>Kf4gv9dZ+(RJglk4_yOO6#Q)f%_MQw;kB5~W+5!cGFsI@q8{>7Bn4)TB>^!mcSB`hu-eiG z;g6FIB-t`wMF?;o?1D~9!VMPU4t>NFSzbbWwf>=)P+%3kE~eG@EF{~v)=ws zxPUaIf+)yk>=L*pp%Uh+GtC>q4vM-H#ThZO!OCSh!G`KnYB^(%^oSX=|1-?+gm=zH5 zAe`0f(cTTT$b{_fWH2jLe&%J}i4qUezq7tiQybPBRMSTjR! zG#jk(er@%~Myt0YsTfTAL@kr_lN`IOGXR~;>O(c8 zHBceF%PB&~Fp;wn9qGfnkRiIjNhQnk@J|>uZ^xUf(Chv~ULMwS7GdO7*3ozx=kWfV z^vg3Rw=LogFR!87VgydVqG0R*zZ_&S%4;x$E9%erI^u>Eqfj4@=F2ohVY!FCp<(=y zSV-{om@DBLV_ZM=GkyVmwY+5fht6ipd=DJ;&?t8zh0r=N$Ct^*Du;$<$bHI$(|Nl8 zvtrrD)C^$?wjn}!Eo0V+kYg_3fp(KTDIb`)@u0t2{rDenyF; zyv3iuE|C7;a^UV6=G>y{T($J(3208ldvEw2(up%PqYmU$I2e7#R_cc(0&oS zl|b>92+2|r2@QEfj41;}@WOY!w7^%#h2tS!SIvUrNt8ov3bM>F6Zc?y@jL}1yfC1C zM>~dv)4A~I4kHc`vj3-zGmnRIZ~wS0>m=K#$-YD;j$z8uf-pj3FqTXzM%;x_jkFv| zWjo4}y%|KZFD3(}`yMud7=5ZO6ia9q<(KIfV- zc1B~2y_y@Zz+3@gKBq47Bd96bA3mHk(Y@}?66LbuWpcc#?mBnayc7iQdox@nOeL&@ z$05RUy|U8(MfE7G4nSgU?M?BAe5KZf9h)<5-aeT3`BaHVP=dkK>b+yUdGN}PM(qqc z5^M#0Q?)6kit64)R|Q2R$=N2!d<|#A3bRIshmTJ5H^M3!`k4<}T9)Gstv%A&?9u*y zi*kE=`w?@8zz*#-dpe5>eTE8s(9N2wl$Q6)a-OJv{`CYbmfgAY^4YTsmARX-i8Rn3 zHM8`1j1g>+pr9c1_8Z-$w^t)`PeqBPtA4M%Z}5$}>3#0`CvFpBz5&wTm%OEYr_xhW z)Q|dt=5QFUxsGQ=WtSz%kM9kr-F?BCMQcJKG+?s_U$iIS{rs2Y+u~+t$a;gyOOL>h zYpyXdYOr`|4>2*B@E(|eG|ke7p)Ba!X2#`xv>ZSBb65F$MO|$XjdQM$0 zKeDk{?5H@zq8h*qcrL5oqe}Uc)5PYXe|DJtrCR|hl4q`9JzWJkZ1sXndaoiik(?*U z*`{(*GtE;(M1(S9+WG?Gg|$$cyflsII|**>>}yq$_bURKLR3f7lmG#mHD9AY>y_#;1cB>&W#DFwiL=yXcgYLF*Px< zcJ12dz*K=ITt`e))ULZ>G~P73f|DeE%fedJTUbXDNgDJOVkKXJRo*7Gos3sc96Ui2 z2eXzIH`owo-{Lm$Rx{QH446ZoI{!OQx-sa1sWHVuSbIo7T8(!rq1pkNZ|5q-R4DR} zfh3{hV(aTul}(PJGO_a}V$;#?BhDH*Yxa*;qjdv6&hTEey1Ed0CrP$U>F+U3T##VH zN}-oZ{r(P?Sd5I+HYfbm2o-HL+GI6-FTTVA`ole2P5%; zs`c`_6I;L@;{z$+`uh5snj;n#4Y0U-Zj{YuoldY{kao};Ucr0V4UJjJ3J&JCKsd6q zYXdz>LtQ=U-8`Q)bJdz$3$0aOL;$yh^TmI1omuar%YsCG;Ogczv;47x1bcXA2>)!R zrL`4YGYPPkheh?E>hf^D%O>$Dj;gZpv%HX21eYI09?9ve83%S>CRJ8e!Z1a#x0jJ0 zlRM4ndmyxT0UduMRY^_U-rm}}I#x%H3DYva2Ke#86RL5mG->Tf$EC8Nw|AI z!OBUw;J#w~YPyZZYG_^6*KaZ11MS=){Mr0rn9To`kUyXbCmdGp8(?tiG`mgQAa(+X zBf4_CMlcuzv~DPtT5`{!T<+R{c;B9BL#ySOi`pJj6v*a znp@4lNToP%NouPvy~K+m=*h?-a=NCff`rtuSBb$AEHzsw&e(weboSmGm`}b(!PoR(v_1eI-H-Ww+#QK@L zMwD|p?KzjDpUX>P;e#P|@-JMJe!CvjoN8RDB!2KJ%}?2l$P`5%Kn7_(3h+NgPs0X2 z{5j=~?({6-?FE3SEzs_Wq|?$o8!(2lEHza@>PGI+1;+(lbUQj?2)Z}PDp=5onk8I) z=VH#vdntg(7Xru%_&u#jTfQ#g0o){sLcSLEe*=o*dQ-g2zD45NuZ%WVAmgl?H;;j3 zuDuBc>>o2T*ZV*z0)uvWw)qdyZRKF#*vEx64(-m?-+!Nl^#I2n6@{Va3&emT8O|-= z^ypBO3efW0|zFjOsUj^Cs3i+sV+&7Et+ zypt!q4FuT=!qHANlSBOt;GK@|2n`LT>OiC*^+8WKG>X9J46h8Rd#$}@Fjo->hoB&V z9!_;5x*mk2Gu#UmBvdg304fmB2|mDp25EA{d@h=FJ(altB3=uM30fR937L91?3 z-_l?l19Pu7Q+q~IT8|b2O5~i_gaD*paS_Dv$D~lwAHN`QQ8M z)x`|a9taD7c|TvODFkRQK74w~0h4iwiO42@aDxS1bGhZW>B)~vL$&Ab9U8o;UC0a2|;h;rzm`0Jdd_ zlWduqU-v=8)EGbS?bY<$AH3zzTl%i7tPI^B1AAirYxKg(87r5S6cj|=^4gh&gYHV1 zJYp-p3}z>GBYDl&33%@y_hJU~J;H68kO=v*mYF^zndj(uX-FfMygF z6n3^4o%lK;ttV}h>0Wu}{{;ouIyj_n904b*hhT+04;WAy!YAG3uE$N1LkG2KZ2x?e zOMGDl(Bd+}1k!hlNtDmkmoQnSQOfSFN3R|}dQ|?0Vn`)^G6KBkvhHv!M?y10%AvYL z5d!P~4`O!IH}Q2hW!WGwHGp#Tq0PbgwM!v-n>&4P6AI%6N_o!hvj1JD>f!WAF3 zk^F8RS1)WwK#;fmcwz4K^!S_cPoFvvm;~qBv~wYO(|gTpF~RtC5^jAEXX|KeR3Z2* zB&tGGpl{V(;;aEp3A*d@$rX_K?FG>lTzHRh=OT-`E^gYPw6zD0QfDRNYTdR6Mz_;@ z)R^_>1B_gk7hfhV(mI^OyVJdzOvgD;xdT~;!C+(>1=)Y|DSNxUe!rU#@iCZ0loS;y zIh$$Drc@;ewCyw8&MF0k5>53GL__zZ7y}2ZX$$jfi31gI@2G2e0c()Y45`qDg4QaT zOvaR_r#>yhYq~uE#7UK-hGE=QZpX}cY*v}D{`KO8yApRM_b$gzGnZNxz?dfFOF*1n&F!SOl&;+0o3U7gk#X!HJP*2( zt$F@CFS~T7-@+{_bwAfAy}bG!+u$VRYM|nRPG~KewKYSMs2LqWRzzG?QpAYz=9*O_ z?Jvp2_ro_VBTm_ZBNV_4H6X)5u8R*znr+6|<*E8L>gwt;;5mgHX5WagWw(qmakVtE zam{pUXm^<$0;$5IhYp#Xm}ZdtF290Q)t+0y%Rn1ZM2}HN0&!(h9S}un36W`f0^S;6~ zD@y&1t16+tYJ&T9;#nX*4VF3HRZbz!gb?NZ&l|3Phvq&M<4aUa5h0=LIX|fnAlgnVdjGyBTp2)=%t7nkv~AV0$0YZ^y1k()DyEq4=?Vn9LCzl5 zt`QxU=*)vdgk$ROL7|D)h?%$$2kudg;A23R3~+as_pAXw?*p-Bm(x>pBp~nW-{WW= zk&D5cIDh_paSgniZ|a!&CYeqFv+xS!=jWrTaK`nYhXeu=QUqMhyDBbgS&l+MW+Xvc zxvcrpPjk4i5Q8!E5MWsx!$aW!V)-bA?}%T2-0-d*2KkK3s06$A~lkWO>FZudJKuJ_+?1;^_=0b*Czt)%J|m6TSfnC*f*@uL6E&hF(m+q72MAJiepYUP-n z428)XM*q1VKL8?8^3u!Eu?sR&YI)fMiAKI`Lb)>S_^?M|1LV9vUbK}}R$c%jAXM=v zkLdM0^&zyO?2-U4xCay#_p7^f%!Ia_EX$Y3x2o{Ems8sv8j=sjJIm2>L4;~&xWR@p zlJ>ym;9;v1m$v=s-6&8y1Reh-(GyYCpic{e18vJ25U_rczrvZ=y*7In$Xm0YtL~;F zXV`nC*XtDmQ3% z-*2zkDL<}LRd>!nBi%ezR-qs;xt7bVgrKggt&{8cpn1>F^c~aUK3gEr32!GDbe_w?YJ~z$CSQvjGJ?Q2Z$^Z6jNA z7H#LSM+3P6m|=8XnW;A5a}+#a#bBcUIoeQTVp)SOkw{ciJ9Fjo>S~i#k!qPfC$FlGEK=4;PVj@YdKW(XeF&qLp}Da6;e;9Mk#2q?gGkj8FFPt|mx zFp^-2e!T!r4I+sh@ziA5sh;BiRC;mB+S(dmASA!L4)CTzH=C&;qbGgJSp*z->=rlR z9#w9QX@GTiYo;pKdpQt5vNhRDUvJlSWX!_YSc23;zfVB(L#E?<0^>O$Jr{bbrD=N` zxJ`7es=9W#7e=DoNHnD!MEq!bIasr(!uJA)3EL?Yu$MJw z3FAoMDCz3zGS*?`-Nbuqi4IgDl0w__b)BzBDe_fd%ij7VwAiT7pDSU)V~-~fEiqOM3-qqa0-Dy^5&>Pdt2 z7!UOZ41X+Agk9$j+{H|s^mbn+!SjZ18w?DMd|#YsG&G?BQt6;K`q}uzZ24$=1?XAy8>8zk+yXpX+8cqbp9mQNn!*CCJZNa88qWIqWa;DE5iR zenKw{PbPui&R=K##;kxYmG&4wR%rO<%u3 z-f=Y5(QLNWeBq3x1Z=WkYiVieQ0|q}WDi(afER25!V%89(C?}KjoF5?{~z#n*^@=V Y;9Qc9!QIR=z<1}fBT=lcT6#zP2OXl@r2qf` literal 0 HcmV?d00001 From 06703e80523fffc7d2c5ab5ae625babfeb897628 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Wed, 12 Jun 2024 16:27:04 +0530 Subject: [PATCH 02/24] updated useCase and ER diagram --- Final Project/UML/Class Diagram.png | Bin 77795 -> 0 bytes Final Project/UML/ER Daigram.png | Bin 0 -> 339412 bytes Final Project/UML/ER Diagram.png | Bin 24149 -> 0 bytes Final Project/UML/Use Case.png | Bin 0 -> 107444 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Final Project/UML/Class Diagram.png create mode 100644 Final Project/UML/ER Daigram.png delete mode 100644 Final Project/UML/ER Diagram.png create mode 100644 Final Project/UML/Use Case.png diff --git a/Final Project/UML/Class Diagram.png b/Final Project/UML/Class Diagram.png deleted file mode 100644 index 0a52278d10f94ef7f883ee3d5fadb6eaa2bbe1a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77795 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 diff --git a/Final Project/UML/ER Daigram.png b/Final Project/UML/ER Daigram.png new file mode 100644 index 0000000000000000000000000000000000000000..83dcc2b4e99357023cbd53b34763c782715ebd1b GIT binary patch literal 339412 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 =8KtuY1b3Uw6hzX$mk%8?j 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 KF5mXcnEwJwC#(Gc literal 0 HcmV?d00001 diff --git a/Final Project/UML/ER Diagram.png b/Final Project/UML/ER Diagram.png deleted file mode 100644 index 04f096d041798417a6d333d08651d89c6d7b054a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24149 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%0Aq>2%}j+S;eIsTzP;CV--7 zMpt_cL81$f!Yjk)2wxj)^7SQ-ENmt~N@B9KHy;5StqMAR*WIjO=#9fhfMd>X886pZ zgPO8IX&=EbrlY+u7Y6jd$!F zlKSR7vK}mv)Aul#^ z|F+x8B2?~15iC^Cx2546%CtxC#AWo!3$$FVgeJefzY#o`e)~?K8=xO9&7`#3snCZF z_wsYft-{a)Y}CMczAAg(_VzYm-0WOfT;XWJy@DNXu6oLTz*5hgcVZ~qf=1{uQsAi) zuyzqoXVTS(dcm#k4Sj!Z35f>{1U51<*oU^&VxF(Vj6T0Of|A>e9#LTOrwksYm3kX( zjk6z@2XJAT7*vODWJmAd{id@c-qC~s1sc#!)6SLY45qIq%K%)G?|8g4^zlGBJLA`{ zU(kll=aX=p#mnd=xg1S0-Un?VD0{R|h&y6`vC)Z^$O1Hmv^qZ*`b`C}e4?aRWlyW% zqYgblmF2WX{$LFH4UyJEH9iTkHX}uM5A==gt*xPTUfR*uRF^JMsC2mdE}c>ISp!m*4)EU z_WX&k=ZaXF;__g~@Z|4#H&CH0MgJVtS_qEQ>9f5mV9>7XQ&;ypLt3$TF~MasGY-;t zs8#BVy@a|tFW9-YQ1#Mm1&jESxr5E$E?j{&e)PSw0`zKhW)~2;DNi)i)EGpcrTP2g ziu3751}r}TiR9^2eP|u)G#3!$*Q$rmCZ=b|wE)KuyV9HX2%$JcGZ9#j-QXXnqr(Jn6S<~tSN*<-YYaLot%w*_ik=(uEMhWQl;gu=2wzld%}Uv znFNsPbEjU(I&v61en~yjfQ6)@hJ_~*5fc;Y!S?Gd{golv-rQXJUd;S89=#taeSYG+ zmCl={3Ll^@aXhRg{oKn-`uSG-<-VeKO@ zt)nn%LMzTk|7CONpyqX4PIfi`e!Ekwyck~+NHZcI9U2dVR1W|Vv$M0GgYtO(kp7B{ zz!foD)VDMuIBJU}mZIH;?%JCR0w3OlhNkNan?E?OUN&ME!b!OT9&bU;X$StIzNZDb%T>lYbG{#F+kC4xp;1`OT5Qs=+7 zG~78ls^92d5aauR8o`dgzc!rX{JxLs(v->DMteCQ;~&vCbhmV*IC{tH(1hJDMbE_q6UauK!u9+!~I38N<;QK3NRL7UE&uY;~g=Ck{R=Gn7-U+v=6) zD677tmZAZbj%BiZ!L;CPNbF+(Hh`hTTuoQqgqsX;2AQD|a6AkwkZ_HIrSPa@@2f-% zhl0>v)%--!tDk;Tk*WAn34G|Y%}8H+uyk>A+dLky02^Nsw2+5LfT5XyYr*1qs&)SO7cN9Mq}6WRn)a4ECqxAZi)Ren`Y|}T3HdZ= zY#hwN@}zG#JJoo*1De2p&6&b)@@5Q6H((so8i#`f7P$O68Xgb5>Br@I)2-V@M0fd- zf`WG?Bk;|#O~Bixrw#_Fyh_kQ6ge;L%MVDOA8N7ttPSZidvAc3hZtsk+L@4cDB&ne zFlG6i`TSo)PHS#|BCYH;^mDfFCLm^|Vu_LYgZFmbHS$-c8ecG!SZHXh6vaLi#;`yIdUok3VIQLPCpa@t>0;1@3HCkkf4pBiZ#K4-5M9= zBm(yhtr5fA@#s>ZK*!Z$vh$J0uBE_ zv5mfd^DijsKfQLf9h66uZ|t72T$Q~2u=-j0Q43bQqkLs?es9662y6;7gFpZ_Y*pb; zC)Z=?g#qgCdCf2Wo=b{;9dw*|cP?P?l#rD4s*t5}EK>+mKzVujFAii1{RPxcnzZpz zsShHvi84ls->_Dj9HCAB7t$>tYasU^EUS@aBeZ2NO9R%G7)F!cQ7t zb3e@5f=E}mfT2c)hT05eg+@eZxVQ*Q3T?j1Mc)E*C`8qc^RBZLbb`Rn6`hnsf*DF- z7Epg6YWC}8^RGM8eU0WOZ9(m%Mx_=PGRU!!RF}jk;IZ_7{Yr(>N){J+_Un%MhkP?& zd!{~z9BXe4F~kEzmdT$#G0Xx612A^5{7B^#dLvTv56UzY6jAZ<)(2jf7%wHgeV=~| zed*SXRcVCkz4&N%wO{GyK#a3rFaKw4|NN<^yBkCc(wes)KYrY4f^L;X{O6}Xjq7be zR&3?@aUTl7>M9^^n4!oD=HQzyw;~rC02T=uGUHgKSyyZU)J#!P(E*2<1nSF|<#*PW zCcf;il5>V+lG8do-0M505`XR*_WHHl4yzgJ5{&Foav|$|&wT)Jx0ma^;yCtW;Bf0w z2A+QmqYSwZwayEU(l7xJ9)I4K#NIJLSS$(^KG~A zCvLwxNX1Eu3c7G1h2FZaP(sh!#t^<-l~m47!y06GOh0 z*H~FwMn_{SA3Wa7NW4>J(H=tC`u+=e0uom^HMCz93{5)7GE-#wE^w{OX9m9gH#p|H zKKH4>3T0(=uTH19@yHgVA0a<{tIb!5;oQkDOV+-sMuLphuP8;lfD!`TBCvDLTpF7y zEG)#3tB3^&yKjZf&CPG$ULrn6DPDWcz(h+qs;jwU-r=4Avm)S;lq<>UFjE|D26gTJ zL9Y%u)!p^{0PRZ=RTeO7mynRq>hkpIT5BM2L6>Z)6iY{-5j0)O!uFPaqN`b@dvBDy z{)Dg_NNa&(n)^2&;ND+sWWH^CXJ<^XQg#9p<1yhAmJ8)zUljo?b^G>2tNG2t)9wcR zojB$f)dkNSJmlSL)#F1xyut{Bj^!+;^0E7v@>;L~NlJe%^%MZZ9OW4lwp#+2@tupx zo^AFjM`b>Or!Ij;+S*ZiF_*1kHG9Kh4}O-Iw+#*Hm>+>gVj<1i^<=uyWH~ACjhd7l zxRt-O^4;c|_}YK}5tZ$?ET7d;++4p*NfSVw=@5B;P#1A_>2bkNzF0#FU40}RkWObfp0 z3->NzWt7=YH@;})xpAX7D=Vurl9~BG8}ABN1wFltQ&X;h6Bxb5#tdVfIbTo0R3|_P zV-|GRYtoB^>M&Fqx!Crcm$v=O7ss%G)YMefejl+7?eU;qu*6;kXUCn3DyxiOw^f+E z*|A(@q{v-s*?as&zUKs$-FGv;K2_9JC-RCwX~1=br@A1|!UBCZe#wXxfGz!^F=Qh+ z6GeL8y0rv2R9sUH5_XoyZeS8!3=b|Goo zoPPrR9~A}vmkFJxY!3{LV3z#$?OR0)w5c!SmqR&)rm!2~;?`N`uz_VEO`yfK2;cRq zS~vP(@Ra3p+lhyP|IM$43b)wVGwt@DZZ&Na`zBbGNxYC~I{RaH8F$;?XyIjFkUaCJ z@uLJiwajKh*`I*-M$Hu)%K$we&gv;;oeTF$1*(3=3wvK~lgA>PmnN5&yxk8T)Cd|F zO@wi>m{0Hd>PvdS2|3jZgRH~F|ILA<(_uEx`}Q$sHs4HuMf;7zfuC(x)9Ff#vhk6Z z8b;ZQ$_c0k)i*Ot%2GD4(R+fJ}Nf)VZNoYz8T(;CiAQ4B1-*u~V z$4`agJ8E$@cG2`3_KPfNS_*CFlG!tn$zq%l~>c7O2K;KsA zn)vNxQBDfoD0=c(S@|L}>Y5WS^eVpu6TGG!A%vmF03Dg&Epsp;@Tm1AiLqN=O_#jJ zLH}W|SR6Bv`kkZM_ukCIWT~4`zTXBj*&9<^PzjgOc#kbDT|m-v*Gr8w@UCZ-)+n*o z!&U26d*Lv%0~6db=`8@eJbM0+A|0fe&zd84Bt; z#5YLW)#^$3_Y~BEJ_b5R$n6IewxgnsszJz%}{2~s;x!-7a_p)A|~*@EU3 zNTmOnKx<*R2_TS|RW?~UAdB7y;$NfWwbkBpY^Lr*gCfruBrCzElcLRN%cTqPGAR7= ztt}_`vjnlXV|H`%Zm1hgRymkTJY~=CF$W>xCOY;`ooN^qFe*pQa-6gW zEvNfYPYy^s1%Q9!|KAvVp(d*{vaiO`f`m6KMu11KixT1gjtn_eThR}HK_K7d$uLnl z8fny+{Gwaxmm@DB%9u)K(>(6&`zv%;u2G>ZEyww|ywde@S)_L&twCb~Pn0+`$YEwH zFes?Z$e`_Q4gJETs9;c1)@xM~Cpu{qbESgJDx0wPSuR1D^2+Sz6Zl7Iize>r!aZ&@?@t2{7=K)!Xy`?}D`? z)N_ssH4`2CBB&m9snq7SvnY9>qMm!8aQcJ787~d+Yo8t`95@XA`3R%Zz6UeGED3Dp zichtvIs7aXE9>h|U~GARV}rtLEomiCC*998fGxjGy$_Y-{M+Sh=9-C~MHGx#B#@%< zo*Y@|axoWgbgdEcqVkoP-|o|V6XAnt-AKbcL?R63DDhg+zrAStXEJhr?3CH(pyk`Q zxQM>Kf4gv9dZ+(RJglk4_yOO6#Q)f%_MQw;kB5~W+5!cGFsI@q8{>7Bn4)TB>^!mcSB`hu-eiG z;g6FIB-t`wMF?;o?1D~9!VMPU4t>NFSzbbWwf>=)P+%3kE~eG@EF{~v)=ws zxPUaIf+)yk>=L*pp%Uh+GtC>q4vM-H#ThZO!OCSh!G`KnYB^(%^oSX=|1-?+gm=zH5 zAe`0f(cTTT$b{_fWH2jLe&%J}i4qUezq7tiQybPBRMSTjR! zG#jk(er@%~Myt0YsTfTAL@kr_lN`IOGXR~;>O(c8 zHBceF%PB&~Fp;wn9qGfnkRiIjNhQnk@J|>uZ^xUf(Chv~ULMwS7GdO7*3ozx=kWfV z^vg3Rw=LogFR!87VgydVqG0R*zZ_&S%4;x$E9%erI^u>Eqfj4@=F2ohVY!FCp<(=y zSV-{om@DBLV_ZM=GkyVmwY+5fht6ipd=DJ;&?t8zh0r=N$Ct^*Du;$<$bHI$(|Nl8 zvtrrD)C^$?wjn}!Eo0V+kYg_3fp(KTDIb`)@u0t2{rDenyF; zyv3iuE|C7;a^UV6=G>y{T($J(3208ldvEw2(up%PqYmU$I2e7#R_cc(0&oS zl|b>92+2|r2@QEfj41;}@WOY!w7^%#h2tS!SIvUrNt8ov3bM>F6Zc?y@jL}1yfC1C zM>~dv)4A~I4kHc`vj3-zGmnRIZ~wS0>m=K#$-YD;j$z8uf-pj3FqTXzM%;x_jkFv| zWjo4}y%|KZFD3(}`yMud7=5ZO6ia9q<(KIfV- zc1B~2y_y@Zz+3@gKBq47Bd96bA3mHk(Y@}?66LbuWpcc#?mBnayc7iQdox@nOeL&@ z$05RUy|U8(MfE7G4nSgU?M?BAe5KZf9h)<5-aeT3`BaHVP=dkK>b+yUdGN}PM(qqc z5^M#0Q?)6kit64)R|Q2R$=N2!d<|#A3bRIshmTJ5H^M3!`k4<}T9)Gstv%A&?9u*y zi*kE=`w?@8zz*#-dpe5>eTE8s(9N2wl$Q6)a-OJv{`CYbmfgAY^4YTsmARX-i8Rn3 zHM8`1j1g>+pr9c1_8Z-$w^t)`PeqBPtA4M%Z}5$}>3#0`CvFpBz5&wTm%OEYr_xhW z)Q|dt=5QFUxsGQ=WtSz%kM9kr-F?BCMQcJKG+?s_U$iIS{rs2Y+u~+t$a;gyOOL>h zYpyXdYOr`|4>2*B@E(|eG|ke7p)Ba!X2#`xv>ZSBb65F$MO|$XjdQM$0 zKeDk{?5H@zq8h*qcrL5oqe}Uc)5PYXe|DJtrCR|hl4q`9JzWJkZ1sXndaoiik(?*U z*`{(*GtE;(M1(S9+WG?Gg|$$cyflsII|**>>}yq$_bURKLR3f7lmG#mHD9AY>y_#;1cB>&W#DFwiL=yXcgYLF*Px< zcJ12dz*K=ITt`e))ULZ>G~P73f|DeE%fedJTUbXDNgDJOVkKXJRo*7Gos3sc96Ui2 z2eXzIH`owo-{Lm$Rx{QH446ZoI{!OQx-sa1sWHVuSbIo7T8(!rq1pkNZ|5q-R4DR} zfh3{hV(aTul}(PJGO_a}V$;#?BhDH*Yxa*;qjdv6&hTEey1Ed0CrP$U>F+U3T##VH zN}-oZ{r(P?Sd5I+HYfbm2o-HL+GI6-FTTVA`ole2P5%; zs`c`_6I;L@;{z$+`uh5snj;n#4Y0U-Zj{YuoldY{kao};Ucr0V4UJjJ3J&JCKsd6q zYXdz>LtQ=U-8`Q)bJdz$3$0aOL;$yh^TmI1omuar%YsCG;Ogczv;47x1bcXA2>)!R zrL`4YGYPPkheh?E>hf^D%O>$Dj;gZpv%HX21eYI09?9ve83%S>CRJ8e!Z1a#x0jJ0 zlRM4ndmyxT0UduMRY^_U-rm}}I#x%H3DYva2Ke#86RL5mG->Tf$EC8Nw|AI z!OBUw;J#w~YPyZZYG_^6*KaZ11MS=){Mr0rn9To`kUyXbCmdGp8(?tiG`mgQAa(+X zBf4_CMlcuzv~DPtT5`{!T<+R{c;B9BL#ySOi`pJj6v*a znp@4lNToP%NouPvy~K+m=*h?-a=NCff`rtuSBb$AEHzsw&e(weboSmGm`}b(!PoR(v_1eI-H-Ww+#QK@L zMwD|p?KzjDpUX>P;e#P|@-JMJe!CvjoN8RDB!2KJ%}?2l$P`5%Kn7_(3h+NgPs0X2 z{5j=~?({6-?FE3SEzs_Wq|?$o8!(2lEHza@>PGI+1;+(lbUQj?2)Z}PDp=5onk8I) z=VH#vdntg(7Xru%_&u#jTfQ#g0o){sLcSLEe*=o*dQ-g2zD45NuZ%WVAmgl?H;;j3 zuDuBc>>o2T*ZV*z0)uvWw)qdyZRKF#*vEx64(-m?-+!Nl^#I2n6@{Va3&emT8O|-= z^ypBO3efW0|zFjOsUj^Cs3i+sV+&7Et+ zypt!q4FuT=!qHANlSBOt;GK@|2n`LT>OiC*^+8WKG>X9J46h8Rd#$}@Fjo->hoB&V z9!_;5x*mk2Gu#UmBvdg304fmB2|mDp25EA{d@h=FJ(altB3=uM30fR937L91?3 z-_l?l19Pu7Q+q~IT8|b2O5~i_gaD*paS_Dv$D~lwAHN`QQ8M z)x`|a9taD7c|TvODFkRQK74w~0h4iwiO42@aDxS1bGhZW>B)~vL$&Ab9U8o;UC0a2|;h;rzm`0Jdd_ zlWduqU-v=8)EGbS?bY<$AH3zzTl%i7tPI^B1AAirYxKg(87r5S6cj|=^4gh&gYHV1 zJYp-p3}z>GBYDl&33%@y_hJU~J;H68kO=v*mYF^zndj(uX-FfMygF z6n3^4o%lK;ttV}h>0Wu}{{;ouIyj_n904b*hhT+04;WAy!YAG3uE$N1LkG2KZ2x?e zOMGDl(Bd+}1k!hlNtDmkmoQnSQOfSFN3R|}dQ|?0Vn`)^G6KBkvhHv!M?y10%AvYL z5d!P~4`O!IH}Q2hW!WGwHGp#Tq0PbgwM!v-n>&4P6AI%6N_o!hvj1JD>f!WAF3 zk^F8RS1)WwK#;fmcwz4K^!S_cPoFvvm;~qBv~wYO(|gTpF~RtC5^jAEXX|KeR3Z2* zB&tGGpl{V(;;aEp3A*d@$rX_K?FG>lTzHRh=OT-`E^gYPw6zD0QfDRNYTdR6Mz_;@ z)R^_>1B_gk7hfhV(mI^OyVJdzOvgD;xdT~;!C+(>1=)Y|DSNxUe!rU#@iCZ0loS;y zIh$$Drc@;ewCyw8&MF0k5>53GL__zZ7y}2ZX$$jfi31gI@2G2e0c()Y45`qDg4QaT zOvaR_r#>yhYq~uE#7UK-hGE=QZpX}cY*v}D{`KO8yApRM_b$gzGnZNxz?dfFOF*1n&F!SOl&;+0o3U7gk#X!HJP*2( zt$F@CFS~T7-@+{_bwAfAy}bG!+u$VRYM|nRPG~KewKYSMs2LqWRzzG?QpAYz=9*O_ z?Jvp2_ro_VBTm_ZBNV_4H6X)5u8R*znr+6|<*E8L>gwt;;5mgHX5WagWw(qmakVtE zam{pUXm^<$0;$5IhYp#Xm}ZdtF290Q)t+0y%Rn1ZM2}HN0&!(h9S}un36W`f0^S;6~ zD@y&1t16+tYJ&T9;#nX*4VF3HRZbz!gb?NZ&l|3Phvq&M<4aUa5h0=LIX|fnAlgnVdjGyBTp2)=%t7nkv~AV0$0YZ^y1k()DyEq4=?Vn9LCzl5 zt`QxU=*)vdgk$ROL7|D)h?%$$2kudg;A23R3~+as_pAXw?*p-Bm(x>pBp~nW-{WW= zk&D5cIDh_paSgniZ|a!&CYeqFv+xS!=jWrTaK`nYhXeu=QUqMhyDBbgS&l+MW+Xvc zxvcrpPjk4i5Q8!E5MWsx!$aW!V)-bA?}%T2-0-d*2KkK3s06$A~lkWO>FZudJKuJ_+?1;^_=0b*Czt)%J|m6TSfnC*f*@uL6E&hF(m+q72MAJiepYUP-n z428)XM*q1VKL8?8^3u!Eu?sR&YI)fMiAKI`Lb)>S_^?M|1LV9vUbK}}R$c%jAXM=v zkLdM0^&zyO?2-U4xCay#_p7^f%!Ia_EX$Y3x2o{Ems8sv8j=sjJIm2>L4;~&xWR@p zlJ>ym;9;v1m$v=s-6&8y1Reh-(GyYCpic{e18vJ25U_rczrvZ=y*7In$Xm0YtL~;F zXV`nC*XtDmQ3% z-*2zkDL<}LRd>!nBi%ezR-qs;xt7bVgrKggt&{8cpn1>F^c~aUK3gEr32!GDbe_w?YJ~z$CSQvjGJ?Q2Z$^Z6jNA z7H#LSM+3P6m|=8XnW;A5a}+#a#bBcUIoeQTVp)SOkw{ciJ9Fjo>S~i#k!qPfC$FlGEK=4;PVj@YdKW(XeF&qLp}Da6;e;9Mk#2q?gGkj8FFPt|mx zFp^-2e!T!r4I+sh@ziA5sh;BiRC;mB+S(dmASA!L4)CTzH=C&;qbGgJSp*z->=rlR z9#w9QX@GTiYo;pKdpQt5vNhRDUvJlSWX!_YSc23;zfVB(L#E?<0^>O$Jr{bbrD=N` zxJ`7es=9W#7e=DoNHnD!MEq!bIasr(!uJA)3EL?Yu$MJw z3FAoMDCz3zGS*?`-Nbuqi4IgDl0w__b)BzBDe_fd%ij7VwAiT7pDSU)V~-~fEiqOM3-qqa0-Dy^5&>Pdt2 z7!UOZ41X+Agk9$j+{H|s^mbn+!SjZ18w?DMd|#YsG&G?BQt6;K`q}uzZ24$=1?XAy8>8zk+yXpX+8cqbp9mQNn!*CCJZNa88qWIqWa;DE5iR zenKw{PbPui&R=K##;kxYmG&4wR%rO<%u3 z-f=Y5(QLNWeBq3x1Z=WkYiVieQ0|q}WDi(afER25!V%89(C?}KjoF5?{~z#n*^@=V Y;9Qc9!QIR=z<1}fBT=lcT6#zP2OXl@r2qf` diff --git a/Final Project/UML/Use Case.png b/Final Project/UML/Use Case.png new file mode 100644 index 0000000000000000000000000000000000000000..85d39d22aed641cc42f663e110a77345b800d8a7 GIT binary patch literal 107444 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%0AVP!%>-kMm_?bg1qAs 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 literal 0 HcmV?d00001 From 25f0bca91a322cd14ee0a6f3c2007dd4d3e80d25 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Wed, 19 Jun 2024 16:06:24 +0530 Subject: [PATCH 03/24] initial commit- added socket --- .../__init__.py | 1 + .../database_handler.cpython-312.pyc | Bin 0 -> 2563 bytes .../__pycache__/server1.cpython-312.pyc | Bin 0 -> 5385 bytes .../Cafeteria_Recommnedation_system/client.py | 46 ++++++++ .../database_handler.py | 44 ++++++++ .../functionalities/__init__.py | 1 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 145 bytes .../__pycache__/add_menu_item.cpython-312.pyc | Bin 0 -> 542 bytes .../__pycache__/add_user.cpython-312.pyc | Bin 0 -> 528 bytes .../delete_menu_item.cpython-312.pyc | Bin 0 -> 553 bytes .../__pycache__/delete_user.cpython-312.pyc | Bin 0 -> 535 bytes .../__pycache__/exit_program.cpython-312.pyc | Bin 0 -> 524 bytes .../__pycache__/finalize_menu.cpython-312.pyc | Bin 0 -> 545 bytes .../__pycache__/functionality.cpython-312.pyc | Bin 0 -> 538 bytes .../generate_report.cpython-312.pyc | Bin 0 -> 557 bytes .../__pycache__/give_feedback.cpython-312.pyc | Bin 0 -> 541 bytes .../__pycache__/roll_out_menu.cpython-312.pyc | Bin 0 -> 551 bytes .../update_availability.cpython-312.pyc | Bin 0 -> 578 bytes .../update_menu_item.cpython-312.pyc | Bin 0 -> 553 bytes .../__pycache__/view_menu.cpython-312.pyc | Bin 0 -> 1629 bytes .../view_notifications.cpython-312.pyc | Bin 0 -> 562 bytes .../functionalities/add_menu_item.py | 5 + .../functionalities/add_user.py | 5 + .../functionalities/delete_menu_item.py | 5 + .../functionalities/delete_user.py | 5 + .../functionalities/finalize_menu.py | 5 + .../functionalities/functionality.py | 3 + .../functionalities/generate_report.py | 5 + .../functionalities/give_feedback.py | 5 + .../functionalities/roll_out_menu.py | 5 + .../functionalities/update_availability.py | 5 + .../functionalities/update_menu_item.py | 5 + .../functionalities/view_menu.py | 32 ++++++ .../functionalities/view_notifications.py | 5 + .../roles/__init__.py | 1 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 135 bytes .../roles/__pycache__/admin.cpython-312.pyc | Bin 0 -> 1252 bytes .../roles/__pycache__/chef.cpython-312.pyc | Bin 0 -> 1169 bytes .../__pycache__/employee.cpython-312.pyc | Bin 0 -> 1157 bytes .../roles/__pycache__/role.cpython-312.pyc | Bin 0 -> 650 bytes .../roles/admin.py | 21 ++++ .../roles/chef.py | 19 ++++ .../roles/employee.py | 17 +++ .../roles/role.py | 8 ++ .../Cafeteria_Recommnedation_system/server.py | 101 ++++++++++++++++++ 45 files changed, 349 insertions(+) create mode 100644 Final Project/Cafeteria_Recommnedation_system/__init__.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/__pycache__/server1.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/client.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/database_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/__init__.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_menu_item.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_user.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/delete_menu_item.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/delete_user.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/exit_program.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/finalize_menu.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/functionality.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/generate_report.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/give_feedback.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/roll_out_menu.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_availability.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_menu_item.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_notifications.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/add_menu_item.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/add_user.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/delete_menu_item.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/delete_user.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/finalize_menu.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/functionality.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/generate_report.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/give_feedback.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/roll_out_menu.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/update_availability.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/update_menu_item.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/view_menu.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/view_notifications.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__init__.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/__init__.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/role.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/admin.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/chef.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/employee.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/role.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/server.py diff --git a/Final Project/Cafeteria_Recommnedation_system/__init__.py b/Final Project/Cafeteria_Recommnedation_system/__init__.py new file mode 100644 index 0000000..bf587af --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/__init__.py @@ -0,0 +1 @@ +# This file can be empty, but it must be present diff --git a/Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3ee52d6eda25ab189cc3c844675d6ab0d730980 GIT binary patch literal 2563 zcmbtW&2JM&6rb4-f5}MzV`8hevjjKNR>3_{C~AumVjwgaL{haxNUO!W0b6T3%&r?8 zIY288Mxq5y0ilW>dH|(T`!A4dFNuhRwdH`+Q*TjnXq8_2-tO99HzKV%O5VQjd2jap zcKl0EPl&*3e#K_)h=lxxLTd>gvnc_yNHn5RgG^J7oFp1|i)j23=Xy+YH7X0gqmawH zDwk4E*h~YnNOXwS$TX+XTV$HY9Mgiv0~Iv^sIMl{Z_c#gbv`!SqfTTubnv|lP)QuVD1G9<2lC*Vl=IF%sf_TsoPZY|kA)RBDqMo-dIx5X8O1a`zm6@&C0Yxd43znkH$GU3Hv@Cdp zW)R3t(u@x_gl~E`K_L0o!Jq)g?)EeV%p$Scw&I(eqbICl>!rA&Lp53;byCD0yVei% zTRKT(F87qkf-RP6=2gQE!r7Feu?n;O9_yTsOqn0zP268%0idi8$b5fyb6$|+oC1%V zzE#Nyjcx10!B^4JBw z&KKW|_w*Y5kz4ZO7GRDR#JW(#++C|K!kBO~Tx(h>0Y5ChYqj_DfgRsj*J{}zp5MXl znox|A>6o?vj!VfWig;b$`u!&e1t?jlV$V zs4V8Do>Duc74lZ0QdU`QzBrkk$R3}Ps+pWx(uXCMIbSh!$aFTDzI}8bjk1#Y|)9e#aUJ;TXMjeLOW0epEA^H z2WGvU?2tEk&>!3DL|(1xtY!=7Yx6o|CXTJ-EoX-9p3AzWpo7AoulZ#6G7%7tx{B=+MvUmFUp(=;6kRb%8`jxJI@a-g7s1JNMww z_eY+5u`>9BbnECvH#N$u-0KUW5~?;lx@v^(xZe`1H>S{FgRWyYYYuSevOVe)J^Il7-;4)%^F_~nEM z{Py3I(SHXoTBke0ivxJ^b#7aD@huPnFu1n@O91=Zfkk()3;zRHVh6CqZGa_S7ad^1 zvlCbhAvwPkYE2eCJ#du(Bg0b3gIFnZjurBNwNhr}OSNFAmkLI~s!dv|RW(6tWzOiT zF;$z@J90U2JfoMZYE?B{3&R0-zJW|aE{z1g z|IR(=UaJC%NbpuO_W`*@HaIFC*zi&D!wp}b7~34&Eymmsbd-6!&$+!b?aSMJc}}X% l^jm?C+|oW_GKAs{Y2weNb)HiCE7|vlAk)|e{8n=F{|!$gAlU!_ literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/__pycache__/server1.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/__pycache__/server1.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f41eed802b398dd761e00b0abb5d79a3c8eb73e GIT binary patch literal 5385 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 P&iH;gxIiPO*--XBRI_@n literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/client.py b/Final Project/Cafeteria_Recommnedation_system/client.py new file mode 100644 index 0000000..3717862 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/client.py @@ -0,0 +1,46 @@ +import socket +import json + +def start_client(): + client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client.connect(("127.0.0.1", 9999)) + + try: + # Enter credentials + username = input("Enter username: ") + password = input("Enter password: ") + credentials = json.dumps({"username": username, "password": password}) + client.send(credentials.encode()) + + # Receive initial response from server + response = client.recv(1024).decode() + response_data = json.loads(response) + + if response_data['status'] == 'success': + print(f"Login successful! Your role is {response_data['role']}.") + print("Available functionalities:") + for key, func_name in response_data['functions'].items(): + print(f"{key}. {func_name}") + + while True: + choice = input("Enter the number of the functionality you want to execute (or 'exit' to quit): ") + client.send(choice.encode()) + + if choice.lower() == 'exit': + print("Exiting program.") + break + + result = client.recv(10000).decode() + print(result) + + else: + print(f"Login failed: {response_data['message']}") + + except Exception as e: + print(f"Error: {e}") + + finally: + client.close() + +if __name__ == "__main__": + start_client() diff --git a/Final Project/Cafeteria_Recommnedation_system/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/database_handler.py new file mode 100644 index 0000000..c656587 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/database_handler.py @@ -0,0 +1,44 @@ +import mysql.connector + +class DatabaseHandler: + def __init__(self, db_config): + self.db_config = db_config + + def connect(self): + return mysql.connector.connect(**self.db_config) + + def get_user_role(self, username, password): + try: + connection = self.connect() + cursor = connection.cursor(dictionary=True) + + query = "SELECT u.Name, r.RoleName FROM User u JOIN Role r ON u.RoleID = r.ID WHERE u.Name = %s AND u.Password = %s" + cursor.execute(query, (username, password)) + + user = cursor.fetchone() + cursor.close() + connection.close() + + return user + except mysql.connector.Error as err: + print(f"Error: {err}") + return None + + def get_menu_items(self): + try: + connection = self.connect() + cursor = connection.cursor(dictionary=True) + query = """ + SELECT m.ID, m.Name, m.Price, m.AvailabilityStatus, mt.MealType + FROM MenuItem m + JOIN MealTypes mt ON m.MealTypeID = mt.ID + """ + cursor.execute(query) + menu_items = cursor.fetchall() + + cursor.close() + connection.close() + return menu_items + except mysql.connector.Error as err: + print(f"Error: {err}") + return None diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py new file mode 100644 index 0000000..bf587af --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py @@ -0,0 +1 @@ +# This file can be empty, but it must be present diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/__init__.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09d560b0e4e40fd954d986533b83eceaef899884 GIT binary patch literal 145 zcmX@j%ge<81paP?X+}W$F^Gc>KC=KtrZZGBXfpb(WGG?+@;-yq{4z+hiYZAgE&&q? z*@+5ZPFiVRa!F=>USdvWNoHzsOniK1US>&ryk0@&FAkgB{FKt1RJ$TppaG0PTnu7- MWM*V!EMf+-0Ny4dd;kCd literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_menu_item.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_menu_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f127308b85fe5fb6fe67f609e1ba6bb1d26fc61 GIT binary patch literal 542 zcmZ8d%SyvQ6uozn(%M=SA4?&tmMqLp1Q9_H#fANVP#8jHBEclJd4TE4ML(dsZu|l9 zQ~Uu5xN_xAh;F)aZqh<^7H7`QJ@?GXeeHJJppJ1d_MX)JLB;AcmZa<{G6w+y0|?PZ z1O`_i*c5~&@kOh3Hp_Lh@kxb=MfWm`+|(aMPT;4xTT5!hWl`=ZG6xAZ3b2{LDcD-h zOs(jg3vnZ(>^ha9yOOUg=($p_MsqaTV6v~&espU%MyO^CUkzE7^-L-BLh!9HT0{wV1w4hK>-NY$3J#G?o2sQ}FsRH`Pgql+*88-U0hS~$Qo`Zj( st@S#OX}GrfYrkln)>+QtZ6%?tBzp?JG(>!d<8Pf|e|Go->Z%_61>`?}sQ>@~ literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_user.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_user.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5df26701fa6865ce2b0b50baa896001eeed0d6e GIT binary patch literal 528 zcmZ8d!AiqG5S`hiv{p++dKGf9kW26;hzefx)|;15SVDFy!6dcW1WivKdhieW4dSQx z0}{}SCvQUZ(vv$$3e`QleY5lC&FsANdR@@x{d6{2>idI&^=UPv9BQ%z0Rlsa&_x6W zmmt^zgdy?SsC6#OO}q6;fsIA)B8&Yrn8schq`6;9YQ!ce_cU381Q!LkOyB}sBWJcz zw9kdOQZn(^(sentD$S}aN1Ki21Fa0=Ys<4@d1qz1#&Mh{8o*RCoG3D|R)>@0aVk|> zfpz0qRWR9@Fpz5O3BfCe+q`JYd+BGXocEhioaTX=E85Hhy!H=DO<-i3MThg)izMeo zm-A>UvXJ-==d;WU>r6tMPTB<91X~2;Q~~`=QE~w#!`86YPupbawmXO^@FiCBbfa%FYKfqhh9>q`b z2PELhlQ$uH>B*f<3$1&2JCm9B=I!LI-EM(8{mw9WR`(|*i_@3~)sYIOAV6RQF}jGr z;0gqrfG{M!8g-w`3e#?UQDS4+zRVLp3kQi8g<0X(Ej8jisdiN`1qm(+aGAgfxJJQj zqulDqNM`azCi!(HV}HR|sL;g9)a(Ln)*T;cLYUlIo)s&W6)KwJI4@+yOl1_Lq+!iY zgR@>H(@cYP=UF-lmb`{C?Fl`elM>fT_eHrTAEcjWa=gE4&Y6EFJ1MQ~5#G0tD-}T3 zHp?dGi5E-G%NFPHK;#j{o171GFRCje`URskf(?Ro0#edIZ%wH*f*)N61|yn5H(DfN^r@4{)o0LHsHH z0SP!cxe3vwIC$?ah3XC8eed4)-uv#o^m<)T=jUV=J*xX1gVkv@q~2F#0US6Qx7vR@=I=BrYA@^|d%oubjXsRE6hxPw2pwB8eoHJIjOUXq*d~ zYjCauM+ecG#aPHO*Hf8pa#L1qaVx?i7tI81$7|lufW!se!|V25tq6=NRa!y!&g)hp*w`wR zYDlGgVkY$_d9fvD($7+PzqheMZ}pJ^Q3Mb0wtY})0t3e`>YR_fSaM!8IFH97i-@;4 zpJrZUUXrHvCUt@q0fnAWrwZt2)Ru-hlniSf{YClrTi^|$@9-Z#6P dCp+3gp{RWgUlt;M!0ETmu=8~M1Ny24{sN$Sdj0?a literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/finalize_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/finalize_menu.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ce93c48b3d91b9f3759bb6e5270c07c2a2b55c8 GIT binary patch literal 545 zcmZ8dO-sW-5S`hiwAL0yiZ>xAZ9L>Af>@9BWPU&>EFsxwFiCAb!1UyyKfqgW-o>Bd zACQ12Pu_&+r6+fi6smi8JG1lV&D(kH_q!m^@o45f$@_zn^=UOhc_@P=xZq*{AzFyQ z;1XQ609O(CqSQQ#<*MHLq(sM}Kh7d2^{0^?_-XFclp3)~$~_q@L4buWSj@!*SW3=x zrRa@)>YIxz5oOMrzt*66rCRmos55iE-_ZT&T1#()7RoNeFrLYWnux$lNJ3kkcxRJT zBxwcOt*upww_(&5$;4}B^GfC}FWTZ>I9V#@gH2mT^GZe%TGa!*?HrXd08>|s4(E{_ z3eJlz=i$`N0*ZT_&oVoxD>1D;ZWC-1Y!Q%B1@y~=iVG+iwuUu_%BI}V!9Ul=W}e5? mTuc3xUvX{`>`eAu*E=B3%k{*2l<`X?&1u)9IFMux7%qXr3@CcT zm10AN&6eBvRYY}C>`F2R1~#H#V~S>Ax0E~AFVe^rejGW0FEY1jP<^fXs|SjeCP&u% z8JXCc9^IyQZs2gvxWPwp8c@Rz#{mmjBn&a~xe+okifPY8`JNSvt43t>JW1k2mfM^K z9#^*-%VY0kC>R$d8264*Cf?efKI6mnJnN6Me3LyeHx+EU|L>Rjby+7eT8I8hGbKLdZH54=3L1$ tC@|WvP-RlOWunTbEAy&%shw6+&Jwj%dBKh(-z|jDFUH71KcKK|`2#W0f9wDN literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/generate_report.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/generate_report.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c5fdad98b9ea406e7d50058961bd7bafd54d7ff GIT binary patch literal 557 zcmZ8eJx{|h5IsAoD1`z-hzX=jNEygl2?1iFTL;Fd$chrDMC7B59f@>e=nr7)KR`nK z6#f8;#Kgpg6j(apOH!%D!}B}e-ShMLt=sK@T2~hn|5@#y7%W$-A?1l8bMU|;AwGPPUj^sCdoTSoSb}Uu!#!|1kb7IoL^r&eF;*k+0vAhd&BdvNZ%X&dSy5ONN zP{>&H{Ij9tLRMhhJ4O}wD~1CuhNH#n@K)BTsLSn=V(db*dF11_q0?5 z2Bu!L8H=5WGgfpMixMvjk#93L$(*pxr1%Z#2ErD?CITu|fbSKUoIy!R%c^TIJy6p+ v{^#6Ujq?v?EXRXxPG}X=82L>j|+Jhu?V}Bkxfgh)CDJhXuLEceh4FYV!!KR$7z}8Y~ zYFTUO-->|{{MvD+?pD9;f%9^`s7;AUN6U_q`{Bg!stU`pp3s9XMc_#+H#TS9#W)r+ zF2I;NMiF>BCVe5t6E&Cpwz)~Oy0{Z=5{qSb*OFDeq6vv>x`)?;<6IFKnR?b>EOcgq zv8>71Y|fJad5f_{;sj+T!nH?rgnfiP1ng7*{!n6a1vw?PUa7(KNNwlnpKEJ3P9rQX mTm5anXAz+}D}v!L8j!2~?;NC*+J z2>}Y{;L$O78YeGW&9iB)n~hIQOj2~uve=bD5<6iabGN3{NM=d7rh*A@u!#pY^~e}( zEvKedbgq&xyv*bUk27~ppG)9%rCzn>#H9VvHnM~G+DI~K$RtYAG`ZUqMx?qe%X&sT zy5ONNP|BDd_(ucDg{;81af~YQ7yJfX3{oY^lp?ESZu6qa@41^vK3ZRJXUz`LkHCRF zz}w1xsRHPmdeLGmb|TJL(Pk`4ye!0cnXzH!gmopw4@jE`9fTzWRH^_UE3i0*l9EQR z=3u$6=Ct+Cw6&P$DK^(qf90pG(w_zOUm BgmeG^ literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_availability.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_availability.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..926287076d0d3973e6540d6580e20317d12e3f1e GIT binary patch literal 578 zcmZWm%SyvQ6umP^X{{EexDpE4C}fkR1z+Gscip)Og<rq=l-pICBp7-ZLjRFRfM+)VVtzd(Y~AN3lG$1u6FwnSlU70tksq z2v9f&L8l-LNuG?V&!xF(*FI3#q-dRG(IEAQ5fA({A5<+Bl7%SSip)TQO9Z%7kSVxE zPHm%TUyKA#<>?Lg1Aggihvn4L312Nu?T{0j_9nY}$d9fpzA|SGJu8$^X8EZM9mjdZ zaAqO{FF{9Ze&`+aQ<j-NI=%fJ`kYI5NB_*|P z)q~}pT4CqU7dWdrk8!xN`fWdN993CP;w{yJD@wK%d>Vw1H|Tzulyo0D-=Hr2;14Rj BkEj3u literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_menu_item.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_menu_item.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5248952f9653da6a2a4be9ad28b6e3bbb4ffaa79 GIT binary patch literal 553 zcmZ8eze~eF6n=L}X{}a8L?z8-L_vlc z*7PVi?&TuO6*VoGUHR!#9B{2~{lon>>*>^s`YaAlA1zHv~? z0J^qWwHQmhSTI(#8H@Y8h%jDbY*=`auB7-2(k8+x!U_T^DZsa8SR6x5NyFAXSnkSA v?ftXvEaqj3WG%HUKW&|8FQ@6IY{A`R+Y-JFLdXXk{+N{5Pq)7yFE#KFd$xrY literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1fb169686affe148cc6ccbd6d3f3bc315919762c GIT binary patch literal 1629 zcmb_c&2Jk;6rb5IdtJK@Y3szsA)6+kT1q2QwTc=7RYK|lQY@mN(pW{Sjb}_Z_$&L- z#Ab~ul!Ff-Ij1B7)LyIn6Q!p}Tx=o~YeWwSF5IFTBor>p?5>Mdi5qkH&F{T=Z|1$X zZ{H7*NC?pN?Z!sl5dip=3B4uyqRj90)_{? z=aUtxVoLg*2`NY-X}grO^m0in=vI{~qKlfPt!XBHPb;AUHgcYqhnz2TU!!CfV336f zWH|&epXU&_Eo24uTvn_KDUk$k>v(esmuwP3YwA7!zTO?|D#lq@-9ZYwz<~}>Df3p9 z#+OM!BS6IzM+6fW@~&VqH$^#}&d=VpuxYuVe5NU`knc-K$L8JpGzhgwqnN5xNl;bw zl5VML?Ui0|Q#}={sVP%<06K|@hVXT?O9haF4E@E9-GHa4b{ELN0qec9zJ1-Vb)O0x z_(B~z(1cZpxH{)>h+pr0%RXZyAQ4F@fPx49X)OYPYcKl@E`m>HsE&7dB*dw2U7$>K znMj%BGKsPfV+M!LlpqS%15^`q&w~H;x+6HEBRK)*rPsf@E&zvH0pq}udcjTrBU+bH z#F4)N-*Gu^mG)m<{z6{y_f5D7w)j=B2~%e?wc$)zVV^?LEnGAe?Y^cLw6y}Bs!6O* zW<#}$pU=)+t1A?*yyo@rZW>0}m{n4O+nwa>r`U2EPIa>+Qod{yHH*kM zw{p0`{nLWo!?tVCEVjerjWqR$k3R=eWCJ#Z z&V~5i#7?%!b%tKuOYb;TGo0M}ct6q@tW1ge1O$!Uf*B{;J0=jjjVR6i} zXQmlC7)M^3QB(bL)nLPe3?P3F_XejIgZtVW)ZpI;PJ?q^)bAK6dcek&IYfb00>Wot T<{6m$LrB80M*UAfH`nnWLid}Y literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_notifications.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_notifications.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85290b1084219e494befdb7c34efea6aa6a66826 GIT binary patch literal 562 zcmZWmJxjw-6utK)rL`LTz(EJ0laLNsg`$qSWpoIIM@U{In5H%_QPatxe?jUWa1eir ze?S6GPHsYU>Eydf3$4E4ymPqso_BKdY8Y)$=iy`&JgNJG#NssOq&!q)3O@K4!2lgZ zU~mpTn}Dwge9`JYhvmB2_#|OsVVq^LmxjaGjlwkd>XsUDF3KH6rXavU9~|c61RO1A zrdDiUgyPm7reP3zE}2MgF|;tEM@zjj$kAl>c#men__7l(&smoBOmTE6qCk>KXVwdP z{Zz=bg3guOsYI}pHx#meqwM&q*L7Yr#hvi7RE+okMYQH63MFZG_wcr9mWqIF>P3t5 z*c}MYi#F$jp`S&>H#i?KC=KtrZZGBXfpb(WGG?+@;-yq{8CG^iYZAgE&&q? z*@+5ZPEmeNYH>__d}dx|NqoFsLFF$Fo80`A(wtPgB37U_Mj$Q*F+MUgGBOr116cq| CKOR*8 literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83ad822e449735549a970cb12f9ff87479f03ee1 GIT binary patch literal 1252 zcmZWo&1(}u6n~R!lFg>+UPP_68W6+<%|Yk>)$R8MfG;GB zPiaIpVFcr3GSbd%Y0{huxYb;kXNXPw!USX_FDTX;~ zqdTpR2>jF3wrT3yH14EEus7u%aC@v@!XmDDL)up~W zv)b#sdsZL!-MMvle~#blm4>roeYW>*VgT?;)C{VI^UUEq>WHo)KE?UHZlH3D$s((d zN^D7`IQN*Ip**PNXY?LKO`|kGB%v|>UWQ+VYRUNq2zqvGzvj7_V+w5&Y8qBHGtunk zecTZq;R2W`WxFTsfe^fli(}@O%}$zy*`?frhMUbzdQbq0&qLfWGyAMD>C-h!x5bTK z$9A{T$Nop7_hWkT4)VIGLx1d(d4o^uLnu<~l7k4}ij1)hm>ocK0EY)~bO6T&Z~}in O$_{f@F8l<%Oq{>LkU7=> literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13c6786244137210c21b8edaa66a6026654914f6 GIT binary patch literal 1169 zcmZWo&ubGw6rS1aCYw#;LJ`_p+eV6qJv1j3DI(T_y=aw+9+twe%}(sf>?Y3cR#T!> zD40?NFVY@7c$NMso}_wNl9PJKty0C}$$7IIk#r879UnC=(tqU3pI_$9l9 zk%E?xTi8afPVqr5eZwAU6)mF=f`t=xrNOA!^@kpPdWQzF;3c7BcjG7%M{aq6!@NzJ z$!C^mK)Dmq720g@NL(0w&~$~ou;F;jS@W0|wQA{ODT-|6I-VBWE0G^XHg=J%bWk0; zcw4t~9rO&_>V0G>iMqH>>$NOec`q*zb3C!PL&u%gKDC- zGSEha!IguIM8#8@(kV@OSmWY%S{spn-dZB!WlQVB<9*1p4}tbo00_g<6D^FJlqWhN zUf@N9a5&^}$RRNfzPK(RG3#+qi@XMuJMw5~sfij=R!`Kx@o8eXYh>LCTqe8~38^tB z3<(LrU8Pdl`m<1gbPIpuL?NXLS4PQQ~0Eh@1OmwPk%GV_Kibxwrif-ecm-EcVBePsY7$7 zYhDoAAEkW7=%`=x^T*;YvNR|Fq(Mkx5aKu7m;oOlvEE(b?8KA9c1isdX3=f7c+ze6Vc0j0@7 y8UEEtgj6D92c literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80132f9112ab606676314b04336c1358a245e42c GIT binary patch literal 1157 zcmZuw&ubGw6n?YWO*Wf`&?2;@T4IaBUUDoVB2}?ljU1Qxp};HChzgYf&Qui#T8@ zeQ=3Gdb*YC!%JeRkHJ(D{ej=&%?@LYENgi-FA(+7I|1*>0mRabu%GL~Tft(N9Ff#W zARe;{U1e;I3*#e4nGhE*SxT2IktzistA~dsV7?0 zZm}@YDfI#`rZhxnh|UlT3o%xx3rH$%J7^&Bg5cO=k*OwX#JHQNf$g)zaO(8A9XMP> zD^l9vb`((>VYq6wx_5rly}cQ;D3(y&va3=FMWdrlmhoC^b;22OV0U`VbZwj$@)6w< zaJC00dU?O_S)V(+@7=so=2ZsQh4p7CUp4ybSN-ZpoCQ9je@Q%kvI z*NjsT5YCVN8)i8%WTiF45Sx(9PtaN05$~J&;<3vXBuoGG2NwrGwkf$b`QtM&6V%Oy zLU!@;KW;WB>4n(jWO*`9Th0!(FAR@-39{yokk*Gxoa=W|BJYMbgo+eJ%K}bwgpdI& Z44^iE)d8%?@BS~fNQ{2`8^k7q`~@d*BWwTw literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/role.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/role.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cbf4476e95cc66273a383056c000f078587f9033 GIT binary patch literal 650 zcmZuvy-or_5T3m|@IdgQSP*042{hO60LIYTQK%Im*%0n9rw7RHQ9vjxC@AcC2I6yA z*=S)T*ZKkm3KJ@4_COQjB=^lXJ3sf$W?!<|G@xBqdaY;lpA>A&Sd(QQ$rLoW02jvK zvL`Lh)L@`FdUI1xo~?s*j|Vm8LQQko7;3t!AsPeSF(Tu#8+gt29MwZy$8TvPOku=E zz>&q~14f(KFn}4WI$C6O8f`DKTK!Hl^t+u#;D^2^DIvX}C6d@HX{>Fp3aztx=*dul zeb=y6AW(#?6PE7>k;%E=@k7psSyETtgrrLDBRs(TFh4OKQ}dJ4iSce8FYyqXzq&9W zuC_Qrf?L2X`fa-ck-#&DiJjP)=p?n;B83>`ZoH6htu@RmQU7FUh}=U!eOB(nD!y68 zSFt<8 literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/admin.py b/Final Project/Cafeteria_Recommnedation_system/roles/admin.py new file mode 100644 index 0000000..3e7d713 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/roles/admin.py @@ -0,0 +1,21 @@ +# roles/admin.py +from roles.role import Role +from functionalities.view_menu import ViewMenu +from functionalities.add_user import AddUser +from functionalities.delete_user import DeleteUser +from functionalities.add_menu_item import AddMenuItem +from functionalities.update_menu_item import UpdateMenuItem +from functionalities.delete_menu_item import DeleteMenuItem + + +class Admin(Role): + def __init__(self, name, db_handler): + super().__init__(name) + self.functionalities = { + 1: ViewMenu(db_handler), + 2: AddUser(), + 3: DeleteUser(), + 4: AddMenuItem(), + 5: UpdateMenuItem(), + 6: DeleteMenuItem(), + } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/chef.py b/Final Project/Cafeteria_Recommnedation_system/roles/chef.py new file mode 100644 index 0000000..d3d9c1b --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/roles/chef.py @@ -0,0 +1,19 @@ +# roles/chef.py +from roles.role import Role +from functionalities.view_menu import ViewMenu +from functionalities.roll_out_menu import RollOutMenu +from functionalities.finalize_menu import FinalizeMenu +from functionalities.generate_report import GenerateReport +from functionalities.update_availability import UpdateAvailability + + +class Chef(Role): + def __init__(self, name, db_handler): + super().__init__(name) + self.functionalities = { + 1: ViewMenu(db_handler), + 2: RollOutMenu(), + 3: FinalizeMenu(), + 4: GenerateReport(), + 5: UpdateAvailability(), + } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/employee.py b/Final Project/Cafeteria_Recommnedation_system/roles/employee.py new file mode 100644 index 0000000..d3e044b --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/roles/employee.py @@ -0,0 +1,17 @@ +from roles.role import Role +from functionalities.view_menu import ViewMenu +from functionalities.view_notifications import ViewNotifications +from functionalities.give_feedback import GiveFeedback +from functionalities.finalize_menu import FinalizeMenu +from functionalities.update_availability import UpdateAvailability + +class Employee(Role): + def __init__(self, name, db_handler): + super().__init__(name) + self.functionalities = { + 1: ViewMenu(db_handler), + 2: ViewNotifications(), + 3: GiveFeedback(), + 4: FinalizeMenu(), + 5: UpdateAvailability() + } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/role.py b/Final Project/Cafeteria_Recommnedation_system/roles/role.py new file mode 100644 index 0000000..0b07236 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/roles/role.py @@ -0,0 +1,8 @@ +# roles/role.py +class Role: + def __init__(self, name): + self.name = name + self.functionalities = {} + + def get_functionalities(self): + return self.functionalities diff --git a/Final Project/Cafeteria_Recommnedation_system/server.py b/Final Project/Cafeteria_Recommnedation_system/server.py new file mode 100644 index 0000000..5135cb4 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/server.py @@ -0,0 +1,101 @@ +import sys +import os +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +import socket +import threading +import json +from roles.role import Role +from roles.admin import Admin +from roles.chef import Chef +from roles.employee import Employee +from database_handler import DatabaseHandler + +# MySQL database connection configuration +db_config = { + 'user': 'root', + 'password': 'root', + 'host': '127.0.0.1', + 'database': 'foodrecommendation' +} + +# Initialize the DatabaseHandler +db_handler = DatabaseHandler(db_config) + +# Function to get user role from database +def get_user_role(username, password): + return db_handler.get_user_role(username, password) + +# Function to get instance of specific role class based on role name +def get_role_instance(role_name): + role_classes = { + "Admin": Admin, + "Chef": Chef, + "Employee": Employee + } + return role_classes.get(role_name, Role)(role_name, db_handler) + +# Function to handle each client connection +def handle_client(client_socket): + try: + user_credentials = client_socket.recv(1024).decode().strip() + user_info = json.loads(user_credentials) + + username = user_info['username'] + password = user_info['password'] + + user = get_user_role(username, password) + + if user: + role_name = user["RoleName"] + role_instance = get_role_instance(role_name) + functionalities = role_instance.get_functionalities() + + response = { + 'status': 'success', + 'role': role_name, + 'functions': {key: func.__class__.__name__ for key, func in functionalities.items()} + } + + client_socket.send(json.dumps(response).encode()) + + while True: + choice = client_socket.recv(1024).decode().strip() + + if choice.isdigit(): + choice = int(choice) + if choice in functionalities: + result = functionalities[choice].execute() + client_socket.send(result.encode()) + else: + client_socket.send(json.dumps({"status": "failure", "message": "Invalid choice. Try again."}).encode()) + else: + client_socket.send(json.dumps({"status": "failure", "message": "Please enter a number."}).encode()) + else: + response = { + 'status': 'failure', + 'message': 'Invalid credentials' + } + + client_socket.send(json.dumps(response).encode()) + except Exception as e: + print(f"Error: {e}") + client_socket.send(json.dumps({"status": "error", "message": str(e)}).encode()) + finally: + client_socket.close() + +# Function to start the server and listen for incoming connections +def start_server(): + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.bind(("0.0.0.0", 9999)) + server.listen(5) + print("Server started on port 9999") + + while True: + client_socket, addr = server.accept() + print(f"Accepted connection from {addr}") + client_handler = threading.Thread(target=handle_client, args=(client_socket,)) + client_handler.start() + +if __name__ == "__main__": + start_server() From e499414d243b553612148465e0e46bb5c50c88bd Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Wed, 19 Jun 2024 23:31:33 +0530 Subject: [PATCH 04/24] added updated UML Daigram and Code --- .../database_handler.cpython-312.pyc | Bin 2563 -> 2519 bytes .../__pycache__/menu_function.cpython-312.pyc | Bin 0 -> 1337 bytes .../database_handler.py | 1 + .../__pycache__/view_menu.cpython-312.pyc | Bin 1629 -> 1544 bytes .../functionalities/add_menu_item.py | 5 --- .../functionalities/delete_menu_item.py | 5 --- .../functionalities/finalize_menu.py | 5 --- .../functionalities/generate_report.py | 5 --- .../functionalities/give_feedback.py | 5 --- .../functionalities/roll_out_menu.py | 5 --- .../functionalities/update_availability.py | 5 --- .../functionalities/update_menu_item.py | 5 --- .../functionalities/view_menu.py | 4 +- .../functionalities/view_notifications.py | 5 --- .../menu_function.py | 22 +++++++++++ .../roles/__pycache__/admin.cpython-312.pyc | Bin 1252 -> 1435 bytes .../roles/__pycache__/chef.cpython-312.pyc | Bin 1169 -> 810 bytes .../__pycache__/employee.cpython-312.pyc | Bin 1157 -> 822 bytes .../roles/admin.py | 33 ++++++++++------- .../roles/chef.py | 35 ++++++++++++------ .../roles/employee.py | 32 +++++++++++----- .../Cafeteria_Recommnedation_system/server.py | 8 ++-- Final Project/UML/ClassDaigram.png | Bin 0 -> 110329 bytes Final Project/UML/Use Case.png | Bin 107444 -> 0 bytes Final Project/UML/UseCase.png | Bin 0 -> 91083 bytes 25 files changed, 96 insertions(+), 84 deletions(-) create mode 100644 Final Project/Cafeteria_Recommnedation_system/__pycache__/menu_function.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/menu_function.py create mode 100644 Final Project/UML/ClassDaigram.png delete mode 100644 Final Project/UML/Use Case.png create mode 100644 Final Project/UML/UseCase.png diff --git a/Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc index c3ee52d6eda25ab189cc3c844675d6ab0d730980..9693aafa8552ecedce6eb344f7e215a17af8b3e7 100644 GIT binary patch delta 86 zcmZn`xh~9mnwOW00SNwoE=pTGk@q==bedI6NosM)WDQ0OM%KxRjJFv%Hrp~?W@6;t mEXbO{%qX+Dii4Grk!5lNXQ9wz2C?rfnv4>k7=T0($Rq$+OBV|O delta 129 zcmcaE+$_R-nwOW00SIn17Nzw}Ljb~(u0Qz zJ$Uccqosd}7fX>!(35!ZWN8qgC*R9v*F<~hgZ=HBd2iNvQrKvh9B?`GuxVlBSwg)$$I9gk`NNM(%5z{V(1&%}qy+1`L)z3*YMt@BoO{8Os$0eSRlP_wZQI@@ z@;o@@8C6`)yX`=q&P;(-!B)YOIsh_TI3thI72%7h%cK6^#$l&++dYSsWwY2Y>mWAPwk%?;l2 zQ6FaPdCT>?7KtMzv8-|wVH^QlFQ*aGGGVvV(UCaTDPRl2Ie;y4q$v8$cXtv3f5!&Z zuOFAFei>mt0kBdw>7kmX$0I!Zu=L(}N+6!@y+hacB2R>Ne-_gh+YMYKb7I`;rgU4* c0udbW5ZNE8l+y3y+E-%#)=X+06M&S&ABh$!p8x;= literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/database_handler.py index c656587..90c05ef 100644 --- a/Final Project/Cafeteria_Recommnedation_system/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/database_handler.py @@ -1,3 +1,4 @@ +# database_handler.py import mysql.connector class DatabaseHandler: diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc index 1fb169686affe148cc6ccbd6d3f3bc315919762c..6975a472a0cbb1011490ae9d8b979d7553ae1015 100644 GIT binary patch delta 288 zcmcc1)4>yZnwOW00SJD6ElLYvVPJR+;=llq4+fuAfYfw`6owSW9EM!RC`LvGCI)wg z6s8u26z0`T5Jgc;l`NX9FF~A%B~xYDfV3vlEtcZcoU|ekrx>J8LE)E5npMnZW5z}% zMz+aYnKc zWWFVkl30?Mlvtb^pOKiCl9O6g1U3Y$Tot4TZp1GRo80`A(wtPgB6XkyBM=u00f`UH VjEsy=8Faq0$S^8?VgM3gJpgB#Hr)UK delta 412 zcmeC+xyw_3nwOW00SM+47N*s(Ffcp@abSQI%J^&qWK3sBVMt-jVaR2SVq^rdnR1wN znWLB)8JHN{8B&;A7*beL8CNqy^hB{#vTCxu1aUMOZ}Ga7<|UV8=I15mWR_F{1^8VO zOA?b3izg;@X|aRUFx_G)PR&Ux0&$9&fP{j=FT*sen3B}u5-_2Vov5&xow1RLk$rL} zvnC_w3B5f6wB@>mfYi~y-A76uY63?G;nSydO< ze`WwupV=f>6(Q2U6oR67vF6a#D+mz>WZ0 zrv_AkaKbMRo80`A(wtPgB2AzKBM=vh1BnmJjEszT8O-l8=zL+3VN~p>{mKBOz#0L& Cpj(vy diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/add_menu_item.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/add_menu_item.py index 2a96f1f..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/add_menu_item.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/add_menu_item.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class AddMenuItem(Functionality): - def execute(self): - return "Adding a menu item..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/delete_menu_item.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/delete_menu_item.py index 3bcffdd..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/delete_menu_item.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/delete_menu_item.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class DeleteMenuItem(Functionality): - def execute(self): - return "Deleting a menu item..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/finalize_menu.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/finalize_menu.py index 571fd51..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/finalize_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/finalize_menu.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class FinalizeMenu(Functionality): - def execute(self): - return "Finalizing the menu..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/generate_report.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/generate_report.py index c5eddd0..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/generate_report.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/generate_report.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class GenerateReport(Functionality): - def execute(self): - return "Generating monthly report..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/give_feedback.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/give_feedback.py index d99ef50..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/give_feedback.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/give_feedback.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class GiveFeedback(Functionality): - def execute(self): - return "Giving feedback..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/roll_out_menu.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/roll_out_menu.py index 5dfe5c1..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/roll_out_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/roll_out_menu.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class RollOutMenu(Functionality): - def execute(self): - return "Rolling out tomorrow's menu..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/update_availability.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/update_availability.py index 24a111c..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/update_availability.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/update_availability.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class UpdateAvailability(Functionality): - def execute(self): - return "Updating availability of menu item..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/update_menu_item.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/update_menu_item.py index 1636094..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/update_menu_item.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/update_menu_item.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class UpdateMenuItem(Functionality): - def execute(self): - return "Updating a menu item..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/view_menu.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/view_menu.py index 000a353..0adae1e 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/view_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/view_menu.py @@ -1,7 +1,7 @@ -from functionalities.functionality import Functionality +# functionalities/view_menu.py from database_handler import DatabaseHandler -class ViewMenu(Functionality): +class ViewMenu: def __init__(self, db_handler: DatabaseHandler): self.db_handler = db_handler diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/view_notifications.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/view_notifications.py index 19d581a..e69de29 100644 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/view_notifications.py +++ b/Final Project/Cafeteria_Recommnedation_system/functionalities/view_notifications.py @@ -1,5 +0,0 @@ -from functionalities.functionality import Functionality - -class ViewNotifications(Functionality): - def execute(self): - return "Viewing notifications..." \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/menu_function.py b/Final Project/Cafeteria_Recommnedation_system/menu_function.py new file mode 100644 index 0000000..b512ed2 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/menu_function.py @@ -0,0 +1,22 @@ +# menu_function.py +from database_handler import DatabaseHandler +from functionalities.view_menu import ViewMenu + +class MenuFunction: + def __init__(self, db_handler: DatabaseHandler): + self.db_handler = db_handler + self.view_menu_function = ViewMenu(db_handler) + + def view_menu(self): + return self.view_menu_function.execute() + + def add_menu_item(self): + return "Adding a menu item..." + + def delete_user(self): + return "Deleting a user..." + + def delete_menu_item(self): + return "Deleting a menu item..." + + # Add more methods for other functionalities as needed diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc index 83ad822e449735549a970cb12f9ff87479f03ee1..718f29e8ca813f594af5d58a8ad58cc03f7544b4 100644 GIT binary patch literal 1435 zcmb_b&1(}u6rb6TWRqt50kxL4X%hrt71~4f(4u0*4?I{w#X~5JF|*MvyGh;Ms3|!V zDVQDvFVY@7cr^6l|KX*~DVi=FOWo@BQYZs>TV7 zbHD7uBax8r_|qA3o3tJPSs|QoY7&cPDMc=rf+c1}N(6F)aB+!nNvCTN14mXm)>{Ve z$N_J;64jI~+^A7cx>GWBm=m}3V)=Txn0Jj*F^`L#A+$+r6v#_RO($8(Nmi(l0_Ai` z$%-}doMxrFL=!wY!!4tjZ)fIjMUG$V1Hc=)LR{aBuq;-|E4X=;uF=3qiQB0JsR|uy zm9Q`(r&Tf+2}6WrP6=s93IZ37@b)_qI{E~>#kb(k!sr#ENi+Mg`-c83g#}trGo1S@ zb<@=?P1wS;x3EN7)RUd^yl#66V@A<%8M7s@d#VK+S)pB8FZL9IF|>JVj&q+e1A=)y z9iNn(P)0YC+WRw~lILsEhBEZ6 zcX;()Gda;nPBfEKjpWpN&-9nxv3LE=^kgGF*-U2|>CAf1m7lVdir1vi%18@BlDdo~ zz?>QL;*41(UN(^@7<*FAnZb&mm#4NblGja>u{yO+U}jj<%k}`EjhXs@s&G_*y(RKn zh|2M80$`u)tmlD*W;+G>g literal 1252 zcmZWo&1(}u6n~R!lFg>+UPP_68W6+<%|Yk>)$R8MfG;GB zPiaIpVFcr3GSbd%Y0{huxYb;kXNXPw!USX_FDTX;~ zqdTpR2>jF3wrT3yH14EEus7u%aC@v@!XmDDL)up~W zv)b#sdsZL!-MMvle~#blm4>roeYW>*VgT?;)C{VI^UUEq>WHo)KE?UHZlH3D$s((d zN^D7`IQN*Ip**PNXY?LKO`|kGB%v|>UWQ+VYRUNq2zqvGzvj7_V+w5&Y8qBHGtunk zecTZq;R2W`WxFTsfe^fli(}@O%}$zy*`?frhMUbzdQbq0&qLfWGyAMD>C-h!x5bTK z$9A{T$Nop7_hWkT4)VIGLx1d(d4o^uLnu<~l7k4}ij1)hm>ocK0EY)~bO6T&Z~}in O$_{f@F8l<%Oq{>LkU7=> diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc index 13c6786244137210c21b8edaa66a6026654914f6..e6b55ef51c8257d4ace0847c082e8996e945723f 100644 GIT binary patch literal 810 zcmX|8&ui2`6n>M;ZnNozQh%USQ}!gp!xlt^78OBI5bQz4LnsVuGNCEiY@KA)Eqf@k z;PxPRk@ine`lontu~HZ+2;!l)h4n}2$$7~pfqe7Ln|a@R@0-t-WrF%1{uRMZ3h)y* z#aEe<$u&iG!3Up2&?YV+$hAmo>#j~fg9qU21Mn#)`+A<^(q6@>9^=L#l0NQ4T&?v- zJnr7_#$FnBVlTg$qc+`478QA`ig9p>53V+ZfcRu!xcU%Y6PG>#N0ap4IuE>QsVoyY z{*yNfK9F5VvoOMr-iLQ;ls?%fd5}O_j0SzJi1vY%iaznRK5SG=k&NSGA5MaAg#7KWx>=HS$nB67{=sW5o|?a z8uG-Uk|sO~B#m2bE=~VATW`gFq%>=cc~L7#7)wyJ(P(U+o)1>mQl6x1Lb;!;dCIfq zW>4UIZ&~PIvuFh8Ol~VU*@h#-+L;*{7x&H`7>h@?^YQ9e`^JzS7z;n@*8ADLr-$~^ z$X+_Mmq+&Um${X(t~bmf{bpRAC;@OPI3M=Mm^2w{cl>UIyw2E*ZY#=9vL>W8ZQA2e z#F#_GJobUU-4$mP3hXNbv^KF6oDATfR;`$0P$140=c}r$nT^>*6!?&076IMJBtAiY o9fePgTX|o1#Ddyl#pHs5u}%p21(&|VmEUxRn8WLTKrLC~e_Ri>QUCw| literal 1169 zcmZWo&ubGw6rS1aCYw#;LJ`_p+eV6qJv1j3DI(T_y=aw+9+twe%}(sf>?Y3cR#T!> zD40?NFVY@7c$NMso}_wNl9PJKty0C}$$7IIk#r879UnC=(tqU3pI_$9l9 zk%E?xTi8afPVqr5eZwAU6)mF=f`t=xrNOA!^@kpPdWQzF;3c7BcjG7%M{aq6!@NzJ z$!C^mK)Dmq720g@NL(0w&~$~ou;F;jS@W0|wQA{ODT-|6I-VBWE0G^XHg=J%bWk0; zcw4t~9rO&_>V0G>iMqH>>$NOec`q*zb3C!PL&u%gKDC- zGSEha!IguIM8#8@(kV@OSmWY%S{spn-dZB!WlQVB<9*1p4}tbo00_g<6D^FJlqWhN zUf@N9a5&^}$RRNfzPK(RG3#+qi@XMuJMw5~sfij=R!`Kx@o8eXYh>LCTqe8~38^tB z3<(LrU8Pdl`m<1gbPIpuL?NXLS4PQQ~0Eh@1OmwPk%GV_Kibxwrif-ecm-EcVBePsY7$7 zYhDoAAEkW7=%`=x^T*;YvNR|Fq(Mkx5aKu7m;oOlvEE(b?8KA9c1isdX3=f7c+ze6Vc0j0@7 y8UEEtgj6D92c diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc index 80132f9112ab606676314b04336c1358a245e42c..5dfc1073b6a76ba9aad6b727baa39b9415c6c052 100644 GIT binary patch delta 545 zcmZqW+{VUtnwOW00SJ=56{RV$OyrYbG@7U`YtF>r&XB^~!jQs}%D9>tq=11TilvfO zlkFvlsmXYYB`7~96-e{=rskEpmF6XvWaj5h{1nIqQVqhNnO&JOf6Rc*{sPniAhZA7H=+) z9iIku#x2e=pnNewa7aDi;hn%eBjmcQ z{zX~+>#~*?Wi2o8TYX?=R^aMjxym8)8RT?L*2y24RO>+&-QtapPtHj!E>2F($%&8G zWGoT{iWY;s|5LpBY z<05Vl0n!OJVkHAaImqB&#vC@e`6;D2sdhzDKt9OIVsRkxftit!@h*e(T?Vx;EbNS2 M9VK5GfD~9K0J7447XSbN literal 1157 zcmZuw&ubGw6n?YWO*Wf`&?2;@T4IaBUUDoVB2}?ljU1Qxp};HChzgYf&Qui#T8@ zeQ=3Gdb*YC!%JeRkHJ(D{ej=&%?@LYENgi-FA(+7I|1*>0mRabu%GL~Tft(N9Ff#W zARe;{U1e;I3*#e4nGhE*SxT2IktzistA~dsV7?0 zZm}@YDfI#`rZhxnh|UlT3o%xx3rH$%J7^&Bg5cO=k*OwX#JHQNf$g)zaO(8A9XMP> zD^l9vb`((>VYq6wx_5rly}cQ;D3(y&va3=FMWdrlmhoC^b;22OV0U`VbZwj$@)6w< zaJC00dU?O_S)V(+@7=so=2ZsQh4p7CUp4ybSN-ZpoCQ9je@Q%kvI z*NjsT5YCVN8)i8%WTiF45Sx(9PtaN05$~J&;<3vXBuoGG2NwrGwkf$b`QtM&6V%Oy zLU!@;KW;WB>4n(jWO*`9Th0!(FAR@-39{yokk*Gxoa=W|BJYMbgo+eJ%K}bwgpdI& Z44^iE)d8%?@BS~fNQ{2`8^k7q`~@d*BWwTw diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/admin.py b/Final Project/Cafeteria_Recommnedation_system/roles/admin.py index 3e7d713..d30402a 100644 --- a/Final Project/Cafeteria_Recommnedation_system/roles/admin.py +++ b/Final Project/Cafeteria_Recommnedation_system/roles/admin.py @@ -1,21 +1,28 @@ # roles/admin.py from roles.role import Role -from functionalities.view_menu import ViewMenu -from functionalities.add_user import AddUser -from functionalities.delete_user import DeleteUser -from functionalities.add_menu_item import AddMenuItem -from functionalities.update_menu_item import UpdateMenuItem -from functionalities.delete_menu_item import DeleteMenuItem - +from menu_function import MenuFunction class Admin(Role): def __init__(self, name, db_handler): super().__init__(name) + self.menu_function = MenuFunction(db_handler) + self.functionalities = { + 1: ("View Menu", self.menu_function.view_menu), + 2: ("Add Menu Item", self.menu_function.add_menu_item), + # Add more functionalities as needed + } + + + +# roles/employee.py +from roles.role import Role +from menu_function import MenuFunction + +class Employee(Role): + def __init__(self, name, db_handler): + super().__init__(name) + self.menu_function = MenuFunction(db_handler) self.functionalities = { - 1: ViewMenu(db_handler), - 2: AddUser(), - 3: DeleteUser(), - 4: AddMenuItem(), - 5: UpdateMenuItem(), - 6: DeleteMenuItem(), + 1: ("View Menu", self.menu_function.view_menu), + # Add more functionalities as needed } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/chef.py b/Final Project/Cafeteria_Recommnedation_system/roles/chef.py index d3d9c1b..a593752 100644 --- a/Final Project/Cafeteria_Recommnedation_system/roles/chef.py +++ b/Final Project/Cafeteria_Recommnedation_system/roles/chef.py @@ -1,19 +1,32 @@ # roles/chef.py from roles.role import Role -from functionalities.view_menu import ViewMenu -from functionalities.roll_out_menu import RollOutMenu -from functionalities.finalize_menu import FinalizeMenu -from functionalities.generate_report import GenerateReport -from functionalities.update_availability import UpdateAvailability - +from menu_function import MenuFunction class Chef(Role): def __init__(self, name, db_handler): super().__init__(name) + self.menu_function = MenuFunction(db_handler) self.functionalities = { - 1: ViewMenu(db_handler), - 2: RollOutMenu(), - 3: FinalizeMenu(), - 4: GenerateReport(), - 5: UpdateAvailability(), + 1: ("View Menu", self.menu_function.view_menu), + # Add more functionalities as needed } +# # roles/chef.py + +# from roles.role import Role +# from functionalities.view_menu import ViewMenu +# from functionalities.roll_out_menu import RollOutMenu +# from functionalities.finalize_menu import FinalizeMenu +# from functionalities.generate_report import GenerateReport +# from functionalities.update_availability import UpdateAvailability + + +# class Chef(Role): +# def __init__(self, name, db_handler): +# super().__init__(name) +# self.functionalities = { +# 1: ViewMenu(db_handler), +# 2: RollOutMenu(), +# 3: FinalizeMenu(), +# 4: GenerateReport(), +# 5: UpdateAvailability(), +# } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/employee.py b/Final Project/Cafeteria_Recommnedation_system/roles/employee.py index d3e044b..df199e7 100644 --- a/Final Project/Cafeteria_Recommnedation_system/roles/employee.py +++ b/Final Project/Cafeteria_Recommnedation_system/roles/employee.py @@ -1,17 +1,29 @@ from roles.role import Role -from functionalities.view_menu import ViewMenu -from functionalities.view_notifications import ViewNotifications -from functionalities.give_feedback import GiveFeedback -from functionalities.finalize_menu import FinalizeMenu -from functionalities.update_availability import UpdateAvailability +from menu_function import MenuFunction class Employee(Role): def __init__(self, name, db_handler): super().__init__(name) + self.menu_function = MenuFunction(db_handler) self.functionalities = { - 1: ViewMenu(db_handler), - 2: ViewNotifications(), - 3: GiveFeedback(), - 4: FinalizeMenu(), - 5: UpdateAvailability() + 1: ("View Menu", self.menu_function.view_menu), + # Add more functionalities as needed } + +# from roles.role import Role +# from functionalities.view_menu import ViewMenu +# from functionalities.view_notifications import ViewNotifications +# from functionalities.give_feedback import GiveFeedback +# from functionalities.finalize_menu import FinalizeMenu +# from functionalities.update_availability import UpdateAvailability + +# class Employee(Role): +# def __init__(self, name, db_handler): +# super().__init__(name) +# self.functionalities = { +# 1: ViewMenu(db_handler), +# 2: ViewNotifications(), +# 3: GiveFeedback(), +# 4: FinalizeMenu(), +# 5: UpdateAvailability() +# } diff --git a/Final Project/Cafeteria_Recommnedation_system/server.py b/Final Project/Cafeteria_Recommnedation_system/server.py index 5135cb4..7aae639 100644 --- a/Final Project/Cafeteria_Recommnedation_system/server.py +++ b/Final Project/Cafeteria_Recommnedation_system/server.py @@ -1,3 +1,4 @@ +# server.py import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) @@ -5,7 +6,7 @@ import socket import threading import json -from roles.role import Role +from roles.role import Role from roles.admin import Admin from roles.chef import Chef from roles.employee import Employee @@ -54,7 +55,7 @@ def handle_client(client_socket): response = { 'status': 'success', 'role': role_name, - 'functions': {key: func.__class__.__name__ for key, func in functionalities.items()} + 'functions': {key: name for key, (name, func) in functionalities.items()} } client_socket.send(json.dumps(response).encode()) @@ -65,7 +66,8 @@ def handle_client(client_socket): if choice.isdigit(): choice = int(choice) if choice in functionalities: - result = functionalities[choice].execute() + func_name, func = functionalities[choice] + result = func() client_socket.send(result.encode()) else: client_socket.send(json.dumps({"status": "failure", "message": "Invalid choice. Try again."}).encode()) diff --git a/Final Project/UML/ClassDaigram.png b/Final Project/UML/ClassDaigram.png new file mode 100644 index 0000000000000000000000000000000000000000..14f4285b123c3d9aa5b12c6114ea8536c923f46d GIT binary patch literal 110329 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
W#NOKAZ8Ak#It?#v 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 kdBB)n{lw?On+a literal 0 HcmV?d00001 From 95c566122579f7735151842fc179de5fabf11656 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Thu, 20 Jun 2024 19:54:50 +0530 Subject: [PATCH 05/24] Login and Logout/ Socket Programing(Multithreading) --- .../Client/client.py | 36 ++++++ .../userHandler/__init__.py} | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 136 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 1350 bytes .../__pycache__/chef.cpython-312.pyc | Bin 0 -> 1862 bytes .../__pycache__/employee.cpython-312.pyc | Bin 0 -> 1625 bytes .../__pycache__/user.cpython-312.pyc | Bin 0 -> 663 bytes .../Client/userHandler/admin.py | 20 ++++ .../Client/userHandler/chef.py | 34 ++++++ .../Client/userHandler/employee.py | 29 +++++ .../Client/userHandler/user.py | 11 ++ .../socket_functions.cpython-312.pyc | Bin 0 -> 1482 bytes .../Client/utility/socket_functions.py | 15 +++ .../database_handler.cpython-312.pyc | Bin 0 -> 1951 bytes .../__pycache__/login_handler.cpython-312.pyc | Bin 0 -> 689 bytes .../Server/database_handler.py | 36 ++++++ .../Server/login_handler.py | 6 + .../Server/server.py | 56 ++++++++++ .../__init__.py | 1 - .../database_handler.cpython-312.pyc | Bin 2519 -> 0 bytes .../__pycache__/menu_function.cpython-312.pyc | Bin 1337 -> 0 bytes .../__pycache__/server1.cpython-312.pyc | Bin 5385 -> 0 bytes .../Cafeteria_Recommnedation_system/client.py | 46 -------- .../database_handler.py | 45 -------- .../functionalities/__init__.py | 1 - .../__pycache__/__init__.cpython-312.pyc | Bin 145 -> 0 bytes .../__pycache__/add_menu_item.cpython-312.pyc | Bin 542 -> 0 bytes .../__pycache__/add_user.cpython-312.pyc | Bin 528 -> 0 bytes .../delete_menu_item.cpython-312.pyc | Bin 553 -> 0 bytes .../__pycache__/delete_user.cpython-312.pyc | Bin 535 -> 0 bytes .../__pycache__/exit_program.cpython-312.pyc | Bin 524 -> 0 bytes .../__pycache__/finalize_menu.cpython-312.pyc | Bin 545 -> 0 bytes .../__pycache__/functionality.cpython-312.pyc | Bin 538 -> 0 bytes .../generate_report.cpython-312.pyc | Bin 557 -> 0 bytes .../__pycache__/give_feedback.cpython-312.pyc | Bin 541 -> 0 bytes .../__pycache__/roll_out_menu.cpython-312.pyc | Bin 551 -> 0 bytes .../update_availability.cpython-312.pyc | Bin 578 -> 0 bytes .../update_menu_item.cpython-312.pyc | Bin 553 -> 0 bytes .../__pycache__/view_menu.cpython-312.pyc | Bin 1544 -> 0 bytes .../view_notifications.cpython-312.pyc | Bin 562 -> 0 bytes .../functionalities/add_user.py | 5 - .../functionalities/delete_menu_item.py | 0 .../functionalities/delete_user.py | 5 - .../functionalities/finalize_menu.py | 0 .../functionalities/functionality.py | 3 - .../functionalities/generate_report.py | 0 .../functionalities/give_feedback.py | 0 .../functionalities/roll_out_menu.py | 0 .../functionalities/update_availability.py | 0 .../functionalities/update_menu_item.py | 0 .../functionalities/view_menu.py | 32 ------ .../functionalities/view_notifications.py | 0 .../menu_function.py | 22 ---- .../roles/__init__.py | 1 - .../__pycache__/__init__.cpython-312.pyc | Bin 135 -> 0 bytes .../roles/__pycache__/admin.cpython-312.pyc | Bin 1435 -> 0 bytes .../roles/__pycache__/chef.cpython-312.pyc | Bin 810 -> 0 bytes .../__pycache__/employee.cpython-312.pyc | Bin 822 -> 0 bytes .../roles/__pycache__/role.cpython-312.pyc | Bin 650 -> 0 bytes .../roles/admin.py | 28 ----- .../roles/chef.py | 32 ------ .../roles/employee.py | 29 ----- .../roles/role.py | 8 -- .../Cafeteria_Recommnedation_system/server.py | 103 ------------------ 64 files changed, 243 insertions(+), 361 deletions(-) create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/client.py rename Final Project/Cafeteria_Recommnedation_system/{functionalities/add_menu_item.py => Client/userHandler/__init__.py} (100%) create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/user.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/user.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/socket_functions.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/socket_functions.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/login_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/server.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/__init__.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/__pycache__/menu_function.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/__pycache__/server1.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/client.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/database_handler.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/__init__.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_menu_item.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_user.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/delete_menu_item.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/delete_user.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/exit_program.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/finalize_menu.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/functionality.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/generate_report.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/give_feedback.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/roll_out_menu.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_availability.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_menu_item.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_notifications.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/add_user.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/delete_menu_item.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/delete_user.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/finalize_menu.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/functionality.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/generate_report.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/give_feedback.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/roll_out_menu.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/update_availability.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/update_menu_item.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/view_menu.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/functionalities/view_notifications.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/menu_function.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__init__.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/__init__.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/role.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/admin.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/chef.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/employee.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/roles/role.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/server.py diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/client.py b/Final Project/Cafeteria_Recommnedation_system/Client/client.py new file mode 100644 index 0000000..220793a --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/client.py @@ -0,0 +1,36 @@ +import socket +import json +from userHandler.chef import Chef +from userHandler.admin import Admin +from userHandler.employee import Employee + +def login(username, password): + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + request = { + "endpoint": "/login", + "username": username, + "password": password + } + + client_socket.connect(('localhost', 12345)) + json_data = json.dumps(request).encode() + client_socket.sendall(json_data) + response = client_socket.recv(1024).decode() + data = json.loads(response)['user'] + if(data['RoleName'] == "Admin"): + user = Admin(data['ID'], data['Name'], data['RoleName'], client_socket) + user.user_menu() + elif(data['RoleName'] == "Chef"): + user = Chef(data['ID'], data['Name'], data['RoleName'], client_socket) + user.user_menu() + elif(data['RoleName'] == "Employee"): + user = Employee(data['ID'], data['Name'], data['RoleName'], client_socket) + user.user_menu() + else: + print("\nInvalid Creds") + +if __name__ == "__main__": + username = input("Enter username: ") + password = input("Enter password: ") + response = login(username, password) diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/add_menu_item.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__init__.py similarity index 100% rename from Final Project/Cafeteria_Recommnedation_system/functionalities/add_menu_item.py rename to Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__init__.py diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54eb8ba1fbd70b29e357e4f9e788ebcec38a83f0 GIT binary patch literal 136 zcmX@j%ge<81a*QXX(0MBh(HIQS%4zb87dhx8U0o=6fpsLpFwJVsk>Rlgt!KW7{)l~ zWTxho#FQ4N7I`G*rR1a*#l**F=4F<|$LkeT{^GF7%}*)KNwq6t1?po2;$jfvBQql- JV-Yiu1ppy+9nJs% literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b218c548a73245c31d1c4b238fd1c347bb637c38 GIT binary patch literal 1350 zcmZWp-ESL35Z^uD*=PIg#GzDtR$F3~nva7*5VRmfp-IU@BUMfSnMfydyHT$>-?@8d zQCmjpLnP8jNO=G?2qF3i%Ae8~M@`h|6nN=V-YTV_Do@PZ`BD=`y4l^|%ubX)6_A3(QH`$|94S2xuJr=$xZ&DE4h3p#BfBi*tb&j~H7mW|Xv zxJ!}Z@JRKVEfJ~GcSTgPT}ODK75MhD2&24Z*={okEGt0&4C&Tkb>_n2{B(W(+~Q}k z_F@Ne{=DgNSIEUCMsBvdQU`-xIZnh({bFFjNnlTIkv+Y1JGZ4jw=uCXe|PHlmv{8{ z4?sd}ihM{|fjH|I0EL{7WSsWN^|Z99HmtwE`}~^O9O}_gi&6BbvSBVY=4xt{uHVr< z<=XOD=o4eab2gP@eL*AlKMnnuMn2YfW8{v)Qw_)iOLdH{7mopO+#EuXm61v@26*M- zTrXevQnnB?pNMk&F&T}>sQx4+%qbJiC1=v$=%X3>o?ZEhV%NHI|h4t9864Z z8`WK7{DE<5%Q*GGsBRh6ZR5;e#`vQgDL*gA!8?o_j2@1eWkm(cYWck5;@+^V8=a<` zNaBf+FJVfh;oRB6bzxemEMp>A>rdjGCDt=$I2-|%>&XgvtWfQPf3iib5_^s1bMQAA zADK@R_Y$pQ@gF2n#X=tHA0>f(EGOZJ-hvar9%U${f0EOW)iGLGz4SMMCARt(`Zq1p literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea9c61dd90d6fec90ef09d3cdec34d59025d3564 GIT binary patch literal 1862 zcmaJ?&u<$=6rNeH9ecA*;-sKTEnz}K69Zb3Hc%1}>JO5TLj!FcKqk^^yE`V^taqK+ zbz85D)I%iFN|kZ|H3%UpPN4h&T)A-KlBls-t%6huF1b}oKvho6+w~^Kkr>G{^WOVr z-uvFXef~Y0l@K4l9QR5;CK37*gm`c{9J{Ca@&Fmgz!oawBF0ES)5s8(k&&QyJrTi* zLQTvkcR2V-%L5lyt;qGgE`UXEh9$%wzH(5vbIkt}LLOoFz*TqPWQH@75n-_wlTdhzQ zq*c|lO;1(xsX%n8RSE>t2t->e(?Dd7MT4wvnbh`F*U=ZL7i3gbw=~yPRTumd7GwIMo>Amlbg_6VY@4bgoB z(bI;=g@}X9p29?@z|`Nkv^rC?vyFn z#{>SFG^&tKOnQr4rgoLgc(g2?QOH%tvdBkOj})A;!rzkb9Yx<&e zP9c-GP0!Cw+8$*@Bl?14>Xb~79jGb4>%YNWo3SnVseu|BV^@CQqr+q^gjQEvmVc@GcN$ATl}?&va}h-w`A$%(OiQ zg%Kq9E=ZborRp)Lg&?V0j>~%q|5zT}ln1xu)7x^-{i(me{rQG`f%R}EyxH=`3r$v414&iOj#0H>FRSWO zRkI>X*f1I4_#oTtx;nKi-m5X|;#wC9@O+p)2DK1QP+BfnpD&|50Vm)2Cv_ru5r=L= zz%2hS>1k=t3hWsi3(Y^H2nvs~pMEcj?0q)GMQ|53>t_j!@gHblPkb3)#4BTeBUr<8 F{{r@4x*7lg literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19ff4e1b261092c3baa6d699bf4f46256b3cf4d8 GIT binary patch literal 1625 zcmah}-EZ4e6u;MrQ^$3(q`-uRsBTBsEr7fYI>81)W2h~CpxRglC{(h7eIvX&c6RM- zixs3jRHBJ#TUahs(N9Ld-Bobx;PeB5)- zZ@HXGfPOy`)V@g*@+UG0$^FgF6m0Ghi&)elby}g6NMw#!(lW79oUW&OxQf(Dm*g%o zB^sr#_*|GhO>dR@%+4fizJ>!isZfhlq!m)57F|{BSFX^kNgz{;=v=4i}5OAH3dZ2?cDzVv>%Yc*pSk!>~NPMYfgP?U7C8#kH}u z^8M*wUhXJw?SO`u6xTjs9pc>EAcf5LbQW!st4WO$H2i;ni~2FO-pA2Fi$UpLeS?w2 z*h(i>$^R?brk1>Pf)Jq%c+MnxtTG@*4j_~vMD_qe9YTyAKxjjVT#Pt15J!F=0ky!2 z57E`pApx-KeGyb9muUB8t-*R7+CLwkVApK38rYtzzNxcW&$HOa9Bk{{wPG==d4iR_x+jEpL!H*yoPC|MSMt;h^&_Hc$A!{=3+iVeXj_ zy4WM(s5L9Fgm;F@T$)lyqh@2p3-Yz+Induk{iNy1A*5N zrC=Ayw%ce10xKWMrsMhW`Z%Onl0+6|nO>GYX2X~`gt9EYF$3z>49E5!)Se96*Z&EY z_(83zYtuiU{r>FQYxgg00d*yNNxz%fTK9Bih9c^lmpYCX9_W9M59qs4%=ZG2N3f2d7v zYLi>q)V5Z*JNp-&e!io zkjWhfMi&)%%ogwed|VrWR}?RJ%|2?ME|Vt`mEZn1b6CDWW4AG20mf@#U|Q+87ibo% reF%5#qi4NIDq?JD#CV0r9yWDl{#+VtFR}du6w6?wNfe~72N6t zEYgbvHbEI7B2~L&)4hx1R^$A-anw39)vZ3NzG{bFptOk(@8i^#(hvQflmmyBIxJEW z80{cD!FZ$kEM6AJ)lGEe!fo$Aiw}D%Lki4YBKf=WEEC&a#_Tw*I3S-ubfgc5Z$$%#FVB6idqyt>ZVXgK^3SfLRHlZp9fSS6)sVvRb+39gJYMqQz=ys z9D3j%^je7vReuL3E<{xnCh6Ve+`^{qL7!wCVRxDM@k$ila^9at#m)W0Yi@d0=)JKCuM4rvSQOcQdVsR ztY)iVGqwgcYiGdbTG>)A%5V7A2Oho)9oGq4R`Ll6hQ10<|B3|NrMra50Gbv#r0XRb zpEA$U>h5Tx@f(Gc(L*WP{YR0Leg1AMfggwqEG!#kO8Nc=q-7 z!D>f;D3JG10r8`f=n6RJBYHN;fO~e;b%C@bsWyVmq|h%}$M@WWE8#Tz3d`2ow=Dk2Jxp?I>$=?At>s zNe76O)N&f)+}Y*~bYL~%H`0pU8RmV)wu^ui6v2Q1#$?x+Z5y*)W4>+7AB4xogRZgE zHkOW!34W`T(mz_B&h-cwneZ3U<~Q^J literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/socket_functions.py b/Final Project/Cafeteria_Recommnedation_system/Client/utility/socket_functions.py new file mode 100644 index 0000000..03710f4 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/utility/socket_functions.py @@ -0,0 +1,15 @@ + +class SocketUtility: + def __init__(self, client_socket): + self.client_socket = client_socket + + def connect_to_server(self, host, port): + self.client_socket.connect((host, port)) + def send_to_server(self, msg): + self.client_socket.sendall(msg) + + def receive_msg_from_server(self): + return self.client_socket.recv(1024).decode() + + def close_connection(self): + self.client_socket.close() \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ebcd839c0a23aa88b36c7e143655c25912e784cf GIT binary patch literal 1951 zcmb7E&2Jl35P$pS*p5HC#BO5(>87PZt45Xzryz<{VVAmsHA*57R;rcRU6UBcZr<8Z zTdwFKhXfUwTrfx+IB;kb4*Uu9f{?g0DyU}R#wj-|J|OkP%-fH;Za6T~&exlneQ)OX z-mmd^lmLAuH!Eq8kiXIJ32a6q1w@~i#N=wE#PQ@UV)EO>6b^Vdpv1R1RXjpNGhCO; zInNlq1WKP+kZqC@Z*tqDBw&q_XbQk3Qv@DrOKQkT=E}|Thh^KkR<4^hiyG2cMf{-v z-{?9k*yXxJ50<+;SpF|bR{+b~AR%25EX-tN60rQ^kv7@qG*xoM^@iPa#FlMQCw#MP z+n+Y5>4Z&hKaOZL>UE5>ty+anK_wbS7D0w>v~jBn(&O`$*Vb0^E322*RxJ97Mc4c) z`nr3p?9H|l*7c40MpM^2vlEBT`YX6e`vR~#WRRNO5${HPF{^+TA9w=SzKDz?NZ%QF%=jPin3jcBIX=y;XA}I0wsUHmEb@sV61SX(+kRQT(}$JyB>JIGq93IWyUC zuMp{A$q8Cw~cQNwAKH zogjZ5@+F$=N+zFy2#|s&MUKw5x7>~v=$Yb zU2fDY)PuOI%f)vTyk1Hx@Lew!GzB9SsuVTIM!k?zE<=GrE(m-7T7Eh2)xLbeR<39{ zu-^49DR_cNioia?c^{#s3Jzb$IU;Vv3Hw`8C58?sWVEP_II?b8Mym-C6{~5iH|mxn z8MTIOsUe0RCyd*!Lk;(~&p~BJ+G<&}?S!ahw`xrruZi0chBIf{ShtLi^;+Yjje2M9 z8N5ANL_pdmFu3C`%pS=Lhw{Qh`TS03$V+l;M;gXRB-u;sCcbQaee2%rgZWo}3%@#$ z&-BmkoqZ^u+X)TAiC%0sb~o|Iv^;oT`A+^uz4zXaSN1>n>FO_+?iUVcv=t^(-Qw@D7l#6grP+}*bqe289FeX&QC;6`n5`P>FHaHndMz1^0Cj(TfaQVxI=KO^$g<${Z&`QuO##TuP1Rd1>BF!9YM*l08h>;9a6J t_*oVDGHUoFu=0Vq$m+m7&5?s z82JhymVOTys5-Rr+AmO%p;9K^JKIt?$-npRz4v?n&QEi51;8`-aMpN6`Ij#Fu`^|~ zfXW?k*aithknEACo+|WsV1;=+NtRtQP6SmZp~@v2Le-KS(e7D+ofN-z4qEMcC`@g*Mi(6Lo1MCJ4ZG>tF zkraeD?#OOTdQpheZaq#tiWZ_ggapT!va&mFe;3J8Yq26h>bGynhq literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py new file mode 100644 index 0000000..8cb8b55 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -0,0 +1,36 @@ +import mysql.connector + +class DatabaseHandler: + def __init__(self, host, user, password, database): + self.host = host + self.user = user + self.password = password + self.database = database + self.conn = None + + def connect(self): + self.conn = mysql.connector.connect( + host=self.host, + user=self.user, + password=self.password, + database=self.database + ) + + def check_login(self, username, password): + cursor = self.conn.cursor() + query = """ + SELECT u.ID, u.Name, r.RoleName + FROM user u + JOIN Role r ON u.RoleID = r.ID + WHERE u.Name=%s AND u.Password=%s + """ + cursor.execute(query, (username, password)) + result = cursor.fetchone() + cursor.close() + if result: + return {"ID": result[0], "Name": result[1], "RoleName": result[2]} + return None + + def close(self): + if self.conn: + self.conn.close() diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py new file mode 100644 index 0000000..0b0343d --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py @@ -0,0 +1,6 @@ +class LoginHandler: + def __init__(self, db_handler): + self.db_handler = db_handler + + def login(self, username, password): + return self.db_handler.check_login(username, password) diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/server.py b/Final Project/Cafeteria_Recommnedation_system/Server/server.py new file mode 100644 index 0000000..1546ab6 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Server/server.py @@ -0,0 +1,56 @@ +import socket +import threading +import json +from database_handler import DatabaseHandler +from login_handler import LoginHandler + +class Server: + def __init__(self, host, port, db_host, db_user, db_password, db_name): + self.host = host + self.port = port + self.db_handler = DatabaseHandler(db_host, db_user, db_password, db_name) + self.login_handler = LoginHandler(self.db_handler) + self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + def start_server(self): + self.db_handler.connect() + self.server_socket.bind((self.host, self.port)) + self.server_socket.listen(5) + print(f"Server started on {self.host}:{self.port}") + while True: + client_socket, addr = self.server_socket.accept() + print(f"Connection from {addr}") + client_thread = threading.Thread(target=self.handle_client, args=(client_socket,)) + client_thread.start() + + def handle_client(self, client_socket): + try: + data = client_socket.recv(1024).decode() + request = json.loads(data) + if request.get("endpoint") == "/login": + username = request["username"] + password = request["password"] + user = self.login_handler.login(username, password) + if user: + response = { + "status": "success", + "user": { + "ID": user["ID"], + "Name": user["Name"], + "RoleName": user["RoleName"] + } + } + else: + response = {"status": "failure", "message": "Invalid credentials"} + client_socket.sendall(json.dumps(response).encode()) + else: + response = {"status": "failure", "message": "Invalid endpoint"} + client_socket.sendall(json.dumps(response).encode()) + except Exception as e: + print(f"Error: {e}") + finally: + client_socket.close() + +if __name__ == "__main__": + server = Server('localhost', 12345, 'localhost', 'root', 'root', 'foodrecommendation') + server.start_server() diff --git a/Final Project/Cafeteria_Recommnedation_system/__init__.py b/Final Project/Cafeteria_Recommnedation_system/__init__.py deleted file mode 100644 index bf587af..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file can be empty, but it must be present diff --git a/Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/__pycache__/database_handler.cpython-312.pyc deleted file mode 100644 index 9693aafa8552ecedce6eb344f7e215a17af8b3e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2519 zcmbtW&2JM|5Pxq!{8c9gjESw<&Jx^6TSe}PLQz|k5CfrLP?D-8LRuN`25hbE@OItc z$N^MwFcK|r3J6tHY7a!I)cy{KZ8@ZZ{JC#=&tQEUUU8j)#Mrj}p5tmG@@>B1G6vjjuar6x14Q4NHaFj5WeZ%f(6O9n#BeB*mX{V zut3bVt@vg)=m}J8-DqcNbCniIofNU|F8YyvODBlTWfzGoSYoMWT+=N-^jp^QW`$W^ zSG0SUDf2?Sf%{9$2b_g~&GmIR=LVsNkpy;&ya?^Tck|B8_0Zrd{*FG~|8sIN3Bro+ zD8r%2V}mVfH+&klS|ENbzTI@oiI62%oagI&@y&QwuhO5mB{yy!W@BEg3q{P`MRgG# zJvYs@CXf>F!%n-Xy`Kl{_{_SfWruiv7rSSI93rNT7EDqMcBMjH?>}`Z!lLtDb8pL{ z3U%*e@?E=2N-hGj=Djz(HTOD8XUTQ`BAKPKn4MgtRzNM}%|fM|W3{>BMCNSf#H3VB zXLBWONMh;nimst7og6=ZPWs%?m{gU{oFB_dXpxw7J`3I`kBv&7Kmc66IGq{KxH&-g zo*@lqM`3*-XBe{;rrNq~Z-%i7J0{6~duS|AzRC=oFzvdQubP_Wo7T+y)k;~j#JpaC zoqM25hBv_y?O02kVTH0O`|K&Sd{yu%L#>u?#@)#ZxRVF{vHf=BwW`KymVmw%uQ6ue zP)aV@Gi>!-(M$y$6b60GCAz1%!~70}8xMfpA{$(3_*yXeGThhr?2k5ZQmdiVCgJ?i7s0*vPdz;G@bLW))`9~s!hL^k zh@jp!qEOY>!}9PDc{Y?7Imj>jdq?8@a$E#?=l99Tzk?U8(_P`k0lfG+wjqPy6I{{bwq16bk?z!GnWHn8B@2`q+?oLdUCCJV1FxJrPLA*tj-tdzdM z3VFaaf}HY(*K6 z0zq18=dpnbdB;XOqF5LzcEM<4g+)N&qA;iHtPhs2G01SbSPWx4HvU)~6$mnx0A>YB zP@PhM@(k7w3Ik6Y=XN+S>qQ*BcA87>gtOOnOmEx;hCti1E6_M0vZs;R2#}tzgS55a z!Dg)gN&ln%=dt%2XI}0Ev1T~25={Jej13OU78yL-p<3bQ+1}__I>P>_9>Gg6i-M4KY=!QO6eLjb~(u0Qz zJ$Uccqosd}7fX>!(35!ZWN8qgC*R9v*F<~hgZ=HBd2iNvQrKvh9B?`GuxVlBSwg)$$I9gk`NNM(%5z{V(1&%}qy+1`L)z3*YMt@BoO{8Os$0eSRlP_wZQI@@ z@;o@@8C6`)yX`=q&P;(-!B)YOIsh_TI3thI72%7h%cK6^#$l&++dYSsWwY2Y>mWAPwk%?;l2 zQ6FaPdCT>?7KtMzv8-|wVH^QlFQ*aGGGVvV(UCaTDPRl2Ie;y4q$v8$cXtv3f5!&Z zuOFAFei>mt0kBdw>7kmX$0I!Zu=L(}N+6!@y+hacB2R>Ne-_gh+YMYKb7I`;rgU4* c0udbW5ZNE8l+y3y+E-%#)=X+06M&S&ABh$!p8x;= diff --git a/Final Project/Cafeteria_Recommnedation_system/__pycache__/server1.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/__pycache__/server1.cpython-312.pyc deleted file mode 100644 index 1f41eed802b398dd761e00b0abb5d79a3c8eb73e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5385 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 P&iH;gxIiPO*--XBRI_@n diff --git a/Final Project/Cafeteria_Recommnedation_system/client.py b/Final Project/Cafeteria_Recommnedation_system/client.py deleted file mode 100644 index 3717862..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/client.py +++ /dev/null @@ -1,46 +0,0 @@ -import socket -import json - -def start_client(): - client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - client.connect(("127.0.0.1", 9999)) - - try: - # Enter credentials - username = input("Enter username: ") - password = input("Enter password: ") - credentials = json.dumps({"username": username, "password": password}) - client.send(credentials.encode()) - - # Receive initial response from server - response = client.recv(1024).decode() - response_data = json.loads(response) - - if response_data['status'] == 'success': - print(f"Login successful! Your role is {response_data['role']}.") - print("Available functionalities:") - for key, func_name in response_data['functions'].items(): - print(f"{key}. {func_name}") - - while True: - choice = input("Enter the number of the functionality you want to execute (or 'exit' to quit): ") - client.send(choice.encode()) - - if choice.lower() == 'exit': - print("Exiting program.") - break - - result = client.recv(10000).decode() - print(result) - - else: - print(f"Login failed: {response_data['message']}") - - except Exception as e: - print(f"Error: {e}") - - finally: - client.close() - -if __name__ == "__main__": - start_client() diff --git a/Final Project/Cafeteria_Recommnedation_system/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/database_handler.py deleted file mode 100644 index 90c05ef..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/database_handler.py +++ /dev/null @@ -1,45 +0,0 @@ -# database_handler.py -import mysql.connector - -class DatabaseHandler: - def __init__(self, db_config): - self.db_config = db_config - - def connect(self): - return mysql.connector.connect(**self.db_config) - - def get_user_role(self, username, password): - try: - connection = self.connect() - cursor = connection.cursor(dictionary=True) - - query = "SELECT u.Name, r.RoleName FROM User u JOIN Role r ON u.RoleID = r.ID WHERE u.Name = %s AND u.Password = %s" - cursor.execute(query, (username, password)) - - user = cursor.fetchone() - cursor.close() - connection.close() - - return user - except mysql.connector.Error as err: - print(f"Error: {err}") - return None - - def get_menu_items(self): - try: - connection = self.connect() - cursor = connection.cursor(dictionary=True) - query = """ - SELECT m.ID, m.Name, m.Price, m.AvailabilityStatus, mt.MealType - FROM MenuItem m - JOIN MealTypes mt ON m.MealTypeID = mt.ID - """ - cursor.execute(query) - menu_items = cursor.fetchall() - - cursor.close() - connection.close() - return menu_items - except mysql.connector.Error as err: - print(f"Error: {err}") - return None diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py b/Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py deleted file mode 100644 index bf587af..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/functionalities/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file can be empty, but it must be present diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/__init__.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 09d560b0e4e40fd954d986533b83eceaef899884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmX@j%ge<81paP?X+}W$F^Gc>KC=KtrZZGBXfpb(WGG?+@;-yq{4z+hiYZAgE&&q? z*@+5ZPFiVRa!F=>USdvWNoHzsOniK1US>&ryk0@&FAkgB{FKt1RJ$TppaG0PTnu7- MWM*V!EMf+-0Ny4dd;kCd diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_menu_item.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_menu_item.cpython-312.pyc deleted file mode 100644 index 9f127308b85fe5fb6fe67f609e1ba6bb1d26fc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmZ8d%SyvQ6uozn(%M=SA4?&tmMqLp1Q9_H#fANVP#8jHBEclJd4TE4ML(dsZu|l9 zQ~Uu5xN_xAh;F)aZqh<^7H7`QJ@?GXeeHJJppJ1d_MX)JLB;AcmZa<{G6w+y0|?PZ z1O`_i*c5~&@kOh3Hp_Lh@kxb=MfWm`+|(aMPT;4xTT5!hWl`=ZG6xAZ3b2{LDcD-h zOs(jg3vnZ(>^ha9yOOUg=($p_MsqaTV6v~&espU%MyO^CUkzE7^-L-BLh!9HT0{wV1w4hK>-NY$3J#G?o2sQ}FsRH`Pgql+*88-U0hS~$Qo`Zj( st@S#OX}GrfYrkln)>+QtZ6%?tBzp?JG(>!d<8Pf|e|Go->Z%_61>`?}sQ>@~ diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_user.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/add_user.cpython-312.pyc deleted file mode 100644 index a5df26701fa6865ce2b0b50baa896001eeed0d6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmZ8d!AiqG5S`hiv{p++dKGf9kW26;hzefx)|;15SVDFy!6dcW1WivKdhieW4dSQx z0}{}SCvQUZ(vv$$3e`QleY5lC&FsANdR@@x{d6{2>idI&^=UPv9BQ%z0Rlsa&_x6W zmmt^zgdy?SsC6#OO}q6;fsIA)B8&Yrn8schq`6;9YQ!ce_cU381Q!LkOyB}sBWJcz zw9kdOQZn(^(sentD$S}aN1Ki21Fa0=Ys<4@d1qz1#&Mh{8o*RCoG3D|R)>@0aVk|> zfpz0qRWR9@Fpz5O3BfCe+q`JYd+BGXocEhioaTX=E85Hhy!H=DO<-i3MThg)izMeo zm-A>UvXJ-==d;WU>r6tMPTB<91X~2;Q~~`=QE~w#!`86YPupbawmXO^@FiCBbfa%FYKfqhh9>q`b z2PELhlQ$uH>B*f<3$1&2JCm9B=I!LI-EM(8{mw9WR`(|*i_@3~)sYIOAV6RQF}jGr z;0gqrfG{M!8g-w`3e#?UQDS4+zRVLp3kQi8g<0X(Ej8jisdiN`1qm(+aGAgfxJJQj zqulDqNM`azCi!(HV}HR|sL;g9)a(Ln)*T;cLYUlIo)s&W6)KwJI4@+yOl1_Lq+!iY zgR@>H(@cYP=UF-lmb`{C?Fl`elM>fT_eHrTAEcjWa=gE4&Y6EFJ1MQ~5#G0tD-}T3 zHp?dGi5E-G%NFPHK;#j{o171GFRCje`URskf(?Ro0#edIZ%wH*f*)N61|yn5H(DfN^r@4{)o0LHsHH z0SP!cxe3vwIC$?ah3XC8eed4)-uv#o^m<)T=jUV=J*xX1gVkv@q~2F#0US6Qx7vR@=I=BrYA@^|d%oubjXsRE6hxPw2pwB8eoHJIjOUXq*d~ zYjCauM+ecG#aPHO*Hf8pa#L1qaVx?i7tI81$7|lufW!se!|V25tq6=NRa!y!&g)hp*w`wR zYDlGgVkY$_d9fvD($7+PzqheMZ}pJ^Q3Mb0wtY})0t3e`>YR_fSaM!8IFH97i-@;4 zpJrZUUXrHvCUt@q0fnAWrwZt2)Ru-hlniSf{YClrTi^|$@9-Z#6P dCp+3gp{RWgUlt;M!0ETmu=8~M1Ny24{sN$Sdj0?a diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/finalize_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/finalize_menu.cpython-312.pyc deleted file mode 100644 index 8ce93c48b3d91b9f3759bb6e5270c07c2a2b55c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 545 zcmZ8dO-sW-5S`hiwAL0yiZ>xAZ9L>Af>@9BWPU&>EFsxwFiCAb!1UyyKfqgW-o>Bd zACQ12Pu_&+r6+fi6smi8JG1lV&D(kH_q!m^@o45f$@_zn^=UOhc_@P=xZq*{AzFyQ z;1XQ609O(CqSQQ#<*MHLq(sM}Kh7d2^{0^?_-XFclp3)~$~_q@L4buWSj@!*SW3=x zrRa@)>YIxz5oOMrzt*66rCRmos55iE-_ZT&T1#()7RoNeFrLYWnux$lNJ3kkcxRJT zBxwcOt*upww_(&5$;4}B^GfC}FWTZ>I9V#@gH2mT^GZe%TGa!*?HrXd08>|s4(E{_ z3eJlz=i$`N0*ZT_&oVoxD>1D;ZWC-1Y!Q%B1@y~=iVG+iwuUu_%BI}V!9Ul=W}e5? mTuc3xUvX{`>`eAu*E=B3%k{*2l<`X?&1u)9IFMux7%qXr3@CcT zm10AN&6eBvRYY}C>`F2R1~#H#V~S>Ax0E~AFVe^rejGW0FEY1jP<^fXs|SjeCP&u% z8JXCc9^IyQZs2gvxWPwp8c@Rz#{mmjBn&a~xe+okifPY8`JNSvt43t>JW1k2mfM^K z9#^*-%VY0kC>R$d8264*Cf?efKI6mnJnN6Me3LyeHx+EU|L>Rjby+7eT8I8hGbKLdZH54=3L1$ tC@|WvP-RlOWunTbEAy&%shw6+&Jwj%dBKh(-z|jDFUH71KcKK|`2#W0f9wDN diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/generate_report.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/generate_report.cpython-312.pyc deleted file mode 100644 index 1c5fdad98b9ea406e7d50058961bd7bafd54d7ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmZ8eJx{|h5IsAoD1`z-hzX=jNEygl2?1iFTL;Fd$chrDMC7B59f@>e=nr7)KR`nK z6#f8;#Kgpg6j(apOH!%D!}B}e-ShMLt=sK@T2~hn|5@#y7%W$-A?1l8bMU|;AwGPPUj^sCdoTSoSb}Uu!#!|1kb7IoL^r&eF;*k+0vAhd&BdvNZ%X&dSy5ONN zP{>&H{Ij9tLRMhhJ4O}wD~1CuhNH#n@K)BTsLSn=V(db*dF11_q0?5 z2Bu!L8H=5WGgfpMixMvjk#93L$(*pxr1%Z#2ErD?CITu|fbSKUoIy!R%c^TIJy6p+ v{^#6Ujq?v?EXRXxPG}X=82L>j|+Jhu?V}Bkxfgh)CDJhXuLEceh4FYV!!KR$7z}8Y~ zYFTUO-->|{{MvD+?pD9;f%9^`s7;AUN6U_q`{Bg!stU`pp3s9XMc_#+H#TS9#W)r+ zF2I;NMiF>BCVe5t6E&Cpwz)~Oy0{Z=5{qSb*OFDeq6vv>x`)?;<6IFKnR?b>EOcgq zv8>71Y|fJad5f_{;sj+T!nH?rgnfiP1ng7*{!n6a1vw?PUa7(KNNwlnpKEJ3P9rQX mTm5anXAz+}D}v!L8j!2~?;NC*+J z2>}Y{;L$O78YeGW&9iB)n~hIQOj2~uve=bD5<6iabGN3{NM=d7rh*A@u!#pY^~e}( zEvKedbgq&xyv*bUk27~ppG)9%rCzn>#H9VvHnM~G+DI~K$RtYAG`ZUqMx?qe%X&sT zy5ONNP|BDd_(ucDg{;81af~YQ7yJfX3{oY^lp?ESZu6qa@41^vK3ZRJXUz`LkHCRF zz}w1xsRHPmdeLGmb|TJL(Pk`4ye!0cnXzH!gmopw4@jE`9fTzWRH^_UE3i0*l9EQR z=3u$6=Ct+Cw6&P$DK^(qf90pG(w_zOUm BgmeG^ diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_availability.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_availability.cpython-312.pyc deleted file mode 100644 index 926287076d0d3973e6540d6580e20317d12e3f1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 578 zcmZWm%SyvQ6umP^X{{EexDpE4C}fkR1z+Gscip)Og<rq=l-pICBp7-ZLjRFRfM+)VVtzd(Y~AN3lG$1u6FwnSlU70tksq z2v9f&L8l-LNuG?V&!xF(*FI3#q-dRG(IEAQ5fA({A5<+Bl7%SSip)TQO9Z%7kSVxE zPHm%TUyKA#<>?Lg1Aggihvn4L312Nu?T{0j_9nY}$d9fpzA|SGJu8$^X8EZM9mjdZ zaAqO{FF{9Ze&`+aQ<j-NI=%fJ`kYI5NB_*|P z)q~}pT4CqU7dWdrk8!xN`fWdN993CP;w{yJD@wK%d>Vw1H|Tzulyo0D-=Hr2;14Rj BkEj3u diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_menu_item.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/update_menu_item.cpython-312.pyc deleted file mode 100644 index 5248952f9653da6a2a4be9ad28b6e3bbb4ffaa79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmZ8eze~eF6n=L}X{}a8L?z8-L_vlc z*7PVi?&TuO6*VoGUHR!#9B{2~{lon>>*>^s`YaAlA1zHv~? z0J^qWwHQmhSTI(#8H@Y8h%jDbY*=`auB7-2(k8+x!U_T^DZsa8SR6x5NyFAXSnkSA v?ftXvEaqj3WG%HUKW&|8FQ@6IY{A`R+Y-JFLdXXk{+N{5Pq)7yFE#KFd$xrY diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_menu.cpython-312.pyc deleted file mode 100644 index 6975a472a0cbb1011490ae9d8b979d7553ae1015..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1544 zcmb^xO>Y}j@V)(t*R|`AwoYtZ;*eC-QW_D|DryK+326#Qv4~QY#tK?({GRDX{_1`- ziCLox<&XnN&MAoyYOkn&qVyDri%o=LJ#j(6fm;*{0pY^D-E~w&;>Jij-*4v4yxI9a z8Vw_WzyB}`cO`^=;X)Tc_MkHYWCsyMa1oVo4r3&sJBSFIh=|Vw-zg_-NE!KeE@Uu^ z&FZ$kqFeNRy-bSK%==D04o;xXYas6+igK8soIo%Y3j#!yauN|YQBLL&S?HcY*XC*2 zVPUeOJqY4;WAKQa7vbyl0op+>c99004;yfuYzCVOh#7%N7A+P$!Q#i#>64MdqWyhsI~kE@@geWJXYOcAx$&NhOKF}SGxBZ>#Af3WT}82qjqv+OZqC- z0RiPP#{qD&cgHc%?jRMpXtis5iLP>=Gw>{s>)6E>-oQkt3$8%KRi5_@5Q)e{Aw4AY zEU?z12zmZ$z~Nc+$pq*`S0qvb&etX2WRH`9Q#?)qF3dSoAm_@MMCv`D33;~Ae`R+i zS9TS*$32t%%bOB%g+(-sZ2k-$j36^sS4q@Wzee8(d0`3WtFC^oE(UZBuc38u39aGG z`D|?k)5ud6nf3!2@Z|8u^HeY1-Kf&qoooLKgjwIq2^MYLb}S|?QHu%LO0DO% zX;#e1bVl+9lAZsQ+TOrvUX@HKRLqiYGxhd*o>uv2X2NC&y2rx27hSK4V^pxp2Rk zd(d3958_TM;&={?QY$jNH3ugW!^cR8KEw^FeJQa!vYl%P?fzGH=eAwY45W5H-itQm z_SMnmwdo(O&g?n+QX|q%rJp8SsnLeo?u|E-w+@qYt>oNubN_mC;a>ATX%;F6$!e>& zx~&{VdGMoNbTPR#|JSdvfn$WBf=j90h28fW@BA1^|8pdQ=ENF?0>4O2PoXE%9Dg^Z z&Ri5<$kI$qe4%2_$7I0SjKX&U@3f||u%?wN#3^z>L4H;Wk4SC{kdy4BeGr+tkv!w^y7PxuJCZD(N98C g{*B%>-v9$&MHXL=P$kB{q0v936dpQ8fV?yR0=%z&$N&HU diff --git a/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_notifications.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/functionalities/__pycache__/view_notifications.cpython-312.pyc deleted file mode 100644 index 85290b1084219e494befdb7c34efea6aa6a66826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 562 zcmZWmJxjw-6utK)rL`LTz(EJ0laLNsg`$qSWpoIIM@U{In5H%_QPatxe?jUWa1eir ze?S6GPHsYU>Eydf3$4E4ymPqso_BKdY8Y)$=iy`&JgNJG#NssOq&!q)3O@K4!2lgZ zU~mpTn}Dwge9`JYhvmB2_#|OsVVq^LmxjaGjlwkd>XsUDF3KH6rXavU9~|c61RO1A zrdDiUgyPm7reP3zE}2MgF|;tEM@zjj$kAl>c#men__7l(&smoBOmTE6qCk>KXVwdP z{Zz=bg3guOsYI}pHx#meqwM&q*L7Yr#hvi7RE+okMYQH63MFZG_wcr9mWqIF>P3t5 z*c}MYi#F$jp`S&>H#i?KC=KtrZZGBXfpb(WGG?+@;-yq{8CG^iYZAgE&&q? z*@+5ZPEmeNYH>__d}dx|NqoFsLFF$Fo80`A(wtPgB37U_Mj$Q*F+MUgGBOr116cq| CKOR*8 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/admin.cpython-312.pyc deleted file mode 100644 index 718f29e8ca813f594af5d58a8ad58cc03f7544b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1435 zcmb_b&1(}u6rb6TWRqt50kxL4X%hrt71~4f(4u0*4?I{w#X~5JF|*MvyGh;Ms3|!V zDVQDvFVY@7cr^6l|KX*~DVi=FOWo@BQYZs>TV7 zbHD7uBax8r_|qA3o3tJPSs|QoY7&cPDMc=rf+c1}N(6F)aB+!nNvCTN14mXm)>{Ve z$N_J;64jI~+^A7cx>GWBm=m}3V)=Txn0Jj*F^`L#A+$+r6v#_RO($8(Nmi(l0_Ai` z$%-}doMxrFL=!wY!!4tjZ)fIjMUG$V1Hc=)LR{aBuq;-|E4X=;uF=3qiQB0JsR|uy zm9Q`(r&Tf+2}6WrP6=s93IZ37@b)_qI{E~>#kb(k!sr#ENi+Mg`-c83g#}trGo1S@ zb<@=?P1wS;x3EN7)RUd^yl#66V@A<%8M7s@d#VK+S)pB8FZL9IF|>JVj&q+e1A=)y z9iNn(P)0YC+WRw~lILsEhBEZ6 zcX;()Gda;nPBfEKjpWpN&-9nxv3LE=^kgGF*-U2|>CAf1m7lVdir1vi%18@BlDdo~ zz?>QL;*41(UN(^@7<*FAnZb&mm#4NblGja>u{yO+U}jj<%k}`EjhXs@s&G_*y(RKn zh|2M80$`u)tmlD*W;+G>g diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/chef.cpython-312.pyc deleted file mode 100644 index e6b55ef51c8257d4ace0847c082e8996e945723f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmX|8&ui2`6n>M;ZnNozQh%USQ}!gp!xlt^78OBI5bQz4LnsVuGNCEiY@KA)Eqf@k z;PxPRk@ine`lontu~HZ+2;!l)h4n}2$$7~pfqe7Ln|a@R@0-t-WrF%1{uRMZ3h)y* z#aEe<$u&iG!3Up2&?YV+$hAmo>#j~fg9qU21Mn#)`+A<^(q6@>9^=L#l0NQ4T&?v- zJnr7_#$FnBVlTg$qc+`478QA`ig9p>53V+ZfcRu!xcU%Y6PG>#N0ap4IuE>QsVoyY z{*yNfK9F5VvoOMr-iLQ;ls?%fd5}O_j0SzJi1vY%iaznRK5SG=k&NSGA5MaAg#7KWx>=HS$nB67{=sW5o|?a z8uG-Uk|sO~B#m2bE=~VATW`gFq%>=cc~L7#7)wyJ(P(U+o)1>mQl6x1Lb;!;dCIfq zW>4UIZ&~PIvuFh8Ol~VU*@h#-+L;*{7x&H`7>h@?^YQ9e`^JzS7z;n@*8ADLr-$~^ z$X+_Mmq+&Um${X(t~bmf{bpRAC;@OPI3M=Mm^2w{cl>UIyw2E*ZY#=9vL>W8ZQA2e z#F#_GJobUU-4$mP3hXNbv^KF6oDATfR;`$0P$140=c}r$nT^>*6!?&076IMJBtAiY o9fePgTX|o1#Ddyl#pHs5u}%p21(&|VmEUxRn8WLTKrLC~e_Ri>QUCw| diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/employee.cpython-312.pyc deleted file mode 100644 index 5dfc1073b6a76ba9aad6b727baa39b9415c6c052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 822 zcmX|8&1(}u6o0e3NjKXrr7Eb^Ey07Z9#RlIw5WJdPxheVVF?Urc7j`GH*t2OrsPm0 zV0sX|Nc$%!{ZqUctQ3Y81W&yM;z#MpdHc1nzxlm4^M3E^t8H7LzRka)bHf1mg+}pJ zax%NE$R7CM6AmHq2tlrKEz~`ofCi7j*GJ$Rj2!4$jAslgZuJxmmq_Djmos%PJYiA) zQ9o)YK{sk=FEi9~W45BmdzFlVM||+KF?5JeMy98a;VtouXW(kmd>Hn4cfeRXPnSj` z$A9)t!6&i@N$N(})raswwKF6KBy$o-iuPcr72YAxQqd>AHiWHeDN>Rxv!o^IXaP~t zrRD%!ed839ZP#7|>`fh8cdN1z_j^o8lhPmx5=w;{I!HTIx3rT_M%G@d2#P+rSU6ie zNCFnShBRWvJJN_+A(NKBNnf@ipDWE8rET7dV@hKbt=H>2=T|%H&4k5CQ>YEZO_tBC z(HjWd`}R^X$wpBSb`alFaJB=-roB5iF|X`jIy6^~9ryFC@6MgEacD08T(CdR?>|3s zRwvHtk+U{&*1j#SPj$U+jg24X^_da?w}O3Qos>$8(y;6IIr0TcU-er&yGaX?c3ym& zaZagA#1htl^LrpJC=|Gd6tK70R&X|ge_FL-O+kUUSln-@v{u?~15w~Y#XJH=rV?Ku pdyc~A=H0BW`(jy{m@&SrV5$>BPT<-J-283K5o?_M0d=H-{{axxy7mA7 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/role.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/roles/__pycache__/role.cpython-312.pyc deleted file mode 100644 index cbf4476e95cc66273a383056c000f078587f9033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmZuvy-or_5T3m|@IdgQSP*042{hO60LIYTQK%Im*%0n9rw7RHQ9vjxC@AcC2I6yA z*=S)T*ZKkm3KJ@4_COQjB=^lXJ3sf$W?!<|G@xBqdaY;lpA>A&Sd(QQ$rLoW02jvK zvL`Lh)L@`FdUI1xo~?s*j|Vm8LQQko7;3t!AsPeSF(Tu#8+gt29MwZy$8TvPOku=E zz>&q~14f(KFn}4WI$C6O8f`DKTK!Hl^t+u#;D^2^DIvX}C6d@HX{>Fp3aztx=*dul zeb=y6AW(#?6PE7>k;%E=@k7psSyETtgrrLDBRs(TFh4OKQ}dJ4iSce8FYyqXzq&9W zuC_Qrf?L2X`fa-ck-#&DiJjP)=p?n;B83>`ZoH6htu@RmQU7FUh}=U!eOB(nD!y68 zSFt<8 diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/admin.py b/Final Project/Cafeteria_Recommnedation_system/roles/admin.py deleted file mode 100644 index d30402a..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/roles/admin.py +++ /dev/null @@ -1,28 +0,0 @@ -# roles/admin.py -from roles.role import Role -from menu_function import MenuFunction - -class Admin(Role): - def __init__(self, name, db_handler): - super().__init__(name) - self.menu_function = MenuFunction(db_handler) - self.functionalities = { - 1: ("View Menu", self.menu_function.view_menu), - 2: ("Add Menu Item", self.menu_function.add_menu_item), - # Add more functionalities as needed - } - - - -# roles/employee.py -from roles.role import Role -from menu_function import MenuFunction - -class Employee(Role): - def __init__(self, name, db_handler): - super().__init__(name) - self.menu_function = MenuFunction(db_handler) - self.functionalities = { - 1: ("View Menu", self.menu_function.view_menu), - # Add more functionalities as needed - } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/chef.py b/Final Project/Cafeteria_Recommnedation_system/roles/chef.py deleted file mode 100644 index a593752..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/roles/chef.py +++ /dev/null @@ -1,32 +0,0 @@ -# roles/chef.py -from roles.role import Role -from menu_function import MenuFunction - -class Chef(Role): - def __init__(self, name, db_handler): - super().__init__(name) - self.menu_function = MenuFunction(db_handler) - self.functionalities = { - 1: ("View Menu", self.menu_function.view_menu), - # Add more functionalities as needed - } -# # roles/chef.py - -# from roles.role import Role -# from functionalities.view_menu import ViewMenu -# from functionalities.roll_out_menu import RollOutMenu -# from functionalities.finalize_menu import FinalizeMenu -# from functionalities.generate_report import GenerateReport -# from functionalities.update_availability import UpdateAvailability - - -# class Chef(Role): -# def __init__(self, name, db_handler): -# super().__init__(name) -# self.functionalities = { -# 1: ViewMenu(db_handler), -# 2: RollOutMenu(), -# 3: FinalizeMenu(), -# 4: GenerateReport(), -# 5: UpdateAvailability(), -# } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/employee.py b/Final Project/Cafeteria_Recommnedation_system/roles/employee.py deleted file mode 100644 index df199e7..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/roles/employee.py +++ /dev/null @@ -1,29 +0,0 @@ -from roles.role import Role -from menu_function import MenuFunction - -class Employee(Role): - def __init__(self, name, db_handler): - super().__init__(name) - self.menu_function = MenuFunction(db_handler) - self.functionalities = { - 1: ("View Menu", self.menu_function.view_menu), - # Add more functionalities as needed - } - -# from roles.role import Role -# from functionalities.view_menu import ViewMenu -# from functionalities.view_notifications import ViewNotifications -# from functionalities.give_feedback import GiveFeedback -# from functionalities.finalize_menu import FinalizeMenu -# from functionalities.update_availability import UpdateAvailability - -# class Employee(Role): -# def __init__(self, name, db_handler): -# super().__init__(name) -# self.functionalities = { -# 1: ViewMenu(db_handler), -# 2: ViewNotifications(), -# 3: GiveFeedback(), -# 4: FinalizeMenu(), -# 5: UpdateAvailability() -# } diff --git a/Final Project/Cafeteria_Recommnedation_system/roles/role.py b/Final Project/Cafeteria_Recommnedation_system/roles/role.py deleted file mode 100644 index 0b07236..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/roles/role.py +++ /dev/null @@ -1,8 +0,0 @@ -# roles/role.py -class Role: - def __init__(self, name): - self.name = name - self.functionalities = {} - - def get_functionalities(self): - return self.functionalities diff --git a/Final Project/Cafeteria_Recommnedation_system/server.py b/Final Project/Cafeteria_Recommnedation_system/server.py deleted file mode 100644 index 7aae639..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/server.py +++ /dev/null @@ -1,103 +0,0 @@ -# server.py -import sys -import os -sys.path.append(os.path.dirname(os.path.abspath(__file__))) - -import socket -import threading -import json -from roles.role import Role -from roles.admin import Admin -from roles.chef import Chef -from roles.employee import Employee -from database_handler import DatabaseHandler - -# MySQL database connection configuration -db_config = { - 'user': 'root', - 'password': 'root', - 'host': '127.0.0.1', - 'database': 'foodrecommendation' -} - -# Initialize the DatabaseHandler -db_handler = DatabaseHandler(db_config) - -# Function to get user role from database -def get_user_role(username, password): - return db_handler.get_user_role(username, password) - -# Function to get instance of specific role class based on role name -def get_role_instance(role_name): - role_classes = { - "Admin": Admin, - "Chef": Chef, - "Employee": Employee - } - return role_classes.get(role_name, Role)(role_name, db_handler) - -# Function to handle each client connection -def handle_client(client_socket): - try: - user_credentials = client_socket.recv(1024).decode().strip() - user_info = json.loads(user_credentials) - - username = user_info['username'] - password = user_info['password'] - - user = get_user_role(username, password) - - if user: - role_name = user["RoleName"] - role_instance = get_role_instance(role_name) - functionalities = role_instance.get_functionalities() - - response = { - 'status': 'success', - 'role': role_name, - 'functions': {key: name for key, (name, func) in functionalities.items()} - } - - client_socket.send(json.dumps(response).encode()) - - while True: - choice = client_socket.recv(1024).decode().strip() - - if choice.isdigit(): - choice = int(choice) - if choice in functionalities: - func_name, func = functionalities[choice] - result = func() - client_socket.send(result.encode()) - else: - client_socket.send(json.dumps({"status": "failure", "message": "Invalid choice. Try again."}).encode()) - else: - client_socket.send(json.dumps({"status": "failure", "message": "Please enter a number."}).encode()) - else: - response = { - 'status': 'failure', - 'message': 'Invalid credentials' - } - - client_socket.send(json.dumps(response).encode()) - except Exception as e: - print(f"Error: {e}") - client_socket.send(json.dumps({"status": "error", "message": str(e)}).encode()) - finally: - client_socket.close() - -# Function to start the server and listen for incoming connections -def start_server(): - server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - server.bind(("0.0.0.0", 9999)) - server.listen(5) - print("Server started on port 9999") - - while True: - client_socket, addr = server.accept() - print(f"Accepted connection from {addr}") - client_handler = threading.Thread(target=handle_client, args=(client_socket,)) - client_handler.start() - -if __name__ == "__main__": - start_server() From 9ea9c32f980bc477702b0462360788077feb437d Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Fri, 21 Jun 2024 08:11:36 +0530 Subject: [PATCH 06/24] CRUD Operation/ Recommedention --- .../Client/client.py | 45 ++++-- .../__pycache__/food_menu.cpython-312.pyc | Bin 0 -> 6144 bytes .../Client/menuItems/food_menu.py | 114 ++++++++++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 136 -> 186 bytes .../__pycache__/admin.cpython-312.pyc | Bin 1350 -> 1977 bytes .../__pycache__/chef.cpython-312.pyc | Bin 1862 -> 2225 bytes .../__pycache__/employee.cpython-312.pyc | Bin 1625 -> 2067 bytes .../__pycache__/user.cpython-312.pyc | Bin 663 -> 719 bytes .../Client/userHandler/admin.py | 36 +++-- .../Client/userHandler/chef.py | 54 ++++--- .../Client/userHandler/employee.py | 47 +++--- .../Client/userHandler/user.py | 4 +- .../Client/utility/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 182 bytes .../server_communicator.cpython-312.pyc | Bin 0 -> 2565 bytes .../socket_functions.cpython-312.pyc | Bin 1482 -> 1482 bytes .../Client/utility/server_communicator.py | 37 +++++ .../database_handler.cpython-312.pyc | Bin 1951 -> 9555 bytes .../__pycache__/login_handler.cpython-312.pyc | Bin 689 -> 1263 bytes .../__pycache__/recomendation.cpython-312.pyc | Bin 0 -> 3896 bytes .../Server/database_handler.py | 149 ++++++++++++++++++ .../Server/login_handler.py | 21 ++- .../Server/recomendation.py | 74 +++++++++ .../Server/server.py | 107 +++++++++++-- .../Server/utility/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 161 bytes .../socket_functions.cpython-312.pyc | Bin 0 -> 1275 bytes .../utility/socket_functions.py | 8 +- 28 files changed, 594 insertions(+), 102 deletions(-) create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__init__.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/__init__.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/server_communicator.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/utility/__init__.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/utility/__pycache__/__init__.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/utility/__pycache__/socket_functions.cpython-312.pyc rename Final Project/Cafeteria_Recommnedation_system/{Client => Server}/utility/socket_functions.py (52%) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/client.py b/Final Project/Cafeteria_Recommnedation_system/Client/client.py index 220793a..654f5bf 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/client.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/client.py @@ -3,34 +3,45 @@ from userHandler.chef import Chef from userHandler.admin import Admin from userHandler.employee import Employee +from utility.server_communicator import ServerCommunicator + def login(username, password): client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server_communicator = ServerCommunicator(client_socket) - request = { - "endpoint": "/login", + + endpoint = "/login" + data = { "username": username, "password": password } - client_socket.connect(('localhost', 12345)) - json_data = json.dumps(request).encode() - client_socket.sendall(json_data) - response = client_socket.recv(1024).decode() - data = json.loads(response)['user'] - if(data['RoleName'] == "Admin"): - user = Admin(data['ID'], data['Name'], data['RoleName'], client_socket) - user.user_menu() - elif(data['RoleName'] == "Chef"): - user = Chef(data['ID'], data['Name'], data['RoleName'], client_socket) + server_communicator.connect_to_server('localhost', 12345) + response = server_communicator.send_request(endpoint, data) + + if(response['status'] != "success"): + print("Invalid creds!\nExiting...") + return + + response = response['user'] + if(response['RoleName'] == "Admin"): + user = Admin(response['ID'], response['Name'], response['RoleName'], server_communicator) user.user_menu() - elif(data['RoleName'] == "Employee"): - user = Employee(data['ID'], data['Name'], data['RoleName'], client_socket) + elif(response['RoleName'] == "Chef"): + user = Chef(response['ID'], response['Name'], response['RoleName'], server_communicator) user.user_menu() - else: - print("\nInvalid Creds") + elif(response['RoleName'] == "Employee"): + user = Employee(response['ID'], response['Name'], response['RoleName'], server_communicator) + user.user_menu() + + + if __name__ == "__main__": username = input("Enter username: ") password = input("Enter password: ") - response = login(username, password) + login_response = login(username, password) + print(login_response) + + diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d179b465a453c3c5e8badb98646e148029b97d06 GIT binary patch literal 6144 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 literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py new file mode 100644 index 0000000..5d5b32e --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -0,0 +1,114 @@ +import json + +class FoodMenu: + def __init__(self, server_communicator, role): + self.server_communicator = server_communicator + self.role = role + + def view_menu(self): + endpoint = "/food_menu" + data = {"role_name": self.role} + response = self.server_communicator.send_request(endpoint, data) + + print(f"{'ID':<5} {'Name':<35} {'Price':<10} {'AvailabilityStatus':<20}") + + for item in response['menu']: + availability = "Yes" if item['AvailabilityStatus'] == 1 else "No" + print(f"{item['ID']:<5} {item['Name']:<35} {item['Price']:<10} {availability:<20}") + + def view_feedback(self): + endpoint = "/view-feedback" + data = {"role_name": self.role} + print(endpoint, data) + response = self.server_communicator.send_request(endpoint, data) + print(response) + print(f"{'FoodName':<35} {'UserName':<25} {'Rating':<10} {'Comment':<70} {'Date':<20}") + + for item in response['feedback']: + print(f"{item['FoodName']:<35} {item['UserName']:<25} {item['Rating']:<10} {item['Comment']:<70} {item['Date']:<20}") + + def roll_out_menu(self): + endpoint = "/view-recomendation" + data = {"RoleName": self.role} + response = self.server_communicator.send_request(endpoint, data) + + print(response) + print("\n\n") + print(f"{'ID':<5} {'Name':<35}") + + food_id_for_roll_out = {"Breakfast": [], "Lunch": [], "Dinner": []} + + print("BreakFast Recomendations\n") + for item in response['recomendations']['Breakfast']: + print(f"{item['ID']:<5} {item['Name']:<35}") + + food_id_for_roll_out["Breakfast"] = input("Enter the Two ID for breakfast : ").split() + + print("Lunch Recomendations\n") + for item in response['recomendations']['Lunch']: + print(f"{item['ID']:<5} {item['Name']:<35}") + + food_id_for_roll_out["Lunch"] = input("Enter the ID for Lunch : ").split() + + print("Dinner Recomendations\n") + for item in response['recomendations']['Dinner']: + print(f"{item['ID']:<5} {item['Name']:<35}") + + food_id_for_roll_out["Dinner"] = input("Enter the ID for Dinner : ").split() + + print(food_id_for_roll_out) + + def add_food_item(self): + food_name = input("Enter the food item name : ") + price = input("Enter Price : ") + mealtype = input("Meal Type : ") + mealtypeid = 0 + if mealtype.upper() == "BREAKFAST": + mealtypeid = 1 + elif mealtype.upper() == "LUNCH": + mealtypeid = 2 + elif mealtype.upper() == "DINNER": + mealtypeid = 3 + + endpoint = "/add-menu-item" + data = { "Name": food_name, "Price": price, "MealTypeID": mealtypeid, "RoleName": "Admin", "AvailabilityStatus": 1} + + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def delete_menu_item(self): + self.view_menu() + item_id = int(input("Please enter food ID : ")) + endpoint = "/delete-menu-item" + data = {"RoleName": "Admin", "MenuItemID": item_id} + + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def update_menu_item(self): + self.view_menu() + item_id = int(input("Please enter food ID to Update : ")) + endpoint = "/update-menu-item" + new_price = int(input("Enter new price : ")) + availability = input("Enter availability (Yes or No)") + if availability.upper() == "YES": + availability = 1 + elif availability.upper() == "NO": + availability = 0 + else: + print("Invalid Input") + return + data = {"RoleName": "Admin", "MenuItemID": item_id, "Price": new_price, "AvailabilityStatus": availability} + + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-312.pyc index 54eb8ba1fbd70b29e357e4f9e788ebcec38a83f0..1274d78183ef37215b25475700e2431628b39116 100644 GIT binary patch delta 81 zcmeBR+{MUsnwOW00SG>vpU7om9qDWp6Iz^FR2)-Kl$es5TA-JbQCg5#r03}u;_2%e f;_4jZl3$*elb@JU924Z4m!6rI8Uvvwx;p{@F-sfZ delta 31 lcmdnR*ultknwOW00SM{@Cvur^s=Hamgt!KW7*4Eo1ORMb2V?*M diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc index b218c548a73245c31d1c4b238fd1c347bb637c38..afa1e6a2bd9487425ede45b2448e86b0c738b38f 100644 GIT binary patch literal 1977 zcmaJ?-ESL35Z|@WiS63X#i>c7K5zj9b{k!kG(k!!h%|AEB^vRO1Y}t{PToy>>G{s= zozvPFsSlAz5tS$s#0XHs6GC|@Py7+^;3y6ar}PP4{8lLiRS^&D+}TdrN*?Lt_~So?He!JqYG)J;GAia%hV|4JuPqawKfMY@x^D{5k*-{P}aAOmNCI= z!K|P7)=*YhM>lXb@IFfUoxn6HXhyz$La@-oKk$C=5g)$B8_4FfN4El1bero|an)D# zSA{JeDG)|>$3j)8q7|_56m7MRS4Bz-g;1FXHJ=JN0jpG`%n2%rW@xseFwk%WX6n=l zE%R8F0uMIT;|LbjmmQx*9KlcvltIp&0iKjq%9OlWD3lB>ui7SaLW+{tRm)No3l1Xz z-8@{HIiG_ZTDc-q38h7uTrCw6zTDdEL-Wl~}p=(#93dpt;sGqifW# zb0rRcOErj2Sx$xI$;C1YaTk@Cn@hPJ1Z2cI!-vN=(S9&`t9Ltisur&;Y);fu7aGCW z_lJh-FHGLEe=Yw~-Wi%+7jDN6xHigT7+ciKXZJGx<6M3f9T~wq&Fvd+YxDU#UQk@p zN%4`0OZ-0swptc23LUp59Pw@N>5>g$xkNg+w%(_>ib>D4Btq;o_vaRWTicsgqEGH& zx7A`{WPHQ%y$93OV^FCV*=6Ycz9#IthpSqm$J z&+?A4Qa*kskt17Q{E>>zS3=Ffwdpb5ge)x$PZrWrPiaa-PV_VcY1(2QcqW+yn;39a$~-45VHRYDZEA!s~2M0u-x)f$lbBea z+v`iz`al0t~l16y)P!} z&%M$RliZr;;J!GuElxGW*Y?E3-yofBi0OyJsBeJ9c|g3m^7ac&RZ*O(Uf1O5TxvBoOHnn9sC1JL=QmMyvSBXEBYF7RjM8G(B{3|{aK{RTVBw{Q|`hz}3_ Y7~=-?@8d zQCmjpLnP8jNO=G?2qF3i%Ae8~M@`h|6nN=V-YTV_Do@PZ`BD=`y4l^|%ubX)6_A3(QH`$|94S2xuJr=$xZ&DE4h3p#BfBi*tb&j~H7mW|Xv zxJ!}Z@JRKVEfJ~GcSTgPT}ODK75MhD2&24Z*={okEGt0&4C&Tkb>_n2{B(W(+~Q}k z_F@Ne{=DgNSIEUCMsBvdQU`-xIZnh({bFFjNnlTIkv+Y1JGZ4jw=uCXe|PHlmv{8{ z4?sd}ihM{|fjH|I0EL{7WSsWN^|Z99HmtwE`}~^O9O}_gi&6BbvSBVY=4xt{uHVr< z<=XOD=o4eab2gP@eL*AlKMnnuMn2YfW8{v)Qw_)iOLdH{7mopO+#EuXm61v@26*M- zTrXevQnnB?pNMk&F&T}>sQx4+%qbJiC1=v$=%X3>o?ZEhV%NHI|h4t9864Z z8`WK7{DE<5%Q*GGsBRh6ZR5;e#`vQgDL*gA!8?o_j2@1eWkm(cYWck5;@+^V8=a<` zNaBf+FJVfh;oRB6bzxemEMp>A>rdjGCDt=$I2-|%>&XgvtWfQPf3iib5_^s1bMQAA zADK@R_Y$pQ@gF2n#X=tHA0>f(EGOZJ-hvar9%U${f0EOW)iGLGz4SMMCARt(`Zq1p diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index ea9c61dd90d6fec90ef09d3cdec34d59025d3564..5e773c09141a40d0c93a471d756f4aab39e7d3ad 100644 GIT binary patch literal 2225 zcmaJ?-ES0C6u)bR{5==e?M~vjCPIAHwDN>zI z$8r%}m?k-KhTNdJ=zAm`@x+lyRxC6FL<0~!LFelip}Rxx5*Nmx-HO)9ZNS!PU8qOu z;+z=lQ{uKP)Wtfvf;OIMb76FKqJ~<8RN+kH>8KZVDrLsKn5r6<;i@V}geP*_WL~@o zM^#I3)^vv_I?OD3f}wk&rIi>*%Dq0|WQuXMV3$f2%P45B&Aqs)7EH}?RMo*?WNbH| zUKlx=M+%*MnQJ;@WksK?lr^r5jZci7%T8oR@@MSpmT7CclRuxeE*lohhr@_zFw4zX zK>aPv(oM$m1>jC8S9u&f)RM@g(mVq4;p~U*$xX5vOWx{Si0y3jHYR2>^XX$tvE!=) zd*)vpy665@{iV7%aB4=pomvMpDNyXg)(NA36-R(PxQLcar$BP^x|?VizlCf9NsHhO z5lAB6N9RHdl*HSui5vSa`t+NNr}CTL(re;Argf@!Tpc8Y?*e~*<~Py7cqRGYHLm8u zElR9kLBDfL{q8OGzXtu7uiw?iO1v2#c=!YmiA{)YZHQ}t=-PxxwjnM8BDH0dJzGY3 z67;)${ny)~lr}s7cfFe}Ttt{OmmnFHNuZS5ZYzeuq`FsWoqFl~oH(X%X8KqsEafWWlCyHMN_@aG_Jvdl40 zy*Sn`-(oH07pvA9pStrGbbhh=BGJhFF#OGMwSVV#{qrvzS{yjM*q@mhUFq&`^nCWwinRT1>dVx9X>dUrT$c8) z^z3LH{AyQg`@n*9U|CYa?NzCN{<+MuH1tOR```8PW$8pH-^$FsC20`kf#>_u@PahF zB)z#RZNJm;C%QSaBxN7HM!NerzCHL=;NQXDL{+_ns+MfMV&c3@Rj*YvGm!Wtp6^8# zli|-&U~olhnsN!r!z4ZF)66kv{0?)`!OMCwO&$wE^fdh^HV_@9zF!}KpP$tBqbNA% znC4y|<{>^zM``_l{=eue{!9WRc&|@m$AX|w@K<4pkvId;J&I6DACNr{$lzn~c{)mG LGJg{sebs*fPnZXa literal 1862 zcmaJ?&u<$=6rNeH9ecA*;-sKTEnz}K69Zb3Hc%1}>JO5TLj!FcKqk^^yE`V^taqK+ zbz85D)I%iFN|kZ|H3%UpPN4h&T)A-KlBls-t%6huF1b}oKvho6+w~^Kkr>G{^WOVr z-uvFXef~Y0l@K4l9QR5;CK37*gm`c{9J{Ca@&Fmgz!oawBF0ES)5s8(k&&QyJrTi* zLQTvkcR2V-%L5lyt;qGgE`UXEh9$%wzH(5vbIkt}LLOoFz*TqPWQH@75n-_wlTdhzQ zq*c|lO;1(xsX%n8RSE>t2t->e(?Dd7MT4wvnbh`F*U=ZL7i3gbw=~yPRTumd7GwIMo>Amlbg_6VY@4bgoB z(bI;=g@}X9p29?@z|`Nkv^rC?vyFn z#{>SFG^&tKOnQr4rgoLgc(g2?QOH%tvdBkOj})A;!rzkb9Yx<&e zP9c-GP0!Cw+8$*@Bl?14>Xb~79jGb4>%YNWo3SnVseu|BV^@CQqr+q^gjQEvmVc@GcN$ATl}?&va}h-w`A$%(OiQ zg%Kq9E=ZborRp)Lg&?V0j>~%q|5zT}ln1xu)7x^-{i(me{rQG`f%R}EyxH=`3r$v414&iOj#0H>FRSWO zRkI>X*f1I4_#oTtx;nKi-m5X|;#wC9@O+p)2DK1QP+BfnpD&|50Vm)2Cv_ru5r=L= zz%2hS>1k=t3hWsi3(Y^H2nvs~pMEcj?0q)GMQ|53>t_j!@gHblPkb3)#4BTeBUr<8 F{{r@4x*7lg diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc index 19ff4e1b261092c3baa6d699bf4f46256b3cf4d8..df262ca5f43fa5c4fcf89d555155fa4900e5d3ca 100644 GIT binary patch literal 2067 zcmahKU27aw^xoOoWOtL@%qER(sNh6JvrQRnn~JGbYST^KhlaMsuVrDn?%cK0&dzM_ z%qHD+g(3k{u~3zg6cyu>XkO}*Kf;%UBs2^u2nw=qfy7e!wNM4AA&2Rlb$TObtmS~|lqKS+y zhkTW+SPiGT8i=H*E52(p4tr$Mvb1x|tQ34He-#2`=S4Vt4i_SCQ-K^y;p<-o%_Q3EYPsu0&yD(r^sN||vtqN=*7JF3c2!WFq?FgIF+ zaMcpTo9c2!n;At{&^1>y^CiYH?d|~NWrlIJV3kT0Q!nHli@Q-(Ef{&*R#h9Fkr8e@ z{&3<%4%2Ao$~>&l#nUJxyZQ7@Y1qGo$^uR+ z(QOuRLf?m%0}GTyJFSUrx`TIm;9z7PXf3^_+^4iowXUlpgz$rKpVtLVX@9>Ge-cM* zIUrGDegpd5o_=pfRFS5AkoXKFqI)D_9TL|-qGyjpZ->MskcdCk%f6?2c?$Fsp8hKx zUiP(bfY_zI7Oo8JrL|*s2AkYA&Fty0FSYG|xt2;!)uOTYnE_SK1SuR>!p0-LB=hkd&Op(v( zGfbXjO#3KbxEebiSZWboRpj(_-GMSU9meInT)1rM1ty=68(2^cti)Q<^QZIn2G(xv ze;sIGxz^%O_|U-qXiOm~ ztun^1qm;_noNzWoq3(sP$zcm_KG;Az;0~T*I+>R}d{V;xad~tN? z!jkh-^~dVc)qDLbiLv#_@y$g4R&R2fkb(2UE+O#?!q(t{?*><%JGwS>Y;ACCesZ&K za54GCC!5l~g~V5h`_jm&G_oNb+Dz_WJo5FyEopG&nH1oEbl|UTNaJn%wzVO>6re3D zhgYS;8hs01o-|9_oeYwX?$IJeM{PRr|U1g<;=R2-X0}=1H2z1gP9Fe9cQ(w zx-nHPSz5)wbFZpitKUQYslEmFt4R`ATR7~KKc281)W2h~CpxRglC{(h7eIvX&c6RM- zixs3jRHBJ#TUahs(N9Ld-Bobx;PeB5)- zZ@HXGfPOy`)V@g*@+UG0$^FgF6m0Ghi&)elby}g6NMw#!(lW79oUW&OxQf(Dm*g%o zB^sr#_*|GhO>dR@%+4fizJ>!isZfhlq!m)57F|{BSFX^kNgz{;=v=4i}5OAH3dZ2?cDzVv>%Yc*pSk!>~NPMYfgP?U7C8#kH}u z^8M*wUhXJw?SO`u6xTjs9pc>EAcf5LbQW!st4WO$H2i;ni~2FO-pA2Fi$UpLeS?w2 z*h(i>$^R?brk1>Pf)Jq%c+MnxtTG@*4j_~vMD_qe9YTyAKxjjVT#Pt15J!F=0ky!2 z57E`pApx-KeGyb9muUB8t-*R7+CLwkVApK38rYtzzNxcW&$HOa9Bk{{wPG==d4iR_x+jEpL!H*yoPC|MSMt;h^&_Hc$A!{=3+iVeXj_ zy4WM(s5L9Fgm;F@T$)lyqh@2p3-Yz+Induk{iNy1A*5N zrC=Ayw%ce10xKWMrsMhW`Z%Onl0+6|nO>GYX2X~`gt9EYF$3z>49E5!)Se96*Z&EY z_(83zYtuiU{r>FQYxgg00d*yNNxz%fTK9Bih9c^lmpYCX9_W9M59qs4%=ZG2N3f2d7v zYLi>q)V5Z*JNp-&e!io zkjWhfMi&)%%ogwed|VrWR}?RJ%|2?ME|Vt`mEZn1b6CDWW4AG20mf@#U|Q+87ibo% re)}hW; zF`+=Y;+TS>#FW(30=<-s(t^YyJx{+7PhZy%SLYa){PMh<{KS;vm>}1@^vt}}7zj04 ZgE5p{*{p-*Du=@47RCdN=968Sf&ffsERO&H delta 72 zcmX@lI-Qm8G%qg~0}#{+mZZIBn8;Qs*WeJt b$q9_1?6O)NELSx&j1ma>4<0CU8BV!RWkOcrPTrl1M literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fd84bb2e939c37f78b0e0a69adaa9de332f0c99c GIT binary patch literal 2565 zcmb7F&2JM&6rZuz_L$gNk|jVB;yNGDm{uu}fcO#;3TcTdT#2L?%hJ~Mu3?S6Yi8H9 zwl-1^IRv#5y%D5Jq*A38aqYj*QxA>nq;?k$m3r!pl1i00^}SthFitq|q>Mw+1k@*z0K#it^ zzfnl%y(N!#_R01skna_tpiaLXf zD!-%hIip;z>RLW$89eV>#ed*D2;cS~u=~WOHj!cGQH?yJ=@fP1`I4sUmTVgNTdI`` zID)B`3OoW@CK^a4Uwk@uKKqHOax+`uIYm_~)5^_iCC8^1(n|~1=9lK@vR91H^^%cO z%JKnQML@(gIk~61Jo`pv}z6m19U9bV#5tK z++yPmHoku4$I11JTkHhygY8#BjDL2~o`=bsp?y74Q`MDRsRYPfq`|Uzqmv3A!hTff zf;YAYyjNB5-sVAIyRpq|v3ERN9nXW7hsnjY1j3u(QmBusi0RTpk2~@rgf*=Z$Q1}D zrn)0=HGjtmD{9_Q)JN1sZsLtPQ9T6vs&+?}!5MOa8)ZMX$M*pL8r^;{XO05{FNji0 z9BYVUE%8`GJhpB%#rIm`OhcS$il;Z&>D?aLDdw|a;7vT@W8Rg~p?t}J1U-zm>O#8T zU4{~M(_J(4`ota(dzA*z$^j4C%j``ySaOSvyJ*s{lqm+s4e;;qYv`lYrW#!i+5tXb z2aDaQ0E$R zgHx-KKl;RWOuCo8n_ipUj3u8QPCSf1h<{)BLH|zwsn9xewQ=TZ^YFrIyv>GMY_!2f zHxj2d+02gkt@5z=p!nmVX5wTkakh~-+f1C_WEcKCIK0}|mWEbYyMM4PC0o+bhIDlO zR#Q6FlFl`xb4}^O>Xmlvz?#sA9a+8lR2=+f_N&_3h2O+u?fpZ~qC}LQ#YpsEi;Xnc z$R-ts_O}Lfpy^B$Nwe?(Cm1Sq2ESC+XTEclumTy;cC2xo0bIl>p zgrg%krWQYf?0sO5h-VKAjbp943@2t1*a~?bprLo4hiT{}vMFR|kWKs>9tcf(hfy86 z_&5ywC^Fa349>7T-I%>#7rpyk;g~k L{=@(zia_cC(LW95 delta 60 zcmX@beTtj+G%qg~0}w3cD@i-Lk@pW1BgbMcW=2Nt$=od082KhYV(DdMnOwl?%gf8C M{D}cb6oJ$O0OAr3Jpcdz diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/server_communicator.py b/Final Project/Cafeteria_Recommnedation_system/Client/utility/server_communicator.py new file mode 100644 index 0000000..dd0f895 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/utility/server_communicator.py @@ -0,0 +1,37 @@ +import socket +import json + +class ServerCommunicator: + def __init__(self, client_socket): + self.client_socket = client_socket + + def connect_to_server(self, host, port): + self.client_socket.connect((host, port)) + + def send_to_server(self, msg): + self.client_socket.sendall(msg) + + def receive_msg_from_server(self): + return self.client_socket.recv(1024).decode() + + def close_connection(self): + self.client_socket.close() + + def send_request(self, endpoint, data=None): + request = {"endpoint": endpoint} + if data: + request.update(data) + client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client_socket.connect(('localhost', 12345)) + client_socket.sendall(json.dumps(request).encode()) + + buffer_size = 4096 + response = "" + while True: + part = client_socket.recv(buffer_size).decode() + response += part + if len(part) < buffer_size: + break + + client_socket.close() + return json.loads(response) \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc index ebcd839c0a23aa88b36c7e143655c25912e784cf..c34259105ec80d3f4f2734120792eca3b2cb5242 100644 GIT binary patch literal 9555 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 W^Bl+hhV1??VaCNB+aO5Utp5QeFv&## delta 167 zcmccYHJ_jFG%qg~0}#{;mZXWYOyrAVRGFBm%2LUy$u{xOaZcqltC$ei;1I*jM;I5e zOiq=U!>BZwNm7&9Pm_JJo{9;h+~jT*IVmxq2`vntm{?gQKk>1#a(xouWfl1>$HXc( z`HhN(tvXP;h#y4o0*PN7Ho5sJr8%i~MVde^BM=u00f`UHjEs!88N|M`C^E`@VgM3g FJphx~CNBU0 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/login_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/login_handler.cpython-312.pyc index 7cb35baae2edd7b8a859d907fe602d053b58337d..f17d88952d3854f05897b7c54caf863dc20da3e3 100644 GIT binary patch literal 1263 zcmY*Y&r1|h9Dnm`XHvHl`@(#`pZER!-uFB2v)L{rXzxQb_gh8i zI~-EdJD^n*U>#wE6(5z6if$mRt|F{$i3p&wvZUDh4}c{PcuGnKwE6{DM?`pHR93OF zipm<~DC0?FQH<)azuGv4A!4wR&ZSL`je%4ZxO=t(0tqcj5cad^^}y zxz30`M>E3CAi7xmGwY34?lMAIrA}Q;NPQH~$90#E&Xn%V+?u*Gb-gkfJ`ViQ#jG+r z6^LF)r6X<=x=3inhX&IkqxB_jIZidGMvk-Gcewe{R1J^EjtKS??G6q%^yj&jI3N!$ zlae8Tyxd;_)={EhWk8@6O(0bwJwdh9`;e?1&eG8*TB4@|SuqlW=CPI-Scg198XcJd ziOo$7Tbt@iCNS_3+=aUVN6?R?B(v2Soq`gzW~TZB8Nt;g)#L)Dr?xzZuVw$Yz-gyV3^b8gj-DOt|X1dFa;#YK-2OoFKD`pi}-EEP8wM1J=Hu}!%&yxW^6-a|)D zoEvpo4IWpVd;Ds0h;f1(K$)lLCh-W>&DvCHP^d6Fk_CSB| z4m1yL7A34628=L>Dz=GQU@~OU<=+1`O6tIsH3SpulplOK-prqGScgz9|KiEolbzg1 zGdJ>P?A^WX+_i@OxjXl5aOm4$;bpWjvU|Gt`sBvV-Qw`;al!<*Ln2h-cH!3MI delta 340 zcmaFQxsjFcG%qg~0}#{;mZY6wn8+s~CjsP5XJBG*XGmdaVMt+I%>BQ zh9Xv=geFrF8<4uiot%-HoE@K&pPreg$y~$^65}W>PA$qy%uT(;QIJ?%T%KQ)QVcS2 zavQU<5=e8gB#>xexWO;nU*B1OonPxBzt#$i4H1|5?JjWGO}1h&s^JH!SjkWX@>UTC zhyWP?CK!Q?VjdvT!tjZSkyZ6G8zZYdL?K9xpC%(jtuROfT>mc)o80`A(wtPgA`zej Y*btB%AD9^#8NV~JGTMJ)01{vg04UZ*SO5S3 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..564215adf2aa379bb7ed807ba676e99ae4ca9ab5 GIT binary patch literal 3896 zcmc&%T}&I<6~6OhGycIg332!{uny5B_4`DRS$Y_|A znOkU>qt+beWe$4REFX1|z#vYjQ&U)xB_pLOi48m30_m88|N0(VlF67zvf#EG&RQI_yJPLFE>&~>`Ix%uT_;`GQ{I@a`&j3&t#XJYb1HX~`Vf%wqCn-_*I zoFC~|XOy%m$@<9P1tpnM@W{sFI@YGKHlk4#9SvidSt5vHN=X@_nA^Wo{g^|b!JvDf zn?t3#0|oxQ;5tmuj^j}t`*;cre$3oMNeI1PGkF%CEIc{GF(oQ6;|v&0Fxh_OIK^># zp5MjC10VMaK9|Xxt{hy1>nQ4qgY7*sPNxznHLDZPxTF}8Zln^#gKs8qI*k>BxbM8y z=tts8q}z&gKRUJ&IcYTveYH+)@}uY>=Kp9Ytp;?^>Y>|V4Xp`Q{wF&C$Re$ocCSGP z*Ob$v7!*u z=(%_JlZv!2c^vSFhWsQf>~60LaVPxqOcH>BLc_;go;6&~UWfioR_wi;$@HVq_u#_u zCNHxz2jl?~WX>MBVZ_^`3X`9tTJLH!(>Yl%FTgpdD|atRTA~(xHs0l)!R5|v5cWmea z)k9^SJ?jPOw-0VegiEj`u^+u3NC3zu*iq0ZA20)DZ@|;`g}mou_AYxn$O8vZL9#8Y zmCCvfYmB` z!gkz{fJsVXQM1jX17=}^a7k=vQ12n)hGYj-0O2GVQlPGCMl@&x8u3Zf$<1BCO{MLM zMkih!W2LM+;pq{GA96_6UJ+9=32e<2P>guDq?MsExGV3F0Hm-ns8i%}9wMG8@SbRZ z`$%Bt+li2X#FbRFS;7HDr@>4yb6YFJXZ7a3ZKlq(4mu97&k}nT6BVid9NY<|PPp!# zdRJWupS8kgm%@DoU#Y$0(ct55tL|bU_(ki%-yHwl(NB+mcK#0+tbJDs-e=WKYbfmL zDfE}>n-=_5eP`inDe~GvhZX58#7ni2`5RVkN8t*UJ8^ene)fLLQn<5lsnpoA(%5S? z_Ab7?)OewA?OEho_q(jfsY3i&O~d?%Rnt)zC>=WaSSgBARz!j2{k4V5rC`l`-%o!~ zsy}#FC{@+XOFwHY)wgULx84z+1?v}1-=DBrd!7b+N};9&!3srJLWix;;YW?jq3@JJ zb@L~!(1DduyA^7`-|%_p#A+v;V6_|7wyz=9bCH1;`RnH|TmH5ce}@IXuJccZivEse z|6r-TXHl@)`yRJEK2mH4#pf?S^|!6M=(bg_ErIczV?jc4x;XR07YI!-eeAy=fu3WF z?_o^&x^90U-y6Bm&VbZU=X{&^ce>ezs9c2&gD|5ol@rQn2vdqx@u-i4 z9BIyXgJwgSeYESqQ^o}-69GjNhIWlE*|xX{BjUEFTAJdZCK_bFetn+AH46gYK|56 zA1``OEb~2d@zR}Z3zw|wL&d$FMQ?1G@1l#B?}!WEwf4n|)m=sJ;bs2F#v7|GzWQ@M MyxNBNI@^o?0m^jX?EnA( literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py index 8cb8b55..b4344fc 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -30,7 +30,156 @@ def check_login(self, username, password): if result: return {"ID": result[0], "Name": result[1], "RoleName": result[2]} return None + + def get_food_menu(self): + cursor = self.conn.cursor() + query = "SELECT ID, Name, Price, AvailabilityStatus FROM menuitem" + cursor.execute(query) + result = cursor.fetchall() + cursor.close() + menu = [] + for item in result: + menu.append({ + "ID": item[0], + "Name": item[1], + "Price": item[2], + "AvailabilityStatus": item[3] + }) + return menu + + def get_feedback_details(self): + cursor = self.conn.cursor() + query = """ + SELECT + f.ID, + u.Name AS UserName, + m.Name AS FoodName, + f.Rating, + f.Comment, + f.Date + FROM + feedback f + JOIN + user u ON f.UserID = u.ID + JOIN + menuitem m ON f.MenuItemID = m.ID + """ + cursor.execute(query) + result = cursor.fetchall() + cursor.close() + feedback_details = [] + for item in result: + feedback_details.append({ + "FeedbackID": item[0], + "UserName": item[1], + "FoodName": item[2], + "Rating": item[3], + "Comment": item[4], + "Date": item[5].strftime('%Y-%m-%d') # Convert date to string + }) + return feedback_details + + def add_menuItem(self, data): + cursor = self.conn.cursor() + query = """ + INSERT INTO menuitem (Name, Price, AvailabilityStatus, MealTypeID) + VALUES (%s, %s, %s, %s) + """ + print(f"inside db {data}") + values = (data["Name"], int(data["Price"]), data["AvailabilityStatus"], data["MealTypeID"]) + try: + cursor.execute(query, values) + self.conn.commit() + return "success" + except Exception as e: + print(f"An error occurred: {e}") + self.conn.rollback() + return "error" + + def delete_menuItem(self, menu_item_id): + cursor = self.conn.cursor() + delete_feedback_query = """ + DELETE FROM feedback + WHERE MenuItemID = %s + """ + delete_menu_item_query = """ + DELETE FROM menuitem + WHERE ID = %s + """ + try: + cursor.execute(delete_feedback_query, (menu_item_id,)) + cursor.execute(delete_menu_item_query, (menu_item_id,)) + self.conn.commit() + return "success" + except Exception as e: + print(f"An error occurred: {e}") + self.conn.rollback() + return "error" + finally: + cursor.close() + def update_menuItem(self, menu_item_id, new_price, new_availability): + cursor = self.conn.cursor() + update_query = """ + UPDATE menuitem + SET Price = %s, AvailabilityStatus = %s + WHERE ID = %s + """ + try: + cursor.execute(update_query, (new_price, new_availability, menu_item_id)) + self.conn.commit() + return "success" + except Exception as e: + print(f"An error occurred: {e}") + self.conn.rollback() + return "error" + finally: + cursor.close() + def close(self): if self.conn: self.conn.close() + + def calculate_average_ratings(self): + self.connect() + cursor = self.conn.cursor(dictionary=True) + query = """ + SELECT m.ID AS MenuItemID, m.Name AS MenuItem, AVG(f.Rating) AS AvgRating, f.Comment, m.MealTypeID + FROM feedback f + JOIN menuitem m ON f.MenuItemID = m.ID + GROUP BY f.MenuItemID, m.Name, f.Comment, m.MealTypeID; + """ + cursor.execute(query) + avg_ratings = cursor.fetchall() + cursor.close() + self.close() + return avg_ratings + + def add_feedback(self, user_id, menu_item_id, rating, comment, date): + self.connect() + cursor = self.conn.cursor() + query = """ + INSERT INTO feedback (UserID, MenuItemID, Rating, Comment, Date) + VALUES (%s, %s, %s, %s, %s) + """ + values = (user_id, menu_item_id, rating, comment, date) + try: + cursor.execute(query, values) + self.conn.commit() + cursor.close() + self.close() + return True + except Exception as e: + print(f"Error adding feedback: {e}") + self.conn.rollback() + cursor.close() + self.close() + return False + + def calculate_sentiment_score(self, comment): + positive_words = ["delicious", "fantastic", "excellent", "superb", "enjoyed"] + negative_words = ["bad", "poor", "disappointing", "awful", "not good"] + + positive_score = sum(comment.lower().count(word) for word in positive_words) + negative_score = sum(comment.lower().count(word) for word in negative_words) + return positive_score - negative_score diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py index 0b0343d..4a1430c 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/login_handler.py @@ -1,6 +1,23 @@ +import json + class LoginHandler: def __init__(self, db_handler): self.db_handler = db_handler - def login(self, username, password): - return self.db_handler.check_login(username, password) + def login(self, request, client_socket): + username = request["username"] + password = request["password"] + user = self.db_handler.check_login(username, password) + if user: + response = { + "status": "success", + "user": { + "ID": user["ID"], + "Name": user["Name"], + "RoleName": user["RoleName"] + } + } + else: + response = {"status": "failure", "message": "Invalid credentials"} + print(response) + client_socket.sendall(json.dumps(response).encode()) diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py b/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py new file mode 100644 index 0000000..0f60594 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py @@ -0,0 +1,74 @@ +from database_handler import DatabaseHandler + +class Recommendation: + def __init__(self, db_handler): + self.db_handler = db_handler + + def calculate_sentiment_score(self, comment): + positive_words = ["delicious", "fantastic", "excellent", "superb", "enjoyed"] + negative_words = ["bad", "poor", "disappointing", "awful", "not good"] + + positive_score = sum(comment.lower().count(word) for word in positive_words) + negative_score = sum(comment.lower().count(word) for word in negative_words) + return positive_score - negative_score + + def recommend_food_items(self): + avg_ratings = self.db_handler.calculate_average_ratings() + recommendations = {"Breakfast": [], "Lunch": [], "Dinner": []} + seen_items = {"Breakfast": set(), "Lunch": set(), "Dinner": set()} + + for item in avg_ratings: + menu_item_id = item["MenuItemID"] + menu_item_name = item["MenuItem"] + avg_rating = item["AvgRating"] + comment = item.get("Comment", "") # Fetching comment, if available + sentiment_score = self.calculate_sentiment_score(comment) + + combined_score = avg_rating + sentiment_score + + meal_type = item["MealTypeID"] + recommendation = {"MenuItemID": menu_item_id, "MenuItem": menu_item_name, "Score": combined_score} + + category = "" + if meal_type == 1: + category = "Breakfast" + elif meal_type == 2: + category = "Lunch" + elif meal_type == 3: + category = "Dinner" + + if menu_item_id not in seen_items[category]: + recommendations[category].append(recommendation) + seen_items[category].add(menu_item_id) + + # Sort recommendations by score in descending order and keep only top 3 recommendations + for category in recommendations: + recommendations[category].sort(key=lambda x: x["Score"], reverse=True) + recommendations[category] = recommendations[category][:3] + + # Extract menu item IDs and names from recommendations + for category in recommendations: + recommendations[category] = [{"ID": rec["MenuItemID"], "Name": rec["MenuItem"]} for rec in recommendations[category]] + + return recommendations + + +if __name__ == "__main__": + # Replace with your actual database connection details + db_handler = DatabaseHandler(host="localhost", user="root", password="12345678", database="cafeteria") + + # Connect to the database + db_handler.connect() + + # Create an instance of Recommendation + recommendation = Recommendation(db_handler) + + # Example: Get recommendations + recommendations = recommendation.recommend_food_items() + print("Recommendations:") + print(f"Breakfast: {recommendations['Breakfast']}") + print(f"Lunch: {recommendations['Lunch']}") + print(f"Dinner: {recommendations['Dinner']}") + + # Close the database connection + db_handler.close() diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/server.py b/Final Project/Cafeteria_Recommnedation_system/Server/server.py index 1546ab6..1af0126 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/server.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/server.py @@ -3,6 +3,7 @@ import json from database_handler import DatabaseHandler from login_handler import LoginHandler +from recomendation import Recommendation class Server: def __init__(self, host, port, db_host, db_user, db_password, db_name): @@ -10,10 +11,14 @@ def __init__(self, host, port, db_host, db_user, db_password, db_name): self.port = port self.db_handler = DatabaseHandler(db_host, db_user, db_password, db_name) self.login_handler = LoginHandler(self.db_handler) + self.recomendation_engine = Recommendation(self.db_handler) self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) def start_server(self): self.db_handler.connect() + if not self.db_handler.conn: + print("Failed to connect to the database. Exiting...") + return self.server_socket.bind((self.host, self.port)) self.server_socket.listen(5) print(f"Server started on {self.host}:{self.port}") @@ -26,31 +31,101 @@ def start_server(self): def handle_client(self, client_socket): try: data = client_socket.recv(1024).decode() + if not data: + raise ValueError("No data received") request = json.loads(data) - if request.get("endpoint") == "/login": - username = request["username"] - password = request["password"] - user = self.login_handler.login(username, password) - if user: - response = { - "status": "success", - "user": { - "ID": user["ID"], - "Name": user["Name"], - "RoleName": user["RoleName"] - } - } - else: - response = {"status": "failure", "message": "Invalid credentials"} - client_socket.sendall(json.dumps(response).encode()) + endpoint = request.get("endpoint") + if endpoint == "/login": + self.login_handler.login(request, client_socket) + elif endpoint == "/food_menu": + self.view_food_menu(client_socket, request) + elif endpoint == "/delete-menu-item": + self.delete_menu_item(client_socket, request) + elif endpoint == "/add-menu-item": + self.add_menu_item(client_socket, request) + elif endpoint == "/update-menu-item": + self.update_menu_item(client_socket, request) + elif endpoint == "/roll-out-menu": + self.roll_out_menu(client_socket, request) + elif endpoint == "/view-recomendation": + self.view_recomendation(client_socket, request) + elif endpoint == "/view-feedback": + self.view_feedback(client_socket, request) else: response = {"status": "failure", "message": "Invalid endpoint"} client_socket.sendall(json.dumps(response).encode()) + except ValueError as ve: + print(f"ValueError: {ve}") + response = {"status": "failure", "message": "Invalid request format or no data received"} + client_socket.sendall(json.dumps(response).encode()) except Exception as e: print(f"Error: {e}") + response = {"status": "failure", "message": "An error occurred"} + client_socket.sendall(json.dumps(response).encode()) finally: client_socket.close() + def roll_out_menu(self, client_socket, request): + pass + + def view_recomendation(self, client_socket, request): + role_name = request.get("RoleName") + if role_name == "Chef": + response = self.recomendation_engine.recommend_food_items() + response = {"status": "success", "recomendations": response} + client_socket.sendall(json.dumps(response).encode()) + + def view_feedback(self, client_socket, request): + role_name = request.get("role_name") + print("Inside chef",request) + feedback = self.db_handler.get_feedback_details() + print(feedback) + response = {"status": "success", "feedback": feedback} + client_socket.sendall(json.dumps(response).encode()) + + def update_menu_item(self, client_socket, request): + role_name = request.get("RoleName") + menuitemid = request.get("MenuItemID") + new_price = request.get("Price") + new_availability = request.get("AvailabilityStatus") + if role_name == "Admin": + response = self.db_handler.update_menuItem(menuitemid, new_price, new_availability) + if "success" in response: + response = {"status": "success", "message": "Item successfully Updated"} + else: + response = {"status": "failure", "message": "There is an error"} + client_socket.sendall(json.dumps(response).encode()) + + def add_menu_item(self, client_socket, request): + role_name = request.get("RoleName") + if role_name == "Admin": + response = self.db_handler.add_menuItem(request) + if "success" in response: + response = {"status": "success", "message": "Item successfully added"} + else: + response = {"status": "failure", "message": "There is an error"} + client_socket.sendall(json.dumps(response).encode()) + + def delete_menu_item(self, client_socket, request): + role_name = request.get("RoleName") + menuitemid = request.get("MenuItemID") + if role_name == "Admin": + response = self.db_handler.delete_menuItem(menuitemid) + if "success" in response: + response = {"status": "success", "message": "Item successfully Deleted"} + else: + response = {"status": "failure", "message": "There is an error"} + client_socket.sendall(json.dumps(response).encode()) + + def view_food_menu(self, client_socket, request): + role_name = request.get("role_name") + if role_name in ["Admin", "Chef","Employee"]: + menu = self.db_handler.get_food_menu() + response = {"status": "success", "menu": menu} + else: + response = {"status": "failure", "message": "Access denied"} + client_socket.sendall(json.dumps(response).encode()) + if __name__ == "__main__": server = Server('localhost', 12345, 'localhost', 'root', 'root', 'foodrecommendation') server.start_server() diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/utility/__init__.py b/Final Project/Cafeteria_Recommnedation_system/Server/utility/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/utility/__pycache__/__init__.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/utility/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e96f40f131129b57faf1fd926765b2e33c88b4d9 GIT binary patch literal 161 zcmX@j%ge<81pnkp(m?cM5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!a!9d?@kvcA%8O6T zONmd;Pf3k&%gjs62`I|XN=+__am`E5%u9_4PAw`+Es7~E$;`w_&&MdlBQZ%m7kdT9i z9{dk_t$2{qKgElol*nHF2c$U&J^9{j)|!Yy2lm@H^WJ=A=JB_7!&9z8VDOqFyD$8@uLd;^Cb!&~s$BZ5?^N2-QLcS+Us3_!~> z0dt-OnD6AAd{Wv9-8UkB75jl7cia)Vroq^RXLv=^^=OZ9oj~Z21G?$Zq~r#^kTH)m zjbkKMB!Y&@LrH`LZ@u2WvoMD2+$>%j{ZHiaA49?NZCirSV?J3`gk z=}BrSA#b#$8~dS*mfv;~#;~CYE4&I9fU!*-yb6g>{apZAc1{kX}6qlDv?p-Z4}G(uvuM zwnrW*h6|UlkjEiUJ?+kqiyY5thv#7%NM*$Vo9nZ=0ju;`Wq;-K`p5N88^`RvLNDB` zFCf;!wfL7XIgfbgyb;g;OxPlhvFQ`AI8$#a;qD}PPoVSzs-;KBR8B?DLSFbgf`c2p zp~6 zodW(3vfdJ$CsUlaLa!ZQT;%*+yB?$&g$5}b0qN8%zyZ+=+JA-3paIQ@W&n1{i9vIB zPx3VP0O8>fU@_f-)$rS=yRPF_>@dxA$~Mv?JW|+}s6N8){xB(}Kdp;&@q_^A4Zi>Z CSqYK= literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/socket_functions.py b/Final Project/Cafeteria_Recommnedation_system/Server/utility/socket_functions.py similarity index 52% rename from Final Project/Cafeteria_Recommnedation_system/Client/utility/socket_functions.py rename to Final Project/Cafeteria_Recommnedation_system/Server/utility/socket_functions.py index 03710f4..b7d6eab 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/utility/socket_functions.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/utility/socket_functions.py @@ -3,12 +3,10 @@ class SocketUtility: def __init__(self, client_socket): self.client_socket = client_socket - def connect_to_server(self, host, port): - self.client_socket.connect((host, port)) - def send_to_server(self, msg): - self.client_socket.sendall(msg) + def send_to_client(self, msg): + self.client_socket.sendall(msg.encode()) - def receive_msg_from_server(self): + def receive_msg_from_client(self): return self.client_socket.recv(1024).decode() def close_connection(self): From 0298571c3825824d80d71f4c8d80bd67b3a7195f Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Tue, 2 Jul 2024 13:22:56 +0530 Subject: [PATCH 07/24] Employee Can Give Feedback --- .../__pycache__/food_menu.cpython-312.pyc | Bin 6144 -> 6968 bytes .../Client/menuItems/food_menu.py | 23 ++++++++++++++++- .../__pycache__/employee.cpython-312.pyc | Bin 2067 -> 2125 bytes .../Client/userHandler/employee.py | 3 +-- .../database_handler.cpython-312.pyc | Bin 9555 -> 10869 bytes .../__pycache__/recomendation.cpython-312.pyc | Bin 3896 -> 3934 bytes .../Server/database_handler.py | 24 ++++++++++++++++++ .../Server/recomendation.py | 2 +- .../Server/server.py | 17 ++++++++++++- 9 files changed, 64 insertions(+), 5 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index d179b465a453c3c5e8badb98646e148029b97d06..9c2f8a2f7cb21cb501cb8cf358de464184f8f7ee 100644 GIT binary patch delta 1128 zcmaJ=U1-x#6wXbXq)YbGZC$g?t%fP|%3Q}v zg?kbmpaa>H%sBwwqQ`7M`piD%S?tM$pD%6bPQ{UF8xWJ^DDFqU;(52i%riDo70*?$ zSt;S@EsojJxi-10ZiQ92+sr(Ru2=6y4=TM2o(3#a%4XXr%B-@5tsYL{NoBJWP-*J_ z)sQeg=Nr-SHArbAWlEZmF*)7zZ;_X%JhWP2E&PP zyVM=tAHuz*6Nm84Lfyt}WoJUY0y}0PR4&NzS;sS?T}~Ql2t$m+lEsl>hbOzps>ra} zir>TxVsJcBBMHZ44LYo4%XX^GayTm$k3$Ow8b&z*L#)H7`sI}ExK!PCn3<#@+vs(b z801oTc1%^Aa%?0OQ}J|?v1ZY_!;x=~9ij^Fjs@Z{w&`%rKWZ2XaTNZ8Z^oXiTNoCp ze2ti^53kmAX1KiAlxyx;6%S_0^VR;GcyP7)P=+lLysO=j@x1pptOQXq-`Kp8Ty5N) z_itMnMcSGeSgUXOEby$C&$vH%DPKKW_l{@pbI)nU?8K|kEDu2+dczNZe&iK;zyLZb z>}Sj_Qd<%X(3SlvJajb?tyxE44}rY|_F)KNDSBCT14OfDydObFgm83mv>7I%zvQgh zLfCEsUFb@U#wKuRT|yInfA&YsO}ei*!Cf+;mT3RAnk$_}L}Tc6T_cF14|UVPLSz0M z5KxoYUDr#BhY3s&I7Q$rnid0rb{sBI1)63W3Z61%8Wj8<<}h9G)iS|CJGv$A8k{0( r@++8S7`}V@G($-x;edG_r{rg}d>B5t008Th@Xb9$gJ6LoSnT=<^%o`7 delta 547 zcmdmC)?mPQnwOW00SIItm!#zgPUMSXG@F=d&Qi&t$vJUVy>*1MRZM7cYEf}aK~Z8# zYHERAN=9ixVv(MwUx=r#Yly3Jj7xrbUQT{uN^wk(YhHS0UTO@4+FZeC&&+5t`6Z+3 z}rl)GM78y?dB{YH2c5}Dz8%7grplVH~B9P8oT)wG! zrJg0Jxt=aXwjiVIK!iO=1zV94NCk6dUI|eD646|?ARxauYjT~W*k)a^DNHtCgIK@@ z6}f}-34;ibW6;fF2b)#o0g^HV5e}38N=Pw!PL_~NV2qnwDS3gBYqFP=iMt6%(iKE_ zfe3#fv67*P8^q=W5iBr*8OSJB2NEp|pO~0fB|mX+vL-No660ibV)`UD`Mi{teK1HZ uTXBS_T)>f*^GB5+p)DwzQ`sH#Ey)blZDw$7*!^Fusbn|P3~ro p)z$%81#&>KB#`*P%*e=imqGC^gT@yYX+}53j*_noAi4rFj;{2G%qg~0}up0FG*Xqk#{bmb)>UZOlWaxQE^N`QDRDJYJpx#MrlD}k)Eet zh^Mb>h^upqOMZD?PJUuaaZHeFUV3I;Y7B&${FAYj=^NwZ2B!0jlP3o-D|$B7Fs5*3 zYcMbr@su!v>;ZukuGLUBBST&xPz5)J3LYdC2|yLRlV>nnb2|W8d|>gj` zqlq?Y(uYc?i4QdmjY%8ysiEoDlgdjQABwSQ>-HlxO`7=7#As?0`_lQ(9SX=i{C4I) z^Z%It*X*5x|MV8$Dk^ddY@Gf0{6L$3wz%qKl&vlax}c+!(1+MpOo?f+Peg(!ydvn* z1wnUQ6M;t%`lN9bao&e%cLdpru36Yhrf~u&%LC;nkNRel$K86-1);BGyf{)advkt9 zVSA(i0IVQ|3`{2j6~>d~KwJMItPw-i3|;Na=s34*X3J*2+@CbGl=>RU4B>>;->D5? z3zMW4@4<;oI&ENPP%>l0&2iJh>HcGwj9}8wh}vn*#PKuqN7Rg*)FD3huC;`^rC`@u zBG~9*Fpo$PmOkIwFQrcq^3YSx#tPuK zm8^-0p`~%|`T_c(b0aFI-#D9PkZ0;Nqxh&pKFWAc$S07`2db(V+?N06;ARTVcLPoY7J#QU^;}8y?1n9+A1_xpP4{Tu%dvpDEp;Y(XJ9q`b>?JyzZm z3!myDVS2Ifn6_FzX#{2vO(Gy)F)cCxv0q06?0W|=)=z7RvvD0;S~6vl7a7@<8Sr2; zH`17AkK78>EBxMbo{Ir5TPE_^#-@S*3~={Hl_EVSzf8{;1wEDvc3=!CR15m4uh_qL z$}x#_3H-yp4)|K&b3Pcw36yL3++=H+pL7g3rBNHr00WqY)3!brP5XQO;qKG%NzHwg(=1+h6^*cd6&(ck!iDLrbM+-;p0U3TVa~qHk>Q7w)}YdR+-Qn+GzvEx3p!h+n_C(?TcpKmN9T57vBk+Ki>(sOx0l5fde7@yI9PNK z&5$<6M`{2z0ldHf;;N;3$A>YC>n=ukQvO^d+f=ff?L?G(xPW&L@JbLc=mn$`AO^6H z!E%M}2Lf*x&NRUd$Plj zLh*B1OvZCp$)!*}gJ`#Jn>-7mKjNb2d||W;PDI3<^SJF5a9~Ai2jWD<+6+siGA6!4 z#p*C?n2pt&#Qo3?R>XjNum{Q*G))KF10z`%{J`IZKBd3= zbtbnnFfGokCznTbJx{xHCFX*c1)SW&1lw{>jqQR8#Vjk@SDCUR^6(6U9l614j<(lD z(H9Fw-A)m?=(V6)oM4Ac=me_z7Bl#6@DTc*ZmPdp3$7%?0OqPAKpCNb*SBw6g6Sy0 z7z6gtAeq_pazZBPq0kZb6kQH=pJ5Gp_9G6vBt34P zOD(_U8A8f{8Sc*|kn=EmD*B1CGo8`1DZHD!%{Cy9On6EkNC=@{gv#H9+J7B~CA9gW I0LU5t2k1L9lmGw# delta 1579 zcmZ{kO>Em#9KikT#Btjs-DuLLGz6zg(wIWWhgP6;?MfT10hYo@K^>7I*M8kH{EKHf2 z^s}v|O2*2SYWZZTTAHoR*>6~et?EwgRLMHiuy8GS(QP!1LUf$pK6JMaIw@oyzIze8 z_b_ZC5``cjT$#jRxsSdtq)`vOE=hSkW1J3Du#+47iBBK&OiqB&NYMRxI+)JpVOG3otI1Nt z_46%E+QhdE;~g}Kb&1x~N5wXnzUrI)GMz`qpp6P2)YgwZ0Sb4FJuI#z=UDBQRR_&!$o zdx4+2mx=!^YPWCEi@?2udd|~Bxx}d7WxU^IG7E0~TEI_brxxtR%2CN3L03B$a+5p~ z={E&AzQi;fxQ()Wk?n64UO->b@sZCSfFhAIfO7{_V8x{WjLc-d2GIi83<~lDr)BQm zpCwu=F0h2ZD3(!&ZWm`Fa3?BCFP&2Iug2k&pZYLJqkty?CBXB57Xf~E7D0Lqu*$H> z5wH~epF$u3AOmNbeycplA4l{zWq8F`f-Obxdd;?T-Wbzt%fgy#6LNU>99aWt&){uo k(zNxKfv3n@Yy(EZf#LX5KnVTJ_1_Au^61E49MC`YFBbJulK=n! diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc index 564215adf2aa379bb7ed807ba676e99ae4ca9ab5..14e17398bcdcdd0db1558a2449ebc0d32300d60b 100644 GIT binary patch delta 407 zcmXAkzfS@&6vyr1@#FLy9E>Cihb|I4O^68riGvt4hD0K6l8{TU=qcBlUNL%;tDCX^ zgPVh4A#rtcbG(6_iN!@H`>?|&@B97sz1I#iqm21!n#PPe-xJX-zL^tr((P8-4dQTW zIn=dk%q9QQR??ozx<{R!)#U7oV9~BQT_OngoX#o1%=amA9pN$B3GM?yd|A>)C?S_( z#l>j$f-yHV>JAl7AUvEK9L2uSYFh2*D+)nO!LlAWJc(Nh;qG&MLw5A#bPlXFg*=L4 zLEq2Ec?ztoe9~Xg^`I30(F$AOY%4^13o}l}2#kWlSc7U4DpL(d)$>`;o}cW>~9(X delta 341 zcmca7w?mHiG%qg~0}y;VUy>%Xk@r2Lbx^WZOlWaxQE^N`QDRDJYJpx#MrlD}k)Eet zh^Mb>h^upqOMZD?PJUuaaZHeFUV3I;Y7B&$?9FtKk#({bv(e@}=1Ytc5A}w zk_`e87L${B*UEu3SF!t)<|SuXDS!>A;&92#%S$Z+a&;!_@+lhzgH&?>iCgT+`9PWE nk|KYQ5ZDwqkT`2WQD$DrE!O0md|*&nOm5_pU`(Doi|+^keF|IA diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py index b4344fc..91491fe 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -1,4 +1,5 @@ import mysql.connector +from datetime import datetime class DatabaseHandler: def __init__(self, host, user, password, database): @@ -79,6 +80,29 @@ def get_feedback_details(self): }) return feedback_details + + def give_menuItemfeedback(self, data): + cursor = self.conn.cursor() + query = """ + INSERT INTO feedback (UserID, MenuItemID, Rating, Comment, Date) + VALUES (%s, %s, %s, %s, %s) + """ + print(f"inside db {data}") + current_date = datetime.now().date() # Get current date + values = (data["UserID"], data["MenuItemID"], float(data["Rating"]), data["Comment"], current_date) + + try: + cursor.execute(query, values) + self.conn.commit() + return "success" + except Exception as e: + print(f"An error occurred while inserting feedback: {e}") + self.conn.rollback() + return "error" + finally: + cursor.close() + + def add_menuItem(self, data): cursor = self.conn.cursor() query = """ diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py b/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py index 0f60594..fb08dde 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py @@ -5,7 +5,7 @@ def __init__(self, db_handler): self.db_handler = db_handler def calculate_sentiment_score(self, comment): - positive_words = ["delicious", "fantastic", "excellent", "superb", "enjoyed"] + positive_words = ["delicious", "fantastic", "excellent", "superb", "enjoyed", "good", "Fantastic!"] negative_words = ["bad", "poor", "disappointing", "awful", "not good"] positive_score = sum(comment.lower().count(word) for word in positive_words) diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/server.py b/Final Project/Cafeteria_Recommnedation_system/Server/server.py index 1af0126..36dc663 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/server.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/server.py @@ -51,6 +51,8 @@ def handle_client(self, client_socket): self.view_recomendation(client_socket, request) elif endpoint == "/view-feedback": self.view_feedback(client_socket, request) + elif endpoint == "/give-feedback": + self.give_feedback(client_socket, request) else: response = {"status": "failure", "message": "Invalid endpoint"} client_socket.sendall(json.dumps(response).encode()) @@ -77,12 +79,25 @@ def view_recomendation(self, client_socket, request): def view_feedback(self, client_socket, request): role_name = request.get("role_name") - print("Inside chef",request) feedback = self.db_handler.get_feedback_details() print(feedback) response = {"status": "success", "feedback": feedback} client_socket.sendall(json.dumps(response).encode()) + def give_feedback(self, client_socket, request): + role_name = request.get("RoleName") + if role_name == "Employee": + response = self.db_handler.give_menuItemfeedback(request) + if "success" in response: + response = {"status": "success", "message": "Successfully given feedback"} + else: + response = {"status": "failure", "message": "There is an error"} + else: + response = {"status": "failure", "message": "Invalid role for giving feedback"} + + client_socket.sendall(json.dumps(response).encode()) + + def update_menu_item(self, client_socket, request): role_name = request.get("RoleName") menuitemid = request.get("MenuItemID") From ecd4da3b6b53799b3c9b20651025297baaa2d074 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Tue, 2 Jul 2024 16:15:38 +0530 Subject: [PATCH 08/24] Chef can change the Availabilty of Menu Item --- .../__pycache__/food_menu.cpython-312.pyc | Bin 6968 -> 7754 bytes .../Client/menuItems/food_menu.py | 20 ++++++++ .../__pycache__/chef.cpython-312.pyc | Bin 2225 -> 2300 bytes .../Client/userHandler/chef.py | 4 +- .../database_handler.cpython-312.pyc | Bin 10869 -> 9643 bytes .../Server/database_handler.py | 47 +++++++----------- .../Server/server.py | 13 +++++ 7 files changed, 54 insertions(+), 30 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index 9c2f8a2f7cb21cb501cb8cf358de464184f8f7ee..bc0556454d54169e8c9eff1571040bd27004281c 100644 GIT binary patch delta 595 zcmdmCcFKnDG%qg~0}yy_ZBEk?pU4-*=rl3YmMev`g&~T&l1r0&`H~C5V_I8&r%PD8^I539=XjQaDyKLRgFpl?*AIHHEHpI#E&ooD8mbqK{g4$tR|mdQ7BMHm9TzkK}upts%~OgVrEWaQch+` zWlY(VKi ztkJlg9D~bmaD;bKoL2Qs^MJzCa8OSI$ zoV-a&i{q1oFsu4!EuqQxrKIeWK?>mNe{tC4=BJeAq}mmw0wq9kR4f7{J}@&fGTvt3 R{>~E4#Hjv>0Yrjz0RU!~g69AL delta 134 zcmX?Qv%`$^UT{)quZ7I6b500yukDF6Tf diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index 20eb126..c689ed1 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -133,3 +133,23 @@ def update_menu_item(self): else: print(response["message"]) + def update_availabilty(self): + self.view_menu() + item_id = int(input("Please enter food ID to Update : ")) + endpoint = "/update-availablity" + availability = input("Enter availability (Yes or No)") + if availability.upper() == "YES": + availability = 1 + elif availability.upper() == "NO": + availability = 0 + else: + print("Invalid Input") + return + data = {"RoleName": "Chef", "MenuItemID": item_id, "AvailabilityStatus": availability} + + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 5e773c09141a40d0c93a471d756f4aab39e7d3ad..99cf676b1e515415187d6c193938655a3c2a25d9 100644 GIT binary patch delta 329 zcmdle_(zcMG%qg~0}v$MXiodWx{+@NqkpEGRg6z+Vo{z#VqS`ZbAC!HgsThW>Vmm$ znR$sh3IRp=S*gh-G0ur;sU@jJnThd1smb}dxp}E6i6xo&dGW=S#U-h^lOHnHGUiN< zXS%?6cCrDpJ>%NR1amG7(p%offVl5P&Ok&UN=w$4_JlTl#3(%3k40v(2#czy2t*e$nI#UCm1UHioWr8UGJ&y&Z}SWmaYnXVEE$=Z znUk-vdNT4(R$#Lg7Ah?Ox-vCBu`Dq&Cow5Ar=)Un3|l(m@5x8l=7~&5o5FiTKx8`K rM84|+h8G14uL>AXR%BP6+|91S_;K*)hzdd*NiafKXw9?%189b+(5BU( zD_2TR+!>FnA zwvS_$+Pa(j*0OBZ$k_7IMWJAm?Q5TV9i&)kZk*!zK>|xbKZJx}l2=KYmWayxSeq_l zGa8FfjI0vFMPERlog$t&p)6Rr5`WDMqaHVOI@`h19&9a`Iyl`>fNc>@J6slZ8{W}W zGdR2>u7XA7%Hl0?fh=%~bb?zTvK78M7a`*ckUl88e8c^$TDE8n?9e2Jk92xY*MjIO zh|`D!Vt_$5Y50bA27%>T8{!;d5Wctu$O=5Mc%k2I7Jpbcrx(WExBXt0-iRloTs3M{ z+GzD)w<6J+Br0u{ZFh=4+K25U2vqZ|PEDPVFy`yjfZmcK_@)cCT6#@ImY%QRSoU@aV!Aj94+EX>Dsb%3|MdPD_9zpf zT|yWWAIF>V<3WG^hMLi{muItc`5`?!o4J{pp2=LDp3w`%804jJQ(fdK>zjXMtY=Mf z@866ae=)Kt54~?V4{w`#;GXY9TxKOJJ;@MP4OtbLR=c{D2(38;CC=3%B8${yiuZW4 zl7Ok;bFyA>hCcCR1HQLT(X{MMc)0*~boISDW2sALxd+pR8! xcq2mu5#`0uj>RShz!W>+SFx=TVQ2Vd>6^W-=4Y}AEeENX&!JEf*yfN%(Qiu`$$$U= delta 2189 zcma)7eN0nV6u3OpWq+D%pe~Xp`)Ao7`)eT(qhr~!b6Y_CN<7K?-Fxmm z=iGD8$9>~_9|WzpES3TUbo{H+-HqkvtOOrE_rbve*>VOQwhdYXw(s=~HoQ1tE;`0> zGN%9Wo9TC!s-`rSc@O9%j7*ymtO#sn9OqcZi;RcSz{YMNBSv61VQ?i)2nQS z$)ckr?o$X+iBFA0l7uL7qmMMhPQXOi5yZ=28-UJ7;|Ws1*zFA380-KD7>I?K2C21`#;ygTtZdc^xH{lqthznR!vb)UoEQiuN-7ctPIc4xs2NYn+C zM!lHgaxeY7s)iO-OD=9UNJ#9>z#yL0*2s2fV+8y;m z+R$5=v(Z@XYZ&C7O6h@&l(6M>5R&<{bP0XIEmz5sl@rz{t@sZi$hmY<8Wi&5s@#hm zLnjM-K=izAKP_>V(SL2$Y;ef6BbWTJEJx!#zHUX4yTXyRYmaPc!OM^ zAQws9nA8*!ipt~wEb0alPJmtA7*YHB6eyn-W^$!Qjw}@kENZNwn16X9R;F$Sw?fN4 z4SCzbiEvj~Q+9>pa!et$t9O57HYNa0p&66;ta-#dYNZ{;9@m@+Im#|Jjg?+=UH4BF zZyPquafOnHwwJ8Qn(b%XN7_d_X3Rxr_l)crZJ%+t9?ja^^GK9Dv*zL{=WAmvW1FVz zb$8A6OlbGW?tA9SX>;XWvv1}Z?OBKWpSeO%UDR0b{?KA><dFAv|JMz z;VC%*-bbk1t@1M%M{w5MAX{n6T&b3a5)P zHKh<;jHtGwe`A?Qi)6=AfU0J`h2HyrL-tD^(b*=pr14kH9cKNk#H=MjD-_Q zNQ2u(S)qosY(ynWZBtBzU9GuxMg14Bx=;=9=uh%LJTC&E1VoMH&X@00LO&wPfG&YtKTgTl-ZlnuwlILM-f>ZjCEF(D9G?m3@sJvT8raYX&glJIY!< z-|(JiQ;~&SFx{cROQns8-U6%I768bP?m0MY)jb`<);~PnJKo@pBX_;QJD%XMb@nNK z##ZsAb=p=tWvV4bpxhBC(oLZd{m|d&-vc~(o54W_hZ*F4Iw3Zb8D!~weZv-u#d-e^N3+i@qglFEkXbQ diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py index 91491fe..388adea 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -109,7 +109,6 @@ def add_menuItem(self, data): INSERT INTO menuitem (Name, Price, AvailabilityStatus, MealTypeID) VALUES (%s, %s, %s, %s) """ - print(f"inside db {data}") values = (data["Name"], int(data["Price"]), data["AvailabilityStatus"], data["MealTypeID"]) try: cursor.execute(query, values) @@ -160,6 +159,25 @@ def update_menuItem(self, menu_item_id, new_price, new_availability): finally: cursor.close() + def update_menuItemavailabilty(self, menu_item_id, new_availability): + cursor = self.conn.cursor() + update_query = """ + UPDATE menuitem + SET AvailabilityStatus = %s + WHERE ID = %s + """ + try: + cursor.execute(update_query, (new_availability, menu_item_id)) + self.conn.commit() + return "success" + except Exception as e: + print(f"An error occurred: {e}") + self.conn.rollback() + return "error" + finally: + cursor.close() + + def close(self): if self.conn: self.conn.close() @@ -179,31 +197,4 @@ def calculate_average_ratings(self): self.close() return avg_ratings - def add_feedback(self, user_id, menu_item_id, rating, comment, date): - self.connect() - cursor = self.conn.cursor() - query = """ - INSERT INTO feedback (UserID, MenuItemID, Rating, Comment, Date) - VALUES (%s, %s, %s, %s, %s) - """ - values = (user_id, menu_item_id, rating, comment, date) - try: - cursor.execute(query, values) - self.conn.commit() - cursor.close() - self.close() - return True - except Exception as e: - print(f"Error adding feedback: {e}") - self.conn.rollback() - cursor.close() - self.close() - return False - - def calculate_sentiment_score(self, comment): - positive_words = ["delicious", "fantastic", "excellent", "superb", "enjoyed"] - negative_words = ["bad", "poor", "disappointing", "awful", "not good"] - positive_score = sum(comment.lower().count(word) for word in positive_words) - negative_score = sum(comment.lower().count(word) for word in negative_words) - return positive_score - negative_score diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/server.py b/Final Project/Cafeteria_Recommnedation_system/Server/server.py index 36dc663..4a8ba5c 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/server.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/server.py @@ -53,6 +53,8 @@ def handle_client(self, client_socket): self.view_feedback(client_socket, request) elif endpoint == "/give-feedback": self.give_feedback(client_socket, request) + elif endpoint == "/update-availablity": + self.update_availabilty(client_socket, request) else: response = {"status": "failure", "message": "Invalid endpoint"} client_socket.sendall(json.dumps(response).encode()) @@ -97,6 +99,17 @@ def give_feedback(self, client_socket, request): client_socket.sendall(json.dumps(response).encode()) + def update_availabilty(self, client_socket, request): + role_name = request.get("RoleName") + menuitemid = request.get("MenuItemID") + new_availability = request.get("AvailabilityStatus") + if role_name == "Chef": + response = self.db_handler.update_menuItemavailabilty(menuitemid, new_availability) + if "success" in response: + response = {"status": "success", "message": "Item successfully Updated"} + else: + response = {"status": "failure", "message": "There is an error"} + client_socket.sendall(json.dumps(response).encode()) def update_menu_item(self, client_socket, request): role_name = request.get("RoleName") From ef1b04ade054dcc7f1172a5b1bb8ad35a3b889e7 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Wed, 3 Jul 2024 11:38:50 +0530 Subject: [PATCH 09/24] Changes in Feedback Functionality --- .../__pycache__/food_menu.cpython-312.pyc | Bin 7754 -> 7732 bytes .../Client/menuItems/food_menu.py | 6 +++--- .../__pycache__/chef.cpython-312.pyc | Bin 2300 -> 2265 bytes .../__pycache__/employee.cpython-312.pyc | Bin 2125 -> 2158 bytes .../Client/userHandler/admin.py | 2 +- .../Client/userHandler/chef.py | 3 +-- .../Client/userHandler/employee.py | 2 +- 7 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index bc0556454d54169e8c9eff1571040bd27004281c..9aa7eb0b971ced6582463a3143610256dad35f3c 100644 GIT binary patch delta 1409 zcmaJ>O-NKx6n=N!&&+$yr0M+V=!~O=`ZUrkZDX61C^7{rte~c8=1q;xA9tRFGNM?J z3xnh?YSGe77%s9+(86v1L@ngeA`pre5!fQ4P3PR1(Hf)!e%^P^x##CQ=gy1%C;hIM zE|(^Ny#0DB-n`^m^-B0v6dU{(;qS+RrFTu9yqFilsNymu=ww(Imwwf^TK37DLBold zE?H8}NXDrGF4T_T0LWp?5bGqYp%zYa!bVHqg7m==+Hlt{NQ>%*FSsDxajv~5tAwa* zUOY-Pwk|fqc~e{`&b4J}gv{=NtCr(9(Z7h-pwCzZ5r&*wsjMLYE4K1~4A4y8%wROjT3_5gHLZA;czt zoD2{`p&GlbbPzXttbDF_f;LJ3N`k>Sdv3N_H8duSZ*y1j5CjuramkaF;$;(wE9h(` zU0#gIG39|gBj<&2M zSaR4QXOMH~(>f~9A-4!HC$KTCRr%!g-%BpBn_3v=zp1^l1-rpGZPPSb2?tt*fa9mt z2sP}r>-!m;98XOT!^x6!*<`}hmGV)B(CCiCCc(~z;~5&JnPf7YftL7uad3s|sJ2#F z`IJBj&#T@LQpfIB_l@v`Zj7OwHX_NhQ(5EWAjR^i7vUg655ge;*rY-+li936%PDeD zl?7_{2g>-t2^aanC5zX5BTlyHty@dEedGjB)rASlQYo|rwY>- z8I}BDh2ZqhLO@Bwb-#-ZNBwun1gD`d;-kdN86+|_d1RtNhS dsBPw6_=Bh0ENMKKNmKlwQG{XyZ?Id!;~#6b2Fd^c delta 1343 zcmah}O=uHA6wYk+Kc=?HCMJ#1wTf+G(Q38+Pz!4PDbiL%FJ5ZsZXudKW;aSpibXy2 zBK{1b2QPvMQs^c2pdfe@|F9@h7txD&(u46J;>Gu}O{=ls9KL-s^JdL_@kIjEg1DDUsb?5oAv_jlFAX zjLA{(HI&nBkmGXOH-FSqk_?q8p;$Y7(W7<~@qjSCfiZ1=4(iuO^F^v32Z{8)-d#HT zCZ8AAgEwtuqe@$+=m_atp=dkabk25!kxV{iFA_zOw}f0}%aMw3$xzy0uM|E0H+2@$ zS!K;7Zkd`4qla|^V8Zi0u;Nu@A#@;YM%V%XPsNR0EEG(-1T#zuw*QBXBf+mw zXOGrFhO1#VE)hngEx5WB0Rz@Ya$l??rEN0{8q_`Azh3QZ=nhofqeaV?!vY6YUyrOk zw-^{pU#il3Qhf@C(X*~|B$xc7xP=NkO3pkxRG{f$ldi$Vg?6&A-CZqo3eCJD`fEO| z{^lzv#)nvJa51eVxTh!JhML?95$nVJDLFf|5~yZf@eMxwiMa(OSth=25Zi_-2z(8& zTP;-jqNl=fLbM_)!bwsI%feo+q6LN4N_$*bSLs13sRBg6`ko93t<=Xp#$%#;=e1QG HJX*g2h28|l diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index c689ed1..a4894c0 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -1,9 +1,10 @@ import json class FoodMenu: - def __init__(self, server_communicator, role): + def __init__(self, server_communicator, role, user_id): self.server_communicator = server_communicator self.role = role + self.user_id = user_id def view_menu(self): endpoint = "/food_menu" @@ -27,14 +28,13 @@ def view_feedback(self): print(f"{item['FoodName']:<35} {item['UserName']:<25} {item['Rating']:<10} {item['Comment']:<70} {item['Date']:<20}") def give_feedback(self): - user_id = input("Enter your User ID: ") menu_item_id = input("Enter the Menu Item ID: ") rating = input("Enter your Rating (e.g., 4.5): ") comment = input("Enter your Comment: ") endpoint = "/give-feedback" data = { - "UserID": int(user_id), + "UserID": self.user_id, "MenuItemID": int(menu_item_id), "Rating": float(rating), "Comment": comment, diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 99cf676b1e515415187d6c193938655a3c2a25d9..6f1521acc6ee0e01a27ec51fbbfde4aabdda94a7 100644 GIT binary patch delta 194 zcmew(cvFz~G%qg~0}!mZ-JEuHBX24bW7y3Mg*KmK5oKh%#gdVknYsBfDr@J@jDG%qg~0}w2E(UMj;k@pm1*~A;ZhBXXX93W9tu$mdduVIL1g~?PhXfpa~ zvQ2hil$B=6Ou5CGmY<&zpPQOjs>ybXr8qSwt%w__c5*S}Ax4AAW=v|F2UL!$A5_0A f>9skYshydTXYzAaA4cBICTu;7jNX$EviAT09|t7l delta 143 zcmaDSa8`i#G%qg~0}z-^ZBEOW$a{)0Vd4#6ztv12F$RVjhIkeTi-Dn%L6gx>ll2yB zacMzn(JhYn_{_Y_lKA){kcwL@Mfo|Yw>Z=C^Hbt;Q}aqS*>15Er{<*HV#-XJ+{bu` nQEPG_lN$47Nyp6%Ozq5!+><%jd>DB)hqCoBGCECu#NGn{CEh8A diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py index e81be28..4b81574 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py @@ -4,7 +4,7 @@ class Admin(User): def __init__(self, id, name, role, server_communicator): super().__init__(id, name, role, server_communicator) - self.food_menu = FoodMenu(server_communicator, self.role) + self.food_menu = FoodMenu(server_communicator, self.role, self.id) def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py index b1e510a..5535e62 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py @@ -4,7 +4,7 @@ class Chef(User): def __init__(self, id, name, role, server_communicator): super().__init__(id, name, role, server_communicator) - self.food_menu = FoodMenu(server_communicator, self.role) + self.food_menu = FoodMenu(server_communicator, self.role, self.id) def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") @@ -22,7 +22,6 @@ def user_menu(self): print("Generating monthly report...") # Implement logic for generating monthly report elif choice == 5: - print("hiii") self.food_menu.update_availabilty() elif choice == 6: self.food_menu.view_feedback() diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py index 2ab8790..d8c0ccb 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py @@ -4,7 +4,7 @@ class Employee(User): def __init__(self, id, name, role, server_communicator): super().__init__(id, name, role, server_communicator) - self.food_menu = FoodMenu(server_communicator, self.role) + self.food_menu = FoodMenu(server_communicator, self.role, self.id) def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") From 711c6c80952b59129f7fe1f05822f93757d91e9a Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Wed, 3 Jul 2024 16:28:25 +0530 Subject: [PATCH 10/24] Rollout Menu and Employee Vote it out --- .../__pycache__/food_menu.cpython-312.pyc | Bin 7732 -> 9554 bytes .../Client/menuItems/food_menu.py | 70 ++++++++++++----- .../__pycache__/admin.cpython-312.pyc | Bin 1977 -> 2058 bytes .../__pycache__/chef.cpython-312.pyc | Bin 2265 -> 2184 bytes .../__pycache__/employee.cpython-312.pyc | Bin 2158 -> 2176 bytes .../Client/userHandler/admin.py | 2 +- .../Client/userHandler/chef.py | 9 +-- .../Client/userHandler/employee.py | 3 +- .../database_handler.cpython-312.pyc | Bin 9643 -> 12837 bytes .../__pycache__/recomendation.cpython-312.pyc | Bin 3934 -> 3330 bytes .../Server/database_handler.py | 68 +++++++++++++++-- .../Server/recomendation.py | 20 ----- .../Server/server.py | 72 +++++++++++++++++- 13 files changed, 186 insertions(+), 58 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index 9aa7eb0b971ced6582463a3143610256dad35f3c..cfb7d8a12502a0eec75418f883983085ab214191 100644 GIT binary patch delta 2258 zcmaJ?UrbY17(eH>x4r$}LMbiuAA-=U1q4y1VJ?80A%9d<6cMp<3sj+Xw}nYp);(-V zv#<1-Zkq5d~tS5SX#dci-ti;qbCLMy|E?${ow8l5ee3Q&KZsMEY z!ner$Jj!pfP<}#r0`d7B@%-wsQ1HV_G1wm&35JD0EEEZgyMPcc);5X3z~zBJH0JH3 z<~4hi%ovLB9rA;rxNy<9!8IzrOMShBGrGI?d*e23+i19dXmbGZ0A<+^g=0a{8ygCG zTMl{$BBEC&gIl5YU??00+op}h_o$zPB#njShH;?IG8l~YZ8$)@=x`(=vV_TFQuUE6-@3pb z&+x~y{0ZuGCc~9KF_lVOsi=no^{0Cv@Nx_ATu*`}Y`qBhIzAx~Qe~sn7c6f>0biX9IgT-PXMhNaJbDGvH&_`M3xtLP7l%W!aj_dL z;#msxKExgh425&#S@8}-FHCvW$`_m>WzIAB3o_ySkw{ttJrnbks!(<~gs2V&QLhc5 z2_{Abk_YI*+(d%nmg4nIgGP!3PB65>ChbZjC?`M*Sv{6`*q!7n&YV=qs;O61qt_>o zgi7GHsP?~BUeh7co#K`)g%oF?iqzF(kyt1^xKYpcRYBQB3oZS=6;59$795F+br5cY z#&AJu`GOW%AO@q0nvq~&xGy$-B`DSdnf$HUmZX+GsNX(l5uIQ<^!Jr*^p)F)CDabLV#K{6f9?(gd zyEGMG$bD7eAVr0xNl^J1Lg&CT!A_`RYkWbOU_onkU2BZqu&M<0O{KsI8bK>Rb%Oq; z@)r9#FJK21L@t4->UFP#T3F2m>H}{EM-q;+5&~Xza-wVsG+C-dlbuR5j(B57+^{Nf zr7T~Z(Q0L}Utw+Byrp?oLvXQxf`vjJg?xZTwu?$Dnh{E(MLlhvEszZzfsr7T{hJj} zx$;gtw^B838bfXuUK+^K4;45V5kv8yu$oZ=ltD{bgs(?Y4#2xQM5>o40IYTG^3kd- zNtvd8j{qQX^0$HTCJXHxN$BCJp{cQX&Yg3X&2(j)eu;BD@zyMO>oeZ^tQS&BsR`hW z-kEBd8eP&`rkbY4r!Gq+HBw&fynZ)bIX6=(S<7bvv#QzXOd?&AK7GG4-6rKV&g+|U zcGoh(h5(*YE}09at<%F9$IjVi$-XO%(`D(}k2AH0A4H{^)`v9@PfDHLKlMsIy;9qG z$=3I)`N9hYb$y|xN01wR2X7(`u6<>48$Cq7`~-zA3VjqVQW&Hlkk4Ii+(_=YoIam} zEnD8pu@%eKe1IKV0J}WPgPG63R=jlU*Z?NKyX=i0P;dILB46z*u3;o1j1C76h*4OB cnm|!#Vd%L6WBeP^{iD3f-~e7m@exBjMGAiY7dQqzVN@Wu;rFLThFVhK9ro zCPX-hlMwwI2oh6|Ui4~=)M7BzqZbnoS`S7~&TktdAe-!We~-`ayOYe!yWZy=!fT%A zbo6=qWhv3%TocAnWG#8#u)s-{XRpq2Xr27xrqCjhEe`s&iOkgh{2L`jR|!I&!@GEOTav=5!P1?$E7Mn&o*p zIV0bkNoE%CFbu^&;MCy}5C&wF%zJ|T7!4)UU+YcJh-sNt)Ge?kyxT%T-gW(eWF@V> z*4hZn4T4+-83(yR)_vZ4r)apOD=~WG(Gq7iPN0&5HAa|Hjos)k1wBSzDO?Q^N972O zegtU)Tfx9UMPiDETPi(rkl;xWtq1q*H`_6rj?c{~VXV*;E|OY9<(nQM^igN|X^1gA M@|Scm29+)U00MjPj{pDw diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index a4894c0..0f9dbb0 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -46,38 +46,43 @@ def give_feedback(self): print(response["message"]) else: print(response["message"]) - - def roll_out_menu(self): + def get_recomendation(self): endpoint = "/view-recomendation" data = {"RoleName": self.role} response = self.server_communicator.send_request(endpoint, data) - - print(response) - print("\n\n") + print("\nBreakfast Recommendations\n") print(f"{'ID':<5} {'Name':<35}") - - food_id_for_roll_out = {"Breakfast": [], "Lunch": [], "Dinner": []} - print("BreakFast Recomendations\n") + food_id_for_roll_out = {"Breakfast": [], "Lunch": [], "Dinner": []} for item in response['recomendations']['Breakfast']: print(f"{item['ID']:<5} {item['Name']:<35}") - - food_id_for_roll_out["Breakfast"] = input("Enter the Two ID for breakfast : ").split() - - print("Lunch Recomendations\n") + + food_id_for_roll_out["Breakfast"] = input("Enter the Two ID for breakfast: ").split() + + print("\nLunch Recommendations") for item in response['recomendations']['Lunch']: print(f"{item['ID']:<5} {item['Name']:<35}") - - food_id_for_roll_out["Lunch"] = input("Enter the ID for Lunch : ").split() - print("Dinner Recomendations\n") + food_id_for_roll_out["Lunch"] = input("Enter the ID for Lunch: ").split() + + print("\nDinner Recommendations") for item in response['recomendations']['Dinner']: print(f"{item['ID']:<5} {item['Name']:<35}") - - food_id_for_roll_out["Dinner"] = input("Enter the ID for Dinner : ").split() - print(food_id_for_roll_out) + food_id_for_roll_out["Dinner"] = input("Enter the ID for Dinner: ").split() + + return food_id_for_roll_out + + def roll_out_menu(self): + food_id_for_roll_out = self.get_recomendation() + endpoint = "/roll-out" + data = {"data": food_id_for_roll_out} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) def add_food_item(self): food_name = input("Enter the food item name : ") @@ -153,3 +158,32 @@ def update_availabilty(self): else: print(response["message"]) + def vote_for_menu(self): + self.view_voting_items() + votes = {} + for meal_type in ["Breakfast", "Lunch", "Dinner"]: + menu_item_id = input(f"Enter the ID for {meal_type}: ") + votes[meal_type] = menu_item_id + + endpoint = "/voting" + data = {"data": votes} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def view_voting_items(self): + endpoint = "/voting-items" + data = {} + response = self.server_communicator.send_request(endpoint, data) + print(response,"\n\n") + categorized_items = response['data'] + + for meal_type, items in categorized_items.items(): + print(f"\n{meal_type} Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35} {'Votes':<5}") + for item in items: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} {item['Votes']:<5}") + + diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc index afa1e6a2bd9487425ede45b2448e86b0c738b38f..bb58b6a051ff0ed23127681243cd6e047e9d1c63 100644 GIT binary patch delta 395 zcmdnV-zC6%nwOW00SID0wWL)|#lw=ceYBYO>v8DNfBvE8+&Kom{|Z?w{pm72}hdSd^!bn3tm9 zoS%{k;pzgpx?rwbW?o{BLO@Y|R%&udjB{dIYDsEQW@3C$YI1&VZeD6iVo7FxUVL$7 zaY<_Knbfons2o>6sD4?}tAnMN?=#44$&4@;0%>+22D$yS0Mq1Trt^#o zCL1%`Gd4^v29gPrH#6IFJJc|yaAj*SFccX~{>$v8S0V}1z8cD4WXR(#fg75_vl_}~ zWaxP?Ig#Z$BkyEORyjtV$q}p(T(?+KD>6$onTmKPZ(+4yJU96*>ps>y0wPn{Ca+_& XXH=Q|j?IqId$KNjBBRdaes(PYzCUC8 delta 337 zcmeAY*vZd(nwOW00SG4EEJ-Vv$a|bIVd7O^ztv12F$RVjhIkeTi-Dn%L6gx>ll2yB zacMzn(JhYn_{_Y_lKA){kcwL@Mfo|Yw>Z=C^Hbt;Q}aqS*>15Er{<*HV#-XJ+|6ii z9p-Em6Iz^FR2)-Kl$es5TA-JbQCg5#r03}u;_2%e;_4jZl3$*elb@JU924Z4m!6rI z8Uvvw3o@B8YEAZFQe(a>={UKZNuKEs&S17@EStOnNQO;*!EDcMR>PRW zm94?RP^325h{a2)lA(kV=7SWT)lfDgL(jFzt5~ip@Z4f8D9X$$DdGbvDguSXEoLD1 z7Hei+L1{@5_vD4F5iFWaMLd(4*(?~(OtxX$$9zLTbn<^Tdq(BS_Uv|yPLu1{6B)H9 IKVa7a08v$AH2?qr diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 6f1521acc6ee0e01a27ec51fbbfde4aabdda94a7..18cdb8d8a97de32bf5e0bb143d9f3229c5631905 100644 GIT binary patch delta 385 zcmca9*dfS!nwOW00SM-QY)R9f$a{>jY~mGP!y1Mx4v;7+Sj`OK*D%Dh!elBLG#ULg z*(TdC%1Se3rrhF8%g;}V&rQuM)nvQHQkTcdJ2{_m7o)*sEhaV111iVW52|05 z^y*;g<@*dWCz%mu8jxlOVvs$bjV2c}U0~fcqhlP#H;YFhKevU^nBFh_p9RM3Qx^R&d*I%_{FGE z#iXfNRXh1Hi_2suRz)FGJ%zB$)N%#4)YO!u#N=!)v&p5b-s~?yK7GkH`4wv-BhO?X zwgg7r$!pon8J|pk%BII2!SscJfj4rp6nog@2KI2K59*U|vYRlfPUhpVWA$eI#vwX6 ckRz5+ck+4;NkJ(_H^vT=uM8l%NC;>w0DZArj{pDw delta 472 zcmeAWyeY_gnwOW00SH#yZce*8k@py5!o(}Seyf>4Vhjv54Dl=w76U^igC?V&ChINM z;?jcDqFWsC@tJvxBYfa%^4P`Sj?_7nN|CPF7-77BbUQ2+K?@S8z*BO-V{j&gL?o9M0;kRV4$}mYJ8XkPFpV1lFjh zr}vT-=+BpIAcB4JO4dY1?#bM235-0GbJ)xozf4}jrpI2w^o4csesLt+v~ETi7!I1WicSw=U;4wJ78Ai78hXet08YkRu@ diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc index 49aaa2ee17412f6ccfd1327ef01925ce0cf4cfc6..a8a6ab401d7ca6ef5b69f2cb1b8deef32dbb4ae3 100644 GIT binary patch delta 251 zcmaDS&>+ZrnwOW00SHdNZ%Gs1$UBLN(P;7lrVET4Cl@j+vM#7$OyQioli8ZJ0m$N- z{FB+5F=6snW<^Hf$+;{tR(TFUVV-Oa28JSo5=M|YAdtel8p>v5sA0$wfruiLS>izL zvW$|GA2JJ1p2xy7*^7mnrRSq2|Ky!4`zOz0^<(6n{E}6lqb$E9H9jrBXtE$%J>!$f z6WK~8i?ZuY)?s&KRG*y3Zo;TKc`>^aqv+&k?6KOqKpQ~z7E1z&56p~=jCUCn?=on7 TVUc2VW9%sT$^fE^gn+UDcLO{Y delta 265 zcmZn=d?&zrnwOW00SK17Xh|#F$UBLNQDpK0rVEUVCKoa*s!yz8OySJdU|=ZXDPaUD z1A!E-)lfDgLtX<=1^49X%+{<4Ko-yB>&(`w4nP(!SeF5kEVuM8l%NC+qk0OHI&umAu6 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py index 4b81574..d680937 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py @@ -22,7 +22,7 @@ def user_menu(self): elif(choice == 5): print("\nEXITING...Bye") self.server_communicator.close_connection() - break + exit() else: print("Invalid choice. Please enter a valid option.") diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py index 5535e62..be4f0cd 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py @@ -9,7 +9,7 @@ def __init__(self, id, name, role, server_communicator): def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") while True: - print("\n1. View Menu Item\n2. Roll Out Tomorrow's Menu\n3. Finalized Menu\n4. Generate Monthly Report\n5. Update Availability of Menu Item\n6. View Feedback\n7. Exit") + print("\n1. View Menu Item\n2. Roll Out Tomorrow's Menu\n3. Finalized Menu\n4. Update Availability of Menu Item\n5. View Feedback\n6. Exit") choice = int(input("Enter a choice : ")) if(choice == 1): self.food_menu.view_menu() @@ -19,13 +19,10 @@ def user_menu(self): print("Displaying finalized menu...") # Implement logic for displaying finalized menu elif choice == 4: - print("Generating monthly report...") - # Implement logic for generating monthly report - elif choice == 5: self.food_menu.update_availabilty() - elif choice == 6: + elif choice == 5: self.food_menu.view_feedback() - elif choice == 7: + elif choice == 6: print("\nEXITING...Bye") self.server_communicator.close_connection() exit() diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py index d8c0ccb..7cda904 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py @@ -17,8 +17,7 @@ def user_menu(self): print("View Notification") # Implement logic for viewing notifications elif choice == 3: - print("Food Recommendation for Tomorrow") - # Implement logic for providing food recommendations for tomorrow + self.food_menu.vote_for_menu() elif choice == 4: self.food_menu.give_feedback() elif choice == 5: diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc index 349c935608f186d5254aa117ffb870f0ee1cb821..90312fe5cfd0a7ab805bdee08d6de6ecc3348aa7 100644 GIT binary patch delta 3765 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 W6h9U!J`ud16^zNEds#rq9sdt^7n_^_ delta 1509 zcmZ`(O>7%g5Z+yTH|u{V@y1!lZf#6LRtY~*S|BL2YMNF=C22=8y|QQ0O6)1IR)GBo0VOmEaJ1fJQ408~}khv~mOoPz5vVG)+)=D}DRk z%)I&LXJ@Y%SC56i35EO|uIcYzng6x75oY{sk#gGMQx~eUW&SMvT<^~{krAjl;I6dRQ#`b-|(?0 z-foVH@9}&PZb*ash{KUESGufgeG1ICQZA(H~+FdLRqaFA2G0;0o ze6+dN@hl&Yqn7m|{N_Qxd{q)8VBD9PrDPbnWGMtko;U6M8NFC!d+8|Y)v8%GG|A1j zZI>bAdr0dondO?}E!bvhX9OSnMx-oSST92+5r=<#6%3`~uM2^#P*^|sLQm^E>DeIp zCT6A)fo$1q-Y%5P{|O*EZ<@v_J^$jIVcL43Xt5z;-BFD%LI?R#xE=ZsL--)PCP<^? zeji-uoQ!Ucc#d9!L4DrHAzm12Sd-mP%5~y+ zFbua9Y=W*GCOAMaNtT;^I6?xqX&LxiQIS*Wc~ClwQtNH3c%o_a+!S)-Wc4Hgv8--m z*+$?Ndsh}GNbQ}Y?#>kqmW0ddVPyJ6-OrzICKG=M@tp+hII>V#U@$enCn1;0`e`tn zNUdtw?~4HGW!Dps^}Bnc#4BByAuNIgNu9P@ME~|0?#et!#Yr_3GI5jsVn4d+Z2=V zyfTSRJ*8Xb6MESwn(Tpmv0|B@kSSGtiCYgu>SLG2)`QXd)bdn4x19Sfn7ZZRf{HuB zd2)DXQ9vFMVdE#5$$sVG&IVv1mTY$3tMNx;D8JkNc3-xJ04J4x0C&gE3Ft4Ko@2UQ zD4(`0FY0LKapaf!r=-vDXgv>W{l|OcVBNp$e?7P!Nqj3O+>mCp2&_HSuSCe9%bKO# zFu|kX8%aIvmg5CHuX65<_Fs(xX9UD%9YlDQYYC#Lw!)I=Z$)8YMDq*co((x9_OU2@ sI+E17=nkdrUStOC=+EYQ{7W7$Rg7BEJizAR_J|sp@bG;tj?gvw7c$68JOBUy diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc index 14e17398bcdcdd0db1558a2449ebc0d32300d60b..ce09eb1424560dc012e4ea98513e4bacc96f488b 100644 GIT binary patch delta 131 zcmca7*CeHJnwOW00SLY*w5FwSGB7*_abSQ2%J{6pFi}H=rIJOHb+ZR!D383KCi5+U zl*E$6q{QOX_>9E7l$_L}B4(iSB32+Vxt>o-B?8D`1ma>LAn}2jk&*E(gU)vrBS!g8 L3_zlY2Pg~x(X$#Z delta 671 zcmZ{h&ubGw6vtzWwC!5-6YAz z2^`ptZ^v`zU#~n2cRit6Z7G^wt$Je9P?hF}VOky}hGBWaO!3<6-2B3IPgIo}wlL9@ z9Q5F+rEOy337d*(ZW#o50#YpHiDKeT>;YDdRtxJ?(G1-zcS5%bRvIiRtvm0AU~aTe#UWP`in55ky<|?B*Mq27Zp?K7;%(SmZ7p1DXbP4#4nE=YxOr zYdq6$yyf4e?Z;Zzjn{jN10DpTM^JX4?81>_9>^2@#lvKww?s*5@<=W@a_LaM(Odom zMOzwk;W#aJ?mdt0hn$gFJ2huZ^DbOqVr6%^UvUz7`@)nhO}ntb#JjuI{v#(jZ6^x0 Xbk&73!- Date: Wed, 3 Jul 2024 22:05:21 +0530 Subject: [PATCH 11/24] Chef can see the vote result --- .../__pycache__/food_menu.cpython-312.pyc | Bin 9554 -> 11301 bytes .../Client/menuItems/food_menu.py | 44 +++++++++++++++--- .../__pycache__/chef.cpython-312.pyc | Bin 2184 -> 2224 bytes .../__pycache__/employee.cpython-312.pyc | Bin 2176 -> 2515 bytes .../Client/userHandler/chef.py | 5 +- .../Client/userHandler/employee.py | 21 +++++---- .../notification_handler.cpython-312.pyc | Bin 0 -> 1317 bytes .../server_communicator.cpython-312.pyc | Bin 2565 -> 2585 bytes .../Client/utility/notification_handler.py | 20 ++++++++ .../database_handler.cpython-312.pyc | Bin 12837 -> 15390 bytes .../Server/database_handler.py | 41 +++++++++++++++- .../Server/server.py | 33 ++++++++++++- 12 files changed, 144 insertions(+), 20 deletions(-) create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/notification_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/notification_handler.py diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index cfb7d8a12502a0eec75418f883983085ab214191..a4bc282c0d4188126a46a6935549e2ead33c9b72 100644 GIT binary patch delta 2364 zcmb7FUrbY17{7np+xE5~+)^s7y={R~2NbMvbLyOmI80z>N~k!7rRRc0XyLYEXl{cK zTS79I!A`cYD3d*GY2u5?vcxQV!0llsX34#yjE3>(`x;!b%)RWK7HPp{&eQbV^Y{1t z?svcM_x*DAtB~c9*=!_GiyZo3xYsjp=_mW=qrFC8exK;Cn6~&U=6_fuhrhW@#+~qY zqk+0W!87iT8HEOv9bHS)BLw~d`Zk?rk}QV84KR1f;)o>5R#~9C#Q;6vfZ-OiNSDqa zJR`>IAO>0yDqFgvuzeWCLE? zhr5DN5%2OvGJ{1jZur0{RPC9HO4kR=H{fxvL;oc@pZJJ`L*B-jTy@<-r&jHq<#G+a zd!A)Vvz?mdA9H5a;?HvXH#qa0Vy_My=a(wMVoyIq;@y#0FoVl>dAIP)R zj3M|3M;I)sr6J2TK5s2Esao2z+yQK_PZJujy}%3XEl;XdU0MDtwrJCM_Zr`%@l6?F zm2X8B4S_9#jakmOG4mhq7t(}AY_IJl?A2<#XN~u3ygyUF$_KE$wme5vI#jMs=8@kc zTj`I61YsaJf}qjh$#>9R>m5pyQ6fzN5@q{1))0kM=wc*)%tWXWB0>#RqID*T?-ZKC z6!qp=hRjnps~DscX~s~V-LyjALfQjZ9MC6A0gV=Qi`$}*)+suLog!rXq!bzl^Udxg zj#5<|rREl#J;P}G%YP9ceDb*({?kj~tCVoZ)_B zF{wvjyI2!&uzg=w^g@KnT z0p4(M@R7TsN{%Z=62qEz!410a>6Ytk#B|Kc;XTl*TPvC9}epbJa z?1bOe9~rT;j?F{WtnbNwBO4|QQY16z5DHsnG!c&#CUOd2!$~RQ(0a-p9gl-+W6~S4 ef~Hux5;dsH(;FG4BegF>l=fG@uIuBcFJ#Skj^1AHj$n-Aj5rZx{A*l*^X^PRKH_wCDTE9c!G zRn-Al+zLG&nF*EML-0yDb5)vBHFx>_JnVln0&`)f%orkjHh%#c^X=`=fD**858P}4 zpd=J{%L*(Q!W_WjytoMKm6B+P1~h~uOJ{r%z*0%V$bcDGLiFU$1YJ_RLD|o`*mkD_ z0OBdw>yrQ&GFIr5_MnfQobhib1XDn>r$~~1YWMXVj}>hPCv%0&_$Y}o7U|}2h{It9 z8mcu-X7u~%IwhSc=-E7N-Q66u5&otcVhufCvuE|;v2j6#S#CY^HF(y%SdAvk zbFX!cdEpdy2!$B`=r{gu(C4GEifC-)&&gz;( z_-{l)9KsB0sP4s*)+vwh;u!s*1v&_3_hO(wm&1Jgz<=gdSU>+6(4jqX$C{#=w`V6; zl?c7j`3icdkQi(q<;(b%1wdT<&J`x?i|fF(&iB$si4(Gl_H9O-^g|*TxX0Vu?B7Z< Zo5K@h`YDp9e-bTC4+J<2H-L3mw7&=T!K?rP diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index 0f9dbb0..b9ce1cb 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -158,26 +158,58 @@ def update_availabilty(self): else: print(response["message"]) + def view_voting_items(self): + endpoint = "/voting-items" + data = {} + response = self.server_communicator.send_request(endpoint, data) + response = response["data"] + voting_items = {"Breakfast": [], "Lunch": [], "Dinner": []} + + print("Breakfast Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35}") + for item in response['Breakfast']: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35}") + voting_items['Breakfast'].append(item) + + print("Lunch Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35} ") + for item in response['Lunch']: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} ") + voting_items['Lunch'].append(item) + + print("Dinner Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35}") + for item in response['Dinner']: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} ") + voting_items['Dinner'].append(item) + + return voting_items + def vote_for_menu(self): - self.view_voting_items() + voting_items = self.view_voting_items() votes = {} for meal_type in ["Breakfast", "Lunch", "Dinner"]: - menu_item_id = input(f"Enter the ID for {meal_type}: ") - votes[meal_type] = menu_item_id + valid_choices = [str(item['MenuItemID']) for item in voting_items[meal_type]] + while True: + menu_item_id = input(f"Enter the ID for {meal_type} ({', '.join(valid_choices)}): ") + if menu_item_id in valid_choices: + votes[meal_type] = menu_item_id + break + else: + print(f"Incorrect choice. Please enter a valid ID for {meal_type} ({', '.join(valid_choices)}).") endpoint = "/voting" - data = {"data": votes} + data = {"employee_id": self.user_id, "data": votes} response = self.server_communicator.send_request(endpoint, data) if response["status"] == "success": print(response["message"]) else: print(response["message"]) - def view_voting_items(self): + def view_yesterday_voting(self): endpoint = "/voting-items" data = {} response = self.server_communicator.send_request(endpoint, data) - print(response,"\n\n") categorized_items = response['data'] for meal_type, items in categorized_items.items(): diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 18cdb8d8a97de32bf5e0bb143d9f3229c5631905..5c50ef8ecb379630000864dbfabff0d35a7cda43 100644 GIT binary patch delta 336 zcmeAW+#twznwOW00SHc*wx<1N*~qtrkuh!ZVa5xLL6fI2U0^*>!+wQA%Q^da*)Seo3mrWChmv$#Yr#82Ki@VYL+#Ed#2G zuY{?JFUv2<%uAoF!B)-qdh!xBJ@y2qFANO4iIZ=#xe4A75Sh+5k?*>I$wdK^s{&>> wCTp_CGJRB?+`(?bs5W^oyAz|xB#u}{y~%MLl7f30RPTfx&QzG delta 350 zcmdlW*dfSwnwOW00SM-QY)R8+-N?6vkXk!6&e9LOv@`5X(63LnDQo{yURepQ@Y;i);v`MIeIzZf;Dm^2luYA3N8 z@wsK@CFW#SrKTwOrskDS_F#>dtCDfaEH21Ntjx?yS4e})=K|&R^zA3Tbw@z-f|$uw0n-PQ1KDGlKB!OLz;42*I{7KP w6Qk&44USlCU7*WBo-URI5+9fu85!>~DBfkz_`)K^=*HM#@|6KZ7YPAn0Vmj6JOBUy diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc index a8a6ab401d7ca6ef5b69f2cb1b8deef32dbb4ae3..39382ec6624bc120e76be29e992d5f924dfcc5b7 100644 GIT binary patch delta 1198 zcmY*Y&2JM&6o0dy&c>gylM+}9yF^JAkcnwSdI(YIharL(RUoQT(T(fflnv{3I=gOU z%TYOi6ty{EO@-P+rO+G7AJRiFp#hPul0%QVm6BE!r_R`Myq&|Fncwd>Z{BRc%~hHc{3$^v@a+F2R%BApWeO<@yt)=kjmE?Nf-6}1q#h0aW1 zk)nRe3AoemcKm6QFSw??h{H@GIHih-`^jT8ffmUxsFG$$G!h?GmhEcYG;_LcIhLpE z%%M9&KIZag*Q2{5Q(Ny{-5$BNCcFq`UsDRohY_(gu$WkWuQ$jBcZ0;x5VzDvz7vjr zvx=GsXT2k_ag+*zCi)QW!~s^h9^d2)ahQ7QCX8TxKmbSSDK;s~27(@DNIkvR-{Aph z0ky-mA$JAcd6jSShInrr0H0{WQk49`=VKcb3k9&OkdNJ`SYH5p!Y9!n%}tFv3zSm+ zPmynh^r$mSiT*Y*5ePEey_=>EOUDTFbb@+HqcnLcoV*k1@sH5@xE3uo`jk&hyIif9 znKx*>!D-ossuZu^oGZ+IaOvjU_2LcXVsPxUIyV-Sd@gg#GFLM5rc=wzd1gg9PX@(P zr{2kBE?ZxlnSyB=UzE!Cly?t>N5CZcOgtXvsGEKEp!)(dBKcW-e=6pS%h+-}OrH!e zt1^yKq6@(`6TD z=)g(hNpH)nOWimkKS`rkcht;Fb@G`y`BE)BQw!Vbm9_cbW9n{vaBJwo^Z3-xNd7NC zi8GI`?WTr*IJ@!HkLO;bPQT(QbRa=u=zDoLoY)$uKMyy^Z&Hqo$vHA3&&sdPK`e<= z*KUPoZ;`-SZ|iU8x#1+nmAY>6QiHs?_|+ aBZT%Ky9eWYFnz$CLc$FTc{u{jr;w7};L4-ZI!YY0sIFmMZPtM`Jncw@p-+MD}-uFJvWp-6n z0d(zt*<3s>G%_dPL}PSlk^}R=PHh64M{qmE2msvU>w+OR+17v&e>*^!db#BL_I2dd z8ZQ>$YUB5sRHxyxA(H3tT)!bke1P0V+)cA0-m6p*R!AEbV2O-y)uAp5ujl5fE3RKh zC~umM=Y*yyP&g=%H(Zh1%8(W}2q#E7b!#DnG!QSF-#*+!5K0LeGQD`&LK08>Be(%= zad`{?Jh%at;#()|1HYt_>-^B%4&_NPFWpg3PIMsfUQtHZf0Z<{#Sg2{R*qQYB45-N zXl8c@R_BW&vlL6mSfQhydQ^{g+ed!#1uh&QPlRDDa};{^)zHX}&^KOFih2ExgVuC5 z3;k+{s>;M6Quae<(XlF_<9o^^`6HZJn#$|*&MMMN2-){5*0M5v$o&Ug$m??tosbU4 z3lY{Uy7jj%iRe9uD`YdGQ&ZNuQO%EID77XhoT>o`Yh(rJkeJ@^F3 zOX;k(m(H~S=)J+U0Z?ypM3eK%Ubg?;G2=sa{39vLQ)F45m0F`f>%~3ftvr60rQ;E% zu9~LhR)WAnu4|eG#95}yt~-l!j3p+9T`*t`|JVd=juWoI?{dFTg19GPlnsGQcNOR3 woY&wWz(jt@GgaTNx#%)JPmfGJ7@($=f)MV5Q~O}7&7XuN_%!?mn2%Hc0-%W1bpQYW diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py index be4f0cd..f3c9609 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py @@ -9,15 +9,14 @@ def __init__(self, id, name, role, server_communicator): def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") while True: - print("\n1. View Menu Item\n2. Roll Out Tomorrow's Menu\n3. Finalized Menu\n4. Update Availability of Menu Item\n5. View Feedback\n6. Exit") + print("\n1. View Menu Item\n2. Roll Out Tomorrow's Menu\n3. View Yesterday's Vote \n4. Update Availability of Menu Item\n5. View Feedback\n6. Exit") choice = int(input("Enter a choice : ")) if(choice == 1): self.food_menu.view_menu() elif(choice == 2): self.food_menu.roll_out_menu() elif choice == 3: - print("Displaying finalized menu...") - # Implement logic for displaying finalized menu + self.food_menu.view_yesterday_voting() elif choice == 4: self.food_menu.update_availabilty() elif choice == 5: diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py index 7cda904..fe9737f 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py @@ -1,28 +1,33 @@ from userHandler.user import User from menuItems.food_menu import FoodMenu - +from utility.notification_handler import NotificationHandler class Employee(User): def __init__(self, id, name, role, server_communicator): super().__init__(id, name, role, server_communicator) self.food_menu = FoodMenu(server_communicator, self.role, self.id) + self.notification_handler = NotificationHandler(server_communicator) def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") while True: - print("\n1. View Menu Item\n2. View Notification\n3. Food Recommendation for Tomorrow\n4. Give Feedback\n5. View Feedback\n6. Exit") + notifications = self.notification_handler.get_notification() + if notifications: + print("\nNOTIFICATIONS\n=============") + for notification in notifications: + print(notification[1]) + else: + print() + print("\n1. View Menu Item\n2. Food Recommendation for Tomorrow\n3. Give Feedback\n4. View Feedback\n5. Exit") choice = int(input("Enter a choice : ")) if(choice == 1): self.food_menu.view_menu() elif choice == 2: - print("View Notification") - # Implement logic for viewing notifications - elif choice == 3: self.food_menu.vote_for_menu() - elif choice == 4: + elif choice == 3: self.food_menu.give_feedback() - elif choice == 5: + elif choice == 4: self.food_menu.view_feedback() - elif(choice == 6): + elif(choice == 5): print("\nEXITING...Bye") self.server_communicator.close_connection() exit() diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/notification_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/notification_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c53f8e96862da89beed21a7dd0b6458df03c35f GIT binary patch literal 1317 zcmb7^&ubGw6vtHdtE~6~*ZvSZG)2XO1uZI3>MaC@H9KiHZg$(5U138C z9xC+ctscFW{sW%GyQf&BWxWWVyh(Eqdh)$V0^3p#4&?FPyf@#O_nFyzDHH|?jJwUZ zwNEM`KQZVJz2|gHaJGp<9K|DLqLN3%Q8$UB?ZOHiWhGWD{TI5WD%$=~dQRsOINO9l zr9;Z9qimA0h8ktv(ZFV6-O40JDG1$~TeU+s@Rw}g@fff6wva;TYw+uwm2xemMW{@m ziHW6@EG01n*!1ml=xt%#kOhA{HTQR2Ds#`C%mrUC#~Uil1tRu6Dbb zTZ@w%rLOOWls2bM>36Q5Mfd{m<_$TxGQXvN%b6XBNVU%t1B4-gJO&4DNZ9}+b^j;84D>cV%t*~%5-9%DIM`A~nG?O90e1~$j9x)MG8Xo|e zBnNYAf$N7!jx(_q_<{*Mf@zvOhXtdcPSbkLtEbU8S%uM;0TETJOo-;?bjzkIOk893vbD(bVp(F^FFj_4K{p+) zGBXX17hrcw?{Xh#fUdp5_y|n$Q7{5~1?)ZU@>s{gUrV2&_u0+KOHFSxj9RzB{EPhO z;-2vYi06%WOYQu{50hW>HxG>YAI7}oU$V0J^nJU*C`|?_Z3Ir_p+7|FdSrXu3_k-~ z@G&&!!0ZsYSiTvKok)XMC$MId9I8sDc$n2Q6P@8~rr52 literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-312.pyc index fd84bb2e939c37f78b0e0a69adaa9de332f0c99c..93046140a4a504c86999c8e97e107a2515ad239e 100644 GIT binary patch delta 105 zcmZn_nJL13nwOW00SF9gTQ_pEG5VLJS;hFICKlx>B<7_kIOnINLb$p>t}dACmYJ8B yqYzM(pOuc_bkK delta 85 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 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py index 699b2f4..db0d893 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -91,7 +91,6 @@ def give_menuItemfeedback(self, data): INSERT INTO feedback (UserID, MenuItemID, Rating, Comment, Date) VALUES (%s, %s, %s, %s, %s) """ - print(f"inside db {data}") current_date = datetime.now().date() # Get current date values = (data["UserID"], data["MenuItemID"], float(data["Rating"]), data["Comment"], current_date) @@ -250,3 +249,43 @@ def add_vote(self, menu_item_id): self.conn.commit() return "success" + def reset_form_filled_status_for_all_user(self): + query = "UPDATE user SET FormFilledStatus = 0" + cursor = self.conn.cursor() + cursor.execute(query) + self.conn.commit() + return "success" + + def check_form_filled_status(self, user_id): + query = "SELECT FormFilledStatus FROM user WHERE ID = %s" + cursor = self.conn.cursor() + cursor.execute(query, (user_id,)) + result = cursor.fetchone() + return result[0] + + def update_form_filled_status(self, user_id, status): + query = "UPDATE user SET FormFilledStatus = %s WHERE ID = %s" + cursor = self.conn.cursor() + cursor.execute(query, (status, user_id)) + self.conn.commit() + return "success" + + def send_notification(self, message): + cursor = self.conn.cursor() + print("send_notification") + today_date = datetime.today().strftime('%Y-%m-%d') + query = "INSERT INTO notification (Message, Date) VALUES (%s, %s)" + cursor.execute(query, (message, today_date)) + self.conn.commit() + cursor.close() + + def get_notification(self): + cursor = self.conn.cursor() + print("get_notification") + today_date = datetime.today().strftime('%Y-%m-%d') + query = "SELECT ID, Message, Date FROM notification WHERE Date = %s" + cursor.execute(query, (today_date,)) + result = cursor.fetchall() + cursor.close() + return result + diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/server.py b/Final Project/Cafeteria_Recommnedation_system/Server/server.py index a5e0bcb..238e1a5 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/server.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/server.py @@ -4,6 +4,7 @@ from database_handler import DatabaseHandler from login_handler import LoginHandler from recomendation import Recommendation +import datetime class Server: def __init__(self, host, port, db_host, db_user, db_password, db_name): @@ -58,7 +59,11 @@ def handle_client(self, client_socket): elif endpoint == "/voting": self.vote_for_menu(client_socket, request) elif endpoint == "/voting-items": - self.view_voting_items(client_socket) + self.view_voting_items(client_socket) + elif endpoint == "/send-notification": + self.send_notification(client_socket, request) + elif endpoint == "/get-notification": + self.get_notification(client_socket) else: response = {"status": "failure", "message": "Invalid endpoint"} client_socket.sendall(json.dumps(response).encode()) @@ -73,6 +78,30 @@ def handle_client(self, client_socket): finally: client_socket.close() + def send_notification(self, client_socket, request): + message = request.get("message") + try: + self.db_handler.send_notification(message) + response = {"status": "success", "message": "Notification sent successfully"} + except Exception as e: + print(f"Error sending notification: {e}") + response = {"status": "failure", "message": "Failed to send notification"} + client_socket.sendall(json.dumps(response).encode()) + + def get_notification(self, client_socket): + try: + notifications = self.db_handler.get_notification() + # Convert date objects to string + notifications = [ + (notification_id, message, date.isoformat() if isinstance(date, datetime.date) else date) + for notification_id, message, date in notifications + ] + response = {"status": "success", "notifications": notifications} + except Exception as e: + print(f"Error fetching notifications: {e}") + response = {"status": "failure", "message": "Failed to fetch notifications"} + client_socket.sendall(json.dumps(response).encode()) + def roll_out_menu(self, client_socket, request): data = request.get("data") @@ -183,7 +212,7 @@ def view_food_menu(self, client_socket, request): def view_voting_items(self, client_socket): try: voting_items = self.db_handler.get_voting_items() - categorized_items = {"breakfast": [], "lunch": [], "dinner": []} + categorized_items = {"Breakfast": [], "Lunch": [], "Dinner": []} for item in voting_items: meal_type = item[2] From 5d0aa21d06139f52a8473e4197e94a258e3c5e01 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Wed, 3 Jul 2024 23:41:37 +0530 Subject: [PATCH 12/24] Notification to Employee --- .../__pycache__/recomendation.cpython-312.pyc | Bin 3330 -> 3561 bytes .../Server/recomendation.py | 9 +++++++-- .../Server/server.py | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/recomendation.cpython-312.pyc index ce09eb1424560dc012e4ea98513e4bacc96f488b..d9e92e588e400f56bce3b68ed2f51d1840e79d37 100644 GIT binary patch delta 551 zcmX|-&1)1f7{)gd@@*26VtK}?wvoLO%y8EtGZ6;;M$u1o7RR5h*jTFrTD7i(}? z+E`!JC9AR`vwlt!T?(zN4;EFlg58EmS>#1(yH%00;gWR|n%QnGgtTE+m{-p7p7kdJ zQc21F zub56)$+3jX*~Bg=ozzsO#C&yIv*PZOljfcK@$6;z5P1!tT)^t;zQmuC8|F!OYh?-L zb;J$8kXTn~K3tFiS|jtN`+j)~fkvUnOX3GoIZTh`$qcPn0$uV tF;53WukT&@8Jo9*^>_!(0Ro@!$G^!%rc1UdYx8|@CLECq^A6xR@)rv!uh;+p delta 300 zcmaDU-6X|#nwOW00SLY*w5FwSZsb#DVq~9e#ALx&#pRZmSCUvikX3gfdlEG%(zf% Date: Mon, 8 Jul 2024 16:13:47 +0530 Subject: [PATCH 13/24] Complexity 2 --- .../__pycache__/food_menu.cpython-312.pyc | Bin 11301 -> 13680 bytes .../Client/menuItems/food_menu.py | 79 +++++++++++++++++- .../__pycache__/employee.cpython-312.pyc | Bin 2515 -> 2652 bytes .../Client/userHandler/employee.py | 10 ++- .../database_handler.cpython-312.pyc | Bin 15390 -> 17000 bytes .../Server/database_handler.py | 35 +++++++- .../Server/server.py | 28 ++++++- 7 files changed, 139 insertions(+), 13 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index a4bc282c0d4188126a46a6935549e2ead33c9b72..971b12499dd565080884813193dec12d9430cf79 100644 GIT binary patch delta 2751 zcma)8-EY%Y6t^44xk>DNv}tHdliF!$8%jUfctAjhXc=gwV`8w44Ruj{NmA0da~u#+ zvTPa;MIdceBp3p;PGS;M_cHBy()KoKdk9S)tgPA-e*gofNxW?5+WBy3k?JVt`h5M) z@0@#`_`CO?EV_Q@c?Sho?&lj9J4RMr=jo4E6CXMx*EQP60 zfMRWC=ByG+JVqvHoUXl`&lvfO_M%7ZbB{Ar6G7rhZEs6$3EgLk-&(s5@2C=qHgRPn z7vZ4S3UQ`FZc+%h6nd#iPp!$Zoi@3pw2q*c9`t+XUhrd=Wi^qCjU-gOlvZGPRPls( zgS9G%+*ZVEyKcdhKclpc&`7O$vs#+x_9?apNBq02Nr7E00|UDw#)+G zXTN~FO-Xc~RvUh)tvQCGfP4cqWpbKkWU^Y<>EfZTK!L5N*4KPnu1&IC8lou0BB8t` z)eE}4raM6Qf$ps79O#@0m9L}F)KxPFSJQ5acCXX>NOKg`LfEryu=kaOnHQ1HDdoH|RSd z+`BD@z&h>UX2QW5wZ3{%ea)jBYEZM~?LY;77HU)l&|gVK5_8ldYt%B!oF!+?*>ZL% zbdSwDnwy_xqNB zE#An$T-G<1S(c(I9?7J!GP1157ZXXGZ9kpF(KHs)IEf1jsvxKE!7M*9DxAYHtVWeY zG?n#EjtX;f%538Ij|wxfMudMRrD8=`h|7ruEDTMIO^)r4926A7vg&9;DJQ{@b+v*i zZ|PApu|geB`G|z|nWzD?t8zvW(#xbk5?{v2gIOEUJdudSvvweO3QLL1QkDf`v+|WH zLmXAsuvRT#%67dMkE((s6C`0-!54w?lAKnjvTgvHla+!R7fz-m(y|*6&&Zjk0RisY zY8)$B4kDX&&Ky;>8X-N?Mv-{*G8Upj`U=LXpvtlupUSdO>jRw5TJ@o3eWuA3jM0(7 zkyD_IfQYclI2jLn7Iy8VRCP@!uzFf2k5db{>NrCtGD`+h^&ZP4(uovqag*BblG4fq z!JH&wzX2Q|_pcN28WE^KBss`RFNg@I*vWkmMAa`r*?D7Vr0%@2)z$VCzA{gIO;@#D z-=ukclj?CU5~tgBbG3WHpxOdi(2q~Glf>5iEwH4Od3}tnu*9yLl|DjP0FfpSm|(gT z^5#(OFdl(<@(4g_;}PgRF3Zv>oXQkNw{ibP(Eh3YV?|cbW5kzSp$h8XMEr_eK|xqc zF0q0_4TBhdaJDpjth{HsEY6frP;-iF?`${+G;!n+7u5LvwNEzqAx)fU(MBE>xZq>X z`_)*53u#>YbC$BZO0KaA8Yjq!3hE;3r3&gHYy75rGax+ZEDcVT#W%`^|`G@hAJqsi3-q2Uj+#O-?&*>tf21A@Zb;D(&+K> z(3|D(i4qbuXZRt#;f!eE$w!>1@dFRV4Sx7#Z5Vu8YwfL|;d%qmN9?An*2m#h9P4J-3sqNi8_8^}t9Efc%@cc^oUua}UgKMY`!M((Tihxrn#e zHjG8(2JGkeltRvjekK%#+z~-uGSaifFNTkCPxm^kQTkcWENvYu{xRG&^(6^vaFDl=v=77+3r*91QqF&w7()*}rHItC{s$8Cl%D_q delta 587 zcmey6wKRh7G%qg~0}v#ewWftCP2`JWjGCAk%~Hvy$-nWOm>g3G)8rHlUsdLG1`teP zp2J+rQo;(-0Rky3s~I6IMurmB$^SIO0_QR#gld>mxFmt{E)21H3=Flb2#qzYDXbuw z6t>wcDeOQVH<-scn*~Kb3sC>$09J{~7gRXq7#VsDSb)|*EClN1LD&SgTq1Zbl6!!b z^Fl4xC)V;5b`%p>fF>YYZ-`<&ADZ=I!6f5mt^Lp z>t>du<`z%RR_tbEnfynwg{hZua+;R<=1od<9L#>20+U@#QYWu7k!Ez8e9FW*{<9Vr zYa(M24>0VCSb&5k(=C>);`}@?r>F`f43-0>gClpKQVwQus#4QW^XkB diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index b9ce1cb..9bf8728 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -160,7 +160,7 @@ def update_availabilty(self): def view_voting_items(self): endpoint = "/voting-items" - data = {} + data = {"UserID": self.user_id} response = self.server_communicator.send_request(endpoint, data) response = response["data"] voting_items = {"Breakfast": [], "Lunch": [], "Dinner": []} @@ -219,3 +219,80 @@ def view_yesterday_voting(self): print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} {item['Votes']:<5}") + def update_user_profile(self): + endpoint = "/update-user-profile" + # Diet Preference + print("Please select one:") + print("1. Vegetarian") + print("2. Non Vegetarian") + print("3. Eggetarian") + diet_preference_choice = int(input("Enter choice (1/2/3): ")) + if diet_preference_choice == 1: + new_dietpreference = "Vegetarian" + elif diet_preference_choice == 2: + new_dietpreference = "Non Vegetarian" + elif diet_preference_choice == 3: + new_dietpreference = "Eggetarian" + else: + print("Invalid Input") + return + + # Spice Level + print("Please select your spice level:") + print("1. High") + print("2. Medium") + print("3. Low") + spice_level_choice = int(input("Enter choice (1/2/3): ")) + if spice_level_choice == 1: + new_spicelevel = "High" + elif spice_level_choice == 2: + new_spicelevel = "Medium" + elif spice_level_choice == 3: + new_spicelevel = "Low" + else: + print("Invalid Input") + return + + # Cuisine Preference + print("What do you prefer most?") + print("1. North Indian") + print("2. South Indian") + print("3. Other") + cuisine_preference_choice = int(input("Enter choice (1/2/3): ")) + if cuisine_preference_choice == 1: + new_cuisinepreference = "North Indian" + elif cuisine_preference_choice == 2: + new_cuisinepreference = "South Indian" + elif cuisine_preference_choice == 3: + new_cuisinepreference = "Other" + else: + print("Invalid Input") + return + + # Sweet Tooth + print("Do you have a sweet tooth?") + print("1. Yes") + print("2. No") + sweet_tooth_choice = int(input("Enter choice (1/2): ")) + if sweet_tooth_choice == 1: + new_sweettooth = 1 + elif sweet_tooth_choice == 2: + new_sweettooth = 0 + else: + print("Invalid Input") + return + + data = { + "RoleName": "Employee", + "UserId": self.user_id, + "DietPreference": new_dietpreference, + "SpiceLevel": new_spicelevel, + "CuisinePreference": new_cuisinepreference, + "SweetTooth": new_sweettooth + } + print(data) + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc index 39382ec6624bc120e76be29e992d5f924dfcc5b7..3aecaf4ee8046edfee45caf6646581beccdbaee6 100644 GIT binary patch delta 378 zcmcaCd`E=$G%qg~0}!~kbf+!c$or3p@xf*u<~T;i1Cz5^>=_qKUJWE0CckE}XHBSK zPT`)c&mzkxIhmJL(Ud1!gMp#Qpo9^m9|Tf(S3}v13^fc{QV>yOGD~){FN+LQiTvb7 zR(U}_gz^cDJsz6;lQ*)OYZh@C>M4X}rj{%CrskC@c$TE*avA9L7 z=An-inJ5hhY|t|S`V!>#Vi_Ruftit!@h*enT?UQ23^rew S6dBzZJ4(JXfaoF-paKB6A6{z! delta 283 zcmca3a#@)7G%qg~0}zzjwx*eG3P(FdNM?;fu z@<@dPeIJ%zB$)N%#i)Vxv!&yv(!E+ajK$$@N&%Eo#M?wMt&3T~;XDM^XR*<2=2 zrEme$$y3>MCm(0CXXKyE&h9!nk$pL%z+_I29JUKWl~;JGCO2}JPd?9)#;8BpjMIcs kb8Go=eV zW!VG`n_XRZpRRf_dNA3I$$IF;=w;z#Vq)gN0jnGJW;|i{fX2l5Udtkje98Rg&G)|d z{r$c9RR!T&Jepk_)3}*)4bqc2Mkenuz7T zF!)X5=fN79>A75;qy$q!d>&8~S`Uo%cJbBxA?a9qDIej)fG6z3hgySKSe;jdr@fW5+8 zcLx9hS_=Bn=b_iYKLxs{4Y=+wN)0})_z3t3v|zY{BH=dyTeuq@1t5#|9-p&WartT# z@2ycg_BgWl_zKsau$sU{^l|TL(17msZm_@O?GMqfemCNqy#Sz=x`9Rse1T6A$(tlo zp4P!!4f?F^1p2$rj>IP$&@V2I$ul}Y-EO~GXK=IW1QPpW4(?E9WEzT&zV1H>R?*M> zUPsaXI&MaKQIluol&Hyz>6-&>RbG7W8VPuZmdU!iGYAzMay@yvlNt zQet`TzYr3wbI9s`*37MP`v-hz+{-lJ?;OZc7w9P}2ihyn{$Rc6&lc<4I|qDwd3{NLUgKEKWaJ!V+ani%* zw{Z4uXedN&hAgoNy*bbk>!r8am{^qB>SeKJD?*cX)G=I7r;hz|+{Ay5x6UZ6&PXN? zE+R=u_`%d(2_)lV@!_L0LtNM=Dk`>AGz=;sWw{NN7BmpHAG!Z4?IWTlo)=X(DyF4* zs05EO>LXow20J6yHcGB7+6gy!e(<(!EWIaQSvI(?+YAP!4%;MzCUk3HrD+MTm1P1K z39J!#o4^L*2mK(2qJ!r;YuMIO6U%x^wj*F>T_uN^b(S3UZ1aQDEE_;y4hFzAbbrt- gyo=r7lql7OVV4E~{75u?q5Zuzui~oUbppt{@J|3NQqHg zlck6osHsR6M96^%c_5)V`Jr(kBlG596Awnl;>mMNvlzKHvzwVQF;-5tvruCb1iHC6 zb@D=4@yU%AIgAXG1;s5G87D6`i{@lXVXkGaVa(#4TxzL0*~wg*rIw|Jaq>g~ImsH9 zU?^!yDb0RrJ1mqA)pa$@Px@ikz&9pTt;MB|q_@5$vqupM^MB#U}rB)Rk%iY2ybGAe(=2 d*yQG?l;)(`6}3!uaFXPYV__8g!~i0}iU5KDePsXu diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py index db0d893..61c13cb 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -231,15 +231,17 @@ def truncate_recommended_menu_item_table(self): return "failure" - def get_voting_items(self): + def get_voting_items(self, diet_preference): query = """ - SELECT ri.MenuItemID, mi.Name as MenuItemName, m.MealType, ri.Votes + SELECT ri.MenuItemID, mi.Name as MenuItemName, m.MealType, ri.Votes, + (mi.DietPreference = %s) AS is_preferred FROM recommendedmenuitem ri JOIN menuitem mi ON ri.MenuItemID = mi.ID JOIN mealtype m ON mi.MealTypeID = m.ID + ORDER BY is_preferred DESC, m.MealType, mi.Name """ cursor = self.conn.cursor() - cursor.execute(query) + cursor.execute(query, (diet_preference,)) return cursor.fetchall() def add_vote(self, menu_item_id): @@ -281,11 +283,36 @@ def send_notification(self, message): def get_notification(self): cursor = self.conn.cursor() - print("get_notification") today_date = datetime.today().strftime('%Y-%m-%d') query = "SELECT ID, Message, Date FROM notification WHERE Date = %s" cursor.execute(query, (today_date,)) result = cursor.fetchall() cursor.close() return result + + def update_userprofile(self, user_id, new_dietpreference, new_spicelevel, new_cuisinepreference, new_sweettooth): + cursor = self.conn.cursor() + print((new_dietpreference, new_spicelevel, new_cuisinepreference, new_sweettooth, user_id)) + update_query = """ + UPDATE user + SET DietPreference = %s, SpiceLevel = %s, CuisinePreference = %s, SweetTooth = %s + WHERE ID = %s + """ + try: + cursor.execute(update_query, (new_dietpreference, new_spicelevel, new_cuisinepreference, new_sweettooth, user_id)) + self.conn.commit() + return "success" + except Exception as e: + print(f"An error occurred: {e}") + self.conn.rollback() + return "error" + finally: + cursor.close() + + def get_diet_preference(self, user_id): + query = "SELECT DietPreference FROM user WHERE ID = %s" + cursor = self.conn.cursor() + cursor.execute(query, (user_id,)) + result = cursor.fetchone() + return result[0] if result else None diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/server.py b/Final Project/Cafeteria_Recommnedation_system/Server/server.py index a1ba6d9..d056c8e 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/server.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/server.py @@ -59,11 +59,13 @@ def handle_client(self, client_socket): elif endpoint == "/voting": self.vote_for_menu(client_socket, request) elif endpoint == "/voting-items": - self.view_voting_items(client_socket) + self.view_voting_items(client_socket, request) elif endpoint == "/send-notification": self.send_notification(client_socket, request) elif endpoint == "/get-notification": - self.get_notification(client_socket) + self.get_notification(client_socket) + elif endpoint == "/update-user-profile": + self.update_user_profile(client_socket, request) else: response = {"status": "failure", "message": "Invalid endpoint"} client_socket.sendall(json.dumps(response).encode()) @@ -180,6 +182,22 @@ def update_menu_item(self, client_socket, request): response = {"status": "failure", "message": "There is an error"} client_socket.sendall(json.dumps(response).encode()) + def update_user_profile(self, client_socket, request): + role_name = request.get("RoleName") + user_id = request.get("UserId") + new_dietpreference = request.get("DietPreference") + new_spicelevel = request.get("SpiceLevel") + new_cuisinepreference = request.get("CuisinePreference") + new_sweettooth = request.get("SweetTooth") + print(request) + if role_name == "Employee": + response = self.db_handler.update_userprofile(user_id, new_dietpreference, new_spicelevel, new_cuisinepreference, new_sweettooth) + if "success" in response: + response = {"status": "success", "message": "Profile successfully Updated"} + else: + response = {"status": "failure", "message": "There is an error"} + client_socket.sendall(json.dumps(response).encode()) + def add_menu_item(self, client_socket, request): role_name = request.get("RoleName") if role_name == "Admin": @@ -210,9 +228,11 @@ def view_food_menu(self, client_socket, request): response = {"status": "failure", "message": "Access denied"} client_socket.sendall(json.dumps(response).encode()) - def view_voting_items(self, client_socket): + def view_voting_items(self, client_socket, request): + user_id = request.get("UserID") try: - voting_items = self.db_handler.get_voting_items() + diet_preference = self.db_handler.get_diet_preference(user_id) + voting_items = self.db_handler.get_voting_items(diet_preference) categorized_items = {"Breakfast": [], "Lunch": [], "Dinner": []} for item in voting_items: From 2648de460c0c350e5364e92338d6c123dc00a003 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Tue, 9 Jul 2024 14:42:34 +0530 Subject: [PATCH 14/24] Complexity 1 --- .../__pycache__/food_menu.cpython-312.pyc | Bin 13680 -> 14360 bytes .../Client/menuItems/food_menu.py | 11 +++++++++ .../__pycache__/admin.cpython-312.pyc | Bin 2058 -> 2189 bytes .../__pycache__/chef.cpython-312.pyc | Bin 2224 -> 2360 bytes .../__pycache__/employee.cpython-312.pyc | Bin 2652 -> 2653 bytes .../Client/userHandler/admin.py | 4 ++- .../Client/userHandler/chef.py | 4 ++- .../Client/userHandler/employee.py | 2 +- .../database_handler.cpython-312.pyc | Bin 17000 -> 17917 bytes .../__pycache__/recomendation.cpython-312.pyc | Bin 3561 -> 4420 bytes .../Server/database_handler.py | 23 ++++++++++++++++++ .../Server/recomendation.py | 23 ++++++++++++++++++ .../Server/server.py | 15 +++++++++++- 13 files changed, 78 insertions(+), 4 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index 971b12499dd565080884813193dec12d9430cf79..553571f6ac6a902b44990e6ac1cb27fce9d18ce8 100644 GIT binary patch delta 2207 zcmZ`*ZERCj7{2Fz^|z!`(Nf7Bm_7>qxRri)_8mFOQ6V>AXA5|c%Y=e>o|&3b=4Ip;m^ z$Me4DJ#YJPaz5?&%5JwZ^lSL-a;(1fisKB5U5SUS(G8cFGp>tH+4a#krxEGhZebrW z1PKkqTC>+2^fg;e|ZznTx6bEMQzlh9W)o&f+s}JWyg_RMeB52nQ2a_6*J8^oQxhdDr5NoA;|~^hh|VtZ+R$cdZ~vw+u{=j~eP!)ZV5$6Y5N;U>`E< zb0QVD?1<&+_J`vMB`RfADW+s26B5;w3YwCkxm(grNhOmBk1Myx0w=Mz1oAo8cp@WE zrV@M@Dyw^eXy`w2{J`z7lA3BMd2XSmnRh6>!Q3z3PImCy$ihZf_cSaFEL^x< zpKt8UySu)#1@2c#`P!XJRUOL=vX7v*_y=4{O6Nkb)arP7aD4Xe*f$ zy-wOM3>E?4y75Nxso0Hbv`69%wyq5%?G$wLD7{^S#|Dr&0V*kw&n%K?7*>;?Elp)b z9Ei`l2g%w=YaNHW$t(6+Zyi|G13+H50l-Z@w6~!l@{_#}1&QC$h4ztCj_pGQpP;du zf-YpziFmejrn)CauQU{ohGHrX(Kbwk)Tu14A$J{vs8=&>ILi(gWm!vI=J7E2f0jFx zLKX_eJOD?<*}UiKMlWhVx&kbcNu{UrfI+_z$XO37;lzoHX=ONwyTNV?z`AI{lSHP{ zX$2PtC09K=*VOG>PY*h;IlaH5u~F(sW(!UOC7g=58Kipvpiaep>Gnx7x(OZ*Ezp{T zUa0IxGupMvw;`dX>P>S-Fuo`lBv&ezTc-74Pk`pyPLfT9LXN=^6jHaO=zB~X4g4Gk zS6ej$(@G*=R0q(T+CSCDSoAVEy4k0MK2p*b z*hiPN=4Lot+g7?5ruUwTKBZFBSyWlKO{*|U3!{*BZg<@v`aqkldzBM`2@a6Qjp?~k zO>D*~aKL4eYS8JsU#)voQ%jQyJO?O4YS!Gol&uY!sV0DcEo%sojpI+alR@HM)HzYG}< Wg@+tM=m)0kFCOz~>oNmqSp5s)7wXXf delta 1706 zcmZ`)&2Jl35YOAS*K5aa>||}r5svMWsNL44uAS6;IF8b!v{sX}DQzH4DzlBBoelQx z>e)#tt%{JiMNmcWg7}a?;zA_^Xb~6SAAkcw;skh2oZDfgQB?e0IWeUMA`qtWT%u4IzbO`W+wVWP$#{kI@IhByyX-2@)5u z#AkKA4DZMgi%J4ibdTr5Y-x!VjLSEbwU=ZEalu^_Kmd4*f$Su1SdRe20O9}%IxR_b z%RPo9^Ii9Qoc|b{9%o>QR~YF9y2uAbR~AOJ83Fhno<(`b_3^%qcqe(BGlDf*}Xw0uQvOR1^lcu_N$s5T)-2O$ukSH2&)x~VOIWmgNj z+V#8!S0J|K)+BtZWI*qeqj1`8Ou8JMMlYN1L@#sb1^O@+!OL)Y9RT=}6#yViRvB21 znRQ%|`3{~vN^`j)sQq zB)u>y;{sd05}H*t4U_m4yr$RdSSu?{Ro5D1ie0k$h+uxW1ua2gJ))KOsdaQAGq${2 zdQ;V^C8%k`?(!i0eKdtWFe77kcp(oCPtmuJ8|Qm9y-3!<3Eyavc0)QgbX9BD$49Iu*786Jr#h#-(ORkG)ET|+Chh52{Bx+L=M5u?9k9|(J`dVhQl z{cQd;?%+^>{(9!bq&=c1f#%Zy_K(gvSUm@@1W*FF2>{h02EZ1;Hl5Fn_+aW@@7v{g zXKdF)@8wpe?!%=Q0RC)RV!p1IH*2^+cGwoNZvzJN5swi1v9JFxN7aFj?e+oMul@m3 C7iDz- diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index 9bf8728..9772bd2 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -6,6 +6,17 @@ def __init__(self, server_communicator, role, user_id): self.role = role self.user_id = user_id + def view_low_rating_items(self): + endpoint = "/view-low-rating-items" + data = {"role_name": self.role} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(f"{'FoodName':<35} {'AvgRating':<10}") + for item in response['low_rating_items']: + print(f"{item['FoodName']:<35} {item['AvgRating']:<10.2f}") + else: + print("Failed to fetch low rating items: ", response["message"]) + def view_menu(self): endpoint = "/food_menu" data = {"role_name": self.role} diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc index bb58b6a051ff0ed23127681243cd6e047e9d1c63..2df418f4e512640f8f1ddb0a77161020a227ad8e 100644 GIT binary patch delta 329 zcmeAY=oREW&CAQh00b?cdeR=NKT&CAQh00gn0TGFaE@@`{fbenvH@e-rJ=V76y$n7jf=CQN?8 zY;WmM!#+oqvYg$Eb=Nm2-Q6g zGk(unoJ)QC-<_OFse*G#O}l>G?|qnR$B+?3Xt21 iC4s~TW=2NFy9|nV88p7Ih%>q|cDQ_H0MSK4Kv@8{azN|= diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 5c50ef8ecb379630000864dbfabff0d35a7cda43..0b248204e7c2e6fc292a623721548ee7067134e3 100644 GIT binary patch delta 321 zcmdlWxI>8VG%qg~0}x2Q?@7yG-N@I<#5ig46s8M|4<@HF+cO@Ryc9?-nEVt-HcVD! zv1d)FVNBtktjR3PC_Z^EiwsYm15kh`TZ4h2$YAn$7BPt$hAat?iKrk;8mL;9QFd}5 zv+(3|EIev_s~I6G7#Suo_9$xd`&Dsrg{S5u=jWy>{9@FoV$xKsnl*{FQ8+9!wOqj^ zvp6}iC`G}uBsG`Id~!XjInzt_$(vc782KlEV=WWEC0Yhl7N3(}9$%DLl9`ttp9xf1 zJUNFgf{BT7@-a4D_A;g~3=F*GlYg;wPj+AzpWMo>#i%)X1G@>M#^k5$PK;ucH8^6m p4S=o!xvW?cNPJ*sWMsU{pm>)-;|q&4qZ?y~$yWvtT_gmQ1ptfuRE_`u delta 244 zcmdlXv_X*XG%qg~0}z}rZB6^lvXQTqi7{yM6s8M|2PUU7+cPehyc9?_OnwR^6DF&& z*jqZ(Fs5*4YcMbr8I&-Bbb>$%&uS=}k)ehmOAI24OlC<=zRM!ZC_OolS$HxZE6?Oz zEZou)7<(8s`TVLlxx!O(lJj#@6@D>lR558PR<%xcU~Qayjn#Cr0GmA{-{b(cvdMSZ zBA8w?Og3lNWlv!G!oa|rI60fWdonMF7NhE93l0-TwaK|0PK+XxH*mx<>P_b3loXU? RbYtu=`N{yIi-dsg0RXG7IJ*D< diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-312.pyc index 3aecaf4ee8046edfee45caf6646581beccdbaee6..d40a6c4431fffd915b12fe7062f33805a5547bfb 100644 GIT binary patch delta 48 zcmca3a#w`+G%qg~0}%9o>`7a+kyo0Hv3Rm3n+Bu8=0G+LCU!rjFANO4{+k;(?l1xX DQA71$e6+i?ds;B%ddrH z6GMnIZgHBB^I(?X!lowviF^6I?n(Dz+=DS1lg30JjY|wNP3EG(-?>FW;xDQ&uo}aG5UvGl*OI3A9;%q*=adxt6#mQiGW%(UP)^k;w@Ll%mKHdl~+2AAoy1m9y z6%tCO5jt>9?S)SMo%+66>7|<}U#{I_X*eX}Cw0j=Eyq}aX@!}YdB$?tn8p%#*X;`r zk@i_aJ>jr`uCQu~hY5bdKEe?~ia&Oz%~h0@r3ncf^}5|g7LDF_q{3Ic#~{VO@b;S< zcNj=DCZJm@WiqJwdxY+JzsDT@KiyV488V(C7(Go;l;ZDd@0p;C$=1)EB~@G*XVLr# z@IPC-p~cGT#0{$=7`7&gw&zxl!);e!0zYdTv3+k-uf6<@&Btro*8vWpDHsYSNN#ky zql>bFLy5#tBjm3ok*Vh(Tn_wwa~ zlcfEzZ?xuB(rz01py54Rq&X|E ziXUGQf^=h_MOw6E#5$*^sZj?80!7Q=v5{kVtJ;hA0wMf4(2H*e?CIx{Cy%6uwd6uR zc(!Y7x^!+XuWJK?TBP5hZ5?J3d6|dc70}HrPVoVOvRxP}E~blj{8aVCE)*_JF(cE| zxl(Sn$U4QBq9Ra9$Y@#1_4!+9K^N|abMN_{Kfm)kzh~gvO~_xe zSaJ;Fx&LyeEAE=hXYgQddfqfvs#ERMhFvj5h4Pr zndOmvoIr9`PB=k`@{N+1CX|g9^1)^@&#qVnDbiL^M*-7AK+l24f_u~4({eYnIz7o(cC zM)Jc`59_?DWkjFj#Ie;2`Ro9Ul zpnf*Ha0Ws!f!zTI6!Y1@I7zaDt&T~O{MBtQ-d0xaAlGp!cnWNMIk;$S)CzBJL*}CC zOQqMNvja2}!~rVT3S7m>^6MZWHceI$Q>$SP*HD^W=SNHf)P{ upcu zjC@G$gF*%3Ll5<0?5*eCeA!U&HWGrKdb5etOVIDAwXmQA=kq(~cYeR`?|1JxU#j0X z*tU4S48i!Zw;UO^t=ML8(@LhUOk@_(I5)?7xwjit*r!6oW4wxtrc-*b6&aCzb5bhJLRpJ`!CaF`a~dOZ z(=LP*yxggAqG=j}VBMopaqHhQP{vHkfVCW126Dw81UaO_RuLj{Dj}#-8A%XBYUplAk$gViJnx^43Zus%mj(G66q2tK3=sqf z$S26;BIH4Umnp4}!V9)BDXGR1fU$5&mb_enosnZnRVLRV-zFF*@Dtq00KF#JLN=3t z!uflt2SI335`#%83Z2YK!I&x~6gfm+H)r`?j6_B`X{~rH>wTLe+l`kDyJy$lp0~Ff4eoU< z-_T_UP3z-%p~I+eHQe1_Eo^7SA!5%u_IXg)cOkncXKs6vjo2 zwM;;o2}m=SFoJY}KnG(QV+!-+_l)X{ER)5Vl$lulHajx8GcgKm?qp$SWE7k{k#!fl z15o9U28PWMY@3-GjW_df)iN@QZ0_P-#>nia$u>Dlz-01b0a;N&pt2T*PfU!gs-M`n uS@l0lsj Date: Sat, 13 Jul 2024 23:39:42 +0530 Subject: [PATCH 15/24] Moms Recipe --- .../__pycache__/food_menu.cpython-312.pyc | Bin 14360 -> 16350 bytes .../Client/menuItems/food_menu.py | 64 +++++++++++++++++- .../__pycache__/chef.cpython-312.pyc | Bin 2360 -> 2492 bytes .../__pycache__/employee.cpython-312.pyc | Bin 2653 -> 2778 bytes .../Client/userHandler/chef.py | 4 +- .../Client/userHandler/employee.py | 6 +- .../database_handler.cpython-312.pyc | Bin 17917 -> 18772 bytes .../__pycache__/recomendation.cpython-312.pyc | Bin 4420 -> 4420 bytes .../Server/database_handler.py | 17 ++++- .../Server/server.py | 22 +++++- 10 files changed, 106 insertions(+), 7 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index 553571f6ac6a902b44990e6ac1cb27fce9d18ce8..ecd15293581be333fb220200ab67656bc763c544 100644 GIT binary patch delta 3193 zcmaJ@U2Gd!6`ng|kAG&IIJV6t#RV0|Qz???ngzo( zyfA$wo=a-erS~{L67`P~s~rQYzEkVsVCiGq8fpSFGLK#KgPQ?b09pa0(hv9uLOhY| zUnjSm9mKF7BfoHdwLVH`4d;}qD!1c_ISeLn6B!N!$bzd2t#LS)GnDm`(%#`1?@ z_6RvGhERxnL41J^gCIiQ5W9q`4av{NQz%;66c2D{fYf{2yf1)WJAfacgPileghoi- zJA_8bue|-}9C_yLK5Ll+jZ+j1dp46w=Jr345t!0-C6-iTQ#y`eJ(Y^-^EoV$c-9d@~kjtzG5 zA_f*d_l#)^@l;Zg#7vBZ|hjD^}VLLmcPRU%ApZi=1 zR;cP0rM6wz*_OoWg5-6n54}_RiFAztKY-=CDOa+pM0{tXtXbi|n?pMkANy zV7mmXJSGuhi5Z>VP8JWrR#o1Sx8))9yVCFF%Pce6y!Pn1?;?0!ZYeo^kY~^sk;ayU(Pr`?@-<=HfUR*YG9M zcO>AuLKO}7==8QYQM!JFL(YEKfyVajBD*b{@u@~%l+bl=kh(zl6Ia+ivr#K3Bt$SPQ ztVmr{TE8U~+@_ROgo6E{GZ@XIJe%k8_B=BSVcXLb@dLiVE1rUb^ao$*51-|`k7p#MKB*G(?9jA}Vb@!X6mY4Nlw=~HGOtBGVr9gvoK zN0+x1D0Q)_Bvmb!m7-ZS6UXtKsz|pNCCHC>R;K!)9eYWQGIc&-<_w+b+nGtzk}KtC z&6T2Ouo|D6if3~@()hfVnCX$Mq@%XXl3=)&Z*QrX)xxl+Ko4J{M>TlG%uoyjp+tZr zH{3K`sqd5YG=?y?kStdm_PxeURw5`%aeLRHWVu{tCea=;KF7BPqglz5YoW?I5)pM`$_(y~-( z*bNJ6sk1R~HfC+J6go#A&|Sim z)3Va}*dy*sH`}?!7~k!cTx{h<#0zia|CKAT!&e%D2GgS%o#(k2GH%k;~nI zzC61_`)?djxLLTLJuQ#6bP614JS5Q!B#np7&mSYf8pZwrM>CwK8P3d#XansgPc(GC&_ZlfL{FlfKsL_dZqK%|@uG5oVc+fs!~4kOkO>m6aFT z;4Q}tTPmqhMp~m-PW^IjFX13+)ojBnRIm@jmMi4D1{C|4>QIU~J*zb%>(0?~oxjLa z3e@_a`a`6@I8v_le+$30RQA@FMc@62dlT=ruZyi4E~>F10#lL?k}LdLu(K%q6^yj4 zI}cE6#kqB7c!x^Cwk-xZY+g4|NZd`KZf;WclfNAAI^RYevi`ul1ifK^mjT8BZUDRr zFa?kVfQJ>|0Vn`G1Xv*x{VnKKlIjof4*MB)(?{OwKU}*R9!K`h&6{kqz4O^n6ZuVl w`1FUMF9JY{K6ehLb!9%K4&fisAq^3e4N%zN5JFEF;h#3mjyg9PKy%f90DnpFx&QzG delta 1829 zcmZ`(OH3O_820SLUK<+>7@HUyo7g~>@JI>)(*_8y3K~KSLQzQ4IE%fQ1^m#g1A<1P zuLG61kWmyWRcWQ3`jFCgtKKU0CFRfyZE}b<6!p?W)gCH(h*YUk=iep7AQy?xGynYa zKfeE)-Cf(tmHy~*IV|)q`p3p>q;0eGGMe2~QrwDLEdTu15MvXL(Zgg3v9ckb^Cp{g z!Tu8lu2?L{vSJZS$ys)Uv-dBh$OaqKzGN$rbK$edc75k|Mb|@TOnbmRK!IxNE?Tjj z{@?&W5TF(yqx zv$C9=krE3chiwqW4`2m=3ULjYviC-Qq084Tk18YU!XtOh*3|pc?@n)*HLi0zf@^(l zi+d;p$s0}8+V}QrOz0HcJ550sCbNt3xRjQ08Q9zaK61_(u^O@cL~%Bi6m&uQgH=Rx zHXu>coyS?!P5v#bb03Fm5r9g7C~0+{L4zde?nOi7Lw6S%CXd}GPnaRW<9P}?ujUq& zd=aWhYq_6HgsaG_<*lek+bF-v^cy4=)JOwRK1LzfGb(@?kvFLyfuq98MNc=nq$NBt z28rZ7Z|6u9JnAXvjtjE1IJJ_KM~84XSQ`M2WaIa%zLCqxxG*X4``Qn2bjf!X&1koM zf1)dsG?2)cL1RUNT5$_lUjP773ggo4elxmF$;;`ul04MV&apnUtOfkHprLz#z?zYa zD@X>-73<|A+tIXB;CWbBqRk}o3LF8Ex;-N=$8%Uo$haAd2f|iCmtpc!FlK#=uGDWy zo!_h74W41vuF?H!W!sHhQp(FM(vqYsN;7oqD>x1zt^&~TYUdg25Fh-TU684gxqpj#u z4b{KKS_dFpjJ$aww^mH$0?t4PR?TBmf!usn$(X}BT#4u~Czb|(o~D#l-JYh>j_0Yi zaR|(=C23Jf#uIZ{Iz|=uK<Jz zRGo*_G{98=8DI_oMvRvLZUSr)p|3Us@A+-Z9>emXJ%^pYfcCt0{yIg0A7J)8WVr8i z=x_fR;v2COZgCVuM(5_$Y{uB&+vJ13>V`Yij_AMYq3{=r5PEDWdBR~1HSW<{$h`g^ D&m@1n diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index 9772bd2..b65b1e2 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -11,7 +11,7 @@ def view_low_rating_items(self): data = {"role_name": self.role} response = self.server_communicator.send_request(endpoint, data) if response["status"] == "success": - print(f"{'FoodName':<35} {'AvgRating':<10}") + print(f"{'FoodName':<35} {'OverallRating':<10}") for item in response['low_rating_items']: print(f"{item['FoodName']:<35} {item['AvgRating']:<10.2f}") else: @@ -31,7 +31,6 @@ def view_menu(self): def view_feedback(self): endpoint = "/view-feedback" data = {"role_name": self.role} - print(endpoint, data) response = self.server_communicator.send_request(endpoint, data) print(f"{'FoodName':<35} {'UserName':<25} {'Rating':<10} {'Comment':<70} {'Date':<20}") @@ -307,3 +306,64 @@ def update_user_profile(self): print(response["message"]) else: print(response["message"]) + + def add_moms_recipe(self): + recipe_name = input("Enter the name of the recipe: ") + ingredients = input("Enter the ingredients (separated by commas): ") + instructions = input("Enter the instructions: ") + meal_type = input("Enter the meal type (Breakfast, Lunch, Dinner): ") + meal_type_id = 0 + + if meal_type.lower() == "breakfast": + meal_type_id = 1 + elif meal_type.lower() == "lunch": + meal_type_id = 2 + elif meal_type.lower() == "dinner": + meal_type_id = 3 + + data = { + "UserID": self.user_id, + "RecipeName": recipe_name, + "Ingredients": ingredients, + "Instructions": instructions, + "MealTypeID": meal_type_id, + "RoleName": self.role + } + + endpoint = "/add-moms-recipe" + response = self.server_communicator.send_request(endpoint, data) + + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def add_moms_recipe(self): + print("Enter the mom's recipe (press Enter once to finish):") + recipe = [] + + # Continuous input until single Enter is pressed + while True: + line = input() + if line == "": # Check if the line is empty + break + recipe.append(line) + + recipe_text = "\n".join(recipe) # Join lines into a single string + + print("\nRecipe entered:") + print(recipe_text) # Print the recipe back to the user + + data = { + "UserID": self.user_id, + "Recipe": recipe_text, + "RoleName": self.role + } + + endpoint = "/add-moms-recipe" + response = self.server_communicator.send_request(endpoint, data) + + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 0b248204e7c2e6fc292a623721548ee7067134e3..08088f5d77ee0419338029be138ed1b5243833b7 100644 GIT binary patch delta 329 zcmdlXv`3itG%qg~0}wcEoRoHcBX1iMOrWaCciAFCDGoecmw<5h+L delta 280 zcmdlZyhDihG%qg~0}x2Q?@7zp$lJ!mIBD_}rdg8r9%y43Qx8M14EHP2_wiH5J=%&4P`Sj)G%a8Ktz$rEa}Pe ztg?)tR`o( z*)#G_Ud`4!*^51bk!kW`c0GhO!wMY8bL)Afm`*mi%O2 z78#}z#mNU*$|o@PWM~RZ{>W<1*gRR2EuYUfKUck2At*IDvmlkreDX9lBc_+^ zlaI1FF$zxRU~dz=#h;jx5}%u&TO3~mRy4Vfy_(TwG8abydpy$@1_s`Q$&DP{lkahG zvg=(G(7P&NFqxIpkkNdyIj0Gu?&KU!Cq~)H>p2@3%_bXg$p|Vlx-oW?d}RR9MIt~q F0|1PBMwI{n delta 234 zcmca5dRK(+G%qg~0}%9o>`7b1wvq2I6Vn5x&AiO9jEn~+XS3KdE||O;NH$D<4I~pL zYqQ#0I@Bb8u-h>yt;t{_UlHS?iH&o)QY2d#qNFROG^IByF&a5DHJ&X^%MmG z2~D;l9uT_>NZjHE*&7d0G`UbiL5LryJ03}}N`A7Un5Y0kRVX6^L-Fj%bA;q1K5%ey zO5flS>i6sPn_;@Ze1-P~C5tOOmXjaI>Tx?BP&^=fLCEzAkK5#hQu-W4aX|b0G-W1- zyUbxKnlSl;iyUL)WPaBwu1|cztO}pC_*tbV_qpmaPMN&NRYG$bP&LpdhGKCb@qw9< ak?}Tz*j)zM?<@(djMASNKx7d=P!0e|b8&b8`2V^mElzJDUlHS+iH&nvDkU|gHft~%IWzldN>5(mK1XIH zLlHkvT@f#cV1*GZKt^%RF9nJK delta 20 acmX@2bVP~!G%qg~0}%YZ+q03|QV;+_odz=i diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py index 7506328..bb879b9 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -338,4 +338,19 @@ def get_low_rating_items(self): }) return low_rating_items - + def add_moms_recipe(self, user_id, moms_recipe): + cursor = self.conn.cursor() + query = """ + INSERT INTO momsrecipe (UserID, MomsRecipe) + VALUES (%s, %s) + """ + try: + cursor.execute(query, (user_id, moms_recipe)) + self.conn.commit() + return "success" + except Exception as e: + print(f"An error occurred while adding mom's recipe: {e}") + self.conn.rollback() + return "error" + finally: + cursor.close() diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/server.py b/Final Project/Cafeteria_Recommnedation_system/Server/server.py index f0e15f3..49848a8 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/server.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/server.py @@ -67,7 +67,11 @@ def handle_client(self, client_socket): elif endpoint == "/update-user-profile": self.update_user_profile(client_socket, request) elif endpoint == "/view-low-rating-items": - self.view_low_rating_items(client_socket, request) + self.view_low_rating_items(client_socket, request) + elif endpoint == "/add-moms-recipe": + self.moms_recipe(client_socket,request) + elif endpoint == "/view-moms-recipe": + self.view_moms_recipe(client_socket,request) else: response = {"status": "failure", "message": "Invalid endpoint"} client_socket.sendall(json.dumps(response).encode()) @@ -82,6 +86,22 @@ def handle_client(self, client_socket): finally: client_socket.close() + + def moms_recipe(self, client_socket, request): + user_id = request.get("UserID") + moms_recipe = request.get("Recipe") + print(request) + try: + response = self.db_handler.add_moms_recipe(user_id, moms_recipe) + if response == "success": + response = {"status": "success", "message": "Mom's recipe successfully added"} + else: + response = {"status": "failure", "message": "Failed to add Mom's recipe"} + except Exception as e: + print(f"Error in moms_recipe: {e}") + response = {"status": "failure", "message": "An error occurred while adding Mom's recipe"} + client_socket.sendall(json.dumps(response).encode()) + def view_low_rating_items(self, client_socket, request): role_name = request.get("role_name") if role_name in ["Admin", "Chef"]: From 92a54af8bfca43fe556421d663af0b02500bc5f7 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Sun, 14 Jul 2024 08:23:45 +0530 Subject: [PATCH 16/24] View Moms Recipe --- .../__pycache__/food_menu.cpython-312.pyc | Bin 16350 -> 16907 bytes .../Client/menuItems/food_menu.py | 10 +++++++++ .../__pycache__/admin.cpython-312.pyc | Bin 2189 -> 2328 bytes .../__pycache__/chef.cpython-312.pyc | Bin 2492 -> 2625 bytes .../Client/userHandler/admin.py | 4 +++- .../Client/userHandler/chef.py | 4 +++- .../database_handler.cpython-312.pyc | Bin 18772 -> 19504 bytes .../Server/database_handler.py | 19 ++++++++++++++++++ .../Server/server.py | 7 +++++++ 9 files changed, 42 insertions(+), 2 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc index ecd15293581be333fb220200ab67656bc763c544..9057698d27f4eee81514f5713f044cb91c1c6b87 100644 GIT binary patch delta 1258 zcmZ9LUrbY17{Kq>TP~%ATIh9@u0XW~dKrlFM=9Dr8-E5{z=8a6T?8w=K%=y9S`|9t zh~nZh9v~-+yv(sIW+W~Xy;;J`5=oZ$u!q%TOH9?x7vJ`<;e!c@ao^X*W!X*6FW>q8 zp7Y)B{Qk-3OJM%FsK_YbS9g?8Txwl4hhT0s%1qWs$&wJV&RZ4v&eK+dV^=)Z*piV3 z!pUfClI_KSOn!TOdRmPoceUn%cfnMEIuY0NjKKfMU$A|dcMEWf9|#L##8`$>hj3~i zzhXH2(SME0F1;`>D5kztal?hEda-^wKAos%>UeZUWoC@ZNJ9yg^>k#*GAnA>LBgS| zZ6N2^Oq#<8-dkXA-9w4SC{Zp?%GMQ+M|#!R`2+v6crYZv5sSh@Yc;pzd(_8$ur7IgYW;bnHu1#~=9Qf4`d@4KELJwrmjsOKCaINEUVe!h~nrC%%y*({^ zHekcOk$OsV>7P(^5z(u@O{ejGdGJDyB4lqX-5c>hb;o-qUnS%KZfGyQWfr9qp&)dHr5W zmXRXSSWIQvB@r2M=Q*pYc>AOzp@^?00>C4| Q^g=(E2Q@nakrkrhA0fL@9smFU delta 914 zcmZ9KT}V@57{`6i^rX`**~+GqO^40qa+0_?x1|lgMJ2UW48M-s(MIk}-ffzb5c(qN zCVeh~=tAhis37dzltkc71yR&hFd^th3c9dvx{7)qtu8une!S=ZJpccD-shYfSK#BK z{q%90H>q zSQBACp_pLeaEQ!B>j1$|!MJS>!>k%CeKQgW>{E5)XziRoBso{f`LBGeEj2m&F(k&w ze>ZHlnRHRE^OxK`>o7)aXW^Fm%ofrVddX!Wv|_p43QZWWoA~5Hb_bu_qP-kC@Q!^6 z9;o)}1&!EBolUq_bFDDJmsw3R#rT1}&cmSKsIvx|amm>SFVqjt0RhgV!)4)-U9Kva z#<;6pOp|{BpST8KOV!rZ=T)ENN=DzGP%2K#Q*ugTF-c*Al&x)_`X@xxNP`CQ8@bMp z;X}neBJK@QeeXU5@LB!hna@2)VOcR6Qxuu)hVW)D&iS3XHBe diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py index b65b1e2..eaad724 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py @@ -37,6 +37,16 @@ def view_feedback(self): for item in response['feedback']: print(f"{item['FoodName']:<35} {item['UserName']:<25} {item['Rating']:<10} {item['Comment']:<70} {item['Date']:<20}") + def view_momsrecipe(self): + endpoint = "/view-moms-recipe" + data = {"role_name": self.role} + response = self.server_communicator.send_request(endpoint, data) + print(f"{'UserID':<10} {'UserName':<25} {'Recipe':<70}") + + for item in response['feedback']: + print(f"{item['UserID']:<10} {item['UserName']:<25} {item['Recipe']:<70}") + + def give_feedback(self): menu_item_id = input("Enter the Menu Item ID: ") rating = input("Enter your Rating (e.g., 4.5): ") diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc index 2df418f4e512640f8f1ddb0a77161020a227ad8e..fda9270a8fa48ec7a9be9e52c00e834a2d24c794 100644 GIT binary patch delta 352 zcmeAboFT+_nwOW00SLluCa3wZZshA=Vw^O2I@1Nl2a_|H?HLbDUI8Q*Onw0*8zyV8 z*s~_oFs5)%)?t=q6ra3+MaC-60Vu$et--)hWKhBgG71DzcvnN&j0`mlSrQOYWHL({ zs9ly(cJe+Jc{M(S>IsZJikkd>Rh(SmsX58{xv2`j7&WSxG!?6=Co{9gOIYYBgk`3d zEBNN;suwE+r6y+rGB#HD!9qK6whO6C?lR>#XI1xA@C|3gdJ0bBl|>$|n1< zMKUolPF~5T$@77MK{%Z03j+gh1k>ajY+V931VpCuP2{^Spm$L~@2Y^o?VvFlMk^wF^WxQ<%rcb0Qv#svtmgg@qw9@6K?7*n{jH5eF*3`!V5Izb?XXEl_~$WX(OB?b{iCbJ|bKVXq%l%D*LMP7{;p?U&i z52GfZUlk`;cxp~^er~G5FGh_jCQZevSPHH6GpYkz8p@BB9kX@#4_qle#apxD9Px?*x~Y( L0Yn!G0bK+DCWSi7 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 08088f5d77ee0419338029be138ed1b5243833b7..0c6ce0728ffc7ec6129ee3b8ce3f3f4be8e4388b 100644 GIT binary patch delta 361 zcmdlZd{Bh%G%qg~0|?kmPBUlQ$k)omB*r{>D$_-7#Tv#G_G}FXh9a5Ch0G=_6BzRt zCNF2UXM8aEIgmUsS)Ik6alzztAlWc^Ig34O0#F0*Y!S@J;DvW$w8ZCT~j1XeRbBpDedF!m&C3i?%Xa)qbnBovPYQjG%qg~0}wcEoRoH+bt7LZ6Vnx@$y1pwvNF^#rm#<5%Pc#&gISg-@4@7i z%=U~2Ccgxd3npu_*fTav&IFPPlUK6XTRH$0^JZ%>FccY-FoMhjffT;gP&Ok&4MUa` zL=>6KlAWB$D$6K8xt>*CjUSBJ~8c_(MAwh_=7AjcI;0*MdIjEszT85Hj_XnbLjWprcgF!{;=qKkxp FvH+YDMH&DA diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py index ac83e0e..db9d210 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/admin.py @@ -9,7 +9,7 @@ def __init__(self, id, name, role, server_communicator): def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") while True: - print("\n1. View Menu\n2. Add Menu Item\n3. Delete Menu Item\n4. Update Menu Item\n5. View Discard Item\n6. Exit") + print("\n1. View Menu\n2. Add Menu Item\n3. Delete Menu Item\n4. Update Menu Item\n5. View Discard Item\n6. View Mom's Recipes\n7. Exit") choice = int(input("Enter a choice : ")) if(choice == 1): self.food_menu.view_menu() @@ -22,6 +22,8 @@ def user_menu(self): elif(choice == 5): self.food_menu.view_low_rating_items() elif(choice == 6): + self.food_menu.view_momsrecipe() + elif(choice == 7): print("\nEXITING...Bye") self.server_communicator.close_connection() exit() diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py index 043cd1f..796b06a 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py @@ -9,7 +9,7 @@ def __init__(self, id, name, role, server_communicator): def user_menu(self): print(f"\nWelcome {self.name}({self.role})!") while True: - print("\n1. View Menu Item\n2. Roll Out Tomorrow's Menu\n3. View Yesterday's Vote \n4. Update Availability of Menu Item\n5. View Feedback\n6. View Discard Item\n7. Delete Menu Item\n8. Exit") + print("\n1. View Menu Item\n2. Roll Out Tomorrow's Menu\n3. View Yesterday's Vote \n4. Update Availability of Menu Item\n5. View Feedback\n6. View Discard Item\n7. Delete Menu Item\n8. View Mom's Recipes\n9. Exit") choice = int(input("Enter a choice : ")) if(choice == 1): self.food_menu.view_menu() @@ -26,6 +26,8 @@ def user_menu(self): elif choice == 7: self.food_menu.delete_menu_item() elif choice == 8: + self.food_menu.view_momsrecipe() + elif choice == 9: print("\nEXITING...Bye") self.server_communicator.close_connection() exit() diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc index 6c90447b4738f6808a6903fcb54347df24867d27..b19c8d6a9184f7a65d206c8067ef34e2a11a5ec6 100644 GIT binary patch delta 505 zcmcaIiE+aWM!wU$yj%=Gu+(~Tnym3ez9PmI6B`$ErAW0fM9EZ2YszfaV61f8{KJ8p zk*R9xWJeXz`XW6~7afICJ-@`P1o2%cANXZXcLfL+#Q4jiY8`Gjc!c_W zI(>TlZYU~W;E}r_A@_-al~;HI%MAgg>jIh=1vGESDJ?LZnSMh-WkKLV_8W34VD3kD z7Hy%g3@n1eADDsaKkzV!s9oSuE#e0{#7|Rp@)GxjibYd^oRthbX8?@v};QRuW`YoBY&6S84`G3CI+%j$a%$x%nxjIjMF Date: Mon, 15 Jul 2024 11:59:33 +0530 Subject: [PATCH 17/24] updated Complexity 1 --- .../__pycache__/admin.cpython-312.pyc | Bin 2328 -> 2326 bytes .../database_handler.cpython-312.pyc | Bin 19504 -> 19526 bytes .../Server/database_handler.py | 18 +++++++++++++----- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc index fda9270a8fa48ec7a9be9e52c00e834a2d24c794..625ea927ca5752a3e48662fd320e99b61f6e8c8b 100644 GIT binary patch delta 69 zcmbOsG);*2G%qg~0}!OxPEPaM$ZN{VSUK65HC`+%Gqqg7H$PXsSRp7iIkOB5E=KlHrY{T(ykVQY+0QZp0E(y+asU7T delta 52 zcmbOxG((8@G%qg~0}zDSOiuIJ$ZN{VSUuU9HJ;I8@&Z=z%{y4T7}>*_zA!NGMr`(E HKg$RJUFi+s diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/database_handler.cpython-312.pyc index b19c8d6a9184f7a65d206c8067ef34e2a11a5ec6..42845af8c67a82515cc9544ea7b18379833c9360 100644 GIT binary patch delta 300 zcmdlmgYno5M&8rByj%=G@L=zhH0zDLe;rMY85tP36o4Su)yLI2L;=hO@pJV&T@)OH z6?{|kN_^VkN)jlzR$Rd7V-~a#-W=$dh delta 136 zcmX>$gK@(QM&8rByj%=Gu+(~Tn(Rj2zmANulRt6`PmWeenS5A9V)A_z{mDYAX2M(w zP~hPh=IQ6I;8>PES;P4bJDVU+2kQsE$#Hx-o6TMBGO>j+GB6a+o-Cj!x!KtLC=+Aa h=AWJy8Ciu{6+UTAKJT5uU(Cv=_K5*R7V!fu1_187Cz=2N diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py index daadc66..9f0330f 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/database_handler.py @@ -320,11 +320,19 @@ def get_diet_preference(self, user_id): def get_low_rating_items(self): cursor = self.conn.cursor() query = """ - SELECT m.ID AS MenuItemID, m.Name AS MenuItem, AVG(f.Rating) AS AvgRating, f.Comment, m.MealTypeID - FROM feedback f - JOIN menuitem m ON f.MenuItemID = m.ID - GROUP BY f.MenuItemID, m.Name, f.Comment, m.MealTypeID - HAVING Avg(f.Rating) <= 2; + SELECT + m.ID AS MenuItemID, + m.Name AS MenuItem, + AVG(f.Rating) AS AvgRating, + m.MealTypeID + FROM + feedback f + JOIN + menuitem m ON f.MenuItemID = m.ID + GROUP BY + m.ID, m.Name, m.MealTypeID + HAVING + AVG(f.Rating) <= 2; """ cursor.execute(query) result = cursor.fetchall() From f865261698c1841eaaff633d4b7e57ed353d2c2d Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar Date: Mon, 15 Jul 2024 13:59:59 +0530 Subject: [PATCH 18/24] Refactor admin --- .../__pycache__/menu_manager.cpython-312.pyc | Bin 0 -> 3068 bytes .../__pycache__/menu_viewer.cpython-312.pyc | Bin 0 -> 2645 bytes .../Client/Modules/feedback_handler.py | 25 ++++++++ .../Client/Modules/menu_manager.py | 54 ++++++++++++++++++ .../Client/Modules/menu_viewer.py | 33 +++++++++++ .../Client/Modules/voting_handler.py | 0 .../__pycache__/admin.cpython-312.pyc | Bin 2326 -> 2465 bytes .../Client/userHandler/admin.py | 33 ++++++----- .../Server/server.py | 1 + 9 files changed, 131 insertions(+), 15 deletions(-) create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/voting_handler.py diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..048a5f9eabb629d1439df432a37a3393544a9b59 GIT binary patch literal 3068 zcmcImOKcNI7~Wm)+D>feVdwpT1xgZ=LL|x~rES_Y2_=-ch{u5_Vp%+sc2j$8X4kZF zZHWU1=TN}`2@W}MY{jLgKBOMF_u|Au>YA@WXaHzzo|34c$i%W?rwR8A){>RQg z|IYt?vp+>5%>s;XoqLPLpdkE)N^Qv7lV>VS?h8a9VoI17B;f;rNVf&zdnCCL^Ww4? zm!G1NNV+ChirdPw*I;sApu)UJgn5aGw}p8ht}!nYA4rABApOfq-0y_usF|D7P5ooa zl0MIBm<;vp?G(gn)WSKcGgH+~qE2N9b=AY59_H$4!_-sid6rqCNqb>RU!*o= zhOS+pn8>6=w~dUcS<9A9(+g86gPQijT!!RQ)LKYGd0N`7??`sp32K^Q8n&k8J3N&i zsabJXRy&AWLiNCjlKdp7Ry%r1@|R7|z$hf^HG_h+@Go>7toH@G?jz!(?Rio3Sf#pE z@>qR!tB=S5r0uOM|X)0Y{v#6wsV)*CLSx1=AukOMFmb< zD##>E{3Nof6#WHZsn(vJoh{)(HjIK&@Yfo(7$^itOD{x_R=$3#-Bb$)PaAq_)r-(Y zulB~<6Z!rb6V6_>KcVVkCPP#MPFywhG*wTj`4-oCo*7B5hvz8t&86imY7G0?X?p*{ z%;blsCof)liYMeK=PoCv&OGHl|MYAkF>~Q5e*S#Rm`=!HY@WlI!%-$l+A!maBPSr6 zqwpk7GiJa9v(rxS0`xg|MkjCTMoPbKqzrrcqOIFG%kf+8GhpSCNorY6APo{g2TLl3 zna$ablFMc(;|OuW7Bz{+=#3n;z>{T$X~%;MC7n&+!8iBddqz$ zD;?vdrp>m_a@SC$ZMdXt#(Ey?sl-M~!D?q$sks`8-I-XKsD%0-e6b!nRPF6sIa`f% z-nqJRwGtV8*u5SZX|(mMN8(^Bo&7a-09NVQ_tnhfzVel8<v4x(%QS`>*?l!&h&5_wfB`u+t%q(Ys_0q-(VI70k?Lx@ZQuRzF4yzyWn z-+ewsb&IONfdCW^lG$lQNBbC|DPYc>re-myH!iVmcwj4=xmh^;*=dGZSs#jij8GgO zbP*ds1LyBOINQrzZc7HRYczu}ym;6_6hj~^{IZ@dYjby?A*?jsXan9xYxH7r>lz5? zwP@!(S{^uF={iw~o-75bu^~9{fdk*1Tx)&n|7;1ff!cR(i5+V9#MVi^-abB$SFT&3 z9hUH;HH??i|NdQKz4RZp>r_peYT1x-Ni$Hr51KHvDg*5cOUMlkV+j${FyMMn>NM{! z_(_;Iab&xR>)F7=F92`OoxQxw8*feI_r0`N zO!p4ht!5&6|44AnGjAvI`QKgM`H) zkaeQyLD7H{KRbk0j*~&0Aw+f%6Ay5(uu-%kP@E>%s>ZkKguOfTAP7GsN06$zOx@;| z{ZANb^dc6m??BWs^lqi=y-IX)8$+8N-K$D@&(TWH8z8)H>_7AL_t44Y^B74^&dn=KB4=*8AqZJu;>`8ckH5}!re0-(6$ktk| z{|1_gcmV&~@XFIPr&-g|{O1nlVNJV{(^Ia8;lDK-M)5j|qaeN(IN$Sc$7Hmk!290n z0&!c|k|d>fD;QOVw?=}>@UxC~W!QZM1L3DuUa~T#`|1g>>@4>@__n)`2{sN6{GYI* XApY=)qWFst`cpb44sQt{_&a|AYoWe{ literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e609a0d428766c0e6181c093d3e966fbfa6b5de5 GIT binary patch literal 2645 zcmcJROKcNI7=ULVw%4(pmra`R%BFE?OqvIT1VmFHN!?q zB~lL@a-dRBD`A8X?#+mcZ%uFMEmALQnh0ylttW0JL8_Ef|9{pYCQykBEBW{QGyh{| z=bL}_51+4s!1K)dd92P!$ls`JK76UME<)o0QHa9CNrbTETcWUciNZZ&ZHovq!-V)( zsDz_-mo1r+vL1xS1EP`$qmT%zFn39W!x#}>;XpbR9;9=|5pr4;=hWoX<(PU$)uUWl zFwBK|X*RRWERo(0&$6IxW+O8s#DqhvgFni%bm$JAtM^qi(l#Z_Z80jray>GIkqW-LLHV#!!alG6UI zb+>PJ;+%{c5I>M&bI&}#B8bI6{XGApdmTDS^zDj4@xYJ19~OFHx0pFbfwwY_hTEPP zGlwIk-76m)ca&>(8{Ra#xzlr83SSm|6i(qE@rpxnDlYmjC~o>+p?Dtgk6q77vt!6C zr+6E{XMkKiK*$_F%PSSAE56$;@cLP$GRY`abB?XpV8KxfngKK?)o32j1gg<&vyScA z?sf4(J`iJiiEG+a^tp3Njaff?CF6t+uOath!!7)jt#E2tJ`u6>9Hub4|H0! zebaI*F5ig7W2u>oDLFM|q`BUMofeO=Ug5$lZbUUKHmp76DL<4X%WJ4fMbg#DDb+|> zjtM=MOog1ffDQr-O=!?z@j!@d3A$=bXh}o0_!xjIs^MYF;=HW&ZbeBcfYgiVtQ{iI$rOjX{K~!s)sW z+~KykcBf5;vXZ>nhO8L64{R-`LD95a##A(_8ipmD1l|#89gBuug+{*fPy*$6`~r2? z{n%Fx@gzH*MB`cRzUiB`McN4`p#9)j`ty@;22@2%X(Cj(=q(YPMB7QEPDe${m4LMJ zO;yLaKXp*h_1&0z4~o4g8bKIXSITJKLAl*Ni?q0%?CloS80!fLq`dWGDKC2b3#SU6 zJ=uomp8ZH^B+HqBV74!-<)h{oN6p%=SG>K&deLm^D%2lZBaCm5S>Rt*@5lr);XtW?FVV;dG77Y(h&IZMqtbO{gVYFTs6$ zdVnHmvngN?@`}~9+j7DU3f7<;?zDt4RaI`t(c6?QeLwE}Hj1k3>IZr3H0hn&`N28Z zW4qA*ClE-^zKtlVUd7&~RXDf1DW@ATgGGD*goUb%1kFN+Puq;Ljffhi@L~U(5EJftDPT3+B>={YMwO%+T@0$)&*3t>5>WLl?~x!)EQJRqtis2mB~4;gAcz z2JnWGB&$M_67-7!+FnVToRZ`Ah>qWDI_wwGTT#G;N}duLfnF3kkG&}HdN=S~-X&`+ z>u6XLT#oC^TCLl0j#;mBI!bw|EqpBTBy}L04)?*rRL+G`qa!fxAeR%m90TBOi U48#0IJpZzd%oS#hprl^^0Uhy>o&W#< literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py new file mode 100644 index 0000000..da4acd2 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py @@ -0,0 +1,25 @@ +import json +class FeedbackHandler: + def __init__(self, server_communicator, user_id): + self.server_communicator = server_communicator + self.user_id = user_id + + def give_feedback(self): + menu_item_id = input("Enter the Menu Item ID: ") + rating = input("Enter your Rating (e.g., 4.5): ") + comment = input("Enter your Comment: ") + + endpoint = "/give-feedback" + data = { + "UserID": self.user_id, + "MenuItemID": int(menu_item_id), + "Rating": float(rating), + "Comment": comment, + "RoleName": "Employee" + } + + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py new file mode 100644 index 0000000..3f18ead --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py @@ -0,0 +1,54 @@ +import json +class MenuManager: + def __init__(self, server_communicator, role): + self.server_communicator = server_communicator + self.role = role + + def add_food_item(self): + food_name = input("Enter the food item name : ") + price = input("Enter Price : ") + mealtype = input("Meal Type : ") + mealtypeid = 0 + if mealtype.upper() == "BREAKFAST": + mealtypeid = 1 + elif mealtype.upper() == "LUNCH": + mealtypeid = 2 + elif mealtype.upper() == "DINNER": + mealtypeid = 3 + + endpoint = "/add-menu-item" + data = {"Name": food_name, "Price": price, "MealTypeID": mealtypeid, "RoleName": "Admin", "AvailabilityStatus": 1} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def delete_menu_item(self): + item_id = int(input("Please enter food ID : ")) + endpoint = "/delete-menu-item" + data = {"RoleName": "Admin", "MenuItemID": item_id} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def update_menu_item(self): + item_id = int(input("Please enter food ID to Update : ")) + endpoint = "/update-menu-item" + new_price = int(input("Enter new price : ")) + availability = input("Enter availability (Yes or No)") + if availability.upper() == "YES": + availability = 1 + elif availability.upper() == "NO": + availability = 0 + else: + print("Invalid Input") + return + data = {"RoleName": "Admin", "MenuItemID": item_id, "Price": new_price, "AvailabilityStatus": availability} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py new file mode 100644 index 0000000..561a5c7 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py @@ -0,0 +1,33 @@ +import json +class MenuViewer: + def __init__(self, server_communicator, role): + self.server_communicator = server_communicator + self.role = role + + def view_menu(self): + endpoint = "/food_menu" + data = {"role_name": self.role} + response = self.server_communicator.send_request(endpoint, data) + print(f"{'ID':<5} {'Name':<35} {'Price':<10} {'AvailabilityStatus':<20}") + for item in response['menu']: + availability = "Yes" if item['AvailabilityStatus'] == 1 else "No" + print(f"{item['ID']:<5} {item['Name']:<35} {item['Price']:<10} {availability:<20}") + + def view_low_rating_items(self): + endpoint = "/view-low-rating-items" + data = {"role_name": self.role} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(f"{'FoodName':<35} {'OverallRating':<10}") + for item in response['low_rating_items']: + print(f"{item['FoodName']:<35} {item['AvgRating']:<10.2f}") + else: + print("Failed to fetch low rating items: ", response["message"]) + + def view_momsrecipe(self): + endpoint = "/view-moms-recipe" + data = {"role_name": self.role} + response = self.server_communicator.send_request(endpoint, data) + print(f"{'UserID':<10} {'UserName':<25} {'Recipe':<70}") + for item in response['feedback']: + print(f"{item['UserID']:<10} {item['UserName']:<25} {item['Recipe']:<70}") diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/voting_handler.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/voting_handler.py new file mode 100644 index 0000000..e69de29 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc index 625ea927ca5752a3e48662fd320e99b61f6e8c8b..094d5d736ad1963dda7c6a0084a6d4cd5177c310 100644 GIT binary patch delta 906 zcma)4K}Zx)7=CZ}&FtVd>(gCJ+f`S=Y!^{iWl1tKDDAT0!2-n?mYuOiW>?~8h5%W2MIX$TnM^Y3$r%x#g5m=ss$b_Le{w(W2x#zY(xL%`k%Kel*Zc=oR zsTpIAM^_z`OJ_CWrxZRN<-g>9;EI~nbFHPqT-m(L%;6)jE6GbfOR8R}Tp4=awHfQ# zmM-mvn>NpNuXSy7uXk^SuPvf&sd_ikym|iO+R(=E`tVj{U=i6;4SnD_f&u#0o1m|} z0fr73`s|`4O3-H1NS9C@y@MKI4gH8B^d)MlI?HtbI^(sBt%db(exOcRjvZl==(#C^ zSr~gopI9#tnPIAkqp*U$6YHu1%yq=f-3dLTnS2n@C<)T9V!g;GU4 zIBwy%jazmq&a5OJhj(zOfEz5_P{3^#ZnJUXU!udp9X9UzFQTZCv~beK7fxo#MW)@t z?KbY9pL|IeqG2gM%tu1v`~|Y2WQ??FW;DZ4lo%wHynDz@9|`g(U&-)QFw2=aTmbtX zuW%h6l${p(AqkZt*ap#OQuV`7YC@ehG_&>Odblg&1plCpmx)()bzXyFF)n;0^<>>L ly`+=5ydyKh%r`HDa1S)>ftEcG-$xPH4;Qa~2mE%ke*zao?}7jT delta 810 zcma)4Jxo(k6u$TU^%e8lO97?9@)ry(Aq51PiqXVW#X!L5LNqT;-zAp3zLNV|lA0!% z$WRA{dW|wT;NW0fG!Cvc4h}9f+CW}lbZ{}opdn12+opp|p5dH(&i&r`zL)#G=y)13 zJ{v|Gg0N=z@@&NjB1_&tmO}AsS==MEq!iVd_FWuf*i&x1ltI;#xtuje zokHcwUA$KLHMd?uE4l#v8?7xRWU8&3A}pGZX`bp9Rw?sz)66)TylFB85T3$vHua>8 z<@uL^!^{E+fEAb8%j{GG;iR&Z3He?Js9B@TOy~FyygBEG+5Ny}E1PlRt*wIA9fx%E z0PX9>BVSGL-U@Bq+Me2pCBEu2`{99|!3%Hl?~8AX)uB(rABMk#XUocFfbUAjydrnv zAWx`gHK$s_md?v^gnyHJ)otkfjqaS%%O5I(oI?Ew^(9nU9qQ@^&J(fH1FIr9@@`3; z#KEAauCk1iX90k*HvU}e<5ler@I`#RT?Pz2EqyPSNmEyXroW%H^95g@CjQcuc)_=@ z{wz=l?2>4WMC)W^ul>x{#N(bl(%Br3*2rj`#7~aLYGkZVCjN6gRU=b%GJO&quaS72 z;BmgFPva0T>m%zz7K;kihH0kll Date: Mon, 15 Jul 2024 15:13:51 +0530 Subject: [PATCH 19/24] Refactor client --- .../feedback_handler.cpython-312.pyc | Bin 0 -> 2360 bytes .../__pycache__/menu_manager.cpython-312.pyc | Bin 3068 -> 4751 bytes .../__pycache__/menu_viewer.cpython-312.pyc | Bin 2645 -> 2650 bytes .../roll_out_manager.cpython-312.pyc | Bin 0 -> 2611 bytes .../__pycache__/user_manager.cpython-312.pyc | Bin 0 -> 3032 bytes .../voting_handler.cpython-312.pyc | Bin 0 -> 3954 bytes .../Client/Modules/feedback_handler.py | 15 +- .../Client/Modules/menu_manager.py | 57 ++- .../Client/Modules/menu_viewer.py | 2 +- .../Client/Modules/roll_out_manager.py | 43 ++ .../Client/Modules/user_manager.py | 85 ++++ .../Client/Modules/voting_handler.py | 67 ++++ .../__pycache__/food_menu.cpython-312.pyc | Bin 16907 -> 0 bytes .../Client/menuItems/food_menu.py | 379 ------------------ .../__pycache__/admin.cpython-312.pyc | Bin 2465 -> 2498 bytes .../__pycache__/chef.cpython-312.pyc | Bin 2625 -> 3706 bytes .../__pycache__/employee.cpython-312.pyc | Bin 2778 -> 3709 bytes .../Client/userHandler/admin.py | 4 +- .../Client/userHandler/chef.py | 33 +- .../Client/userHandler/employee.py | 26 +- 20 files changed, 308 insertions(+), 403 deletions(-) create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/roll_out_manager.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/user_manager.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/voting_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/roll_out_manager.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py delete mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc delete mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b1def4f5be0a7fdb3931dbb17f79338863f0da6 GIT binary patch literal 2360 zcmaJ?O>7fK6rTODy>T3p*dcKOfh|8JZomnYKtQMhC2@mPBA|eTFzm1{524?gQg7n=U`>X>Ji-WbS(HRP`V?XQKElEi-kXu+X1SR7 zCsQWUp2?Hky0W$l2J?uZB!^Lw$J~9C6j+R;hy{?oSuy5wS`&oen`-*@xT@nUq3QYt zSQM5@fNw1hVjdN_B2r-FwW0u8JsB$UpsjBWp;;8;CSrmUF$tX^R7o4TTtU~;s%20o zPynlA?tramJo)n(YBJYrztsfR#4-N{y(K#3EEvm5YSs)d^ND&CnHd*0e}2HImhcZl%r{xR51gYI6Pj$}R5# z;`v!eQWQU#-NUZMjDom_YI~2B#b=US>)KToAB1Wh(X#ku(;E0tx^X|C zumifc*#XvhWHo%4d$K+*aht4s!^&^63Jt4(#gbS=nZ~WNj9#+G^`?Le~*A-Ew@BSwpp4R68M)=vbj-x`G7XLUy^Qf2DKBLgMQjV7?aJ^SasJ7A%Xe+E7RIMWnwP>32a z;%2uG;TE^whFc$r-#2Zb9AdSxSfl9r074~kBUVwwJ~xXS5j4rw+_<0xUCoUSTFBMh z9H4D;wJn(*92Oa;8ob8skUPv~)=$Pb7mG{)31&2MXM+Sy?B!K-05$D^>2x~?M@kq5 zW02PZpUg>_cEZw_=sooAlivddx`SDLE+gn}W{{cq0E8nlZkViuo3YN$^B%0f<=zQv z&Hq5aTg{+cYumAK>4&S|UbR~fl*L-4>z$Z=xfQd?MZxaaw|HhTvlOxS4=r6-`l2E% z>6J4T%|8EmMX@hkwy&h@>o@GnsvW-hER?QA<;9+A^x!JuS`z$2aiwkhLdQa;+8ukm z7s&NkT@sg))xp!1h&?b?xlplw9{=gCedVg1NZQG3cIt+$W~!;%cGj@3+Y|gZL4-i`_?tvfr{R7|%?GgZpTe7ku5T!LaYZ zT3^sN#(C4(%oy*88Pm|cWk82bq25TRy!4;Y!{A_lK$C&-mB4Y_Z>afSejhi+ts*Af Gi2nlsPDup- literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-312.pyc index 048a5f9eabb629d1439df432a37a3393544a9b59..56563a6f58360e55910703c0e87e3937c001be37 100644 GIT binary patch delta 2019 zcmaJ?O>7%g5Z>qgx1HFv^Vi00Hi5)hLYkCTZHW-2sv}`R!k;)$iCQMRX*P8>=Iy2s z%a(hH(1HrZ+DfGoh!%-Ml?zfO)B}eKj$9HYQmv&zJ#a>8dO(UeFteM)PKx>@fBSa+ z-preC$NzR->u>$Nr6tV3`tI-R)0tSU^*kA^8T~yPzr>suH33js6jjNKOz7sqMBdC_ z)aevgyWK{P)_(47FSBJP7s3Fz78#XHs%-7g?g39+uymR;G?nu>OD{}Q0Su^!AOTn$ zfa1oypgUqt?wl2wu%Z#xg(+h3EdRGB4o=Q zl(T?T?yttc*9%R)Me!cDTC(Qle8JF^tXW*Jsh>ILXHH)LJ?%g^h_E;LI|3a-sh|82 z+$jjVWvHTG0eumrn7t>P`X{*}bvwd|&PFBJA-@u=#XS=~P6k{nd_NTh`4j=zSy(a) zzb6^u-sVTUY<%&T#x8FgR@gG@zAYV&ahC?+SXSdJtl1aHjtSc`5oA#t&kek#9d81J z(&REJvs(CDw!*o$q~R*JyiKwQBgGmqK+}Sn=19-hs;!fB1UyQ~k%gj` zxAo!t<-AeIe^fB+MLG%^dJMtu7JUh~m^l6oC>eBx-h@JpbRoK@BdJ>~F zt{?jqTz|l%M37BxI~(I%!CovKX=eRC1JJ(=F{~c}t}qW1?br2{)S0!8*VYne9kHGq zbR_qOa3U=;0#032avv9Nt>Hs-E|+MBo}lm$)nxg>3KX}4O?$WL+UnOZeGSvoOp+B#M2 z8C{v1pG#W`)u)W2t_&8bZdr=2tt#{8l&;wG%Cun`){HvlF4j2?_g?dMCy({&-d{cfba`CXkfoof8z>(_7&Iie% z)#T8F3d!GPplP)J#I~M7$Mqp22iZOH;;S|Cc!Z^SkhN7+i z%~Jeue834|DF92%W{Bl`Hp2-%y*VfWv>gB#0C+Nx;?sdM`l%skkTq`xL9!s(4vf=d nOL}E)URx;WuhKW*6-j8}AH)Vr2>FAF{1cicB)!QX`fmRLomj7+ delta 749 zcmZ8fJ#W)c6!mlL_#;Y0(v~!o4@=Y-0|E(91rq9nkUTUDEQrOj;umD(k8&dKH@b9U^{dJv9*ag%KMGE@rbBiMV2aR@;Kj zy0%y>q#U+5xV-@QD_jKjr1r@;u&=fEA#DssJEiTAB21zZeW86cq?fOvu_o~*cYMp NUA)e$iGWa&egO@bp40#U diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-312.pyc index e609a0d428766c0e6181c093d3e966fbfa6b5de5..bc5a21f6739cfdf984298bed6f919ee095a67dc5 100644 GIT binary patch delta 115 zcmcaAa!Z8wG%qg~0}$MJHziGIBQGxpBlqMvOe&M@IfUhT{Hg@?%Q92Tb#wD`i*<`q zlQRoai+F*mi}--VP}E|ZsVG{}fdNS?qoLve=Jg5nF(+A9oKL~KZ2 R;dg=0`U;25W(Q7DMgXtvBl-XU delta 107 zcmca5a#e))G%qg~0}!mfH6=}KBQGz<}LlA}RJVutbrz8Q%NxK*OeD+s3 L95%ahiZTKK`$-~t diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/roll_out_manager.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/roll_out_manager.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..698cbf65ce46ed2445069042156095a5fa5308c8 GIT binary patch literal 2611 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 literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py index da4acd2..dd7939d 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/feedback_handler.py @@ -1,8 +1,9 @@ import json class FeedbackHandler: - def __init__(self, server_communicator, user_id): + def __init__(self, server_communicator, role, user_id): self.server_communicator = server_communicator self.user_id = user_id + self.role = role def give_feedback(self): menu_item_id = input("Enter the Menu Item ID: ") @@ -23,3 +24,15 @@ def give_feedback(self): print(response["message"]) else: print(response["message"]) + + def view_feedback(self): + endpoint = "/view-feedback" + data = {"role_name": self.role} + response = self.server_communicator.send_request(endpoint, data) + + if response["status"] == "success": + print(f"{'FoodName':<35} {'UserName':<25} {'Rating':<10} {'Comment':<70} {'Date':<20}") + for item in response['feedback']: + print(f"{item['FoodName']:<35} {item['UserName']:<25} {item['Rating']:<10} {item['Comment']:<70} {item['Date']:<20}") + else: + print("Failed to fetch feedback: ", response["message"]) \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py index 3f18ead..37e48a5 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_manager.py @@ -1,10 +1,11 @@ import json class MenuManager: - def __init__(self, server_communicator, role): + def __init__(self, server_communicator, role, user_id): self.server_communicator = server_communicator self.role = role + self.user_id = user_id - def add_food_item(self): + def add_menu_item(self): food_name = input("Enter the food item name : ") price = input("Enter Price : ") mealtype = input("Meal Type : ") @@ -52,3 +53,55 @@ def update_menu_item(self): print(response["message"]) else: print(response["message"]) + + def update_availabilty(self): + item_id = int(input("Please enter food ID to Update : ")) + endpoint = "/update-availablity" + availability = input("Enter availability (Yes or No)") + if availability.upper() == "YES": + availability = 1 + elif availability.upper() == "NO": + availability = 0 + else: + print("Invalid Input") + return + data = {"RoleName": "Chef", "MenuItemID": item_id, "AvailabilityStatus": availability} + + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def add_moms_recipe(self): + print("Enter the mom's recipe (press Enter once to finish):") + recipe = [] + + # Continuous input until single Enter is pressed + while True: + line = input() + if line == "": # Check if the line is empty + break + recipe.append(line) + + recipe_text = "\n".join(recipe) # Join lines into a single string + + print("\nRecipe entered:") + print(recipe_text) # Print the recipe back to the user + + data = { + "UserID": self.user_id, + "Recipe": recipe_text, + "RoleName": self.role + } + + endpoint = "/add-moms-recipe" + response = self.server_communicator.send_request(endpoint, data) + + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + + diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py index 561a5c7..bd500c2 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/menu_viewer.py @@ -28,6 +28,6 @@ def view_momsrecipe(self): endpoint = "/view-moms-recipe" data = {"role_name": self.role} response = self.server_communicator.send_request(endpoint, data) - print(f"{'UserID':<10} {'UserName':<25} {'Recipe':<70}") + print(f"{'ID':<10} {'UserName':<25} {'Recipe':<70}") for item in response['feedback']: print(f"{item['UserID']:<10} {item['UserName']:<25} {item['Recipe']:<70}") diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/roll_out_manager.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/roll_out_manager.py new file mode 100644 index 0000000..a7b3025 --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/roll_out_manager.py @@ -0,0 +1,43 @@ +import json +class RolloutManager: + def __init__(self, server_communicator, role, user_id): + self.server_communicator = server_communicator + self.role = role + self.user_id = user_id + + def get_recomendation(self): + endpoint = "/view-recomendation" + data = {"RoleName": self.role} + response = self.server_communicator.send_request(endpoint, data) + print("\nBreakfast Recommendations\n") + print(f"{'ID':<5} {'Name':<35}") + + food_id_for_roll_out = {"Breakfast": [], "Lunch": [], "Dinner": []} + for item in response['recomendations']['Breakfast']: + print(f"{item['ID']:<5} {item['Name']:<35}") + + food_id_for_roll_out["Breakfast"] = input("Enter the Two ID for breakfast: ").split() + + print("\nLunch Recommendations") + for item in response['recomendations']['Lunch']: + print(f"{item['ID']:<5} {item['Name']:<35}") + + food_id_for_roll_out["Lunch"] = input("Enter the ID for Lunch: ").split() + + print("\nDinner Recommendations") + for item in response['recomendations']['Dinner']: + print(f"{item['ID']:<5} {item['Name']:<35}") + + food_id_for_roll_out["Dinner"] = input("Enter the ID for Dinner: ").split() + + return food_id_for_roll_out + + def roll_out_menu(self): + food_id_for_roll_out = self.get_recomendation() + endpoint = "/roll-out" + data = {"data": food_id_for_roll_out} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py new file mode 100644 index 0000000..ee4f22a --- /dev/null +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py @@ -0,0 +1,85 @@ +import json + +class UserManager: + def __init__(self, server_communicator, role, user_id): + self.server_communicator = server_communicator + self.role = role + self.user_id = user_id + + def update_user_profile(self): + endpoint = "/update-user-profile" + # Diet Preference + print("Please select one:") + print("1. Vegetarian") + print("2. Non Vegetarian") + print("3. Eggetarian") + diet_preference_choice = int(input("Enter choice (1/2/3): ")) + if diet_preference_choice == 1: + new_dietpreference = "Vegetarian" + elif diet_preference_choice == 2: + new_dietpreference = "Non Vegetarian" + elif diet_preference_choice == 3: + new_dietpreference = "Eggetarian" + else: + print("Invalid Input") + return + + # Spice Level + print("Please select your spice level:") + print("1. High") + print("2. Medium") + print("3. Low") + spice_level_choice = int(input("Enter choice (1/2/3): ")) + if spice_level_choice == 1: + new_spicelevel = "High" + elif spice_level_choice == 2: + new_spicelevel = "Medium" + elif spice_level_choice == 3: + new_spicelevel = "Low" + else: + print("Invalid Input") + return + + # Cuisine Preference + print("What do you prefer most?") + print("1. North Indian") + print("2. South Indian") + print("3. Other") + cuisine_preference_choice = int(input("Enter choice (1/2/3): ")) + if cuisine_preference_choice == 1: + new_cuisinepreference = "North Indian" + elif cuisine_preference_choice == 2: + new_cuisinepreference = "South Indian" + elif cuisine_preference_choice == 3: + new_cuisinepreference = "Other" + else: + print("Invalid Input") + return + + # Sweet Tooth + print("Do you have a sweet tooth?") + print("1. Yes") + print("2. No") + sweet_tooth_choice = int(input("Enter choice (1/2): ")) + if sweet_tooth_choice == 1: + new_sweettooth = 1 + elif sweet_tooth_choice == 2: + new_sweettooth = 0 + else: + print("Invalid Input") + return + + data = { + "RoleName": "Employee", + "UserId": self.user_id, + "DietPreference": new_dietpreference, + "SpiceLevel": new_spicelevel, + "CuisinePreference": new_cuisinepreference, + "SweetTooth": new_sweettooth + } + print(data) + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) \ No newline at end of file diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/voting_handler.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/voting_handler.py index e69de29..17b4b62 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/voting_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/voting_handler.py @@ -0,0 +1,67 @@ +import json + +class VotingHandler: + def __init__(self, server_communicator, role, user_id): + self.server_communicator = server_communicator + self.role = role + self.user_id = user_id + + def view_voting_items(self): + endpoint = "/voting-items" + data = {"UserID": self.user_id} + response = self.server_communicator.send_request(endpoint, data) + response = response["data"] + voting_items = {"Breakfast": [], "Lunch": [], "Dinner": []} + + print("Breakfast Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35}") + for item in response['Breakfast']: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35}") + voting_items['Breakfast'].append(item) + + print("Lunch Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35} ") + for item in response['Lunch']: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} ") + voting_items['Lunch'].append(item) + + print("Dinner Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35}") + for item in response['Dinner']: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} ") + voting_items['Dinner'].append(item) + + return voting_items + + def vote_for_menu(self): + voting_items = self.view_voting_items() + votes = {} + for meal_type in ["Breakfast", "Lunch", "Dinner"]: + valid_choices = [str(item['MenuItemID']) for item in voting_items[meal_type]] + while True: + menu_item_id = input(f"Enter the ID for {meal_type} ({', '.join(valid_choices)}): ") + if menu_item_id in valid_choices: + votes[meal_type] = menu_item_id + break + else: + print(f"Incorrect choice. Please enter a valid ID for {meal_type} ({', '.join(valid_choices)}).") + + endpoint = "/voting" + data = {"employee_id": self.user_id, "data": votes} + response = self.server_communicator.send_request(endpoint, data) + if response["status"] == "success": + print(response["message"]) + else: + print(response["message"]) + + def view_yesterday_voting(self): + endpoint = "/voting-items" + data = {} + response = self.server_communicator.send_request(endpoint, data) + categorized_items = response['data'] + + for meal_type, items in categorized_items.items(): + print(f"\n{meal_type} Recommendations") + print(f"{'MenuItemID':<10} {'Name':<35} {'Votes':<5}") + for item in items: + print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} {item['Votes']:<5}") diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/__pycache__/food_menu.cpython-312.pyc deleted file mode 100644 index 9057698d27f4eee81514f5713f044cb91c1c6b87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16907 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 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py b/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py deleted file mode 100644 index eaad724..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/Client/menuItems/food_menu.py +++ /dev/null @@ -1,379 +0,0 @@ -import json - -class FoodMenu: - def __init__(self, server_communicator, role, user_id): - self.server_communicator = server_communicator - self.role = role - self.user_id = user_id - - def view_low_rating_items(self): - endpoint = "/view-low-rating-items" - data = {"role_name": self.role} - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(f"{'FoodName':<35} {'OverallRating':<10}") - for item in response['low_rating_items']: - print(f"{item['FoodName']:<35} {item['AvgRating']:<10.2f}") - else: - print("Failed to fetch low rating items: ", response["message"]) - - def view_menu(self): - endpoint = "/food_menu" - data = {"role_name": self.role} - response = self.server_communicator.send_request(endpoint, data) - - print(f"{'ID':<5} {'Name':<35} {'Price':<10} {'AvailabilityStatus':<20}") - - for item in response['menu']: - availability = "Yes" if item['AvailabilityStatus'] == 1 else "No" - print(f"{item['ID']:<5} {item['Name']:<35} {item['Price']:<10} {availability:<20}") - - def view_feedback(self): - endpoint = "/view-feedback" - data = {"role_name": self.role} - response = self.server_communicator.send_request(endpoint, data) - print(f"{'FoodName':<35} {'UserName':<25} {'Rating':<10} {'Comment':<70} {'Date':<20}") - - for item in response['feedback']: - print(f"{item['FoodName']:<35} {item['UserName']:<25} {item['Rating']:<10} {item['Comment']:<70} {item['Date']:<20}") - - def view_momsrecipe(self): - endpoint = "/view-moms-recipe" - data = {"role_name": self.role} - response = self.server_communicator.send_request(endpoint, data) - print(f"{'UserID':<10} {'UserName':<25} {'Recipe':<70}") - - for item in response['feedback']: - print(f"{item['UserID']:<10} {item['UserName']:<25} {item['Recipe']:<70}") - - - def give_feedback(self): - menu_item_id = input("Enter the Menu Item ID: ") - rating = input("Enter your Rating (e.g., 4.5): ") - comment = input("Enter your Comment: ") - - endpoint = "/give-feedback" - data = { - "UserID": self.user_id, - "MenuItemID": int(menu_item_id), - "Rating": float(rating), - "Comment": comment, - "RoleName": "Employee" - } - - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def get_recomendation(self): - endpoint = "/view-recomendation" - data = {"RoleName": self.role} - response = self.server_communicator.send_request(endpoint, data) - print("\nBreakfast Recommendations\n") - print(f"{'ID':<5} {'Name':<35}") - - food_id_for_roll_out = {"Breakfast": [], "Lunch": [], "Dinner": []} - for item in response['recomendations']['Breakfast']: - print(f"{item['ID']:<5} {item['Name']:<35}") - - food_id_for_roll_out["Breakfast"] = input("Enter the Two ID for breakfast: ").split() - - print("\nLunch Recommendations") - for item in response['recomendations']['Lunch']: - print(f"{item['ID']:<5} {item['Name']:<35}") - - food_id_for_roll_out["Lunch"] = input("Enter the ID for Lunch: ").split() - - print("\nDinner Recommendations") - for item in response['recomendations']['Dinner']: - print(f"{item['ID']:<5} {item['Name']:<35}") - - food_id_for_roll_out["Dinner"] = input("Enter the ID for Dinner: ").split() - - return food_id_for_roll_out - - def roll_out_menu(self): - food_id_for_roll_out = self.get_recomendation() - endpoint = "/roll-out" - data = {"data": food_id_for_roll_out} - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def add_food_item(self): - food_name = input("Enter the food item name : ") - price = input("Enter Price : ") - mealtype = input("Meal Type : ") - mealtypeid = 0 - if mealtype.upper() == "BREAKFAST": - mealtypeid = 1 - elif mealtype.upper() == "LUNCH": - mealtypeid = 2 - elif mealtype.upper() == "DINNER": - mealtypeid = 3 - - endpoint = "/add-menu-item" - data = { "Name": food_name, "Price": price, "MealTypeID": mealtypeid, "RoleName": "Admin", "AvailabilityStatus": 1} - - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def delete_menu_item(self): - self.view_menu() - item_id = int(input("Please enter food ID : ")) - endpoint = "/delete-menu-item" - data = {"RoleName": "Admin", "MenuItemID": item_id} - - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def update_menu_item(self): - self.view_menu() - item_id = int(input("Please enter food ID to Update : ")) - endpoint = "/update-menu-item" - new_price = int(input("Enter new price : ")) - availability = input("Enter availability (Yes or No)") - if availability.upper() == "YES": - availability = 1 - elif availability.upper() == "NO": - availability = 0 - else: - print("Invalid Input") - return - data = {"RoleName": "Admin", "MenuItemID": item_id, "Price": new_price, "AvailabilityStatus": availability} - - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def update_availabilty(self): - self.view_menu() - item_id = int(input("Please enter food ID to Update : ")) - endpoint = "/update-availablity" - availability = input("Enter availability (Yes or No)") - if availability.upper() == "YES": - availability = 1 - elif availability.upper() == "NO": - availability = 0 - else: - print("Invalid Input") - return - data = {"RoleName": "Chef", "MenuItemID": item_id, "AvailabilityStatus": availability} - - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def view_voting_items(self): - endpoint = "/voting-items" - data = {"UserID": self.user_id} - response = self.server_communicator.send_request(endpoint, data) - response = response["data"] - voting_items = {"Breakfast": [], "Lunch": [], "Dinner": []} - - print("Breakfast Recommendations") - print(f"{'MenuItemID':<10} {'Name':<35}") - for item in response['Breakfast']: - print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35}") - voting_items['Breakfast'].append(item) - - print("Lunch Recommendations") - print(f"{'MenuItemID':<10} {'Name':<35} ") - for item in response['Lunch']: - print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} ") - voting_items['Lunch'].append(item) - - print("Dinner Recommendations") - print(f"{'MenuItemID':<10} {'Name':<35}") - for item in response['Dinner']: - print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} ") - voting_items['Dinner'].append(item) - - return voting_items - - def vote_for_menu(self): - voting_items = self.view_voting_items() - votes = {} - for meal_type in ["Breakfast", "Lunch", "Dinner"]: - valid_choices = [str(item['MenuItemID']) for item in voting_items[meal_type]] - while True: - menu_item_id = input(f"Enter the ID for {meal_type} ({', '.join(valid_choices)}): ") - if menu_item_id in valid_choices: - votes[meal_type] = menu_item_id - break - else: - print(f"Incorrect choice. Please enter a valid ID for {meal_type} ({', '.join(valid_choices)}).") - - endpoint = "/voting" - data = {"employee_id": self.user_id, "data": votes} - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def view_yesterday_voting(self): - endpoint = "/voting-items" - data = {} - response = self.server_communicator.send_request(endpoint, data) - categorized_items = response['data'] - - for meal_type, items in categorized_items.items(): - print(f"\n{meal_type} Recommendations") - print(f"{'MenuItemID':<10} {'Name':<35} {'Votes':<5}") - for item in items: - print(f"{item['MenuItemID']:<10} {item['MenuItemName']:<35} {item['Votes']:<5}") - - - def update_user_profile(self): - endpoint = "/update-user-profile" - # Diet Preference - print("Please select one:") - print("1. Vegetarian") - print("2. Non Vegetarian") - print("3. Eggetarian") - diet_preference_choice = int(input("Enter choice (1/2/3): ")) - if diet_preference_choice == 1: - new_dietpreference = "Vegetarian" - elif diet_preference_choice == 2: - new_dietpreference = "Non Vegetarian" - elif diet_preference_choice == 3: - new_dietpreference = "Eggetarian" - else: - print("Invalid Input") - return - - # Spice Level - print("Please select your spice level:") - print("1. High") - print("2. Medium") - print("3. Low") - spice_level_choice = int(input("Enter choice (1/2/3): ")) - if spice_level_choice == 1: - new_spicelevel = "High" - elif spice_level_choice == 2: - new_spicelevel = "Medium" - elif spice_level_choice == 3: - new_spicelevel = "Low" - else: - print("Invalid Input") - return - - # Cuisine Preference - print("What do you prefer most?") - print("1. North Indian") - print("2. South Indian") - print("3. Other") - cuisine_preference_choice = int(input("Enter choice (1/2/3): ")) - if cuisine_preference_choice == 1: - new_cuisinepreference = "North Indian" - elif cuisine_preference_choice == 2: - new_cuisinepreference = "South Indian" - elif cuisine_preference_choice == 3: - new_cuisinepreference = "Other" - else: - print("Invalid Input") - return - - # Sweet Tooth - print("Do you have a sweet tooth?") - print("1. Yes") - print("2. No") - sweet_tooth_choice = int(input("Enter choice (1/2): ")) - if sweet_tooth_choice == 1: - new_sweettooth = 1 - elif sweet_tooth_choice == 2: - new_sweettooth = 0 - else: - print("Invalid Input") - return - - data = { - "RoleName": "Employee", - "UserId": self.user_id, - "DietPreference": new_dietpreference, - "SpiceLevel": new_spicelevel, - "CuisinePreference": new_cuisinepreference, - "SweetTooth": new_sweettooth - } - print(data) - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def add_moms_recipe(self): - recipe_name = input("Enter the name of the recipe: ") - ingredients = input("Enter the ingredients (separated by commas): ") - instructions = input("Enter the instructions: ") - meal_type = input("Enter the meal type (Breakfast, Lunch, Dinner): ") - meal_type_id = 0 - - if meal_type.lower() == "breakfast": - meal_type_id = 1 - elif meal_type.lower() == "lunch": - meal_type_id = 2 - elif meal_type.lower() == "dinner": - meal_type_id = 3 - - data = { - "UserID": self.user_id, - "RecipeName": recipe_name, - "Ingredients": ingredients, - "Instructions": instructions, - "MealTypeID": meal_type_id, - "RoleName": self.role - } - - endpoint = "/add-moms-recipe" - response = self.server_communicator.send_request(endpoint, data) - - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) - - def add_moms_recipe(self): - print("Enter the mom's recipe (press Enter once to finish):") - recipe = [] - - # Continuous input until single Enter is pressed - while True: - line = input() - if line == "": # Check if the line is empty - break - recipe.append(line) - - recipe_text = "\n".join(recipe) # Join lines into a single string - - print("\nRecipe entered:") - print(recipe_text) # Print the recipe back to the user - - data = { - "UserID": self.user_id, - "Recipe": recipe_text, - "RoleName": self.role - } - - endpoint = "/add-moms-recipe" - response = self.server_communicator.send_request(endpoint, data) - - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-312.pyc index 094d5d736ad1963dda7c6a0084a6d4cd5177c310..e4481aa1e28411b1934bf301fe5389f49722a06b 100644 GIT binary patch delta 151 zcmZ1|d`Ou0G%qg~0}$lDo04{MBJUH%H4{HI8`dyn@qk28!D?m*zlI^69VS!BpvmZ` z$uW5XqdqfJX3FG!jAE=syg=E>HyHOYx=xn=diFV&>xm%HHBl eOi78)P0cHve2T4*k$kyil0;G%qg~0}x1GpOSWBBJUH%X%jy+Pqt^|7GMJjgFq#NCZnGw`{ZSe`jR}k zsd=UGxrup+>8VAUY`0j7Q*+X8F=eJq{>-?C(SGsO-vg{6yC9S@fu@$_%Y$fwrl|*21E$B1Qgn&O==poAXJf1+{1QbFRYn(l}s#cznQkKYlKafLD*gfS;3#Z~IM-cKn?Dy`Kc4w9)J;-3oHgG^eRs_d5Jl%9}v)Y92m`=eQWp1{?)y!2ino*;buOtR7U*6xsi*z9sAvT-3M2WW)Elc z{>3e}!1wB(;6KKt-?xtG-&k8gn|_`>r~hJgflmECw$89FPY?E`((8sr8%{jcB+V$=sh-)FfkkoB0{I+BwbBIhEA7t@Me zlarI{X$^Tuz)o&mAoq_>5#L$AU=r&hF%RWrBvq48T+9gN%SP=4YfG=kMNJaK4N+Fa z8?vHh5GlZPZs^E13wre*Y<^ESi8RI5QgTdENoNEC$fy5i^EVN$dP#5P7qUedFkqkv zhYUFM1dcpyJ$3Kg-QK6LqX-8KI8cNW2Ap^TUuy*V4A@tM(*~R_zzdB)(15`r3>z?9 zfRl|tJyqdks*B~*Ck;4RfK!cI%DKi3I9`C^MxeZ7%z$GBIIg?xlfbV>>_hY~M^jV< zL5L}$s>USTHbMv>FR7P|jZ4UfSJYBnNRO(dJ)YlTo>_SA8u+`jhl>E@uQKLCttKR` zUYT5@#71PMn(cF`cv_LvQQFAaN+;9a?y5rnX=vK#9aZ?mz@RgvwzK|AR7MOP1+|?g zrVklSS+ld6_2gVYbXa)PnykoLX7rTCw$@Lvph(`^3&QVRv@ delta 855 zcmZ`%&ubGw7~R?IZnjA`nZ!sMo7OfcZAwTJ8{11Ng3w~sQcw>SVTs9vE^K}0&iT7fV(9$#JKdGfjF>*n+C%4l&30{ z!ZlQ`kp#HS*E#Y8)TbL%F&md`(Wq4swq;e-%9^RFSfFNGz!e?YyjHNgiqx!@sGEuf z1L;NVbrj`X31JVpF1)zfMTvXLr3F+>9><83GE%f0KH&Cb<+0n6dsc!gH(q5ncZxR$-+hsnz+}J{t5_?W*hlY( z*?esmg|?`bt2GmMGoq`mp}S7&wnFEjtCgDRK=RTP4%xw4wU9HBnycqDJ$Fab%?A1E znV}c&^Y))qSb~&asAzd)@DvOT-~gHP_DgJ9Mv9o;x%GAf}>5C?o3HqFxiAD@~C?p z1j+mEk$KhxPOu&oRn6-;!^k5#AvF##Wc>kJF5&=FNymk4mf@%6aFJ{Aym$p1$fv|9 zfP=@1*|?5{?ImLDzvz&lE2mmbLU&{L%z8xB3>5-tt&0;mUUxyaE9{{iix%7I2zl}eo%vm27OQs*%9-uu0I zv%fd$7f1@vGl2!R7kf~@-v$a)mGb&eGWAcfYvN#8HbOhQw*ZYY?po@ph& zd_z@Mxfh&JlSiF{V$F)z!QPUq7L+zotC(6qvG@ma*nN072WWW7!lI~nNH zDRn!RS1O7Q!X!z#W?Yc zz3@Ca6bFbZ2E&OL5~#b_PQDZ`hdcfS=_1oY%u!61MYmv-`x2)FHrEN-&+x z%6dUJWUORV`VOPyiK_)hNLacE<77%|bB1W1F+-N5yX#eyD5FFb^^{T15$b!?@bcG# zccYI`sES(4sI`iQ%V_urjhqGA%c#AI2Fqyh2o0SDI?JfDiiXN)=m-t}FTh_voP;>WzMcvBEgWZAK5Jqx+h802xC2fcl6W0H z3B|<;h+C|TYsm&O=83FN7qZKmV)UPt5f@gog;+hc6oR?PLKe(7J||#%=RX9;b!hKo z((kgx$bSq?R@LW4iQQz;)Aliw8t3>Os1sqN|CGjb&fyI_PF>awqnA#P&p`-lptS~i dYT!~0^wq!+p9gAS?8MOxC*Vf$cfeL&>~HWe!TSIJ delta 901 zcmbtSO=uHA6rM?Uv)d%Q-82bpX)Gib+O0M8&+4JJ3R>}}y{HF&a1Ggsu57Z)?4~6m zRHQ-#5!ylR!Gl*Rg3?1hc+isv5fW;!EbYyU2cd^5MNpjCQiRf*b9nRS?f1U-v)}Ke zmykb7QV7uV^38mn6XxVrI6Bv*4hFy}pmVc8=Mh|NU;qFv2g^ZK_{LlndfY_^VS0<> zmZeXiVu>W+bl?dfkKnzTMaWP9+yR=f?Ez4xS(B>h@lMG`*b_C)C>pM&VU8j^4qGPj z0*3B2<|(08pp2MjU*bi}HS$I->l#*3yO}NOCM_KFI0u<|9PyKj*#g30=Ei7OQ{+1L z_!=AQcJySyHmx#3nVoWs(;1~^>n>Omr3XSyY+YzxxbS?as*ZdXkFK?)s_8?o+~xA? z^1IFtUGKYA+RjwChw@tI;p&mIE1l;mTwP2pt?(6?kSWiub1Oz{;Q*A$RiU4J668HG zEo8&TJfoNiac@jJvBl#sNs?k;z)dZE6|cZ})Z=Yz6kV*)s{X)OCg(%xL5aS-#wi0$ z`rf8OoP5* zQgfQ9*_s8Lfd+m8{tWHo$03gIASP9Tj7e Date: Mon, 15 Jul 2024 20:03:14 +0530 Subject: [PATCH 20/24] Refactor client and server --- .../feedback_handler.cpython-311.pyc | Bin 0 -> 2753 bytes .../feedback_handler.cpython-312.pyc | Bin 2360 -> 2332 bytes .../__pycache__/menu_manager.cpython-311.pyc | Bin 0 -> 5614 bytes .../__pycache__/menu_manager.cpython-312.pyc | Bin 4751 -> 4734 bytes .../__pycache__/menu_viewer.cpython-311.pyc | Bin 0 -> 2982 bytes .../__pycache__/menu_viewer.cpython-312.pyc | Bin 2650 -> 2577 bytes .../roll_out_manager.cpython-311.pyc | Bin 0 -> 3004 bytes .../roll_out_manager.cpython-312.pyc | Bin 2611 -> 2561 bytes .../__pycache__/user_manager.cpython-311.pyc | Bin 0 -> 3663 bytes .../user_preference_manager.cpython-311.pyc | Bin 0 -> 4170 bytes .../user_preference_manager.cpython-312.pyc | Bin 0 -> 3556 bytes .../voting_handler.cpython-311.pyc | Bin 0 -> 4737 bytes .../voting_handler.cpython-312.pyc | Bin 3954 -> 3926 bytes .../Client/Modules/menu_manager.py | 11 +- .../Client/Modules/menu_viewer.py | 4 +- .../Client/Modules/roll_out_manager.py | 1 - .../Client/Modules/user_preference_manager.py | 81 +++++ .../Client/client.py | 1 - .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 220 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 186 -> 178 bytes .../__pycache__/admin.cpython-311.pyc | Bin 0 -> 2847 bytes .../__pycache__/admin.cpython-312.pyc | Bin 2498 -> 2470 bytes .../__pycache__/chef.cpython-311.pyc | Bin 0 -> 4132 bytes .../__pycache__/chef.cpython-312.pyc | Bin 3706 -> 3708 bytes .../__pycache__/employee.cpython-311.pyc | Bin 0 -> 4167 bytes .../__pycache__/employee.cpython-312.pyc | Bin 3709 -> 3705 bytes .../__pycache__/user.cpython-311.pyc | Bin 0 -> 841 bytes .../__pycache__/user.cpython-312.pyc | Bin 719 -> 711 bytes .../Client/userHandler/chef.py | 6 +- .../Client/userHandler/employee.py | 5 +- .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 216 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 182 -> 174 bytes .../notification_handler.cpython-311.pyc | Bin 0 -> 1454 bytes .../notification_handler.cpython-312.pyc | Bin 1317 -> 1267 bytes .../server_communicator.cpython-311.pyc | Bin 0 -> 2863 bytes .../server_communicator.cpython-312.pyc | Bin 2585 -> 2557 bytes .../Client/utility/notification_handler.py | 2 - .../database_handler.cpython-312.pyc | Bin 19526 -> 19552 bytes .../feedback_handler.cpython-312.pyc | Bin 0 -> 2222 bytes .../food_menu_handler.cpython-312.pyc | Bin 0 -> 5464 bytes .../__pycache__/login_handler.cpython-312.pyc | Bin 1263 -> 1255 bytes .../moms_recipe_handler.cpython-312.pyc | Bin 0 -> 2512 bytes .../notification_handler.cpython-312.pyc | Bin 0 -> 2803 bytes .../__pycache__/recomendation.cpython-312.pyc | Bin 4420 -> 5279 bytes .../__pycache__/rollout_menu.cpython-312.pyc | Bin 0 -> 2868 bytes .../update_user_profile.cpython-312.pyc | Bin 0 -> 2054 bytes .../voting_handler.cpython-312.pyc | Bin 0 -> 3546 bytes .../Server/database_handler.py | 2 +- .../Server/feedback_handler.py | 32 ++ .../Server/food_menu_handler.py | 85 +++++ .../Server/moms_recipe_handler.py | 33 ++ .../Server/notification_handler.py | 37 +++ .../Server/recomendation.py | 13 + .../Server/rollout_menu.py | 37 +++ .../Server/server.py | 302 +++--------------- .../Server/update_user_profile.py | 27 ++ .../Server/voting_handler.py | 54 ++++ 57 files changed, 453 insertions(+), 280 deletions(-) create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/roll_out_manager.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/user_manager.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/user_preference_manager.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/user_preference_manager.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/voting_handler.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_preference_manager.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/user.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/__init__.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/notification_handler.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-311.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/feedback_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/food_menu_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/moms_recipe_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/notification_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/rollout_menu.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/update_user_profile.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/voting_handler.cpython-312.pyc create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/feedback_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/food_menu_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/moms_recipe_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/notification_handler.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/rollout_menu.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/update_user_profile.py create mode 100644 Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d7e38aee7e7f4fd8f44da55cb93765dc044dc436 GIT binary patch literal 2753 zcmb7GO>7fK6rT02?Tx*G#163&2yCH+n9wBrm4HxHH9rki$pPA`wOnl%&m?THcf;&D zG?889z`+L&R6-&WRLY5};*ujr4n6c}qm^o{6bY&7p*N$@3#Y!>wbwrltvb8@=FNLE z@6F75rS{1*<16f zj&p=&n^R$aSU?_ryORJ9QIRVm1thN&d1y7mp<)19{sb`s=iEYycj6|YtAr|9BcCtm zT2{3T>VylRRW$4f)X0&P;0PwkEz%G;rXqtdfXQYeLwRH3OPSA(Pb)K;x ziAAWUD%S{etP`wSnxQM^nrV^z+5hU0na*iMw=!1^T*whKv)I@J<)*g@<11^9s3@AQ zS&Fir?AoI7riE>dc?e(w)sB5o7HmQG4r^w?V4m}Q* zg5b^1kF7Ru&5;Ndg<`NXSxcc}2#1IKE?B(f<_S$$y}lAbpPp8q&XsULi0kP8^-e_= z)|0b3WQlCuB=S|F7vw9D8}gNzOY-^=&$4C|sC*4lM_-ah$@tRvDf!&^`4n^*XzMTy z83x$`+I(=Tgc~j#@fzg&f|@5z z$h1_eU^-#5kj)Ykggl_SL{ecVsOc*O%O!!sYr5qG7juScx%_Y>ljvBXrl$a}qZW5Dyd`2}Wl$}ye zFI%Y6ThI8+(AP)$tPiK()*(?3{AOjY|Y+Wi;Hp`BQwk{qwb zChXWmIs7tytSr799Db1786MfpRfosy;jx{;gPU_d9`MGL*-j2_g#ac9ef8LIcYz@7Lo~%Sq?nwRjM>j9pvG=Odaa%fG zX}*8F%|IoXd|o6emF==Qbg_MFqbX_vii=L_zKdB$4fI(Nupdn&#FbX(QP zofh4C*lnTcKp#2)n@bM>IO3dPU`DBR{_@%LZ#dZz850|tGv{eP^a9)INgDH{3zLp8 zqgrghnMp_VlYDqi)p7*OmLbFSlD!G&U5%GyItW8kf_FK&*VHg5=s~6py4<5jm_lao z4uB&t7MkpcY-bf)&%dy$!^|!gGYts_w+rJ+t?%IG=a0Xx>_1T!YVpLLRCu`u71EX1 z4e#Ar_Qmb*eDS&FiWJ%|3wU^6*y%g4Ik35G52fk| zC1ye2!fjzYZBKsGuJYvP*01xweE&~wWp|<}>L05<%m9^ivRb>u@N7Ccc$K8!|!vs@kRja~@m zJr!_-Wz*2TP!lX3JG0#IZ^X;qls}}WLC20H^HYF2&v9H0MK|219(b2yk@m({uKx8~ ItZuBo0sPgB_W%F@ literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/feedback_handler.cpython-312.pyc index 2b1def4f5be0a7fdb3931dbb17f79338863f0da6..54a7b3883aaea0f852a9efc88237b09e3c138c13 100644 GIT binary patch delta 77 zcmdlXG)IX0G%qg~0}$BhP2I??!e|_tY!wq)oLW>IQ&5zclA2nemy%IhkXWSW=@;VZ f>l)(f9OIH-o|luKm{J_$oRgWFSF*W|aThxPg76t! delta 105 zcmbOuv_pvdG%qg~0}y1rowAWzh0(t-%__zxHL)m9Au%sS!8t!A6~fg8a&^I6x6Hi6 y9EE_Q{H)aEk{IX2wA7N+qRhnjpw#62+}ym>l*E$E{Ji+$%HopL+|5ahyVwCIQ6)V9 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_manager.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f9f390bf364cc16cbe2886d198adc9ea7d172ff GIT binary patch literal 5614 zcmc&&OK%&=5uV{ZIOLFeks|f9Msijn{a7dKhrCYWtYT?nc`at+$H9hUhEb1fddZ=- zhjdm93HaaxVJu)L*oA#?0G*sHeDN`-z&~Lq3}9ja0|t^k_{PLR4nhv8n&D$eQ;~vA zvMs9E-PO}w-K?*^uK9g1=x3k|d%s+J+Q%?|#zwR7jmn!CR30*fA#8@Z%6OQcFvN40 zA>0!W!#st5r(9(Tdy$Frud$g}ZS>k-Y@_k!J*YfnR0hT}S3QKi%UtDfuB$xZKnjEh zDG~vsmxv%G;)OXSOI}g6!b(a@-B9Uj(=ePBm*?RB&38dOWJ+v_NkYvjB@eWki!&t- zS}k)40~51}IA?`)mEKlqay6ID7PRzgDxaekPjea7@)kgsOp`co@w%E>qasX9y(lCQ zI$EMY+0Kzu*UrzLNiL>SH)txWUptdpQ}ZfKr;-;`oLEyyDxc12Nqs}ltJ$Nw4Y+nD zlUB9-wUrzxWK{iH7WSXaItTFX`i3PXlW8rTPbQ0D*U`M&?8PI|CqUd`YWq)AcvDhp z;gJgexvv)82Va2-{JjA^v)VczXyEqj)BF?kK4kJP9bun9>uIZ}%ywu!U0P3vmg~}T zgfH_YZnHHTTGA{}pz^fYV2JRE{hLvah-F?ozQ?D$t*0b-YHW{B`5I4oh`-Dexh#M` zc}hG95Rn8Q3uUpy+-iByCZ5z=r6iQZPGFS1B`@h4ZH*-Tja8y~U#pXWF$3)}o#({@ z_%1U4+35ISqBy>!fe$MAo2s&w%Mm3Fo~LN3tg4(+ihYjqW13#I+kq7|l~FEjtYeGf zE-l}WFDxy5^x?wAORw>lvV`-O6KBr8wsqp-aw4&G;WZvYvF}KVki+Pshj9%{SRmQ7 z78fi&0jpVpy@=(<6>x#&MN7H>__CEl3%670OzM~EOgg`DF`vp8bW7BoZ?9fhT~&46 z@@7E-_+d&Rt*saGmQYw8$hnphG{v7UnmEgq1XvLveN>p4wVbwoOX91F#8X$4`oNgI*4+v2DjfgLJ4 zNc;mHxx>5+j~Zk1)$mC(e6r$uIWTNQW~&2p=D=JMZ{(2c{-%Q>}p8LKmX( zplw7q$!fsa_D-1Y)?#eX{|Tan=^s@iADEF3szVFr&_V;#FT>H_3C6znsv}3uk)ze{ zF*AG&SS>nXO#ZMMJ#9u$R{}LT`a+)Ek|(S3lqpYb9^aB9jm|1k%IxtEB*cSQuDBoNsZ z5du9Uf{QhzPrmj`t<#5pdyRsEPRoSn!HTF;k@9LxC`+n3LK#rbnS>@n>$T zYjMs6-yX=N$6#n&?1Cpffm5}~6@lzP(YZE88(6csxCP(*MsdHJWOo?!K1`|CecBHw;H9RzzIJH;Io$K6oxQl5u- z^fw>?;!@D)TdYb;rnF>8OSQpJMXd9@Pk~hNH}hZ2R~Bpip$GI{u~MuJ3DTWPO;5}Q{K-_8l)jgarRcBhl zKP1f6nU;u2*ldaLAU0cKwpFwHX2((cws1^AE8-q-G(D#|CM}~~m>t_@Zc9IKc6yqA l1bv7t{Tzro$FgjVk?+`lb&txjuu53pt+sLQSXdIYq6%$&VT2vfUP?VUGnp&Wjl2KZaSfuCa z7vkyb8sh34 z%)G=Lg@B^`tkmR^80W;a)RNSq%*6Ph)a3l!+`QD3#FEVXy!hhE;*!+d%>|53+ycV- zr3FCYRNcg~#LS$;q{)YQ>I{V-V)0P1%$$B0Y5Z$#uN)j2fHg z@wzcf?f|;Ff#D7Z?*%@WD;%yj1cf`;KCm(H3vd1{pvlN6Gg(#0i$9H#QT-DGh%Dj( Gss{ju<53>~ diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/menu_viewer.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd80c59ded99794e337559b3f3de55bda4210317 GIT binary patch literal 2982 zcmb_eO-vg{6y9HZ4K@&LQpjI7sY~NT{4@j_C2k}FP4h$C{E~*yZa1EVY~mlXYlvcj zltT_aaNv*%OKBtyRZ5ggjvRX6&_gbj*3qi9R*F=qQl;LgXfK@l-Yl#aLe(BR9>0C_ zX6C(_+3$O^-$f#I43rk>>#?6ihWQm68%0=GR%KA;8IJjsA#a7j4*_| z!X)_gh5?`KdSkU6lzB#DMp(j(aD;utjPQg5DG(l{NCc1pB7%p2Q+GkjO%ChYea%So z>mKldv9P^*0K_~q%}z54Xl|M2ptTVXRtTQhRDyG&re;iOhLX-_vy(YJtrqfzBN+LN zmf#)1)G}iR?3ghEAWZZw%ko-|93LHOA5aE$b=*+1=IDSrrWG_pSCz{eddg`;E$I22 zVm>enTDIrk28<45bS+mHy^tr98OnjPiBv)gtC1EyHg5N51Flle+(5Qz$J*PNW=iyDwumn!$4i2P6XJ@eO%~|l? z;>HMk!ufKW-|-Az2-Zdro(N9_B9Z_J(x*g1^jSyhp9oKb&%pl+F9yp@^CaBnO&?^w zI5i_o3#6`QBaypwB?d0sc4tI92$R&H%SlJO$U|8dmJ-v>2(a_VVf7tCb_fM&MM!ltH z^umKH1+_3~7Ww3nZbv|0zvBTo{0+@?xK#eRKygM9=Y&lyM-)T5H>sHgN1QP9TpPUuWPULf@<_J3A%?Yc%peAA$U<<{NaCQihMYmFn`S9dfDb|03 zkpQUZyCtdGw7Y!un;TZ+2PL5zeaDU-{yBQ=b@bR$>+;b`^o$)nQC0n{=NtddzJ>_9L7GGhw&{wQ0OM}(;K`ZgG9Y49e|8;!8iVu`~ z%e}8+rJ*?WosW5|*xiAMu*6hCH*SrR#|P#E)d;3@{}~C}W=T+c3q)3SdfnM)1!Ego{3eQ(s`K z_u0b0z_}4dm<57Z$oX~X1=p-9&Jn&cXlCoIx_kD9R?)6+;|7V&@{pbw}44e z?*z@sbXqe_M>-8uLbe!9&~G&0pvY&Ch1E>vGM#QTqpb=2DXu?-`g214Q{(Q4VgSh1 zd1S13;55)nBXS`xLk>>gmSK|YPLk=Q4DE6Y*2g1Zu z?;}bJrNq`%6y>d?**c;Tef#%Td?M5 z`&hGG^cJX36?eEe&*rmchoPnQ3C)PW!YN!`981^Wg95RQNxs(!!1n-*g2qSPjx?re zjZGr*}(+weq7)Jj9nlSf)ATDSmHMp!qQFOjc%fbHMmPC?%Ik+T%X&APR-{a z5Q*)8#7*hD5d%0O^Zfk-rOf_UitRya;!H6Gm1EgDnN;gghimimf)MKWC`yxGv$U5|(8h-YZtA)UM}yoEN+OpJ_@HqOaGX_016;+Tz>h2pVs*%u`V-cfM{v`%5zn; ze36x{BW**eqoG$!Vd{p)G)9^3J$=mB(B9KyEs$k}`3IzSf;_rFNJH)IE~_knldgm8 zsMmQuvh#Ue&n+dTK-PvdvPA3?*_VC83q@x!Rj!uZ6n6^6n!|%q!o!G=cwt<=VyoQy zY3RfUC2Z}#kb3!OaWcjHn5mF{baS7hJ3_{P{b&+M7WT{F37j_jHvU!p(FTVlvx zgn)SKPp)8W+(OuhVTn(KW4hcxV5A-}KNoLVC2d8a18u`cA45Crr&G}Br*sy&Tey(5 pp}Tk$xBr*1i`>+3ec4+d?3M z2f>So;R&8R^dgpm9{LY>75{+}{{lUTcoBMXCZW-+p6i@7rCNdHYCAYR^lJ@PVsuiVWN4a|5oWrc{nlqTuyXF`44jx-I z#GHO(mnKhh{TSEh?(awygyAxcik_%~{%Sw0Pf%vhRxYb9Fs2w686`qu6X-(US6TA< z<9f>(*TR{`Q~IUz5j|bcOkiJkt#$1he&xNrkEA0*=$c}L+b_cUC4gsE%BKvhYY9&) zW2Sgg{_3&?9Vm}#&zBNCU4jedaq7zK&VPZ`D0~~jmw4+^FYGnxtY2rF%Vkb`fp4~Wg0|Fs!&-VAe_ulvO z`F-E_e(C6lB50@BAC`WMAoM30G#aywJm&zpi$dr#B%@nMrXGY4dIX=>7LXj8Ljs*| zOpu=19&Ga}Xn~T^LP(}=p#@qF0c2zvU|42=H|%ttFBJ-bVosHou~gI-C#5CDP_QbA=M^GY zQ)J0dOPZ+P&<&+{>~#c-lLb}LjK#Ahxm-~6MKGrz!XAi4ZxgaBHylM?gmRL+$jyR2WMPX zxcTcPZaT*;l`!{JL+?qhvN!6A*=+&tA?$rk_H9;|7}$EFp4t|^1mWv%;q$0ZazeyQ zd*qlqaUDDsv2wMn=!O$s!KwzGs;!iv(^m?r0pu*9WPxy{M3x!YN6BHaqOX)RU2&32 zrIHM(RRqVxMs{-;6_TS)5-drp9EVBBIo->O0qS=AjtaLcNI)Tfvx0#c_3pavk$+ulONR))qcVSwcL|<_nrB* z!{0BMJ!9UxKL2p&=S6>L#mDXVxaq#n((jue%v2+(=Q$V2b zqjl(8TQCDd9fQgRwTyxa2G@btR91TF*cEDl)kB2;I{*-7slm-`(Cqh{bFStwKPk;l5Fi delta 470 zcmX|-%SyvQ6o%)dNt?9IMvKK(F`}YTEAEsc-P8+sqlmaDffAZ2q^1c@Qlx^2;0u%y z1lPGC!nG`%QAOE>B=bWZGDfLNJ6f?wDXL4O(ePhUT9R~7=#jJnarz)Fg53F) zjscSNF!l;rx+iP-5xzmV%K%qt23;Zw*TWncjx5IzgD)}gH8m2ack(=p(Kp#<12>eJ zi3G0-=Z!OUgGiDG_>~F2P6&ZsDVg0c!DG7cEY^L`?G;S%s{f|0ywnJnE|6)K0QUSo UhR+B9yr9I7pu^-hVhDTw0N|=>H2?qr diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/user_manager.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/user_manager.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..80715a03cde0c3de6a5eb96f6eb50f70c0612244 GIT binary patch literal 3663 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 nNM+;K{xiz`SyE9QO-p{EMIDxc*Io)?W2D366I7 literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/voting_handler.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/__pycache__/voting_handler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a3c7e3743eddc6169cce4634fcebfd76852790a GIT binary patch literal 4737 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 OIQ&5zclA2nemy%IhkXWSW=@;VZ f>l)(f9OIH-o|luKm{J_$oRgWFSF*W@@dGaat)?0) delta 105 zcmca6_eqZXG%qg~0}vd3I%Olb2BUv|npKQXYGP5ILSkNuf^&XKDuk;Gl*E$E{Ji+$%HopLTw_8CVw`g_Q}aq< zN{dsAJQDL#a#D+8;^Q;(GE3s)^$IF~aoFVMr)=dU}j`w{J;Ps IikN|70PPPw&Hw-a literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/__init__.cpython-312.pyc index 1274d78183ef37215b25475700e2431628b39116..1ea219a1b7f1c3c09c01d5c3bd0efd169c45f0f8 100644 GIT binary patch delta 35 pcmdnRxQUVbG%qg~0}wdrO`XVX%oLbB(LtNdIVUqUuViASBLJFc37-G} delta 43 tcmdnQxQmhdG%qg~0}y;TUow%~m?_eEqJuVHkZWFgW?pIxgqm3B2mlkl4X^+J diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad7d2f4f3403ac89ffc960f8440d6b3531c9389e GIT binary patch literal 2847 zcmb7GO-vg{6rS-PYlC43kdlIwMQRg_kQ2ZpAtY7PU{a(6r43123u(3TF6pN0HJx22 z!EvP=B9&G-q*baQwUIbfR24l}Ipo+w4>|0jl|U!^Tp7_)Im4;8|>Fdv8Y zNFkbwViZCbkP^9vl&FeV!U(Ox=a*beiCsadrY%OMuot;%sucR>OR7=2BpdQ|P9_+6 zO;c~FG+#yXE>tCU-hsi_ppA-hSV6haBAUYrz9;0uO6VTSMHbO*oQuLvVJ~`4DQHH% zb_^yV1|L&t=MQLpz>koHVNfkA(681Av>f2nCs74gLX~hOvJ!!{@c9KJE3iu?Qb9NB z2VVizS8M8{3X<@D^uBj=?FO}MKAYO?gP%J7D&$d*<# zBy+*E)WXP{7R;X4HPx_YOQ6GtvZ3fIot2qG)AI|I1#P*N`!`)XG*iaB2F<^B(Wa36 zrs;muy3oBQbT1uPnpw`+sWXmn))mg$!r9H9ckLr%Pcl!(oSv-PlUXU{v<-t-9k8vf@k|zbLUrNsZK3xPq0YFZkZ{ZP20~sLS;bt4U)03Vgel z03+iczzYFWT(Nh?b!wq%=d0B3)je`BF(yhb0+*f%< zTf=T`ukQ8$-ychn>2f^riK@d5RmGRMzZ^>S&6F1sLurv^VUeZd#Bf?Xrzm_ZPQl$x zjHJa0Rfp>xn9HQatMhQhgL9)*DHEERm#N}|Pt-&g3r9^6l7lv{nu(KXF?(CH%I#SL zvW6&&`Ok}5UKLM^TkMW(u>js;w{45%ur21rtr%-qJeFG%*-xitrlv2X)9DWu)bikz zaZ}bcr79&YUe;CFR7FTAT)59H&a;G+P7yCUPc_4$1Z4S{FASs?)r|R)MVX(yILn|C z%bJvV#!JeI!bwR3i+Dug_6W|DxHSSZU0j4-yd_b{gvND_G`%)oa=-}r^fmO3w4u%A$e-FTQf_U zpT?krx@`Tt;E$kngi%)*wT02`P-lD+Z??2=Bh+y<^cb=rwKPV003=Z*IBne3$7|lScwiahi=OyN_Py zC4Lw)9sEn-|I_GbV6iv{5L1}T{1y4~S@6CT&iFQYkB$Jz4r(qyvmM45Z=gQAv2LJ2 dyRmMd0lTqoM|v?k=Kk&C#BkyiAz;G%qg~0}wdrP2I>X&t&YEY!wq)oLW>IQ&5zclA2nemy%IhkXWSW=@;VZ f>l)(f9OIH-o|luKm{J_$oRgWFSF*X1$&(!bhYlF_ delta 105 zcmZ1`d`Ou4G%qg~0}$lDo3fExp2l*E$E{Ji+$%HopL+|98}p6mcE$|TtU diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52ba84adc8c365d9ff29958af7c92c3ab6e3cd7d GIT binary patch literal 4132 zcmbUkOH3TewR%1BjDLcMs|A z!3!qRDzX$3`QSuZEmE=)hlnU5#~k*s2Ol{2U@1MMC68K~QWzwTX91Ei4(6yYrv~t0`NJJh{UNx<8mB_a7Ybl z;ar%(VKt&fb5RCI)F!Pt*UaFk8q?yrID?zigw~R4VQ{nBswHzt2FKJktv%Pykr25| zr1&EuC1h?hOvo1esx3#QmXAofbr+{;&W&6*Wdpv6tFm6ap~w%|tbIzBr8{E&{!c_* zQrS`q5?mE^@h+RTT`Q<+p=j-|q)^hVAuq^=tmox@MDj+#QuMp~qB>__VL{1@mQv7b z%lVpq>=UX@UL6PES70xhc+0i4AbjaTHhEiu3FXwyw@#FW(q1JB|{bWxKHieM+`xdf`_3z}Bc(QOKb z8yAGUDw?Jsn5a6B?bFxyrStPwPK*l^ig?!$HFJJkT#zlme%$;b*1Z$! zUO%)xw~@8e7fZ2APVAB$yHx2rV-HO}wYHb-Yd4&0w@ZCFr!Th_abi7{zLWOAg)is6 zy8SHjyt&jj>-5c55y#KjqdzSjzv3Lff(!kX-uLViV_#;!8Y}fqI=z#)*j?e@w@;5h zo!h=`&(1lsH%t62hrflWcPf0we*eR#6Wi0ztmh9({7r|ySw$TCzCHM(r(N4U&nBK< zE*+b5j?E#W*Jk|{9Es$8CxZ!IEDJ8@VGM>Ai33;hY5xG>9p=8X!94s$H0ZP(i3fs{ zbO3Mp&QFNtJ2)XyQ&3WH_6u&6lbY|dy^UVb!Vf_k_-GEaU{K`96HfmDNQl)*@b%b0 zcRJACAfXi`#A_0cf)2j+8!TNmifELee+~SJI(|P?ZL~J>;`{*rbKq~OfRfp&zvB^8D@T!};zaRAKg&g3&0{rbY{&V#y zP@=)t!a*YV_>d=Sqtk=xzm3wZ^ggx`r?&@o>uB8V3HSJ6`q0cuJaJQ2AvnqWYi?jA zlAC5d%b85(!)1A8a9UpyRYj`F%kZrcy72*y%u#EFgAv5~z{cYKPgw07(f(s?KRl8|IR{0$pn z1>j1m`-_zQ?og>`*y$NArLs;cyEavBPpx?|Pr~GJ^MB(BU0AT%scm9kJ;M06~K9y`W<|bgV=#IP`+edXS+1Z3K;5z%D@v zpyb&ddbUJI9Xe{W9wdM*hIZ&siDn&|wOJ1mfP~XK^mK_1IdsTo-6yEflzsSQi4Hh) zz@`K2)B_DVS7_I7n||N)1pfYoCj1=PQE;Yw_qHD+kw}< zD#ERT@bjXmRxzwdF-Gw*Bx@B@UWQ^!NOMLXz5#T|AG6nDU^-y~<|XqZ7@&&r{`Nw# z=yh(7e9L(FXmkp&Zy%ZNY?qmIhfC|~stm#gh6T6tDm#pssjo0u&Drf?Jg@Sq$7%uE z<)Im4ptkin_g%bJ`eM{^-}N||i!A#8#`z^HtDX;gRKe2Kz;NaE6)hHAGjA-J(Wva) ze<4*HpohMWUDVi7e`rj>6feX42Ml{*j^oOt-wyUNIb{cXnPlx?FOxw#*vn+t4)!wn jzz+5@Ic*1fnOwAkeJ^r?!%KeixR!m%FyDL&o*nu>!>Qu* literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/chef.cpython-312.pyc index 6df924623ca93586a129f6186a925f82bfa9f91d..64674068c143d036974944f84fa5a0036d775e5b 100644 GIT binary patch delta 240 zcmew*^GAmFG%qg~0}!|yPEA`gk@q#fXlQY2Q9w~@T53^hUUKTjzpc#1zR6ZGAmQSe zf}+Hf)YJmKl#J4X#3DUUzYtGf*AQ3d7?=F=yqx^Rl;RlYoXpg`lF1iYOe_up4gS%< zaEF7pll>xx#0;SsAqz|{Xxd!iu)QN=c)`f^K*{mSgOwM8!mbBJUJQ!7EECnia)m>3 zvI490=1|sDR&j~af|SIP)cDMj)ZF;Qvc$}s#H7re%+05{d>GlSE(%y(6|mVX$Fq`A gLf$t&r8FnCSg#c5(D(wl2PR+P?O}ABoX95$0G6s)lmGw# delta 234 zcmew(^Gk;JG%qg~0}v#?o08T(k@qz#cW7~H(PnnWR%ZXqG^-e&)Wo7Zg~YrR1?T*f zR0vlW$khdN-7@nMa})xK^0QKtOJbZ8(^5-Pi!u}AgHn_8b93`jQxZ!u^Yh}1D~n4~ zb0_a-F_GQ}wChI$!yOLZPWFo&5;KHmge)+*plNf3!*;SZtMq0a)_PV!q0$1N&eZtC zvc$}s#H7re&4;*r7}-rO3Yc6KFxxE3vyzcl#5X^sG$*xKuN3Is$=7&$q;&2w7~EyB V`NE>c=*HM#@|6KZ7s&xF1OT(GPpbd` diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/employee.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3995e3c45ecb4834fb07210ba872d1711d1d210 GIT binary patch literal 4167 zcmbUk-A^3HefGZZ;9xL^4dLu83W+&_&cSe@#CF>R4jUB+vd>>9s_pf5AlK~2Wp}}W zoTaF>R9f*sszgC*BHcqpRJngZ9`fJ^Kls5?cj-!;R=S6(>H|_9u$)SjpE@&lyX+ou zQ+Jq~{muM7X684)FTRS$V*t0zsn3@G9tGeZWMa2q6L|V-415lFz%v36nLNV~*eCcz zf8I}FzYq|E`5=V@LP!kf!xRn*5iy#NQaB{U#I}4Jg~LL-7|+Kk91%Li&U_~WeBd(R zqxS$GL(HxpfcyB@XnDxDT?48112Ro9R^Ymd6#R|NBWd+U3EiQy&KZRGUlxk*Unxku zK$qGG!F)j~tk7x4Rap?^Rqbe{he%pf&@xhxR76LJ_zhVrNh?R9x)<=ma;aF*O0v{k zE;i3cKfdPV=^zGvi}i&-p5Z~>w+WURp1Bvv`+46zkPmEv51D)r-^Xu7vSL|~*AXh( zx+X$G_($&k^jiji&zR4FhQD^(#lU@g0;(>Ivj{3o#aHoH0=ofBi+_#A0L`^aB~Sss zax{!#ht8|}3g8?rEpE#K;05@@Hka0ALxg`9pZ&gbe!LI1zedw~Y^ZggU99E%wx$8* zX|pM{J{xM~`LB0#Zls<5zxX?CE^WYuUTA+uBRs$s!7QXsSV48Qj1()vaV4pwahwvt zlC6Lu3&`@7c&mLC+bkzGtXd()VzrCd&YdOV(N;oo*(>*6!zC2*$W|MrUZZ}akjJ&) za?^DjLh@!7#Cr-Hb{I!Ac_OQ0jrxX7n+jP06$#4pVqS8teCZyU+Hnapnn%t&87c~&2~ z@OAE++m8Z|!$xw^OfEJMgA@9Xer62LnS*m=VW8gss{Y#K*W=$z8vR+bKT8&S>+CuG zjj0E@hqv{`oVj?@U~if1ErL2-XVdz*cOFbXoPDG{zGJXAP4;F3aprY>kt>@V4l{(zi-aT;$ zbnXQJA8zH=oNxkwJJ|6NFQs>O*I)7Tq4%kVl$Wp`oPbv)u6wMto=N%^^G99$P9Ut( zyyDDs`yc$&Rj zT0^W|BE>RI$IExGG8#v6n?j!0>RzRa z;%K@oH?*bn5=NfIiOOIQJf6_*MqBuZIv_n}p*-95EJ4W+6?k0cQ)qzJL1jRcP`vT?%6P|g}r zhiYI0p&3f=7~dKHViJFFuWEl?LQ61fZMqJpmy83*UEi#48xC_w;_*qrZIK=o>Tp#*ChEvuAvB zrqEnqI_)n=fY0#UEvO358gR&jLpmIyXCB&zlY4N| zfEP@7L5COWF!4#~)6h2l`zO)(v;ngw%<3@vWP&`Aat1#wuBLG1M~Wzpvtk^!H-1$h za689+uv!or7+Sw56U18L&4Q|kaIMCr7$r#zganYEQgc#B4xj@`E9x~o;Nr&qJM=|@ z*O^1`oH21aID@f2Jkqn%T^3SZ7Ic+eX#y)GTv*-n^fGGNU4RnXw|Z@i?QwQ-*{Dww zHkvYeN?(WbSglG+*q3ci>OW=YKRu_SrN#A0o61|+Dzw~9u4*Nrq^+mjuIrqSWN3Qt zKZAx2hzmc9Tomb5f2?Hjlsty|H#}gkVVD{i(7n9|hIMbRfpOj2YhXn8_8J(|y}btB j*1f$3-q5|h1}^H}e&`!w$RmIMxT!s%nD3s0r^HYZRG%qg~0}wdrO-*||k@q#fXlQY2Q9w~@T53^hUUKTjzn#p+fyq`eAmQSe zf}+Hf)YJmKl#J4X#3DUUzYtGf*AQ3d7?=F=yqx^Rl;RlYoXpg`lF3(D%q_Tq1{WU$ z5Wui7a zvMR7Kif&Hg-oePoHCdW>y@b4PeoARhYO!7^&>iswaQ98V&f6p9c$dN8E`!Y%77a!> P#*UJ&3?RBl4rnm|)S6I& delta 209 zcmew<^H+xVG%qg~0}xcdo04{DBJXQf?$F}YqRs4#oy`8ZX;v{lsfk5-3W<3s3eNc{ zsSvI%kgE&kx@G1i<|qUdGtJS=>K5vn$-O#T8ei zxbh(1Kso#}78b|0eu0%(UFCbTw}B&qZ+Cw0y_xstH*da$;Vz&&tj`vV0sJDT6@F!` z2WYIogV&(o1Qh$~0er{R$P|<}fuTQdH%MbGC+i2OR-j?Z6ihwEPGIUQ50NV$vv|ed zTW#i@t9VjW*~hg$Kv+S^N)Tu@QhMmM)uHs!+b}6PdX(uz!356P7+ZLes(30BU2&7e zy1IuQzi1=oS&|fKG?#g1hMkIA9WTrcOg1|N0YMkR61xG(5n$HU4^hTyC*2dX;pAM@)h$xM6A&x>C z(q8M*h3#X6W4O56U-HwPi~fC7-Bvw%zT`iH!4LPZF%Y&M#|@b7y23}DfT1g%gSm~$ zgakJcsxHwIiB5~7TaLoUr{P!{6LJW8OYV}!I7K8)qZXpt6(Y%05tH2$;&UP6=EU@< z!5xC@{S2{kKrd{cA{=kN+T)%58aB{lov?;&Xy{X=@sKqYuXni&UN*cAOdq3Mt9>+T VpD|W@0mHJ}@SFDj{Nup&`wKQ~x!eE% literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/user.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/__pycache__/user.cpython-312.pyc index 627048f99adf62fcb303f414bb4d6e6ed52a191b..c01dd171b3b47acb21f25c00514332222f8bda50 100644 GIT binary patch delta 39 tcmX@ldYqN}G%qg~0}wdrP2I>X#mMBFJXxJlo6R{VGc~Vda{^;NBLKd}3HSg2 delta 47 xcmX@kdY+a0G%qg~0}y;TU$T)~ijgVQd9pgAHeZlyUV3I;Y7B(h9Ko2+2mnKZ4haAN diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py index 2d7db18..2aae691 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/chef.py @@ -3,14 +3,14 @@ from Modules.feedback_handler import FeedbackHandler from Modules.menu_manager import MenuManager from Modules.roll_out_manager import RolloutManager -from Modules.user_manager import UserManager +from Modules.user_preference_manager import UserPreferenceManager from Modules.voting_handler import VotingHandler from utility.notification_handler import NotificationHandler class Chef(User): def __init__(self, id, name, role, server_communicator): super().__init__(id, name, role, server_communicator) - self.user_manager = UserManager(server_communicator, self.role, self.id) + self.user_manager = UserPreferenceManager(server_communicator, self.role, self.id) self.menu_manager = MenuManager(server_communicator, self.role, self.id) self.notification_handler = NotificationHandler(server_communicator) self.menu_viewer = MenuViewer(server_communicator, self.role) @@ -31,7 +31,7 @@ def user_menu(self): elif choice == 3: self.voting_handler.view_yesterday_voting() elif choice == 4: - self.menu_manager.update_availabilty() + self.menu_manager.update_item_availability() elif choice == 5: self.feedback_handler.view_feedback() elif choice == 6: diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py index 7ea91e8..d07ea0c 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py +++ b/Final Project/Cafeteria_Recommnedation_system/Client/userHandler/employee.py @@ -3,13 +3,14 @@ from Modules.feedback_handler import FeedbackHandler from Modules.menu_manager import MenuManager from Modules.roll_out_manager import RolloutManager -from Modules.user_manager import UserManager +from Modules.user_preference_manager import UserPreferenceManager from Modules.voting_handler import VotingHandler from utility.notification_handler import NotificationHandler + class Employee(User): def __init__(self, id, name, role, server_communicator): super().__init__(id, name, role, server_communicator) - self.user_manager = UserManager(server_communicator, self.role, self.id) + self.user_manager = UserPreferenceManager(server_communicator, self.role, self.id) self.menu_manager = MenuManager(server_communicator, self.role, self.id) self.notification_handler = NotificationHandler(server_communicator) self.menu_viewer = MenuViewer(server_communicator, self.role) diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/__init__.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c7075899ce3aad0c2e13de7f8a26d0e43f95db3 GIT binary patch literal 216 zcmZ3^%ge<81o9uIq=D$iAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4Tnuj~}77#}s~ zc$dt?^rFPv;uz<|wA7N+qRhnjpw#62+}ym>l*E$E{Ji+$%HopLTw_8CVw`g_Q}aq< zN=q_xGD|9B;^Q;(GE3s)^$IF~aoFVMr)=dU}j`w{J;PsikN|7 E0NYYLVE_OC literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/__init__.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/__init__.cpython-312.pyc index 4d685da84ff1f6df65cb91654c1e4f49761b0b12..cf1789b0da6d0b4ea9f58b3ff64182a902f826e9 100644 GIT binary patch delta 35 pcmdnSxQ>zgG%qg~0}#0CO`XVX%;cLq(LtNdIVUqUuViASEdZHX36cN+ delta 43 tcmZ3-xQ&tfG%qg~0}y;XUow%~m?_kGqJuVHkZWFgW?pIxgqm1r3jh)<4WR%4 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/notification_handler.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/notification_handler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3068bd3454ad40c2e65e00e3434f5270fbcb4bd9 GIT binary patch literal 1454 zcma)6&rcIU6rTOjQYi>zjeufYqY{gV2NNJ_jDm?In40LVX);+mQ&`;Y!pv3!DG3J- z96gxekrRgS4|p>E2|$`i_GIG8TMeE#`QB_Pi;(DS_w~(tGvAx{y*K-*v$LJRxZ3zo z{-P7|11CqrY$^x0Kv^e@FwG+cqLXKY>8pepo3LXW-gp!=roAFL^CwR8rKVN=Y0b%j z4az#<1lE#*&a_ohFc7O?G6Q6anShXrtb7oIS?A7ZhMk zs}TxXJQx8GEuYgOOLFm+3t9>)m8y?;fyn8RDY;h`X;>{0$hHsPvHQj6gOl{B>&ytJ zB8!twnTK4s4t>dSx6he643&#AT2P$yT<(X(YUp}yxLEWP3DMa&qmlW=C_}01 zyCJ1Z183wsa^%HQ$ZilTWdHi;npw}-JL-1;Hc~p`7bi%Iq9zXtR83n3a^}#Z#zu1O zk&)E2O|Wmbe9L-GXL^6jk8>c^$S?KWo#Ek~WI9o2awfNQ#cb3exzDKJ3so+|oFUo( zEXsgwK5+do$_Os!17C89hqY~6WN<+@pwlGY(v7ot`Fju|xXuh0U0@X0QWCR<0yHb2j&-sGHK&9WR2?t&h;tB2^q{y1VvDHFs*MDuqy$z|J^``PdK$Wx8f%c2NSmp?25E`& zY4n~JF**X{7i3NbejMczhQdx#kqFXNe>Kx;eU!Iqf zpO{h{WGLbUvDrZcGmKyaGKvL(L<_?wCPr5CPi!o#5}*0l zSj{1-K??me86g@ZLAv0E{Nk|5%}*)KNwq7I0!n~Q0y*geGb1D8cP2p|M)OY$f{YM@ E0NOWC`v3p{ delta 401 zcmX|-KT88K7{>GFg1uHxtwX`$5C@0z&nSYmE)^XV6>+MCax|&5^zLYK9qOz&Ig|`; zF5)1523;Ke1{FVmo9G~P^34@|AwS+H&+`z-Pxc|_y?I`a;FK<|nlA%yewCxRC4va( zkSd{Mj|h56g!4pgjF2ky!DpX#Jsj-ZolW4Pt;hMO*W9cf$UsFrhy<_1LXPDc%C%JP zwxXcJk5$~3jigoynlh2971U2;BM!qziXdslQC;_SB15wXN5D)M?hE#n;gpt4)!O*k>wZJDE^w9h^%wgG$XJG(&J4<(gNg4ATZ! z37ciMvXr%~ W;L&r4F9!hL$>cA~!^Ss3q@6$gcw8p{ diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-311.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..926a9b917c17f9184be89eda22e0854c5e3c1e46 GIT binary patch literal 2863 zcma)8-EY%Y6u(ZKpphZZiuu*NxB+64%$;x7fxg>VEcB(Z> zr9SYGO-S3rB>KRlJZuca^Zt)GvXsaY(xg4@EmQZz)6TJzv~Ggn*gn1=$LHSPx#z=w z#N&qu(5db(MU5xqZ|w95`Y!EWg4c5*6PYWKocHE(T!4H*|9}xq!^A zkTm}fcC&@vsQc>6>|TZLbE1$OCli!^N^(KemE+|g@Q};{56dCo5t+)7r(BN8VbB_N z##a=!p|B;rT&`$pA#due(ASHLU^@uU?lEA`NsX%!30fY>WQDxuvT4qV7fPz4nUbLw z9xG-#;P8f0DzXU38K@$adbc4jtbR4WB;8f>k66BJtS;q?im5O)FFjBSu)e0qc~jLj z$=EbZrJVVY!0M8_=4!=MORBlKYPd)wRMm%aaedRFlB8;?DM{7oVXPPXlOf#c5n$V- zlQ>`JZF-{V-n%eH3TT2p;X%44xeX0430dpUkOnts?rVV20>!{fn0qsr=iuO12n&N) zI^f#Li4=5AQwnA}$S4du{CB!xI{doMOas?TrBW=46GwZ3lBr7`=<4Ya(1xT?t1$-* zFwz(xY}45moo(EGb-HoOqL*xXsoB5T7|8iN0k`17UVz5O!TvC0L($}XsRSl)AqUIG zqn^KbP!FTPKAbZnaQa1X-^M9m2S8>lde)|AoBi7ZI5>|UI2T~*hVTcz1%0ECc}xf-W(Tftg@P1J%7m>j0sP#~MAp+{>2hcfp$!`h(j8y$S-&-hz> zjc#BtwyOWI5xMz1@2eCcby_R1$M|{>8Sf&>C z>xR$_WgQ9$XI)n{EMn1;UdWd)4XZbyYO4eaghSGYop5CxYL()Iy?WNUoIE4JWK<80u^irxB|YEGZhB##X4L=Vc>J z-7LV8?zgZ~-ia{fNkuVCFK3K>TPYS5CK+l~aVS%abzL(Qs15K_o!bN8~G4ZGDkJ+88RxD-5Qq5TE?Nstb z{P*H-+Mh-H`h9C^*`8Xi$2)YQO%pAeXeO^%G-K0DlV%2kzsfJxULCiRm+j=`cJf9m zdBaLB*vSQpF4}alNf-Z`JW(I(h!b_%4e-&)j+knTXIkQ!#$!voVvASW;?0(L(-IeL zaj|~46FauUTd|Y%`)`HupRfL~`D}A%5%OD8nC~2!=te<9H%6k9Z93he(-uwGurHc; zD~QjkJLfE6&KBmHbk0o>UP+GPZ-bUEE0W|KlBBXOS4!B9Nz#)_zU0j?bZmw{4Ge9@ zK0$U8*=N9B6Hgz;2*Yr888!?9*!JM+2Ds3tVB9_nbD_)F?J?+{!)}j3_d0fa47zjJ z?XmFD(CIFD5A*heJAm3Vi#x)S;O#AgEv%ic$GoGrJjk~h{##;FGnRpMgB-_oNPOG9 ZI%I6yy}JAi2g?q#e{t-;5fkoG{{wzfYc>D? literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Client/utility/__pycache__/server_communicator.cpython-312.pyc index 93046140a4a504c86999c8e97e107a2515ad239e..26beeff9f14b7b25854d47d0b797e2861c3c4591 100644 GIT binary patch delta 77 zcmbO!@>iJqG%qg~0}#0CP2I@N#%LUoY!wq)oLW>IQ&5zclA2nemy%IhkXWSW=@;VZ f>l)(f9OIH-o|luKm{J_$oRgWFSF$;QaVG}=k?$FA delta 105 zcmew>JX3`GG%qg~0}vS0wr=ERWAracvx@OaO)Sb&NX$!7aL!Ljg>ZF&TwO5NEi*4M yM$gYm%(M&8rByj%=G5TZ9V&1oa=3r1t#WUH9a;?$zzn1Z6jl+@G$y_Ag7g2W;{ zPrndPU)K;<=NOm#^1Ph<#FXNg;MAhB)S}HUOvmlGIDy761Mz2uN&FU*V>t>KH7B3r z(9$a51z7+BHLNKtl0bSjBbdvO!a9c;#%5&b(ca{g&Nz80uL5h4Gf=_g{k#&BTb$Dv k+b0VsN=^>vGoEbjBEx-0R%wCB3dV)zv*R{Lxx8Tq0KbPfJpcdz delta 144 zcmaDbgYno5M&8rByj%=G@L=zhH0zDLFBttZ)2w2AQWJ~v6cY1N6rA%@QXyPjAXgX6 zb<504%uxs^%FjwoE{SnYOiL|EEy_%c4@ynW&&|zCO-U@t%+HH2t}HG|&E2fQblh(8 n6Ze0c|2xJpG8Jh~u6J%^Y@W>MlEHpMR&jyi%<#=6E^pWY@?5)+|3$#386ym>Qz z?|ZYq27`kHWM%66%=-!{cQZn^|R;UcxS5Y*d9r}ndde2C2EE*Oy8BcdN zaYCW(h2QZ@PQaQ}Bf2wzszNj=sY&)Ay{E5t7Hb|`7R=0WAIu9}ok+a6n|^QgGr_o6 zEpmf0R-B^i<)Xo-mXa$=cNbO`K3M&*@W3()1{JHzjBhgTJ~G|2x$&op6Tn_2eYEjI-) zUdwK>-dOY6-ZfUTgXpEZUUm?jdP7a-e%RLzrp+v~O1dbdH(-sQv-@QxN_+?=1!f`v z!c}w)xd-U-P<^#O%Y6<`sc*wlNOt&YV|HhDx7rF{udD4qct1LE5SVBWT{;|!H;3Z8 zTaVYC4!zS3j_hC24uV?$#B(nhzRs~j&Xfw1=alLXFfLRok~>W?tU}41Q-r#*S`(5;}gGp(G1@NbkvbU zb*!n5J)%G6e#ku@ZN=X{jL$UVGp+dSQ+4it82KA^ybvR9J5NG8Uyv4PaQ8X@Dr)j3 zWS@GeOcfwRwgS{g{asrDTkY6DPLC}(TvtjxnsUx3!F}I(o-mlhJod@CZ}fcOD)_=bF*E zC!e>X3-!fzXmoe685(cDeq(>`%VsRKqdr6P<7Vs=Ft1JSznf}Czp5`jy9k^~&5vIy z>|$NF2X#GPpk-)l-5%2Q`(?xI%y6WDZGjy#ew ze&kb>>7!vqnLi#5DD#~q=&gA=xph{;_v%!%7wTN+7&o~F6Uef_y`Os}N&1Zh{_%`S K^G5`f6YgI{?C`Jv literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/food_menu_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/food_menu_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3cdde37f54d39a1b9c5aa112d3e56d88c3aa38fd GIT binary patch literal 5464 zcmd^DO>7&-72YMe+!cQ$+N4bV*d#4Ei78uBY^MqwNwsC!iHyK(>d0-NxLGiqkxYgn znOV|?2nz1O2Nh_6=n%*Tf?5R%REaM>`j~qzS`mVXZ4Lo?YEOoAD4|oG`B8>_}ugmU!>(9gQ;WZjQwXrMUreuaJwgft#_(o40OE z-Wb1oJ^LV&&c=y$_hZWLQ)c~}hP|n?usO@XKyJ=ZR5h7N=2f-W(XjUcYXtYKwSf4& zQ0eSlaQvxl3mQTK`>lf4z<=BOaGXm*$(FK?)zX0fM0{55owt|ZXumis2+Us+QuQlU z_2G1E*42q{I-qZ_=}UEs?yv8t>C1=GmumX>V;f47{Wxp-?gnLOHqn=B`re<{2RtY- zL!lXx%O*4VqHC~reZ^yggr;ep_Ty#tC-Zc+*g6;|q^^Bzu#hA1T`B>qD}FzoOvgV@ zrjz-(;)%igN&28aoqf>H;`wA|hOehZWy3y0^F}LX;l<&{#j?L|L8-X?UzOI}y%mpd!xPp$;brg2gLTil z6>s}$=lM17c|LGj_ncnte;!=-T;>DOHE)y;gmh2n@%+lnx@YL%8G~!y!HO@i;XAAQ z&aRw#A+P(c@);M_ychUDpYH2h8GZ5Ay6@UcyU==(A^q)gH*^5*ZvTSHk=*Tf;BNJ# z1oN?^nz@v%=B~hiCC7b%IfWC@K*9K0-mliNWUEey7*W^k_xqgpPT(Wr(8jqo+`%OIW!#Z!%# zwXAZtz_qk22taJ0d+Ec)50_o#z`2E%iaYRFUUP>l!S1Dpiw`$~m-OJJ=O2`VBMTFi zwvNXWdfS=Gn}e$(cl7SxEGj=?^;dfLM_(xwPv?dQq5Rh~f9v~8-^wTDo}rDNQN3rh z+;e5!bM>WH@I(%P-Q;0ezIhy|1J*u~!fsvsytI!-4LA_&#IAU z9s+tv<^V@fD*$jA0Nz4eX8n}_E?d9h2mp7-SO?s+;ld;WF?aL2A$`P>32Gc4tK;pD zIi6W3=&~*l+nsyCe}_i^!n#o@gdz-L7rfi**cumLr%|m3MK6joI6-N^HG2bk4HpKV zB+N+?qa_1DBFA^>!)iU%vo}FoL$2niuL1uU^b{kFz^~g6$3E^@TL!TQ`|T%}K3)8D z`DD3$V8Lbig{Ay#djP9GT4&DK@J>FoB(nOKn`#>>#qcI=@mfUVuGAO`X}r_xYz{3 z*Lj|EFof$el6@iUYzAT0kM=n{F)1+N$+HU92JOAzth2E?}CnoFTx!-xyym`JkGCnyra9{srZ9SR~D~q_}|w3Z--RN+^UQbKX8=YA97aQFmS~oM)~vVUJUq}#PEK+b7@a_J3dC|5fawHa*3#0Q zrSr8HTngV94F&Rq>i$wl3=PF{1xu%zs=De)t`Fw0ODHf{vvVjK!m`4%PD6q)n#r5V zXIEV`L~5&r)%;vjP|EwW+#p)yRELSWNp;l>6u(9kdmEuyHC;0aZ^f&is4aom!DlrO z-5rY?qVJE2cVXs_tr&!zYwl1jSsl}ZW8e3^z7QNf0N4LFL})YPX$@)?`}rE5+GavH z1h>h7xQqV+$bWk#G)oPe(;$9GYfgiH7%9Hdh_$BQ0&an-76-9|wmLS9>h5SI-23$5 zlZPAOaXma<4&PYyoCG>t9s9K&ynSRoj78n}Ees!Ps%p4Ybv8>1@Oo1XkE(uIh^NgF zhUCFcpum?K!z`9(3k(^ap)WD~k>3g&jb=81G{#Wi!&^gFd?akzMCr_?(<_aOn;}IS z6E_2HlwB<-Psq~f=5g%U>Vm4d7OnvI$+L65hqOeAa&eH&uZ! literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/login_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/login_handler.cpython-312.pyc index f17d88952d3854f05897b7c54caf863dc20da3e3..eccccd8ba22d1f87f17b18075b361efe5efb0ae0 100644 GIT binary patch delta 36 qcmaFQ`J9vcG%qg~0}zDjO`XVno6&3Ha~-ze)S|M~qRono=a>P?*b9UJ delta 44 ucmaFP`JR*eG%qg~0}y;XUow&VHe=Al=Q?~ru6gO1d8siFYO^HcIc5M>gb#}V diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/moms_recipe_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/moms_recipe_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..610b705550f424c3d578102a149c339fcce16365 GIT binary patch literal 2512 zcma)8-EY%Y6u-7($7zzbX`xwLni}W^reBOrj6#_-MhA#dO#`M;m07{}rcIhU;o2cI zO2;11lm{lQ4^ujgX*_n~Vf_y_@w%6W3^nr5G-*$JtJ+DM*vrnf<2Iyd;z&6@_ug~P zJ^q~!=jU*^1p!?h`6}_Fh|nKw;gPQ{Y$+g=5k{CxqbbCra|rWy5f&cuuErF%z^T4J z*^eZZv!QI+h-rOdoZiJr`o^Kk>G z3DxV@IL??Xz;CO=aarVwNOKMtTRMsttihv&`(ZZ zH3>DRvowwg$&TRJTsBTeE=*pzaB1So#JkgHGkGJOiDPs6GNHE!^&ayOo#uw;T``hf zuw_k48c9pj3O&2xAMwsu+-3mSXQKDB_z|=Qs%f!IhOwzCl?W1vw zhZzjRE)0dp=&dBlH*TqdEzA(h4mO}=w=*rRVMp~*KiqDI^>mULmS$%3IWY25ax+Iv zi-zFPWOyh*RA#DeUKsV#DD2;jc9V*e_j6zjpm+9^Pc5BVE>t^@l;m2lb1kYq4yv_K z`+8_!CA4q(`pR2RLT}W zVZSRExm2*p0W7Vsx0h=5q@8C`^dd_|c6L4KVO{WaSm_-^7R#bT1Bmu5N;~g~<)ZWr z`nKV1A-aGY-8Gm!i_)jky({iB&*jl=;Tp?WS znxHg8m879GRP#xtF!+w45a%eP>p4onJU^PCekKpDEWn5EEF&UCWdK(Dbu z?7+lron)kM& z5;L1IOk#7yWW~Zd3dm_HN2SoWyOA1Rj)iKj0)r;%=q?W~4KB}CI}VlnwXVMM+|t~G z!_}_AQt+u9F3sF)-QeZG3|EWxmhUXxS&tsCM31lLe+pKk@0ZTk+M>&2kJ|=nuZ^ya zU$69jvLye`#E&bz*S?fDWEALHm-{Mm-+laD>g&|XE7jPs_1IV?Hdc+DdLobi^OqmB zcW)vdZg?7stnE3n^7_ibwT_WrLZh_k?*pV_ni7(4~Eh#Te^nOaZ1!O?60LgI&&;GW*{#iff6g4I1kr9dsRx7@$fzaBYSi5#s)j+G=%OTj<@%Bs}cf)v_4#NSf8I#?; UA#fb`D+>P2_j9K=5irN*KZNEvwg3PC literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/notification_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/notification_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bcc5494db20c50f2e2424db729284d34b6694356 GIT binary patch literal 2803 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 literal 0 HcmV?d00001 diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/voting_handler.cpython-312.pyc b/Final Project/Cafeteria_Recommnedation_system/Server/__pycache__/voting_handler.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbe219b01fcc4f5e07a37a011a13b7a1ede4b1b9 GIT binary patch literal 3546 zcmcguU2GHC6~5z{@n6QoiL)fx5NBdif(;wOZ`p(_1d=7RY|yrpE-97k`rafqj&1IY z$;NB1stQ%9#Hv|U6^Y7!@)|2y;SMdV-Vjcx|ahh5F=a4-9S)MkWMGCLC0_MkYkmF(FYAs7xiG&N(^kG<_E` zdLlhF7E99<9KPUo^Q-gjpF{F!$~&ySwEG?JN3r!q0BUHT#8R~fgv ztCnT9_P*?#>5fJd>4YAQ=C^M$yU$)nb2V@*`30%A@0^!DYJ3V4632DBp`WeK`V|ar zkb)y=`_1Nno(gyCt3|N@zPr4e5FRLya2|Hrj{R^B~{3*}q%1tpJaLAh*zSE z6=YjSQHHRim$tNI!*s6ztT0R77cY`oA?zJDB^uLXdH;Au#etgTnX3uPsOi#j@i@~o z(={1Oq;j0)+unu&qpF@!<1tNFu~<|n7WIz9bZUA`&jIrch{UE?z7?{ZX=+``WG} zvQ?a>2qkVIr0I@PiiOMIGoZj?sgx-twM^QSX>KN~nNF6DXDBm0qwmLAR!`tgmVuD@~=Ay({mooGLZL+!Tw>f((!dw;h0#i;C?aP;?iZ1vie8c(rb6z$M`x z^m4s-VozN+*X^$0)_=%F5fKM%m)OTbfKhr}di;+9tM*!Ctd<+rpK;m?91e7RT+ zpy*uDtG{N?skh+W0!0l}p}ud+It%W+AA08y_Mm?b?zWAaPJA()8G#$$bCR>zXwRXe(F9bYLR20uSn z?l?Ptw%XVK`GLPS8|vAT()o|J9)!=pf>hn1E;lWmUhq`?-OFLazqjH)X!s9SL%Wu* z-0rRR>|SZQeY)D&z1+R@ Date: Mon, 15 Jul 2024 23:35:55 +0530 Subject: [PATCH 21/24] refactor --- .../Server/recomendation.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py b/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py index 32a7657..fe7538c 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/recomendation.py @@ -31,7 +31,7 @@ def calculate_sentiment_score(self, comment): positive_score = sum(comment.lower().count(word) for word in positive_words) negative_score = sum(comment.lower().count(word) for word in negative_words) return positive_score - negative_score - + def recommend_food_items(self): avg_ratings = self.db_handler.calculate_average_ratings() recommendations = {"Breakfast": [], "Lunch": [], "Dinner": []} @@ -41,7 +41,7 @@ def recommend_food_items(self): menu_item_id = item["MenuItemID"] menu_item_name = item["MenuItem"] avg_rating = item["AvgRating"] - comment = item.get("Comment", "") # Fetching comment, if available + comment = item.get("Comment", "") sentiment_score = self.calculate_sentiment_score(comment) combined_score = avg_rating + sentiment_score @@ -60,6 +60,14 @@ def recommend_food_items(self): if menu_item_id not in seen_items[category]: recommendations[category].append(recommendation) seen_items[category].add(menu_item_id) + else: + item_index = None + for index, item in enumerate(recommendations[category]): + if item.get("MenuItemID") == recommendation["MenuItemID"]: + item_index = index + recommendations[category][item_index]["Score"] += combined_score + + # Sort recommendations by score in descending order and keep only top 3 recommendations for category in recommendations: From 436dea0ed83084e2af84cc02406cd6755ea51fc2 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 15 Jul 2024 23:39:50 +0530 Subject: [PATCH 22/24] refactor --- .../Client/Modules/user_manager.py | 85 ------------------- 1 file changed, 85 deletions(-) delete mode 100644 Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py diff --git a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py b/Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py deleted file mode 100644 index ee4f22a..0000000 --- a/Final Project/Cafeteria_Recommnedation_system/Client/Modules/user_manager.py +++ /dev/null @@ -1,85 +0,0 @@ -import json - -class UserManager: - def __init__(self, server_communicator, role, user_id): - self.server_communicator = server_communicator - self.role = role - self.user_id = user_id - - def update_user_profile(self): - endpoint = "/update-user-profile" - # Diet Preference - print("Please select one:") - print("1. Vegetarian") - print("2. Non Vegetarian") - print("3. Eggetarian") - diet_preference_choice = int(input("Enter choice (1/2/3): ")) - if diet_preference_choice == 1: - new_dietpreference = "Vegetarian" - elif diet_preference_choice == 2: - new_dietpreference = "Non Vegetarian" - elif diet_preference_choice == 3: - new_dietpreference = "Eggetarian" - else: - print("Invalid Input") - return - - # Spice Level - print("Please select your spice level:") - print("1. High") - print("2. Medium") - print("3. Low") - spice_level_choice = int(input("Enter choice (1/2/3): ")) - if spice_level_choice == 1: - new_spicelevel = "High" - elif spice_level_choice == 2: - new_spicelevel = "Medium" - elif spice_level_choice == 3: - new_spicelevel = "Low" - else: - print("Invalid Input") - return - - # Cuisine Preference - print("What do you prefer most?") - print("1. North Indian") - print("2. South Indian") - print("3. Other") - cuisine_preference_choice = int(input("Enter choice (1/2/3): ")) - if cuisine_preference_choice == 1: - new_cuisinepreference = "North Indian" - elif cuisine_preference_choice == 2: - new_cuisinepreference = "South Indian" - elif cuisine_preference_choice == 3: - new_cuisinepreference = "Other" - else: - print("Invalid Input") - return - - # Sweet Tooth - print("Do you have a sweet tooth?") - print("1. Yes") - print("2. No") - sweet_tooth_choice = int(input("Enter choice (1/2): ")) - if sweet_tooth_choice == 1: - new_sweettooth = 1 - elif sweet_tooth_choice == 2: - new_sweettooth = 0 - else: - print("Invalid Input") - return - - data = { - "RoleName": "Employee", - "UserId": self.user_id, - "DietPreference": new_dietpreference, - "SpiceLevel": new_spicelevel, - "CuisinePreference": new_cuisinepreference, - "SweetTooth": new_sweettooth - } - print(data) - response = self.server_communicator.send_request(endpoint, data) - if response["status"] == "success": - print(response["message"]) - else: - print(response["message"]) \ No newline at end of file From 2156c2e3ab3d70ee6f9c4cb2bf70f376d2a37224 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar <148972812+PradeepITT@users.noreply.github.com> Date: Mon, 15 Jul 2024 23:52:46 +0530 Subject: [PATCH 23/24] Update voting_handler.py --- .../Server/voting_handler.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py index b93363c..2419329 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py @@ -12,9 +12,17 @@ def endpointHandler(self, client_socket, request): def vote_for_menu(self, client_socket, request): data = request.get("data") + print(data) + user_id = request.get("employee_id") + print("User id", user_id) + if self.db_handler.check_form_filled_status(user_id): + response = {"status": "failure", "message": "Form already filled"} + client_socket.sendall(json.dumps(response).encode()) + return if not data: raise ValueError("No data provided") try: + for meal_type, menu_item_id in data.items(): menu_item_id = int(menu_item_id) result = self.db_handler.add_vote(menu_item_id) @@ -22,7 +30,7 @@ def vote_for_menu(self, client_socket, request): response = {"status": "failure", "message": f"Failed to cast vote for {meal_type}"} client_socket.sendall(json.dumps(response).encode()) return - + self.db_handler.update_form_filled_status(user_id, 1) response = {"status": "success", "message": "Votes successfully cast"} except Exception as e: print(f"Error in vote_for_menu: {e}") @@ -51,4 +59,4 @@ def view_voting_items(self, client_socket, request): response = {"status": "failure", "message": "An error occurred while fetching voting items"} client_socket.sendall(json.dumps(response).encode()) - \ No newline at end of file + From fcbb3348c442556c56f5cc3be008e93e29295300 Mon Sep 17 00:00:00 2001 From: Pradeep Dhupar <148972812+PradeepITT@users.noreply.github.com> Date: Mon, 15 Jul 2024 23:56:25 +0530 Subject: [PATCH 24/24] Update voting_handler --- .../Cafeteria_Recommnedation_system/Server/voting_handler.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py b/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py index 2419329..4dd360e 100644 --- a/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py +++ b/Final Project/Cafeteria_Recommnedation_system/Server/voting_handler.py @@ -12,9 +12,7 @@ def endpointHandler(self, client_socket, request): def vote_for_menu(self, client_socket, request): data = request.get("data") - print(data) user_id = request.get("employee_id") - print("User id", user_id) if self.db_handler.check_form_filled_status(user_id): response = {"status": "failure", "message": "Form already filled"} client_socket.sendall(json.dumps(response).encode())

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 cxPgCg9nuCOSDxZMWWX)gyA9e2hjQ{`u literal 0 HcmV?d00001 diff --git a/Final Project/UML/Use Case.png b/Final Project/UML/Use Case.png deleted file mode 100644 index 85d39d22aed641cc42f663e110a77345b800d8a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107444 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%0AVP!%>-kMm_?bg1qAs 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 diff --git a/Final Project/UML/UseCase.png b/Final Project/UML/UseCase.png new file mode 100644 index 0000000000000000000000000000000000000000..7166eae6206b6c3018a9db41f68f946d7210b9e3 GIT binary patch literal 91083 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%0Dw05eD-fV3zAAu#FjA}X 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