From c0bbb0da2b6b6c04232dff39844189b9d3030f2d Mon Sep 17 00:00:00 2001 From: "b.razafimandimbihery" Date: Sat, 14 Jun 2025 21:49:10 +0300 Subject: [PATCH] lastlast update --- assets/NotoEmoji-Regular.ttf | Bin 0 -> 890608 bytes lib/Components/PaymentEnchainedDialog.dart | 338 --- .../CommandDetails.dart | 286 +- .../CommandeActions.dart | 19 +- .../PaswordRequired.dart | 234 ++ .../PaymentMethodDialog.dart | 41 +- .../newCommandComponents/CadeauDialog.dart | 411 +++ .../newCommandComponents/RemiseDialog.dart | 331 +++ lib/Components/teat.dart | 2125 -------------- lib/Models/Client.dart | 345 ++- lib/Services/Script.sql | 304 ++ lib/Services/stock_managementDatabase.dart | 824 ++++-- lib/Views/Dashboard.dart | 425 ++- lib/Views/commandManagement.dart | 2538 ++++++++++++----- lib/Views/mobilepage.dart | 2173 +------------- lib/Views/newCommand.dart | 1288 +++++++-- lib/Views/registrationPage.dart | 1 - lib/Views/ticketPage.dart | 120 +- lib/accueil.dart | 3 +- lib/config/DatabaseConfig.dart | 6 +- linux/flutter/generated_plugin_registrant.cc | 8 + linux/flutter/generated_plugins.cmake | 2 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 + pubspec.lock | 16 + pubspec.yaml | 2 + .../flutter/generated_plugin_registrant.cc | 6 + windows/flutter/generated_plugins.cmake | 2 + 27 files changed, 5586 insertions(+), 6266 deletions(-) create mode 100644 assets/NotoEmoji-Regular.ttf delete mode 100644 lib/Components/PaymentEnchainedDialog.dart create mode 100644 lib/Components/commandManagementComponents/PaswordRequired.dart create mode 100644 lib/Components/newCommandComponents/CadeauDialog.dart create mode 100644 lib/Components/newCommandComponents/RemiseDialog.dart delete mode 100644 lib/Components/teat.dart create mode 100644 lib/Services/Script.sql diff --git a/assets/NotoEmoji-Regular.ttf b/assets/NotoEmoji-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5c902c08ba4797f01004c40f0767c5a539ce29af GIT binary patch literal 890608 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ℑ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

`4Qj#fAMuJ4@2!SDtv=1r+ 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

+4UgY-*W(+$d0^sAhzG~!R@F3YUSGa>d+X=q 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

X+n!I>+ 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⁢$c7o9H)4TGq<$LMA7-PH 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⪼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 z z%?alf5wyqPVvG_A{}pM-_O)E6m*Xv{LZv#W5?;m^bM~C4akPnKw;8p;pjz&rZ{t*0E5BE+?uVFLQIJO(SY=YXSRzN*e4{L74G)Sm`(>&LBFK&j$k%ACeb(h!-Legn&0{z%SrW zTMO7+paOXUAUv_Z>@Fd{xcGI3jhROjIMCc;3R^<0GtMCI2z-bsn3#_fXLr^>P=R<3mT;Sz4o2v%@s(yr|*{#sU;U{-)(){?c2wp@YYnEp!!Uo2$z=ot&wWx7wU$ zolcgkRT-qb+OeKBjU1s)X|kK-`qW&5Ett3Hoz>MXsZ%eK=~~TBg+wF?ws#oEKR;&k z4OO|PKdE0{M{;w?UhEf(C*)d7O%({a=C3Sc6 z#)ltWhS$#en(DG&{n_-EYz#I!VeV5l574sCRKw|F`JJ$^hx_KxhEqG?5=<7ZY? zR^iLL*W}DBuTOWC&&>7B$`Q$~n0xI#h2FI*a>m=M+gp&MTI;tLj&8}cjSgoly*S^} zo!eJfX-<)t%siwJfu+xH(dURvPO~XPeDNJKO4Jh;=hoKTIbNOLbNdE)j>Qy~h|-M( znR351%|~%9MyarGrajeT>GNf@>TRtpW%9y^EpPJTw!HDow8Zpi-7vUQroaGGjlDBH zLLqOjfJRjIgi9yjzoJEZr_TIn{`?asE_(mqt9`O$y=huoaKrp7T5iL*Q%U;nd=E>Cu#5N)Idi(&oH@6ypaf6_#z3Y+OvlQTD|xZ1X?BU*#pUm??8Vm7`VBB zx)Z82Mj})>If0W8d%XpNCkyaF(&EZ@-zE9MV^@0jUC?Mg-N!HBWEDie=e~b>bpbcM zVBjzO*8c1EkkrR7y+l$Uv#s9=8OkB`@t$7_xP1kuZ{$DJzl=Y2U@JM{^qt)AqX!E( z=>LJ@O*SJ z+KR45x1a;)adZ@&K%aw`#303|l$4dqph8p?Og-bN8PsBG9d#MChuTNoPd!B)qu!=I zrv63!PSdoMHbV5MpDv@D=rQyZdOm$Iy_LTD{7(+li(w5RQLsFtJdq(L)KAn}6B*_I z*mlCT{>R$9z`b0s{r`%oWLK0?W+>z|H$1k$t?v@D;P-CFgWz zq{9p2bw=)GsAOa)&OJ0d6pzJEk6(18<@R$A#akX8igQ{%_YtEj<6}GA)sbrrHF)k> z%=c$s{qlH0ygjTL9`&J(X+ysko>$RUmPUbq{}SK8^Ws~>Md+${(JS$dky=#uaM}F$ z*7?fLcLv%OKO_2&_|~7FOMe%yH_{#+zApW*;iJQ4BS%Nh_)l6n?=^kiA{OplA|G0pW!UZ4lpL@P>89JsU$1gN_zE7VDMrHUDt~ogH`AgjE zf&(+C%@>#rqM7XRcD8Ox?8FPI3mW=BINFuMc_}}Y;UQ&~9At&LVxZhg_YIp}pYZoRZeVG0s z%(O@FXJO92!;B+>=ZCp@;nUAtX#D6KBLk7>r=<3W5k^W*PvQ@&Sh2X+7^buzR2wjE zCq|owh>}S@AQFP{J7%^7lPEV{PJZtN0RP_J>eK0fIQ|W&ifxc;Qw**WcHVo$F(EoP zR>qbOA&Eonw5r|={$Kn3@EPl~^G=Yer_=3z*H9rGNTB&xKaDIF3*iXo^prf#_)&1kY#NvF$jSLTaV8}i|e#s~C5upA8=4LutFnAof zK<7VDaJrwGABk|?1^tr?HjdmR`&@{Ue|R9jfU_GO(t>C*DErI_(DVD)>P62>Q%L7)sqgh1<%q_ia4(=AB{k{$<>>l@(o`Zb`%{egtAAn!mqLqV*Q z&}?wFh$Z~lj~+(PqT>nLy_Rx7>{t<1M|Dz@sM*wVY7@1Cx`EnHJxo1I9j8uEpHn|l zgEXI3(pEZy4$)O~8$F($K`*A)(U;MC=zaA4^i%XP`fd7S`d{?#9GWBL7|(rTiB45# z=phNZQ=&eTxSgouol%~k+x)NC1QOa$?8EePK?J%EI)($E*jGME|2SaJ@JB}-}!O1Fs@WyHdHWdHbDQG z9pXI7{jQ-)Fy~q?;+lGNSa*;2YuE}BtvkER!-j<6Is;qd_xohLa=c}XW;g;>tKDtw07IsM@KsO|JC?N2jX2i&sYuH6?PAe!@w)?ZVVra zpFZ55^RyGc*%9MSykz(+CT?dMEt=nm_B`NT2_w+vBc1_qqcgB?@i{rjGxh-{-r|$lag!{?2o?k$V3#?In!n zd9HRoIvVNofB)R`(a{L`4tL;Bs}0vbcOyxhAVkM)0gePa2~jf6Q8BZd%%S_j%%gKCLl`r2-VFc$4U7vEC@u;lQ*fWLP2@UD z$Rlx+j*oj#Ye-n>XR~JajE5I`BHP8EJx_aAfq&(M)tLRmxmG7_blN z!+uBq8~m4HfOx-tgugpIjanIGo~BO(qm#Iy;J_cetAeNRJTv2hn0spO>32SmB*I`!>(spP@FH)ckJZj@N(J$TnSRR-wIQAJ0^oqXUV1knw&sK<0BWX_|+i6u}?y0n*0t#fH#~EVR}UbK(I%o?#CeKD$M{mEjMf7o5a(heZKX zgCh+%6@d>D?SVjZ@<%*j*}#a{NpP6>MS|lF_(oDBPcHlsfDrZqF>fC@My}6~mkv4R z5H}+5B6=)*(lloK^y=}&YSp-6ueCDd4!dQ!036XIP!|@Y^IHWC?J7=XUinyqQ72Vu zcqwDVPOCjrs;%g)o3^Rlh)U|mLrPydicJLaCFz4mKiVY zU#!xm8S-6UXsjZIRU|UWs|_KCA+O5+S#E_fL#JK+@H-0{rnI!8`&3pHmm}ha%B%hV zkF@UqXyeM()~FzgB-Dk3K)nGHs39RFArK%02t@B-z<_Z9_lkS3agSSK$Bvyib`m?q zampsy^u$hadM~?4UUrl0W;dG-lmFZqfpMI?|GodW5fU?Z?p)11_dDmF>I$eiDoI{A zBOw}ZD9)AWlT*_qY?;^2;?Ux>a)tYYU4MUTVfBh7rNKHOm5LRGvx`y-LWaDa^vb1k z*EaQ>Jr?EHS_`LVX3N!?P{qNl(_3;X)@`hv|H`Mki_}lOp@_;K#X^;OLzI;seq^M7 z+VNkO=X#@Vt6V>K(~dy+)zOXFJ(~B#DmM6irDkMh$?~o5Sl0Nr;J>_AS$^~W5u+^A zUQSEM85nYVsuPEwEGg|QYE^JHS(I z1<;KY68u0k4F#r@2pSYi&>Qj;qf!_Y3Lj<~IZ?&I#GyBlkWYb{MhkHER}BYWT(smb z=ggM7|FUG!iw7IN!rAx&Y!>#)2P@y*yz;%%PUq=&S8aZG4Npzq_Vu2}@fN7N!k;uqGAW3O zg7OhLp|;oc3HZ>LfYFk}Bu0x|Yhkn~!~+zvkXDFP*~Z=p_#wV`jC#qhkG?l()R^G3 zshZI8PC_A~+6L0-3bC!&x3PzCx5a!e_7K1=_Dj<*Q!724;z(J$OL&~}ZkpuNc*`#AF7J><(~dQt1>H1Bg> z{4ZwukLJ;Tc<~W4qs2V>t#{P*M>FuUnbBmv%{z9%JNCMn{tgGnyklFrL8-1*DAkn%j{5yj4dpp9;~^||3k^_U0s>;ehsbe{3{i#E&qtU+ zq_YIS#|iI6@IMrxSPn#d;KE3FF@j?sK#v{54j~g801^!fbHS8T2`nOr6kK1S5dl^x zA_%!^qj#bg%!ikc~(;g$4rd;LtsS zLjSp6?_XujD2)tMF6~@1FS2WDXxNxvYRrDbHa|z`pH?&Q)Yj*A-&;HK9{$nKSNc}9 z_b=b?u(jo7mC8~KT)9gk2j|EFo8#Ep+CWWl$%#Fk(P_6oPW!lY<4eLjwR#rG@L^lur%SI-u>ROF>)kJ7Z*TkoiewW1e%MI< zqpt3%t?TNltL+;5(~`oGoh)xWlg;GDCFRG*vl6&*cP8A*5+$)0@Don3h3upSf?^h& zVKY^6N#2CGqy%*w6(8?`NLslxK?^fXa)UNVxV?n3oU)&C2%>|Y1t0xaDQ{BV1;0Kf z#(`PaYpKB7_!N{Hmx8c{N@s!ugK*>O#DfgNfJzGnr$oerW$%P#J`PnA=*0vSfwHlH zA^=(lSfHhoN8$}~z&D^PAm2U$97s4RfGS7~!kHV%MsN-x30xM(<>I>e$Ke zKHhM+sOWIR@!Jgs{HE?>Q{1|&^IxxD|MfkYI`@=g-DA`JX0ur%52Py!Nsd66u1Zy~!>*7=Y&O50bLfS(eYE=jS?d$Ud)r?)gkQ>d1Y==k4@@d&@b&}v zMf^XHWOQ22{R`9FGMQ#?!9V!dIg2VtEA3s+8@6(i{XCvn!jZA!B)P_%9PsH*V(ED) zY=+FK%XU9~emC|q2mayK-RGlgXJh+VY&Hv@F?%hh7rc*K*6gpa>6GwKXRFx1#)7T+ zR~@}+*)8JrK0d!3GW+UM6V!P*USBfb&*8`<;&e`&x-iRC{I(cl1p{-V*<+Reiwo@8 z(YX+)@)kf{4J?E#A_kHyMmL)>AJR0g_$}N)2+37yry!UkL_2VnM*@cUy21sT+vxhk1l zJQmKN-syDP0t);@uBJc(uhDr|zT0puc%8?ef8O#KW;i{W&Pf=R*`=jT4di&KPMcR_ zD#_A2t=NiYzrUr$?`y#dGwvuI-EYNso;~Bo@azogey&)e5|7noP)|4uZ8-}39hb%* z$<_EV*^bgXV1^+5c!C>dNCjmB128kIz({!#%F8@Y`D9{-2x$dLs*`7hoEC5ZMvocI z4S@#f)XAnpz#noKW^fV(y(KUa5(G1JKrz4>*vSDFjSENUPo$d|H!?9%obol@i!mbY z9i0w&8_6=KP z%WOPIdz&(F`^XLVv?f7{TrL;V$R@VkLyM3Xmut4}DBvfti;iqOaNO(K_lvv@<70J? zK8n?2ytcl^@9?)yp2Xk!PZLeLY4MsBE7mODwEWwr7itv}w{{Aav}FsH)U9=kmD+{R ze7n5!%{QUGT=epl)|OW<)vyH}Z^C*bp|k7$`dQu;g_8-naD{hP{rz1e5z)T#9ott~ ztK|8DzD`GLOWO2ts(C2Ay<@xIm>@f@QidAi;~PUt)p1#Z(Z9W;J>9!*#sw%Qz_>7D zo%f*@AEG^f^YpZqR!1jv#8cK*?mOnA<{kKS<;qVFB&>XR+O&sP{?cU$g)FYGf8k3LTtJmZ$_C1A$}u9O z_EE|Uz&1fh0!WCV!&UwW=mCT?iHB0?q>ULS9%v;d-UF{fvNs{v6O0ZKAwUYm^u+wz z;Q-=}a0yT};-my4g%5~5qP`Fuai~yx4fvspI0;-Yb_Ov|3{fK>lI$M=5z@Ywzs#s9hP^xQSiLGFjx-zQgY))b`iwPm_v zJMpuQ64T@bM55Q!9-(uVdorUV3D0)v?(7D2R#>G9sB(+Tyu3^mUy$O0uqu@;E0rn8 z4_M1fxr`Jj*(E74NX6C?UWQGn5ZPtAMysXLvh_BlBb~)(IrVuNL96VdSCp?1x!c_onv=T9O#FdDOK_D_1C!Nk%`N~ zuz&BM^g(p)^-?*(jmTM6LPCYyEGh`(D9zwi==!~CNSI3tDl2+yA4!T@=W9({gC7Db^Jr@GkbZt9bTCEdJ-b$X7qzZ z?4Ps;vFGCOywPG>B-Z|yZY@?zeFSTY!|xdLU^)7QU#-!u`TIDETt9u-vZIPB)p;zx zsP5dYt2KVZx?Atg1Ry}Qa9c({zMc+9GNunj{hjKlstcb#-kADRqrOxgm6xhY3+7lu z);Sa*<#S+0MX>CXA)W|1ZRLT|5P1}J5tYwSbPU=joq@#fr2otxsw`3Z6e6iQBvR4E z_DM(>j`?_jER2%D!Ftx9+6fhnyI&IbUMvgvqq=Kn&ITwe+6a~6wC+|PA@2!UKnU?4Zw?fulJX~GESi`er|=| z)Oqnt`a-6VxsVYb|F_?{06#sI#w2e!fNnoJ#XrsGo92fEJ&>v=zp*jj*VyP4DHI}j z;b&`n^e<4eUs8NESW1nLdcUtGs+Nyc$kkEh=kU+iSW?>1P+HO$H9#HaK{?oScR{K5%dlC3kH0U56C~@i#B?_O^rTpV<$0W7&fq-3Sc`Q0R5#wY(A=% ze4KKQ@&P8tOn?F~w^!KP6oHeND48f7>5DQHHqJl zT1>=wh)?i=h@?f^Ix;C6VtxoJFhWcMzK6O2IzrrNTsIJ-MBr*bXcCg&k%IsZ#Ux0Z z_|1t`VIde1(wV~tf+eAqam`0i7fd<bWSkGA5DxiY1>Z>Z@5Wq zh-YR33uZD>qz)xJ*OMkrYnx`A)?-yj80(d8GXm@qdqOF&sVq>V9T^rJv!-_J--@K(aP)BriUD`hj=5r!Shdeu}HmTru2xXkWpW509;V zsP{Jfxtj8%&MHG7j8C&$nBt@v)7odoLjlUT0&mb8FJcIU*xxwu=4xvwu1wfbKh(=& zV^G#I&h2pqnc+}j!f>;{DU%7x?;Eh&sh8dDxy>bG7cJDOHglnE48w24@51EY-f~h= z?16mySXyN`+wT)mX;ZojTivqG``0~)f3pwEOKjP#FGyd44fD#ve_ya}`qaSbu4&JPJv%+LcimO_fw9ImYG=cMuir-jGas1X{vC&dU1BMcXR;tU z9uL3)fB_yoDI0_A3Z>tXRfRwX5+pQG>k|-z^Z+&JkkScpP4wuIG)wNykS(=fm#Q$94ZzytNL&qXz z{hT*0FTxzKeX7N>@w1k?Su2Ay7u8T>a<90t!xYl`D;sZ|y7N>)|3bGtJH0Wx#h>Dl z*UjxQ*ZX{xQKd9BSMz{}O7n)Zw2G9dR4#H#-8}`=C}zu)Dom|awnYy#&)@D**Qd|9 zcYB_*QBNHkELu6ME}O!nir~3QfXu6)NLbeP7%^|-hw1q4g*T{;KQxQzwWKaGKi8+Yd5Cz)-!9`Fnn!F>~ zC)97BdKv%nybBUAC&x45gw>wfA)_c^u&k^v3Q5R3%|*s?cWQbfo5o1w%2Nb6hkpDM zX2jy+O;mffJ~!GIicY1Q67d(tp5cl>uP#aXB=-JavG?a=?_<5w$}0M!t_-~gd)8*q zxuXN6W!?DM$k`igm3N%nl;P}E+Y5$P7E#YY`hhY-u3JC4ll9Vy{!|g)=}Wh4KXG$` zZTbGfKRr+T##WJQDC=8ZKg#{;a~h_zWtpu;Lr#Jr&z57)w%8KJk0h!ywVByUg$2u{ z*~_N(m5shcvjHmTM_;7Q1A~k{)ZbS&wjGR%PeKNj9wLWR9g$qsz>L!)TMCqSgO?Vv zn4s#{i0c9ILlQxn-A+@fA%8!l=ZYh&EGT&w30$!~9KnGBu3+iVUY&lB_s`xJ7mcyQ5tjY%e+K-Ht_E-CbY8EqN_X$bPW;u=C9Uuj zo`I*(H~A?5(P}gTl?@ftfaDp72IC9{@*$v7u4t3OL==Yh+lamZvKiuBM7U5W57o`k zs34Itpg7=iT;uv5mp)RnZ03T>Pd!-oRw$8Y9Bp_Plilp2$>|$<|H(TrBRU-a-PgD8 z6&~{$oIRfn=5{_`muGwJQ;g@YqRFYbH{kg5^*`Ys;BRcgzqIYFU$=B)<0Et4-8O6X zo#mZ&AzhLzQw!~FJTT4!3mYpN_>Z**ryy>0ZhAxMH;6I1$tVo#p zZBci$$|6+BIHQ{-p8l#c13h4mx#QPU2`d<{!fp?hNV^^M^Pgc{48lc9z&7HNh(X>0 z#^Zt|3Zy`Mg0Bd3?{JPE1xQ5uenNME@YJP4>7)T*33i7dl&sUBQL8nm5j;`!3#2yG z*hMT^ly#KUF+fK^c<9j*avVHz_>8)nOl}C6In;?3WD^3%4XjDjDhnz3Q?}n~ntcnI(GdnDl=l zRHqvl;SG7-w5HCw6lM0lZGnsh3r!lE3Lh{x)g0R9v$uQv`Iv!U)Hb{D{HNQ@>Dgj? zNM9d$fZtsVu?z9-`9fiGRW4tm8C_r0CX{fp3;Yea;dGWZO`pa|P2z~M_8QB~yz(Sl zs=BeznZmb9Q`7yahBAvi+P(nZgk?}5U7A{1ZnewgnK=O$H1|yzJd_iPQYD;}JW~oc zIa#evw}$*3V>g_uY|xk4WDN`VH89A{ETI`b5@3+@lva8beB(M|ciYx(}+w<7gNB`nnnPo2NaYf?nK1L8* z+vrQnh40>0lvbV_P17Z*vf|m?6q(%cwWZ9U&?<$=Qis1zA+yVbQIQmm8C$BX+u=RU zsAX{(Qirv?QZBPA0@>y=W7hO3K4WQ4vc#AtNlr;9ywgQO5x`#+KS#vJ|@8`N~1+g;wrDvT?(6%^9rX$ATDm5E`& z9I9?yBwXrq#$PWIO63o3$myhZ4B&63734bnV)4H!|0NgBs;ir(*>0X87W*9*Zwl9> zYAdXpB}gMh!>s?ABuKs8+Fo?DcV$H(Uz1rGIua<%cM59T@Ll5q;&g6V^<)9jZcW;a z-8~NP8rgs3WH5c6TqSJrIa}nZ zQFn_~INaPkCtB#v^UtXDvXEL&k6t=C zB|32alb@DsI5};zx3wlGaR9#upW~~hix`ET0yjpuk}kFRigG<6x|HsXiSCcIuIeqv zzcD*aCPSu+Dr=oHr)BiCp0>yrEcT7Mo9E_cstj#m>fYhS(w^i8g}9@SskF4 z98U?K23|!zSZ7U?sZea_2<0BcohB?EB!ZLN2C)Ssvp5|S1`iRGzM@UiPO2t-22G{b z6-S3`!v@GZ3?2gp7g~a7<)IA0$X-Ko1~f0^BE`tE?k-XwAgwKk+koT)zd&de@`;1U z^9AUD=o_gvyC2xym?lj&>vc=E76i5~(dx~~(zM3i4|ETX4yyAG91av5IgqCw9DOp! z;mCm()foGL-+C5GJf_e52+w=#P2By_EG!KRogEolrC9Qhd7pi!ST#0wb9wWF3+kGh z>J~iMTwcAeSsit|qw3~;*p27#%U`bJ)V7KF-(z2W@dftP_X1H{Eoa@A_~p^sMXzGw zqen6EtBY!@HsF_Uy%oQ_p{jO+e{fw%s)CuAkemQNiA+Um$+|)RFEY7ZoX8U;B#3y4 zV!K?1g*u9hJ3EVuJI3F!C#F5I(Vd^~-uT2c>^6ZQ$m45*0)aaH<4ZX?mp)E^_MTLw zGWDJx|FZUPnC z{nfR#)&1XqifTWoNO!}kR6x*W1d^*SBEkx90hK7)b|5D?gqo9$b!b9iUMO@R0dlj4 z$i*M4u{}xXK+86^`p7h(Xy##gf?^x4L$%vUdWap?xQNtk2*k-V=r(}YlZlImouSSpa_bKen44ieSg)sePL|f(mEW_J8c2 z_3TP8A9NjEy!dFRRKQ>PEdG-t9CpBK>?CL?BMCK|>q_%w&Gy>)^XigT^zxU{%1O;7 zXaao$m^0RT^dHWySBHjP?Q+&%m@?%8{d~v*TjjJWaJ1a;V2PSOVTAl6YNqF$%&aU3t6bP5`R~DjfGp#~TD%Vv@O`y^)WbCBUM!Wd)x0>>;w@~B%z{Wu>$g6d8 zQ}cwjjEZ+w++y`)Y@IhgVZUR^kSFrx?3=oZmOP!TzO6W1R^r0~%>`_wI6;=s9qbu< zPN+_PVrii3CbpbU>klgH1BUXczZ{=To0ARoG=lL!e$sNuvA= zE7k%lRstrCJW7BP1yup6?txSV=K;nMjFPhfR_zH#F9{ir2MY!`Dabdm%>W;^A>?xf zUuPG?pp$^412g0@01t&9SX?lHNV5YQ7qqP4AUX{{@Hq~q6ivn?=L%><5CBM1E@YlW zHzaKJ=xS2&Lm)qKTk7n)o;!glv5|Lv!cN^dXDhz{$}{+J{JR5t*I3nnZ7ajL>RYbOjU&Okxgnd$Bw$5}j{#Sez{-b4oX#V#~ z>=p06p0<@0BN%_AWq<3Axsl$|1)+w=x>9q3xh>14ZO4v&k6efpCtkh~xBI63_>cIB zXD;JMSK~wB>?O_7Dr48CcswGu*3Xm6q(GJW)|r#Q*N{x{DMWHdU;wn!P*PS?%s{H$;-8 z2DRHxL8%K!-!Ti=y@p^%x(pI^Zu-4ti@e03MEztt1mU5Pi+DG=F+{Q!nowfOiQ`C8 zCJ2L=S`fYw7Q4uuD`N1(l7&WuZeIlZUvw4hZIQZT4|jP{?(QC`i(_0hshjX9L;rP*mG1NO=fp`iZp@4qemP4y{7CU zdTNp18@(&%0d186FPj;zS?Vb>7>k!UzZ;||l zv=+aN&BRjAu%qmwV0bzA=w#+}4)cuOp{P|p0OsP`@%oIXzj+(~Ys{99Kb9MMes=d+ zYLND>#+0ER)zjWBtf?s+VRK1`ueUWaN5 z^-xV=DNy`Q07j)2AtTbgA%zkkAacY;+X_g#PS7o4GKe{$$HPP@3C)-m8lvcl?H{xx zH;CwRgnWq6!IA()7gA+FO&B4ns6qPF!m~$4Um z!Jj|SJPRtUT901-dgYlXU(5ET)$BQOW!J7NCwA8~bUuXjW7K6>%7&KXK*`Ic!R^7+ z@=f`gI!%f!sFj)p;_OG4VU*{$VL8Wke0Z?B`rrpQWJjHw@E=y~eq-L_SlxStFLiFe zckMcZE@%;&(xmxHTYqnRM!-B{{vuCixhy3ui7)Y##NV`U%{Mj_U_1O2-|*hMkbLy>n+<`crxw_jTz;St!*(szS&Mge>uS1vvXq%i z7JT#09lg=^o1b~JugTAsxjU;h-WmCU%;sJi){M1AY~5f;FPhy)Z4C8qC_Y;{dhXul z)i1TZ87R;GY5;qCed*ca4gCbuIZHS!qj*aVn2Au~rta&2j1(21O#N>F3yJZ>mXX{* z{I2uMB#1-iyqJjj#||&Jipm|^fuwVLc^H4)-#gphRH-!?Jq4AH+6q&cD!v}(35G*; zILpeM@cP&>^+xX|OI3P#=E`f~i}3DyJ0`1Nfy^*3w-pz+p%=E+wp^#n%q`LBetzi> zCB2@ZXmkj@s77yN-9_O@*)@+a7rX~%0q5RDIsFHZPz|Zn5#ueO67VIFxN?!>Jz~r# zvo$mB_a7lTqfsMxgCYP<2f7TQpMnb4F_|La|F19PbzVoKrz8i9#Hp7QEGUwoO^aUf zWXvgLLz$F&cc`gz|6l@W6!o;r z?zdYFd`>dczTaarWUm%5WMbRKi&~zDU9wU!n*E29ctx?Yge^*tb1!bRi)0MJ>TH9} zv)|525$Ic?_RP%xt@Ozw@xSxJSKj+< z^x!Vu?i-`e+^hDEeHa`rDjE(J4;K~=7e{8yh*Zv;S*b9a6-u*t<*emtQr(5`*ROtL z;}r1u>AG`%-&g;cPu<>fV_VyeEv@_8+V;0X-hRm5Up7)vF;ZsodQBPm`TtLz^LIaR z5;F_&$JT7wyq3x~jlFR40W5&+6yP1y6%zx5!Fp#_#)e6ZQK>MG#pkSbrzjIRaxgFU zHacs(t(P7NVh=l-{9G!3VxTZ+FN|?wymt^|%`kZ(vsVhf4&p{G!=7(3ct6|-NuQnv zr#0kLeOa*oHV^VDHYp-E*v6Q3d@Mm5T+>f#M?Z$EZ%#%-oD*(Q``~F{V!omxmSs2L8 z7SvSLH?pa;GCGYtB@6s+Y@V)LdZw-tk;=yQTgM8SSzP4#{Fu(8IJ zt}WA0b;WV<**RG=B9gjA*6e_S%}G$Z3aUd^XV#8#RrF?8ZC9Xv#^?%hT4i2dWx6Oa zCnY7DDw)=+oEIRErHP4S_6gRf(AFzL-VL-phvUjG30o1cZ+LJ+Of^yHIR z14adT0)2;@@X!8!TgE%xw@<6Pr@U{cYvb~jb4(3twv?01RSGQS#$(le?%U@T-CS0; zwxXmeT?_uTIfcndETcS-ZGj-W_KuxLX}t+DZh5jKe(as>WSz*WOGzzFlcl9`eQK$7 zxZG{D_;_p?+u<{32Fg&Oq_fQj=hNG|@{jS9)%L6`!oC%izQLa$iCZwXXBBLu=O+gWe7y|=ue5THZXcQ{f>jVr8x|vKqz^7c}#7gdM)Gp|Tz%nF9Ob{=D zOsHNxEC2~e_~Rrj_#?GbY@rY;5D?`5Q0Fu@M`~qc@hl8eiZR6m|E-KnZZ_Qre`QFu z89Woljx%JZq@@d!b(vZ|TPdWcGBPYqs1|6>j8lQ>maf%msXKnQ1Q@T5Ez}43_*_SM zh20qrQ}2|j7%GJ;5cFh2*$pv6$To0H=3E&Vs7xk(H0UVTH+n#!!-`K}CXYS2`aBdV z+`aJbKj5a+v{=7yFc<9xSU>mQh%y76aVAC~yxJM1>d+DV%}?V0N{t7_BW%)q zEo1&fO=2)VG8A-J0_h|1tdOHzMa}HAlr|UkxgzyzG_qob&7`9FlR||Kmow>?#y@1e z?c<%|(WG2=ZefVRn8^8&3CZ&A1#LDIvLQVEffk5BpsQO7sA{PHO~4#%Dkjj9l!*|a z!DbHhU<7o+XA(k51qbn)GijRvXoq$j2=+itHu0H5BR>;(2t3q4(tfNN$u~)976G$H zO*w|4cIW!1XI&?3;U()o+1ONVE0SeJ?e6@seTK32jC;Pc9QLwv6YF;|OQpHk8B8U6sfrDF`GsQuFT4QgI zNuIN6Np-43TH^Kf&ng#6SV<}3RGUT}F;#>YJ#n`$YiUu@(kx$S>Qrjqq(AVpl6(xi ze)?X)_paO32~mr_yRVnT;upWPYT#6lug%sNYAz6&B}powQl(7>m7qi*@?^`4G|XI$ zrq0C7lG&Fn8}OHU+GkAFusInXsh3|AtyZYny!_Uj{Iuq&y(YcdDfRhX{Cr7SeZ58? zNmr|_dZErLbBNVuTS>6r*1D~E)?Iz{^UlIhsL(lUR_vXCK2n3Gf>``Ka6sG!)sb$c zJWP24SnwN^4LCsai5 zhS>gh(gjF)gcKODeek&IoqE@c9~=g5yzG-tz%f;N_?0JmpMG;Y{wsd!r5C|1^4IOJ zKZ!qc#_KZOqF~ z*02)CI^(&v1e(+L*2WEQJ(r5f@V}_BP4skbidD>&T7ORE%-xgi_nf8u3mkVhsqw#H zvcwft(6>EAZve7fitq^4aX9@MW)$s9o%qqbUD>a&$KjlH!Ye6DI$H};gMsm$gp z6+)&9G8zwuf}&E24))h@s;NC-^7F!Fkc_)B>-%I%%%-Sv}r_&0GqlMTe>^L$9 zPbQYh?3UEx6WsOp%5MGPEhUOC;+8gd;~0a#?}NV*Fcxe2m~Zw*EkIgl=rN zld>;EO)g#+T2ryENkurioP>2kc6ME3FQ5DXX=(#8QV>XpRY{&>l8&2DcNc1Hs+cNJ zHKHIyE#C!6I^w{euikudcB&#tXN(t&g5x!H$~Rz(u2CL!|jZQHJ!|4X59*7R5NGY;GNTHQF-Ew_B~`0M(rSLqJPy}nZLg$prR+-cN-)YP8UDTm+s!_We~#Y(rFnMYf4luisngNmfFEZmZB21bPBD79v{I=S zy~cJ*Q2Wff1lGK$+?6UW%POpvW~HVLtvxBs%T(G}Mfs*AUWz=!dI zo-0)bkBpvz-Fw~8F;;H8O=WbEzil#sB$XjblL^FWabo#sSM&`2@oV$vzlJH#L|?#f z`;~IT4HyM$`Sn+7GdOp>5_cJ7XmA;)(5R3!nfVRuXT?O}N~G`AJGp!-tZ zWKddrq*y*PTrIESzA05C|z6;UQ$N;H@f!nk|mdyLqDL|eh!Qe zQ^5G(2aWb&5Efph{1aniDgsx@oVcW!A;!UxYc;{x`QV^LAP4EWgoH;bQS}fpZNdu< zT(S||NCbp+0z4?=n6b7ZE*~&#+{X!k2ZTt3f(V>I?So9`;I>Ud6O#}=3D|<*8`#D} z)D(hEqHiQhObiSp1k@ER_qvTd1i%x$0fNCOuDKrxW=MW@fg?XT28o1eh&2>LS_gqa z4?PlJWddHAX?KinZ7Qq`$0bFR;?$b7%mr`n9s8c2p@qtjngl^YaA^alirc-VTAmmR z7gT8=*UV-7Bm6^cq#zthlvi(^!mZ*oEGdSjkgYe`Ow)gD?nQ3YbGclUT3|AI5 zZ5_R>^W&2cSDjWS7Dk1frf{Gpk(Idi!(RMPR4OYeuFg{!No0kXaSDahKucs(sX5dP zjnb4{B&u?S8ZeqRirUfiGKC_J8Db?y3iE5@l2}yyD{JqEYoV{2K)4BV#0bS@atPTz z`SIQ;)(~=6%Zh}VN=*j#==y&iqtT1nckHd+UBW8b8ksxAtQsBNe0dn+dV2TWRqhYr z+o@RD(n?Ot&h`W>W1zqJmHY7(_|w&wmX6R- z_)2|Nfm3XO=C0J18I7f@p3K&V?+$`jW5LLRAzRhd9oyhGueve|ZhUIJhdR$3$4YFP zSy5*x@)Q*bq>#pKF1Q0;005Xu*rQ*Da*;oyEgCS^ahjDduo$}q6d)NgoFj-0(HbKE zNrVTaM9|XY4xkAs7aNeki+mRVP*7j4ape}&Egz>{NHyR9VONBd0$0a?!~&$oLfyuw z6&4HJ7>*D`50p+4JCZ5TF+y(v>k0lK7cO|TgX24jAu^zwp=za)Ysxs%f2e!)QpK60 z=MQPCGO!n@468WVp;iRtPG6cPQ9Rq}=v1n}Jk?s8BF=4e*7otliS-5jZi!iv=9bwZ zW0mM4?UmCQFZ9WDwSBGRN`m3sa)OBO?yu! zBuvFJ6*`wRztCigY_2T6agos6E)a;4nQRU_$CIWNa#*q?4$aOAW*U-c44y1Opi!xe z5+TQ5sTHq2R@Qn;S6ZT|bmbyn!~FcHW3akqp^KX`y(~$<#(y2;Eto%RwlX=Dd*x!M zrTk{>2Zm5MH9^f!wIn4ZCdJ3` z_u&tGj%sGgG#dONp~)b|C}J_SwzHrp_rUGd)u#{U1`5gsge{@g$m8uDk5{&oHKm1h zV-aa)94kIc>(yBjAqA5ZOT~W`i7-rT%)p;&*ygfl4~NQTTkNjw_&&YOrq|o;-#&-w zkFnSSN!#&vR^EyK<0u2h62BeC?ua$O&)#=a%f;6*`l$yn>qko#zlnc#V$7XUs!cVg z_8)9~8ss(@s8qW=Nh-!PDMHo`Rwf%igfCj8a;7Vss>O>QzXvq5Dy2!2nV~hQl-T1p z?|n#}V%Oxkwe}Qn`ebJ%?O+L0@DIc?DkB)o%Cp<^vVuX(=QbMi@{C3(_E@qgEHucB z)tS`i_TZ1tcnrVmBM4M|?LuSKq9ENk-VVs+ULcnRh+MD{AQvX33Iv6BK~M;SM>W@r`HvgsM6CN1=-qEty^E-VwkhOaiKrMnwRUT zKlIZxgNN$#TzS?^|DuNVbM(y>2A5W*w*>6z>8j$Qy6N_axw|@CRqgT)2H0X&cAa(B zw4xiR3wGi79OdA*n>KwrT`?OU+hy_k%x1qAe-2WkYIHUm_O;dq+bFyJmmdPNF5dU- z$jEc|J~%Tl_4eZrE?98!#BGmGxnpP-R&_d3N2j;9Mf{cf8`}2X(Aat6*6zsaT%}%H z3+&pz=*pw*TW^Z2uIjqn>7Ds)|I|}GJ*TGje>>CLdAX}yb4?T@~?&<_l_R;yR$ zu8wrydZM%OhP`bK`z!sCwstzbE^->bXV=gjQ`&{X3Lc-&s}KsQFUfVL++34R{=GXp z$K}e&c8|Z?E$9EeGZ5JM@AH;BKHZd`zv)v76%&B7kO*)Fg&85nNlXIFu_cy*5Fr6^ z6evi7mNm?b%TEW=aS=3yhy>b@v;)yu@aH%S1Bzi1>=&qbRaS*KTgvA$ zR^R?#7$Zxb9?%6I=qjs_Wy>3RYDIhk<_rw_{eywPw1R?Z_*p}SF{8G<=i-5>Y;Q|( zt}I`l#9^h%HB~MKOTkUfv8oa{vko2Kq%jq1eRPH>Lz$7Bxb5)ly@NJaL8|WdsYbmy zE7F`|)mJ6+^1AbDAE|o*J4p2J_fHEH3>HulvD2^`SHeSdf`v6gX$BXRO^{Ib809SG zB0N+ww^>Ylh37*oGN5oEad?=-dWw-g7vZzv8b^l7yL|Kn!5`iQ*@K8@N$Qcsq)R1| zNe~bd0ybLCgeXm}TE?Ws^_vbS7Tx6Iw7ofl%C`04B2Ru1BTH*44K>V;Y@fZY(d{%S zZ6I@c@(XX-Ry0%l%X#Dr0d5WL9D#tt76@pPj)U#AJF$k-)Q*FlhyJ!^OJe`Y{(+MN z30v0u?eN;Chn$VnicPI8n<_D^!8!CaZCT9Kxhd8GUK8uF33_9*g+d5(5c33kFy>w1 znrM0Eh&`0&sEj!3N0!%@dL(s?vhrw682=Z3rM&bj`n$wnz=_7lt6H{HRc&cebq5DLt!jTpnwA~UVTR`x70nGZIq~37kl|O0#{1bWWRv5d z_KY9eJ$?wB!`_G0QwbBljP(h% z6VlT~yN|Fq3}bzkYi)^2txnbG6&dkkAM>eZj$WLpNRm3j1!dNpB3FJ*e#7jt#o_YB zq5eqO^oUDjlsYt8`@E^f`A!JBr1PXQ9;Pr^!(m&B$nA0PrCmKG%mn7p*q^aDIxeMC z-Aq1{Z%k&V=phW*qSssKjMUDV-Raq1y`U-8stq$*C-kD@`Vm$kNjn|NDhyrTu*h zoq%sjCvB$g^1 z1@MFuu!M;fCqaA}<_)=!5tE2^)oR!-!&N9_-1x1~HOOstVwsK`w&79&1}0AY_M-Tw z6d9S;I?dpNTdRYmj`mWcL|(gLFp?J+uM*_^xJqH=tC;b5l^bT{kvODwkJOEdSb&n+t+vZjTw*%IqbQ3*v?Mp9c4d z3}e0rV^yMtm7tHR7-_T`a`WhMGcJC)YV)Crkpoo~p3dPMrJkb{He}m#?UqKNlB3si z(;Q0Klyx;d7Zwy)WMy?(W!>dv+2vEJa#S{n!CEBhnAyx#6NXJj13^na9e|!NkY`r=~DsKNAXws@rNMMYKOFQ}ecDCa0x?8nSYvynLh* zzQoF09i-IJ>vHjb+I89tflgmjoq~b9ue4aeGh@Z%wvZ=i92RoGU2Tvu8)Bo@5svle zfFC>q6|_Hrg5KE(E=a)$nF9$lK(r^Gww5rtufea0A?Wkqd#2e z59G-KTUKCAq-e=xqHlm$69I_?i$c3+Fk-@*u+a$uNBfQ6iU(BR(aNH~=9er@w`w9Z%5 z*E`bEwsnq8tx{QX1B=&GSI_Agt}5%U?I{lrb___98y8uOjxBu6jLn(m=8y8ZT$_;X z$Yw8CmSN7hVRk?uG7GqFYxAzArd`eC@A75g@Un9FDPM-^t+Ps)RjXY1U)hk*FiR+4 zv48X|i!xYoG|1C>ZhlJP;(B@llgdb>x2_9N7i-cI1$4F}tHfrmN@*zAwr792Cat)y zuh^59LT{Q@s){!|GvW$PzdG_TmVP3&*dHei;b$7Q*Vk`vXxvs;2VUk|)eeg;M+ZMy zd6@=-s90_=Waed&hp-c!^_ndcryY*upv2*rI8DDLhw1aBmxS7K7tr!S>p@?`4Ub=w;ow$;~fYiQhFN1;>YAX~A3#a4ih2PJ|;dzu(m z)qs%7fgJ*(-{0_2pfKWx0AUVDr3hqU{fxshKs&k!=n}mV;0xzTfd1`rAPE^xGfyk? zIVscp)88puB{roorY{ZqA<@I=SVKqc*7}AmwONj=x~#4lYD2ljR#3iR&4O}mwpQ&> zn#{UDo#U7L%gam_9{a$97mCVKcCdSB`rz!MqS?XXp`xOp;CM`QPTpaOwArPyfyd-2ytsFi)xN)OSJ162P zx|m_n2es^M#id!>bMZ40-Z9T&TQC%ti*AEF;ELgvr2}Q*{sFidg*zetr$Y{M7wDNQ z0kGClZh~}X7b#CsUZ=cGd7ttH0s01*IZA4Wn zCEOE(SOheYa91i_ql1)vQOVrXDcLjn?92C0FG|Fr+64fW)_3xjL_ zah!V3iLX~ryKnxybzzy#3GQfGS@}9lR8q=_-xAL#Eva8~BZKOvA6(nIh>Hi37qm^g z&uzCHY;8SccDU~!d$fI;SDM}6^EPD5yn}6ByX*h;##q(s|7qAet!MScGt^^eF0Srr znqf2ggZ8{qm(Dh`$s4iiLQ~3v?UBr!h_|E}|LfQk{IAW_t=Q6Af7(`Y4FBvwe2Wm9 za^|^;q31VZ=ZA(i4G*thBjs?UYf?BIQ^l-`r+;${OBjA)PC8c3;H{cYgQXrWa;YHx5l79-cl_!IAdJAggbWl=C9hHue&FVPiwj3=cnp&OM6G zJu2l;lEKb>Hhv#qKsv;<*nvpPDD}Wu7lAMHQOX7Ipm+tNV@4oRU~dq3G{Mg#OvIQ7 zE`}0VgGv@Hc0{~HLqHMOmBtRjQ6|BhP;+FF0KP_OMWDfizak1nLwz8^C8!X7PY88r z&+L={$Alx$heQ&m#?%C9>j@MhWk2AHAh^MKM2&V~oQq5xN-PT?eIkW6d4|~SAqfBt zHV&bj&0vU8J}II?AH=tTbB6JO#4>`QoggevSUl)}1h(xkD!RT(mTC*ynr@m_w=v+! z?JHTb2mX|gU3A!vE$Thg-PmTY@1p&(DBC9`S;e3ninqcgEj^h~9asdt4! zcqKTn=jcKVmqRSnJE9%)Y&jaG!X0H*@s`nid!j8nob&pkhwx=Wdu|H1s79B|%XUk| znYzal65568q^x|sA%!QldQ0M4i^MjWM8v{!+V5I#3ND|O(bvk$P&7F;4qt{WC)HBm z(D*w8s_pn$(Xk(gE@1q>yfd=nt)+Ii*J^z4!tfhk;-B3=4>h6+qUw@N9rk~NW^ng!NmR#uK)%NX6OD|8CRbmhm~YV{ z0=q4F9+b+l^H;AYh6FjjpdF;rhWJ1HT|D&t_t=A&9{xZ0{r7n2mnmM2IX&GB*(l{! zmC6cIKc;*IKY;)1#ypp{45A?`@4tXmVAPP-m3Jek5DxZvl~!=+g2rQ~%t4Dht0c2z ztTsTs>k$ay+yCjO_;ma`_&@#APqF=2(r5U?XU}3KpM8!6&z!;k^!X)B1FkuNcTGF$H&sS;W{pvq z;h}A}j?Tk9v!7kP=9$^EpINi|+1V>9clP)1tR#PzduLZhhP~e5Nabwro(!e2CR1&! z8vO@3iYr*A&zph$)e7BEL{OaMEEFfX4CI2Gevr>v4WKTn8N3a4Go*g&b;`%!x%LJ4 zu6;xK477rA-#uGAS46`9Wo5PhoKM5 zgkFbU24;W(68mu1K5_#5|GWQv?|nD1j!xNU@1uRzT6^`ixGX&*`BkNk_RsCtlH0QB zZ%uC!NTmXSOvV!`l|uMX*H;$w9=W%f-1da_@91&k&1BD1JK`?`FTAmYlecYMre){t ziCjw4FDCN`{QOC|T!{A=t`4NxjE^l=KbdP^CZ?eHt z+0kLsnx?)=rINg&TuXBMvJc(vLp1Uy2?WxI$=?LOYl302I~q#TliNar*Dq0$8|sHw z+7b<~pqo(Klj<#VNM9%JA|^(9TPb~_gy`~lio`tmCFR2_y`8*zPx&5{{bS_>@yeEt z;fA;NqkBZAkij64hq8?l5fNQ@-O}vC2PyF@?O#bG9?8$k9}Uh43Jh-SEjhOuE*A$kc11WC36)8F#tY1?mU$rf%utg}<$?-HLKK1_V} z?%J`p!KLwB+xEI;$|?n&?`tl!SPGkcm;R-wQZB38-u81(4JyG&PKXCs^6v|aEY8&Kyz)BCB4R|!zV&w*j%cO7yq5#hCh9?dx`GHp|;5BC7;C$+I zhq2$>?&heA!0ExwL8 zXRi4SF(#hNPNgn*YGV7?#*zEKT$hfY$I0&>G^PLp^YtH9+%LLd4Xy;NW-x>ZAVyDx{~hUM)vWW-`R03j{;?g^>Ed z2r-|=q%?}Re&7U2MG9#3EOrn{AfP35B|8lS#eghJqbHZvKeQJAZ(CErjhF0J2$ku9 z7sZki3=M(}ehgTT|2Lx~lTTr064=h9G8saANILk3a|ngRMzI`Gq0_{%Yni%hj}f2p zRX-C-!4nDMpIVec--%MR|GKpE4KDnX2yA>Q-a!wZA$FW?-IyKN(0TyPdh9VYcRw6u zZ)`nF>?8*M(DtSOq3QiHkxeSTylm80&ZLz4M&~a3`J-iXX^a1dTkN=VDc>dl)jXGb z;SWcbYlyF+m+4)Xqr_LaiS6``Bgc*%xpao!p%w_#m(J{_{ydSoyL#EO>IJf!zMeh% z>oaXTbAmg%&U`&<_E$H3W=>~NY!rso;jofB>EXiy?Ce8{ ziIgy%RhFGycIiKK*7CV?mlGCqIvskY<6g;~bn_(prmtqt`ua@Qj$mka+Zp^IH&L#h z%Go(}iuxjQhKYY6ewcWDB7z?sGM=pkSAnxY+sqJDlLJXr5@3Pq#)w8@7f2SQyn)v| zk{DrufLv4octSwz>>*(8vOrFTRT=bwCi|4c%z)IY+#arI-M?Fonw5~m~#*D23146 zF8p|M_dmWNHc(nnpn>?3m;ub!p$874e-NX@xt7DvE?D=`F=efM{L#7VUSGTR^>uR} z-6X439Q$bff@cr65NMYx0}|@_^AAoQrt%FXdVPt(r@o-mT~PP$dj9!cjq}RO=e$s%6aT9L@f zOph6S>Ak-C!Jd{{B>(sSw~1@L_V*L_#=3QH{C?uDZ6!)}*9>GkeQH(AZ0;>9UDer; z`2RV7)gUhPkx|5C#@_z}eElZPVxgly@ZZB30G7 zeqWi%YUl$Uay%zqyTrsaRs{Nv^V#?ygx_j(D2;x$~&K(HS)yu;gFXTueZfB zrV)2NwYD`q_k%oV^V;!82NP%RJAWoI_~_>I$kmV@vs8p@yAq=#Y^$s2s}pnX+LNDa z=PE7o?6vn%?$9(k^*Q1kU5ht7-*GW_-ALyC+s>8G_^_?FO(_PLIME{C*3eAma$wlefjI-v*`7KYJRbb?>j=A?}7-d1|{=CYPq=XT$6kyXCj5p~F` zYAT=VD!%dbHrKSd9_q&$jZhfYY900zLCUKj!L-1vc0%~pEO4E=3!G=A5TxKkIj9g- zqB_(HnGSGn6qu}}fD3-FFf}kqu*FOtJRjym@Z2S*kBRvf29umdDAx*19lR7dxYt4h z*kb=%U}2z+CCN0}p&gDQw8MgnnMhJ`30paE0njgyWO9h99+O=sN5bqPydpmYc)_h# zy1+1zT*%>tgYp}$;fEz}!6r!PE&1n{hpsBANXZL7F*Jkg8B{wHJM!WI#GtyJ>RT+1 zQo%(GQk_DP$*Datq|<{(7hP$S{D!H)ECT*L`1j#H$=^BkO_x9b?H&6B5VE2yDpbgF zt+ugia)cQQnZ*@P*b44QIJ?~H0iSDz$1}s_8&JEuoOO2;TI=I3i%gLr%(-T@)tW0) z6c#C!3Yl=<9jIdBV$YeqX&lSEb6;*WcI9716=0uUWjxX^45*=_ACGh0ZcviJ^p&-gn`F`Z1wOpD&uAp(J~QM(k9aJGWtuawv{U9ZQB-@cF-afvEr_b z3|E{bl3ET<3vAmqPg%OHse;TqDuf^@s-o*MIy=G`Uw;!z#cXYBw2@)8gb z2S_fJKt@)8OAjzspz;F2MFgm32_-$Bu;z*^6V8YcYUG)Z{*#3%%4?T(8boDI|NO$4Kory!U#*pW6!}DKFe;UpF_BNFH+4|++SNJEi7abaU zj(D5cJhA-ZJPwV=Gq8G}5b_xeEfT4GAdJ&!8j;+sgkMBaqxp!1u1BV-F5*369x?eo zF-Y7ulJhjgI5ge~n~f;#=4|GUO;YLhOT;}-K+waoH-v)48`%pW75?>TLqYkz_2{$q z!JHzlO+q|))8+f31&iwik+$5x#&hrQLS-VeWN2vHDni;jD-((}?;_?p_m9i6JoGNPL}eUA9YyNBy2@7As18CfhEXKpz|BNXsT!0t*{ zLp4`ABaKE;35BA`$L7C&r29~NV*iWK_>og@$L1$W&jSysFkbY-ha$Dp$iy76Snr{JCbpA-;S5d^%UbiC@288HANuri7y z{=kpJJ0%%*01-@K0chYA>nI^mb6%mi06#$L@p*hE0Lu|5t^S~T_^(!cXonRMcIXHU z9ag*sNOjZ@tU-9`VUj8f<{#Q%{l*l(MqUQEA_s#(u`!Pv4j7E7U}kt&40!nA!Mr!M z5ZL|M5m&Dy-;W*M~QfA~#9;572RqIEL1wwZ4E4G*iZsiId zvClj!Gq}Y0=FHR6rk$QS^Tuh@Zk(A|TUog_kyu+*wU#QTQl&OcP-%f5C)Q*v-MAsw zKe}e&&xYFDZmW}dBx-MV&6zV>7<5a4(`^nL(jIB%vX3vbR6Dq>747r+#A-vUFFa&( zn~I?rURi$0KwKo|l+G(HK2l%b)ZBhe@t*zVp>E38LNP6mCKNmoxpBK^{21D-dzPsE zE9HH34Z%v+S7+#5Wt0yLHShkk)S0lRT525gzxwO6h_7idm>(Q$%0gM0rh1#+T!wC| z$}j3K}IS7XN`y z(9R>aeZ(eB_PjZfVf4HUOe=nwkJyr(Sz@EpBXqi@kXS~W_SVG*3uL)>zxHOo#a62H z%Oj8;ng)1?Yut)cZb4}zsm94?MZZlJ8awflcRfxf-S!!D|G;E1T!jAh!g89I>aoL^bDs{-I5zR5@$qM9p34f_j z!OT#av@KM+lF3hn82n0I9C=HKbL8**``^htoA`Hb zhPX`p`^za5ZA7DDNI6^;gYBrX=A?>P0y$e181Pkcg#xwMn>~;EEfmG1POgCkUC0u1{iKa})Nz;oJG`XiMlSz?D_)-ct zqd%L?kjV86sj<|;qtg^ZDLY-4PaTze<@!RCkf)TWId(&VLCjT46)c;r(kftUg=(f= z7ttW9Rj8yeoYh8Z8pF|pa5kMn#u72gL>hk{R#O| z*}-R!=Fsj-#1q6x;(m3GnyLva&!fsCl52_Ex3CindS{kM%SQSZ62uWyiag(LhvFJP z?<8I#KKgVsHM=&A^7 z{@5Af-Vu51k?yP(GpDqz>(1iYFYeunQr^0ubLOL)_7XpSc&6(e_<>*|ig}{>4`vC~ zdXLFt&M;`u7mWv>{d&#W`y2N^{rRffA3@Q1Jyi!c4M*k<*B#u@A1=#kU9h&Wvb^46J7Bg zRPAEog4O8wbwG?Hn8`>EBf07(hXLk-apk!%N180{A!C5M9}d?5O+0X$A$W$M3}0k0 z$=+aS{A#E4VK~H=<~{Lqe9w&%X(&>#q=uE+xagf_Q)~P!{-Wqu$&N3! zE zD|FyJw|fOosnswV<{jGExXxFz#pBAkzG?rV+6PZmJhW{7nU00iQUyFAh1#=C8E8_< z^(xWgL}IKI@v|G-t7?fK{2h7u?W~1&&9IscMf%~Td1Je%*V3SjuT?BDivBBt{NCXP51HcZ|v8+d2%=qGEGkO|0nkhpYq-e-{V zng@%a3aEh*()1UD`y7^BNWlfNm*VvgP<4uHqk={WS31B@3LALEc#Zmvr^IF%a6$zc zhh+Ika3TQ#G#~&RSe-;`e294A-R1T5@h3m}bmoD3zieFp#H`FLgUzPT4pcxY$uq=q zk+i^}aat3hcUpHgk3BOdK1bopojKkK_Jr4}@~ev6xrI43>+8#3J9l#W`)}SG%8d-% z4~eQrKSVi??nNmJdN&&uWP>bY-4sqhQuKneqc^|`_63*S&cjP zpbv_RizkXx^T!t@MyJ)9RJ)&8+iq7I>y|&bQ{`QFY~GATfz;r>x1?s7D-Th|5NDgM z+F_8p@|f(=xovyf@>lJ>f4NxBaz(hAxeMm!UVm@-%`{W!2oKwfsvJo^1gB_@xv+sC(p$Ya#}wgx74`Uc`lAY zaqTPh4QndA^B>;}oMF1y;LPf2buK!yxpd_*%6B=}LsB5;J;VbLsxb_2`B8Yw;gm(> z`^})?1rNVbOyo#hAa}8QAxuBO_0*PXhlZHu0^NgC_zhqEgIkj?oC(*+I{+YXx47r2 zEznca%OKf7vRewsVU(tf6=U;i*z50KStV69uWXn*R-%xU>xw3TE@=8eB<}rqLY!6y}yRWf(T8laSf<2p7j%9P$ zix)1uwnx3hzi|K1t1^zQe9ge(RXGCP*Y#yH8k$4dT{Aay*0$#841rj8>AY=Sj!t4? zZCZS|*w)>uHR$;Ayw>&I%{|#N_0p&In8)^iCvIQ1c1b$NR=Tuv@!D+n>d~PZg|dB5 zW9jnhy%*Nl#m3CqSXrBw%dr>Ds_z>uvu-UE=9R@&sa(0lkY_`sG;5YrncGp?+-alH zoC7_LZFENagVz?ExzNer9BP^wQZSgV>D{-#xq_vSE$nVzT<+kq&E@gZ_K-tr8ay() zWv;k+cZ*VyS2Db@5(E$TNZ;~3wbIbmbr9%r3(&dMK|2z~;Dzywe031EO8cV=3b|}2iKO*+W_`eW>+gI-t~i_E z757SX2CSKwLI8&a6qRJ0U>|m;_Q_@>>`gUF=X~ATvaMDS1*(2IMIB0x&x96NiOeq=p1~Z zD&sO=qK<6eS8S-#ON2(9GOBESs#ZaqdmMFt1?ux@Ta4?k-QKbKL*n&YpCEP-kNtZ~ zV*RJcgIe!8ia5_LY~FleqpkDl?~Yw0F5Gf!fnKbR>BSlp6mdMljPz`QhQ9z_M2=F*rF3UT#8E|=HzTt`8_^}g>+Gi3y2_10L9-8hMJf~Fo}5rm z&UFcTOI}&ODqYYz8q5-Ko8p<3(OkWwG>c<%R*HEUMeRAo!x5I#UArLxp?Tu5L}W$* zxC39|Yid)v0MD0!itRAztNwn}WH7M_#555NQb zk;`!iznJ73BMCOPg)ovHYoH~=JPv@u)ItDnltgPB?gEPdu0}A0>Pg`T+g5-u*a5}> zRNy*;iaDFFSmjf5IYuQI8A~mv;qbmmYAgY zX2QNQWCvh_qT=32Km@7+tJTyU1rfvv zcqnLwB?URWH{@T3Td|8v@Tll;(Ccp&@<1a zZ1slbb>{@~YtR09aMs0_&U20JGCL-_;<3}6 zydxA5m9cezBWH2=qId_5I@y+gOJi1iTfTQtFEcFF+<&h^EZjVO@TTb|u~g#D3@=j1 zQ@J#KjeF)zUOMyO{ZuQB$+KCaIvtBiK^y#CrOrgC!++`9=Jv*om9QB{p`7*eHOpR| zvlG!e>8#L5gT%LG#9C3LtKYkJma}k|L87J66$^cgRC>q7ht53Fz~^V>iM!SwsIIwY zI6_@nxM6y6Zz4leS0O3Tb@n^*rq8cyot=$VtCZDq{Ql~>m%lExuX<|F_Is9Q6oxiG zd-UnYDW8>l!Qqtw`HK=8Z>aazOC9saMyG3H^Je;@%`MTp4)~W2xYm@Ws`Q zY~hXnG@n78*5J*}Zkd^t-W^ShWEVnC_1aucDkm{ixN&ZLs9=0<{0rORu0!X<+=xo` z+Mhc|WE5d~|0us!IVl%7L<84QC<$6;oU0d5m$?cG0ycSSHA_k84xm+^WNj%56$ZP) zS*v`(X&E{FzVMv%RHyTz}T(*#;(;o=@$ zMT0qGR(GJU$KQD0fMIye<|wyq-Jz;9E;WT&SQE&Rvo-20Yr0TX9E}I*M43eH>5IGE z{c&ost*p%r%D~#9jM^?2gIP%&?_V`bE79osq1rPF6Yr&d$2bDM&K7WtsYq!cMRC9@ zQ3_Nju_W;q*l8w@MkRF^fE+Y2i3xZQLAL);P$VMhx`~#;WTa3q4xy>GH1uRyeE3Pk zKm9Ni`89slke}6m_rG>6`qz*D`V?F$l}Eyrw-JB+u4^JEPHNiC#JxZ52DQn@@8@fD z^sMb$*(MY=o?R4}w$MYbhUrNx}sl*$t=%4L}x) z>(CwOiL2_7`kn9s82?v%=rl=nHKmLx_!8#-;0h5hG9dMF4yn;$3n8Bh^ z88-WrRgAO~U@C{#WP3KIl~ORm+Yx-jA-WQCIJIQTNs6(Sv#d^p@Yrn69(9=~xoM+&!)4TYqVf9M--^)o^4gN`sa_WLae#8ANd3UI)J zo?Hj8QUp8|fhzzu0L&w}yW}W;>;&PT9F)r#Oa=o7VZunipD&!@3Oa;w@n2HM0x*al z0AG7c^1QSb>R-aE$R3L3Bd7wY)>Yt-?t zYa0bT#xXG6&AI%Gu&~A=Qm|{eg*mx%nx!xCrBXf*QmB0P56Ile+skWx=6m9$r=KET z{Qj9%-af=bOP7-NH7*zk*;Ha2Lgp2fW#(|EoEvNk`n-Gf9uDPvzP~X%`HU$_j8xWb z=rmYWNBZi+>Uw+smNr!+y<=91BQ8)EXSA&sDBY^!u5l`ZEmHHjsxtuk>VZZj;U~4P;Av%2J=$Da~E#GAy4P z3eTw58Csm;EV(kE1AC4js>o}kM|x{5lofU2#`*b$r3`v)noen}Dv znR(xu`top2`+BiMp`@oK!rFk@TIOt$yFAeBi};;(N1j6)sI{f`HP^2(Hm(q+TAZi2U!-TKC!f=55?OhadlUun zN_k|kAe!kf?P%H7z$f0@4<&s^KWS~2C`Z;Tsj6DCW<)7zZvBMVM0~fO#;jNbgwE*} zg}jyBO}jdem=y{${!F~QX#!1um!3*fR*rRLWp#~JD%1G1w~6b1-bfu{$fa^8fEjEX z$M3}Ly*7j5)DR+rQMqnxW_S9>1 zMef+#(ur02*<)jz<{p(qn91Vg_$-EmB;9CDXG7_3k$}r;ZnF2aF5nHG>KSg7Wod+d zLm*T$j?Rc8k=08hmaR8F31w!-_Suz-8fH_%mT;9&qEZelAkMID0s)iFfi2yy!C?jWM^MXG& z5W5B{KhcFf(dl`PXl`OllfF1b4q-CyK~?%AU_o-H6hJA%L5MnCld==4Tb@n17g9jK znDSQ2Cn^6<`4x~t1)kVhs2J5=C6#}$G(jR!h!>FIsBMhhcpt0Lte{2%>PShtg@c3u zX*nTi8oTcR{Ya*_OKOCHg(L|AMr*)oF!I9kHHG3N{Yak2+9o(XMd^}pW z6+9JR=asw_a2w3}xHs~$OyrfOdx;@uhE-32+L?$+*=wj335*%OU@k$|h_yH)4dqsu z%pjI)Y{X-8+OqOpiEQE}MO~$Y=1`0Bq7tfvaw5I2#4u|CLpQNYNtefsd<%=;KpASi z*&@|f7P)A*y23h{$**-!9yB?MY?`Pm+FGlZXq-x!!9#gQsFgt81?54dT%eQ6#l-y_ zYHF&GEfSmL{OdwgZGo}eQ$W1;-)7~-MY>Mp?C9;gJ`@)YSP$I>Ou5eS$L1 z!32G>Zrvxz3HoFmoi%m!54T)ClBNpjc>J(gVnbyLtHGmk$Yh$?R!NRZu5_RUYkKBs z^E=7}dVy&2Lra!gX|j2;g8Ar@8FboCnNmIZGE9&{Es<%_nLw<>7&b+J$!WByOq!;8 z8Jj~Gpx%_iAz`saJZceFp4Tju1j{FXT)ked4m7k|B&wrjA(P4-QJUoF6@A%?N|RT{ zjh6V(Qg{b$gG`Y=nJLrBY$mnHcv5B68stXs%xGa*ik1EhNMTZ!ZjPIrLq<-o5nD#p@5Q)!_qy=N=6dp5S zkq3=%lA*x-<C5#kd6WzEe)G{k|YJl&hH0+vq=i_TSrsUComVYQ=5SV0-l9ug1WMxhc zk}TEwhhE{glg!x^i&_AB4tamqV~$n?3OI5rXs*$ z6<$JJfBhTOnG+m}&Og*19L}y--=W)nL@az3AKa%?~k2n0N-g(D_d za;{vX0977ZkQ!JNY+hoVzq&%q66mEYv1(#w$e^<4>XkO)pAxoMFXoDM)D?*n72U^s zJno>wR=uXWU`yF#f!m!OE!oi3^x(ti;!yY3peuI_K{?H@S5Dhf_HKB7_T25I(HHu~ zJegO9r})_$x4t^+bPWvny4t&r_bon79Tc;K7EzkeHu(hv7H8O$8BhE5Y_rmoFVL%* zN=bz*p)=TtZXG;=Ud)!i}d~%5t(n!JQQOMM&QkqPlQzjF0#$^VBOs3bP ztYrRr1>yP|ir!tb`QDf3%z63V%{6zU*jEA#!+L5Aobe=_Ry8^ktUN$X)ZM2jG%Iv;Z@kt z>tRQ(5aH1wbLh-x(7-o$fM>VvjTI~2AU-0_-|-D`^ch-Atvrp?bGb?=GBQG3KFQ;q zgj|mJA##Xzfqmp(je6jB=rqBSK21Zfb} z?U)Y)W)lQr_`*d@;0pw1*rKcyaD2a_%msxfmX1O2fIqy3;G7M(Z6NEn8yTcp9-`f- zoI8jg4mXuO_|O59qhZ$Jd4KzS?mPEnsJc$h^zYa{gC){QRuOZFTUlkUSW&Ie9F&3b z52yGRhy>3QSsoVYF!&STT z2MfA;*Ac(GUurJRceBO00pbDTRWze6HP>H1S(j?nXShNyRw_%3eP~_{)9bJoI%ycPPGu6uiJ zrEd_~;vjFyyp=Zw6%kiXdkP2f;ms-G%}Ky?;s*0*9Q>RI!AP34pPeG#UD9np1UWAa zDI)L%#=gkEX*BE%;O5~F-syi4F@B?4V&Iyv)Pvs}_!R+7(ovHhC{sEc+{YFD&F^R& zAR4d?@}vXx@5Uhqg!2qc$PV62+(W$n$%f5ef)=al6y&l#@Wm0JACFDW7O)kH5MRhr zDsuYtvD7rX!5C$xLMGlTnT3~|gCVocpZ)kL2n(S-IcNTpm$%kAh{{oPnI}@KB7DABt&9?{C2y7K&|-SN*_^>(7kUDQa(!g4@yOvBq0n~!5sqLlpVBFpw|mPnOeX~IL7B} zQ)j^90fY~y?t!zg17JX!!~Kv62=XxFmk%Gn`%oz9O9A!;=!LAR0lU&rh}2@?And8+ z5+sL6hRr55Wm64cS^Gb>$V#%!kVgd*V;~h*?g41dq9rp;kf|mxe@#|ICbLb*XkzeV zhM$G$3;-GCYjKXnDJ~q&z#sI+XdHNIE&Avjue50T7H4kk1>&ynH{Ol@f)rz)jVP!0 z_{s-Oet9JoVi#{TD5Z~`@D^`1hTYo_3igpe)`z zBt3QrD#`A8>o2J3^0wVj#O97Co*-`jHD&j<%cyA$>ejMEYm{b9N#RXCr(&5jol+>Z zahVbxOG<}G?=+!o8eew2?Z`2@%@EHKrt!356kmRQ_lXk{=_ZcI zSXgY5YXlCf!ELrFHT87?b#=fS&G4DE9+%&2sqHI@-c+?I#Ftyck;a(0BeZ1}CpA4* zKGH&GZDQHwOYWa_Tl2Lqk2WqlzI<&ndbV!oV+#`t zLB8HoIowV>|08cQ|=s8k;TQ$}PnEwY#2NJon+9iNwx_=PrJ7 zS8bwX<>}t`lPgP0SDtL|J-xC7ZK-3%wXZmhJPs}4ykL?&k_lq60Sfb^O4v%HkSm3n zs~m_R*FXe$HW1SYB-C0BT;8Uu9z_6Tm@0y>1au9SGrSgJz5*x6AY~^>3LOM9a3u=K z@rRm?>see8=qOT<4?&Q#q+mggtQVcM`;krzBupm367!7!ouKC?lU7h#YsV@?7Kmx} z=BO#O;lZ+|+}wte?8*{%MoDd6&9tI|wlYKSY@&}?zK{6ghbOpeQ`esA3UzkvMf?Xx zUTn@R|5MM6UyTuOTVa>=774=uw6jErlZ8o#j zA{?eHFjO1R167u)?KK+{nRSjpRa<#%w$oDDlH0w4of<5QdsJ$z#uSKzM5*$%Lz{^i zKXe|Pl}ovso!}sMV_xHA{l}>0zWh*OW)OmSULp?UjqGXt8ZBBCYZs&n%c_GKty+~{ zSQ_SVN@Ft)#Id}&yb2kt;H#qjcg<$&A^Asin8+ob!K#R?~x zcDNH?Tr$2|V~(CYcYUm8yuPhI^uVj_<(oH*msD+B;Cb-5Wpg6^b00sSbEGY2{rFhG zwg1MghSHk6Y2ompQ-?z7(JWuCJv}D@MQ*jchQ6Z1b)L>U&{E>gG9>jMokJWiN7pUA zc_lFzgmPM5ySCb6RW^21360+HQ@7sM{^pV9BTM3Y|9Q>2&zp1ldV}u%wovQ2wLQeM zPi!ULS|3=7IHPwXMeCgpMB2LysoW(DY3xT!B1gYmTOu7Qn z4TT{prU+PSTsCS5lG%>}UI1%t2fZRN(lB=z$iegjg$=;{0%3nECLJiSKLCo;fH@Ef z=_yjXTrRakoe?T|89@RWDkT4b%8dy4a;S`e@LgaU!CW~|G&>Z9M$je=qG#Yeg&FI>0q^|hG^e79g}z0^X}!8mr&>F6k@Z8axoee{3wb~o^}vxtWY)qF^T1LjlP>Y zyZ(AkChb%!bHj+%c)+Z(veEl>j)XRf-Yb~=UL~h=TG&6PnQW8kasfv;vB&9T-pkCO z)W{~Mbwd&R#l*_jiXTF=CbK6N=&1=QpQE5|*IW+8(5;kBlgEi2KGaetsU^-yP-c1u zt)qMyB?=Dm2ALAgrd7Ou{$n9doxIUE{W8qD3Q$VVfF z+{}r;QE0DGE@x*_F1RNfxF{iU)5MN40V-uPh!41N*X1)=3gWM9`a89?mlISe%61X| zoODoCXiEjLCoK)tRepz@XQXk#j!)4RF49m_XenO;=0xEof;|@ad_Ld~o^tqv;A6%6 zmR#CDrd@tJKo7LFbfGl^ld%C*v7j)IZtVQ!>jK)*>G2`dzNmQ`>YEKQb*I1M4LOhb z(&DP(bSYQOvCeD|%FyRuqBTgee=ZnjSG@ZUXpx?nw;xH+8cIL02mR8$w8YH1@u0yp zQLTx@bd*Qc@_GI2$dZ1d8$6h0D{?7*LG67}I!W}i{w1QGy zo@KItLZwi?)Ec-dExUB*@~3z#zD=W$Q>kJZJB3aG#SZfm#;YL5;>g8vP=QWKv7xI{ ztQ@3R?Ak;nnQolHhUB?GS%~Q&#zs7w;QsPQIhKyYk8xQDGRlxio3rZ4h4ck=3#qeC zHMiU_o3gNO0d3Kf#J}w66g5T16+u;dv5do(uRV5Y&z?)ij{mY}&o9T9zp;74#nr1X zZdm_1TH11pyd;GB)f$GJIAS#mh;#mq9Qs`Lr5(B)t2IYQU&Ow&H>bn@3pX89%Mi3K zJYsy~8BY0=ZW01+}-zk?N&xHVKkc|XNiw%|ll6xhmL{9Rt z*jWasJ|si z`}IscHeevhBugbAd*i1A*_qUb<6nhkY}^pmJURXB4k+mH%Y`h3){&bl;+X|}1xs0X zV%*eL1HS7LReL0Bd8u>dmZeoI)&}#0OMjdwpRv8wF4066M=1*>O3@N1T7tJkP@o9s zdMYRQ5_Z~Lm5WGs)W&T7t`X{e0=0CtP%Kc%R*R5Gt>qN*v}!fCkoTn`SKAtsOe~WK z^;KSvilVBBI=W~-P{>BJk)wW z@$p(yv9M%Dpfp!uw71e6d^N=C>%;;zRZ7!M7D^RjwUt42XQ(A&<=37{k5C?Zc)wjN z;41k7FFL<5pb;<`#JS-=eLG&b%Nx1j^hPa>K?QH(;;s^rS%F2czN2@X%qH$8@^?fU zwCY0iK}(xOz)O|c%##yJ(`n`R`6&N{X%;JT(P6p2)fI4NX4Mmqjcr~g7B>b{ z(yp3Vx>Bwq(dQK~so1~+uLPq`()SMYxL7a*5KHR+{aIOZfFU_Xr>PCV76vY$&lujA zB;84Ffm}1LWX=avz=!Y$Bnfwm8EDJ|W2bE3r|~fOIt&$nn{2Q!z!99m;0n!?;EY>< zG7div25Azhr4svpIi~;dG8sSRXFx#EMp}XclF6pMF^IKAdskQme z@#=~~w=Xm;Mr&Ei^m`orOW0f*H9Au4T3S$&pI=h8G(A4w>d$Sh6v&I92p3<_&^hw* zn=7D%(PJ!ck;TTp(bVGDqiV{{OgGsCnQCc4EFO(SJ%zh#xdK4Y>g_RiyP=>^&2@+w z8Xi}4OKwEXvy0hAE}M^B-720{AT;w?e9z=%e_H|16wz;c%IYsIh?z`f{mi_9c3-wL zudaBt!_;EoX+%ZCz7CDdz^R9-l16h6eN|vkQ@fO>uNp0@y0ailD60F%x~pSNz7!5B zdFcY4iOU9;&$`j^fW5u0C^K%AJg`bro>>;|9-4J-0M%9@aMmg_Nkc6@=F&!uvSYA# zl|SR*1*QU<$i$DYXccDVYPIEIhuNLqwb+p1Oo+AmvA+2`syQmT+Aqqcq@_`;?a~kA zTH2H5Y1zUh^XH{eX+PG_>5CTUmnqfl8I9N1LdA2Tu=;4D)l0j?wre#4p3bY4I`0#C zRC<|E>r{$8P)62lQmTwnp2|ne^~98E%-!=sepW|Jsc6lM7C8dVO)eLW(dckeDD_(! zm$V6s%{g@w_vWXw*3`SSg++<2&5H-~n`G5Z#=+g_VQKD_VW=^AhSI1KYi%-NCOAC* zL_C+4#kigHeZ2{a{rm+oHGi5+!Ds<;9t2$-V8j$*PlE0guwxX$I6>kWMilIsg)s)V z21y340e}Orl8590iD${{NxljIo)kOn7@+YD5I{&v`p3yYMVKOn)Q=E=gmrhI-ou<1 z{0D@!kvHHwz|RUVt2o_(6qh2UVQ*GUDWF4q9c&vI$*(d$nGb3bOo_>MNsK zn-U_Fbb6IkD+haG=dPkqtqDS41)8$x4&twnS9Idpg~N|+fGnL3)E%tJ{0dB7F5*8d z7DF84fwv)tH7|GFs>~{_NuARjNE=+;iS()*t^}fsW=6_sEIw5-hbK~1ftS^D3r8A1_!TjJd_L}; zn_b>$c4ye~t7FkRueqr-t3zQeHb8Q5U#>}sXcVirZcTa1QCGZmovSNm)0T;~ENW4i~u64Yq>vtO)pd{rqdndkI&}gj5s}TBL{2%MkIz z8T2$o&hxP;T(**ewDMVLj%-y)bsCh3RoUn0Rl&R8{^H&HSMVObm3Wl+`jy2@PWZ#1&HPwz)pV%921|!LOLk-Fc^}gdTPCxBHBsPEr&~2h&a4X8Wr+oK$2vD zZP2S&f-%gQfhQ+G8Nf41o5@Xb_rGkDBpg5wy0K$KphE&YD}=W~dRjTthQH{T9m9Uz z7&QPq@ghL3SuhN&B3DiVN?lob=#rhpUx;_U-qu@Eo}kb+s(;=^aqBILZ? zXLk7MN_oS4gSo(5Hz(@u%g^s~=g&#Np<#Z5Oa(RX&A!`_6D@ixbID!uQ%F=g(O-NE zdLC84|L1QhK2Ed}&%^&V+Ssg9^1GH0=0$rKACI&a7^lAD%`+nF`#fgyE2A#6W9_MF z*z;mM_6}6k*HJ$0)Y^_r;&SJ~j!E~UwOCtL`>1=e<6tLhtX_Mv z(VE#>Lal5N@Nx@nKA){HmnUebq?WX1S{qNUt)>+DXGe-ccOyjnYIQ$*{`|A<^JmU% z>kk!0W+TW-UA-o*vU!wdTXNT$p)?oSi(RU4N63|*dUX%P$r&J6J_Uj$&JvDe`Rc%o zfw}vA;Pvq^#Nxi5@-twi7$V@^P_{P#ULP~S)pZPkZf+o{?y)4x*OAILc*UeO4{L*x zG9*ADyktx#v7-ZKFCcY%k|D-s4*(6!7y#ga-kO9EQn`m&8b%5L2+6jjOzDrOtX4@- zB0GjIpaQsk1VMt52akG*?JXH0Tl6L!u=Qup|d2i;77v`1mqN+36O#0 zSKye8?1kgxvy;zA!tZalf_fhEcfh?Q(*4#cjDZixX~K9Tl|t`RW5Wa`<(gz0^0xz8 z;s?SEO|lcREol95OcZpEpIMsB&FhDq)NRI18xIiQ-}3_T{B0shkygI&Wu!R$Eb^T@ z{_{6ty`7h4zAe?FOSRh=sVq(+TcXHPQhzw{-Gc0a*LQ82oD*F^{A1#|&P@tM!QC(a z{h7qj%HrJniAN5k4;45|jklu2Z7mIjp%V{Xc(mTqgib3AHW|-mM#gJ5MTb_b7>aJ1 z$bR#^`%%@q8@^i-9Q@m|Cy6&sKl|b%#E0EC%`e+hEX!L|H-2K_7%|@`Q!&z1Vk31Y zQzeB$lrlACg}>Le^ozMg!yhbg#%-1JOqrvF5-FNTR%4$TVwn zHEb?bAVE}?L2i}^6nu0t)vVRq*?a+|Ako{fe#Y2-;Agr{^zXT;V-HJd7Yp^1(_^=WfK>f0X#{E?-|( zPX5}0L%*D#ehcyH(?1c_W`%(7va^yUOK;(Tc^+}<&HSQ-+j|+cjRfk7n_7>(^6zyy;k*V)FjFit*hHdq z;_vZrMn*VJe;nP8(BDw;`R4BY#@eIAN6&miEII!X5+U21oBQmpwoK2>YnOesnDRc0 z6UcA`L^Q_aLuL;*m7U7+yC&WbXKnjo&^zOw>oPKjs%`b|g%329wf<$9cW$s^X&jYj zNa+G9hru#yXz%OH%v27Y%61wU0IkleRAYR{)=|v*OsP>|k+47tSj-=ho{_-Dz~2-n z#-lOu(j>x~W-PlyBm%jROo>AvZ%^S8Mp%rLBp-Ga-)WvFh^PKBdT2-6GkyK;inTkn1K zgKe8YWz7HjzQJ2g=hj#DRt|pj**j0v4A1I6JJi`!I!w7X+SVG2wzZ*ZQ-O(@<>J+( zXBJ!a#JR1PQP-oKRK%ELhV#_!=qRr04 zyD%^)L_=1&3~RcPoxZGk!N+HQzwmagh&2ZYy#vF67#aFA(;F=7pd#C^PgPq@(DLtz418ZswqE;@e ze9^{;P$R4QbVbGPopDN<-O29fip)-8_BF3R-#_%i0fnjDz2NQvYs7QYOMmOQ1?@y9 z9&^jncolcueInTKSbO8{z=F44={rG;5le1ued@96{XD_6qb-g$7jyBwv|t|bCWTHR z!f9-Fqh~m``|-qKzKE?}x-EhhL4{{Z&-1CNXg{5XQZ3>98l_aB*J~^D>GICZ*ql;& zlc&Pzh~!o0(djI`QI)Q;W~c-1G&;|nZg+xJo${+;wXuCKfatyA>q%`N%W{( z9<=f>22;ftdg^+7HJySL?V!>yIhls_E(6D-J3wK(3*eYPm#m=)yu(0=0@iO}`XC8_ znHo|yQpo?NjRn4Iwm>Og1j&3LAYh#e@o7jgZsCKCT?mIm2yo5FXaajcK#&6lp$U{w zMfc;sx$^?1c;Ep{dB>gjZ!eWjmy}GG=9bmRcQ|X`oSuHO*16+Y&E#_@yBhFcUw#n( zRYTXw=O#yQ3`AhN(hy`g)sNHAGgtXdF z#^`Gg0a-l-7NzUqJr#is>3s}ln%A-%BUB^YThX)DWvI~v(yqvF;FwP1L$`29t|MkpkC3m0*r}plK9J| z&_KBEhLiIbLyJHlXmmn!%Jny|m4z<^`UU`Fxh7u#REts1#6jR#O2-!h@-zmFmv=6iTtr#>FranJ>~i z9nIm!!`^CvN}SM^EnVE<@*X%*qHXGN)z$Pg<}W%klw5AN26t6%dTs@|wYg=`*4JzG zZraexmo%+_Ixgv+4oD^t^chmB=9!VM?tpez-TFU2zqWLsU)}u7%Jr8!gTpOysRWc6 ztyPIuCuSe3#j0cbQ<=@{H>Trzs@DC`og7P*7fEHkVWudbHFSM#c5_9=_Kjk8VjJWn~95|XOUDO&*WbWtEYv_!0 zcZ*2ElG{Z6Q>NlaS596qB~8;8hl>K)XmZn!cc|6Tr^eU4)1qH7CROQ#tb9iElBzjN zTmpbU2&FhCP$@J-AP86{piTf&ha9A%thB@o*ht702(-{NhH%>gwF;`wfs*>5i|70j z0dCQJV{USd*ch785|jgG&}0Joq!PFaU>CtUm{=v0p-1tj|8bzWr%%hbNc=}8+n1dP zsVqEYXIFCD2bk%?Wvm4=zd!SrpG$7}cT%-+&iV;Ft%hL+W@U|cME$1kyTs?PNc{-=8% zz%Svy{KX~`PE!jGW1?j|DpO%tga302k3;&a+9eU!cH35N?cH7^U>gl=g@I-9so3Ri zYsP}n;e)X#1#Dx1NUT=VC)oQ$W@n3;1Qdi2J>a!VbMJTIQi_BL2u=m+O{C67;sTJ4 zd0m|)N7WZBQMe^A1A^`a0%D}R03F-hb&ydMatTA5fdCk#QS|@`+5z^ETLOgwH%XvO z=n(XT5{@ot8(LW?iq6gUKn}`n0o>8ZAg1Je0AZ#(FSa682?9QVq`4_Ev3<>_5AOTF z*&Bi5&5e;5Dbk}ODcD2G!6C7O0P-6BCN{XFoQ@M|5_3=aweiDyLKpxjkYfg6G#iC6 zB4k3_xp5Q6kR*mkI=nB!oiukPis78wntxWfpG3;mGX!e>h87az>`Z}>!8|sR9ygiB z(-X%T3}L~{Sq2Fr164vseb#4lSt)D@pUSt2x35>kbe3)XP19=C(x(1x7RX(^e!JKT zC#5Wk)ny|+-uSnH13Dn!Yj5Jn<+LUWPh7xU)*Q02L{O1Rz~OAHs+^L`rz@&AvN?i+ zdZv(V3pFoeGDLiG6HPAX+_V2ZU8V)ju>Bm!O)ky}#f!&Bwj;lG43io##1 zT2-oY4i_>sEs-%IA1vOIOhmfmBwesY{i{Mn2LIS?NsGm4Gk!&+V6!|zHKdWQeB{7e zn>W98Ah%re(8$O`YgRuzGV<^!%!BpIs_WKhOeLCueoA9|Pm7dF-!LjPSxMOP_Oc0` zcCxH(1xB(OMWgHUsnV97_C`wofTqNxS&Lcp4u>9o_t+u~*%F(|%H@=O%=KxY#FY>K zvrbkL^w$_jk>s$peClu-->s|U=bP0cH>CBGy=SQL2TNrAZu}eR{A}Nb))EYx>AMpPU(odZ_(jNr&KUaavn4$r z{$`-3(Py{&8hZwQ^I^}D&psPsH1^iN_~Sm!1^kD1_RU~eNvlDvHcrGW3#RH7=x!`%36L?nQ_Ovw${Jo-Ju&A}4k>53_R_RvM zR<&^`nSs?*CR4&lb)-BVSTH0^CUx~dhQev9s$HQ|sRz6A8U3xKDU(WNLcfi|78z5; zW5n!MHfAYsNrVQ2P~ti)O&LQ)k(OCyx#zl?N_P@_ip8c0N;nLLQe}H~aZ98qWK8{d ztEW8f&Q!iV|I~SE$g})Q$g_-sF4f>c?t$_ZTfwq%Q{EX+-8~2~>d!;i<On@4%9#XguV&Fjn84e-M52($MqLzZ#9oQ5=Is@_ns0mspw3#ahl_Nqx znh>pUBhrYH8v;E*qyix}qJYRX4DmTSq+}*YH4rPp*JLjKYmTrHz2wLST#%zO&F*P*>vfk}^&8rnC>#+Cd z2X|Pa1Wz56YGmzCG0olgVdl5juYVhV=f1n~U;lJ1>BfXIEsrEsx-Ye&!YC=;@^nj_ z6fG2KufF3~$+g+7cPM=P4 zXYhYMJ309*R&Yk(F!i_=`|icxeRl&@r-shM5*419>tISH39F;qw$Y#0spAYAFO|CSYTi`KRNj_emj2k2Cj zUx$V6jjb)Ga`WqV&Ypi1|NSl7mL#f7Gc{$C#pC36YumS%udQyGQ3x%f$?Nw1@k%7> zT3cGW))g%u8^fONeYBf%??Yhc7_j39-&k;p^gW(e;PsRZ z`ps4GsbUf-FIZV|{3e<>FW77y98izaSZU}6mw}hCUM&CEF$hb%gGU78>epx1piF^%kU3{`GAdcTHEPzJMk38WS2Q2q$9lsdQaQT3>4F z=%`h2MEWAIHM;~EQ&lDkzFrE0%wmz7+&TwTOZCRp6RGAs+1{Jl8YdoI)qYz~Vpv|6 z4cYW-zrU&ZgwHoIQ17P98mG4~>Z#wVttMI*)cO#kZaCY;4Wz2aoPK!1yn4 zA^tCLfxfW?6su@`F3G+SQvcxMkV4KVLmPQ)Swf*EJ=i9TFgVoi+V09Jg zz}yCYG3>Jx|K}HZ2|vGc`Y?9#kN^2a4z27cJ5>7e%cY0Px|Y{uXBz5n&teJu`RwiW z4KrEn`!e|oyLETwMp7v#)4RHglU?)cJn^;Hst4;v5!g3cz&CPJ-d+&G&gOj|gs)#f zF5^GueF60gNZ=vK#H2a(1Hw9_I>;db5!eOkERgXXO(Kyc6y70FN_e>oU+2PXh)BKu z)kRPr4}G2-B0_#WglRbm=^AZCGS9-szG+*C3WMkHIX4eP+qot|C7S!RsC@&7K}gt} z>ws!OM8;yWP;>Glpg8hinYXnfD6tsHn3QaaKshui*tK9IGT$Jariw1%Kl)_nu1~PQ zrR#Q;`-l8z@ISngoh8Uzs1bim@xR zMLLTv~f|#ob^A!KRJ5_|MVy8W`2E~en0-tqkRz5Btt(eE#YycQZ7#d=^~2V z{Cru`g~{AWsoYa6mEzy7u&E>#h14oim@3Lc5}RD^Rzw;}JH!o(7dME*$>i1ckjWej znoS{Eowu;i<0&lk;wR$WVE?#QQGe=(#fQSMWtR}rmv!AEIC@d^dR$8W)Z zi9KQq8ykoRb~!=fxP~)m+ENP1*1G^_P~hZV0ypyhog)FeAP@zK3^_GC(#(TwfMy)? z#;HgEa~ZAlg7==6WkqpQm_ zJ~~9xp>K%+0t;W!zU_I z@*>Unj|8g@+KYVWu}}Y#{1McOTx!`xyBx>c=Lp$fj60XhHlDQM7jq-|Pr60gT;(G- zlJVa;!2#8#-Ltv39afH*v$)6U8*K8CR&=J=I!S?|U?4O2S(&CSZLS%*lKyYB5iwZo z{egl;#u4nkdFqC-GyS$w*UAPc?>PfP#l4`ilY*Ow69`>B~`fzlSp5M-Pb+OnD(+(-{_4*zeRSsp2tkLlSy?{@`_jS z4_oIh_|2OG5$Cp{PySmUq;Qwxm!K6@-1^9wl9LyY;8*eUuS(tOt5dGyL;i17|7vVe zd}IA1k2Gv7S~S*p^Gw-|U6>00sPo41nVa#aAG`ru&cb&s-??)+wvB}!yzv3h0G!AB z+VqVMAZ+m^2}h&;Lp}V%9=P`LH>ye}w!M zlajfESl1tI+CT#6a^gos1Ve`WZ{c@!$><8uEa(g-Ah%KfLqQHZk%NnsJO z(1{&b(?e*74zWI08+;0Iw;C;a1}6dGbfJ1vGJ9_l)f1Kpp2)zyvG5X1~PX z6`(hU-WU3h-Wa?G;u!H#K*brzy*C4>JBe3ByhOTGYRJ8>03BW$dSeKusEV8LKd+`j zjjN+CV69l*5jw4we;WT3KXNsbU7T-JD2)02l}cr{KOb^O81nnGO1WIFE-YbL=sJeG zq{Pk8(Jic!LiK+=%C4POc192Xen)-<-ZikD>DTN1tQ`Yp^Wb)-PjB!uw-16lfYI(< z%#SfW+|tF1OSv9qjKA1x|F1`}?K^@MkDP;lzd(!6M|STXAy1*@mwVMc$$-0BPTqg+ z9KK@?E3vA%D}NEH$ltj$zaq4D?#$J~@qInFyf9w7XUmqd>ksW&YOZsoFZZyd?COUb zYra*hG}fJOEU7lswk%#zzh>#y&dxh`)wfeSc@gud#WHG+@UB0^j~T}-)-iLGe{ei4 zP9}sYeu$SX-Wc+j&7RPP;!0kKpAsgL;xsqRuS#wVxlJZ_XhSl~54TyD_$>Y*2Y#`> zvb(nBCQvDLzF=#zNP8Cj6hDCf=A1t(H!=tNnI=V6F3&>bUH>4{D9_5BV13lpn%qo% zfrVu@vn-54rrT7jQ_mkSWaN$)=!xT4y7w2G#6Q2#v@2Bk#{qqiyK^Tus2?;M2j{m3 zjCQ@=?pYcx<@z`=K_nuGalPEq@KSJ(pF8g5=8kiG#PR!fq zWHp%a`8F+sr82vJ&zu+RjgDB=Q+Lk5ufjju`gRKf>BN=yoj z1|0>&`J6!sn#$1-LbO7C5xpWSFht!x@_qb`yCE}-lz%Vgec@Hiab6+`hc4nzT|J90 z5&LReA<^LrzoIjhO({CIG0QA=iK72g5HJc@+Vt&#%Jyxk;_`fQoJ=w69ZMq!`m zQEV6UI;RUDPdQtYBFW4FplE(S{*(2X=-^G5ZiR?Hga7L#{I~dTnLt`{XR!%Kr>%2C zM~7$fj~IF1c2fCTsOETbG_+({W$JrxJQR2nOFi&C{Epw<{kI1)<%1o;(bJt+KXyo@ zH8f^j+{c^Wq@|ivY&w2?oltI%ksSr`H~2z>mnP1*8Y0QH4GqPze3{0P?s2GHiG7gm zC|*#^=ZejKy0`?Jj#{m;nAIBn%aVc7MZvz~;t_YVN8h zYz$dJ$HCz|cHWl&8E$|KA>=D+1RLjuyxW1%JrAB2C;&8#^?ZYz3!bcqf`b<|d<~$j zh=NOjJ>|CGi_t+7hh$&0w9MJyK;;gaoE-B&pfJY^0Gt4tBs36tkkmB?UWCG%_}EBS zk1izui4coWpPn$>w{L+f3zjl*K?vliW`0T))D}<_yzP`%! z^32vZoLsKFSfwroCsgN;w{CgaSzT9HrWCHcFgSK;MS(P<*O$r)mR}-YUNF4g{~Ud# zNEDO0q!XfPLfy~=cN<#)b$ih)f^(?V_?L*r}qxS=?)JiKE|LT)Qcdfd%E z4Wo`LOiNo^u{2N33#?C$L|2bm(%6SO4a8*RL!|)$t-p-JXAAIubRF;RIo8#6tf%{U z7rr4gkY6LhE{X~r%C1pMcGlKdKVqKTcf$-7B3EXP?3*+n zp(_PFH?|I5TC0YCYcCB}EF2uh_>a+Jqq?kRv`gs_MvK_7jLP7#(Sla8GLOArChN!x zfqO{{BuW?s{m;?7J3zR7I`74Az;r-tgz4~y^Y-+iPqcf=?;hqt4=o}}JZ$IleaPa!;oVU$B(RZq+=Tu+csovgGuecYb z%6y(h$uf+FR4@{a27g5~vCCTOJxyZ2j4i@wH{OVUiQoS65ApN(m78t^!{s8O_7Igu$K&TKx>xut|Mhp8ZT=9B!9&-U~ zsi7!c40MYq_Z`xc9LhWP4REzUQ}T5PiY$N`m>tXk5P~3Nd-+B!$-lwjH@A|T;=^p< zo3tnRa{cnj$>sX)#f$ORnszlb>}qP--O#X`E094NI=TE2Yiq2?X={xpHn3OS;7&#E zBPqUtgpxY`*ZZ;4+b%{^o+GRN7qT`{84OlBu=xBanxMsp$Uw-EsY04pB%Z_p1z@u~?^3?Ul=d zLPys8sUKq}*GGjBG2bLLF2U^att|GsH6~FBY8&AK7|K-&k723esw~FPALetQ7s*&_$vnI4O zPT9fJ#MQnH5n*DJ!CusvN~LErYaX)MJhzNu5orGbk=Q87ecwO>|u_;OcKLJO|;K|5$6K^4UC%hR5bp1tLoKx+`QT zUddtd3o&7RW8=x%`g&|rEEdCSU=Mq%w6v6T>{ZiGuiO@8-wU}sda>=_RlEQ(6Q}Us z-b-q&uB^mYl}unG*c%v2^g8&kKl(Z8weju3#c$L>HP4|w8$)ZB*(bAC{ZXD#sH+r) zC6zLj@$I_WTGA`jt*eC7OR0Dt^m6r~7*ojuLm=s*aJJCeW`*iU%0x8wr1r-q&>p7& zg+2xpLdhoWF!L(QYlE5B3Pcmj$&k(lVA-83WFRE$Qf7-lzz>K>WDO}0!9oEsf31Uecbyq3YgFu)TC!B0dOMtO{g`4wWq;P(ktBn)~XTx-H2Q1=sNZV2fR zh5#-^z(Wv_hen4uN;*b=?XQ6^6t#utja9wdd)ZSbr<+apM$TM)wdtu#r6O?yN8;Ig zW6Fqs@Yw7JnX{35%}vuMr`T|5mGOLGo&1XcX~|>w2gdXbdp#0PgG5;Jz>~i;QVnu0 zCs|vU;Be)7iqU7aJo^~F5x;xCCt|0z=@#GIsFtnl*eCHy3lpI?A| zR8xb0LJgb9l5c-cL4@`NNCUPL(txG%>L8=yIHUl(9g^wI<^ohgQt;$4SVEBi@%Dk} zA=;G_l%xTvm~H^F6M+PoK*`J&_MwI~JO zPiP*=T7_sfg@UUIc*rU5P#@R207xTDo(o5WfF|e4kRz(-dKi(84{18*7%&WI?kEZ_ zF!1uA>4i-oz$2^ozA$MsLmsD4BvPkXadTVAsfOk|T3YUCYCMtbJiSs;7m0)*RL<;Q z{=E@gsl8<8xC&xcJGo^(&~7;TDocp`S{bX3z!V9 zipP_D`!1;rOj6nOkqtO>X}%-t;ra_I2&VFl1Ow}+r9cM5=Z?iB2!9kd5o zW?-2+gK|EB8(SD472p%@L;Kf6J}H3_*P=0Cf{fgliQ>1QMBtF=G;|AU7T`-rBW^~V z7+{YE2T?o>l(MU`=vni=6BH^I!R1fP}6V#dexA~ zpeBG=GQdornGs;(IWl=|8zh-)mT=mu6_CR3q0fQ(8b^H~-VH~t`4)>P55`9PJ-77FHb3Uqree}7QIBVjUC zK*3}#;|jT~^r0e_luD&DQ^)V@{pkybC7RTDUsL;Jqx)wzGe^j2S-k4Cglj5Mb*`z5 zR$z5D)*P+ngf=fTm8v*KcV@VPQ+!){1)a*~aMiIR>pRx1YHGjm(pyo(@*Ug5j`I5- zIuj~NU3#)!W?5WcbZC!PpE~%hX;J0b#`0ZpOFNc-ytaX9OzU^QU%?BmNDRE#rQP(@ z!GJRL_~P`oM6~$m(amOw^W;0oX@qh%o6Z;5 z^qlKCY^gxSVAJI)GXsdFK*}ORk|?D?SHR^O_+pNkYg-{SN$p+7{q{1oce>b?aTptf znj%TZ_R88a5;nTn)li)^YcuYDm89T>7t|kJ9p?!PtwK@xj>#%EnJbkEq3nu9C1PXC zAuBVRi_xq~DtOPzs2bOq*rF-_^pqW7#?xE`C4L*+*6OM{dvUm}QX*%t%vL7f$g%W# z>orzRHB)5(3%FkriU?I|PBq(OVis*tn#x_i!%dEIvoe?oggb)RI|)%Z9unB81+4ti zKwp*6K_(S&84aF_u+)*yWOAw&53%cL)cR5zqd>r}QAFZ;6ND;IYna~R3`m=td`dR7 zGLHlv97_voDR1SOV17@y%UZ+;H*zR9$9g2F^mK$!p3SBHf=dY64#DGq6a>O(Nh}im z)OP#@{LE7mAAL9}l`2dow%=ZU>BW%;u}$x5N|l4(In_J%+}`oC-Ss0V!B zVbthayKz)o)K2e5m}C-NOuoCO+3LhXnKBukR^$G-q7Gf1nEN$0#BX$>_kK>Qhg%Qi8PQ%H;cv$q6TUeiGrYhrK7LIHk zut~=ivZ-HE)kRhcUo0;eyzufwNwFF7?P!c^U)Vq*V-!uLq0v~c5W47Qy)L4|?wU(m zPdUj6D}!qXBuZi1P`g;@vh%*!$#e1#0+K)~$!}$;<#e?# z{@d+RuewwdFi;L%odso)U~tmmm>k6agnzWtvusdFEtHgS?0j3t+AeafZ`CrJs>4y5 zF<8c4IM-(hXgf3vhar2{nPQfd1qIj($0{Y+EqW?hsvB7m!009gU^@J+?r`sL)95e^ zS^-tjHRh+p@+tl!2kdGoFWyn3Z`pruXSNYv9WQk{^r=iHrFS?>H_zWad(IvAsp)bx zt2JLDh4Clb!yi>2q8I|2QngpQA{1CLqLY%T`Yl;WA3_CaH|^WOa}`kIb7PpY;bIO3<||6AXX)_Ofmw=Mytm;qhI%^<`4 z3^Wvf0{ui@380J^L|OoHz;Xk^CD6>n9-u@{HbI+!;9%%kum;)yr-29{(kTV3GQkgy zmF4zVq6lfvWD3uf#*sfmG#5ARLS9*h{01J~tGDc^Il|r&9l8Zu^ zrpRm$>lAJ!3$oiKSgw#FQn|UAtvs;r{fd;@s)o!GZH0xcxI=2QNaQh*)=!FREB&D* zOG5q%UG=7_yPxM2mA4kVmO*uRN9G2d?ns%V(PUfZDsC+=;yizM)utzO9*+)w*vIo5 zW`SQTipeDwa4pIf8@1JIHniGqn~=+dBF{u?DAgjcN|XDyIt91grq;BYA>^2CPH81F zl~Ns5DJ6Cu)s`vhVToIGMJaB0G`KO)Y~|SG0v*SdQt(C(RnsBzl2LSPiCkVe<%#rp zs%p>dFit84XUZ5-ouz7uv^!B~HWwx!LPST}B2B8)S~X9Ro_#UB$fo3Sm9|A`JXN>7 zeh3p@7Y+E=`=a$B8($E%*}?+8EmR-%t@j6_P!MLQetR7`Njx5U#JS%|Q(D1;CRIt$ zw>bfNuLAUXL3uh3TDOyV7xFHH$H|vqiVI+sSQ~Z{{Cn6WF$og259gon)xj7a4HAW_+p-CPbrwKzA3rq=-R0~VG zSZ{$48w)y3czYrn8S ztbJ^sgC3Vu;OX^O)XGARt z>Wol`1v}wa$>dOOhtHO)Aa0o>5{bARiTh4eumx(hoZ5JE?be32BOMRFGIs>OTNqb5 zQqka8rqA4FQn-X1I#cdbScl@)p5m6mnsS+{qC~`@F~j+OhhAI3m>R&|G>Wa_jx!r8 zXPTL`F zZo9csz1w}DL7H+(LRn=$=$SsZw>Ffkgl$V~R2i!+#gzqpI=M%qwCH96SvJd8tcq5f zgqn_?EGIu07v?kB+-RK7Pt49P`g&zL~%;%P<2V)y=f3QexbxT3q2J#ea46!Mn(g9bm5fn?&!ipH z3Mw{Kw8ATK4g^0mtWuQmI;t8^OpP52a`l~yHXJJzt{aP0D)Pyc?j`hiV`W=P*Q29Z z+w`qd1La3P+KGQp-Mq*NrOQ+?3t4qly&~DTCbMi;Y3HRq^6GuR-raV7XZ^mh;;laX zEs;@MIpU&`BH!u>YE5=+0b~3aGZZfpn)nixlF!%aB~qUD3F0eCr8@k|v2{&bvdued zRvmd}{vcMQC|9XC`Bbl+OBED|wLuxXfI%hMEPkI#(8pCNSPYTq#bZ|~5eB_x$6dW^ zR;(QiJMR(m*j!0)plnoI_<)c>x4T}E1>}t@lU3IZu6XfSE6J)&=4aiZDk??iw2}N{ z*oB661~)2XjP~I#M{6LbpP;iI(s(2x@diV{AA8_8QD&ZnoUIh~$pBMoL* zy+_ItnUyv^&3V=!0s@2uI6wq6!9XQ}Qhoi{9QB$f zR*0Nnx&^_IIX{0iQo>;Z9D#sDA$o_+DOyk#4MOrk6ce2Q`ge`s=9-;b=DNy_Xx_62 zXCBf)W zC%GT+H8h$Wft{za@b2h0TEjAv$*D0iY?Uqyb3%zzxx^01BvS^=nYGh7bgH+skgs9# zn$3z-0mCOXwX?a(SdY3wv%8f|D{OJtjlNKKIRs>vuhh1zE^viu#b&n0P9ACCm0lST zYnpddmPE2$ffC=c{bq@-V*hYux@9n$4Nl#2Ro>8~RaZz{tnkkKf?DzB*Z-Aw^>*QP)q@8ya%p?%kyY-v+n@>eM52DVNETDl3y!TG zyI_o)jTEv}r4-`7pNk~GKhjv&_teFW_0=WVCnG!8{diA_r$o=GaC)YXVoS=yYN?JaV(Jy=u6$0;OjdXs?Iul$ z!5Q5x>l~ilb^){hkiyfz?3H}izYb?N)JUBgSti`Mv)w^?G$>#u>Sv83w;eptICDxB zkNQN0MZU82HAPw(q>8Jy=~AiD~~xNaTldGUFxRRhocSAXtcR0DqcF00*gJPfSi`e0y4QrtV@YFTAn#e z4+k-_JuFho4TU6f#6zZ$!%C^6K$?9*OJMmbj}Txm!izbv z1&JO=>k4X5Bqb3E9xUkY9Bu{)0eG06phvhcGA6 zxM%1SdicogW#Zk3b7a zjOqO=rk6c4q52aoU$4~LuztF?G$YqkWgM+)hn*wz*i~|U+3l^}_pcva)Kk0vkfB(+ z>+zWuO^yGyzuhnME2_^K*qj0yQ!ckk$QMulc@JM@5VQ-;YC->tr_Q~)gw;T!ANt4a zX|2np)jFN{he4iOta3P1PTvhH53nSgnqs|gN`?|K@EzJ{!22kCij7-lN`x^B{s*Rv z6<^^azf)i{HmzUZB&^!eWHQsJ`NBGrw?Zt|>Ef+MRc0#9^LaVEP_x}~YE#?+aW zt%~c9hcT?U6oU$s0(F51iihd0ekv|bvL;Votm8FZJ~z$asf7Y1r+=CTr8kptA*BjD zuYu58B3RRaR%0=#t@V+iV={bAYsNNaU*DQ3Y_tylj^E+Jc2f%qUMv$vP0dgn3sbAV zXuz0SO=@s-|M!n(D+f$e1edd`hr~v0+ z1#v52SKw}n;2U5AV#m-S_(4)w0)!CQ8(@l0RD*$wa$pQIA-IiTg*mAIj{^(Y9c+Wq z6|@Ne>1dD^!fC-Gwag;`LK29~r$b+$C_pHg!y#f~MI05OD+u-l(+(*y2)Ynjpu8H% zu&buE?izo@XKkyJ#X{31b)`|IMBOwLqlnBJPn8{_wVun^Cx=RXzWRtlUtpyv^X<^sL3fFZUT>!CVSaCD_dsuLCY*kVO|a7|JA;br->%2l{Tl24BsY$bhV z>2fo6N}iwZ&^b*_MTtu1?DK4~lgAPmNUzDgh20|M(#@ly+T#4AQ*SWN{wkxJVlOY> zQPE(o9e{FR0h`8{R!J?jGU4#j=AFmODDq4ZwI-h8&J zDjn#Hn(L#ZZ7YiNeS*VVjt1)$2BWSzS>ErfU00&dsMSCJiKL~!O`_)Wl{zh%#1%A? z$R(B9Y^y81xv4R;*ydW?XKra=sucWK+G?X4<;H=re&cuFvB-eL97;$kUF2_~xJ7J%SIU)|uWnap@BK7C)z+f)RTkQL0&M^4HMTvPPx=D-?h<#H zN@3`fUU9(D5>p1HlmD2R{=wN^wJ>CsL6Q%?NiQf#RYJ76cfI#fAlTu6dB86HtL@E~OA+ zGZBOn#1-zb5ShMnw}UebK{*jH0a=zJxJI%SlIKDZAlN{T33w%FDj^UO5D9l9@FgH` zA#78JKEf|Q9H^-YIE>8#x57K!C2p97PWjqp1%(>NWJN$4C7my{^Z zpzFc=Is9j=^Knm=g$-uYCU($Tw!G{$eAn!^#BrDCO$v!N?$1_Wv3RK?;uwHph(BXu0%qq8RoUpK9`eZ%kXUb26nw#ub)3Tzar(5{d8 zV=b+*mYW94*G^8x%F8p$#+H_@*c&gBYnY}2u~?;5YZ@X&?F~IMU2p$--xqf`9B5~= zq(-}rsZSgIj>&J2K7)UF3;v=l$Pv*iIewnS&V8B}ikOz$lrn!HqIz8Uk#Sh(c2WIQ z(3n!$+Z%Ip5uodvH_-+&axb>N2oXx=lB z*z!%HI0+6F7L>?6g!p{)uPuWi9z-l4^`BH4k)nx21Zr79roFFUhQ9mPYCQ`H!XeEm z6bKR6OakaaYDx=CHbOvlNQ4Pv{u1=D!MTaxr$FU%-~k84NI;mkA^%^2M+8wUvvAZmzGeR?r^`}z9d+; zUGI;2J5{P;na^P{3CZQP=0us+9DsC{vVd7zmN3_rlZ7UW!zU{iWeN*3afzPc#RRh7a$n%f5?$d?(v)HJCd~ z^?vJ~=IQ8kret5c)jnG7T``nCv5rDncOpHs!dpFRx3=#q$-o88v6dFnO&o`q%7}9Y zW>84szlQs@TE7elK9l++3dAYSer1?>ZyG{y|%5RiQUfIe%$oz*|^VY8&hqMli8Q zZ?wvJT(^uZfU;BH2d3T+w6F!dqfkux0}yP7JdzPJM5NG7f$1KiV891qA0V8DRB|XK z8o~B0IfeK3K*>GJ>9dC&s^7l1k zT~1~os2&IxX6Ob93#bi5D^XKuP>5z;Q_q3GI;W_kQI^vLQmJ(PsnhGF8^72v^1b`B zyQWv|v>rNFS#jz71Xm*UT@Me~anBc6`HPX2MRgC~=JEOie2g~xEPmmmmg}TkzNKgO zWsVmL2=LA9dx~} z@py1N0Es=SP8Sy|L-AK%ZoL1PdDY=E>FhmajG}nixiWe>UQNL-std!{hXM_1jf6s# z7j~u<%ARO)gi2v*;~ucNkx34%wpZ`ic3?v-jb7957Km!PfJ^SjPv3vr=LfV3{_2xA zQ?T+1d4)QF495L=tU-4rdz`&JsB{eVVVM0-!i?tZ}l4$nN9v+ zddsWp=(KyzLhdt1vW!A4n@(wKNV|CsM}MDb`5Gwftv3x$nl@~bIPxSI4m{HiaAM2z zLt2Pws4;gv_^;oW_XLDx{ygtP$jtX8n1g|CKt-SgU`;1B20S%K$N*fxYYB|Ii0}~~ zjUEASt56Ufgs&+j3qiL5R8>mPts!9^9WI>z%IKpbI19k+5^019qKDGkAz>5r;Q&QI zD!sG3FdH3a{Av6R`2V!o(fGa1u7qnqbhkU< zZi!f&3@a}=K9NXFOeFXghSL&hffIL^Obv%ZL(_*eX?2vZ=cz0{bK-aOLA;!X;*)!?! zRBAk(9xpB)^HucqRiGcZF2Tcw{viqWA!g-Tk!6QrhhActH%G zBF;w;hy4!-DCJ=qU>C@vV;)vvqC|kKbY60%(UGSF%nb>moHYRr-DTIiDq$9;6OQp)3r{CIwJE;5$#bmAh^S@AOpy}<`TN5 z&`S@U&aAM>lX`tpZd)<4)|KiD%A~HMvUq7_O~S8HSF8eKd!5?M?kP_8vd!wc zc4z6T3bn?csK!QKQwvpZi%Ck>kK{7t&*eZ~slF~#%wOgVXT#1if6Ub7YY7AbiHS{j zuEQ^Px0!j|o;z1u#*8a8U653|duLXyO!ykHx;1B3_D3T9E6=RK>Kc6srMhxgH>8~I z(yYLYmsi}`!{wRVy79~F?%XtyXzuE0ZSCm9x5Dh%VvR;guS-=V@!Kk)`maj8?B`0k z;>v1~kf)W%>#Bui%gIW(#tPTI;96cLs;ZYsv^*iU#@%-Q=JMF_wwr#pyL#qqD}_v^ zw4R-*-u=6q+K$J{Z$97V9)0ZA;_yTOtX9^#ST&W!qE^T1tQ|+%0u$llTOY&y?JP$@ z8O^HNGsClTCRujL2QZvS$n6eApu5erjU}&M)+EQuBa_slkx+lKc4d*GX7-l(D@j3bjiP8}ZL&WU z83iV}1H`I3fnBEZYM?^o63C;p9%4C;K-q7^G*Lp^*THG*V@PL9gR&_a%!&oE6090* z%>&pplG3DFQYYXVA%2A;g!qMAng|eNAzvgXLMFf^ zFr5PIha-fH4;&K2uYZHqoJ|5)BmgTh%|IXx+qvVQ5}Dh`iC7EJW8uYs9y#!rnyzi- z&<6%b%x#g_htOd`1G$?}chVf%{g+FC?E$|>3>~Nex<6-J2K6Y)--0?NEVslMbEQe4 zDag-z?E!KRle-qS=f+?mHjt=*E`_v13)t?$7qW1;Uwd9R*)X3an0Roc5<*t=+*>Ei z*f0b-8VsTMA}mfo7AP=xATHw|FI7lTfd+(pY|%J??&Tf{5lwV_PL8IVkjw*OQSNdB zG@6^U5yTb7zi?=g1#fuaqb$6Ja;)W+&DoxeF|MxPeW0_t+nQ|~f*=hKW>{q(0XL@i z@GIRuyQ;P-GuYZ4uU=EyHR>2V*VDeFSf%IQfH$)Ed=~s}n_KUhTUQG-RYkrNdRHW< zkXf&un>!pvQ!V&met)9Q?&xpC@3BVADr2h>yN)d!Y_L~hd3*tzBNVW%UdI-RU`vRd zXy`8OwU*!7tdK~mi%D2ycGX;S=zlhLZJY^8GoyNt(a$Bv0=Ij`z>D! z`CKGM>2)SQue3e5(lM+`491in&)q$H+Eb)h?v5!VB)+CXl^s#-(k{uQ$5QzPvpWQG zK3^;m4%W0!W~)0UNYBpQw0LfP^&Ljd(wT%^XK^>BtB&vN;j97yn=8@2H}=$Mb6wfS z&I1u{swrbB-nqQI<*qHO&y19MWD1o|7JK+7uixYGMIU|tcdymhAdRdp(Xwm2cBZCb z+bR5qU|8++cgp4U@p!Pl(pJ+oTbZTMd|jKW0uhhFV9Ss7LZYt?tahhVT{}8AnD)6> zH8HnOpL@+v+qH9PJo`{Jm0EWDq4jr6>3z1M6?cp~7oC_aQp!bTd)7|vtyD7TQzs`a z$;s02i5qGj{}!eqJ}G?Gjq@9Sncvu?5EVAd+lH6h4dw>EJf${ADct#!i->Ov-xoh# zpt4!@_TT}!#H3U@?6W5XT*J6!c-d=7OJQ25ZZyceRp@K}i_|s<-O1pq!C17);Wz zLd=({`8@d@QQxv2 zAKKnK&W)>D9N$r2b!pUl@4c_2-PKCldvD(AU3pCPgX)usKuuD$?r*sq5JkW+g>Opg}MJML@_Y z5E}^^4VWIT1KK4k6{T8aI74(2P&!FRpeso}NaC>&qtcyDPyv!raH#vC(DTA33z05G zOAxgNsz6aoxLG)RmW;9?haL<>+VL)5S%}El;p_^f1kO#eXhMA~67Gp}5V>Hn#~Qu0 z3Q<;>>(iJl7?usP*`mxqz^0N(g)RBUM8_$w(j#;GvsbODpLX%|>E&k`Yc7C6-7V&ACN&xerc6 z%vJ3%hm^;2`Wlw?JHyQ(yR2t%P_F1~}^8zzUjAkxEtRS-s5A+H0lJnGA33rJ$-VY-*0&DOIbb@LK!gXd%pQ z7TFk0#6Of)gIsCVzk{n(IJow&$F*7(MZGuLAKvK`BZJf*O z+$vFNaEVgAMyfK);YB={uF_<*0zFsO-KRE2>(f?erE|@uB?hTeQk&PQS(Ph_QAuWUofgsD0j>Xc{j-WU;=+Slph}w@qc_+Pq1paaSu1Gr5+P8lFaI zn_U?;=d6mp3Hu{{9WJ)YWwXmP?rkl@B8Mj0TBX4wrr0V;OWfuU%SNXSvRv9YxjLbY zs9A$qQ#9h~%_Mv)kH^wOLplkZuHeh+TO2Z16GY?*?uA^I93EH6lge-_uJLl1$*IKT zfeu}bwej`EVu#S9G4L$n>}}^W47zvM6}!A*p8!{>wE_#@boAVQt=_L1Slysfc6KS# zoeo^Yd?VSS_0{TRH|cTkmVyH?n0eyI;x)tUhhlSr?KZX2XwxW+HW_)h@fljd=fC!}EXGR{Jmoerm!PGK7amn9^E zARb*c!pTmArV!&*LOUe%CXu(l5}0GCgi8Rez;%);B@$do*rwRT(i+fJ5($cZSy^GYl=`4mL%2osd1N1<$ zI-@eHKH1D;%U511#3sC&_VIK<+P+aB!vzxT!}e~w-Qx0@n7M?|g$sq<;q@~N4vil3 zIYPU)gtJnPH)j~%K3Au^avfJErR`mk@1t}5&P7)=^bFfu!*-)YRmn3*O&+_}W>v_+ zz=vz~tN<={LUPMd2Hn*hP`GeKgDWEo2MlUlAaf*%f2!3YwR(@b-pw{Q>173rd%)z5 z=4*%t3psh*sDadgzF7N}d8Jq3OuId2J7%x%%-TY&n>^!V=_Pv_)ZaUhZBYyN{9rCH z9qG8S_3XZQ*wbumsK1H$NbU_AvJE|TjeCU44yRLt?at8sqxFM^?TIZUhmQMJ#236(;LTqOP1-{el*71Swb zdPm!}pr34gcYY_?+gIns3^;FHpI?k=;Xv2lX>T5k}7hWl?9N*a4 zTrG3RMNwbF{=S}OPO>LxHp0nop~tAU%7hA@*kV$1)Do3c?`)dVaB!|`qF-YS$?EoJ zg7W?q8{&;yvaU`|q}`{}FfXV@3ixj~STl09L~hiDLlqVblD~0K^0(@W7C1UR4GQ0F zVD&!*!J?68G}8Y36;3L0KzcAi%Fm_PdTcj#kW9z&0QLm9OTC4CfPIdAh5ehxBVikM z=fZzVtSJ#%w6hI#IB8L)#U%fL!0}sx<3b8cQB{ia{$FbQf9t`f#zz0(yc}QH7wM3Z zjw6X83c%@Eq;T&;wiWzi_;7mEq37l1HT-0KFPQRo_xaqnk$ejn1e4r>D4Zz;Ctr4}BNj z^uqS+@l&5BRE@6cwdweZRIW?Ac3Y@x+#gu8G!I8MGDPz(}Jy!1)?QR&KurOy?%hMlTqQ~b{*hT_UnqhD2bDY|H} z4rW`(6kuu$jblsjru>=m5Khhx$SV#M-e05nO=h!oOCXIcSD4KTg~>!TmJ1J*3Llp% zV#vwJSFf(kI6gAfRRu@l znZ1qCUUl#pqUHZPB=)_VO>KG!Hn}+Ew)R>kIVSmY#rI3=ojG7ih@5i0O&;c6Q@#f? zx_x*NbETT0@|DysRgR?>+g0XT@inDZr%Rt5Q)xIb~a&$$zKB`skU-~)}ltSTHse( zQZ5v;<%{o^3pYr&b?JK83Hsag4YZkZL!wwn)0GmdLX;Dx`k2@HPj6H=#4tEGLXB7) ztMY*as^anFT%kWK*#nkX&jQ%3MT=z`5P<&xc zUw$#4WsGaRgIBG38mPg0js#z8bxY4xx$7>(owsktCj2Z`)q znF={`|Djv7ew~R|*|#dTeoNZgw>V>|Gc8`cc@rjA&uq_VJh-?aXby@@9lFr;fX-Ox zSd<)j^4uh5!Nk&gx31mgbc$mKCNNsk$z(&iY&NidC##b?Ik=)vD6rU*)3g^ympdJF_D?JqKDGr+YC|DN{HC|hG1R4AZq0|C zLa9{+qFg$JOApPidTkmzlOBn3SY3m@fKci6y5g>luY7%=QoSV zuvfd1Sq|SP%-;&fDmA$_+WQt|rb#D}m?esM@qCR@**|U#G&i`W=C52{^{zlhyRiKy zTblRvM4Fp^FrtWSswXfHy=FR5GZl3WLujpV(=BnUuOV*nHD2m3s!FlB=kuG{H@-J2Oh#+R?TZ8Raa-y=k6l@vmIku!-P`DY($81u9w}GRNXEJztyl^H-JY-bDHy~d6eR@m_W{(w#zh(xw1<&I06r0rnHKG^vX>76 ziV{o!aF~>(FQDK>5CI{Sa3IjQGmbvMm%Mp;CX>+U_25^;T93(p@s<3n3owlN>`7N4tgZza|KCutsrGl1vTls^~+mn5#Jf& zncII0L2G{7a(uV8Fyb*O6>ftj5nFsP*>_V5cKh?cd*$>yfvF|cymQ3o|N2GKQ|B_L zJGz(u%=_dxvBrX>t=N=0{;RH!eQM$p@B&7jz>I@?pI=eQu^GoljNjQm_lvz<#D~A= zxVbO9`uHRy%;hSbN^_I5JF7RxdxtCy@Y}8a#aXQG{BYmI&6_NIwIH}6?#L6}tulEo z7wza$(C0*Li~3c5-B7=(_(rocUzcj{ykLo~`viXZ+Sm6!ymc(-ip?E(^6<;V&;Rj@ z9m8ia4aS1pXoiFB*S4Db@9R56{Q9a@UtD1P)3#zGyPJ26__@NWGWmoYjYQuSG$h1= zzJR|WV%2-9_{4+pO+h*XKmMA(euJgDdDHu++?{r#(${0xIT(&6yEW*IFJ1*F!ib~0 z*HyoE;Lu@TaOY1pV~@G8>Ib5C5iHshnCnn}Gx0C%j+T?nm!AJO7H-Hk{_`tFH~Dr7!7Ln)o-nC zY4rZ^fV_KUEr#*g$n~4A7NDPXULc{xsX=?Gvy^YzPSC?;~ z-JM*0?TC{l)+?J;pl`DEUG=nn=l&3+3Tw8go$l2|d2Q~xUe4@e6CS-$A(6B6aaky- z(IsQCphBBTLS%yf1<0#m{kGyJY&o_W+Yd>S&ti9Dk73VZuVL?FzXz+?1+bb)X&RaZ z(LE%20Kx|^5t5%yvK&w#NecQ71#s3Nzml80Ea=1Ly$p(|GyDViC>1D1Dfy4KJbYKs zNY&>z4M3XKKV5jc}w(KriN zDNU3vlit**iGz&wOLnC0iRwtMAGEzC)hA4*WTQub{$X^GEJ*by)F;sx2zOZ6EVQU3 z`A#l|s)vv?P*rNakoqqygLp+DH^3zeg@J`_{{JX16he{<)&OQicqVX|0d5WlKLcim zQ>oTUSwewlZLP7zlucr5Zm)|tH35N6Xdlz+7_P{P9)`D}YI(p=S*gN>Tp>fshCErC zgd`HJtFPJ^HyNc8M~hmF^LeR;`#_x~91Az7L#(N{?kt>6R3*fGzFaQ#DJ*sR&``4e ze0O1ISO+I^rqV*SMD3Fq6%cwsD|BTtg<}l~dQcV=YSdO&)ri~UW~78}oqtz8vo2zd z#O$^ZZs9Q{JXul~9bvL0_Q_b`Xwp9!b1m|9=PYKGO5NY&*qXflxk;{pAF}lPjdujWoBC4O%1MiC>GRbTsrH3+Y%L+dmXwOwjh>+ zC<_|1Z7z*vPx`eQF~3qPam3&Ay_4PhNT4%|5Z&cH)sfOkwKrKVXoki3c^>emne}UagqpFxT9;982cH z8#YFTkUmkb(u~-H^hE1*&6%VNlteg3ZjkvkQk5`0rITv#*#3r&bNS>@$WSn;eG-RS z9IHy)Qn>r&0ioReL*i@V#RnSmJib`OGl*nPxm0d4#*bDtHiSc(QJqdAWe9j8TrI`L zfz8=^AEW0)L?IifSKHc5LP$$9Y}L84a5TjecXV{Soe}|yt>(*}tV)T)kxd7$PI|r7 zrUtVsTn+U{@)TL%DVkV<6qDv|G zQkH4dWRHd{flW2}T>-5_m|{3x)`6hg0)7!3i9lvF7xHGC70U@A*Ckp}9 z+6SvmMqDa1SMqsEo&RJOOD}etKo(ZjR*Bg3I`W5wAD8%jxr8-qa9o34@0JU+HuATG z-?R8wxsHI~-tcQm#B#<`@^_Vpl^35Ne`<+X!8m=nZfChf`%$^?Sh?_axp2ncV}fHd zhN90b_F*^nJ$$0VfZYmOt1IBtRbRyla8NuB+GQU2Rs={L^C0B1L|zs5V&4b-)H~R3 zu`jWI0+qmNdYYZ)rbTJBv;wV*l#_sQK|%$E7y*MJ??We`P{gyqH^3nXIa5*+FgU>E^pe=Qn<#OLsi4)Rm3S%`R0B!rp|p>p8tlo0=rWD3dU z!yUjRa61%IhLK<*bgv{YNX?7BqVE)rg(<1aFzPqD=!G~P?gB-eCHp{qY4PN<0E&m^ zMpGh7A-p5O5zR@>485oomE=ikrptq)j^z&21h6J@{BlQXjiuR9KlrD3Q0fXfAX*fN zq2x_27!C$^TFNKbKqMroGnPz3;09PAh^*hX=pjWKoBRo>RWkk&8H31hJh7C`7IWJg z*vxeTnH+crFavSa$?bgso+a$HRJH%?fM90o9GiR4nXA+D|R4D0- z1ncGMHsTsX3Jir@7UN+aa-#}jH!uZkKV2vc(wR)`99LH9a>;{vS*x@mWe`_p_~H;( zC^!4+Wj2X~!Q^wiqb`kxt&#BLVj2YE(3tt+XpN&K(P=e~#PAx8O>vvG*2^+=)v_%e zK5bB5{J$cDBm&#NJAU zSS1!a&6^TJdq9mHXrEBVtexQtf2_0`zZ1zAeI8R?k)$_r#d{OBfLy9k<5G==c+eAe z_B$>8Bi#m5M&7Y=KwhW2pdSb@A?d{vTObK?g}8yQ z*2@J(`f?Fp1OG%gq!L(D8iD#;wMJ`lLCC|40tSO4<8#EUXy<5ythb%}$GaW94Y+tq zSZtAcdzGw8`n=A>q&^pU`xnJZ$9zwe}N_`(HdY@G$GN3k2F5P#>8ag~6p zL|lqktb`=>)G6QBA**tZj6}Kw4wN0OxEjI`pq$DdLoz=dB-(XiUM!APVb$Q_*MPMk z3S&b^nWQI9@}0!9h^{2j@f=bW2M6ReGzrN6q*Z|A&M9ojL}(nmSP@!-C}btA6@?5z z4o@JF8)Zuc99lxQP(gD3<)A4PhQgf{n37ci(KR9RB1q{#5X3YZ927$11BC*Dfg&!G z_?e^;2t!lii4eJqpg7N@y=37MNd1ABOrusJEMRg$C>`#}#HfHXQ#1;Hqn>i|a3wOi zz!0zoGFmh&2Au{#cL(bQtO|kF;Dsx}XM!xVZhMOOteqp0Nm}k06PqM~b1f}9TODKF zwUFKy!}YTn$;jGJdNTFk*SECw5*IGqEH!vd5NS{VA*h{LQ|ri~RQGkcz3Z-It6?JhBurbda(1| z&e6eovBq_bcD6lDPeO;n*=;m}N`#^E;(Okj#WfNEyY_c~ zlb*#EJ>g&T&%gbppU0!qhFL;}UZK{UCjLU~|8oCR)42)%rjChC8-`9jGK>ka+c5n# zRYj#%ws@e+Snbs4H??@2)?{A~T4-#KQ ziyw^?mvr=8=qi2^ZHDMv=HTk%QXowCZhA@_1?@6z1{ zSFKn12638@6Ca-;zMvhnDQbScJEQ9C))?EXbCDG-m`K-hAe&rS?C8jCqyHHzX#Pz6 zYCJ#RH0GVVzHxR z_6}R;h9&Dd)vKSltvxrlbA4`w_;LCd~ZA(Vi^qX63 z^N;%T=kEW`g=GbmphYGF?6Bf^pe1qVVx`3bOqXTa9ukQX6YWP|S#Hx>o4nCMuT*O= zxV7e3%#<8Wd(sA;EglF7xNw{ugxOk`)hSirdXvs=hlD*`c{pWI=$3u&55&I?nro%5 zcH%*i0Lv|2hw(M~_Ijzu6$_ufw|P^ZC6PFZG^dg)QHgf^V9q@fSbAitJ8<05n@`q< zH1=c5GHqQg!J);e>FUEzdgSh!NcSSgcS9{hM^<_JT$}!Vy~3gr(3W|eCWXdi^BL1` zbSkIkP209%eYgY@a@tsE}0Df!*hGu=_|LU8cJt0Vy*( zA@am5c~&1K8u?zuOIQJ0f*mZy$Og6^v9iE%!#`#Hp!UH6#`s%Y_qQ5dX2D^ze5(U; zaUs1?fNB9bLs2zB41)cHMG$o>eJ@pD)OQShr7yfrwI|PQK!4`t>kEdXs1ik-NH1!* z5m*dB50W>&0iz^YCV>LxNB^h{x2jN5TVF};b0va;QV~&KMC!;3q;OK2j1=tPD69b* zfG;8mOP9qe^c<;wl3)XLgCjRoP_UE);3La4t-CXt=yD7`(%-9ClNP!#9N1|wkF9Ab zeHO)*RK^vk_9n4cN_2;QAD3qm^SGuSc%jc?pG>Apsa=i48$uPsMg!)gz*IBFn4Eto zMS3omkcec&IK-^~v0NjN5pc@-e!2J~K3gu5{avl6UC$R_NeH9F7ZE>ls@@Zb-l>!^ zIls~3v|nWkktUNZxPPg{qNp2ny>egsL1DPHX5VdX_3P{XirNsU!gu}oxpgBGMw0*n zW|%t?xU8{5CuExig1$m>KrG7EuEu%QzSW0@VfE1J z>TCE~JA2>HSDkw@IS>g&W7DD96C=^Z6F#0=C@@K*Z7kQ-SFifPfB$o1)Aw68%O$go zb=MtgJ>0^e^}MO^DnSepJd9u2DW7muR`P{x3Cs`S{2*8{D(Gl$HoJ^oyH=VGtV}r_ zsg%Q+y7W5{M`jdO;wG7pDj4Y}ys}h08EU|um&)Gca1^GeL|j~c>2q2w3$IjwRzN8P zsl_P93PPEhPkbgZ$t^UV_}55HBz_w5wP=gKXC2{4IZEaVfk~vnKB~Nu#goyOfj&=3 zye_j>at2oVjd`9F!V~0Tl>&u`K|6GFTO&_0)e-Ct>yy&N3Je=K_4rhMr-F@(A$~}3 z%VLRGrsp5ZugWDhpUih3ZqDslSrwJLwK8$uO~ZsLA#X0Da4ER)jJ(qB;8o@Z9_+kf zN9(IkHf*TR)(tgPcUT)@0u@B>p>tf9)~{XcU$K0oit$|R=u)YKW68G7%5k2G=L$oj zgi0V}Mj&LP6^~cE2r=~k3o?uRFC?Pol6nxJ6p7L?UlIlYyvTE!NHqdU5ReiA!A~#PQQ~^2=lK2E5ngVJ8P{aT$5I_~^yAcU;nrw(PE#PWN!iUrq5Zt3g!^nmtvx`7S ziX4QLNOeLPe~}X}AQ>1F!5C#Y29So6`Rvjcz;C2}fLa4IT!^-)Hn29ds0DKS!g^M0 zYcDuF<~*@U4~@2CW^%VJWK)K1>|Kvf9p07OQ9sG8iEN(Q+`s7DE6Z~)e$g9AwWLj< zM6A6dR##Z_@Dkz!;$K|W!1j0&7s4r1OxJnksMw+4F59uRJJdT;9SLl?dvk8b@4qv5 z>WW;WKg$mL`n?->Ogy@+GE?gaJ6a1(^^obXX*!6@!k6A#)nN)bb>`hV8m~5}R?N-d z;`(BDS%Jz^Su84eVcn&|oyesVUKj(!Rw*gE`XV-8&79dh=9c*IDqC>mj=inDi?jJgb=d2UTMc%-#Wiwn=H54WnT&cm(^+Y@ zITnrFa((-b76^^Rp&RF#IwvfBE!kwjIC$;z^N{W=VU3wWbt?idUbPcA+`nxO9PC)S zwGI@eCXew)>`EqUrQU0oiG`TXBMGL1uRkpP?DUU~xY8{O>)I7D)^aT_gFt?`_Tn4l zy}|vhE*I`6Zw_vdx;ePP3Q@%*?B}1re%@ShFXYPkC1i{J17wT+7qFQ(WA|Z?V=rK@ zW4|Q#Hi{xc?PkOykrcy8(hu~8cr>yKb|`#BEE810JGq;q6wQF`hzg~>?jXe+D(wRk zXaU+-2q54CMgT3J-2ygWD3{++U)bU#j3gl`5(yu$l~G5S_VRA6p+(WQhe1eiAxDF~ z45W-YctlmB=nWvTk!ymbf{6$!;4Wn7Y%%!>9Y}}+`h@O+nj8T!f=80wgu+6Igqe_I z1=1VBy`cg;3Dlr;*I>&gVUQdQ4rr3cJmDHVD*!yXg%a;bXhrNS)B!y#Ns#1imS9<- zSZF6&2&CUCm)Ku;JYa5yMMIK7cv392#UPc$;#JXnRHGF*#E}umdgBf7Bm!qaoahBX z3|Cai)U)x1B?+yzrY1IC6P@nUOA6lfps@bt#_)#B=)Jd`F4Qir=^5?BOb`C#3*t-r z)*7KHlnW*7+9q3_qgd1_2a+yv*r?CXg!2=VL>Q$%f>K|>i@4aq zQ}kAHKj>mG?BgnkW8ikVbjEO`*5~W#_XGOXLsm~_U(;1ryBI9CXUUnyP@l>$m(DD! zGntI$nuz|5YgE=mW5T8uDg>gaYui(|oOxp;z0;S9=68E*C)@L8i(8C`4MQTCCZUyR zjdE?qlTCS}fx6X;{CU?k%Uvx6lYY)^bE?HWvCl`lWu&gD7ozcfN0h4%Gs6b8H)eBW zX;0F4oJi2D@M|TeFOp#f#}oM@M=3Cc+LK|vh<@1VHqkAz{rxhJLaNF9>r1E8$YKdo zy~`l~NUfvEA?aBb$*kGkz2k%uQW7vki5f@F4l8&0?)li|2w3%Ib9;)-gROGg_rlFC z=4XrdIdu)Q?G{she=?Z4vVOLX&VT@^0_U#7G3lARtN3Q{=@HAOca8*NEfHfSgxGV@ zQwEvLfL`=#!P0_K$C-+iWju$4q(OUCHQ!Wc4bMq&tE8t*T4;fw4C0C_0NdRP*e+8# zW%_!>yO1IKPbfb&U_2HCWDr6iOa<`#Kq&$KNmP{tI!b0x2e7A8aE;X4Wgth?6v8%= z7f^l<6d)UnhExSy!x7Rd;faOB^0JWB8|qo#ZN=&Pcdl&9WCoNYPX z8sAqF+&eOP-C*yT#Z6otH#%9}yz<(@K()cJYfPQddYW2W!6m|EguvM=-I8P0%W;8h78eS5dF))x1l4<_=lrdbAkOI=^UK^#^pFngF& zTRVAvZr58oZh+Lu^8-pX)*z3Cf{A@{JYv)eT_+V znlq!Xn!VG+{#zc|3$9T=M zM8LV_-(q0fmsR|v;^%NA`>zngM31>iF`49b!48P1KcZ*=pK$&PoxebwC!#^rwaXj; z>{Z0UT7-0J+f#r-5>Uh|LkA$Apz@&uAtb?!B*k!68v+_Ym&>qG(*6K*ia-Ov0+LyP zc7_Z@RG1=0*Y*Hu+St%FFCh^atiS!BnRMtP~(UJ zpt@25H9bk*??UR!d^O;KSejkSy4uFVT~+bU&Umn~DahkV(&_FEwxG=$o+jG)zm$7 z-=V*3q_gZnyQj8VHZXDFAE|c8tw8&ODX!K*dbwLD#lsH6z|P^Jqc_whyStOCo0eW1 zkSII0)Uaf9O`%Jfl3E83G_rlkAXlT8tEyZ&eQt6p*O{A~$Z2)C$v`A+;?)&|eMft$ zB6!lBJF`_CMI&u`YH92A9d7@4WbEaaC0@Ly8**tYIu{L@j&EQ*w#32qC=K@F(fn{@ zM(ufDt0v@9o_EK-)dp?2e$^0%_&#w$8h2xF&UWNZM)lSetDMs=r9$1hE*R?fX<{Q0 z|Kcnwp$sg+GX5Sj)Sco|@z_2tXZ2{N?-MM3uf7XSnmayzL>MMb6ZnTn_(`z1bbf~%}gW1{Y^TcnTS#^~))~i&hk}a|KjAQMbNJPkJPHGh^oi0;bmfJnX zyZ*$U^^ceh2ESLkclDcC!_&P-FMX{F8icDvnENA@PcH-{`e3D#W5rI&J>KzP@h_34 z&2T{JrhhyjGSwM7ceiCaGTrcsPS^98GI4`RA511P?r@#95tlk0!^Li)j3vgZAc8#e ztjrXUSIf*aTGhphWL)1Qw`;a`MwS$aM{RaoTN7l~TdhKUAxvZTi}?|oLurwYTSlUp z2AN#Wa%;Bq9*U4E8E>Z$E;CGMFI|n{8Ik)MkSYL)BjI&NS<~yPEIs)q^ym4Kknt) zo1Hc00ci|)Lw~J4oa;|1WYyD&OY1l%JvxRF!{SbI@1-1n{fL(!|Ax~o?dGrnJSJCVZqzPy*gZN49MygCH`O%&u;{ukImuRyhdI5WoEWlQ$a5@4< zYAmR-m-jU^1^F-u-hK#DNCyrCzd$@FWhZ?>!-eEvp~i${{G1@*QbUkZ@&by&f(y_D zSV#wI0AeXBBItr|3k5%NA(yYfY%mglG$LiB=p8NH8}vhTxP%?3`z75d(HhWQTpk03 zRECwnRH(k>)IxQjxK$@gR8L`vEu?mtb5G~LuRC}9VM(BS#eKMju< zG_Ag#O-?u%)4y%|fIsO9ZRqy3>2!-?{>aw${1U0jrO&SvC0cto1{`tkz>e+xUX$6e zsmI%C$+A8FNQk6~@7c2Btit#f|BQ^KR0-Ag7(fMV-V82%C=;123 zw=7jBb>2dO_SxL+i`tj8$BfmQq_(HU*iqG!OlAfLGyBe?Q&o@)!{;y5E(>w$iZPEM z>kby`eYF2l^bOa%eB-7k<~M&-ytyH z_4(_BLi+6>HMo=^)iclN{clDJbzWmaz4R7U@$OQeXLp)R1%Eh0$7nB=s{T+OZe6Lc z`Q}trA?V78?krW9LO!!|Q;)x0V_lJ4)!V-|yVj!Vk94iKn}RV#->R;RnAekyZR!bk zt1a{OYx{dwrq^pU?f#xkF0((hwX1j28VCAK)oKSXRdsJd7!3sr1mxJ0D&^X~F^4L+ zq?0E!DY3^ON0`k9*|@Onf325SE#6!i26g?XQ^77Le$Xrp7A-6m7LKa{ytvGV(?$L>A0SZTy%7@f&h zYNE~Y=DDfrmNlb21M!-P_rSP@;=Eb}^?@31<1U3JTwnz5O=JoX+fj6>tK-0-bF;_p zo_gZovES@tD9UqOY%c`eRU+@r$uzfIM|;GnLBGAm8N{@Zz?O4MM}N+zuTm0Q+Sc-V z>z$p9F!n{c^`(iNzdFtlA2ph=$IAgaZY1}BP$(7=q;1Icn-{}yvAK)zWI&M9XqZmW2ZjL_Ixl5hYulo%l-)1U~AfGSDJplrLQ zc%)J_%GE<1W(U*+!a0&!*h#?5WWcEs@d27c8Nm_Vast&sgHo~x*@8l62q%F{2QX|9 zTMXu1h~yU19iR~iX;DZFl&7df4g-WuStjhoo1eOB?)jCB*MEBYwZr{Mg~kYh+&k*P zU5l}8U18d0tz7=jwQSzC7aufa4aN*cIESndZrkzWjdWl~d`5#yDPwVlu6^>SrOa9M9aRxG z^Aepw7tH-NS*5Q^YJO}DW^`5-gZR`NbE+l!*|EKcf(%ZeD>^)1rSLgLBD{4LD`bz< zw8!;fdH3c`-TC^_?cJL;cWZ~MJ7#s>4O!y7eLK7{Wp!*rIxCo;-F1r2%A3t~7IP5} z=HmHgZPj|dO3zPaa4e9PM(fSAPKiJh5D7Iw>_zaShRBijM3J}t#cfNM%6ZcPjfeYY zq~F`WVX#Ta!8pv;)+4I}-Hu(5m8UKgKhkn?^}wQ*k?}S-*=i6JA}eaxiJXePVybPu zlI|AL8QVjF0E^>xHVsYPIyHXtv`i=DiJ1nk*Pya-Xfzg|wfLqrY1(6#rxqL3nkrYX zyFbG+IxD!?EchY63_PK(B2|&Cn1JYS$Vud8i24S$hX$|!Bud-aNvahT%96+c8*1T2 zh$mXUf;KDWq$gqfA)y8BR^UV^z#u)Tz!i)f1Wr_1%QiOzQlRaEXlK+g-vTjaJVryK zvgDM0O)8h8=7>kMIZ7%Iu(~0i70PH1_&|dImEugmm5So3ko-n_LZ2CO$IZgZEf@{g zB}2pevuk>=9*3>H+8?3O)+IFUHnY0U)qWrL;nHiHE`4fj&_xt}kw7A33BR&imJPdO z?QSj)lhf!Kld6B%=(k6Q;u^+#}`{$KiQ8p8rz+&>Esi{Gk-s(QMLJZe}p;iQA7o|{c+!0KN-8{KzlIC;TASt+jsq$ z`In9g`?gjH@Nh9Xcjo4lT zHfo^Be4$`KrpZ_Hf8d%3jol;*u^XpCa*ynNsY`bC7EG7Q>$K5Gn@w)LaCOXM`ux|8 zSFO{j3_3@hi@70cw?|_(TkJjEU0B66$+5J&eRKVt#D~wRFWxNTb4Bal!EBG!pKe#4 z-gXD^&u5lEs@d=V@rLuit6EEZhKz|5>9%g%()R^ci7{8k9^J9>z3)~TO=iIIUT^>@ zf&+*fToI9!{$|AoAf5jWOkJi5(0qdZrG(i~7Fs}`-(XJI9c*Pq1+}vf<|niLAki9( zNZ;bJFROSFmu<4)C{Q_h$PkSP!yuUf3{@cDm$4`utU~HvlKW(^Nox{l!%!a>0%l;7 zs$GPa0YOuCUvPawdM@aQjuwIsg_J?&9)UX4<6CQh!O;NFAKWsClf^T{S9kBzuDhz< z;;wF-#VYn!J=fFoT-AYp&o)-OtPRK4Y4_btd4!QVkMh> z*ZJ8OU*8a38FB@cx+$W#S+nU_Hgjx~b~90&(kX+k(2B^0*I$}Be;1p*@`?dN|DA`r zl06Q6^VqgdU%OE^-*KGy@2@BByZ;g`NL-_Es$+&l)6V27`l<3Vo=vY#I;R&IVrnPx z8wl*>U$J`V?U(Adf7~)KIyqno1}y`VqXR7;Z?Ajl?V;5xh5r z|K-z(wZk0;><7MR%Ub6La1Z49!3XB8*|smBvSWB{;^|-7bNt3zKRDmK{kqQjRiifD z;9y!NP5b9wx%$+4;!=^hPB%7V&)ci*-mzk5d1l(~*q9gU^7fgr3Kg~;u;s&mEu9tq zifBbuMGu_bpn{Q~s<hi6o9w(kiI=k**VV zg%kD@68V%$i17@F60X3z)0woF12Q8RKs*E5@l{h-a z05}(j@d7DIiPnJjD})MxMhh>2lue4TaFsNflKL$tcmR^%zyfXs>4T|-{@>nE6K5*1 zID##-!P#+i3z!6{kmXi1rCjo@*_;xD_u&$(5TWvtr1wqQfRghCf=0-O? zw`T3Ln?~xAaYzplYca+Bst|5&t*UA@;~|yXH+**S;R9Tgy{CFs`Jt|OE3$kk4Tj=vjVo)SU4ynrwakh~GXuvv-Ca2c zF2QrAls~4+#>}o(Ccfxh$sd;&|61xqKTV3W@Ru}W9AOn;HcjUSx!%zKe zXS8Qg9u%Pe$S>-N?)=$P!-8kWj%>(!GEJFBAB8thcEgdeXBYGC2O}%XdTU)S9rACa z=jp}anZodjNMyxuVa6<$NW|t2KzUN|Vvzw#=^<_i zz_U3js%ZpXiqM?@!w~=yN^9O)iApC zJpV^ybIn^$wNBqXd+C)c(z&`@Y1HF{Uc{D3SkXoZ)(vAC+G=O&nXBSEvG3Au8xFYd z?CvW*O1xd3`q#a*?!N9j-GSj^#o2$~xa_3X(7L?s=;JH)yu7A+_U`G{Q(Kzn#(u;< zzjd@>>d|A}72JyLKzkkr+EW0~9RlE`QmDQNA#T4QT`fqJ!)3B#gI$V1fx&>COsP#v zY8nQE+LQ>!%JK$6`Oah_kwokb@~cofG4KWdW`Bc;5^*Td4iq`1J&(@LGos)zj)AxW zK#MdW2u5-6$fqO|Cw-xa0ia7>rxpsWQ6IJw(1x7t#OxRwtpE*xF+nj5VuiFsb}rMe z3i>Sr8@CR)9GaDRp;j>bM~q%ve&Wzs;%~$~&lxRTuRaji`p@4zwrq6%9QawkzDnW7 z(~GRGP^P~pUo*{BOZOCC>~a~xYOEGl5I>Wf%tw=$SlweFa)Vd(E2Tz_e|2@sJ=4me zr@wpUUry_AnSqzW@OK%76xO_$p_kbCeiPFIVcZyX*wHkxEXxmQaEEBo-je&QE$0!a zgu#GCZPI3O7DQ-1mLC;QcXYHee^|Uk%xns+6sV*k@OC?ieSPuGc$?{-|GsfDt8yN_ z;qZ;UYL)IR@i2C7Yk%KHaXd$-we6XRPxQ6ypGh&8ezCxkY439<`~%m|FzHqG%2u#` zEXohobP}DKz0WdeFxo^yH2i z58dg{Ui#!Kn)Gk}&otm6L{xl1o7MQVA7Gvz%vi(zrypFiGpv?-9wB}UVXjo5ycGlK zu>;@auLxJff&5fMa+n4Pd({EEnF@Wi4#?15kQw7~NPPbWSP9>&_!XGhe^>D-I2V11 zjO`Wwswk53H1g_(e{vs^8^%!b-$oc59cDm>7{2*Lu^gyF4G`0TEMs)IZcj2%{X*>i ztune+5?6uOBH67HrGhwG=$}+YmS6#a+W+ajfPj5VYgk$xIeV!L1e97Ce3r|0D5Dqa z$<#)F=c07PW?Ommrv8qJJ@4$QJCJFb8yu;s`~K0Ih7HeNxXSjkfT-&B6!w7Q6PGP@ zL)C?^nV5x13)%i?Bh0ZA8CpkOO`*8b{d+e}nQN}P@DJi+A*N?e&u8ZeuhH#L8$CAS zPTZl8s4U9jb)PyvV`xUsPE>goJ#y3(np>5r-knUKKyh{N!cpD;Hw!f|v0F{-^xn zCz)&0#H-OCMvBfxMHBrY*9T7Gh15fd;t}@;F5>>cOMc=Psdd@KRzqyv+Ihb}n;C4b zdt&*{_YOFn!QEG%Y3#aXY2a-A>gP7nvFxq{@niRUu1jAfA50NHbbR5WKhhwpzjQKt zDtm+fPTQsZQcNbrVpaE66>Bga?IQE)Y(8^g$&0p^u*V~y8wi63J9fgR5Gx!~v5L0q z#;O}HJTh^1B)QqxaNW^B!^5}wgRYg2F6(`v*;k#+M_l7GbJ3WVK2bNHX&TARWgEte z%gF;QdYzki^NH}|w4sOv9n7#qzE0`nri5N@rd|6z_Y)U3?a1z6uK6wh(~HgZrUEu= z|IFDK`f(V0iT7*vg$wCBQbEsuc`#w}j-)2~a16Kq$Xvk#371>>C+2EMq;*HdBalAk zR~5g7=y3l8NH=3H(u#ouUSN7q%vWHwD6={sR1&8G{#GJv%7BdvTNU`R5<@0;!XM)0 z0O68Ka+0Sb*(HSVDSy&3nV`l86FD$%2-ZqUEMzGpXQZx!kO86wf<%%60bG<<#$ zum}Kc0!fAhlkz$N{R07^>@Flgk&K+vj^GQH2@``~3iU}rCjv}TJVK0U9Q{$G3i+|1 zc1rq>>&Fra8jaXvUsSXIG&m7$ePOk_%jau$=X57uyRGYYSnEz_U!$+TZn$Rv(iYm= z9UuI3`7Uddd8k)wwNz<(?pqJN<`?y!9>eOHta#jKY1nDv$uLIKcb~p*rN&G2C40Yzf^eSF_lwFTQ9Y% zeT`k#&BVLUZ7e=gGZlXQcj>LU@LYA@AhAR1lSQmyu0I{Di)%$4*1MRTo3GXDWF}M7 zjt+Nlq`gwft8UP}`m?&`NKI9uv);+(@_AKrBcm;np5ey__QYlbHb&htP!7qox5?ciioBB{%k1t&rr-I6}OG z{k37B)_buYqBr0Qms4C=RQdSuDE%r$P~(FPb$7~qs*uhlA@1etm3n`yE&ZeW>bpB1 zIv^fgJ-#w+aq=W>UTjk4l1H3&I7ze{DA4^tfsz&7U|Bz0@hmB^OJb034DBzHMJlZ5Itp`m`fdKL!L0&CvP{ZN~k`aRjtXQcF*r-@ESOVkL;>F_sY}nJ$)@4vY zTCS&N?wnqJ|7>;S6EK$Ej&)&;r#652@@AD-;qs_t=HhZf@D?$1K7Kv6?}e9sBT9|N zSuKK{vwDcD@YUewCk%&w(Y>L^-xcCE;VZhXzIdR=U0ox0yL7gCoST)Y{Z_;DHS|NY ze%hQ|+-QdAIa{85t$)d1FaGJ}+D79i(_M%AnzwdTuC2-Xg8q?w$EH=-N5q3je!d3t z+`DvUb&My)6|W9o*|X$<<(=o7i6_;5amT8(E?j3*TV!IbHqivEM-7IZyDEF=)Zvx7 zs0A08^w#!y&f0?)s?x2=#PG1p4mrFXHe2o3z$|?_s<-%i+eJ>TTQ2Db4U(JfixswY zT=-w?M(mKqrMH;kT#3`7aMbmW2YT-cV9m$&_8;wzk7cg1h8?D%9Yagc5r4UYxIlbW z!LN7}Hpf=j94`Py{X6EyAnPYK2{zOLgbJEN%y|#5}=L~0HHvA zkn2BePv~j2P*vnOu+`CGkrf!`L>n7M#gPIGK9fpVHHZqp+e1glya2Ev0bTy(MNwT~ z05}HgMD3tG3`o8sks0bB)E1;GLj#dBfd~M29eS`6Nm!~A1Oxy#xExoa&~((pg<)VN zWGgfREDbl%nQJy3w&>E!{F?ZNf<|ZQ8y@X}K>S8U?!-ogxKbwTEi`pWSA;huZ8?C7mHRD7bvFkju0grAC*q&F+=f@`V;jf|-rU z=(K=C;_IBOf4QeNA8N9-joeY)VcXii>h1{`8YbAcWcr{dyrV-TQ60Lpv-i{}HY9AE zj7TK7$`q~~=NP0KM*$P}jyYI6GdICw93x)Z_UM*oqebgdD4G||#S^vllcQ}Xwz}C& zHbYWadE;F5x)ugKC*X{oA(rJU1sYr?WAMV>=iBrX>r+aX%#na>(;1v3GCox!w#Oeql=QG+G+Hk$y*P zM(1)0Gy*YKqrOQmmN@Bs;|y0yY1)3S&%SZ@Dx+?8!%{=<%v5Le`Z+F6v+wANuId>c z!vqK3-^Gz|c6A@^<+Hg`v9c{7P&>s6AU5%{@qq0}jkb2_?Y*|vrQNRW=0pv)ZRGeZ zCw$gKwr2n8`W-u$?mKpJ$xVHHNyphe?PE7D*2Pt6Ph)iRGpn)V_bIzf!780Rw%ShI zqHnq5+Nj2dSJ?z=u2-FLc+&i+IJj{;Az(4FTcXLiP;4;hcQM*5DkM{?EH4II0{XPN z);$AC*0acZ<{ADRZo}3ln;gPGFs!Fe}p*U5!3zO)u?=VAls5 z6iJ)ixNi9(*a=yPtEh~ae4YC{wRJUh{ZmB0_NsoYsr~ec6L3sP0*Fuvh%f|l8Oqvv z0NiYzsrUq|L{b-USyZ^IB*o=XgpW<)4Ty55BoP!`OTrO6sHKFVB&q;~8fpb541`ON zp^@Y^{~v2_0pG@XH;(JX%+iS&Ewb2>L6Vs*#|*I@$4TtiVJC4oX&Pt)4V3~-nUeC_ zrcH6ht-Nksw-vT^-PRS}t;06<_5XeD>@t$q|7@%rZWl68GjJNMH~!RU=|LOC$mP5u*eu<#x}JNs3gE zG$ol8{fXL<$CzRMDYu#Tu(O-qcp*%y>5b>4#;N`O91KrNNxq%x>YNJb^No!I~OM zAGltvuQHil*Oc~%E4WctFx6D54SVDvg*z;(k+h`(A#<5+{+6W;=R?1J_Q3U{&$icu zhZ~J$24nfW;l0H*bvHJrHATAomu3b#^ZO<;rL7!^Nt|x3Y|nK~Ey)-%%sREoWGh`+(_L9we{?A6u{4Et zXyj_A7kAD)R54Pd)rdu*dFrCeLi5*nykgM;y~67`wPW6q3N|OTx?|?8lEtMZd7oEU zSn9Lto#mc&WA;iY1K3-5=rnd$X;`H;mWESx3cWz)j#+Cev`Tz^U&k0th5=22V&SjS zo(JQ?`($lxA!Y-PABUZFx=78EJp4qP}3n6t3}XwImfB*|eBcA?*hy#hO?P!e%SfP1(MA<`u#irK(|LlFKk%lBarz+i+pc!&->8}2zbC>(<6&!#R@_d~xy>>#Z- zltG`o9b9zr!Mfb!(&3?ixPcCUng>q<_PR*|0V9Cq!(zZ1afJe6BOuJ0K?(url)0x! zUI2CNsb`9Q+0b)O!tKZiH+=SqbJ(nP^Y4u_EY{WQ+y;(DH1+VJP4DhobT-X!H=FGB zA#+u^AvshsbZ%#PrAHIQul%2CX|Q9mTFf!onrf3mF+)^&a0Mtk%;KSC8O{Dz%H9rp z9ZGkPMLbbowXW76u*z)JvP7aNwzDlU=8~!SidaNt!L@NbTI$Q@e0ihFTvyCf?!7D) zQySFSZV@l!UwwtUvOUonjlW&><&H?3kWYNBXzeP~OBE7VKBk|3%c>d-#!^F!TS}YN zGM+!C;(J{zZTIx|$bcHBlQB`IRkm!-^Era{-7{GYL`@WE1A2?yRA`rgWMwjIT@wwm zVttsqe)f_kRk0^+N$b3mPjX~p?8g#4(a#fRAGl~PaKg9u3Mz) zyDrurlV$zI19q89QFJ6dX|DC&@N!jY20EKar1H7}z~Rq_7KweYoc>~GL-t@5v&8~wT|s+QfwV1H>j89OR!e29rIXm+KFHx#4|Np1xNZGMkH$O-xuP!b zY1+MY+dY{`)@~|Uv}^p{H&>d(JgFx3)|uhsmu=qL-n1@UxB2SjBY*w9S;!wOht4be znqK;AOG{nYHZ@GF-@X|d9x9xe(2*?DO0_a?s{uL^FpBR`Cq=#Lp6S0jbYdxo%Vfy4 zUdA{?KtW)i&Na;qDsZhv#8oHVjD7`_v{MB&NxMy1C>PJ`4r=AjxigozN;J(-8tCP; zM89l88!kDC=~U)|PNB#TW@2Zt#%9h2#Nu#7CieJs9;Qq##@LGw7*tAQx&p(vq69<$ z7<6KjS1qAKLwPC7W}bdVA#Htnd1yEm?hH74iz`+ZLe@7{JawQ+(7>{T@E&LxXz8=6 z4{|yHS|jC$14k)YcimVj7U_(QWJX*h?Z>?En4rOEi*+<|YA zY9Be~99e~{kWzK&{HS6_2vqSNj3*-xkS{OeZ?rYL5>Dx{r*#88S&z4?xIdnL21e>zV>&!QZZj9 z*GlauZhLI<8zQ8>n=yY;#Pr72^BoGD*8qT?j$owACMeRZm+RxVMwJz%ZkmT|fH zR8f;pw|c zT!X!g^`?}yz*wYz%9gP>G-=oLpYT9&frEn^QjGtxWz8mCiR(hG#%|ZZA7k2BW^-DK z^)p(n&88J{IcD4~;TNh+g%U9zIzLIdA{m3p7DHS6@8c?oL|kUD7);y``RqKfYXej10vp2>D%lhyp5nO1lGy|=TooN+9u}6VTKZf%r>eY4npxrOU%Z2F zPHV$ewUL)+zPhYMBusRLEmmKNUXvTNDRs$Kyspx!G%vxHg#7dN-`kH%{OWwe@I#x| zyj+rsoLO+gEr!x)&|V%Zz2>@Y&AtNS1E`;g9lM}il$5s@7Pd+!&W;Fui*sD5f2uKF zsPP&6-fTqdGh`i~@@~Co>6%zlsc!8lhfH-_>Lj*K(&n<*S8tJf(=a&8|hyO>3Wy3JlU}sh&@t zPluRhGgB_XE$%{Kn=+$B%;PGhJm6nY+m3mN6JqvAtWK`OCv^K4Nrg~0rnE@RHbRT0 zG%ivR#R{!9I~<9ZV)S@P-Rf+3ptQLu9B2vW!YqyoH)i}wg~32?o4fUcN;N0K#g*L= zXuJ>?O1}R1LRWgM!l;*8ON$jgQ^Z+ZpyhI*^lVU2KwlcIHI&=x4-c6&npAyE($Q$h@*6v=N{gbYYq#a5wl`EYSpEKz?XM8O zeqzo03xG6#210QO2*oJ1VkeaIycvk|GqfL)BJ#(yZ=i9i8A_`qAxx(YTBaT(J#dH$ zQF>bvs09ZkE09vjh*qG~Ns9hZxQ+y9im)N7fDoVh3CXc4C=`qaBBexBr*n=PNoRml=)VLaEMTw$7>*1Ne z;yF+eVhclTlIyh0tifyxs1+@k+rrkf< zFBb`ftp^@mWIWWtEM2AOzUQjW+G<0gT$0(koFU13^QY3q0}7$s7coiYh8l&8qk_`5 z3WZv;mH7RMXSIsr!TH$D{H68goUL(v6MfylxX;D-J5H0mb%+(0y7UuWK5<`B9SwhdZM=(pE|Q} z?1Axo$APw%D~Gpwtm(!QdVpRQXzi+BM7&BoW9&29A_m10kzh%wd%hVPz`BR$jlWbc zDE5er5_3g?sCKYWU1+dZM9+tl%2FNF-f4LC!=JRbE^TS)sC@n>Pi4%0v9M%nnJ>)~ zmL(J|W{K2hl?pU`y;kM`5fz78(es(~Ju8Flxbf8bWNOXE!_X#XL36r}_+@`%s4rdY zFv#^%5#Mewlr2mSP13h1rhZ;Fs9bpY%${a?YGGNrr+dh^YU!^2?p+P^Y}3vbbHur4 zrO|9}+1Z3`(8nYq9w*G@?|XLf>eY*%Ey+|jwVbReJI_)o84S6c#Z)L+EV=TrhVA*L zWv$TMN+#uTZLQ0i^4lBo1GkM1@9nQNI~?Z9{=LJaw+&#wW@uGPD}$j^Dy`G+$b);1 zUS1Fj9J})*{dWwDN~xvOZAzuCO}hHt;qm*IwjJ!8cjN)1+FO+hNN<@gDNnq*s_94F zdv_V3)2uHKKI2kV^PtDbJag}Y4?DKLhuy01@2aEIxts<_1;e6S*3mfF0ED0Y5U9*@ zC>gw)b_Bw7AECYdt!W)Jw^{lC2nr|IjmxF4+dWM05y=U@VY*DD(#+g~UpV za*#zq(0&e(KFSaUH%G&m=!}~j1tyCTstpwxf-W3)8yc6&p&qBsDJ-xVoC^P9r*Qm4 zo5gSg#=rS2COH+E7l!Vx0=-h4%$95zDb4sDMp=0*3Jpn&tqsZvRd(hAyTDbgHyX@Z zi&X;|JnvAcAkG^9;%IWztYBl;H=lgvuyIxO(tFER4y?Mp$6&P-v9bFV*Kac^-4zNOg&heZ?To#4=450W7$}bHk zC!HK8GF2j?48c+Gs$px+TnHQjxmZ94fDQ5!g*YOC9a@2)@u|DO4i;E~F8-td2c|@V z`NesIbgkl0cOs`tQGN9JU5TCZYU{$z%(@>I1;zqfUsx6O8l6s2Sy^VNt_ZgRv9#S^ zxIeb)ps6-vlgd15pVgH;KC<=wdsoSgE*FcZtq6KDI&u5SPYh0%onRaIZ0k#&9)m+&X~ub6EHoOG>T;($q+wfXMU-R7*pl*rD;n53 zL2Of;&f~&!v#{8jm7T?JByCjCP@ z7sPc1a+lNTt8HHULxMPgZRMWOmn zt=F7OSE=Obd^y(;uTCTv>BPaB1-YUc=z!zvh?Uk@xap&=^9-S?H`*jFt|b z?C(E0ICOIU{F6giBOqFSu{*QOvv37_#L% z3Q{|(<{c`2|5YyAXUAUO_%>8}@n6kmuWV5l>V?FG-NZ*b2lhA7Z)Y`O1DfjAr{|v< z96UWVbb4^`)cib5tbS8n-KKh&Bs4PmExhn@c;NfLuw6 zmcZ9$xhUeVWH>c4Qv55af40KEjI-dsCaVH z20!ddWEKX1!Ij`pwlgk~gh9AP(?Vnn281AQl0;(EG@__e$VEBY=4K#>oi#j=-eW{q zL4qgE9c<=;JBgqC_VTiFXUE}l!%NN|v_S6x$HcP)F(cCR1$u=;uEBIXAxANAEPv-2 z2Z$qlzDnknOTi{5^2$Y#S{t^cV;@Fe`BaMu)`=sm^Q(gvwK06)KgF!{$lz1S=3~5 zb^4O^vaSvhhbwV2IY2@LF{XgSQ+9ns~Bo|7$e-K|l!=v@WP08iM22g(LlcF!^?hzb)k{`23HtTpHZ%xh( zR*R+xqoDs6*$*`w%ngPF5`b1niq_~{xCACfy2DgTR#9~;UB$2&jD9F(Bj7DgMqBMd z{+^aWUMR1@d2Q9#3Zxd3!kA(R#2hZCqq4S&snUh~T1+FH*N&N$6$vn%arJ74g$d<8 z?e?+Bs*O9_3)%{V!3~MdZOcm!?o%05T!B-)J=P=!qjyyHPBJafF!R&@6RbCI>;Z+s zW95QDF0}?_%4-~s8;eJ?srfOB$D!gvu#?P~3oNO@-kLqiVEdwWn^A>H;syMo>1~c; zpJvBH8=4KSxWA@pTx?Wxx{B?kxS_c)+-VdAje)FDIrh+U@LLEn!LVIZ>~aN-LV;Cb zOe>kLu#fAHE4(_r&*osTxe|4XFJpkoJm%woUx07bDMH5Oj*QZZW9CFY-sm(%?e=1p zJJ4rpv3M=S*-#w&L3OGypkKYw6ETCmrf?rpysmg5cEOZ!qb?TtkXq#uiD@GzMD~adlPMNk@ zRHoK8dtj@zYTsYh7>wA`qI{!r-j#QDC>$Prc~+ri758eTCa+T~H<$Pd%&E%d4^LqJ zm{D!gYT2ej9!ngIimE~in_O6CP`K?PMb@Y;49Fdg3g{;(FDz6lB}}#`tKf?G{J6vH zY+@W;*^t>iU+wRY>-{lLX~9ftNypRS$%$s66vAxR0hfLdxO4!b)JthSkRr7K`1Bi) z=l5&c7l^WeTS6w4gYu~cYxOLO&9YU%BZMdjLm*U-IqNh4A!?4@&7v`gTXT4YC;%$z z_`kfZWJw*8H6!f-DHn=}gNEo0NpcWn<6KJLNF@T8Hxr1Cd@kB6$b^wi$drW8Ud_Ce zYFz5SWl?tksza>T@jhhVJp{0t@g02 zlBL&cEY{%T`bL+lAg?$51v`StqCD%eYNIsjuGpRPE-zC+m)2|cUVq=`Z{7C|ZGS`7 zam&knWz{WP_HAj&lb<6ii!aMeVLoC#nR;QhUL*CG)y702)?U-5^S0XWo!w8Iy$36U zwskCMQ*`842Z_I*KmX#fJx%*Pk@V7`$>NADE$-3v{d(jz1XX8NcBe05R(+(-i=gF`U55VK=dBnL$D79#%uKqSW_bqRn_92_kON=cHBEGQH(0%<3q2r3m&7XcJs zJmMr_19W2?u0&kmQdojGZ-7g1jv+a)4Ap``%`O0D;c_^g!V*$NK|GZT)&`bA-3@8V zRDdlR{%R+onzAMX&;v&zCyNF_m0igdL3beq;-auH#CB1bAl&J@GlG;P5=j^=w-Y!w zEL)A*dXmq8sxp)}RqZnK@3ARmVQD}ubjax} z*5HU$=Emd3fX%vkp+A>VYEvD=S)WT?xp~a9E-ZZRM(hXN9Xs6xI<2~OC>&~7vC73) z2@2SZH5Xpp@Z@IQ75h_SPuTCbxfSPhwb8_h0Y!bY)=+90dHIl{AUtGL>q=58?AEru z*`uq(h6w8`k6H$0ccrnJo98L4>K3lcJl&zwvhtUmo@cMNDH~c#7|YIemE%BG%2mgjKeAe1!DPn+ltVtAKzpS{y$Knq6g)+(#-DElmC0@V2qN3eQK`;$zz>XDsGcl_{NQT_dQL;?rb*ED`P z^LaGUJa1s}VE2ZD;5#!8|7q;D!Sv>lB@eG$zTT2lEWcym#1%LE%a4N#2-%BoDB`N&Fj|4B+@Sj(vgJJRX23i zJ10Y(#FtPYLtQ@g+Ksj*Pr9!^ee36EvW8w@5@mxYi#w}2_Bxck@%B-%p(>Oeg`SOx z1zV0c>(mAxyV_$m+nSqm&a7M-wG>s?yK^p6s6d&gyGw2UN@E_wENN$~OpupWbOzmS z4ma-_S)Wszg0*?OqP!s0Ws=v%vV8`*Pn#P_p=M=DL@! zs2a&7yTj{m9j_>mvshsCfhxW{2heN_#8{Sq6`-BgkKh9lwj>y4C{jsLZITxw!bXbt zbNT=&Hvqi_I!b9b3Mkl$&Vv3&0AFtGl28LuZs5kIAcUqvz*j3&4wV+F?Mw7Lx1s&3 zm6_49ve69nS<=&8TGrJaWp661vRG7KZ5OjMn9*SQ>M7<|tbtrMJII>8dv=3i{Hvf5)pNs(7p_8Mj+JFbGi76C`JR%p?(VYEZmg5N5rejk zHHBYYwvb(FHX5<7o@QdX0ak`Nl%2kFc7x`GCv+eAgxY9>w1u=KkmtIBwuZKzwh4^B zJ864p`=IgDQOFcLK|2j$B#%NO)YBlJy#(!`-vEEYPeD%mkoFPOWcZZ!KVTyMJI0_2 zyva!Agp!#+K0{HcC@~!P2RvtFYN3oHq@N+FM!FrvG{E6-33`%m2pAUPHF2mLf}EI9 z*uc=AJ02y!=YIc(-){7xqhNq%LursWQrX}_5ZV6wv2bc0aJd5hU|cA^4g&%c=IoH# z`PGANrGk^l_ukwzv}bjNe%=tCO<64hu2P$4vwQpbv9M&qTbZce*|PMeh5U|#olsT@ zGGd|lvPqr$>YIw;eAH&jPZ4YLbjH-w%sqK}+tl>Od4_&!+L&j2G9<5&M&6$VwdZ#%)T(RW#1+J{ApgL61?+s>5redxqNo*Ldu-RoJiU45YuI4t^ThYjh~)FJUV;LsD#INBKNPLv21*p*ZSmL*s;HY)9b;nEVX=gj^Lur?GH=8xj$5s9 zu{Gi?Jrq$_Wh@rH-~cn*fooS+w=eU^M8YV6z-K(g*8f6xxYXs zDY7MOmZZH%YKBU{Jf)eZN&BezX0&eq(PZm?3S5S5}YU2m^+f13p4);rWt><8(C1nlCBWh>2&&w z|ICU0TVCY32;cdOP&`3f3H{EdAU$Y1?Q+@;5H5B*crNdyJqQ6E(A($|?o*33VtJ^? z+l}=@P2Le~6q~?SVw2bu>W{VvcmoJ!NK>Iyet%3P#u>z?Hzmx^Ucum#MCWnke# zA;5_FP(t&+5y}1u_+~}5x&6>}0a%qAdQN}+ZYbTRMR#9()&Yw8F3xHHd6qj8g^ zAYVCDU0CG^20OBHhqQ6j$d#)k*t9J zlTJSfXa#QrcB>B(KQtj6FX^ic8TCPda=9XQZ#| zdYPpM^0E}t1U>E1unIXd2ZR~9&Y=^favDkJvQSABfn8XA@pWSRoWTQht-q8He6H8-6xeXP&=vVL?H$ zWzk)WPTy}Ty)v@m+BK8MmX~de)^sW@LgAezYXPo+&f3Mhg+eLv(AzXEecrVH7p4 zM9F+Ai&KNglsKQyW@&v!ZNSnt5>sY+eQroj4Xz#4$9ywSGg%Be-1EAVKW;m5?8uRZ z_^3jez+5b&(Y!!7;V%>UMPA5A;@eHqlrdu@&f@CguCC(SZdkZ~=WUz!L9ZF%6k&Ra z_@>D+uhS)VhTZm{k^>REnvSSCq#X9kbUdz{2?6>2OGcM2j5XIc=4W2fxj5yKMq5)L zF11F*g_as|iK|G&6DsLUokQx3s>OO4#F#-n0Fj)dF7mnxtwMA6aG(p*yonw0p8Vna zV{0C|W`Dz`DKr^1KCU#0O7w+>Dtn?!iP3Q*zfkFN(-;^5m|Xx6neD9UQOrdJe+L5uQvIUDvD~(DFU$m|!(XfEcW5c1-hbq@@ z$!8B9syTQoTzCk(<>VcXqx-jQwH<;&A3wpK$y{~YbCVxpK&b6@;>*A6dEvS%n@XSP z{VVY?Ciwc$BgFm0`Jv9dqn!Tn2j^b>3 zhOw@~pkK%ex1U?438bCZ|@HO$;1+@7C=TiL+SI$^!r3>H5dYI?_e+ zYQA^dhFe$o+E=Bj=CjyZD16_L?MsDYUawrP*EOU{7L}&Ojo0r>mUW~Q>O^lt=Hxw{ zHG5o{Yp>bno^PFh_~*pC^H1fBWhVw|!nL)~da61MZQ4-*A1oFcO{w-RBJQ)bHs)SB zclDWCyVg)y_}D!^uB=!Z2A)1X9Wik$TX~1mlOlcb$bYe*etFIUqSMZB{ zK7V2MF|E^UfIsXYe}tHss9b@0&mR8yMmq72*<-}n=9Ol=Izd@ zyOx(}pLvMW-1>4ws--l(?YWbyA3ajKe)(XXGN2V(rHwrm#V1BaH@X69iQMTk6gA|= zGb=l+zNO2<_Vq`b+E1-F;0mo-yC`0G+b3A)@eZgNNc`a&8lx&usY$3SL$6ZH4cA7X zSP{AABfb_#QRjT(@%D-SukSr@Zk1hY55`_Tuejs;`&XCEH{klTJCw^NN>A6f9*emA zk+23@nffYq-XP;gU5)%$!dqB^8Qgkf(5*Lw-ZjRwFZ}M^pIblu+s0oUg~}Dixg*ds zYd>JXNx%RBO$+e|X$XD3A7fICpJdZXGHeL3d2S%opC3gbc4qfjvP9ASOUWYi~AT!=H!kG z<$bl0Qm@yblJbaKu|<2i3yIYX?CxiW|F-88rkejYwu4R_-%P(9ET+WAMuo+hEU4|P z-%uqgkSFVs(6I5)uDwr7eP!O>X8DtQFFyo(pgBTUnx}M1D>pRcW8H~VJtNwkbeZAM z(8&J%{vB!mQ01{*i-uqa^a^s7>yzD4KV){g(y{U$nc8sIm;28X&$n`Hz1e8m?XkK7 z^gAx!q{Nwwp-tEhcM&9wm?LJjY=?5ZRueJF4FyVXm0B6qs+`SFtK_DDMvuoF3rqU= zDn64h6GJ*x-ALVRFFPotwW5mFn=thr}@)XQcqIy2UBMc%ULqqpiJ zP;b0AQmAtWS1pt4)rR#G0jCy{+=6AhPMn{VO7d59q_c4I=GG;b|6uh8ugiPe;8zyP zivYKP2>w^WQkI}qgIi|{Z3j4Ukae4sWs^!oz#%RhBoy$;;6Vn|O<<6)D#vAHJnO~U zTPilh-#gGxsumag2FmGn$`TOAN`@bx_HS?$7$zqvgDQ5ANeeNlh}4qc=KxyE#AHdC z0(pi&G(vLoEEXX#S4Q$q?BmWV|~-t*1Xv0(PAHm5AWkjg1!ScUlW(5 zPoFs+<8xMTnE8bxMdVKr`yZ6vfvq^{EHl}%!m)2?#NVf+Bi~@`6*{k4?cc0UJ7#{d zVKs*zzy8eWv@CY*%?Erz33uP&F!r&|V_4kWhLxGJHdC4NB)0N)>4U`n=?|I-iBTC- zH*9Te+R~toDUA|uxy4fcTa{mpd$lVt_BSKaDdO+noM;AG3H}8JvxQN&YaiD0UVJ>< zp{dQ+;{AACd$TdyntYCUecSYzZm2mU4tQEzK{}(AfnlXuzo7*W7%+OCj?FyGVs|q- zwqcRylC4=|b9)_J4ufbq!sGGxh&%S}ntrr}$!MnMn;|Y5u7?UpEuH{2$$UQr)nzu5M#P^(WV+mtVPP`WYsJf&GZQgCT&o82s8K^QX!SrBKoTNq~@X zQW8o+RQ!6{F51;#S9%TVQol#S2*oBLhy$r6BvD{fyb%#2VBum0dSg&B6Ok&4l>%Qz z5CJb3`unnhnoubqq$8R2TA!7 z@WH8DQgJRg2elspV#)*&j;)yO(g~ZW_$TA@RVQMN1(ThTu0^{BCa!9=_1*gOZF_!u zgGoDx1s^{2_s2%<9apazIlN{m(^aCYm^U$1vA(L+Vb@3vPPeaPw?VH{SKHe=+cM=V ztNM?1)%Rw5>rU)`d0FR8E5+BHS@PsI$y1LXzh8OV{`(){jPA}X9?|vmlx!QJudj7k z7M@*k&H0WVY|HlXCpPYSbA$5<$=LEMKP7&4L-#FBiEFE-h8`Wf7puasYpx5FO^Hn6 zTp!fiTj+u2&zpAY#|PX!*RS6B!i`tY+xg2o1{OcManrp|Eq!X{X!nh0-rl$2mSG?L zt(a$gLoD4Ft03O2&$`O&8iPmxvCT!sn{8RW&V;91myaEqSF@%v-*fH2;Mvu!3w+qK zEwB7~#p)LhSqlSyI==X=r|KD3W3p>@|GLgw@%s9G#8tW__n)dCJf8MPFPm3!=+=c- z+M0J%uYY{}%oSrt<5K6%8&}`AaQlY`nvd0wdT(8`^Y1TCYRpFlF|OZk-SG?Jvtx(f zq_5aN%;NOtw1rqcQeQ|@VlM#L4Y6ORSwRFZ0@Hm1#QiOR$UoFh;%eGWq zMvJQblg5celuBStkZ%|Oa5m7wj=_G|hqIEX_7H#u#XBz*9FsQE%?lbD$gHS764)f5 zs0#F+P((>P=p_I(o5W8Et;tIUq*(hu5AJkFp?EVe&Sc!G;@IM{7^rzFnGyqq@#1Va zY}G}r5+qnM1s0DcttuW9=d7ZRqCR*HBq)2p*uwe(X_f3U_b@)|mYN?fDj(CJ!y zx`WuR5VF`-Io6W(#G|#fQS?Vf-$4N@ZA4RE&nP@EIVq-Vw5KGzFely=Uu}F8+AHUl zRZyQL?d>J#Z?^X_9sggW5RV43h0S4x1$SUt2ABk8(Pt}HP9>R2m zS|ZV{T--o6&rCPdKTT;<%r+;>&(O=-WJ*SWVZh=By+LQD>)Wg6{qoacyR+7~^Pb1= z-U7Lt0-uRkvxRMxD){VWkh%E?wTx(OImFz-I&fP^|Hd2o2j`91ujpCDcbf9nD7HmP z9Lf_!Zdp0Cj`C%>1?|OXCB^NFH8QjundYT`8tK_QwpK!HQ5);?`S)~K2nr~_rDME5 zY?jI)GFiiuaUJuCwIeInZu5-|MMlc7maPhfQrTY8Qc9n%-k{bTB3ZFH{M5pO%1)ehYNUy8?=M9R)w~c?gnt6)JAL10fP00|+xH>$^&Z z=qS)mPC`y;88}(t9wJJd6a=tPJ>q|>0D%JuMaBbVgvfT_vI(%1fdU1&m~H?YClFpY z5X)$kgDeUVP6WTLWYG*%ZYUaMfRY1PB16}cWs6YS2Sv@P8vfMmkP`bHRDv;+nA-}L z5n%GT6D;Pqf(-NnY`}R7^Jb0O+ID1r{hp5>+ZXI`o%#jFIat1BU7|UaZu-Xp;)0RK zW~fEb=AiXn{oTh}R<3NxuUL@}WHJHxBbLuA*A8Z0U85YluV_#NaWhWNcw=EuTxD>! zN}I8dtE9~>^@#&L56W%|&vPvr!M1s0Y^=4YVngJM8QQ)hrzf#0cFg<5-Y>!%CU*Vd zfsv61{;+HJC+Pc=-D_Vv(baY0wY6(sJ<;8L;?=cCr;60n^nMZ9P=T%c0&8W*h)=$N z0g3gM8^Qy`2LWMmBo#?1uoIYou}W<;s%L%`FE_Q^@W~0&qnP5{e5Ff|9VlvQOnvow zJKrGZOIRJx6g4E?r54q)vW;97tc#bMna%Vh74-y4V8iKj4!r)^Sk5`AjcvbFHRf0;{*8nJ^dIzaNYJMz z6-j_n92NbhvOf^OBG?1lCx{84d{80+N{aiIRI(^K53vzcIb^pQPIg0nI; zK=4P3ANGsno&!odvNwPx1h-N^Uq-Mvz&)Xb`?vQX>&F1L%#L{}zR~+ePIT*1L;D9~ zNA7kP-92dtSEmPF*f{v*y4$|mf89S0U)bhJr97UZq87&08+M5$xrt?!h4mTxRd>}L z#x7S21Q>lm*HVndS2LF9FK^DL2Gb2|q|K_++mFAtWc^PLE`6s%Azkz8Os_-*MM)qG zNkx3v*xQjZ>#(5RTU(&eT8JM>q^5#+bXWPZa;W)ui(y{zlJHV}m3VQJBAE$A^kvpD z;;$tGgXOro+>|_*ROuLeIrk9ugjA!E%5Z#BGH%jGM1EH=#^nq`E|LQNh_fwMbf&L) z8G={(K5QUvCvpefNd-%th_rUlI|mOEcRn(+^Cfa=9#3k01IE9rWPcM>m@FxX>DYMn zlKR1I^kvIZ6;2^`kB)G2ywOQQ-h5dLbp9S{kS@9W{+;jbIr8(Vj(q#E%r(EgjJ20s zAFT11o!4HLohO(Qr)lZ={yZ0YHQ3XUeS!$`F7%4yrj2Qc?>C zwHp9MOurQ3FM=CD+NDAQ_&D7l+#<+Ep@I-0bSY>9;3omP0X5JG=&s3x8YfvkjN|+k zEfDbr``D!;GusUb8F4;Rs%tLCer-DN_|V$#Pp*b?)Q{Iz2+DbZJn?3(FOpe%ZG?ZS z8WP5!Vw%tIO%)Z`W5x5avTR>pHrLymL;ZJrWo6Kq-2`ObbgiY7RW4{B^FcdGOvKjC zBYt0pafvg|C~E5zwF?b=y1S^&ZgSZ)T%1dMD$_XM({1Fi?#4JAFOMZMDhFcqk($9T25uT2K0TOOnvo2R4zCK` z3A02qT>+_WuRyc(`Or*IM{|KUEJy1DZFv(Zj6xw!S6qf6MvK%M3>0LPt&Yt>3I!iX z^>I@QEhs(T4c3Pjj%qT=g3z}E!5SEEFqu-#fPi2>lO%>hCQ2#2C@3Ou0jDD(Y%mt3 zRZ+LWTA?-Qsb~@EnM+?f_Qzk}<4mOf@qMcYD=Vz1D2!$*@L-miZ1V;yIq6RNyoT}d zhWhdG3qKdz)SQ6c=Dhy-H~R>_a#3|OG4p_}#QP$qfig4w7;vc{ht-iE6YqoV_$J~Z z;^QB(A4hga_#^hzO^EBZS5%G)YbLiBrqhL?bo!5-0frs>GT=}vJQ{3BwD8a^&C^d7 z&Jz-AIZSMR1@zU-g$pa_Mu%B!jhh@6N3o4KG~Niasc#%7pk5iahwU*iyt#c_dL+b0 z7JE9cCu(P`1x~1^Vole#w$>!YP2!^3)_L`5>)*(kz-+Jw%LZ({)LRLu5MU*vG7*6*0Inh9Gxe0IPm;Zn z4m$LfI1Di)dnb^r1<#(txMT}9ftiq;gUzAv7!Vp#Cvb*~d~4s`ycGLE$OlD*l=0aN zHh74D(!ekL+f7v5k<D719G(LYgAv&C-TQd6?bXB-#{iRB9ma<#bp zCgJ3RKUt>qC;0M>zJ#yi)(f094cwRR_yJ+b6C=6jboMrqh zWkWn|g`ume(l?oNwp(Ye4s=ww!90UCK|vp!cwVHz`V#wjceCTjtw$k4|U7 zk$6%G`=QqhZiU7wm%<-NSWr0>v<-k-BmvF}ae!SU2fmb@UaEOqDwr`1#2Z16z*AJ9 zxYu_;UXb(%!%+O}Ma&cydXiqn0pGoff+9E}NW4LmHtTJY7O4%}q_;_1q*gs)C;sT4 z#=58d#2<-U%pRB3;`VG@`DSk*Gu)m--O`pTgPF&jo5Y zR}KnkJ8cmndmuNv+zcR1NherH0R0&t=Ku|WcQea#(DR2btk7`Itp*a|W+;H>I9*VB z1q!}`1OttGocN_23iV`z(Lip2_Yd?)#`>8~J+r%{9^+UUMRCj+OVCdSjF`yJiWL6Y zK@3-}Dqqo5wX%FUhB>$`JZHH@|L06DU(y@W^R>G)qPqnF@66trza+bjM^yBJ&LcgG z4#DGEe2Bp5`{`-n%u_RK1w82ydxkEhuM)}`w{wKMO;t1BBTUU2#!sJXe&VrOqgjn& z9@OSq3_2K!7O+6`x3Ly7O={vH@D{%XoTUp;q@K1HY@@VA|<6PyGjQrw))*e3p=-TK;Y}hotV5L6dA7Obvx6lXEghlDw4k`M{MN4!UZ# zfhDPwQ4I}9eP`~ja0xXN`eRFWteh8G6phb^q!|Xw(!DSUl&Ph(?25|q>sR#hqb18X zR_-pX9)!~LOl^^xPA{%>FDNb?3U;@4RnuG346(!{i|LZVTlO33DstI!eBG*CLjAx) z<5vHoiTp@xvj5l>R=w0A^p^^3B8yrqmz;b-?KP&W-GUaOuP&u?DX-bI8Jb7xe4=K7 zOPeWw{3^@2^=lt%^tU-&4X)gd4u6l|9JOryyg4!w46QEi`_cB%TZ}!rl~vsjEGb?Y zjBhL}e|`nqDs|S|CaaQ|luAQ}cuUtLsep zHYrbUF`2fCMi;hR(OtUu)`fcya|BLV>12fK%$c1vH{NF~nPZVu2s*tEmD1D`Xf%2EYR7K6cYD1QX<;q0|=Dx8vZ(Be`W z!dvto3SYsc@SjPODQPUAon$e)7-V9~We^Cp`mzuMY);|Mzx7Um) z`l>}HDVr@diK_b)Bg9hTFEhmL^JLCCOzX~nzWxf#cD<8$jQC(1@ik3DTM9P2r@&^1 zm|ZcghSmb{A5*j&$v&LFhO#h!r9taZP>to-R-o8V17CR^dk1?T3NTt64)mf)Cl;7C zpcEcd*g+*+=-?6~T@5JvoI-k#Euo97%gtgronXgBg&L5N0Z{-1GiVzHf*~XZoJIZ< zKz>AtN!by7An_C7Jn;V6qvYWv9K*?z$b;l*q&mSy25SHyQb&nVnT2pGxCa^=>6z3g zX_diA`T|O7+{OlIB`2a%qIg<>Gd1hmnSq}g@oC7jBEM(9z_>^nRbXPsfs+Ja1(-!E zLANI-K@l!$XzKIQNs!xcIt&f2BvO7&MA6zWUD~B2f&2t}Qs!O$~= z`67iL76s1`nS@ZlGE{U#^PP(;f%C`-Q@?SRhIo@GBYt}H1XlE!;Z@?j6Q?1Q=j8O) z*maoehI7P&zvM!e&)6eJhH~w8UI25bCu4)*@zSNaHoDy-Iz7xc2fkiLP-V zST9Yt6t#ZFlPdL!yPOuI&#(7j5_Zr`r$^}w7Bj=7&%A5#LUC{-{h=b2(Jz#*OF>$t zNcsKD5<~T5CEcYcW%+fCNLv`}1)`Snk%UejgQDbOflfEvBy5Q&d}?`EuXS^H3VzEP z2BvqjQ*sklyQyBBb>y68U)6-JW4wUNE)9-UN+i~Bi|cT*t4B+r zoR=o5ab$dKUyV;L?BerQ)~L%HZG}Nip?Ulsb1PphwYj}AxtX{YP@0dsB*&yi2@k&M zlTwRJT4;ND$9tIO+LM^|*Cmb7r-+#oCx~y(FIsdS`WW4bDWCB+1%5;P;O=XQ-@mtm zepqP}s~s|fJuv;{$ekniq*C|57yWzXKAzF1774Cr6@;*oaBWWY|Izjz@KIH112CR* zr)HArz4w-xWO~U=GAWZxl1ZC1NF^jB^xm6vkS0Y16a)nk8(0x5Sax08>Z+@&*w?z2 z)z#g#L9YMj+({t%?)(1t`~AL8nasUs&ONt1y%vb`A&In(yvyJaOrMmhs=T5_rlqav zHq>eI<#`JWC!O#Ws1Gmk4uxi&UB#^R340qXHx5onnat5Heq|p`sn3`c1TF1@d~!y@ zB`gq{Yh2;Usl4hIC?ufJDrkMjW)?Qu*RB-#Ea+R8)BR>X_D4en13xn9%{I*nxwN2| z%aP<3mG-F$#3F%NKuixRb4%#Fk$py|#*?qPN$>>)SO_n@>l66IF4_=zO%C#U@JW`Rr~si&jj_XN|0er2Mj6Sq?X+3druqKz0>5 zx*QXv?BJeY*yOwtRP{~3OZQMxDqtkU4TGr!Fc|D+xR3!@S&*G&ho~5P1T4sQNUj4S z69J1FQ;f&Kp$mIJVlWXyn0_J1=>%$kWHcro31_8L1a>{pQ^H{zXxvz=#TIFqjE2_$ zM;!iSxA0#Ewaut0ExhpOn134W&dTcYO1cz6U!4~dv61`l*;Vrg#4M>h(Sy9j-U|;n z=nY1L*+P4(=%ORsf6uPkHCvv2qsU5oN~LoeE__+!aur?dsMZwFid=*P$BmI#y9RFFO)=M z8+LtH5{+-(1D)F&e_5RSHj_?COoNb&H5;ms9)YwKY*2&By_i~K(FhzKnVK z+joWIcEr8uCf@ekLb>0q{1VJ9bL7F20x9_~4qAeIF7l)60!|`HA9*rd+&QUHK*+gD zR>y$T60L}dpZI1|Ebsn{^w6>w4}mklYmoU{N=Uh=JYDG`7!_S5(mG+Jy(~H8sB_N% zEtLk6v=t<2eU1x6Fl?S51XC+$saU=Obj=FISh|9DPQ4e9q3PIfj(-C&BkM`Z3QHIo zu;_!q1F)ZhoL`yZBX;a6#q@#|q1@|$_AD0DM1S*Z^6c@l$=>3w{zJ(0>~qL?sK2Y& z*I#y=JU8qQx(5-Er#fZQJfX zwYu|8mLM1HtRa`=v6i&)c~Ty~O~98hp|8^&$aH%5`9t2~PV&OxlNYycy?F94VssXJ z51rqAntbmL6zl&}^}M7sF;sq{k?=!@;VJvu+V)SGa-gFrxj3C(SXsF+onD+=52{)w zlPGN-bRiJxIq2>r*^e)gOPyDnlg)IZ-0M!J72ss9F86`?#ArjX|0*u7rg<$Q0CuhY}IqQo9`kE!pzcL6= z)^T_R@GCf*FB>ocqk%#L;$m7376zd5mwyBk1a5K#?HyqPmL3x{c*z*K@fz^z@Np1U z!B}f=b=TZ+_mP-j@uLSf#M7mvRYYkzNrV3ww7Sg5wH5J-nvvs8)y#aek`-&MnA*`e zH8tp}gF#!I9rh7};9i*I!rHKPl~r$2~etCp<_lcsJHuTIz^5^_P~+N^Wi~ZHPn*oc4w=AAbmtqn&+<@yzA^t<-3M?9$fi}n7x|WE zWSHJdzi=FVl4sz(%VXqmjQER~Vo5(RBQ@(xwSdPLS%zlz8)_RKnkkcz>tG(L@#(=WvN>V1s!QKurqKJB45~tcIE^eN-L$`yd_h<(wZeHUk}pmpw|sAvA_ZK;RAF za8|h)zx^vH8aHRW<#7BQS~fNnREKZ`00kNhWrJxc77?Ks1k(!VryS3q<=|6d(83!L zDA;O-exfWG0R;h%!-kCNeLhM(U?>cSUo!gxeKF9bKzXnhMIi;IGk_a_H~0(S8~=?2 zEey%Br0rGESzuYytq3OHz+Ko}6 zO(ke~f3K$X_*9;N9oe++X#1oc_a9Y0{Bqk>x(lsF>M-Od;St4 z{!h^6t5UgD?pTQL3z}U%nZ%Wh#gYY5nb&O!`S_ujyDB$@s-OeVX;92kp%&+HRysl<$4X9~Sgla1)Tl({F`GRiL4m3v)!7TXHvs7I9P4U%eC77oSvQ|%y|{4w;@HWmA@6AGm72k-EU z*_4MI67rbTs1ZOJ$47%QjuQ?bB<6BVHGmohE9&nULCu=)@GJ^6Fr3&aV9Ca51J%WV zl(oBN!7>{p9sxBNPJ`k05{?+hZ8Pj*z#$e`;l*})L@F0YBKC;g4xEfBWwL0v`#LZ> z0P!-Ko?yYu>?tsC!=;Qjtjn+{Ju2^vJAs%5LNELxhyNjl4*yS$AUT8O!G>Wy5M~B; zph4>|xNUsHAWB0Q=xn?=m>htrL&^kQo^8~?Xcx*&5@F#;T|uYAUF;521}61y*vSlE zS>&9RVD8?~KM5kV6=prNDwm4h-g)KLhZO}0$Ha{C;VoD0g!u*Gf+9oOO^Y@!PFS>y z8yc2qEQv+*5_7&nEEkd^8jD4vwpdUt{87WsMYSVU=yX3QbxI2!q?b3W_v_+xQONJ) zv9%((idn@}C{${K$MuzZ6;*0>l|D?~P}(2vt{WblkT5#pNt@SRj{Y?_-@(%AxivzE zVWr$`hCnRSFZSwTS-LA2?$%bI^D~m}7DsV?lX)P8a`MTChp+g{e%}p=J;wcCr{Z#= z&DlAz#gsNzCgNImsH(r6UsOT<{K~`R7u5lMSJD`j1{zWMYhR;K(kkg5OiiW@7y7&c zIr)-CzUs~^X2eWUAJh$V&Ymw+$rTIcIi1>2adn|F6b3QQk&G%#r6oyc!-ScWd3mx) zGbS`R5`jXQr+@zLeik^{nnG!Vsi44QNQc~fqgon#Ypg~3*mr^rbz6t>$Rm9tH1gs$ z;W5Di7V-YH54_Xkig>=nD5mF;x6C6i23}c>=BuC$nUq(TFEyuo1LQaJM^-njO!h3j zX3fCN+Um%x-iqSFzA~3KmgieO-y-$xzv>|M#N=`_>GS(bCU)F!9-h9!mdZH0s#~l_ zQdPwfVozoA$m62y)Vu$E5GTkJJRJtIgn=$9B2?YP#r{#VqSw~LmX5N-&Cd%2qA!Z80WH)ZImQ~ z5iBdZfV+ZX6L@$mB#){tj~AdA0vykzPxjWBJUX4ipb49Up3c7GuPBPA#uUAc1?*+^Vv*g|V(HA}v(|+b{fX!Ghmi z*gjCz61k!)R=BpTYVIU(L?tTZYMncZmMe8SCAl@~W*i6qMd$90j@_N$`hnZs4!3&* zZnr9@s0VOghsq?rj6n~94qJ1h(F6r zsiyoq*ZTErfs{9WZTJ4}-UD6T&Eb|JiAoZ4l|q(8+Us#@;^yFN|DVbCnT!diW62V) zdwBYg>q+sP!;g?Bp_N*h;=$kfVdkly?=Lr>n%%p_omn}tpv_a1 zn(VN+6f(K|3sk)7`JRo$pQ3J;SJiyOhCOu$H?)AMpc_mDFM+AR2w}lV%09aTVk!57 zEPF2%PYDeysz)1wga2DVz}kvoi6UmB#1m|kwq(FE zkn00;hub}IZWuaOLDWOopiIrs1bIH5UL-afHk7xvmRB@4S2*15j-sM>jy!kf$;{la zJ6dlFmnRog8=xVnPA2sgx#O!kP9C~(!-T!cTG5oP^(sxopeDaO^&(nV48`5l5uI}6 z2dk68tYI;r^zW_Ymsdwte*gWd=+z_Ze5DDmx2%jf4u9~5Fx@h7Lc=@f!889I6yW}r z) zITUUj`-VXDvGQ<*V3fk})-x^${a&aR^J30FQ@&9%u|J&M7aV;AT2eC_lSXrzYyKKNg7+^@=B(EetJbD!T z@+;na0~%QAj?L_^&2apoedLei@n@bPkCQ*{+Xq28z0bUWhBoMSlDjI7Y@0o-Uv$L{ zw~x#XrqjV-x{m&^Czrt+ZocA=c>wo`Pd-SVAwQq9VpnoWgV?Ha zX52*i$P?fe(705?*H0kssHkwn0>NTOMFlF3+U(J&-4-4DhQgR%z-vsvYqV4Gj@S^l z8mJpQcI?uI#|{Qqoay)f@VR5R8t!ZYMz?Wq0NPw&=P9OblyU@274!!lM8E=|M8M#~ zfNrJaoqRSo7m9l3=I7?4!jY$t@n|kjCd-H-?=4aS6<V1|fN6F30=RdN7Te+k= zpb<-LVYAy<$jMYkZBC0!EfKbEpFo>>d}#iTsG~Dnm{Bpf!nxBp`5`l(ua>x6w#Xa7 zfV#ke=KN<|{CW&$i)M7SH%~j3x#F*LRb%)}A$Y!kz3lz9na7tWrj#<)ts6z{9gYHZ zAb8U#B7bdgu+>|L?FH>K#acr_S{dE6bwgd^>0 zSzPC>)0^yUhhd+8C{#Q-<*W!;%Jh9VP9YL~L7zrq(yE0rg;mF?t1$(kpQTOVR+W~U zQ~j~vP=H-AV6tlKBccC<&ll%h#(vk74dv;^!NkDyJoyvkIr3lgSM16>aA*w>i{`f( zQ>G;5gMLhZ_|B0(UM3RnN9v(G)IbHIU!n}GaRh!2$lix@Zii|rFaLi+TSHiVEE`rpxhn2e1U;KmzAX>hy*#SpOggV&>Q0Lvx6GOql;z!H|P{`R>_aUfv| zOrE*Ey?y=6$pK$lQ}N{I3;+M}if{T3%VymA`zFz`lUBdq3V<~uR>crOTJE~diAm44 ztK1?6^a)$K)aPBcl(782%t0<5Y}wU=s@-)i8#LPs*jf_g*{&<=$=m-+#&Ue(!~l!! z?CnGCV1oinls$63Iml)zTY;M!R?Ryne zRJ!pp$AQ|5SfYj&50}Y@6(Z)r-h@*+|2O&+vgANHbAk>QWgwwB&@Kk_GCK(06n|mK z=)a<1I98i#*g!Ei1m}#%>4cEd7csy9d4h!D2rAN$7<8-!6I z(IXdjNo+U%5CvDH66 zCWJr}T0Ss28?3uGcv$&h33>AL;jV{XL-Z4ut00a<3sM$!p?d1|6JBAa=5DEB7tigD zGtssr@UB1rcvlhy$2iqUI?aa?fnoMv$tUhPyYkbUPa;c4^zpy+-SqLw^e3+jJa}Co zaQ&HqS3f2-)ywK6c9o;qMLauJWbqdA;-Ak@H?pg8-F}Sc9Sn$;*02u9m!bc zIOLU&vASSR6F3K!LEPkHkPZ2I&R?NOG>)bMNe<%RFn_|TN(2PItbjlzZG(6~$#}61TOb2Z zhkAnqkPCnkm@1PC#U?llWiy~beRpgz0l@}_DB=Ql038l!AsGENj4~wTr{p;)Gmjyb zM%AgN^7*wAI_)@eKKlgH-vk9CE!V9}C-h;noFV2(PLNNJyg#s5uZ+ng&53ji1kWu; zg5}@8vXNOs@4n{DlRZd2YdJzSs3o0f7RzHQ-J+4LYo6bxGsgNOF1w+|%iywvNObWW zQd}?MiACXz-tL+{-LUoNQ>VxadpG@UU*g{Rk)GYVdm{7eSHHN9Rn6(%`w&^@YY~>R zy*izbm5@LU_U;)k-#)dD=)dv#DZl#VsXGt3CdP$aekLBAwr3U0L2r?lqp{enbU|)zu9Tf>dVyHUn|0`(R#trD z>YA`MZ?Z!6Ck1^F6<=p;uNsG}2FGCdAYe>l=iB&x|Z1Cfc9`vPG>eR_X??sWTjCwD^}= zYG%gV$gVf19oiD7slB1tQLHmnxQiMJi!%=B9B9^98VcG9moKXK$R#!t+V9A2Y>h(Q#16Rc6m)Gr{wWEV8ttg$@IX~ddm2gDCTqXlrz{xmVJ_L<#BHv>l z2Sa8Y{G-hPLzvKIbz(3E!HfJ4mRtPFvhNb2KjF1u@&`I@b}~4@fn)-E19``H@T9)9 zuF@Me)XokEX6%?Ue^2kBzDWmr_sk#KKGPqbU26z?D{B+_I}gn|KYcCv+275_Tf{0! z?y8gYf%wT)xe}GQ>EJ|rl~M=AN>(fvP^dUygDnW#lzg(3nQ+(wP8 z<77Yt_!*G{x*{mkjv!0T41ovOpCu27tx&NYVW~wPVae@)M0QNbG2y2W6WM7{1qVvK z(O9A!Kr1=~CNS+*2nmbW!6znX(WB%$K7+&Ss=)e|Zg?QbiqyJ}HY{pte^(JI0*Hi4L}^azq=^sxHpFfkWOMYWLs zCa)N|o|uI4xAb<$D>oqZbI?!my^%dET9r|g46sW|d9N0jh1D^UO)M;T##+f63sA9a z!mjB!3jK)~+J+W2Y=3MX&qkgSvB$rMFj_2$)T*Ig|a#`51!&OkD@@%JBN_-h_k1>wN7AC|>SRn!u zE*q{82c1*AD{G0Mmd4z{KWS9bDimz4{o=^F=#w!Jk9w0zOoHic9q>w0kd z%ddU5YvC-!yT@_zm(Iq4p@&ur;=Gb*F7!%PvBI^)61zd0s9tcV!#~5O)F#?02>HL? zntI=^e#wTFZE~N9PLqpLQMb-qn5^vI!l1i}Bkd1#RmZO@uj`5U)5YPn^)i7vQDAge z8U-V#XC-0<)zt;DQu1Z&h*q1;;53B}+#0-*CnR!FmyAq{>i0CVIm*1|>(BS1)KX!zm?vPV?RmN4auY{NK*XZ~Yui^L!)5*NFr;h?dtJUX@5JM4%4qK&0hH!s-v!=p3F z<>Uc*dCOodmey({8(-QY%Zt@j75=!qf6BkscFljXAz5d%^r+PD$OZAqo|tV?NK7Lt z);CF{B5}jIIQjX#sBP`^tyk`<+p(#;CiUd&(;y4FYGo-0`crd~SN;5CyrV^GM)XJ3 zCZopNQkyhF65Pz8dp_GZeQz+u70A2>&lFd6gV$Q%OI!Qx;sQyyD$&+nn5ge*2%j93 zExbE1bK_eAxh-AfDQYQ{L058JYpZrC%5`XP5kQS&?3-Lgm#XPIJ&5VIO$syBTy|uL zTp9L@^?HMz;|?03BRn)l@CeL8nN6UOL_9KvfL9#g2?=&c$P|`|nIev^GCwy{z46nb z)Wot_GLcNosA#(Pp_drxWhHENK6?fPuR=0i?w!EU)DWsX0M(IKL+;n{oO?#~RS?Q3 zYv!-CRfY)~PC;o*A|eH}1x^h(2!U;|4_E+!ZJ>aJV3Y}{LdTtYF?GQxoh290&Nm{< z`X)zlH*3&~j7gFd1~Px8&JviGV0{*g1;0xBg|vnj$Rh%*zut?={<5EZY`R3u=bt6- zB)`6g{Q1Q*Pb}SV_m*UI*5-k(1ACjqI{JRpebd6P-tH7DUCpiivHmL;m8W;zw{Gd< zr~gQf-2FGBy96PzK;`5|42@TvT;Q3sXHTDJ0oUDVi13{%0dUn4H_3PS{SNs2^9AI; zlgkw=`fmMT6DYMe&~tgYTqwHW9i2d)J#(z*o@akN_5)h|#*){`5AGc4HYBZ@BF&7W zy~3*9AECs{{d>;Cabt#f%KcVU0^^m2x}!XKKq{>CAzOM>bNbu92Q`P4_d ztBCatH`Pg*T$ZuDP+OwsMW=1tR5*Wr;imgM)1o|miMFua$l@}kbvL0qV-9C5=5)j^ zd|bc2S>jYV8%)HBLx^^6##7|&AKv`KA5L|yI7C;EO@pEUzXNa>25?vm9*^sCPC}s2 z8#$lnTmY9~0jfYPs1MCR>!GLO3G^6x4gH;95IUlf=pm*NivVQc&BHsTcnPMA*f$4C zj zODDw}+2yE1#~%wTLM9x5dX`a8-cfw#S^jkS?3kUwD%3D6H+JgLi=+y^jQ4tGGlqeM zXJ^9VfKRY2bpsLkRcL^u?&v!ZQ2FC7v+;aka9QRP*hp}@-MxQdiKNfWjV+;8M zKoc%41vkYQdkR?KfP_EeC^lz@Z5V0-@WQdrgsP7Nw}c-Ye!5xNBTE#quz-K_4e zqw)Og-aDW&7bjNfDryb#0xIuhlcIls9%yn-M!JLj_a+M)o}GP=d}}V(%4qG2kZ-zT zt|Ea{D-o(VQeA^97AX*`v=UCfRJ_3zi#qX+LeCDN*!r>Gm;#}ePG9Vb#av1$AG+>9 z^FI^U!wI5-MTAXnlIXP(eV#!<{^*K{(;_*vyk`bEfo^<&!)#>8dH4vJq5W7N$n$V? zDr%ntqB=}LLu03vXb>%mV&q?4F{@Fem8ke0O@}MyG%n)CT=)?9eC>*bolLO~?+60I z*q|$BE0d|Ul6_RSb{FM8f<$JR;Q*K@@Aj zV{9Ii&d(hijKO1JS8{XlNi_1}qF4scfs!8_$dJL4Bx>Z+pg~hZchuHBR|=_SKRiNy zbW_iUm>D1=HJrWaO2H4XYNAo_pkT^x%-#N>j(WS7Iak9Pab~uT9>EuzRi7S9v-C8 zXHKCb$S1PKBo(J?#E1<{7W!woh5`vM- zbH$M?=JIKse3?WmmHUszpkplCqfohGL3||skU!$XhyZoj0HAp?rNI?@IOg&gz(FX{ z(%t!Q#9VeiPgY z8WY6nSdcA1x#)pLQv?bm7fhM3)&x{56p8@Ff?t3D{~!81ie#?t!$g5JpHX)8gH~%ASM(sW*4I?*WfVLf{}g%l)&H#H(=z&=8CGk()p~-I zjB50V?kS!7_z&AQeR|Ini(jM@&AxT#)~58_JQlxc*h?RIeeP2)t>5tKQ!{4#?$7H5 zn_v3_`Z;m!4V(uM{CD%2@Uh>&GJFR4{de&Bjn(znwN#-QuiqS;gI*b25(e?k zKeMxQrk|)s!KD{J@ZFDAKRKymGhZiohirl9?6HQ+YapZL8tA&02i6-sWlXb!Km?$c z6+zX^@RdD;X$Cf&)vPb;-IyC^t^fFpSZo=?D=eC488%)Me!-|ltwb3EekDJEyaKnB z4Xy$S31Y`U5(I1$;Ze#f!V1BC0GyB4-El?(NPXkS*t7jt6!ZNGNwKrCXv$Ei&|wbG zTHB$#ihT2#C&|~JE|_6DiHKthpS-VE*|mFfZB4UC)zzO`TD$6#osi!fDyR_E@Cr?B zHTnAxZR@1NlTJJy>hNgRTX&_ zHA3MYStT#3SC@#xn$A<@(={!&#`wxso*-Jd@%`=hliwYfaP6dxKTNf#+y%u^-&O1A z!?me_;il-a3geRQP%P>yDyHpwurxEbJ)$ZSm9Hkh+q3M^SyRqjxc)d|T;~obN{3gG z6Gr(Rv%;(G%oTA|7i5<>pxMY%a^t?HaB=yfGE=i&Ybf2Z%>48N&p|#LvFJYX{X0@O ztTSJ+zp6H_EH-JE)Kv}@Z#k4VvB7G9`)}kPy{2Jn&!U^X+)&b_aC5CDZeEc}3^&fm z4M7x8rHd<0RB;7-K>@wq*CjUkL<<`eQb)ibD=-(0?5d9{8(LPCDZRpp_sux)&CdJD zbAQ?Y_iZbu3;iZrNwPK3IkmZF$nA{QMvFX^ac5qBZ~I_XvO~ycFWh(o65f3hnci4> z1Nry+=RDkJ^@hvWOiR#~jFI}Ed*ZnQMV^px#n?zr-X)*?l{wdfR~1*j`g6{YP|HAo zoG6slS}DqGhZI;K=2+Z>(zK&?u2CCkIFdDo0#(MsE&dhDo1`TRSsa0bVNHS$Zg}C-K>;^T1bO5)=nT>U^uQgxOrjwJ=?FbMLmH zjxCL@scrc&X0A+Do<;;q!V!y!To%W|m#}SGw#_DrKnq`s%BnIN*lHGbF5gW)HuAb6 zUXIo) z`YdEIVpnqU{5F=5otw%emap2dyVY)E^EqIW)_JO(W>3mRoYs~VrV4H;0dEgWPyHc1)K`c0%X8gk1+=}U`bqT24fM`51mSuzhtTs zk6u2Dk|L=jT?%R8wnkgN$iWB>*Nj7;AuAuBI(ufE%}=5A*jcFGMlTC2<5@@vSY*VusB6L#@(zOxkX!?3tL}QdCj5xO{fS zk*j-V*F+o%c2)jxg}*~(TwWdY8!RSIdvN8X=534mEvAN!qROs9uYcm9VLHzsuzD4&t&KG4?%(bR42t2S-?__%S^KA)#}c2n%r zpP!j?dX~*rndsOvQEBE`?$@a*WeVaCMMGT!hcxAq+^;yOMSM=*6y7G z#BLa5RMCk1OXjMyJW25}$wP@ecGoax-Ku}`x9KDKr7M?&U;-Q6gMoZ z1;(sUBxXOwQ{+}=G(tsL=A18G=hHrPd(YJqDx%)5^10PlZZGygFuR>s-s&*<%ajSB zqug2$c12w#Gi1O_IvOchaQAQ$ieYsH3WQTzwbNFY*Yufp5=zVC!5^8Yiyw33AHsVdM-l?+Wl?xjqRpi%Q z1Ky06S1}_2fv!CUxlK?Q5TqoXHOk0HAHA)ZEn*2cERBn%QCG^-6}q;`NW-tpo0Z=@ z0ZEDB+QK?_ZXGXbbCeN3Ux(=0s#2~}2r1BRr9R&%P(+Gyl>(W-6`duviP?UcQ0mY^ zUgjNOW?cg+tTIOn89>$?CpeUS5RlObDaIX;?9~Uh_~D!xP@oVh73N%05Wy3Sbyu8t z!H7V&D)@*4LNglw!Q(kNbAuwqxZf0}u%IgDSn*GI>TkZqcpp9t3EF}F`BlgDFD_g0 z;oU`r_k6fw*^AeAe1-mrKJ#8!q-J=$Ki}eg6WW_A#(lo>{+#mCzK0@!-gno&wQb#7 zw}(QvzrA+bTWjAXy@=ucx!FtiKnrx0_vd%KbQ2u8&3o}aFY#_B^R{<{;iZ|qBOgHQ z9N1P!^wjHX-agUScXZmcqkVlR-d^)Mlq@2CAEf(gFRl;LzX`%CN&S2U{TPmo=t_I!|05&Y>2=79^tLHZNH zpX(XtFMJTB34#~r(wj!CLE>DH><^-U2eA$YWjt0u84nG-jS6@R3nA4TN<$7~`!wY4 zLk)XM$I@kskAlCFK`}gBbb&$b;81Vu_@J0d1RU|0qkumotF}W2k!&w7OtgzY=>hQ( ztlqdH0NsvPr-(TfHBQigH(^>$@faq%=_>N#_sdR@XYSRf+uWtEe7|u1-`_nwpG~9L zU9*3j6HeNT&}#*x8?o>4(q5hU%&dt|yuWGtKVI#fe!8`6dcz074>}-9Ba`p1X)ClZ zyl#@c@0!^bdwqEk?Q2_uO=qLgSksO_|Cgbu@0|-5q)TM`k$wODXu-@Tiw9(nT1$yV z<5Np~(rE!_yj#3I*6XWYK))U3o{KiEt*>8y;=yiHg>gRl%NcR9ve1~)AZr!*wtqnV z=dQT7uZ)(VRZa0lTKwhb66fmT#OD0EKm75w0!#CR!s^1dw9#_#@khz)8O(KmTdFTJ zG#d=F4Ov|5HR=-9pcmx^$R660sX{Oq1cb3)ujeLuaSahjbq6(V0yd37G zz{}eqb?(cYpAht&0igsqE2T63U*9l=LJtrEFx$>@caSWomjmwyyR}$&67IAD|0sTp zIWTTnh1o8=Vql{e3^2ShbM4LfShF&`QLMpitbvmy{j2YfaH!n+t06*H`a z547V209*o6STh`9Q4NG(5>@I4uFeh$2aAOdz~v$?2{71~fQm*#NMRjpC8D406gu)k z+>kD9_HwH@K}*UQ;FoA(+G=w|<1%M-k=9*7wL_>(4%ImmW?i+_SgO}4y>dg!W-QkS zY65aunOVLb@rLUSX*oxx)QNy|t1OF$_x-i)W#gPZ_f1`QZbpgOR9t8)oI6};(gpJ? z1F>i&7!vlKUk7o4uM96O+PwS-a=v=)54UMKd1l8>^6!7F6BSi-Pu=`;uOlUB7ls>z)0 z9lDn^=z9h`6eW`O;Ys?s8g_Sig|({iI-P0IBGPx;OrB<=UegYB0h+DaqO`_sO1cbC z3Mf>(b&_vJYT9kXVliKk=5fW6)?K}w`@Iuerb?Yn|6UesPp9l!zsy!?Es89f`*qv; zuA=@s7dI^p2j|p)VQ}X41I1kmcKX_+D}7(R!pRRcxyZkf7gs;nl^A;Ss;80kn#fR< ztT}3$pWOcA4aA<=PdxiA+GuDEmKS7f7vJ?vvOA|6S)TSHzN_D$j~qMG*2Lp*I+3Jl z%lcZw%s;Jvw)wAH@+>oKY};fn5$`q{rh5oKomNYu2|0CK9`UiPZRV1wFR)~8hnRef z-u7(DVw$%KdK*IEZ0=XUT2?_M$VTXHxFcsb2=P4d;K_iQ03pl5DkTeE2KrIW71Tov z@uJJH&ccOdM&X`zX`6*N0ZpiH3U|yDyTK^Iy0itLn5AGWCc&~o5W9Tb2ZEPaRtOid zkH3;E&6Ar)iJv^Xs$9&%`Gw4}Z+x+M2#;mAVUf{ou-8IML%GLT6L`06WiR zF*-SIjV%nO&z0d8H5V`n%oQv{vw>Bg^f%J%+_pq*A3@mo<*wuezCbMuX-iu4vYILW zpY+h_@Y9s1_QRAn^#Oc{m^bCU@W)o)P>oFAQlbqBLHC}JbeHjM^uF3e8`n;2^e5}7 z#VgEkqUIuQ#^qx&S{mCpPNT(@#~!F};u}>uvr>_o8}B%QXy5IMNi;&4-k9p*H}lrb ztZGq<?=aa*&%pV9@YQ;L_SgEzlfsFmp5Y#S*MXL@l_d?`-@HY8^vMEuWNz`m zsd~F5T&PUHg{D4I-lS2Rb1ahYybvHJb zd6MZVbsRB=W^?w`D1%yqT+tY{%#1%pp1tduo)%={&~@iv=fnk|Ro+O$j@%D6JM1gc*?+RaR<% zyqb^}TI2Bq9ep!8`6g%J%b=&;R%NS6(b(d}@n<#K|J*xb9mzl+O+IXas;7WM0u3hg_Ya`N4Tqkw_j^g;((%_xn>t%Xv8 zJjqc(&5MywB^hte`S+f!zv7dcrX?b7KD(){o|l@l_x|Zs554$@7O_>AM@$urbn+z} zj)YI#CKx%Gr?ZM%{_x^MRnza^J150Uw>7f!xuPXaHJ@Bj|Ll9`d%PJ5p&B_QS8>pF z*}PbM_t{+6uOSH@qO6pV8lT;;{oSfoSzy$L+GAJW)EHRt(@OHB4Q5zWYU{;E=+;13 zP%Eems;#E>q4#Zt^1ZVBeA!-kq3!*WdXvEODqdf zvJ{>x$Cw0l^jQDxY5tqVsPl)imnoG+@Y0v|{;%H{d&&nLC{RB!7^ty`xO`>hP0f)V za|i~5#*)g(kD{fD)Y6L|#wQfX=Iu&Z?VD)NT;9Go(mc1M5oxs=NPng+m|eUqkjK7P zrslR7YXjtqjr;^z|EmQVZxSd2IVUJX zd*{;D$Xk~-FAqWijt#%ulY4^kEL8VWL2EN_P7q)jH#cjbs(j6W%m^@S0!@wpEazB^ z26_(Ac}$UM82FH%l8L}72Swy!Jyf%LwCuFlK1h0wEIwXx% zb)yb}T~7AtX+?CG)9IoY(U4UwdQG6PTEm=m`G}RP&PNFaQ>zO}F3K};ql6PCrhbLG zAA5{E@zuz|Fh^pFAusZ&N{r;KdY(|PC!}H>DpfGFnuvIWgUAQaHTnqoB|6Sfk*m;V z6(hkDvjvL^drU+6|$LNve~RB=a{@)9qLvE1VWycTxUGTMw}6G zM5Be^zTfGfi`Qr1@UH-JLxZBKHXu5F$ghh*zSSfssW=rvp67zD4#_JN%(@ z(9qXV-n^O1lZU9~&+ct$ z*?X2cO$JV|>bYgh@ZaSqRor>>sIP27C^UzdT0AlU@t@1dJE&IZLO_B5R0e4QtJ5L~ zseoWU2%-Sk$5B~8Z|yRWE8ro*Km1U11Y`wKdx!~AhK@iHCbbLV1m1;sX}nAA$z)*P z08N0Bk?;!{?Yay;ZiZNFrHQRji3<$!c9vaE$ZD=$S#P4X`(N8!+s3h7ywlUCaORaq zwkJc)JexW`c`1~s{vo)rwzxT;sp;x7CUqWNSC6qu`=G01ii`a^AByk2$srSiLTAkJfy%MJi{&8fguf0-=&@Umun5c0sK08VIl zvRKT-Op*dyc_y=VWNapv=p|yvK-+#rR zp2!G9v>_$D`}I1jWW$lV6?LfFTV>G*k+qy^^yXv3r;0+ay$v1~RV6_=D7@V#H!MjzDgoL6}(-K3Wyq>$_V zjc+YqzEdx+^{IpU3-8`~r?VwAm8jf|XzMSY9!3(g&u2FK{YO+LlM4DBT^#Az-F($< z5YwBy5vAO{tf%|Pd^s0-5-J@RUfVli01=k2V&=T^E|A5!`1?NUD)b+qM{kdztEUj7H*>kd%AJ~rqnP@bFKTPV1;Hp4DotwkSeS|R=yaiV95|lzY zxDKj`@OsECKT27sEu-aPvfUb>1zP}Gw?UtVac>8Qw~f7BXufx8`&W?w|I0W;z(Ef# z3zmZD(07Y&{muTb&I8TU@f)__>@_-u1v(wFgvn;|?CH!=42gw=yc1%g)Nzd3ke?%T6Y!~7YAx;0=~LB^t8ri)2MAwEuy5v?J6lDuO@dw z#jTH!2C8o@K}+DThWu#cD{=>#g#G~?{eC0`G0enWLKTh6C z{`=rT2(apU{BhKY@(vz^)U4Y$@!5Mjh|?ntB@4Slq3(qxc)Mfo>^M3i<3kZWAzwDD z$Y3ZeG#H8$N`XKwhyGyK>%>xx1|*MGYy9#~&dv3_9k z`pQhWKT*~n3iX#I`om-)bahlHpsVAPrjmMxqdsmj#qoEE35p0j1w{m=0yYPzI^y#I zk9R`V_-i2&{~l=Sm~F`;vSP(3Xs4>&fp$*mQy9(QsRNRO>;r?8_bzXhf#AElRu07Ln-!+-1@A>j|`f_^5Q+NF9 z<)aUg-H7Pid-ufK?yb1~j+WaFI*0Dr`o-&v<@5=^zx7`)A3l?OpGKw)qtpJ8*Y7?8z06dI z2yS23F?VYjeFgoRTgn%p&lMwo6%x0+xcG~`XApmF)3VhaTs2Q%;IDXi*KAkI(mAPy z8<$y^-aEN-`?ijS-yZ4PwWW3GS2wJGZO+Jj0zH4_qr2u5v@V=o+j?TEbK0ZBRdc4y ztX%Njk)GY#GfQCF%X9pTzP$PY^1F47D_6B}b^PAO#>bnQ$WM40ZgTz=ZRWbwYwCCZ zrQb8{hnu0{15MV{^zwuWZ#Fd{?Y!?#@U(oGSGHhHyS-uEnwlLi58n!hH#S15--kfz zQve)dsAUv~WZO=l0y9BcTMd1f4?@BD$8w&|c?l9W-p~03lm6eFvgv$K?*n7|LD2}XQRMnGnp3&qyBWXr6(nu4f8ReVGgUIXxjHwkA!7=-|zYEeZKqSKKBJphw7^8 z>h4qLoH`LCw{RcIeq$WI0--TA0mj%J`db&t-Q+)Sx(V3Kxfd^?IY@TXO%QHy&!rb( zT}ABPO_Jo@FTM!L$;jQiAx>!fi(oqb@v2oHlW!e=fPC}g6)XRS+{aIo&wRIW<98@_ z`ZS8+Bl4NJsJ2?<7KtDg#3LX}v5YM2$N5DW=4vQ{3)NSPt7@x6bfM5Qlc_3DLf<92 zp?sz)Uj?^(TsI%BG^V8);m2uQMjk>{54n-PD%!XVO(h?G$W4AyWh@*ygly!yJ;iW9 zzK85RGz-2(|Hv_gWwwPdi9A9fT~t+j+S|}u8{Kv>!j`Zt(dG%!=tP2OL@3smm)9GO z_L4{O)6eI^1_J+$P1sY_HFtB z6`pw<75=bk^AF^cXU>pMe!uzKnrab4C`=cTANJ#vrTsMfZ2UgrC#yv1LLoy`O*i8g zkuDO^MrJVzmg-PGqAQ~+d`Lb;jwqvOI`tmlUBpLF=h}v7EwZ>CLKWnl_?Y~_^$_{! zMr1wwOG(ib$k6mYbub;@WH#{=+!5}3NkkLDEvjmhi<+iaXK%e&flw{Hh?bTpycGD$ z>x)MF@?w2aSnQ0c-D#li{S#V5c!|H$4%6;PN@~JL4TvUYPN+3vLiei38iV!!V+RT= z05kCLaGU>w2ekhgH?W=m>2v+h`yLNw|6hd@1atEU`>lT;+kUso`rv~&^0LCBO18pA zW$8Dok}b+>n_1>$IK>wf)?~a!AYGBYP+42O{Egf zs$}!8-=!Z$hbtyqpb31J-#-f@zMVY!-FLfKdw!ntvqdGVhd!W(|7Y8J8ALpXyr2K~ zwOL01g~m>s5h;9$uUsOu9Ge5pa|~k9lt3K_y~P!210v zz`HDnz)lHIU^ykp2L6@u7Xu}$1eWJa;GY#N2Z8xozt|4^Gs^+2b3z~|RVCKwn57L; zg%Hr(0^)6a8HoK@smg(uc1|qWf&0Nl?4O1YsouvclE<&}6EYaw2v@aRyugctr!90F zv;+Un7@l)x&SxTFeX8qt*Yy)xuJ1hNN~;%%KArPeJn-cqNwSO!+@ruy;i65*9GplX zj!Z2wmkQ{*6qAuJjZWk$q-LI6Q!q$w-Err{<;y3w zE?d?btga5?K-G}rM?z;x1ajoz3y(PW3D9AbOtz^sXq&(Yl9||ye3}x`su>K?fS}Ks zCXBo^@|B~+X0w|hP?FpVvob@%5X^1`HFI@Qo|EDSZOkQR&>XVygnJ*#8anooB>akE!EDP zS#5Ml6l#mK$QJGn({~*@v~y`I9(?Q4x|%?+rUss%L?M*qWMt$>goK>+G2NHaN;$DHj8szfADtrJR zrq!9{gL5lH^_R%Os1`FiP>Refvx53bU{C!ZXqSIfKnoluh=5`J1#;Xh1X_HVaW!azyc842rywZ7;ddZp;V=kda7{fzDjCS zsZv#{j(Tu0x;{R6A1!NSSqtsm5h?8({JZ+hawH*6Zt+04Sbu0@s?e;}CF^A7>0O72 zH$1r6wnRU;Gu)M`it5Wl<`O57Wck%+68%75@3xFAqh;-jPd?N&-7ME8>vSeT+QeW$ ztqpt7>14?~N%FI=XWLN|?utBS&n{A;CZ&=*rrh}~b(Qwea6MU1epMgm)YCskZ5KBO zo2mn9n@B9ojP=)F`8rYUzv+YOg807vB6-hMV?FWjdZdKjhTqv--yh2qibXbcpt>oT zq)fU3pWXwXUId@s492B?P_tAeHG#be&Og2mgn0WwjQ0RU$$d8IC2INpWda=Vhcb@> zf!*wbk7G3}ZmPPVw$5eJe^uJ&8_kEbD-bUM76j)34oBscJuiy0G zA8r4iT3x$Ffi#SHae2UB&We=#{pCMDhAx^+B=@YzbQb-Dk5DxcFqz^nnov8j84eZ; zWU~0C|Mhir6A?5T?DuI&3`hvOUk1og4X(-d$2wU^OC z=mWgY%UH7Vyu9+CzbVhFH$HFt%!ryzXH50Rv&Q&YIDkL$D3nVD&kLlqFMfaN5vV5> zoE1pPN3K==45~AioBnJvUH=B3vr2u&If+P|2*rQ2(ZCNm-6A>cJ61?8E!#Sjv$hMjB1v>WQgp9wK+h#2Io}5Fz z3(@WEXwUbw%_B=b`}yb3Xq)2C*OOCdp^@|CW%93(t${@gj-305+(v%CZy#vph6zvo zcU!Nb*4JJ`tyj0kkDa>v?o;t&AV!RT=|iVJI)DBnbZW)t8dYRbT{v3nat1C+YsA*TAd$Cy=5Dkp`XxoFlqkqkV0WWc36u%Q(U4|aHPqi5iO1EU2s3@!qV3KV0s zjlBu6jwbOaR2+=4TmQyiZ@e~TJXL47{lNh@}!XTyW^@QHutCZe2`FWJpAM5^3`!@z*6H9r3L$PeOP=Ex(jd z#4jl9G_hX7=c_d`otGhCiY*qqQYsS(X%4N+Y*uh2Otl(<-WkMvqyApQx9;fXoRi@J z_^AXkPM#RCL@eH10Y}ZXsM8_+t1qS4m3F_+sC2XVa=TjQxyx!&7=&)24UFQYT;UB$ znoufH#oZuH1QBDvDb;GFGOd=h{;uFP^onJ5khVPpDJZinYeFLngGSWDgJ&#&XXJ4m zk^(V@{3{RM!ngw3jLu+6R%ghW74MgbHMH&8JSmF6V~;G*#Ux}F9MQJwW6~Xj=G*w942?3K;0l=nSXb(lMhSz@O|!|wV!lAc1hKx!&gE+4GWDX(p_(vSV@KK) zGK#lm4%5w32s8p#DVt{zF~vH*MO_n9_Zp&Rqoan$&MI(4wNn%-c_CBHG#S}l0NI zz%-{6#vtS;Xk(f>DGtzsgBaj^LKGYta1^)%gaNS!)h?wZz%yzTE)$o7e#-im1;*_V z+zD_8s1>p1;8*1@D^UTUol;T*hzBW%PiT!H7q|Q?^82B1Tc&JQpS-D#*Eyx@A8)<= zRoCP$UR{%X#!OjeTX=~4;UB~M(_%5XGu3UANAuG54>$LQt8`*6SFEiL_caZyT{Ad) z&Dz1-I+?T<@<>Xg^--<7TN<3cq)}Z~D3N3s(<>~I)t)wAmPV3hbxtddwb)YwDz{sc zUuY~yvp~kNN{gY4JX-bep;I6w&f6ZS&^0JMW|1AU12Cad?bg=*a%zz@mAbT3?p7W8R{`@c#O~rku44ogl7WxHhM`msSwWIGhm(z$Vxr z673YhKiJ&NKrHeyVzTI^PRK{7102bR z@2dcuUIAaYjSAQ`1R(=(^oz%mo`Ww9-t>@>9X>Yr1mLd>!2xVRJI-h32a&k~=QM+l z>j(L{LP&Gsaxe^~${@5a%?}6*f5qSJ;fp&Z3_FN;w3d7(fbCN*L2gsECz- z#3UH6!IuWWz=12l5)MPgZ(D%o`5JO#T{ui$SV8_5x#X=M-aPs0Gib)o`;d7<{I%kv zr)~?sl>Ja(_rZO+x%&_94m_Owa`?7~juyx6JaJo&GqCT@gVE^0JNE^gIk%m-Gkfm& znuhZOZR-yY`!wmtzS^+y??=-$nGb)vW9jEjFL@!g_WtY1 zGu~GkKVLfcwW=f4~lTwhQA zlxEr(Kk+)c<<|C{xr!!S))i=K5jK!RPxk0V{m$}dzapqdBxz32U(7YKIqbikLp-PgW zNdQGJ0u-eK9~y;aNHxGwFIWuh1gqzJLC5$Eq*DEB(ichp1*w1-08u6?F@{w^QBXQ? z3;4T%LJ@RE4)8|-$1+eSQtMJ+8~_@eaH{&lo+@Sp9iWqPg2^B7PiNB0)T>t)wojCxHEzUPXl#mqkA|X9X?|bGNUDr z?cO%K>pt=bIYM3_+utp&PG2;)lF6v$mJTdPZ>ZV~cH%4I@02c$`3#z#{=TF#eEMGy zx~BzMbZ?W($;ZFRuk=5Rb6i%$#b&cgRh^c5$?djTOAQ961AQ^?`2*hK)Ey7c_#`#e zW-m9JQ=FfLf~l#M4o9}XdFf{lq?W3CHy>(9?|S6A)MD$}TN{(-JQ6JS+}uMR&6?NI zR9J6xglkj!{=B{Nsrkh({fuNgtVI@nPX0P_2`Ze`_%*sXkxY4D3rUO%2)+43z?Bk%QwRpbxvpB>ru zZ&ZBdF;w!?wrxL=k3V*XJp1o$^{YNc&in2~DIcv`^%41(`|czE^6{##tLr~UdQ|qH zZa?`&{Jn=7s_VXhSf|lDbX&-O$=w)<0hT*}@r5#Zvr7CJnw` zNUmX*FRV!`>C0stnD&jHVMFbv?pmUq>y+QW8oy25!jmlP? z*Ik{Xn(@_=)kr+Iv+>2Zro2u5GGvr1A%>aQ$QOA zEzgl3-cmRaE9}di)fDa?PWPnG&u!i{@hD1vdKYppL|;!OzuzXjbRqedJwxxDiV5aSLHupokzgS*_$PH* zi5izI$= zbYktEPIx3EBPHLJ$Bd*#wT9;GKoyI}lh~RXQXnGMHo)nJ01B~Lz#4E`y$eD(ya0hw zK1})+hi||fAQgHYtg--k;|~l-lG?(CLX*@M$4tO5mw=;D=!3FRO085tS{w|%l$bG) zsCcb9lry0M)h{4k3S^xL1`jfwByNmZ1!xQjRw*K)qR0l^4RfW~xdmVlxCDSf6>t&I zYHT>v^>GXXmXM7u%3#4q%@v9rf%}4;0X21~EuLx#)^lv!)GZCf_*Efe!~A!S_NMAh z?wo1S%!w|K&l1}g$jdLD8q7==@`hiJA9v$X>#qIzA-RIy|4?MB0t z2NpPc54EXvw0%WA3SC9AH0aVqd3;SSd4eq!GxS3~lV2#C-McH+mZGd}4OdL(WO7P_ z6Lenj1oDd3k*3$#)9x^N?Do`1n5Zq+sq+`qhFeya=;N;}zQ0o>@dm1k%^_>r;Uax* zz*ldMG^VB)-JLf*_RrDA#A}&Tub-Z|#$%Z3&g;!}q;Q#5ojow6FgVR-sB#bA+aB*q zRu%|gWTrxoG1!n+J(XPDvaf6L!P>Po!LIN?>#QAvYiM*jZO!10S*-)%u3*jD+JlR` z_O*CtPQcm9C(QH`lI(erIT!XTtAr~~^<;Lt9+_I5)(|v$3Qew{R8XKyMuWzVz6|$l zTjqd|ZIN+fGjf$)2YRwJ$VqYMN?bl1IpjkwTpu^hAb?kUv*)yu{YB>y|n8 zStkxR@RSy3T8>U1ad8Twof%n^^X$2;h3GOTtV!mP^g=XZD~?T7fRSt0(>LT0wuUXe zw_cy!Iwz<8&0W*}lIKHZndIbDh(}C*U_kkL@>1ra&E;F3D30|PZrHu`t{R46-o2fu zZt1f*mGFcB`Ao39-IkKQk)PyFZ zrD!eMi1wj_=uUJBqR+g9KA_lB8!I1G?e(m?S?J&w4MTyQ} zA_*NP-_Q`>``1<|f$xJ3K&WGxs#akg$4Hho#po61=w9Zqfv_?0vLU|!UK~(;F@e!w;Ew^r z8a)(SEfyABgx@?I@>F*25VimET>h%GGe|{9)W#;99zf|Zr4Memab$s_g_vvs0fgIm3$E`(M}N1M&uIwCWdy|z-Z z51uMV>~9ClivR4OK>ZqQgvCAFD! zg2yFEnR5Hl&b>n|d2SJbit>ms%S29(0v^cA!RU9kylP$;>me*fr6VeoJ)($f07ZLk*)G9$)o2l3d#fPkK92{B|rD| zW(z_C{+A&xGyG@oBi<>b#-a z$5cvI-4aWsZi3fR5R}%+3e#sgO9Mu8u+%mUOi;xYBBLiS#hC53sQ7exC7sS(cYZ#Z z<6bdCcpZOX_k#DGy>qc$uk18?s=AJUS;E20^K4phDL)-0KP%AHdQ zX0E5%(I2wz=;tKQa@E<$_ zfC<1{6)U$Plm->^1}Y|4QA|83k~&`a&3vGN{O${|{Jy=Bc^WcqZ2#*DHal6(6S5e| zVr3dpN7rejIyQ^XOIC8(7R$%vTJn?I8FjmMA?DtP7uNHRJzPKX_20;YufB?=fBZKz z?bTPwgMZsXo*N!MAK$W>JU={qj@(kev3~S#LqpG;IX#o+%_EOmAPR5(lZ<|DbopSt z^r2O1uc}}u*D)!q^(s9T&aCy7(v+t3DUsBPx$20?-((5*1&P z)9p65EKeenN$?LAp^rf_kU8+7Y#;*0nND$nnjH`)@g(J-`wt`r6LP!+OmOFkZ!tzT z69QY{aZtiQade@;qHs2RPfQSi4qaos$G?3b1pm1l6Iv`rhFd1q!|*+6m;^%$+ysBi z1khlK;V6V)-U)7~Ojw}%%nsP?{%qQgNJB#;+}Id4xZMV$%N3v0 za=okZ#TW1E3uz~(dVKX#=j4Nro+wlwnnXO+eXwiz!OoOgYjIuIf$pm1m3cv3j^M+t#04>YF;RDVRGygN*ruX@zBGUS_s`O2N#3-aPMx?%c+^ zz@mL)L!iy?&J;O{BDCZwOP5V99L#s8TSMLTvzs*25J+CpPYnUU@uUOF@1?z?=s^I&(!?g>(P#=e&BgPo<7 z%d1Kj*#+FZIhF9ZgtY$7dCfifZ5=nYt$GS9GVD`=1@mh;#k>V&4PoL!+YMb6tKFW! zjT7cRGC26i+{V3rk9%oJ*9~nWP5znTv(aZ#E6utbHTkYiGs%BosH|Hkwen ztsRu@XMney4Ku)(6a&#_J6P!42+5hwB%Ooc(4SI~LLss)aL++hg!<4BT7|9yLkj~Dl<;T4*Tw@pWvreZ#GnjV%Q=2lQ5+IAfw0db22_j# zf$d8mFziPO(<(6ss1SwY`=u=06Raf#^^j=i*GV%D0a9xXm@ohNDoiH01}knnk0_>& z;@M!Nh73Z#E}Sp#S!D%j@tS|JJvN+ z!~B=NV97w;hQ>P~@bkS7iCbdHsvNJXyIxydB{sKvczSNY#Z)q11J~w^lT+`W+B+~( zp>^n#8i=0xl_!J(<*DJS&9~fFU*QZ#_iiCthi=YtIV93FeRTh(iF$pewi1?>#+soe z>3XByT4>5%KmCQNS&Pa0v&-8e@XKg?zQfS`aCPtA;Eo!ju_u3Jyu5Zzbgs_3~o|JRgjG)>^(iTX>T{1rHprG zLefE>A=&z4eGY>|cchrTRRe`*2CLS4V)iMa2{+`#XXopZMV9ip%d-q7l~CrOgSq}E zvWQNvPgYvGJ8~@ssV+DvFrV1&vZwexka+c#bVrdbrMUczqewKZY66E1DuW<$a`Sgke%!!lq2x;39TkZf9JdiYXCU>V7QVu);z2%5Hp@r5*`(Dw%^F<_`Oj2~Io%0DvN=oA8#D#bU!TeQpUJ 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 X7YmJ9-2KJIjcaG?3x{_bVzvJVEexGy literal 0 HcmV?d00001 diff --git a/lib/Components/PaymentEnchainedDialog.dart b/lib/Components/PaymentEnchainedDialog.dart deleted file mode 100644 index 739a3e7..0000000 --- a/lib/Components/PaymentEnchainedDialog.dart +++ /dev/null @@ -1,338 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:get/get_core/src/get_main.dart'; -import 'package:youmazgestion/Components/DiscountDialog.dart'; -import 'package:youmazgestion/Components/paymentType.dart'; -import 'package:youmazgestion/Models/Client.dart'; -import 'package:youmazgestion/Models/Remise.dart'; - -// Dialogue de paiement amélioré avec support des remises -class PaymentMethodEnhancedDialog extends StatefulWidget { - final Commande commande; - - const PaymentMethodEnhancedDialog({super.key, required this.commande}); - - @override - _PaymentMethodEnhancedDialogState createState() => _PaymentMethodEnhancedDialogState(); -} - -class _PaymentMethodEnhancedDialogState extends State { - PaymentType _selectedPayment = PaymentType.cash; - final _amountController = TextEditingController(); - Remise? _appliedRemise; - - @override - void initState() { - super.initState(); - _amountController.text = widget.commande.montantTotal.toStringAsFixed(2); - } - - @override - void dispose() { - _amountController.dispose(); - super.dispose(); - } - - void _showDiscountDialog() { - showDialog( - context: context, - builder: (context) => DiscountDialog( - onDiscountApplied: (remise) { - setState(() { - _appliedRemise = remise; - final montantFinal = widget.commande.montantTotal - remise.calculerRemise(widget.commande.montantTotal); - _amountController.text = montantFinal.toStringAsFixed(2); - }); - }, - ), - ); - } - - void _removeDiscount() { - setState(() { - _appliedRemise = null; - _amountController.text = widget.commande.montantTotal.toStringAsFixed(2); - }); - } - - void _validatePayment() { - final montantFinal = _appliedRemise != null - ? widget.commande.montantTotal - _appliedRemise!.calculerRemise(widget.commande.montantTotal) - : widget.commande.montantTotal; - - if (_selectedPayment == PaymentType.cash) { - final amountGiven = double.tryParse(_amountController.text) ?? 0; - if (amountGiven < montantFinal) { - Get.snackbar( - 'Erreur', - 'Le montant donné est insuffisant', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - return; - } - } - - Navigator.pop(context, PaymentMethodEnhanced( - type: _selectedPayment, - amountGiven: _selectedPayment == PaymentType.cash - ? double.parse(_amountController.text) - : montantFinal, - remise: _appliedRemise, - )); - } - - @override - Widget build(BuildContext context) { - final montantOriginal = widget.commande.montantTotal; - final montantFinal = _appliedRemise != null - ? montantOriginal - _appliedRemise!.calculerRemise(montantOriginal) - : montantOriginal; - final amount = double.tryParse(_amountController.text) ?? 0; - final change = amount - montantFinal; - - return AlertDialog( - title: const Text('Méthode de paiement', style: TextStyle(fontWeight: FontWeight.bold)), - content: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - // Résumé des montants - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(8), - border: Border.all(color: Colors.blue.shade200), - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text('Montant original:'), - Text('${montantOriginal.toStringAsFixed(0)} MGA'), - ], - ), - if (_appliedRemise != null) ...[ - const SizedBox(height: 4), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text('Remise (${_appliedRemise!.libelle}):'), - Text( - '- ${_appliedRemise!.calculerRemise(montantOriginal).toStringAsFixed(0)} MGA', - style: const TextStyle(color: Colors.red), - ), - ], - ), - const Divider(), - ], - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text('Total à payer:', style: TextStyle(fontWeight: FontWeight.bold)), - Text('${montantFinal.toStringAsFixed(0)} MGA', - style: const TextStyle(fontWeight: FontWeight.bold)), - ], - ), - ], - ), - ), - const SizedBox(height: 16), - - // Bouton remise - Row( - children: [ - Expanded( - child: OutlinedButton.icon( - onPressed: _appliedRemise == null ? _showDiscountDialog : _removeDiscount, - icon: Icon(_appliedRemise == null ? Icons.local_offer : Icons.close), - label: Text(_appliedRemise == null ? 'Ajouter remise' : 'Supprimer remise'), - style: OutlinedButton.styleFrom( - foregroundColor: _appliedRemise == null ? Colors.orange : Colors.red, - side: BorderSide( - color: _appliedRemise == null ? Colors.orange : Colors.red, - ), - ), - ), - ), - ], - ), - const SizedBox(height: 16), - - // Section Paiement mobile - const Align( - alignment: Alignment.centerLeft, - child: Text('Mobile Money', style: TextStyle(fontWeight: FontWeight.w500)), - ), - const SizedBox(height: 8), - Row( - children: [ - Expanded( - child: _buildMobileMoneyTile( - title: 'Mvola', - imagePath: 'assets/mvola.jpg', - value: PaymentType.mvola, - ), - ), - const SizedBox(width: 8), - Expanded( - child: _buildMobileMoneyTile( - title: 'Orange Money', - imagePath: 'assets/Orange_money.png', - value: PaymentType.orange, - ), - ), - const SizedBox(width: 8), - Expanded( - child: _buildMobileMoneyTile( - title: 'Airtel Money', - imagePath: 'assets/airtel_money.png', - value: PaymentType.airtel, - ), - ), - ], - ), - const SizedBox(height: 16), - - // Section Carte bancaire - const Align( - alignment: Alignment.centerLeft, - child: Text('Carte Bancaire', style: TextStyle(fontWeight: FontWeight.w500)), - ), - const SizedBox(height: 8), - _buildPaymentMethodTile( - title: 'Carte bancaire', - icon: Icons.credit_card, - value: PaymentType.card, - ), - const SizedBox(height: 16), - - // Section Paiement en liquide - const Align( - alignment: Alignment.centerLeft, - child: Text('Espèces', style: TextStyle(fontWeight: FontWeight.w500)), - ), - const SizedBox(height: 8), - _buildPaymentMethodTile( - title: 'Paiement en liquide', - icon: Icons.money, - value: PaymentType.cash, - ), - if (_selectedPayment == PaymentType.cash) ...[ - const SizedBox(height: 12), - TextField( - controller: _amountController, - decoration: const InputDecoration( - labelText: 'Montant donné', - prefixText: 'MGA ', - border: OutlineInputBorder(), - ), - keyboardType: TextInputType.numberWithOptions(decimal: true), - onChanged: (value) => setState(() {}), - ), - const SizedBox(height: 8), - Text( - 'Monnaie à rendre: ${change.toStringAsFixed(2)} MGA', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: change >= 0 ? Colors.green : Colors.red, - ), - ), - ], - ], - ), - ), - actions: [ - TextButton( - onPressed: () => Navigator.pop(context), - child: const Text('Annuler', style: TextStyle(color: Colors.grey)), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue.shade800, - foregroundColor: Colors.white, - ), - onPressed: _validatePayment, - child: const Text('Confirmer'), - ), - ], - ); - } - - Widget _buildMobileMoneyTile({ - required String title, - required String imagePath, - required PaymentType value, - }) { - return Card( - elevation: 2, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - side: BorderSide( - color: _selectedPayment == value ? Colors.blue : Colors.grey.withOpacity(0.2), - width: 2, - ), - ), - child: InkWell( - borderRadius: BorderRadius.circular(8), - onTap: () => setState(() => _selectedPayment = value), - child: Padding( - padding: const EdgeInsets.all(12), - child: Column( - children: [ - Image.asset( - imagePath, - height: 30, - width: 30, - fit: BoxFit.contain, - errorBuilder: (context, error, stackTrace) => - const Icon(Icons.mobile_friendly, size: 30), - ), - const SizedBox(height: 8), - Text( - title, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 12), - ), - ], - ), - ), - ), - ); - } - - Widget _buildPaymentMethodTile({ - required String title, - required IconData icon, - required PaymentType value, - }) { - return Card( - elevation: 2, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - side: BorderSide( - color: _selectedPayment == value ? Colors.blue : Colors.grey.withOpacity(0.2), - width: 2, - ), - ), - child: InkWell( - borderRadius: BorderRadius.circular(8), - onTap: () => setState(() => _selectedPayment = value), - child: Padding( - padding: const EdgeInsets.all(12), - child: Row( - children: [ - Icon(icon, size: 24), - const SizedBox(width: 12), - Text(title), - ], - ), - ), - ), - ); - } -} \ No newline at end of file diff --git a/lib/Components/commandManagementComponents/CommandDetails.dart b/lib/Components/commandManagementComponents/CommandDetails.dart index 62ab322..6633fd2 100644 --- a/lib/Components/commandManagementComponents/CommandDetails.dart +++ b/lib/Components/commandManagementComponents/CommandDetails.dart @@ -1,3 +1,5 @@ +// Remplacez complètement votre fichier CommandeDetails par celui-ci : + import 'package:flutter/material.dart'; import 'package:youmazgestion/Models/client.dart'; import 'package:youmazgestion/Services/stock_managementDatabase.dart'; @@ -7,9 +9,7 @@ class CommandeDetails extends StatelessWidget { const CommandeDetails({required this.commande}); - - - Widget _buildTableHeader(String text) { + Widget _buildTableHeader(String text, {bool isAmount = false}) { return Padding( padding: const EdgeInsets.all(8.0), child: Text( @@ -18,23 +18,122 @@ class CommandeDetails extends StatelessWidget { fontWeight: FontWeight.bold, fontSize: 14, ), - textAlign: TextAlign.center, + textAlign: isAmount ? TextAlign.right : TextAlign.center, ), ); } - Widget _buildTableCell(String text) { + Widget _buildTableCell(String text, {bool isAmount = false, Color? textColor}) { return Padding( padding: const EdgeInsets.all(8.0), child: Text( text, - style: const TextStyle(fontSize: 13), - textAlign: TextAlign.center, + style: TextStyle( + fontSize: 13, + color: textColor, + ), + textAlign: isAmount ? TextAlign.right : TextAlign.center, ), ); } -@override + Widget _buildPriceColumn(DetailCommande detail) { + if (detail.aRemise) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + '${detail.prixUnitaire.toStringAsFixed(2)}', + style: const TextStyle( + fontSize: 11, + decoration: TextDecoration.lineThrough, + color: Colors.grey, + ), + ), + const SizedBox(height: 2), + Text( + '${(detail.prixFinal / detail.quantite).toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.bold, + color: Colors.orange.shade700, + ), + ), + ], + ), + ); + } else { + return _buildTableCell('${detail.prixUnitaire.toStringAsFixed(2)} MGA', isAmount: true); + } + } + + Widget _buildRemiseColumn(DetailCommande detail) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: detail.aRemise + ? Column( + children: [ + Text( + detail.remiseDescription, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: Colors.orange.shade700, + ), + textAlign: TextAlign.center, + ), + Text( + '-${detail.montantRemise.toStringAsFixed(0)} MGA', + style: TextStyle( + fontSize: 10, + color: Colors.teal.shade700, + ), + textAlign: TextAlign.center, + ), + ], + ) + : const Text( + '-', + style: TextStyle(fontSize: 13, color: Colors.grey), + textAlign: TextAlign.center, + ), + ); + } + + Widget _buildTotalColumn(DetailCommande detail) { + if (detail.aRemise && detail.sousTotal != detail.prixFinal) { + return Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + '${detail.sousTotal.toStringAsFixed(2)}', + style: const TextStyle( + fontSize: 11, + decoration: TextDecoration.lineThrough, + color: Colors.grey, + ), + ), + const SizedBox(height: 2), + Text( + '${detail.prixFinal.toStringAsFixed(2)} MGA', + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ); + } else { + return _buildTableCell('${detail.prixFinal.toStringAsFixed(2)} MGA', isAmount: true); + } + } + + @override Widget build(BuildContext context) { return FutureBuilder>( future: AppDatabase.instance.getDetailsCommande(commande.id!), @@ -48,6 +147,19 @@ class CommandeDetails extends StatelessWidget { } final details = snapshot.data!; + + // Calculer les totaux + double sousTotal = 0; + double totalRemises = 0; + double totalFinal = 0; + bool hasRemises = false; + + for (final detail in details) { + sousTotal += detail.sousTotal; + totalRemises += detail.montantRemise; + totalFinal += detail.prixFinal; + if (detail.aRemise) hasRemises = true; + } return Column( crossAxisAlignment: CrossAxisAlignment.stretch, @@ -55,16 +167,46 @@ class CommandeDetails extends StatelessWidget { Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( - color: Colors.blue.shade50, + color: hasRemises ? Colors.orange.shade50 : Colors.blue.shade50, borderRadius: BorderRadius.circular(8), + border: hasRemises + ? Border.all(color: Colors.orange.shade200) + : null, ), - child: const Text( - 'Détails de la commande', - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 16, - color: Colors.black87, - ), + child: Row( + children: [ + Icon( + hasRemises ? Icons.discount : Icons.receipt_long, + color: hasRemises ? Colors.orange.shade700 : Colors.blue.shade700, + ), + const SizedBox(width: 8), + Text( + hasRemises ? 'Détails de la commande (avec remises)' : 'Détails de la commande', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: hasRemises ? Colors.orange.shade800 : Colors.black87, + ), + ), + if (hasRemises) ...[ + const Spacer(), + Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: Colors.orange.shade100, + borderRadius: BorderRadius.circular(12), + ), + child: Text( + 'Économies: ${totalRemises.toStringAsFixed(0)} MGA', + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: Colors.orange.shade700, + ), + ), + ), + ], + ], ), ), const SizedBox(height: 12), @@ -82,26 +224,72 @@ class CommandeDetails extends StatelessWidget { children: [ _buildTableHeader('Produit'), _buildTableHeader('Qté'), - _buildTableHeader('Prix unit.'), - _buildTableHeader('Total'), + _buildTableHeader('Prix unit.', isAmount: true), + if (hasRemises) _buildTableHeader('Remise'), + _buildTableHeader('Total', isAmount: true), ], ), ...details.map((detail) => TableRow( + decoration: detail.aRemise + ? BoxDecoration( + color: const Color.fromARGB(255, 243, 191, 114), + border: Border( + left: BorderSide( + color: Colors.orange.shade300, + width: 3, + ), + ), + ) + : null, children: [ - _buildTableCell( - detail.estCadeau == true - ? '${detail.produitNom ?? 'Produit inconnu'} (CADEAU)' - : detail.produitNom ?? 'Produit inconnu' + Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + detail.produitNom ?? 'Produit inconnu', + style: const TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + ), + ), + if (detail.aRemise) ...[ + const SizedBox(height: 2), + Row( + children: [ + Icon( + Icons.local_offer, + size: 12, + color: Colors.teal.shade700, + ), + const SizedBox(width: 4), + Text( + 'Avec remise', + style: TextStyle( + fontSize: 10, + color: Colors.teal.shade700, + fontStyle: FontStyle.italic, + ), + ), + ], + ), + ], + ], + ), ), _buildTableCell('${detail.quantite}'), - _buildTableCell(detail.estCadeau == true ? 'OFFERT' : '${detail.prixUnitaire.toStringAsFixed(2)} MGA'), - _buildTableCell(detail.estCadeau == true ? 'OFFERT' : '${detail.sousTotal.toStringAsFixed(2)} MGA'), + _buildPriceColumn(detail), + if (hasRemises) _buildRemiseColumn(detail), + _buildTotalColumn(detail), ], )), ], ), ), const SizedBox(height: 12), + + // Section des totaux Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( @@ -111,39 +299,63 @@ class CommandeDetails extends StatelessWidget { ), child: Column( children: [ - if (commande.montantApresRemise != null) ...[ + // Sous-total si il y a des remises + if (hasRemises) ...[ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ const Text( 'Sous-total:', - style: TextStyle(fontSize: 14), + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + ), ), Text( - '${commande.montantTotal.toStringAsFixed(2)} MGA', - style: const TextStyle(fontSize: 14), + '${sousTotal.toStringAsFixed(2)} MGA', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + ), ), ], ), - const SizedBox(height: 5), + const SizedBox(height: 8), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - const Text( - 'Remise:', - style: TextStyle(fontSize: 14), + Row( + children: [ + Icon( + Icons.discount, + size: 16, + color: Colors.orange.shade700, + ), + const SizedBox(width: 4), + Text( + 'Remises totales:', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Colors.orange.shade700, + ), + ), + ], ), Text( - '-${(commande.montantTotal - commande.montantApresRemise!).toStringAsFixed(2)} MGA', - style: const TextStyle( + '-${totalRemises.toStringAsFixed(2)} MGA', + style: TextStyle( fontSize: 14, - color: Colors.red, + fontWeight: FontWeight.bold, + color: Colors.orange.shade700, ), ), ], ), - const Divider(), + const Divider(height: 16), ], + + // Total final Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -155,7 +367,7 @@ class CommandeDetails extends StatelessWidget { ), ), Text( - '${(commande.montantApresRemise ?? commande.montantTotal).toStringAsFixed(2)} MGA', + '${commande.montantTotal.toStringAsFixed(2)} MGA', style: TextStyle( fontWeight: FontWeight.bold, fontSize: 18, diff --git a/lib/Components/commandManagementComponents/CommandeActions.dart b/lib/Components/commandManagementComponents/CommandeActions.dart index 363e724..04241c1 100644 --- a/lib/Components/commandManagementComponents/CommandeActions.dart +++ b/lib/Components/commandManagementComponents/CommandeActions.dart @@ -8,15 +8,13 @@ class CommandeActions extends StatelessWidget { final Commande commande; final Function(int, StatutCommande) onStatutChanged; final Function(Commande) onPaymentSelected; - final Function(Commande) onDiscountSelected; - final Function(Commande) onGiftSelected; + const CommandeActions({ required this.commande, required this.onStatutChanged, required this.onPaymentSelected, - required this.onDiscountSelected, - required this.onGiftSelected, + }); @@ -27,18 +25,7 @@ class CommandeActions extends StatelessWidget { switch (commande.statut) { case StatutCommande.enAttente: buttons.addAll([ - _buildActionButton( - label: 'Remise', - icon: Icons.percent, - color: Colors.orange, - onPressed: () => onDiscountSelected(commande), - ), - _buildActionButton( - label: 'Cadeau', - icon: Icons.card_giftcard, - color: Colors.purple, - onPressed: () => onGiftSelected(commande), - ), + _buildActionButton( label: 'Confirmer', icon: Icons.check_circle, diff --git a/lib/Components/commandManagementComponents/PaswordRequired.dart b/lib/Components/commandManagementComponents/PaswordRequired.dart new file mode 100644 index 0000000..dec5680 --- /dev/null +++ b/lib/Components/commandManagementComponents/PaswordRequired.dart @@ -0,0 +1,234 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:youmazgestion/Services/stock_managementDatabase.dart'; + +class PasswordVerificationDialog extends StatefulWidget { + final String title; + final String message; + final Function(String) onPasswordVerified; + + const PasswordVerificationDialog({ + Key? key, + required this.title, + required this.message, + required this.onPasswordVerified, + }) : super(key: key); + + @override + _PasswordVerificationDialogState createState() => _PasswordVerificationDialogState(); +} + +class _PasswordVerificationDialogState extends State { + final TextEditingController _passwordController = TextEditingController(); + bool _isPasswordVisible = false; + bool _isLoading = false; + + @override + void dispose() { + _passwordController.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15), + ), + title: Row( + children: [ + Icon( + Icons.security, + color: Colors.blue.shade700, + size: 28, + ), + const SizedBox(width: 10), + Expanded( + child: Text( + widget.title, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.blue.shade700, + ), + ), + ), + ], + ), + content: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.message, + style: const TextStyle( + fontSize: 14, + color: Colors.black87, + ), + ), + const SizedBox(height: 20), + Container( + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.grey.shade300), + ), + child: TextField( + controller: _passwordController, + obscureText: !_isPasswordVisible, + autofocus: true, + decoration: InputDecoration( + labelText: 'Mot de passe', + prefixIcon: Icon( + Icons.lock_outline, + color: Colors.blue.shade600, + ), + suffixIcon: IconButton( + icon: Icon( + _isPasswordVisible ? Icons.visibility_off : Icons.visibility, + color: Colors.grey.shade600, + ), + onPressed: () { + setState(() { + _isPasswordVisible = !_isPasswordVisible; + }); + }, + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(12), + borderSide: BorderSide.none, + ), + filled: true, + fillColor: Colors.white, + contentPadding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 12, + ), + ), + onSubmitted: (value) => _verifyPassword(), + ), + ), + const SizedBox(height: 15), + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.amber.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.amber.shade200), + ), + child: Row( + children: [ + Icon( + Icons.info_outline, + color: Colors.amber.shade700, + size: 20, + ), + const SizedBox(width: 8), + Expanded( + child: Text( + 'Saisissez votre mot de passe pour confirmer cette action', + style: TextStyle( + fontSize: 12, + color: Colors.amber.shade700, + ), + ), + ), + ], + ), + ), + ], + ), + actions: [ + TextButton( + onPressed: _isLoading ? null : () => Navigator.of(context).pop(), + child: Text( + 'Annuler', + style: TextStyle( + color: Colors.grey.shade600, + fontWeight: FontWeight.w500, + ), + ), + ), + ElevatedButton( + onPressed: _isLoading ? null : _verifyPassword, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.blue.shade700, + foregroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + ), + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + ), + child: _isLoading + ? const SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator( + strokeWidth: 2, + valueColor: AlwaysStoppedAnimation(Colors.white), + ), + ) + : const Text('Vérifier'), + ), + ], + ); + } + + void _verifyPassword() async { + final password = _passwordController.text.trim(); + + if (password.isEmpty) { + Get.snackbar( + 'Erreur', + 'Veuillez saisir votre mot de passe', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + duration: const Duration(seconds: 2), + ); + return; + } + + setState(() { + _isLoading = true; + }); + + try { + final database = AppDatabase.instance; + final isValid = await database.verifyCurrentUserPassword(password); + + setState(() { + _isLoading = false; + }); + + if (isValid) { + Navigator.of(context).pop(); + widget.onPasswordVerified(password); + } else { + Get.snackbar( + 'Erreur', + 'Mot de passe incorrect', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + duration: const Duration(seconds: 3), + ); + _passwordController.clear(); + } + } catch (e) { + setState(() { + _isLoading = false; + }); + + Get.snackbar( + 'Erreur', + 'Une erreur est survenue lors de la vérification', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + duration: const Duration(seconds: 3), + ); + print("Erreur vérification mot de passe: $e"); + } + } +} \ No newline at end of file diff --git a/lib/Components/commandManagementComponents/PaymentMethodDialog.dart b/lib/Components/commandManagementComponents/PaymentMethodDialog.dart index b0ea0c5..875ad01 100644 --- a/lib/Components/commandManagementComponents/PaymentMethodDialog.dart +++ b/lib/Components/commandManagementComponents/PaymentMethodDialog.dart @@ -6,7 +6,6 @@ import 'package:youmazgestion/Components/commandManagementComponents/PaymentMeth import 'package:youmazgestion/Components/paymentType.dart'; import 'package:youmazgestion/Models/client.dart'; - class PaymentMethodDialog extends StatefulWidget { final Commande commande; @@ -21,7 +20,7 @@ class _PaymentMethodDialogState extends State { final _amountController = TextEditingController(); void _validatePayment() { - final montantFinal = widget.commande.montantApresRemise ?? widget.commande.montantTotal; + final montantFinal = widget.commande.montantTotal; if (_selectedPayment == PaymentType.cash) { final amountGiven = double.tryParse(_amountController.text) ?? 0; @@ -48,7 +47,7 @@ class _PaymentMethodDialogState extends State { @override void initState() { super.initState(); - final montantFinal = widget.commande.montantApresRemise ?? widget.commande.montantTotal; + final montantFinal = widget.commande.montantTotal; _amountController.text = montantFinal.toStringAsFixed(2); } @@ -61,7 +60,7 @@ class _PaymentMethodDialogState extends State { @override Widget build(BuildContext context) { final amount = double.tryParse(_amountController.text) ?? 0; - final montantFinal = widget.commande.montantApresRemise ?? widget.commande.montantTotal; + final montantFinal = widget.commande.montantTotal; final change = amount - montantFinal; return AlertDialog( @@ -70,7 +69,7 @@ class _PaymentMethodDialogState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - // Affichage du montant à payer + // Affichage du montant à payer (simplifié) Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( @@ -78,34 +77,12 @@ class _PaymentMethodDialogState extends State { borderRadius: BorderRadius.circular(8), border: Border.all(color: Colors.blue.shade200), ), - child: Column( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - if (widget.commande.montantApresRemise != null) ...[ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text('Montant original:'), - Text('${widget.commande.montantTotal.toStringAsFixed(2)} MGA'), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text('Remise:'), - Text('-${(widget.commande.montantTotal - widget.commande.montantApresRemise!).toStringAsFixed(2)} MGA', - style: const TextStyle(color: Colors.red)), - ], - ), - const Divider(), - ], - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text('Montant à payer:', style: TextStyle(fontWeight: FontWeight.bold)), - Text('${montantFinal.toStringAsFixed(2)} MGA', - style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16)), - ], - ), + const Text('Montant à payer:', style: TextStyle(fontWeight: FontWeight.bold)), + Text('${montantFinal.toStringAsFixed(2)} MGA', + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16)), ], ), ), diff --git a/lib/Components/newCommandComponents/CadeauDialog.dart b/lib/Components/newCommandComponents/CadeauDialog.dart new file mode 100644 index 0000000..8c2d2f7 --- /dev/null +++ b/lib/Components/newCommandComponents/CadeauDialog.dart @@ -0,0 +1,411 @@ +// Components/newCommandComponents/CadeauDialog.dart + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:youmazgestion/Models/client.dart'; +import 'package:youmazgestion/Models/produit.dart'; +import 'package:youmazgestion/Services/stock_managementDatabase.dart'; + +class CadeauDialog extends StatefulWidget { + final Product product; + final int quantite; + final DetailCommande? detailExistant; + + const CadeauDialog({ + Key? key, + required this.product, + required this.quantite, + this.detailExistant, + }) : super(key: key); + + @override + _CadeauDialogState createState() => _CadeauDialogState(); +} + +class _CadeauDialogState extends State { + final AppDatabase _database = AppDatabase.instance; + List _produitsDisponibles = []; + Product? _produitCadeauSelectionne; + int _quantiteCadeau = 1; + bool _isLoading = true; + String _searchQuery = ''; + + @override + void initState() { + super.initState(); + _loadProduitsDisponibles(); + } + + Future _loadProduitsDisponibles() async { + try { + final produits = await _database.getProducts(); + setState(() { + _produitsDisponibles = produits.where((p) => + p.id != widget.product.id && // Exclure le produit principal + (p.stock == null || p.stock! > 0) // Seulement les produits en stock + ).toList(); + _isLoading = false; + }); + } catch (e) { + setState(() { + _isLoading = false; + }); + Get.snackbar( + 'Erreur', + 'Impossible de charger les produits: $e', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + ); + } + } + + List get _produitsFiltres { + if (_searchQuery.isEmpty) { + return _produitsDisponibles; + } + return _produitsDisponibles.where((p) => + p.name.toLowerCase().contains(_searchQuery.toLowerCase()) || + (p.reference?.toLowerCase().contains(_searchQuery.toLowerCase()) ?? false) + ).toList(); + } + + @override + Widget build(BuildContext context) { + final isMobile = MediaQuery.of(context).size.width < 600; + + return AlertDialog( + title: Row( + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.green.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Icon(Icons.card_giftcard, color: Colors.green.shade700), + ), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Ajouter un cadeau', + style: TextStyle(fontSize: isMobile ? 16 : 18), + ), + Text( + 'Pour: ${widget.product.name}', + style: TextStyle( + fontSize: isMobile ? 12 : 14, + color: Colors.grey.shade600, + fontWeight: FontWeight.normal, + ), + ), + ], + ), + ), + ], + ), + content: Container( + width: isMobile ? double.maxFinite : 500, + constraints: BoxConstraints( + maxHeight: MediaQuery.of(context).size.height * 0.7, + ), + child: _isLoading + ? const Center(child: CircularProgressIndicator()) + : Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Information sur le produit principal + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.blue.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.blue.shade200), + ), + child: Row( + children: [ + Icon(Icons.shopping_bag, color: Colors.blue.shade700), + const SizedBox(width: 8), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Produit acheté', + style: TextStyle( + fontSize: 12, + color: Colors.blue.shade700, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${widget.quantite}x ${widget.product.name}', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + ), + ), + Text( + 'Prix: ${widget.product.price.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade600, + ), + ), + ], + ), + ), + ], + ), + ), + + const SizedBox(height: 16), + + // Barre de recherche + TextField( + decoration: InputDecoration( + labelText: 'Rechercher un produit cadeau', + prefixIcon: Icon(Icons.search, color: Colors.green.shade600), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + ), + filled: true, + fillColor: Colors.green.shade50, + ), + onChanged: (value) { + setState(() { + _searchQuery = value; + }); + }, + ), + + const SizedBox(height: 16), + + // Liste des produits disponibles + Expanded( + child: _produitsFiltres.isEmpty + ? Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.card_giftcard_outlined, + size: 48, + color: Colors.grey.shade400, + ), + const SizedBox(height: 8), + Text( + 'Aucun produit disponible', + style: TextStyle( + color: Colors.grey.shade600, + fontSize: 14, + ), + ), + ], + ), + ) + : ListView.builder( + itemCount: _produitsFiltres.length, + itemBuilder: (context, index) { + final produit = _produitsFiltres[index]; + final isSelected = _produitCadeauSelectionne?.id == produit.id; + + return Card( + margin: const EdgeInsets.only(bottom: 8), + elevation: isSelected ? 4 : 1, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + side: BorderSide( + color: isSelected + ? Colors.green.shade300 + : Colors.grey.shade200, + width: isSelected ? 2 : 1, + ), + ), + child: ListTile( + contentPadding: const EdgeInsets.all(12), + leading: Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: isSelected + ? Colors.green.shade100 + : Colors.grey.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Icon( + Icons.card_giftcard, + color: isSelected + ? Colors.green.shade700 + : Colors.grey.shade600, + ), + ), + title: Text( + produit.name, + style: TextStyle( + fontWeight: isSelected + ? FontWeight.bold + : FontWeight.normal, + ), + ), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Prix normal: ${produit.price.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade600, + decoration: TextDecoration.lineThrough, + ), + ), + Row( + children: [ + Icon( + Icons.card_giftcard, + size: 14, + color: Colors.green.shade600, + ), + const SizedBox(width: 4), + Text( + 'GRATUIT', + style: TextStyle( + fontSize: 12, + color: Colors.green.shade700, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + if (produit.stock != null) + Text( + 'Stock: ${produit.stock}', + style: TextStyle( + fontSize: 11, + color: Colors.grey.shade500, + ), + ), + ], + ), + trailing: isSelected + ? Icon( + Icons.check_circle, + color: Colors.green.shade700, + ) + : null, + onTap: () { + setState(() { + _produitCadeauSelectionne = produit; + }); + }, + ), + ); + }, + ), + ), + + // Sélection de la quantité si un produit est sélectionné + if (_produitCadeauSelectionne != null) ...[ + const SizedBox(height: 16), + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.green.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.green.shade200), + ), + child: Row( + children: [ + Icon(Icons.card_giftcard, color: Colors.green.shade700), + const SizedBox(width: 8), + Expanded( + child: Text( + 'Quantité de ${_produitCadeauSelectionne!.name}', + style: TextStyle( + fontWeight: FontWeight.w500, + color: Colors.green.shade700, + ), + ), + ), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: Colors.green.shade300), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: const Icon(Icons.remove, size: 16), + onPressed: _quantiteCadeau > 1 + ? () { + setState(() { + _quantiteCadeau--; + }); + } + : null, + ), + Text( + _quantiteCadeau.toString(), + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + ), + ), + IconButton( + icon: const Icon(Icons.add, size: 16), + onPressed: () { + final maxStock = _produitCadeauSelectionne!.stock ?? 99; + if (_quantiteCadeau < maxStock) { + setState(() { + _quantiteCadeau++; + }); + } + }, + ), + ], + ), + ), + ], + ), + ), + ], + ], + ), + ), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: const Text('Annuler'), + ), + ElevatedButton.icon( + style: ElevatedButton.styleFrom( + backgroundColor: Colors.green.shade700, + foregroundColor: Colors.white, + padding: EdgeInsets.symmetric( + horizontal: isMobile ? 16 : 20, + vertical: isMobile ? 10 : 12, + ), + ), + icon: const Icon(Icons.card_giftcard), + label: Text( + isMobile ? 'Offrir' : 'Offrir le cadeau', + style: TextStyle(fontSize: isMobile ? 12 : 14), + ), + onPressed: _produitCadeauSelectionne != null + ? () { + Get.back(result: { + 'produit': _produitCadeauSelectionne!, + 'quantite': _quantiteCadeau, + }); + } + : null, + ), + ], + ); + } +} \ No newline at end of file diff --git a/lib/Components/newCommandComponents/RemiseDialog.dart b/lib/Components/newCommandComponents/RemiseDialog.dart new file mode 100644 index 0000000..e5f81a7 --- /dev/null +++ b/lib/Components/newCommandComponents/RemiseDialog.dart @@ -0,0 +1,331 @@ +// Components/RemiseDialog.dart +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:youmazgestion/Models/client.dart'; +import 'package:youmazgestion/Models/produit.dart'; + +class RemiseDialog extends StatefulWidget { + final Product product; + final int quantite; + final double prixUnitaire; + final DetailCommande? detailExistant; + + const RemiseDialog({ + super.key, + required this.product, + required this.quantite, + required this.prixUnitaire, + this.detailExistant, + }); + + @override + State createState() => _RemiseDialogState(); +} + +class _RemiseDialogState extends State { + final _formKey = GlobalKey(); + final _valeurController = TextEditingController(); + + RemiseType _selectedType = RemiseType.pourcentage; + double _montantRemise = 0.0; + double _prixFinal = 0.0; + late double _sousTotal; + + @override + void initState() { + super.initState(); + _sousTotal = widget.quantite * widget.prixUnitaire; + + // Si on modifie une remise existante + if (widget.detailExistant?.aRemise == true) { + _selectedType = widget.detailExistant!.remiseType!; + _valeurController.text = widget.detailExistant!.remiseValeur.toString(); + _calculateRemise(); + } else { + _prixFinal = _sousTotal; + } + } + + void _calculateRemise() { + final valeur = double.tryParse(_valeurController.text) ?? 0.0; + + setState(() { + if (_selectedType == RemiseType.pourcentage) { + final pourcentage = valeur.clamp(0.0, 100.0); + _montantRemise = _sousTotal * (pourcentage / 100); + } else { + _montantRemise = valeur.clamp(0.0, _sousTotal); + } + _prixFinal = _sousTotal - _montantRemise; + }); + } + + @override + Widget build(BuildContext context) { + final isMobile = MediaQuery.of(context).size.width < 600; + + return AlertDialog( + title: Row( + children: [ + Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.orange.shade100, + borderRadius: BorderRadius.circular(8), + ), + child: Icon(Icons.discount, color: Colors.orange.shade700), + ), + const SizedBox(width: 12), + Expanded( + child: Text( + 'Appliquer une remise', + style: TextStyle(fontSize: isMobile ? 16 : 18), + ), + ), + ], + ), + content: Container( + width: isMobile ? double.maxFinite : 400, + child: Form( + key: _formKey, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Informations du produit + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.blue.shade50, + borderRadius: BorderRadius.circular(8), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.product.name, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 4), + Text( + 'Quantité: ${widget.quantite}', + style: const TextStyle(fontSize: 12), + ), + Text( + 'Prix unitaire: ${widget.prixUnitaire.toStringAsFixed(2)} MGA', + style: const TextStyle(fontSize: 12), + ), + Text( + 'Sous-total: ${_sousTotal.toStringAsFixed(2)} MGA', + style: const TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + + const SizedBox(height: 16), + + // Type de remise + const Text( + 'Type de remise:', + style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500), + ), + const SizedBox(height: 8), + + Row( + children: [ + Expanded( + child: RadioListTile( + title: const Text('Pourcentage (%)', style: TextStyle(fontSize: 12)), + value: RemiseType.pourcentage, + groupValue: _selectedType, + onChanged: (value) { + setState(() { + _selectedType = value!; + _calculateRemise(); + }); + }, + contentPadding: EdgeInsets.zero, + dense: true, + ), + ), + Expanded( + child: RadioListTile( + title: const Text('Montant (MGA)', style: TextStyle(fontSize: 12)), + value: RemiseType.montant, + groupValue: _selectedType, + onChanged: (value) { + setState(() { + _selectedType = value!; + _calculateRemise(); + }); + }, + contentPadding: EdgeInsets.zero, + dense: true, + ), + ), + ], + ), + + const SizedBox(height: 16), + + // Valeur de la remise + TextFormField( + controller: _valeurController, + decoration: InputDecoration( + labelText: _selectedType == RemiseType.pourcentage + ? 'Pourcentage (0-100)' + : 'Montant en MGA', + prefixIcon: Icon( + _selectedType == RemiseType.pourcentage + ? Icons.percent + : Icons.attach_money, + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + ), + filled: true, + fillColor: Colors.grey.shade50, + ), + keyboardType: const TextInputType.numberWithOptions(decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp(r'^\d*\.?\d*')), + ], + validator: (value) { + if (value == null || value.isEmpty) { + return 'Veuillez entrer une valeur'; + } + final valeur = double.tryParse(value); + if (valeur == null || valeur < 0) { + return 'Valeur invalide'; + } + if (_selectedType == RemiseType.pourcentage && valeur > 100) { + return 'Le pourcentage ne peut pas dépasser 100%'; + } + if (_selectedType == RemiseType.montant && valeur > _sousTotal) { + return 'La remise ne peut pas dépasser le sous-total'; + } + return null; + }, + onChanged: (value) => _calculateRemise(), + ), + + const SizedBox(height: 16), + + // Aperçu du calcul + Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.green.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.green.shade200), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text('Sous-total:', style: TextStyle(fontSize: 12)), + Text( + '${_sousTotal.toStringAsFixed(2)} MGA', + style: const TextStyle(fontSize: 12), + ), + ], + ), + if (_montantRemise > 0) ...[ + const SizedBox(height: 4), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Remise ${_selectedType == RemiseType.pourcentage ? "(${_valeurController.text}%)" : ""}:', + style: TextStyle( + fontSize: 12, + color: Colors.orange.shade700, + ), + ), + Text( + '-${_montantRemise.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 12, + color: Colors.orange.shade700, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ], + const Divider(height: 12), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + 'Prix final:', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + ), + ), + Text( + '${_prixFinal.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.green.shade700, + ), + ), + ], + ), + ], + ), + ), + ], + ), + ), + ), + actions: [ + if (widget.detailExistant?.aRemise == true) + TextButton.icon( + onPressed: () => Navigator.of(context).pop('supprimer'), + icon: const Icon(Icons.delete, color: Colors.red), + label: const Text('Supprimer remise', style: TextStyle(color: Colors.red)), + ), + TextButton( + onPressed: () => Navigator.of(context).pop(), + child: const Text('Annuler'), + ), + ElevatedButton( + onPressed: () { + if (_formKey.currentState!.validate()) { + final valeur = double.parse(_valeurController.text); + Navigator.of(context).pop({ + 'type': _selectedType, + 'valeur': valeur, + 'montantRemise': _montantRemise, + 'prixFinal': _prixFinal, + }); + } + }, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.orange.shade700, + foregroundColor: Colors.white, + ), + child: const Text('Appliquer'), + ), + ], + ); + } + + @override + void dispose() { + _valeurController.dispose(); + super.dispose(); + } +} \ No newline at end of file diff --git a/lib/Components/teat.dart b/lib/Components/teat.dart deleted file mode 100644 index 4543ef4..0000000 --- a/lib/Components/teat.dart +++ /dev/null @@ -1,2125 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; - -import 'package:youmazgestion/Components/app_bar.dart'; -import 'package:youmazgestion/Components/appDrawer.dart'; -import 'package:youmazgestion/Models/client.dart'; -import 'package:youmazgestion/Models/users.dart'; -import 'package:youmazgestion/Models/produit.dart'; -import 'package:youmazgestion/Services/stock_managementDatabase.dart'; - -class NouvelleCommandePage extends StatefulWidget { - const NouvelleCommandePage({super.key}); - - @override - _NouvelleCommandePageState createState() => _NouvelleCommandePageState(); -} - -class _NouvelleCommandePageState extends State { - final AppDatabase _appDatabase = AppDatabase.instance; - final _formKey = GlobalKey(); - bool _isLoading = false; - - // Contrôleurs client - final TextEditingController _nomController = TextEditingController(); - final TextEditingController _prenomController = TextEditingController(); - final TextEditingController _emailController = TextEditingController(); - final TextEditingController _telephoneController = TextEditingController(); - final TextEditingController _adresseController = TextEditingController(); - - // Contrôleurs pour les filtres - final TextEditingController _searchNameController = TextEditingController(); - final TextEditingController _searchImeiController = TextEditingController(); - final TextEditingController _searchReferenceController = TextEditingController(); - - // Panier - final List _products = []; - final List _filteredProducts = []; - final Map _quantites = {}; - - // Variables de filtre - bool _showOnlyInStock = false; - - // Utilisateurs commerciaux - List _commercialUsers = []; - Users? _selectedCommercialUser; - - // Variables pour les suggestions clients - List _clientSuggestions = []; - bool _showNomSuggestions = false; - bool _showTelephoneSuggestions = false; - GlobalKey _nomFieldKey = GlobalKey(); - GlobalKey _telephoneFieldKey = GlobalKey(); - - @override - void initState() { - super.initState(); - _loadProducts(); - _loadCommercialUsers(); - - // Listeners pour les filtres - _searchNameController.addListener(_filterProducts); - _searchImeiController.addListener(_filterProducts); - _searchReferenceController.addListener(_filterProducts); - - // Listeners pour l'autocomplétion client - _nomController.addListener(() { - if (_nomController.text.length >= 3) { - _showClientSuggestions(_nomController.text, isNom: true); - } else { - _hideNomSuggestions(); - } - }); - - _telephoneController.addListener(() { - if (_telephoneController.text.length >= 3) { - _showClientSuggestions(_telephoneController.text, isNom: false); - } else { - _hideTelephoneSuggestions(); - } - }); - } - - // Méthode pour vider complètement le formulaire et le panier - void _clearFormAndCart() { - setState(() { - // Vider les contrôleurs client - _nomController.clear(); - _prenomController.clear(); - _emailController.clear(); - _telephoneController.clear(); - _adresseController.clear(); - - // Vider le panier - _quantites.clear(); - - // Réinitialiser le commercial au premier de la liste - if (_commercialUsers.isNotEmpty) { - _selectedCommercialUser = _commercialUsers.first; - } - - // Masquer toutes les suggestions - _hideAllSuggestions(); - - // Réinitialiser l'état de chargement - _isLoading = false; - }); - } - - Future _showClientSuggestions(String query, {required bool isNom}) async { - if (query.length < 3) { - _hideAllSuggestions(); - return; - } - - final suggestions = await _appDatabase.suggestClients(query); - - setState(() { - _clientSuggestions = suggestions; - if (isNom) { - _showNomSuggestions = true; - _showTelephoneSuggestions = false; - } else { - _showTelephoneSuggestions = true; - _showNomSuggestions = false; - } - }); -} - - void _showOverlay({required bool isNom}) { - // Utiliser une approche plus simple avec setState - setState(() { - _clientSuggestions = _clientSuggestions; - if (isNom) { - _showNomSuggestions = true; - _showTelephoneSuggestions = false; - } else { - _showTelephoneSuggestions = true; - _showNomSuggestions = false; - } - }); - } - - void _fillClientForm(Client client) { - setState(() { - _nomController.text = client.nom; - _prenomController.text = client.prenom; - _emailController.text = client.email; - _telephoneController.text = client.telephone; - _adresseController.text = client.adresse ?? ''; - }); - - Get.snackbar( - 'Client trouvé', - 'Les informations ont été remplies automatiquement', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green, - colorText: Colors.white, - duration: const Duration(seconds: 2), - ); - } - - void _hideNomSuggestions() { - if (mounted && _showNomSuggestions) { - setState(() { - _showNomSuggestions = false; - }); - } - } - - void _hideTelephoneSuggestions() { - if (mounted && _showTelephoneSuggestions){ - setState(() { - _showTelephoneSuggestions = false; - }); - } - } - - void _hideAllSuggestions() { - _hideNomSuggestions(); - _hideTelephoneSuggestions(); - } - - Future _loadProducts() async { - final products = await _appDatabase.getProducts(); - setState(() { - _products.clear(); - _products.addAll(products); - _filteredProducts.clear(); - _filteredProducts.addAll(products); - }); - } - - Future _loadCommercialUsers() async { - final commercialUsers = await _appDatabase.getCommercialUsers(); - setState(() { - _commercialUsers = commercialUsers; - if (_commercialUsers.isNotEmpty) { - _selectedCommercialUser = _commercialUsers.first; - } - }); - } - - void _filterProducts() { - final nameQuery = _searchNameController.text.toLowerCase(); - final imeiQuery = _searchImeiController.text.toLowerCase(); - final referenceQuery = _searchReferenceController.text.toLowerCase(); - - setState(() { - _filteredProducts.clear(); - - for (var product in _products) { - bool matchesName = nameQuery.isEmpty || - product.name.toLowerCase().contains(nameQuery); - - bool matchesImei = imeiQuery.isEmpty || - (product.imei?.toLowerCase().contains(imeiQuery) ?? false); - - bool matchesReference = referenceQuery.isEmpty || - (product.reference?.toLowerCase().contains(referenceQuery) ?? false); - - bool matchesStock = !_showOnlyInStock || - (product.stock != null && product.stock! > 0); - - if (matchesName && matchesImei && matchesReference && matchesStock) { - _filteredProducts.add(product); - } - } - }); - } - - void _toggleStockFilter() { - setState(() { - _showOnlyInStock = !_showOnlyInStock; - }); - _filterProducts(); - } - - void _clearFilters() { - setState(() { - _searchNameController.clear(); - _searchImeiController.clear(); - _searchReferenceController.clear(); - _showOnlyInStock = false; - }); - _filterProducts(); - } - - // Section des filtres adaptée pour mobile - Widget _buildFilterSection() { - final isMobile = MediaQuery.of(context).size.width < 600; - - return Card( - elevation: 2, - margin: const EdgeInsets.only(bottom: 16), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Icon(Icons.filter_list, color: Colors.blue.shade700), - const SizedBox(width: 8), - const Text( - 'Filtres de recherche', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: Color.fromARGB(255, 9, 56, 95), - ), - ), - const Spacer(), - TextButton.icon( - onPressed: _clearFilters, - icon: const Icon(Icons.clear, size: 18), - label: isMobile ? const SizedBox() : const Text('Réinitialiser'), - style: TextButton.styleFrom( - foregroundColor: Colors.grey.shade600, - ), - ), - ], - ), - const SizedBox(height: 16), - - // Champ de recherche par nom - TextField( - controller: _searchNameController, - decoration: InputDecoration( - labelText: 'Rechercher par nom', - prefixIcon: const Icon(Icons.search), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - const SizedBox(height: 12), - - if (!isMobile) ...[ - // Version desktop - champs sur la même ligne - Row( - children: [ - Expanded( - child: TextField( - controller: _searchImeiController, - decoration: InputDecoration( - labelText: 'IMEI', - prefixIcon: const Icon(Icons.phone_android), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - ), - const SizedBox(width: 12), - Expanded( - child: TextField( - controller: _searchReferenceController, - decoration: InputDecoration( - labelText: 'Référence', - prefixIcon: const Icon(Icons.qr_code), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - ), - ], - ), - ] else ...[ - // Version mobile - champs empilés - TextField( - controller: _searchImeiController, - decoration: InputDecoration( - labelText: 'IMEI', - prefixIcon: const Icon(Icons.phone_android), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - const SizedBox(height: 12), - TextField( - controller: _searchReferenceController, - decoration: InputDecoration( - labelText: 'Référence', - prefixIcon: const Icon(Icons.qr_code), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - ], - const SizedBox(height: 16), - - // Boutons de filtre adaptés pour mobile - Wrap( - spacing: 8, - runSpacing: 8, - children: [ - ElevatedButton.icon( - onPressed: _toggleStockFilter, - icon: Icon( - _showOnlyInStock ? Icons.inventory : Icons.inventory_2, - size: 20, - ), - label: Text(_showOnlyInStock - ? isMobile ? 'Tous' : 'Afficher tous' - : isMobile ? 'En stock' : 'Stock disponible'), - style: ElevatedButton.styleFrom( - backgroundColor: _showOnlyInStock - ? Colors.green.shade600 - : Colors.blue.shade600, - foregroundColor: Colors.white, - padding: EdgeInsets.symmetric( - horizontal: isMobile ? 12 : 16, - vertical: 8 - ), - ), - ), - ], - ), - - const SizedBox(height: 8), - - // Compteur de résultats - Container( - padding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 8 - ), - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(20), - ), - child: Text( - '${_filteredProducts.length} produit(s)', - style: TextStyle( - color: Colors.blue.shade700, - fontWeight: FontWeight.w600, - fontSize: isMobile ? 12 : 14, - ), - ), - ), - ], - ), - ), - ); - } - -// Variables pour le scanner - QRViewController? _qrController; - bool _isScanning = false; - final GlobalKey _qrKey = GlobalKey(debugLabel: 'QR'); - - // 4. Méthode pour démarrer le scan - void _startBarcodeScanning() { - if (_isScanning) return; - - setState(() { - _isScanning = true; - }); - - Get.to(() => _buildScannerPage())?.then((_) { - setState(() { - _isScanning = false; - }); - }); - } - - // 5. Page du scanner - Widget _buildScannerPage() { - return Scaffold( - appBar: AppBar( - title: const Text('Scanner IMEI'), - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - leading: IconButton( - icon: const Icon(Icons.close), - onPressed: () { - _qrController?.dispose(); - Get.back(); - }, - ), - actions: [ - IconButton( - icon: const Icon(Icons.flash_on), - onPressed: () async { - await _qrController?.toggleFlash(); - }, - ), - IconButton( - icon: const Icon(Icons.flip_camera_ios), - onPressed: () async { - await _qrController?.flipCamera(); - }, - ), - ], - ), - body: Stack( - children: [ - // Scanner view - QRView( - key: _qrKey, - onQRViewCreated: _onQRViewCreated, - overlay: QrScannerOverlayShape( - borderColor: Colors.green, - borderRadius: 10, - borderLength: 30, - borderWidth: 10, - cutOutSize: 250, - ), - ), - - // Instructions overlay - Positioned( - bottom: 100, - left: 20, - right: 20, - child: Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.black.withOpacity(0.7), - borderRadius: BorderRadius.circular(12), - ), - child: const Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon(Icons.qr_code_scanner, color: Colors.white, size: 40), - SizedBox(height: 8), - Text( - 'Pointez la caméra vers le code-barres IMEI', - style: TextStyle( - color: Colors.white, - fontSize: 16, - fontWeight: FontWeight.w500, - ), - textAlign: TextAlign.center, - ), - SizedBox(height: 4), - Text( - 'Le scan se fait automatiquement', - style: TextStyle( - color: Colors.white70, - fontSize: 14, - ), - textAlign: TextAlign.center, - ), - ], - ), - ), - ), - ], - ), - ); - } - - // 6. Configuration du contrôleur QR - void _onQRViewCreated(QRViewController controller) { - _qrController = controller; - - controller.scannedDataStream.listen((scanData) { - if (scanData.code != null && scanData.code!.isNotEmpty) { - // Pauser le scanner pour éviter les scans multiples - controller.pauseCamera(); - - // Fermer la page du scanner - Get.back(); - - // Traiter le résultat - _findAndAddProductByImei(scanData.code!); - } - }); - } - - // 7. Méthode pour trouver et ajouter un produit par IMEI - Future _findAndAddProductByImei(String scannedImei) async { - try { - // Montrer un indicateur de chargement - Get.dialog( - AlertDialog( - content: Column( - mainAxisSize: MainAxisSize.min, - children: [ - CircularProgressIndicator(color: Colors.green.shade700), - const SizedBox(height: 16), - const Text('Recherche du produit...'), - const SizedBox(height: 8), - Text( - 'IMEI: $scannedImei', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - fontFamily: 'monospace', - ), - ), - ], - ), - ), - barrierDismissible: false, - ); - - // Attendre un court instant pour l'effet visuel - await Future.delayed(const Duration(milliseconds: 300)); - - // Chercher le produit avec l'IMEI scanné - Product? foundProduct; - - for (var product in _products) { - if (product.imei?.toLowerCase().trim() == scannedImei.toLowerCase().trim()) { - foundProduct = product; - break; - } - } - - // Fermer l'indicateur de chargement - Get.back(); - - if (foundProduct == null) { - _showProductNotFoundDialog(scannedImei); - return; - } - - // Vérifier le stock - if (foundProduct.stock != null && foundProduct.stock! <= 0) { - Get.snackbar( - 'Stock insuffisant', - 'Le produit "${foundProduct.name}" n\'est plus en stock', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.orange.shade600, - colorText: Colors.white, - duration: const Duration(seconds: 3), - icon: const Icon(Icons.warning_amber, color: Colors.white), - ); - return; - } - - // Vérifier si le produit peut être ajouté (stock disponible) - final currentQuantity = _quantites[foundProduct.id] ?? 0; - if (foundProduct.stock != null && currentQuantity >= foundProduct.stock!) { - Get.snackbar( - 'Stock limite atteint', - 'Quantité maximum atteinte pour "${foundProduct.name}"', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.orange.shade600, - colorText: Colors.white, - duration: const Duration(seconds: 3), - icon: const Icon(Icons.warning_amber, color: Colors.white), - ); - return; - } - - // Ajouter le produit au panier - setState(() { - _quantites[foundProduct!.id!] = currentQuantity + 1; - }); - - // Afficher le dialogue de succès - _showSuccessDialog(foundProduct, currentQuantity + 1); - - } catch (e) { - // Fermer l'indicateur de chargement si il est encore ouvert - if (Get.isDialogOpen!) Get.back(); - - Get.snackbar( - 'Erreur', - 'Une erreur est survenue: ${e.toString()}', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red.shade600, - colorText: Colors.white, - duration: const Duration(seconds: 3), - ); - } - } - - // 8. Dialogue de succès - void _showSuccessDialog(Product product, int newQuantity) { - Get.dialog( - AlertDialog( - title: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.green.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon(Icons.check_circle, color: Colors.green.shade700), - ), - const SizedBox(width: 12), - const Expanded(child: Text('Produit ajouté !')), - ], - ), - content: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - product.name, - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 8), - Text('Prix: ${product.price.toStringAsFixed(2)} MGA'), - Text('Quantité dans le panier: $newQuantity'), - if (product.stock != null) - Text('Stock restant: ${product.stock! - newQuantity}'), - ], - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: const Text('Continuer'), - ), - ElevatedButton( - onPressed: () { - Get.back(); - _showCartBottomSheet(); - }, - style: ElevatedButton.styleFrom( - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - ), - child: const Text('Voir le panier'), - ), - ], - ), - ); - } - - // 9. Dialogue produit non trouvé - void _showProductNotFoundDialog(String scannedImei) { - Get.dialog( - AlertDialog( - title: Row( - children: [ - Icon(Icons.search_off, color: Colors.red.shade600), - const SizedBox(width: 8), - const Text('Produit non trouvé'), - ], - ), - content: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text('Aucun produit trouvé avec cet IMEI:'), - const SizedBox(height: 8), - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.grey.shade100, - borderRadius: BorderRadius.circular(4), - ), - child: Text( - scannedImei, - style: const TextStyle( - fontFamily: 'monospace', - fontWeight: FontWeight.bold, - ), - ), - ), - const SizedBox(height: 12), - Text( - 'Vérifiez que l\'IMEI est correct ou que le produit existe dans la base de données.', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - ), - ), - ], - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: const Text('Fermer'), - ), - ElevatedButton( - onPressed: () { - Get.back(); - _startBarcodeScanning(); - }, - style: ElevatedButton.styleFrom( - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - ), - child: const Text('Scanner à nouveau'), - ), - ], - ), - ); - } - - - Widget _buildScanInfoCard() { - return Card( - elevation: 2, - margin: const EdgeInsets.only(bottom: 8), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.green.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon( - Icons.qr_code_scanner, - color: Colors.green.shade700, - size: 20, - ), - ), - const SizedBox(width: 12), - const Expanded( - child: Text( - 'Scanner rapidement un produit via son IMEI pour l\'ajouter au panier', - style: TextStyle( - fontSize: 14, - color: Color.fromARGB(255, 9, 56, 95), - ), - ), - ), - ElevatedButton.icon( - onPressed: _isScanning ? null : _startBarcodeScanning, - icon: _isScanning - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : const Icon(Icons.qr_code_scanner, size: 18), - label: Text(_isScanning ? 'Scan...' : 'Scanner'), - style: ElevatedButton.styleFrom( - backgroundColor: _isScanning ? Colors.grey : Colors.green.shade700, - foregroundColor: Colors.white, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - ), - ), - ], - ), - ), - ); - } - - // 10. Modifier le Widget build pour ajouter le bouton de scan - @override - Widget build(BuildContext context) { - final isMobile = MediaQuery.of(context).size.width < 600; - - return Scaffold( - floatingActionButton: Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - // Bouton de scan - FloatingActionButton( - heroTag: "scan", - onPressed: _isScanning ? null : _startBarcodeScanning, - backgroundColor: _isScanning ? Colors.grey : Colors.green.shade700, - foregroundColor: Colors.white, - child: _isScanning - ? const SizedBox( - width: 20, - height: 20, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : const Icon(Icons.qr_code_scanner), - ), - const SizedBox(height: 10), - // Bouton panier existant - _buildFloatingCartButton(), - ], - ), - appBar: CustomAppBar(title: 'Nouvelle commande'), - drawer: CustomDrawer(), - body: GestureDetector( - onTap: _hideAllSuggestions, - child: Column( - children: [ - // Section d'information sur le scan (desktop) - if (!isMobile) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: _buildScanInfoCard(), - ), - - // Section des filtres - if (!isMobile) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: _buildFilterSection(), - ), - - // Boutons pour mobile - if (isMobile) ...[ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), - child: Row( - children: [ - Expanded( - flex: 2, - child: ElevatedButton.icon( - icon: const Icon(Icons.filter_alt), - label: const Text('Filtres'), - onPressed: () { - showModalBottomSheet( - context: context, - isScrollControlled: true, - builder: (context) => SingleChildScrollView( - padding: EdgeInsets.only( - bottom: MediaQuery.of(context).viewInsets.bottom, - ), - child: _buildFilterSection(), - ), - ); - }, - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue.shade700, - foregroundColor: Colors.white, - minimumSize: const Size(double.infinity, 48), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - ), - ), - ), - const SizedBox(width: 8), - Expanded( - flex: 1, - child: ElevatedButton.icon( - icon: _isScanning - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : const Icon(Icons.qr_code_scanner), - label: Text(_isScanning ? 'Scan...' : 'Scan'), - onPressed: _isScanning ? null : _startBarcodeScanning, - style: ElevatedButton.styleFrom( - backgroundColor: _isScanning ? Colors.grey : Colors.green.shade700, - foregroundColor: Colors.white, - minimumSize: const Size(double.infinity, 48), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - ), - ), - ), - ], - ), - ), - // Compteur de résultats - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(20), - ), - child: Text( - '${_filteredProducts.length} produit(s)', - style: TextStyle( - color: Colors.blue.shade700, - fontWeight: FontWeight.w600, - ), - ), - ), - ), - ], - - // Liste des produits - Expanded( - child: _buildProductList(), - ), - ], - ), - ), - ); - } - - - Widget _buildSuggestionsList({required bool isNom}) { - if (_clientSuggestions.isEmpty) return const SizedBox(); - - return Container( - margin: const EdgeInsets.only(top: 4), - constraints: const BoxConstraints(maxHeight: 150), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.grey.shade300), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.1), - blurRadius: 4, - offset: const Offset(0, 2), - ), - ], - ), - child: ListView.builder( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: _clientSuggestions.length, - itemBuilder: (context, index) { - final client = _clientSuggestions[index]; - return ListTile( - dense: true, - leading: CircleAvatar( - radius: 16, - backgroundColor: Colors.blue.shade100, - child: Icon( - Icons.person, - size: 16, - color: Colors.blue.shade700, - ), - ), - title: Text( - '${client.nom} ${client.prenom}', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - ), - ), - subtitle: Text( - '${client.telephone} • ${client.email}', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - ), - ), - onTap: () { - _fillClientForm(client); - _hideAllSuggestions(); - }, - ); - }, - ), - ); -} - - Widget _buildFloatingCartButton() { - final isMobile = MediaQuery.of(context).size.width < 600; - final cartItemCount = _quantites.values.where((q) => q > 0).length; - - return FloatingActionButton.extended( - onPressed: () { - _showCartBottomSheet(); - }, - icon: const Icon(Icons.shopping_cart), - label: Text( - isMobile ? 'Panier ($cartItemCount)' : 'Panier ($cartItemCount)', - style: TextStyle(fontSize: isMobile ? 12 : 14), - ), - backgroundColor: Colors.blue.shade800, - foregroundColor: Colors.white, - ); - } - - void _showClientFormDialog() { - final isMobile = MediaQuery.of(context).size.width < 600; - - // Variables locales pour les suggestions dans le dialog - bool showNomSuggestions = false; - bool showPrenomSuggestions = false; - bool showEmailSuggestions = false; - bool showTelephoneSuggestions = false; - List localClientSuggestions = []; - - // GlobalKeys pour positionner les overlays - final GlobalKey nomFieldKey = GlobalKey(); - final GlobalKey prenomFieldKey = GlobalKey(); - final GlobalKey emailFieldKey = GlobalKey(); - final GlobalKey telephoneFieldKey = GlobalKey(); - - Get.dialog( - StatefulBuilder( - builder: (context, setDialogState) { - return Stack( - children: [ - AlertDialog( - title: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.blue.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon(Icons.person_add, color: Colors.blue.shade700), - ), - const SizedBox(width: 12), - Expanded( - child: Text( - isMobile ? 'Client' : 'Informations Client', - style: TextStyle(fontSize: isMobile ? 16 : 18), - ), - ), - ], - ), - content: Container( - width: isMobile ? double.maxFinite : 600, - constraints: BoxConstraints( - maxHeight: MediaQuery.of(context).size.height * 0.7, - ), - child: SingleChildScrollView( - child: Form( - key: _formKey, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // Champ Nom avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: nomFieldKey, - controller: _nomController, - label: 'Nom', - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer un nom' : null, - onChanged: (value) async { - if (value.length >= 2) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showNomSuggestions = suggestions.isNotEmpty; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - }); - } else { - setDialogState(() { - showNomSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - // Champ Prénom avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: prenomFieldKey, - controller: _prenomController, - label: 'Prénom', - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer un prénom' : null, - onChanged: (value) async { - if (value.length >= 2) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showPrenomSuggestions = suggestions.isNotEmpty; - showNomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - }); - } else { - setDialogState(() { - showPrenomSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - // Champ Email avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: emailFieldKey, - controller: _emailController, - label: 'Email', - keyboardType: TextInputType.emailAddress, - validator: (value) { - if (value?.isEmpty ?? true) return 'Veuillez entrer un email'; - if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(value!)) { - return 'Email invalide'; - } - return null; - }, - onChanged: (value) async { - if (value.length >= 3) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showEmailSuggestions = suggestions.isNotEmpty; - showNomSuggestions = false; - showPrenomSuggestions = false; - showTelephoneSuggestions = false; - }); - } else { - setDialogState(() { - showEmailSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - // Champ Téléphone avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: telephoneFieldKey, - controller: _telephoneController, - label: 'Téléphone', - keyboardType: TextInputType.phone, - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer un téléphone' : null, - onChanged: (value) async { - if (value.length >= 3) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showTelephoneSuggestions = suggestions.isNotEmpty; - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - }); - } else { - setDialogState(() { - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - _buildTextFormField( - controller: _adresseController, - label: 'Adresse', - maxLines: 2, - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer une adresse' : null, - ), - const SizedBox(height: 12), - _buildCommercialDropdown(), - ], - ), - ), - ), - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: const Text('Annuler'), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue.shade800, - foregroundColor: Colors.white, - padding: EdgeInsets.symmetric( - horizontal: isMobile ? 16 : 20, - vertical: isMobile ? 10 : 12 - ), - ), - onPressed: () { - if (_formKey.currentState!.validate()) { - // Fermer toutes les suggestions avant de soumettre - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - Get.back(); - _submitOrder(); - } - }, - child: Text( - isMobile ? 'Valider' : 'Valider la commande', - style: TextStyle(fontSize: isMobile ? 12 : 14), - ), - ), - ], - ), - - // Overlay pour les suggestions du nom - if (showNomSuggestions) - _buildSuggestionOverlay( - fieldKey: nomFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showNomSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - - // Overlay pour les suggestions du prénom - if (showPrenomSuggestions) - _buildSuggestionOverlay( - fieldKey: prenomFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showPrenomSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - - // Overlay pour les suggestions de l'email - if (showEmailSuggestions) - _buildSuggestionOverlay( - fieldKey: emailFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showEmailSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - - // Overlay pour les suggestions du téléphone - if (showTelephoneSuggestions) - _buildSuggestionOverlay( - fieldKey: telephoneFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - ], - ); - }, - ), - ); -} - -// Widget pour créer un TextFormField avec une clé -Widget _buildTextFormFieldWithKey({ - required GlobalKey key, - required TextEditingController controller, - required String label, - TextInputType? keyboardType, - int maxLines = 1, - String? Function(String?)? validator, - void Function(String)? onChanged, -}) { - return Container( - key: key, - child: _buildTextFormField( - controller: controller, - label: label, - keyboardType: keyboardType, - maxLines: maxLines, - validator: validator, - onChanged: onChanged, - ), - ); -} - -// Widget pour l'overlay des suggestions -Widget _buildSuggestionOverlay({ - required GlobalKey fieldKey, - required List suggestions, - required Function(Client) onClientSelected, - required VoidCallback onDismiss, -}) { - return Positioned.fill( - child: GestureDetector( - onTap: onDismiss, - child: Material( - color: Colors.transparent, - child: Builder( - builder: (context) { - // Obtenir la position du champ - final RenderBox? renderBox = fieldKey.currentContext?.findRenderObject() as RenderBox?; - if (renderBox == null) return const SizedBox(); - - final position = renderBox.localToGlobal(Offset.zero); - final size = renderBox.size; - - return Stack( - children: [ - Positioned( - left: position.dx, - top: position.dy + size.height + 4, - width: size.width, - child: GestureDetector( - onTap: () {}, // Empêcher la fermeture au tap sur la liste - child: Container( - constraints: const BoxConstraints( - maxHeight: 200, // Hauteur maximum pour la scrollabilité - ), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.grey.shade300), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.15), - blurRadius: 8, - offset: const Offset(0, 4), - ), - ], - ), - child: ClipRRect( - borderRadius: BorderRadius.circular(8), - child: Scrollbar( - thumbVisibility: suggestions.length > 3, - child: ListView.separated( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: suggestions.length, - separatorBuilder: (context, index) => Divider( - height: 1, - color: Colors.grey.shade200, - ), - itemBuilder: (context, index) { - final client = suggestions[index]; - return ListTile( - dense: true, - contentPadding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 4, - ), - leading: CircleAvatar( - radius: 16, - backgroundColor: Colors.blue.shade100, - child: Icon( - Icons.person, - size: 16, - color: Colors.blue.shade700, - ), - ), - title: Text( - '${client.nom} ${client.prenom}', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - ), - ), - subtitle: Text( - '${client.telephone} • ${client.email}', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - ), - ), - onTap: () => onClientSelected(client), - hoverColor: Colors.blue.shade50, - ); - }, - ), - ), - ), - ), - ), - ), - ], - ); - }, - ), - ), - ), - ); -} - -// Méthode pour remplir le formulaire avec les données du client -void _fillFormWithClient(Client client) { - _nomController.text = client.nom; - _prenomController.text = client.prenom; - _emailController.text = client.email; - _telephoneController.text = client.telephone; - _adresseController.text = client.adresse ?? ''; - - Get.snackbar( - 'Client trouvé', - 'Les informations ont été remplies automatiquement', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green, - colorText: Colors.white, - duration: const Duration(seconds: 2), - ); -} - - Widget _buildTextFormField({ - required TextEditingController controller, - required String label, - TextInputType? keyboardType, - String? Function(String?)? validator, - int? maxLines, - void Function(String)? onChanged, - }) { - return TextFormField( - controller: controller, - decoration: InputDecoration( - labelText: label, - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.white, - ), - keyboardType: keyboardType, - validator: validator, - maxLines: maxLines, - onChanged: onChanged, - ); - } - - Widget _buildCommercialDropdown() { - return DropdownButtonFormField( - value: _selectedCommercialUser, - decoration: InputDecoration( - labelText: 'Commercial', - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.white, - ), - items: _commercialUsers.map((Users user) { - return DropdownMenuItem( - value: user, - child: Text('${user.name} ${user.lastName}'), - ); - }).toList(), - onChanged: (Users? newValue) { - setState(() { - _selectedCommercialUser = newValue; - }); - }, - validator: (value) => value == null ? 'Veuillez sélectionner un commercial' : null, - ); - } - - Widget _buildProductList() { - final isMobile = MediaQuery.of(context).size.width < 600; - - return _filteredProducts.isEmpty - ? _buildEmptyState() - : ListView.builder( - padding: const EdgeInsets.all(16.0), - itemCount: _filteredProducts.length, - itemBuilder: (context, index) { - final product = _filteredProducts[index]; - final quantity = _quantites[product.id] ?? 0; - - return _buildProductListItem(product, quantity, isMobile); - }, - ); - } - - Widget _buildEmptyState() { - return Center( - child: Padding( - padding: const EdgeInsets.all(32.0), - child: Column( - children: [ - Icon( - Icons.search_off, - size: 64, - color: Colors.grey.shade400, - ), - const SizedBox(height: 16), - Text( - 'Aucun produit trouvé', - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.w500, - color: Colors.grey.shade600, - ), - ), - const SizedBox(height: 8), - Text( - 'Modifiez vos critères de recherche', - style: TextStyle( - fontSize: 14, - color: Colors.grey.shade500, - ), - ), - ], - ), - ), - ); - } - - Widget _buildProductListItem(Product product, int quantity, bool isMobile) { - final bool isOutOfStock = product.stock != null && product.stock! <= 0; - - return Card( - margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - elevation: 2, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - border: isOutOfStock - ? Border.all(color: Colors.red.shade200, width: 1.5) - : null, - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - children: [ - Container( - width: isMobile ? 40 : 50, - height: isMobile ? 40 : 50, - decoration: BoxDecoration( - color: isOutOfStock - ? Colors.red.shade50 - : Colors.blue.shade50, - borderRadius: BorderRadius.circular(8), - ), - child: Icon( - Icons.shopping_bag, - size: isMobile ? 20 : 24, - color: isOutOfStock ? Colors.red : Colors.blue, - ), - ), - const SizedBox(width: 12), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - product.name, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: isMobile ? 14 : 16, - color: isOutOfStock ? Colors.red.shade700 : null, - ), - ), - const SizedBox(height: 4), - Text( - '${product.price.toStringAsFixed(2)} MGA', - style: TextStyle( - color: Colors.green.shade700, - fontWeight: FontWeight.w600, - fontSize: isMobile ? 12 : 14, - ), - ), - if (product.stock != null) - Text( - 'Stock: ${product.stock}${isOutOfStock ? ' (Rupture)' : ''}', - style: TextStyle( - fontSize: isMobile ? 10 : 12, - color: isOutOfStock - ? Colors.red.shade600 - : Colors.grey.shade600, - fontWeight: isOutOfStock ? FontWeight.w600 : FontWeight.normal, - ), - ), - // Affichage IMEI et Référence - plus compact sur mobile - if (product.imei != null && product.imei!.isNotEmpty) - Text( - 'IMEI: ${product.imei}', - style: TextStyle( - fontSize: isMobile ? 9 : 11, - color: Colors.grey.shade600, - fontFamily: 'monospace', - ), - ), - if (product.reference != null && product.reference!.isNotEmpty) - Text( - 'Réf: ${product.reference}', - style: TextStyle( - fontSize: isMobile ? 9 : 11, - color: Colors.grey.shade600, - ), - ), - ], - ), - ), - Container( - decoration: BoxDecoration( - color: isOutOfStock - ? Colors.grey.shade100 - : Colors.blue.shade50, - borderRadius: BorderRadius.circular(20), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - IconButton( - icon: Icon( - Icons.remove, - size: isMobile ? 16 : 18 - ), - onPressed: isOutOfStock ? null : () { - if (quantity > 0) { - setState(() { - _quantites[product.id!] = quantity - 1; - }); - } - }, - ), - Text( - quantity.toString(), - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: isMobile ? 12 : 14, - ), - ), - IconButton( - icon: Icon( - Icons.add, - size: isMobile ? 16 : 18 - ), - onPressed: isOutOfStock ? null : () { - if (product.stock == null || quantity < product.stock!) { - setState(() { - _quantites[product.id!] = quantity + 1; - }); - } else { - Get.snackbar( - 'Stock insuffisant', - 'Quantité demandée non disponible', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - } - }, - ), - ], - ), - ), - ], - ), - ), - ), - ); - } - - void _showCartBottomSheet() { - final isMobile = MediaQuery.of(context).size.width < 600; - - Get.bottomSheet( - Container( - height: MediaQuery.of(context).size.height * (isMobile ? 0.85 : 0.7), - padding: const EdgeInsets.all(16), - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.vertical(top: Radius.circular(20)), - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Votre Panier', - style: TextStyle( - fontSize: isMobile ? 18 : 20, - fontWeight: FontWeight.bold - ), - ), - IconButton( - icon: const Icon(Icons.close), - onPressed: () => Get.back(), - ), - ], - ), - const Divider(), - Expanded(child: _buildCartItemsList()), - const Divider(), - _buildCartTotalSection(), - const SizedBox(height: 16), - _buildSubmitButton(), - ], - ), - ), - isScrollControlled: true, - ); - } - - Widget _buildCartItemsList() { - final itemsInCart = _quantites.entries.where((e) => e.value > 0).toList(); - - if (itemsInCart.isEmpty) { - return const Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon(Icons.shopping_cart_outlined, size: 60, color: Colors.grey), - SizedBox(height: 16), - Text( - 'Votre panier est vide', - style: TextStyle(fontSize: 16, color: Colors.grey), - ), - ], - ), - ); - } - - return ListView.builder( - itemCount: itemsInCart.length, - itemBuilder: (context, index) { - final entry = itemsInCart[index]; - final product = _products.firstWhere((p) => p.id == entry.key); - - return Dismissible( - key: Key(entry.key.toString()), - background: Container( - color: Colors.red.shade100, - alignment: Alignment.centerRight, - padding: const EdgeInsets.only(right: 20), - child: const Icon(Icons.delete, color: Colors.red), - ), - direction: DismissDirection.endToStart, - onDismissed: (direction) { - setState(() { - _quantites.remove(entry.key); - }); - Get.snackbar( - 'Produit retiré', - '${product.name} a été retiré du panier', - snackPosition: SnackPosition.BOTTOM, - ); - }, - child: Card( - margin: const EdgeInsets.only(bottom: 8), - elevation: 1, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - child: ListTile( - contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - leading: Container( - width: 40, - height: 40, - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(8), - ), - child: const Icon(Icons.shopping_bag, size: 20), - ), - title: Text(product.name), - subtitle: Text('${entry.value} x ${product.price.toStringAsFixed(2)} MGA'), - trailing: Text( - '${(entry.value * product.price).toStringAsFixed(2)} MGA', - style: TextStyle( - fontWeight: FontWeight.bold, - color: Colors.blue.shade800, - ), - ), - ), - ), - ); - }, - ); - } - - Widget _buildCartTotalSection() { - double total = 0; - _quantites.forEach((productId, quantity) { - final product = _products.firstWhere((p) => p.id == productId); - total += quantity * product.price; - }); - - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - 'Total:', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), - ), - Text( - '${total.toStringAsFixed(2)} MGA', - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: Colors.green, - ), - ), - ], - ), - const SizedBox(height: 8), - Text( - '${_quantites.values.where((q) => q > 0).length} article(s)', - style: TextStyle(color: Colors.grey.shade600), - ), - ], - ); - } - - Widget _buildSubmitButton() { - final isMobile = MediaQuery.of(context).size.width < 600; - - return SizedBox( - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - padding: EdgeInsets.symmetric( - vertical: isMobile ? 12 : 16 - ), - backgroundColor: Colors.blue.shade800, - foregroundColor: Colors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - elevation: 4, - ), - onPressed: _submitOrder, - child: _isLoading - ? SizedBox( - width: 20, - height: 20, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : Text( - isMobile ? 'Valider' : 'Valider la Commande', - style: TextStyle(fontSize: isMobile ? 14 : 16), - ), - ), - ); - } - - Future _submitOrder() async { - // Vérifier d'abord si le panier est vide - final itemsInCart = _quantites.entries.where((e) => e.value > 0).toList(); - if (itemsInCart.isEmpty) { - Get.snackbar( - 'Panier vide', - 'Veuillez ajouter des produits à votre commande', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - _showCartBottomSheet(); // Ouvrir le panier pour montrer qu'il est vide - return; - } - - // Ensuite vérifier les informations client - if (_nomController.text.isEmpty || - _prenomController.text.isEmpty || - _emailController.text.isEmpty || - _telephoneController.text.isEmpty || - _adresseController.text.isEmpty) { - Get.snackbar( - 'Informations manquantes', - 'Veuillez remplir les informations client', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - _showClientFormDialog(); - return; - } - - setState(() { - _isLoading = true; - }); - - // Créer le client - final client = Client( - nom: _nomController.text, - prenom: _prenomController.text, - email: _emailController.text, - telephone: _telephoneController.text, - adresse: _adresseController.text, - dateCreation: DateTime.now(), - ); - - // Calculer le total et préparer les détails - double total = 0; - final details = []; - - for (final entry in itemsInCart) { - final product = _products.firstWhere((p) => p.id == entry.key); - total += entry.value * product.price; - - details.add(DetailCommande( - commandeId: 0, - produitId: product.id!, - quantite: entry.value, - prixUnitaire: product.price, - sousTotal: entry.value * product.price, - )); - } - - // Créer la commande - final commande = Commande( - clientId: 0, - dateCommande: DateTime.now(), - statut: StatutCommande.enAttente, - montantTotal: total, - notes: 'Commande passée via l\'application', - commandeurId: _selectedCommercialUser?.id, - ); - - try { - await _appDatabase.createCommandeComplete(client, commande, details); - - // Fermer le panier avant d'afficher la confirmation - Get.back(); - - // Afficher le dialogue de confirmation - adapté pour mobile - final isMobile = MediaQuery.of(context).size.width < 600; - - await showDialog( - context: context, - barrierDismissible: false, // Empêcher la fermeture accidentelle - builder: (context) => AlertDialog( - title: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.green.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon(Icons.check_circle, color: Colors.green.shade700), - ), - const SizedBox(width: 12), - Expanded( - child: Text( - 'Commande Validée', - style: TextStyle(fontSize: isMobile ? 16 : 18), - ), - ), - ], - ), - content: Text( - 'Votre commande a été enregistrée et expédiée avec succès.', - style: TextStyle(fontSize: isMobile ? 14 : 16), - ), - actions: [ - SizedBox( - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - padding: EdgeInsets.symmetric( - vertical: isMobile ? 12 : 16 - ), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - ), - onPressed: () { - Navigator.pop(context); - // Vider complètement le formulaire et le panier - _clearFormAndCart(); - // Recharger les produits pour mettre à jour le stock - _loadProducts(); - }, - child: Text( - 'OK', - style: TextStyle(fontSize: isMobile ? 14 : 16), - ), - ), - ), - ], - ), - ); - - } catch (e) { - setState(() { - _isLoading = false; - }); - - Get.snackbar( - 'Erreur', - 'Une erreur est survenue: ${e.toString()}', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - } - } - - @override - void dispose() { - _qrController?.dispose(); - - // Vos disposals existants... - _hideAllSuggestions(); - _nomController.dispose(); - _prenomController.dispose(); - _emailController.dispose(); - _telephoneController.dispose(); - _adresseController.dispose(); - _searchNameController.dispose(); - _searchImeiController.dispose(); - _searchReferenceController.dispose(); - - super.dispose(); - } - } \ No newline at end of file diff --git a/lib/Models/Client.dart b/lib/Models/Client.dart index 728d162..19b96ab 100644 --- a/lib/Models/Client.dart +++ b/lib/Models/Client.dart @@ -92,9 +92,6 @@ class Commande { final String? clientNom; final String? clientPrenom; final String? clientEmail; - final double? remisePourcentage; - final double? remiseMontant; - final double? montantApresRemise; Commande({ this.id, @@ -109,9 +106,6 @@ class Commande { this.clientNom, this.clientPrenom, this.clientEmail, - this.remisePourcentage, - this.remiseMontant, - this.montantApresRemise, }); String get clientNomComplet { @@ -143,9 +137,6 @@ class Commande { 'dateLivraison': dateLivraison?.toIso8601String(), 'commandeurId': commandeurId, 'validateurId': validateurId, - 'remisePourcentage': remisePourcentage, - 'remiseMontant': remiseMontant, - 'montantApresRemise': montantApresRemise, }; } @@ -165,56 +156,15 @@ class Commande { clientNom: map['clientNom'] as String?, clientPrenom: map['clientPrenom'] as String?, clientEmail: map['clientEmail'] as String?, - remisePourcentage: map['remisePourcentage'] != null - ? (map['remisePourcentage'] as num).toDouble() - : null, - remiseMontant: map['remiseMontant'] != null - ? (map['remiseMontant'] as num).toDouble() - : null, - montantApresRemise: map['montantApresRemise'] != null - ? (map['montantApresRemise'] as num).toDouble() - : null, - ); - } - - Commande copyWith({ - int? id, - int? clientId, - DateTime? dateCommande, - StatutCommande? statut, - double? montantTotal, - String? notes, - DateTime? dateLivraison, - int? commandeurId, - int? validateurId, - String? clientNom, - String? clientPrenom, - String? clientEmail, - double? remisePourcentage, - double? remiseMontant, - double? montantApresRemise, - }) { - return Commande( - id: id ?? this.id, - clientId: clientId ?? this.clientId, - dateCommande: dateCommande ?? this.dateCommande, - statut: statut ?? this.statut, - montantTotal: montantTotal ?? this.montantTotal, - notes: notes ?? this.notes, - dateLivraison: dateLivraison ?? this.dateLivraison, - commandeurId: commandeurId ?? this.commandeurId, - validateurId: validateurId ?? this.validateurId, - clientNom: clientNom ?? this.clientNom, - clientPrenom: clientPrenom ?? this.clientPrenom, - clientEmail: clientEmail ?? this.clientEmail, - remisePourcentage: remisePourcentage ?? this.remisePourcentage, - remiseMontant: remiseMontant ?? this.remiseMontant, - montantApresRemise: montantApresRemise ?? this.montantApresRemise, ); } } // REMPLACEZ COMPLÈTEMENT votre classe DetailCommande dans Models/client.dart par celle-ci : +enum RemiseType { + pourcentage, + montant +} class DetailCommande { final int? id; @@ -222,16 +172,15 @@ class DetailCommande { final int produitId; final int quantite; final double prixUnitaire; - final double sousTotal; + final double sousTotal; // Prix unitaire × quantité (avant remise) + final RemiseType? remiseType; + final double remiseValeur; // Valeur de la remise (% ou montant) + final double montantRemise; // Montant de la remise calculé + final double prixFinal; // Prix final après remise + final bool estCadeau; // NOUVEAU : Indique si l'article est un cadeau final String? produitNom; final String? produitImage; final String? produitReference; - final bool? estCadeau; - - // NOUVEAUX CHAMPS POUR LA REMISE PAR PRODUIT - final double? remisePourcentage; - final double? remiseMontant; - final double? prixApresRemise; DetailCommande({ this.id, @@ -240,15 +189,195 @@ class DetailCommande { required this.quantite, required this.prixUnitaire, required this.sousTotal, + this.remiseType, + this.remiseValeur = 0.0, + this.montantRemise = 0.0, + required this.prixFinal, + this.estCadeau = false, this.produitNom, this.produitImage, this.produitReference, - this.estCadeau, - this.remisePourcentage, - this.remiseMontant, - this.prixApresRemise, }); + // Constructeur pour créer un détail sans remise + factory DetailCommande.sansRemise({ + int? id, + required int commandeId, + required int produitId, + required int quantite, + required double prixUnitaire, + bool estCadeau = false, + String? produitNom, + String? produitImage, + String? produitReference, + }) { + final sousTotal = quantite * prixUnitaire; + final prixFinal = estCadeau ? 0.0 : sousTotal; + + return DetailCommande( + id: id, + commandeId: commandeId, + produitId: produitId, + quantite: quantite, + prixUnitaire: prixUnitaire, + sousTotal: sousTotal, + prixFinal: prixFinal, + estCadeau: estCadeau, + produitNom: produitNom, + produitImage: produitImage, + produitReference: produitReference, + ); + } + + // NOUVEAU : Constructeur pour créer un cadeau + factory DetailCommande.cadeau({ + int? id, + required int commandeId, + required int produitId, + required int quantite, + required double prixUnitaire, + String? produitNom, + String? produitImage, + String? produitReference, + }) { + return DetailCommande( + id: id, + commandeId: commandeId, + produitId: produitId, + quantite: quantite, + prixUnitaire: prixUnitaire, + sousTotal: quantite * prixUnitaire, + prixFinal: 0.0, // Prix final à 0 pour un cadeau + estCadeau: true, + produitNom: produitNom, + produitImage: produitImage, + produitReference: produitReference, + ); + } + + // Méthode pour appliquer une remise (ne s'applique pas aux cadeaux) + DetailCommande appliquerRemise({ + required RemiseType type, + required double valeur, + }) { + // Les remises ne s'appliquent pas aux cadeaux + if (estCadeau) return this; + + double montantRemiseCalcule = 0.0; + + if (type == RemiseType.pourcentage) { + final pourcentage = valeur.clamp(0.0, 100.0); + montantRemiseCalcule = sousTotal * (pourcentage / 100); + } else { + montantRemiseCalcule = valeur.clamp(0.0, sousTotal); + } + + final prixFinalCalcule = sousTotal - montantRemiseCalcule; + + return DetailCommande( + id: id, + commandeId: commandeId, + produitId: produitId, + quantite: quantite, + prixUnitaire: prixUnitaire, + sousTotal: sousTotal, + remiseType: type, + remiseValeur: valeur, + montantRemise: montantRemiseCalcule, + prixFinal: prixFinalCalcule, + estCadeau: estCadeau, + produitNom: produitNom, + produitImage: produitImage, + produitReference: produitReference, + ); + } + + // Méthode pour supprimer la remise + DetailCommande supprimerRemise() { + return DetailCommande( + id: id, + commandeId: commandeId, + produitId: produitId, + quantite: quantite, + prixUnitaire: prixUnitaire, + sousTotal: sousTotal, + remiseType: null, + remiseValeur: 0.0, + montantRemise: 0.0, + prixFinal: estCadeau ? 0.0 : sousTotal, + estCadeau: estCadeau, + produitNom: produitNom, + produitImage: produitImage, + produitReference: produitReference, + ); + } + + // NOUVEAU : Méthode pour convertir en cadeau + DetailCommande convertirEnCadeau() { + return DetailCommande( + id: id, + commandeId: commandeId, + produitId: produitId, + quantite: quantite, + prixUnitaire: prixUnitaire, + sousTotal: sousTotal, + remiseType: null, // Supprimer les remises lors de la conversion en cadeau + remiseValeur: 0.0, + montantRemise: 0.0, + prixFinal: 0.0, + estCadeau: true, + produitNom: produitNom, + produitImage: produitImage, + produitReference: produitReference, + ); + } + + // NOUVEAU : Méthode pour convertir en article normal + DetailCommande convertirEnArticleNormal() { + return DetailCommande( + id: id, + commandeId: commandeId, + produitId: produitId, + quantite: quantite, + prixUnitaire: prixUnitaire, + sousTotal: sousTotal, + remiseType: remiseType, + remiseValeur: remiseValeur, + montantRemise: montantRemise, + prixFinal: estCadeau ? sousTotal - montantRemise : prixFinal, + estCadeau: false, + produitNom: produitNom, + produitImage: produitImage, + produitReference: produitReference, + ); + } + + // Getters utiles + bool get aRemise => remiseType != null && montantRemise > 0 && !estCadeau; + + double get pourcentageRemise { + if (!aRemise) return 0.0; + return (montantRemise / sousTotal) * 100; + } + + String get remiseDescription { + if (estCadeau) return 'CADEAU'; + if (!aRemise) return ''; + + if (remiseType == RemiseType.pourcentage) { + return '-${remiseValeur.toStringAsFixed(0)}%'; + } else { + return '-${montantRemise.toStringAsFixed(2)} MGA'; + } + } + + // NOUVEAU : Description du statut de l'article + String get statutDescription { + if (estCadeau) return 'CADEAU OFFERT'; + if (aRemise) return 'AVEC REMISE'; + return 'PRIX NORMAL'; + } + Map toMap() { return { 'id': id, @@ -257,14 +386,24 @@ class DetailCommande { 'quantite': quantite, 'prixUnitaire': prixUnitaire, 'sousTotal': sousTotal, - 'estCadeau': estCadeau == true ? 1 : 0, - 'remisePourcentage': remisePourcentage, - 'remiseMontant': remiseMontant, - 'prixApresRemise': prixApresRemise, + 'remise_type': remiseType?.name, + 'remise_valeur': remiseValeur, + 'montant_remise': montantRemise, + 'prix_final': prixFinal, + 'est_cadeau': estCadeau ? 1 : 0, }; } factory DetailCommande.fromMap(Map map) { + RemiseType? type; + if (map['remise_type'] != null) { + if (map['remise_type'] == 'pourcentage') { + type = RemiseType.pourcentage; + } else if (map['remise_type'] == 'montant') { + type = RemiseType.montant; + } + } + return DetailCommande( id: map['id'] as int?, commandeId: map['commandeId'] as int, @@ -272,71 +411,15 @@ class DetailCommande { quantite: map['quantite'] as int, prixUnitaire: (map['prixUnitaire'] as num).toDouble(), sousTotal: (map['sousTotal'] as num).toDouble(), + remiseType: type, + remiseValeur: (map['remise_valeur'] as num?)?.toDouble() ?? 0.0, + montantRemise: (map['montant_remise'] as num?)?.toDouble() ?? 0.0, + prixFinal: (map['prix_final'] as num?)?.toDouble() ?? + (map['sousTotal'] as num).toDouble(), + estCadeau: (map['est_cadeau'] as int?) == 1, produitNom: map['produitNom'] as String?, produitImage: map['produitImage'] as String?, produitReference: map['produitReference'] as String?, - estCadeau: map['estCadeau'] == 1, - remisePourcentage: map['remisePourcentage'] != null - ? (map['remisePourcentage'] as num).toDouble() - : null, - remiseMontant: map['remiseMontant'] != null - ? (map['remiseMontant'] as num).toDouble() - : null, - prixApresRemise: map['prixApresRemise'] != null - ? (map['prixApresRemise'] as num).toDouble() - : null, ); } - - DetailCommande copyWith({ - int? id, - int? commandeId, - int? produitId, - int? quantite, - double? prixUnitaire, - double? sousTotal, - String? produitNom, - String? produitImage, - String? produitReference, - bool? estCadeau, - double? remisePourcentage, - double? remiseMontant, - double? prixApresRemise, - }) { - return DetailCommande( - id: id ?? this.id, - commandeId: commandeId ?? this.commandeId, - produitId: produitId ?? this.produitId, - quantite: quantite ?? this.quantite, - prixUnitaire: prixUnitaire ?? this.prixUnitaire, - sousTotal: sousTotal ?? this.sousTotal, - produitNom: produitNom ?? this.produitNom, - produitImage: produitImage ?? this.produitImage, - produitReference: produitReference ?? this.produitReference, - estCadeau: estCadeau ?? this.estCadeau, - remisePourcentage: remisePourcentage ?? this.remisePourcentage, - remiseMontant: remiseMontant ?? this.remiseMontant, - prixApresRemise: prixApresRemise ?? this.prixApresRemise, - ); - } - - // GETTERS QUI RÉSOLVENT LE PROBLÈME "aUneRemise" INTROUVABLE - double get prixFinalUnitaire { - return prixApresRemise ?? prixUnitaire; - } - - double get sousTotalAvecRemise { - return quantite * prixFinalUnitaire; - } - - bool get aUneRemise { - return remisePourcentage != null || remiseMontant != null || prixApresRemise != null; - } - - double get montantRemise { - if (prixApresRemise != null) { - return (prixUnitaire - prixApresRemise!) * quantite; - } - return 0.0; - } } \ No newline at end of file diff --git a/lib/Services/Script.sql b/lib/Services/Script.sql new file mode 100644 index 0000000..84f9bf8 --- /dev/null +++ b/lib/Services/Script.sql @@ -0,0 +1,304 @@ +-- Script SQL pour créer la base de données guycom_database_v1 +-- Création des tables et insertion des données par défaut + +-- ===================================================== +-- CRÉATION DES TABLES +-- ===================================================== + +-- Table permissions +CREATE TABLE `permissions` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table menu +CREATE TABLE `menu` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `route` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table roles +CREATE TABLE `roles` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `designation` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `designation` (`designation`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table points_de_vente +CREATE TABLE `points_de_vente` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `nom` varchar(255) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `nom` (`nom`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table clients +CREATE TABLE `clients` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `nom` varchar(255) NOT NULL, + `prenom` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `telephone` varchar(255) NOT NULL, + `adresse` varchar(500) DEFAULT NULL, + `dateCreation` datetime NOT NULL, + `actif` tinyint(1) NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + KEY `idx_clients_email` (`email`), + KEY `idx_clients_telephone` (`telephone`) +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table users +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `lastname` varchar(255) NOT NULL, + `email` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `username` varchar(255) NOT NULL, + `role_id` int(11) NOT NULL, + `point_de_vente_id` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `email` (`email`), + UNIQUE KEY `username` (`username`), + KEY `role_id` (`role_id`), + KEY `point_de_vente_id` (`point_de_vente_id`), + CONSTRAINT `users_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`), + CONSTRAINT `users_ibfk_2` FOREIGN KEY (`point_de_vente_id`) REFERENCES `points_de_vente` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table products +CREATE TABLE `products` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) NOT NULL, + `price` decimal(10,2) NOT NULL, + `image` varchar(2000) DEFAULT NULL, + `category` varchar(255) NOT NULL, + `stock` int(11) NOT NULL DEFAULT 0, + `description` varchar(1000) DEFAULT NULL, + `qrCode` varchar(500) DEFAULT NULL, + `reference` varchar(255) DEFAULT NULL, + `point_de_vente_id` int(11) DEFAULT NULL, + `marque` varchar(255) DEFAULT NULL, + `ram` varchar(100) DEFAULT NULL, + `memoire_interne` varchar(100) DEFAULT NULL, + `imei` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `imei` (`imei`), + KEY `point_de_vente_id` (`point_de_vente_id`), + KEY `idx_products_category` (`category`), + KEY `idx_products_reference` (`reference`), + KEY `idx_products_imei` (`imei`), + CONSTRAINT `products_ibfk_1` FOREIGN KEY (`point_de_vente_id`) REFERENCES `points_de_vente` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=127 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table commandes +CREATE TABLE `commandes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `clientId` int(11) NOT NULL, + `dateCommande` datetime NOT NULL, + `statut` int(11) NOT NULL DEFAULT 0, + `montantTotal` decimal(10,2) NOT NULL, + `notes` varchar(1000) DEFAULT NULL, + `dateLivraison` datetime DEFAULT NULL, + `commandeurId` int(11) DEFAULT NULL, + `validateurId` int(11) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `commandeurId` (`commandeurId`), + KEY `validateurId` (`validateurId`), + KEY `idx_commandes_client` (`clientId`), + KEY `idx_commandes_date` (`dateCommande`), + CONSTRAINT `commandes_ibfk_1` FOREIGN KEY (`commandeurId`) REFERENCES `users` (`id`), + CONSTRAINT `commandes_ibfk_2` FOREIGN KEY (`validateurId`) REFERENCES `users` (`id`), + CONSTRAINT `commandes_ibfk_3` FOREIGN KEY (`clientId`) REFERENCES `clients` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table details_commandes +CREATE TABLE `details_commandes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `commandeId` int(11) NOT NULL, + `produitId` int(11) NOT NULL, + `quantite` int(11) NOT NULL, + `prixUnitaire` decimal(10,2) NOT NULL, + `sousTotal` decimal(10,2) NOT NULL, + `remise_type` enum('pourcentage','montant') DEFAULT NULL, + `remise_valeur` decimal(10,2) DEFAULT 0.00, + `montant_remise` decimal(10,2) DEFAULT 0.00, + `prix_final` decimal(10,2) NOT NULL DEFAULT 0.00, + `est_cadeau` tinyint(1) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `produitId` (`produitId`), + KEY `idx_details_commande` (`commandeId`), + KEY `idx_est_cadeau` (`est_cadeau`), + CONSTRAINT `details_commandes_ibfk_1` FOREIGN KEY (`commandeId`) REFERENCES `commandes` (`id`) ON DELETE CASCADE, + CONSTRAINT `details_commandes_ibfk_2` FOREIGN KEY (`produitId`) REFERENCES `products` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table role_permissions +CREATE TABLE `role_permissions` ( + `role_id` int(11) NOT NULL, + `permission_id` int(11) NOT NULL, + PRIMARY KEY (`role_id`,`permission_id`), + KEY `permission_id` (`permission_id`), + CONSTRAINT `role_permissions_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE, + CONSTRAINT `role_permissions_ibfk_2` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- Table role_menu_permissions +CREATE TABLE `role_menu_permissions` ( + `role_id` int(11) NOT NULL, + `menu_id` int(11) NOT NULL, + `permission_id` int(11) NOT NULL, + PRIMARY KEY (`role_id`,`menu_id`,`permission_id`), + KEY `menu_id` (`menu_id`), + KEY `permission_id` (`permission_id`), + CONSTRAINT `role_menu_permissions_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE, + CONSTRAINT `role_menu_permissions_ibfk_2` FOREIGN KEY (`menu_id`) REFERENCES `menu` (`id`) ON DELETE CASCADE, + CONSTRAINT `role_menu_permissions_ibfk_3` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- ===================================================== +-- INSERTION DES DONNÉES PAR DÉFAUT +-- ===================================================== + +-- Insertion des permissions par défaut +INSERT INTO `permissions` (`name`) VALUES +('view'), +('create'), +('update'), +('delete'), +('admin'), +('manage'), +('read'); + +-- Insertion des menus par défaut +INSERT INTO `menu` (`name`, `route`) VALUES +('Accueil', '/accueil'), +('Ajouter un utilisateur', '/ajouter-utilisateur'), +('Modifier/Supprimer un utilisateur', '/modifier-utilisateur'), +('Ajouter un produit', '/ajouter-produit'), +('Modifier/Supprimer un produit', '/modifier-produit'), +('Bilan', '/bilan'), +('Gérer les rôles', '/gerer-roles'), +('Gestion de stock', '/gestion-stock'), +('Historique', '/historique'), +('Déconnexion', '/deconnexion'), +('Nouvelle commande', '/nouvelle-commande'), +('Gérer les commandes', '/gerer-commandes'), +('Points de vente', '/points-de-vente'); + +-- Insertion des rôles par défaut +INSERT INTO `roles` (`designation`) VALUES +('Super Admin'), +('Admin'), +('User'), +('commercial'), +('caisse'); + +-- Attribution de TOUTES les permissions à TOUS les menus pour le Super Admin +-- On utilise une sous-requête pour récupérer l'ID réel du rôle Super Admin +INSERT INTO `role_menu_permissions` (`role_id`, `menu_id`, `permission_id`) +SELECT r.id, m.id, p.id +FROM menu m +CROSS JOIN permissions p +CROSS JOIN roles r +WHERE r.designation = 'Super Admin'; + +-- Attribution de permissions basiques pour Admin +-- Accès en lecture/écriture à la plupart des menus sauf gestion des rôles +INSERT INTO `role_menu_permissions` (`role_id`, `menu_id`, `permission_id`) +SELECT r.id, m.id, p.id +FROM menu m +CROSS JOIN permissions p +CROSS JOIN roles r +WHERE r.designation = 'Admin' +AND m.name != 'Gérer les rôles' +AND p.name IN ('view', 'create', 'update', 'read'); + +-- Attribution de permissions basiques pour User +-- Accès principalement en lecture et quelques actions de base +INSERT INTO `role_menu_permissions` (`role_id`, `menu_id`, `permission_id`) +SELECT r.id, m.id, p.id +FROM menu m +CROSS JOIN permissions p +CROSS JOIN roles r +WHERE r.designation = 'User' +AND m.name IN ('Accueil', 'Nouvelle commande', 'Gérer les commandes', 'Gestion de stock', 'Historique') +AND p.name IN ('view', 'read', 'create'); + +-- Attribution de permissions pour Commercial +-- Accès aux commandes, clients, produits +INSERT INTO `role_menu_permissions` (`role_id`, `menu_id`, `permission_id`) +SELECT r.id, m.id, p.id +FROM menu m +CROSS JOIN permissions p +CROSS JOIN roles r +WHERE r.designation = 'commercial' +AND m.name IN ('Accueil', 'Nouvelle commande', 'Gérer les commandes', 'Bilan', 'Historique') +AND p.name IN ('view', 'create', 'update', 'read'); + +-- Attribution de permissions pour Caisse +-- Accès principalement aux commandes et stock +INSERT INTO `role_menu_permissions` (`role_id`, `menu_id`, `permission_id`) +SELECT r.id, m.id, p.id +FROM menu m +CROSS JOIN permissions p +CROSS JOIN roles r +WHERE r.designation = 'caisse' +AND m.name IN ('Accueil', 'Nouvelle commande', 'Gestion de stock') +AND p.name IN ('view', 'create', 'read'); + +-- Insertion du Super Admin par défaut +-- On utilise une sous-requête pour récupérer l'ID réel du rôle Super Admin +INSERT INTO `users` (`name`, `lastname`, `email`, `password`, `username`, `role_id`) +SELECT 'Super', 'Admin', 'superadmin@youmazgestion.com', 'admin123', 'superadmin', r.id +FROM roles r +WHERE r.designation = 'Super Admin'; + +-- ===================================================== +-- DONNÉES D'EXEMPLE (OPTIONNEL) +-- ===================================================== + +-- Insertion d'un point de vente d'exemple +INSERT INTO `points_de_vente` (`nom`) VALUES ('Magasin Principal'); + +-- Insertion d'un client d'exemple +INSERT INTO `clients` (`nom`, `prenom`, `email`, `telephone`, `adresse`, `dateCreation`, `actif`) VALUES +('Dupont', 'Jean', 'jean.dupont@email.com', '0123456789', '123 Rue de la Paix, Paris', NOW(), 1); + +-- ===================================================== +-- VÉRIFICATIONS +-- ===================================================== + +-- Afficher les rôles créés +SELECT 'RÔLES CRÉÉS:' as info; +SELECT * FROM roles; + +-- Afficher les permissions créées +SELECT 'PERMISSIONS CRÉÉES:' as info; +SELECT * FROM permissions; + +-- Afficher les menus créés +SELECT 'MENUS CRÉÉS:' as info; +SELECT * FROM menu; + +-- Afficher le Super Admin créé +SELECT 'SUPER ADMIN CRÉÉ:' as info; +SELECT u.username, u.email, r.designation as role +FROM users u +JOIN roles r ON u.role_id = r.id +WHERE r.designation = 'Super Admin'; + +-- Vérifier les permissions du Super Admin +SELECT 'PERMISSIONS SUPER ADMIN:' as info; +SELECT COUNT(*) as total_permissions_assignees +FROM role_menu_permissions rmp +INNER JOIN roles r ON rmp.role_id = r.id +WHERE r.designation = 'Super Admin'; + +SELECT 'Script terminé avec succès!' as resultat; \ No newline at end of file diff --git a/lib/Services/stock_managementDatabase.dart b/lib/Services/stock_managementDatabase.dart index 005bf68..c46dc93 100644 --- a/lib/Services/stock_managementDatabase.dart +++ b/lib/Services/stock_managementDatabase.dart @@ -37,8 +37,6 @@ class AppDatabase { _connection = await _initDB(); // await _createDB(); - // Effectuer la migration pour les bases existantes - await migrateDatabaseForDiscountAndGift(); await insertDefaultPermissions(); await insertDefaultMenus(); @@ -68,169 +66,7 @@ class AppDatabase { } } - // Méthode mise à jour pour créer les tables avec les nouvelles colonnes -Future _createDB() async { - // final db = await database; - - // try { - // // Table roles - // await db.query(''' - // CREATE TABLE IF NOT EXISTS roles ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // designation VARCHAR(255) NOT NULL UNIQUE - // ) ENGINE=InnoDB - // '''); - - // // Table permissions - // await db.query(''' - // CREATE TABLE IF NOT EXISTS permissions ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // name VARCHAR(255) NOT NULL UNIQUE - // ) ENGINE=InnoDB - // '''); - - // // Table menu - // await db.query(''' - // CREATE TABLE IF NOT EXISTS menu ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // name VARCHAR(255) NOT NULL, - // route VARCHAR(255) NOT NULL - // ) ENGINE=InnoDB - // '''); - - // // Table role_permissions - // await db.query(''' - // CREATE TABLE IF NOT EXISTS role_permissions ( - // role_id INT, - // permission_id INT, - // PRIMARY KEY (role_id, permission_id), - // FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE, - // FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE - // ) ENGINE=InnoDB - // '''); - - // // Table role_menu_permissions - // await db.query(''' - // CREATE TABLE IF NOT EXISTS role_menu_permissions ( - // role_id INT, - // menu_id INT, - // permission_id INT, - // PRIMARY KEY (role_id, menu_id, permission_id), - // FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE, - // FOREIGN KEY (menu_id) REFERENCES menu(id) ON DELETE CASCADE, - // FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE - // ) ENGINE=InnoDB - // '''); - - // // Table points_de_vente - // await db.query(''' - // CREATE TABLE IF NOT EXISTS points_de_vente ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // nom VARCHAR(255) NOT NULL UNIQUE - // ) ENGINE=InnoDB - // '''); - - // // Table users - // await db.query(''' - // CREATE TABLE IF NOT EXISTS users ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // name VARCHAR(255) NOT NULL, - // lastname VARCHAR(255) NOT NULL, - // email VARCHAR(255) NOT NULL UNIQUE, - // password VARCHAR(255) NOT NULL, - // username VARCHAR(255) NOT NULL UNIQUE, - // role_id INT NOT NULL, - // point_de_vente_id INT, - // FOREIGN KEY (role_id) REFERENCES roles(id), - // FOREIGN KEY (point_de_vente_id) REFERENCES points_de_vente(id) - // ) ENGINE=InnoDB - // '''); - - // // Table products - // await db.query(''' - // CREATE TABLE IF NOT EXISTS products ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // name VARCHAR(255) NOT NULL, - // price DECIMAL(10,2) NOT NULL, - // image VARCHAR(2000), - // category VARCHAR(255) NOT NULL, - // stock INT NOT NULL DEFAULT 0, - // description VARCHAR(1000), - // qrCode VARCHAR(500), - // reference VARCHAR(255), - // point_de_vente_id INT, - // marque VARCHAR(255), - // ram VARCHAR(100), - // memoire_interne VARCHAR(100), - // imei VARCHAR(255) UNIQUE, - // FOREIGN KEY (point_de_vente_id) REFERENCES points_de_vente(id), - // INDEX idx_products_category (category), - // INDEX idx_products_reference (reference), - // INDEX idx_products_imei (imei) - // ) ENGINE=InnoDB - // '''); - - // // Table clients - // await db.query(''' - // CREATE TABLE IF NOT EXISTS clients ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // nom VARCHAR(255) NOT NULL, - // prenom VARCHAR(255) NOT NULL, - // email VARCHAR(255) NOT NULL UNIQUE, - // telephone VARCHAR(255) NOT NULL, - // adresse VARCHAR(500), - // dateCreation DATETIME NOT NULL, - // actif TINYINT(1) NOT NULL DEFAULT 1, - // INDEX idx_clients_email (email), - // INDEX idx_clients_telephone (telephone) - // ) ENGINE=InnoDB - // '''); - - // // Table commandes MISE À JOUR avec les champs de remise - // await db.query(''' - // CREATE TABLE IF NOT EXISTS commandes ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // clientId INT NOT NULL, - // dateCommande DATETIME NOT NULL, - // statut INT NOT NULL DEFAULT 0, - // montantTotal DECIMAL(10,2) NOT NULL, - // notes VARCHAR(1000), - // dateLivraison DATETIME, - // commandeurId INT, - // validateurId INT, - // remisePourcentage DECIMAL(5,2) NULL, - // remiseMontant DECIMAL(10,2) NULL, - // montantApresRemise DECIMAL(10,2) NULL, - // FOREIGN KEY (commandeurId) REFERENCES users(id), - // FOREIGN KEY (validateurId) REFERENCES users(id), - // FOREIGN KEY (clientId) REFERENCES clients(id), - // INDEX idx_commandes_client (clientId), - // INDEX idx_commandes_date (dateCommande) - // ) ENGINE=InnoDB - // '''); - - // // Table details_commandes MISE À JOUR avec le champ cadeau - // await db.query(''' - // CREATE TABLE IF NOT EXISTS details_commandes ( - // id INT AUTO_INCREMENT PRIMARY KEY, - // commandeId INT NOT NULL, - // produitId INT NOT NULL, - // quantite INT NOT NULL, - // prixUnitaire DECIMAL(10,2) NOT NULL, - // sousTotal DECIMAL(10,2) NOT NULL, - // estCadeau TINYINT(1) DEFAULT 0, - // FOREIGN KEY (commandeId) REFERENCES commandes(id) ON DELETE CASCADE, - // FOREIGN KEY (produitId) REFERENCES products(id), - // INDEX idx_details_commande (commandeId) - // ) ENGINE=InnoDB - // '''); - - // print("Tables créées avec succès avec les nouveaux champs !"); - // } catch (e) { - // print("Erreur lors de la création des tables: $e"); - // rethrow; - // } -} + // --- MÉTHODES D'INSERTION PAR DÉFAUT --- @@ -933,31 +769,37 @@ Future _createDB() async { // --- DÉTAILS COMMANDES --- Future createDetailCommande(DetailCommande detail) async { - final db = await database; - final detailMap = detail.toMap(); - detailMap.remove('id'); - - final fields = detailMap.keys.join(', '); - final placeholders = List.filled(detailMap.length, '?').join(', '); - - final result = await db.query( - 'INSERT INTO details_commandes ($fields) VALUES ($placeholders)', - detailMap.values.toList() - ); - return result.insertId!; - } + final db = await database; + final detailMap = detail.toMap(); + detailMap.remove('id'); + + final fields = detailMap.keys.join(', '); + final placeholders = List.filled(detailMap.length, '?').join(', '); + + final result = await db.query( + 'INSERT INTO details_commandes ($fields) VALUES ($placeholders)', + detailMap.values.toList() + ); + return result.insertId!; +} - Future> getDetailsCommande(int commandeId) async { - final db = await database; - final result = await db.query(''' - SELECT dc.*, p.name as produitNom, p.image as produitImage, p.reference as produitReference - FROM details_commandes dc - LEFT JOIN products p ON dc.produitId = p.id - WHERE dc.commandeId = ? - ORDER BY dc.id - ''', [commandeId]); - return result.map((row) => DetailCommande.fromMap(row.fields)).toList(); - } + // Méthode mise à jour pour récupérer les détails avec les remises +Future> getDetailsCommande(int commandeId) async { + final db = await database; + final result = await db.query(''' + SELECT + dc.*, + p.name as produitNom, + p.image as produitImage, + p.reference as produitReference + FROM details_commandes dc + LEFT JOIN products p ON dc.produitId = p.id + WHERE dc.commandeId = ? + ORDER BY dc.est_cadeau ASC, dc.id + ''', [commandeId]); + + return result.map((row) => DetailCommande.fromMap(row.fields)).toList(); +} // --- RECHERCHE PRODUITS --- @@ -1364,17 +1206,19 @@ Future _createDB() async { // --- TRANSACTIONS COMPLEXES --- - Future createCommandeComplete(Client client, Commande commande, List details) async { + +// Méthode pour créer une commande complète avec remises +Future createCommandeComplete(Client client, Commande commande, List details) async { final db = await database; try { await db.query('START TRANSACTION'); - // 1. Utiliser createOrGetClient au lieu de créer directement + // 1. Créer ou récupérer le client final existingOrNewClient = await createOrGetClient(client); final clientId = existingOrNewClient.id!; - // 2. Créer la commande avec le bon clientId + // 2. Créer la commande final commandeMap = commande.toMap(); commandeMap.remove('id'); commandeMap['clientId'] = clientId; @@ -1388,7 +1232,7 @@ Future _createDB() async { ); final commandeId = commandeResult.insertId!; - // 3. Créer les détails de commande + // 3. Créer les détails de commande avec remises for (final detail in details) { final detailMap = detail.toMap(); detailMap.remove('id'); @@ -1418,6 +1262,111 @@ Future _createDB() async { } } +// Méthode pour mettre à jour un détail de commande (utile pour modifier les remises) +Future updateDetailCommande(DetailCommande detail) async { + final db = await database; + final detailMap = detail.toMap(); + final id = detailMap.remove('id'); + + final setClause = detailMap.keys.map((key) => '$key = ?').join(', '); + final values = [...detailMap.values, id]; + + final result = await db.query( + 'UPDATE details_commandes SET $setClause WHERE id = ?', + values + ); + return result.affectedRows!; +} + + +// Méthode pour obtenir les statistiques des remises +Future> getRemiseStatistics() async { + final db = await database; + + try { + // Total des remises accordées + final totalRemisesResult = await db.query(''' + SELECT + COUNT(*) as nombre_remises, + SUM(montant_remise) as total_remises, + AVG(montant_remise) as moyenne_remise + FROM details_commandes + WHERE remise_type IS NOT NULL AND montant_remise > 0 + '''); + + // Remises par type + final remisesParTypeResult = await db.query(''' + SELECT + remise_type, + COUNT(*) as nombre, + SUM(montant_remise) as total, + AVG(remise_valeur) as moyenne_valeur + FROM details_commandes + WHERE remise_type IS NOT NULL AND montant_remise > 0 + GROUP BY remise_type + '''); + + // Produits avec le plus de remises + final produitsRemisesResult = await db.query(''' + SELECT + p.name as produit_nom, + COUNT(*) as nombre_remises, + SUM(dc.montant_remise) as total_remises + FROM details_commandes dc + INNER JOIN products p ON dc.produitId = p.id + WHERE dc.remise_type IS NOT NULL AND dc.montant_remise > 0 + GROUP BY dc.produitId, p.name + ORDER BY total_remises DESC + LIMIT 10 + '''); + + return { + 'total_remises': totalRemisesResult.first.fields, + 'remises_par_type': remisesParTypeResult.map((row) => row.fields).toList(), + 'produits_remises': produitsRemisesResult.map((row) => row.fields).toList(), + }; + } catch (e) { + print("Erreur lors du calcul des statistiques de remises: $e"); + return { + 'total_remises': {'nombre_remises': 0, 'total_remises': 0.0, 'moyenne_remise': 0.0}, + 'remises_par_type': [], + 'produits_remises': [], + }; + } +} + + +// Méthode pour obtenir les commandes avec le plus de remises +Future>> getCommandesAvecRemises({int limit = 20}) async { + final db = await database; + + try { + final result = await db.query(''' + SELECT + c.id as commande_id, + c.dateCommande, + c.montantTotal, + cl.nom as client_nom, + cl.prenom as client_prenom, + SUM(dc.montant_remise) as total_remises, + COUNT(CASE WHEN dc.remise_type IS NOT NULL THEN 1 END) as nombre_articles_remise, + COUNT(dc.id) as total_articles + FROM commandes c + INNER JOIN clients cl ON c.clientId = cl.id + INNER JOIN details_commandes dc ON c.id = dc.commandeId + GROUP BY c.id, c.dateCommande, c.montantTotal, cl.nom, cl.prenom + HAVING total_remises > 0 + ORDER BY total_remises DESC + LIMIT ? + ''', [limit]); + + return result.map((row) => row.fields).toList(); + } catch (e) { + print("Erreur lors de la récupération des commandes avec remises: $e"); + return []; + } +} + // --- STATISTIQUES AVANCÉES --- Future> getProductCountByCategory() async { @@ -1799,7 +1748,6 @@ Future findClientByAnyIdentifier({ String? nom, String? prenom, }) async { - final db = await database; // Recherche par email si fourni if (email != null && email.isNotEmpty) { @@ -1821,140 +1769,440 @@ Future findClientByAnyIdentifier({ return null; } - -Future migrateDatabaseForDiscountAndGift() async { +// +// Méthode pour obtenir les statistiques des cadeaux +Future> getCadeauStatistics() async { final db = await database; try { - // Ajouter les colonnes de remise à la table commandes - await db.query(''' - ALTER TABLE commandes - ADD COLUMN remisePourcentage DECIMAL(5,2) NULL + // Total des cadeaux offerts + final totalCadeauxResult = await db.query(''' + SELECT + COUNT(*) as nombre_cadeaux, + SUM(sousTotal) as valeur_totale_cadeaux, + AVG(sousTotal) as valeur_moyenne_cadeau, + SUM(quantite) as quantite_totale_cadeaux + FROM details_commandes + WHERE est_cadeau = 1 '''); - await db.query(''' - ALTER TABLE commandes - ADD COLUMN remiseMontant DECIMAL(10,2) NULL + // Cadeaux par produit + final cadeauxParProduitResult = await db.query(''' + SELECT + p.name as produit_nom, + p.category as produit_categorie, + COUNT(*) as nombre_fois_offert, + SUM(dc.quantite) as quantite_totale_offerte, + SUM(dc.sousTotal) as valeur_totale_offerte + FROM details_commandes dc + INNER JOIN products p ON dc.produitId = p.id + WHERE dc.est_cadeau = 1 + GROUP BY dc.produitId, p.name, p.category + ORDER BY quantite_totale_offerte DESC + LIMIT 10 '''); - await db.query(''' - ALTER TABLE commandes - ADD COLUMN montantApresRemise DECIMAL(10,2) NULL + // Commandes avec cadeaux + final commandesAvecCadeauxResult = await db.query(''' + SELECT + COUNT(DISTINCT c.id) as nombre_commandes_avec_cadeaux, + AVG(cadeau_stats.nombre_cadeaux_par_commande) as moyenne_cadeaux_par_commande, + AVG(cadeau_stats.valeur_cadeaux_par_commande) as valeur_moyenne_cadeaux_par_commande + FROM commandes c + INNER JOIN ( + SELECT + commandeId, + COUNT(*) as nombre_cadeaux_par_commande, + SUM(sousTotal) as valeur_cadeaux_par_commande + FROM details_commandes + WHERE est_cadeau = 1 + GROUP BY commandeId + ) cadeau_stats ON c.id = cadeau_stats.commandeId '''); - // Ajouter la colonne cadeau à la table details_commandes - await db.query(''' - ALTER TABLE details_commandes - ADD COLUMN estCadeau TINYINT(1) DEFAULT 0 + // Évolution des cadeaux par mois + final evolutionMensuelleResult = await db.query(''' + SELECT + DATE_FORMAT(c.dateCommande, '%Y-%m') as mois, + COUNT(dc.id) as nombre_cadeaux, + SUM(dc.sousTotal) as valeur_cadeaux + FROM details_commandes dc + INNER JOIN commandes c ON dc.commandeId = c.id + WHERE dc.est_cadeau = 1 + AND c.dateCommande >= DATE_SUB(NOW(), INTERVAL 12 MONTH) + GROUP BY DATE_FORMAT(c.dateCommande, '%Y-%m') + ORDER BY mois DESC + LIMIT 12 '''); - print("Migration pour remise et cadeau terminée avec succès"); + return { + 'total_cadeaux': totalCadeauxResult.first.fields, + 'cadeaux_par_produit': cadeauxParProduitResult.map((row) => row.fields).toList(), + 'commandes_avec_cadeaux': commandesAvecCadeauxResult.first.fields, + 'evolution_mensuelle': evolutionMensuelleResult.map((row) => row.fields).toList(), + }; } catch (e) { - // Les colonnes existent probablement déjà - print("Migration déjà effectuée ou erreur: $e"); + print("Erreur lors du calcul des statistiques de cadeaux: $e"); + return { + 'total_cadeaux': {'nombre_cadeaux': 0, 'valeur_totale_cadeaux': 0.0, 'valeur_moyenne_cadeau': 0.0, 'quantite_totale_cadeaux': 0}, + 'cadeaux_par_produit': [], + 'commandes_avec_cadeaux': {'nombre_commandes_avec_cadeaux': 0, 'moyenne_cadeaux_par_commande': 0.0, 'valeur_moyenne_cadeaux_par_commande': 0.0}, + 'evolution_mensuelle': [], + }; } } -Future> getDetailsCommandeAvecCadeaux(int commandeId) async { +// Méthode pour obtenir les commandes avec des cadeaux +Future>> getCommandesAvecCadeaux({int limit = 20}) async { final db = await database; - final result = await db.query(''' - SELECT dc.*, p.name as produitNom, p.image as produitImage, p.reference as produitReference - FROM details_commandes dc - LEFT JOIN products p ON dc.produitId = p.id - WHERE dc.commandeId = ? - ORDER BY dc.estCadeau ASC, dc.id - ''', [commandeId]); - return result.map((row) => DetailCommande.fromMap(row.fields)).toList(); + + try { + final result = await db.query(''' + SELECT + c.id as commande_id, + c.dateCommande, + c.montantTotal, + cl.nom as client_nom, + cl.prenom as client_prenom, + cadeau_stats.nombre_cadeaux, + cadeau_stats.valeur_cadeaux, + cadeau_stats.quantite_cadeaux, + (SELECT COUNT(*) FROM details_commandes WHERE commandeId = c.id) as total_articles + FROM commandes c + INNER JOIN clients cl ON c.clientId = cl.id + INNER JOIN ( + SELECT + commandeId, + COUNT(*) as nombre_cadeaux, + SUM(sousTotal) as valeur_cadeaux, + SUM(quantite) as quantite_cadeaux + FROM details_commandes + WHERE est_cadeau = 1 + GROUP BY commandeId + ) cadeau_stats ON c.id = cadeau_stats.commandeId + ORDER BY cadeau_stats.valeur_cadeaux DESC + LIMIT ? + ''', [limit]); + + return result.map((row) => row.fields).toList(); + } catch (e) { + print("Erreur lors de la récupération des commandes avec cadeaux: $e"); + return []; + } } - -Future updateCommandeAvecRemise(int commandeId, { - double? remisePourcentage, - double? remiseMontant, - double? montantApresRemise, -}) async { +// Méthode pour obtenir les produits les plus offerts en cadeau +Future>> getProduitsLesPlusOffertsEnCadeau({int limit = 10}) async { final db = await database; - List setClauses = []; - List values = []; - - if (remisePourcentage != null) { - setClauses.add('remisePourcentage = ?'); - values.add(remisePourcentage); + try { + final result = await db.query(''' + SELECT + p.id, + p.name as produit_nom, + p.price as prix_unitaire, + p.category as categorie, + p.stock, + COUNT(dc.id) as nombre_fois_offert, + SUM(dc.quantite) as quantite_totale_offerte, + SUM(dc.sousTotal) as valeur_totale_offerte, + COUNT(DISTINCT dc.commandeId) as nombre_commandes_distinctes + FROM products p + INNER JOIN details_commandes dc ON p.id = dc.produitId + WHERE dc.est_cadeau = 1 + GROUP BY p.id, p.name, p.price, p.category, p.stock + ORDER BY quantite_totale_offerte DESC + LIMIT ? + ''', [limit]); + + return result.map((row) => row.fields).toList(); + } catch (e) { + print("Erreur lors de la récupération des produits les plus offerts: $e"); + return []; } +} +// Méthode pour obtenir les clients qui ont reçu le plus de cadeaux +Future>> getClientsAvecLePlusDeCadeaux({int limit = 10}) async { + final db = await database; - if (remiseMontant != null) { - setClauses.add('remiseMontant = ?'); - values.add(remiseMontant); + try { + final result = await db.query(''' + SELECT + cl.id as client_id, + cl.nom, + cl.prenom, + cl.email, + cl.telephone, + COUNT(dc.id) as nombre_cadeaux_recus, + SUM(dc.quantite) as quantite_cadeaux_recus, + SUM(dc.sousTotal) as valeur_cadeaux_recus, + COUNT(DISTINCT c.id) as nombre_commandes_avec_cadeaux + FROM clients cl + INNER JOIN commandes c ON cl.id = c.clientId + INNER JOIN details_commandes dc ON c.id = dc.commandeId + WHERE dc.est_cadeau = 1 + GROUP BY cl.id, cl.nom, cl.prenom, cl.email, cl.telephone + ORDER BY valeur_cadeaux_recus DESC + LIMIT ? + ''', [limit]); + + return result.map((row) => row.fields).toList(); + } catch (e) { + print("Erreur lors de la récupération des clients avec le plus de cadeaux: $e"); + return []; } +} +// Méthode pour calculer l'impact des cadeaux sur les ventes +Future> getImpactCadeauxSurVentes() async { + final db = await database; - if (montantApresRemise != null) { - setClauses.add('montantApresRemise = ?'); - values.add(montantApresRemise); + try { + // Comparaison des commandes avec et sans cadeaux + final comparisonResult = await db.query(''' + SELECT + 'avec_cadeaux' as type_commande, + COUNT(DISTINCT c.id) as nombre_commandes, + AVG(c.montantTotal) as panier_moyen, + SUM(c.montantTotal) as chiffre_affaires_total + FROM commandes c + WHERE EXISTS ( + SELECT 1 FROM details_commandes dc + WHERE dc.commandeId = c.id AND dc.est_cadeau = 1 + ) + + UNION ALL + + SELECT + 'sans_cadeaux' as type_commande, + COUNT(DISTINCT c.id) as nombre_commandes, + AVG(c.montantTotal) as panier_moyen, + SUM(c.montantTotal) as chiffre_affaires_total + FROM commandes c + WHERE NOT EXISTS ( + SELECT 1 FROM details_commandes dc + WHERE dc.commandeId = c.id AND dc.est_cadeau = 1 + ) + '''); + + // Ratio de conversion (commandes avec cadeaux / total commandes) + final ratioResult = await db.query(''' + SELECT + (SELECT COUNT(DISTINCT c.id) + FROM commandes c + WHERE EXISTS ( + SELECT 1 FROM details_commandes dc + WHERE dc.commandeId = c.id AND dc.est_cadeau = 1 + ) + ) * 100.0 / COUNT(*) as pourcentage_commandes_avec_cadeaux + FROM commandes + '''); + + return { + 'comparaison': comparisonResult.map((row) => row.fields).toList(), + 'pourcentage_commandes_avec_cadeaux': ratioResult.first['pourcentage_commandes_avec_cadeaux'] ?? 0.0, + }; + } catch (e) { + print("Erreur lors du calcul de l'impact des cadeaux: $e"); + return { + 'comparaison': [], + 'pourcentage_commandes_avec_cadeaux': 0.0, + }; } - - if (setClauses.isEmpty) return 0; - - values.add(commandeId); - - final result = await db.query( - 'UPDATE commandes SET ${setClauses.join(', ')} WHERE id = ?', - values - ); - - return result.affectedRows!; } -Future createDetailCommandeCadeau(DetailCommande detail) async { +// Méthode pour créer une commande complète avec cadeaux (mise à jour) +Future createCommandeCompleteAvecCadeaux(Client client, Commande commande, List details) async { final db = await database; - final detailMap = detail.toMap(); - detailMap.remove('id'); - detailMap['estCadeau'] = 1; // Marquer comme cadeau - detailMap['prixUnitaire'] = 0.0; // Prix zéro pour les cadeaux - detailMap['sousTotal'] = 0.0; // Sous-total zéro pour les cadeaux + try { + await db.query('START TRANSACTION'); + + // 1. Créer ou récupérer le client + final existingOrNewClient = await createOrGetClient(client); + final clientId = existingOrNewClient.id!; + + // 2. Créer la commande + final commandeMap = commande.toMap(); + commandeMap.remove('id'); + commandeMap['clientId'] = clientId; + + final commandeFields = commandeMap.keys.join(', '); + final commandePlaceholders = List.filled(commandeMap.length, '?').join(', '); + + final commandeResult = await db.query( + 'INSERT INTO commandes ($commandeFields) VALUES ($commandePlaceholders)', + commandeMap.values.toList() + ); + final commandeId = commandeResult.insertId!; + + // 3. Créer les détails de commande avec remises et cadeaux + for (final detail in details) { + final detailMap = detail.toMap(); + detailMap.remove('id'); + detailMap['commandeId'] = commandeId; + + final detailFields = detailMap.keys.join(', '); + final detailPlaceholders = List.filled(detailMap.length, '?').join(', '); + + await db.query( + 'INSERT INTO details_commandes ($detailFields) VALUES ($detailPlaceholders)', + detailMap.values.toList() + ); + + // 4. Mettre à jour le stock (même pour les cadeaux) + await db.query( + 'UPDATE products SET stock = stock - ? WHERE id = ?', + [detail.quantite, detail.produitId] + ); + } + + await db.query('COMMIT'); + + // Log des cadeaux offerts (optionnel) + final cadeaux = details.where((d) => d.estCadeau).toList(); + if (cadeaux.isNotEmpty) { + print("Cadeaux offerts dans la commande $commandeId:"); + for (final cadeau in cadeaux) { + print(" - ${cadeau.produitNom} x${cadeau.quantite} (valeur: ${cadeau.sousTotal.toStringAsFixed(2)} MGA)"); + } + } + + return commandeId; + } catch (e) { + await db.query('ROLLBACK'); + print("Erreur lors de la création de la commande complète avec cadeaux: $e"); + rethrow; + } +} + +// Méthode pour valider la disponibilité des cadeaux avant la commande +Future> verifierDisponibiliteCadeaux(List details) async { + final db = await database; + List erreurs = []; - final fields = detailMap.keys.join(', '); - final placeholders = List.filled(detailMap.length, '?').join(', '); + try { + for (final detail in details.where((d) => d.estCadeau)) { + final produit = await getProductById(detail.produitId); + + if (produit == null) { + erreurs.add("Produit cadeau introuvable (ID: ${detail.produitId})"); + continue; + } + + if (produit.stock != null && produit.stock! < detail.quantite) { + erreurs.add("Stock insuffisant pour le cadeau: ${produit.name} (demandé: ${detail.quantite}, disponible: ${produit.stock})"); + } + } + } catch (e) { + erreurs.add("Erreur lors de la vérification des cadeaux: $e"); + } - final result = await db.query( - 'INSERT INTO details_commandes ($fields) VALUES ($placeholders)', - detailMap.values.toList() - ); - return result.insertId!; + return erreurs; } +// --- MÉTHODES POUR LES VENTES PAR POINT DE VENTE --- -Future> getCadeauxCommande(int commandeId) async { +Future>> getVentesParPointDeVente() async { final db = await database; - final result = await db.query(''' - SELECT dc.*, p.name as produitNom, p.image as produitImage, p.reference as produitReference - FROM details_commandes dc - LEFT JOIN products p ON dc.produitId = p.id - WHERE dc.commandeId = ? AND dc.estCadeau = 1 - ORDER BY dc.id - ''', [commandeId]); - return result.map((row) => DetailCommande.fromMap(row.fields)).toList(); + + try { + final result = await db.query(''' + SELECT + pv.id as point_vente_id, + pv.nom as point_vente_nom, + COUNT(DISTINCT c.id) as nombre_commandes, + COUNT(dc.id) as nombre_articles_vendus, + SUM(dc.quantite) as quantite_totale_vendue, + SUM(c.montantTotal) as chiffre_affaires, + AVG(c.montantTotal) as panier_moyen, + MIN(c.dateCommande) as premiere_vente, + MAX(c.dateCommande) as derniere_vente + FROM points_de_vente pv + LEFT JOIN products p ON pv.id = p.point_de_vente_id + LEFT JOIN details_commandes dc ON p.id = dc.produitId + LEFT JOIN commandes c ON dc.commandeId = c.id + WHERE c.statut != 5 -- Exclure les commandes annulées + GROUP BY pv.id, pv.nom + ORDER BY chiffre_affaires DESC + '''); + + return result.map((row) => row.fields).toList(); + } catch (e) { + print("Erreur getVentesParPointDeVente: $e"); + return []; + } } -Future calculateMontantTotalSansCadeaux(int commandeId) async { +Future>> getTopProduitsParPointDeVente(int pointDeVenteId, {int limit = 5}) async { final db = await database; - final result = await db.query(''' - SELECT SUM(sousTotal) as total - FROM details_commandes - WHERE commandeId = ? AND (estCadeau = 0 OR estCadeau IS NULL) - ''', [commandeId]); - final total = result.first['total']; - return total != null ? (total as num).toDouble() : 0.0; + try { + final result = await db.query(''' + SELECT + p.id, + p.name as produit_nom, + p.price as prix_unitaire, + p.category as categorie, + SUM(dc.quantite) as quantite_vendue, + SUM(dc.sousTotal) as chiffre_affaires_produit, + COUNT(DISTINCT dc.commandeId) as nombre_commandes + FROM products p + INNER JOIN details_commandes dc ON p.id = dc.produitId + INNER JOIN commandes c ON dc.commandeId = c.id + WHERE p.point_de_vente_id = ? AND c.statut != 5 + GROUP BY p.id, p.name, p.price, p.category + ORDER BY quantite_vendue DESC + LIMIT ? + ''', [pointDeVenteId, limit]); + + return result.map((row) => row.fields).toList(); + } catch (e) { + print("Erreur getTopProduitsParPointDeVente: $e"); + return []; + } } -Future supprimerRemiseCommande(int commandeId) async { +Future>> getVentesParPointDeVenteParMois(int pointDeVenteId) async { final db = await database; - final result = await db.query(''' - UPDATE commandes - SET remisePourcentage = NULL, remiseMontant = NULL, montantApresRemise = NULL - WHERE id = ? - ''', [commandeId]); - return result.affectedRows!; + try { + final result = await db.query(''' + SELECT + DATE_FORMAT(c.dateCommande, '%Y-%m') as mois, + COUNT(DISTINCT c.id) as nombre_commandes, + SUM(c.montantTotal) as chiffre_affaires, + SUM(dc.quantite) as quantite_vendue + FROM commandes c + INNER JOIN details_commandes dc ON c.id = dc.commandeId + INNER JOIN products p ON dc.produitId = p.id + WHERE p.point_de_vente_id = ? + AND c.statut != 5 + AND c.dateCommande >= DATE_SUB(NOW(), INTERVAL 12 MONTH) + GROUP BY DATE_FORMAT(c.dateCommande, '%Y-%m') + ORDER BY mois DESC + LIMIT 12 + ''', [pointDeVenteId]); + + return result.map((row) => row.fields).toList(); + } catch (e) { + print("Erreur getVentesParPointDeVenteParMois: $e"); + return []; + } +} +// Dans la classe AppDatabase, ajoutez cette méthode : +Future verifyCurrentUserPassword(String password) async { + final db = await database; + final userController = Get.find(); + + try { + final result = await db.query(''' + SELECT COUNT(*) as count + FROM users + WHERE id = ? AND password = ? + ''', [userController.userId, password]); + + return (result.first['count'] as int) > 0; + } catch (e) { + print("Erreur lors de la vérification du mot de passe: $e"); + return false; + } } } \ No newline at end of file diff --git a/lib/Views/Dashboard.dart b/lib/Views/Dashboard.dart index 07e5020..2d20280 100644 --- a/lib/Views/Dashboard.dart +++ b/lib/Views/Dashboard.dart @@ -61,14 +61,14 @@ void initState() { } void _loadData() { - _statsFuture = _database.getStatistiques(); - _recentOrdersFuture = _database.getCommandes().then((orders) => orders.take(5).toList()); - _lowStockProductsFuture = _database.getProducts().then((products) { - return products.where((p) => (p.stock ?? 0) < 10).toList(); - }); - _recentClientsFuture = _database.getClients().then((clients) => clients.take(5).toList()); - _allOrdersFuture = _database.getCommandes(); - _productsByCategoryFuture = _database.getProductCountByCategory(); + _statsFuture = _database.getStatistiques(); + _recentOrdersFuture = _database.getCommandes().then((orders) => orders.take(5).toList()); + _lowStockProductsFuture = _database.getProducts().then((products) { + return products.where((p) => (p.stock ?? 0) < 10).toList(); + }); + _recentClientsFuture = _database.getClients().then((clients) => clients.take(5).toList()); + _allOrdersFuture = _database.getCommandes(); + _productsByCategoryFuture = _database.getProductCountByCategory(); } Future _showCategoryProductsDialog(String category) async { final products = await _database.getProductsByCategory(category); @@ -185,7 +185,9 @@ Future _showCategoryProductsDialog(String category) async { // Histogramme des catégories de produits _buildCategoryHistogram(), SizedBox(height: 20), - + // NOUVEAU: Widget des ventes par point de vente + _buildVentesParPointDeVenteCard(), + SizedBox(height: 20), // Section des données récentes _buildRecentDataSection(), ], @@ -1087,6 +1089,411 @@ Future _showCategoryProductsDialog(String category) async { ); } +//widget vente +// 2. Ajoutez cette méthode dans la classe _DashboardPageState + +Widget _buildVentesParPointDeVenteCard() { + return Card( + elevation: 4, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + child: Padding( + padding: EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Icon(Icons.store, color: Colors.purple), + SizedBox(width: 8), + Text( + 'Ventes par Point de Vente', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + SizedBox(height: 16), + Container( + height: 400, + child: FutureBuilder>>( + future: _database.getVentesParPointDeVente(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center(child: CircularProgressIndicator()); + } + + if (snapshot.hasError || !snapshot.hasData || snapshot.data!.isEmpty) { + return Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon(Icons.store_mall_directory_outlined, size: 64, color: Colors.grey), + SizedBox(height: 16), + Text('Aucune donnée de vente par point de vente', style: TextStyle(color: Colors.grey)), + ], + ), + ); + } + + final ventesData = snapshot.data!; + + return SingleChildScrollView( + child: Column( + children: [ + // Graphique en barres des chiffres d'affaires + Container( + height: 200, + child: BarChart( + BarChartData( + alignment: BarChartAlignment.spaceAround, + maxY: _getMaxChiffreAffaires(ventesData) * 1.2, + barTouchData: BarTouchData( + enabled: true, + touchTooltipData: BarTouchTooltipData( + tooltipBgColor: Colors.blueGrey, + getTooltipItem: (group, groupIndex, rod, rodIndex) { + final pointVente = ventesData[groupIndex]; + final ca = pointVente['chiffre_affaires'] ?? 0.0; + final nbCommandes = pointVente['nombre_commandes'] ?? 0; + return BarTooltipItem( + '${pointVente['point_vente_nom']}\n${ca.toStringAsFixed(2)} MGA\n$nbCommandes commandes', + TextStyle(color: Colors.white, fontSize: 12), + ); + }, + ), + ), + titlesData: FlTitlesData( + show: true, + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + final index = value.toInt(); + if (index >= 0 && index < ventesData.length) { + final nom = ventesData[index]['point_vente_nom'] as String; + return Padding( + padding: const EdgeInsets.only(top: 8.0), + child: Text( + nom.length > 5 ? nom.substring(0, 5) : nom, + style: TextStyle( + fontSize: 10, + color: Colors.grey, + ), + ), + ); + } + return Text(''); + }, + reservedSize: 40, + ), + ), + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + getTitlesWidget: (value, meta) { + return Text( + _formatCurrency(value), + style: TextStyle( + fontSize: 10, + color: Colors.grey, + ), + ); + }, + reservedSize: 60, + ), + ), + topTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + rightTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + ), + borderData: FlBorderData( + show: true, + border: Border.all( + color: Colors.grey.withOpacity(0.3), + width: 1, + ), + ), + barGroups: ventesData.asMap().entries.map((entry) { + final index = entry.key; + final data = entry.value; + final ca = (data['chiffre_affaires'] as num?)?.toDouble() ?? 0.0; + + return BarChartGroupData( + x: index, + barRods: [ + BarChartRodData( + toY: ca, + color: _getPointVenteColor(index), + width: 16, + borderRadius: BorderRadius.circular(4), + backDrawRodData: BackgroundBarChartRodData( + show: true, + toY: _getMaxChiffreAffaires(ventesData) * 1.2, + color: Colors.grey.withOpacity(0.1), + ), + ), + ], + showingTooltipIndicators: [0], + ); + }).toList(), + ), + ), + ), + + SizedBox(height: 20), + + // Tableau détaillé + _buildTableauVentesPointDeVente(ventesData), + ], + ), + ); + }, + ), + ), + ], + ), + ), + ); +} + +Widget _buildTableauVentesPointDeVente(List> ventesData) { + return Container( + decoration: BoxDecoration( + border: Border.all(color: Colors.grey.withOpacity(0.3)), + borderRadius: BorderRadius.circular(8), + ), + child: Column( + children: [ + // En-tête du tableau + Container( + padding: EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.grey.withOpacity(0.1), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(8), + topRight: Radius.circular(8), + ), + ), + child: Row( + children: [ + Expanded(flex: 2, child: Text('Point de Vente', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12))), + Expanded(flex: 2, child: Text('CA (MGA)', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12))), + Expanded(flex: 1, child: Text('Cmd', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12))), + Expanded(flex: 1, child: Text('Articles', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12))), + Expanded(flex: 2, child: Text('Panier Moy.', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12))), + ], + ), + ), + + // Lignes du tableau + ...ventesData.asMap().entries.map((entry) { + final index = entry.key; + final data = entry.value; + final isEven = index % 2 == 0; + + return InkWell( + onTap: () => _showPointVenteDetails(data), + child: Container( + padding: EdgeInsets.all(12), + decoration: BoxDecoration( + color: isEven ? Colors.grey.withOpacity(0.05) : Colors.white, + ), + child: Row( + children: [ + Expanded( + flex: 2, + child: Row( + children: [ + Container( + width: 12, + height: 12, + decoration: BoxDecoration( + color: _getPointVenteColor(index), + borderRadius: BorderRadius.circular(2), + ), + ), + SizedBox(width: 8), + Expanded( + child: Text( + data['point_vente_nom'] ?? 'N/A', + style: TextStyle(fontSize: 12), + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ), + Expanded( + flex: 2, + child: Text( + '${((data['chiffre_affaires'] as num?)?.toDouble() ?? 0.0).toStringAsFixed(2)}', + style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500), + ), + ), + Expanded( + flex: 1, + child: Text( + '${data['nombre_commandes'] ?? 0}', + style: TextStyle(fontSize: 12), + ), + ), + Expanded( + flex: 1, + child: Text( + '${data['nombre_articles_vendus'] ?? 0}', + style: TextStyle(fontSize: 12), + ), + ), + Expanded( + flex: 2, + child: Text( + '${((data['panier_moyen'] as num?)?.toDouble() ?? 0.0).toStringAsFixed(2)}', + style: TextStyle(fontSize: 12), + ), + ), + ], + ), + ), + ); + }).toList(), + ], + ), + ); +} + +// Méthodes utilitaires +double _getMaxChiffreAffaires(List> ventesData) { + if (ventesData.isEmpty) return 100.0; + + return ventesData + .map((data) => (data['chiffre_affaires'] as num?)?.toDouble() ?? 0.0) + .reduce((a, b) => a > b ? a : b); +} + +Color _getPointVenteColor(int index) { + final colors = [ + Colors.blue, + Colors.green, + Colors.orange, + Colors.purple, + Colors.teal, + Colors.pink, + Colors.indigo, + Colors.amber, + Colors.cyan, + Colors.lime, + ]; + return colors[index % colors.length]; +} + +String _formatCurrency(double value) { + if (value >= 1000000) { + return '${(value / 1000000).toStringAsFixed(1)}M'; + } else if (value >= 1000) { + return '${(value / 1000).toStringAsFixed(1)}K'; + } else { + return value.toStringAsFixed(0); + } +} + +void _showPointVenteDetails(Map pointVenteData) async { + final pointVenteId = pointVenteData['point_vente_id'] as int; + final pointVenteNom = pointVenteData['point_vente_nom'] as String; + + showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text('Détails - $pointVenteNom'), + content: Container( + width: double.maxFinite, + height: 400, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Statistiques générales + _buildStatRow('Chiffre d\'affaires:', '${((pointVenteData['chiffre_affaires'] as num?)?.toDouble() ?? 0.0).toStringAsFixed(2)} MGA'), + _buildStatRow('Nombre de commandes:', '${pointVenteData['nombre_commandes'] ?? 0}'), + _buildStatRow('Articles vendus:', '${pointVenteData['nombre_articles_vendus'] ?? 0}'), + _buildStatRow('Quantité totale:', '${pointVenteData['quantite_totale_vendue'] ?? 0}'), + _buildStatRow('Panier moyen:', '${((pointVenteData['panier_moyen'] as num?)?.toDouble() ?? 0.0).toStringAsFixed(2)} MGA'), + + SizedBox(height: 16), + Text('Top 5 des produits:', style: TextStyle(fontWeight: FontWeight.bold)), + SizedBox(height: 8), + + // Top produits + FutureBuilder>>( + future: _database.getTopProduitsParPointDeVente(pointVenteId), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center(child: CircularProgressIndicator()); + } + + if (snapshot.hasError || !snapshot.hasData || snapshot.data!.isEmpty) { + return Text('Aucun produit vendu', style: TextStyle(color: Colors.grey)); + } + + final produits = snapshot.data!; + return Column( + children: produits.map((produit) => Padding( + padding: EdgeInsets.symmetric(vertical: 4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + produit['produit_nom'] ?? 'N/A', + style: TextStyle(fontSize: 12), + overflow: TextOverflow.ellipsis, + ), + ), + Text( + '${produit['quantite_vendue'] ?? 0} vendus', + style: TextStyle(fontSize: 12, color: Colors.grey), + ), + ], + ), + )).toList(), + ); + }, + ), + ], + ), + ), + ), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context), + child: Text('Fermer'), + ), + ], + ), + ); +} + +Widget _buildStatRow(String label, String value) { + return Padding( + padding: EdgeInsets.symmetric(vertical: 4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(label, style: TextStyle(fontSize: 12)), + Text(value, style: TextStyle(fontSize: 12, fontWeight: FontWeight.w500)), + ], + ), + ); +} + + + Widget _buildLowStockCard() { return Card( diff --git a/lib/Views/commandManagement.dart b/lib/Views/commandManagement.dart index e31cf46..1b23a2d 100644 --- a/lib/Views/commandManagement.dart +++ b/lib/Views/commandManagement.dart @@ -13,16 +13,17 @@ import 'package:open_file/open_file.dart'; import 'package:youmazgestion/Components/app_bar.dart'; import 'package:youmazgestion/Components/appDrawer.dart'; import 'package:youmazgestion/Components/commandManagementComponents/CommandeActions.dart'; -import 'package:youmazgestion/Components/commandManagementComponents/DiscountDialog.dart'; -import 'package:youmazgestion/Components/commandManagementComponents/GiftSelectionDialog.dart'; +import 'package:youmazgestion/Components/commandManagementComponents/PaswordRequired.dart'; import 'package:youmazgestion/Components/commandManagementComponents/PaymentMethod.dart'; import 'package:youmazgestion/Components/commandManagementComponents/PaymentMethodDialog.dart'; -import 'package:youmazgestion/Components/commandManagementComponents/PaymentType.dart'; +import 'package:youmazgestion/Components/paymentType.dart'; + import 'package:youmazgestion/Models/client.dart'; import 'package:youmazgestion/Services/stock_managementDatabase.dart'; import 'package:youmazgestion/controller/userController.dart'; import 'package:youmazgestion/Models/produit.dart'; import '../Components/commandManagementComponents/CommandDetails.dart'; + class GestionCommandesPage extends StatefulWidget { const GestionCommandesPage({super.key}); @@ -108,9 +109,6 @@ class _GestionCommandesPageState extends State { clientNom: commandeExistante.clientNom, clientPrenom: commandeExistante.clientPrenom, clientEmail: commandeExistante.clientEmail, - remisePourcentage: commandeExistante.remisePourcentage, - remiseMontant: commandeExistante.remiseMontant, - montantApresRemise: commandeExistante.montantApresRemise, )); } else { await _database.updateStatutCommande(commandeId, newStatut); @@ -165,76 +163,6 @@ class _GestionCommandesPageState extends State { } } - Future _showDiscountDialog(Commande commande) async { - final discountData = await showDialog>( - context: context, - builder: (context) => DiscountDialog(commande: commande), - ); - - if (discountData != null) { - // Mettre à jour la commande avec la remise - final commandeAvecRemise = Commande( - id: commande.id, - clientId: commande.clientId, - dateCommande: commande.dateCommande, - statut: commande.statut, - montantTotal: commande.montantTotal, - notes: commande.notes, - dateLivraison: commande.dateLivraison, - commandeurId: commande.commandeurId, - validateurId: commande.validateurId, - clientNom: commande.clientNom, - clientPrenom: commande.clientPrenom, - clientEmail: commande.clientEmail, - remisePourcentage: discountData['pourcentage'], - remiseMontant: discountData['montant'], - montantApresRemise: discountData['montantFinal'], - ); - - await _database.updateCommande(commandeAvecRemise); - await _loadCommandes(); - - Get.snackbar( - 'Succès', - 'Remise appliquée avec succès', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green, - colorText: Colors.white, - ); - } - } - - Future _showGiftDialog(Commande commande) async { - final selectedProduct = await showDialog( - context: context, - builder: (context) => GiftSelectionDialog(commande: commande), - ); - - if (selectedProduct != null) { - // Ajouter le produit cadeau à la commande avec prix = 0 - final detailCadeau = DetailCommande( - commandeId: commande.id!, - produitId: selectedProduct.id!, - quantite: 1, - prixUnitaire: 0.0, // Prix = 0 pour un cadeau - sousTotal: 0.0, - produitNom: selectedProduct.name, - estCadeau: true, // Nouveau champ pour identifier les cadeaux - ); - - await _database.createDetailCommande(detailCadeau); - await _loadCommandes(); - - Get.snackbar( - 'Succès', - 'Cadeau ajouté à la commande', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green, - colorText: Colors.white, - ); - } - } - Future _showCashPaymentDialog(Commande commande, double amountGiven) async { final amountController = TextEditingController( text: amountGiven.toStringAsFixed(2), @@ -243,21 +171,14 @@ class _GestionCommandesPageState extends State { await showDialog( context: context, builder: (context) { - final montantFinal = commande.montantApresRemise ?? commande.montantTotal; + final montantFinal = commande.montantTotal; final change = amountGiven - montantFinal; return AlertDialog( title: const Text('Paiement en liquide'), content: Column( mainAxisSize: MainAxisSize.min, children: [ - if (commande.montantApresRemise != null) ...[ - Text('Montant original: ${commande.montantTotal.toStringAsFixed(2)} MGA'), - Text('Remise: ${(commande.montantTotal - commande.montantApresRemise!).toStringAsFixed(2)} MGA'), - const SizedBox(height: 5), - Text('Montant à payer: ${montantFinal.toStringAsFixed(2)} MGA', - style: const TextStyle(fontWeight: FontWeight.bold)), - ] else - Text('Montant total: ${montantFinal.toStringAsFixed(2)} MGA'), + Text('Montant total: ${montantFinal.toStringAsFixed(2)} MGA'), const SizedBox(height: 10), TextField( controller: amountController, @@ -315,7 +236,10 @@ class _GestionCommandesPageState extends State { final font = pw.Font.ttf(await rootBundle.load('assets/fa-solid-900.ttf')); return pw.Text(String.fromCharCode(0xf095), style: pw.TextStyle(font: font)); } - +Future buildIconGift() async { + final font = pw.Font.ttf(await rootBundle.load('assets/NotoEmoji-Regular.ttf')); + return pw.Text('🎁', style: pw.TextStyle(font: font, fontSize: 16)); +} Future buildIconCheckedText() async { final font = pw.Font.ttf(await rootBundle.load('assets/fa-solid-900.ttf')); return pw.Text(String.fromCharCode(0xf14a), style: pw.TextStyle(font: font)); @@ -326,513 +250,1640 @@ class _GestionCommandesPageState extends State { return pw.Text(String.fromCharCode(0xf0ac), style: pw.TextStyle(font: font)); } - Future _generateInvoice(Commande commande) async { - final details = await _database.getDetailsCommande(commande.id!); - final client = await _database.getClientById(commande.clientId); - final pointDeVente = await _database.getPointDeVenteById(1); - final iconPhone = await buildIconPhoneText(); - final iconChecked = await buildIconCheckedText(); - final iconGlobe = await buildIconGlobeText(); - - final List> detailsAvecProduits = []; - for (final detail in details) { - final produit = await _database.getProductById(detail.produitId); - detailsAvecProduits.add({ - 'detail': detail, - 'produit': produit, - }); +// Bon de livraison============================================== +Future _generateBonLivraison(Commande commande) async { + final details = await _database.getDetailsCommande(commande.id!); + final client = await _database.getClientById(commande.clientId); + final pointDeVente = await _database.getPointDeVenteById(1); + + // Récupérer les informations des vendeurs + final commandeur = commande.commandeurId != null + ? await _database.getUserById(commande.commandeurId!) + : null; + final validateur = commande.validateurId != null + ? await _database.getUserById(commande.validateurId!) + : null; + + final iconPhone = await buildIconPhoneText(); + final iconChecked = await buildIconCheckedText(); + final iconGlobe = await buildIconGlobeText(); + + double sousTotal = 0; + double totalRemises = 0; + double totalCadeaux = 0; + int nombreCadeaux = 0; + + for (final detail in details) { + sousTotal += detail.sousTotal; + if (detail.estCadeau) { + totalCadeaux += detail.sousTotal; + nombreCadeaux += detail.quantite; + } else { + totalRemises += detail.montantRemise; } - - final pdf = pw.Document(); - final imageBytes = await loadImage(); - final image = pw.MemoryImage(imageBytes); - final italicFont = pw.Font.ttf(await rootBundle.load('assets/fonts/Roboto-Italic.ttf')); - - final smallTextStyle = pw.TextStyle(fontSize: 9); - final smallBoldTextStyle = pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold); - final normalTextStyle = pw.TextStyle(fontSize: 10); - final boldTextStyle = pw.TextStyle(fontSize: 10, fontWeight: pw.FontWeight.bold); - final boldTexClienttStyle = pw.TextStyle(fontSize: 12, fontWeight: pw.FontWeight.bold); - final frameTextStyle = pw.TextStyle(fontSize: 10); - final italicTextStyle = pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold, font: italicFont); - final italicTextStyleLogo = pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold, font: italicFont); - - pdf.addPage( - pw.Page( - margin: const pw.EdgeInsets.all(20), - build: (pw.Context context) { - return pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, - children: [ - // En-tête avec logo et informations - pw.Row( - crossAxisAlignment: pw.CrossAxisAlignment.start, - mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, - children: [ - pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, - children: [ - pw.Container( - width: 150, - height: 150, - child: pw.Image(image), + } + + final List> detailsAvecProduits = []; + for (final detail in details) { + final produit = await _database.getProductById(detail.produitId); + detailsAvecProduits.add({ + 'detail': detail, + 'produit': produit, + }); + } + + final pdf = pw.Document(); + final imageBytes = await loadImage(); + final image = pw.MemoryImage(imageBytes); + final italicFont = pw.Font.ttf(await rootBundle.load('assets/fonts/Roboto-Italic.ttf')); + + // Tailles de texte encore plus réduites pour 2 exemplaires + final tinyTextStyle = pw.TextStyle(fontSize: 6); + final smallTextStyle = pw.TextStyle(fontSize: 7); + final normalTextStyle = pw.TextStyle(fontSize: 8); + final boldTextStyle = pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold); + final boldClientStyle = pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold); + final frameTextStyle = pw.TextStyle(fontSize: 7); + final italicTextStyle = pw.TextStyle(fontSize: 6, fontWeight: pw.FontWeight.bold, font: italicFont); + final italicLogoStyle = pw.TextStyle(fontSize: 5, fontWeight: pw.FontWeight.bold, font: italicFont); + final titleStyle = pw.TextStyle(fontSize: 10, fontWeight: pw.FontWeight.bold); + + // Fonction pour créer un exemplaire + pw.Widget buildExemplaire(String typeExemplaire, {bool isSecond = false}) { + return pw.Container( + width: double.infinity, + decoration: pw.BoxDecoration( + border: pw.Border.all(color: PdfColors.black, width: 1), + ), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + // En-tête avec indication de l'exemplaire + pw.Container( + width: double.infinity, + padding: const pw.EdgeInsets.all(4), + decoration: pw.BoxDecoration( + color: typeExemplaire == "CLIENT" ? PdfColors.blue100 : PdfColors.green100, + ), + child: pw.Center( + child: pw.Text( + 'BON DE LIVRAISON - EXEMPLAIRE $typeExemplaire', + style: pw.TextStyle( + fontSize: 9, + fontWeight: pw.FontWeight.bold, + color: typeExemplaire == "CLIENT" ? PdfColors.blue800 : PdfColors.green800, + ), + ), + ), + ), + + pw.Padding( + padding: const pw.EdgeInsets.all(8), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + // En-tête principal + pw.Row( + crossAxisAlignment: pw.CrossAxisAlignment.start, + mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, + children: [ + // Logo et infos entreprise - très compact + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Container( + width: 60, + height: 60, + child: pw.Image(image), + ), + pw.Text('NOTRE COMPETENCE, A VOTRE SERVICE', style: italicLogoStyle), + pw.SizedBox(height: 4), + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text('📍 REMAX Andravoangy', style: tinyTextStyle), + pw.Text('📍 SUPREME CENTER Behoririka', style: tinyTextStyle), + pw.Text('📞 033 37 808 18', style: tinyTextStyle), + pw.Text('🌐 www.guycom.mg', style: tinyTextStyle), + pw.SizedBox(height: 2), + // Ajout du NIF + pw.Text('NIF: 1026/GC78-20-02-22', style: pw.TextStyle(fontSize: 6, fontWeight: pw.FontWeight.bold)), + ], + ), + ], + ), + + // Informations centrales + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.center, + children: [ + pw.Text('Date: ${DateFormat('dd/MM/yyyy').format(DateTime.now())}', style: boldClientStyle), + pw.SizedBox(height: 4), + pw.Container(width: 100, height: 1, color: PdfColors.black), + pw.SizedBox(height: 4), + pw.Container( + padding: const pw.EdgeInsets.all(4), + decoration: pw.BoxDecoration( + border: pw.Border.all(color: PdfColors.black), + ), + child: pw.Column( + children: [ + pw.Text('Boutique:', style: frameTextStyle), + pw.Text('${pointDeVente?['nom'] ?? 'S405A'}', style: boldTextStyle), + pw.SizedBox(height: 2), + pw.Text('Bon N°:', style: frameTextStyle), + pw.Text('${pointDeVente?['nom'] ?? 'S405A'}-P${commande.id}', style: boldTextStyle), + ], + ), + ), + ], + ), + + // Informations client - compact + pw.Container( + width: 130, + decoration: pw.BoxDecoration( + border: pw.Border.all(color: PdfColors.black, width: 1), ), - pw.Text(' NOTRE COMPETENCE, A VOTRE SERVICE', style: italicTextStyleLogo), - pw.SizedBox(height: 12), - pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, + padding: const pw.EdgeInsets.all(6), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.center, children: [ - pw.Row(children: [iconChecked, pw.SizedBox(width: 5), pw.Text('REMAX by GUYCOM Andravoangy', style: smallTextStyle)]), - pw.Row(children: [iconChecked, pw.SizedBox(width: 5), pw.Text('SUPREME CENTER Behoririka box 405', style: smallTextStyle)]), - pw.Row(children: [iconChecked, pw.SizedBox(width: 5), pw.Text('SUPREME CENTER Behoririka box 416', style: smallTextStyle)]), - pw.Row(children: [iconChecked, pw.SizedBox(width: 5), pw.Text('SUPREME CENTER Behoririka box 119', style: smallTextStyle)]), - pw.Row(children: [iconChecked, pw.SizedBox(width: 5), pw.Text('TRIPOLITSA Analakely BOX 7', style: smallTextStyle)]), + pw.Text('CLIENT', style: frameTextStyle), + pw.SizedBox(height: 2), + pw.Text('ID: ${pointDeVente?['nom'] ?? 'S405A'}-${client?.id ?? 'Non spécifié'}', style: smallTextStyle), + pw.Container(width: 100, height: 1, color: PdfColors.black, margin: const pw.EdgeInsets.symmetric(vertical: 2)), + pw.Text(client?.nom ?? 'Non spécifié', style: boldTextStyle), + pw.SizedBox(height: 2), + pw.Text(client?.telephone ?? 'Non spécifié', style: tinyTextStyle), ], ), - pw.SizedBox(height: 10), - pw.Row(children: [iconPhone, pw.SizedBox(width: 5), pw.Text('033 37 808 18', style: smallTextStyle)]), - pw.Row(children: [iconGlobe, pw.SizedBox(width: 5), pw.Text('www.guycom.mg', style: smallTextStyle)]), - pw.Text('Facebook: GuyCom', style: smallTextStyle), - ], - ), - pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.center, - children: [ - pw.Text('Date: ${DateFormat('dd/MM/yyyy').format(DateTime.now())}', style: boldTexClienttStyle), - pw.SizedBox(height: 10), - pw.Container(width: 200, height: 1, color: PdfColors.black), - pw.SizedBox(height: 10), - pw.Row( + ), + ], + ), + + pw.SizedBox(height: 6), + + // Tableau des produits - très compact + pw.Table( + border: pw.TableBorder.all(width: 0.5), + columnWidths: { + 0: const pw.FlexColumnWidth(3.5), + 1: const pw.FlexColumnWidth(0.8), + 2: const pw.FlexColumnWidth(1.2), + 3: const pw.FlexColumnWidth(1.5), + 4: const pw.FlexColumnWidth(1.2), + }, + children: [ + pw.TableRow( + decoration: const pw.BoxDecoration(color: PdfColors.grey200), + children: [ + pw.Padding(padding: const pw.EdgeInsets.all(2), child: pw.Text('Désignations', style: boldTextStyle)), + pw.Padding(padding: const pw.EdgeInsets.all(2), child: pw.Text('Qté', style: boldTextStyle, textAlign: pw.TextAlign.center)), + pw.Padding(padding: const pw.EdgeInsets.all(2), child: pw.Text('P.U.', style: boldTextStyle, textAlign: pw.TextAlign.right)), + pw.Padding(padding: const pw.EdgeInsets.all(2), child: pw.Text('Remise/Cadeau', style: boldTextStyle, textAlign: pw.TextAlign.center)), + pw.Padding(padding: const pw.EdgeInsets.all(2), child: pw.Text('Montant', style: boldTextStyle, textAlign: pw.TextAlign.right)), + ], + ), + + ...detailsAvecProduits.map((item) { + final detail = item['detail'] as DetailCommande; + final produit = item['produit']; + + return pw.TableRow( + decoration: detail.estCadeau + ? const pw.BoxDecoration(color: PdfColors.green50) + : detail.aRemise + ? const pw.BoxDecoration(color: PdfColors.orange50) + : null, children: [ - pw.Container( - width: 100, - height: 40, - padding: const pw.EdgeInsets.all(5), + pw.Padding( + padding: const pw.EdgeInsets.all(2), child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ - pw.Text('Boutique:', style: frameTextStyle), - pw.Text('${pointDeVente?['nom'] ?? 'S405A'}', style: boldTexClienttStyle), - ] - ) + pw.Row( + children: [ + pw.Expanded( + child: pw.Text(detail.produitNom ?? 'Produit inconnu', + style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), + ), + if (detail.estCadeau) + pw.Container( + padding: const pw.EdgeInsets.symmetric(horizontal: 2, vertical: 1), + decoration: pw.BoxDecoration( + color: PdfColors.green, + borderRadius: pw.BorderRadius.circular(2), + ), + child: pw.Text('🎁', style: pw.TextStyle(fontSize: 5, color: PdfColors.white)), + ), + ], + ), + if (produit?.category != null && produit!.category.isNotEmpty) + pw.Text('${produit.category}${produit?.marque != null && produit!.marque.isNotEmpty ? ' - ${produit.marque}' : ''}', style: tinyTextStyle), + if (produit?.imei != null && produit!.imei!.isNotEmpty) + pw.Text('IMEI: ${produit.imei}', style: tinyTextStyle), + ], + ), ), - pw.SizedBox(width: 10), - pw.Container( - width: 100, - height: 40, - padding: const pw.EdgeInsets.all(5), + pw.Padding( + padding: const pw.EdgeInsets.all(2), + child: pw.Text('${detail.quantite}', style: normalTextStyle, textAlign: pw.TextAlign.center), + ), + pw.Padding( + padding: const pw.EdgeInsets.all(2), child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.end, children: [ - pw.Text('Bon de livraison N°:', style: frameTextStyle), - pw.Text('${pointDeVente?['nom'] ?? 'S405A'}-P${commande.id}', style: boldTexClienttStyle), - ] - ) + if (detail.estCadeau) ...[ + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: pw.TextStyle(fontSize: 5, decoration: pw.TextDecoration.lineThrough, color: PdfColors.grey600)), + pw.Text('GRATUIT', style: pw.TextStyle(fontSize: 6, color: PdfColors.green700, fontWeight: pw.FontWeight.bold)), + ] else if (detail.aRemise) ...[ + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: pw.TextStyle(fontSize: 5, decoration: pw.TextDecoration.lineThrough, color: PdfColors.grey600)), + pw.Text('${(detail.prixFinal / detail.quantite).toStringAsFixed(0)}', + style: pw.TextStyle(fontSize: 7, color: PdfColors.orange)), + ] else + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', style: smallTextStyle), + ], + ), + ), + pw.Padding( + padding: const pw.EdgeInsets.all(2), + child: pw.Text( + detail.estCadeau + ? 'CADEAU' + : detail.aRemise + ? 'REMISE' + : '-', + style: pw.TextStyle( + fontSize: 6, + color: detail.estCadeau ? PdfColors.green700 : detail.aRemise ? PdfColors.orange : PdfColors.grey600, + fontWeight: detail.estCadeau ? pw.FontWeight.bold : pw.FontWeight.normal, + ), + textAlign: pw.TextAlign.center, + ), + ), + pw.Padding( + padding: const pw.EdgeInsets.all(2), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.end, + children: [ + if (detail.estCadeau) ...[ + pw.Text('${detail.sousTotal.toStringAsFixed(0)}', + style: pw.TextStyle(fontSize: 5, decoration: pw.TextDecoration.lineThrough, color: PdfColors.grey600)), + pw.Text('GRATUIT', style: pw.TextStyle(fontSize: 6, fontWeight: pw.FontWeight.bold, color: PdfColors.green700)), + ] else if (detail.aRemise) ...[ + pw.Text('${detail.sousTotal.toStringAsFixed(0)}', + style: pw.TextStyle(fontSize: 5, decoration: pw.TextDecoration.lineThrough, color: PdfColors.grey600)), + pw.Text('${detail.prixFinal.toStringAsFixed(0)}', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), + ] else + pw.Text('${detail.prixFinal.toStringAsFixed(0)}', style: smallTextStyle), + ], + ), ), ], - ), - pw.SizedBox(height: 20), - pw.Container( - width: 300, - height: 100, - decoration: pw.BoxDecoration( - border: pw.Border.all(color: PdfColors.black, width: 1), - ), - padding: const pw.EdgeInsets.all(10), - child: pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.center, - children: [ - pw.Text('ID Client: ', style: frameTextStyle), - pw.SizedBox(height: 5), - pw.Text('${pointDeVente?['nom'] ?? 'S405A'} - ${client?.id ?? 'Non spécifié'}', style: boldTexClienttStyle), - pw.SizedBox(height: 5), - pw.Container(width: 200, height: 1, color: PdfColors.black), - pw.Text(client?.nom ?? 'Non spécifié', style: boldTexClienttStyle), - pw.SizedBox(height: 10), - pw.Text(client?.telephone ?? 'Non spécifié', style: frameTextStyle), + ); + }).toList(), + ], + ), + + pw.SizedBox(height: 6), + + // Section finale - très compacte + pw.Row( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + // Totaux + pw.Expanded( + flex: 2, + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.end, + children: [ + if (totalRemises > 0 || totalCadeaux > 0) ...[ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('SOUS-TOTAL:', style: smallTextStyle), + pw.SizedBox(width: 10), + pw.Text('${sousTotal.toStringAsFixed(0)}', style: smallTextStyle), + ], + ), + pw.SizedBox(height: 2), ], - ), + + if (totalRemises > 0) ...[ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('REMISES:', style: pw.TextStyle(color: PdfColors.orange, fontSize: 7)), + pw.SizedBox(width: 10), + pw.Text('-${totalRemises.toStringAsFixed(0)}', style: pw.TextStyle(color: PdfColors.orange, fontSize: 7)), + ], + ), + pw.SizedBox(height: 2), + ], + + if (totalCadeaux > 0) ...[ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('CADEAUX ($nombreCadeaux):', style: pw.TextStyle(color: PdfColors.green700, fontSize: 7)), + pw.SizedBox(width: 10), + pw.Text('-${totalCadeaux.toStringAsFixed(0)}', style: pw.TextStyle(color: PdfColors.green700, fontSize: 7)), + ], + ), + pw.SizedBox(height: 2), + ], + + pw.Container(width: 120, height: 1, color: PdfColors.black, margin: const pw.EdgeInsets.symmetric(vertical: 2)), + + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('TOTAL:', style: boldTextStyle), + pw.SizedBox(width: 10), + pw.Text('${commande.montantTotal.toStringAsFixed(0)} MGA', style: boldTextStyle), + ], + ), + + if (totalCadeaux > 0) ...[ + pw.SizedBox(height: 4), + pw.Container( + padding: const pw.EdgeInsets.all(4), + decoration: pw.BoxDecoration( + color: PdfColors.green50, + borderRadius: pw.BorderRadius.circular(3), + ), + child: pw.Text( + '🎁 $nombreCadeaux cadeau(s) offert(s) (${totalCadeaux.toStringAsFixed(0)} MGA)', + style: pw.TextStyle(fontSize: 6, color: PdfColors.green700), + ), + ), + ], + ], ), - ], - ), - ], - ), - - pw.SizedBox(height: 20), - - // Tableau des produits - pw.Table( - border: pw.TableBorder.all(width: 0.5), - columnWidths: { - 0: const pw.FlexColumnWidth(3), - 1: const pw.FlexColumnWidth(1), - 2: const pw.FlexColumnWidth(2), - 3: const pw.FlexColumnWidth(2), - }, - children: [ - pw.TableRow( - decoration: const pw.BoxDecoration(color: PdfColors.grey200), - children: [ - pw.Padding(padding: const pw.EdgeInsets.all(4), child: pw.Text('Désignations', style: boldTextStyle)), - pw.Padding(padding: const pw.EdgeInsets.all(4), child: pw.Text('Qté', style: boldTextStyle, textAlign: pw.TextAlign.center)), - pw.Padding(padding: const pw.EdgeInsets.all(4), child: pw.Text('Prix unitaire', style: boldTextStyle, textAlign: pw.TextAlign.right)), - pw.Padding(padding: const pw.EdgeInsets.all(4), child: pw.Text('Montant', style: boldTextStyle, textAlign: pw.TextAlign.right)), - ], - ), - - ...detailsAvecProduits.map((item) { - final detail = item['detail'] as DetailCommande; - final produit = item['produit']; + ), - return pw.TableRow( - children: [ - pw.Padding( - padding: const pw.EdgeInsets.all(4), - child: pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, + pw.SizedBox(width: 15), + + // Informations vendeurs et signatures + pw.Expanded( + flex: 3, + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + // Vendeurs + pw.Container( + padding: const pw.EdgeInsets.all(4), + decoration: pw.BoxDecoration( + color: PdfColors.grey100, + borderRadius: pw.BorderRadius.circular(3), + ), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text('VENDEURS', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), + pw.SizedBox(height: 2), + pw.Row( + children: [ + pw.Expanded( + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text('Initiateur:', style: tinyTextStyle), + pw.Text( + commandeur != null ? '${commandeur.name} ${commandeur.lastName ?? ''}'.trim() : 'N/A', + style: pw.TextStyle(fontSize: 6), + ), + ], + ), + ), + pw.Expanded( + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text('Validateur:', style: tinyTextStyle), + pw.Text( + validateur != null ? '${validateur.name} ${validateur.lastName ?? ''}'.trim() : 'N/A', + style: pw.TextStyle(fontSize: 6), + ), + ], + ), + ), + ], + ), + ], + ), + ), + + pw.SizedBox(height: 8), + + // Signatures + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, children: [ - pw.Row( + pw.Column( children: [ - pw.Text(detail.produitNom ?? 'Produit inconnu', - style: pw.TextStyle(fontSize: 10, fontWeight: pw.FontWeight.bold)), - if (detail.estCadeau == true) - pw.Text(' (CADEAU)', - style: pw.TextStyle(fontSize: 8, color: PdfColors.red, fontWeight: pw.FontWeight.bold)), + pw.Text('Vendeur', style: pw.TextStyle(fontSize: 6, fontWeight: pw.FontWeight.bold)), + pw.SizedBox(height: 10), + pw.Container(width: 60, height: 1, color: PdfColors.black), + ], + ), + pw.Column( + children: [ + pw.Text('Client', style: pw.TextStyle(fontSize: 6, fontWeight: pw.FontWeight.bold)), + pw.SizedBox(height: 10), + pw.Container(width: 60, height: 1, color: PdfColors.black), ], ), - pw.SizedBox(height: 2), - if (produit?.category != null && produit!.category.isNotEmpty && produit?.marque != null && produit!.marque.isNotEmpty) - pw.Text('${produit.category} ${produit.marque}', style: smallTextStyle), - if (produit?.imei != null && produit!.imei!.isNotEmpty) - pw.Text('${produit.imei}', style: smallTextStyle), - if (produit?.reference != null && produit!.reference!.isNotEmpty && produit?.ram != null && produit!.ram!.isNotEmpty && produit?.memoireInterne != null && produit!.memoireInterne!.isNotEmpty) - pw.Text('${produit.ram} | ${produit.memoireInterne} | ${produit.reference}', style: smallTextStyle), ], ), - ), - pw.Padding( - padding: const pw.EdgeInsets.all(4), - child: pw.Text('${detail.quantite}', style: normalTextStyle, textAlign: pw.TextAlign.center), - ), - pw.Padding( - padding: const pw.EdgeInsets.all(4), - child: pw.Text(detail.estCadeau == true ? 'OFFERT' : '${detail.prixUnitaire.toStringAsFixed(0)}', - style: normalTextStyle, textAlign: pw.TextAlign.right), - ), - pw.Padding( - padding: const pw.EdgeInsets.all(4), - child: pw.Text(detail.estCadeau == true ? 'OFFERT' : '${detail.sousTotal.toStringAsFixed(0)}', - style: normalTextStyle, textAlign: pw.TextAlign.right), - ), - ], - ); - }).toList(), + ], + ), + ), + ], + ), + + pw.SizedBox(height: 4), + + // Note finale + pw.Text( + 'Arrêté à la somme de: ${_numberToWords(commande.montantTotal.toInt())} Ariary', + style: italicTextStyle, + ), + ], + ), + ), + ], + ), + ); + } + + pdf.addPage( + pw.Page( + pageFormat: PdfPageFormat.a4.landscape, + margin: const pw.EdgeInsets.all(10), + build: (pw.Context context) { + return pw.Column( + children: [ + // Exemplaire CLIENT + pw.Expanded( + child: buildExemplaire("CLIENT"), + ), + + pw.SizedBox(height: 8), + + // Ligne de séparation avec ciseaux + pw.Container( + width: double.infinity, + child: pw.Row( + children: [ + pw.Expanded(child: pw.Container(height: 1, color: PdfColors.grey400)), + pw.Padding( + padding: const pw.EdgeInsets.symmetric(horizontal: 8), + child: pw.Text('✂️ DÉCOUPER ICI ✂️', style: pw.TextStyle(fontSize: 8, color: PdfColors.grey600)), + ), + pw.Expanded(child: pw.Container(height: 1, color: PdfColors.grey400)), ], ), - - pw.SizedBox(height: 10), - - // Totaux avec remise - pw.Column( - children: [ - if (commande.montantApresRemise != null) ...[ - pw.Row( - mainAxisAlignment: pw.MainAxisAlignment.end, + ), + + pw.SizedBox(height: 8), + + // Exemplaire MAGASIN + pw.Expanded( + child: buildExemplaire("MAGASIN", isSecond: true), + ), + ], + ); + }, + ), + ); + + // Sauvegarder le PDF + final output = await getTemporaryDirectory(); + final file = File("${output.path}/bon_livraison_${commande.id}.pdf"); + await file.writeAsBytes(await pdf.save()); + + // Partager ou ouvrir le fichier + await OpenFile.open(file.path); +} +//============================================================== + + + // Modifiez la méthode _generateInvoice dans GestionCommandesPage +Future _generateInvoice(Commande commande) async { + final details = await _database.getDetailsCommande(commande.id!); + final client = await _database.getClientById(commande.clientId); + final pointDeVente = await _database.getPointDeVenteById(1); + + // NOUVEAU: Récupérer les informations des vendeurs + final commandeur = commande.commandeurId != null + ? await _database.getUserById(commande.commandeurId!) + : null; + final validateur = commande.validateurId != null + ? await _database.getUserById(commande.validateurId!) + : null; + + final iconPhone = await buildIconPhoneText(); + final iconChecked = await buildIconCheckedText(); + final iconGlobe = await buildIconGlobeText(); + + double sousTotal = 0; + double totalRemises = 0; + double totalCadeaux = 0; + int nombreCadeaux = 0; + + for (final detail in details) { + sousTotal += detail.sousTotal; + if (detail.estCadeau) { + totalCadeaux += detail.sousTotal; + nombreCadeaux += detail.quantite; + } else { + totalRemises += detail.montantRemise; + } + } + + final List> detailsAvecProduits = []; + for (final detail in details) { + final produit = await _database.getProductById(detail.produitId); + detailsAvecProduits.add({ + 'detail': detail, + 'produit': produit, + }); + } + + final pdf = pw.Document(); + final imageBytes = await loadImage(); + final image = pw.MemoryImage(imageBytes); + final italicFont = pw.Font.ttf(await rootBundle.load('assets/fonts/Roboto-Italic.ttf')); + + // Tailles de texte réduites pour le mode paysage + final smallTextStyle = pw.TextStyle(fontSize: 7); + final normalTextStyle = pw.TextStyle(fontSize: 8); + final boldTextStyle = pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold); + final boldTexClienttStyle = pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold); + final frameTextStyle = pw.TextStyle(fontSize: 8); + final italicTextStyle = pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold, font: italicFont); + final italicTextStyleLogo = pw.TextStyle(fontSize: 6, fontWeight: pw.FontWeight.bold, font: italicFont); + final emojiSuportFont = pw.Font.ttf( await rootBundle.load('assets/NotoEmoji-Regular.ttf')); + final emojifont = pw.TextStyle(fontSize: 6, fontWeight: pw.FontWeight.bold, font: emojiSuportFont); + + pdf.addPage( + pw.Page( + pageFormat: PdfPageFormat.a4.landscape, // Mode paysage + margin: const pw.EdgeInsets.all(15), // Marges réduites + build: (pw.Context context) { + return pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + // En-tête avec logo et informations - optimisé pour paysage + pw.Row( + crossAxisAlignment: pw.CrossAxisAlignment.start, + mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, + children: [ + // Section logo et adresses - réduite + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Container( + width: 100, // Taille logo réduite + height: 100, + child: pw.Image(image), + ), + pw.Text(' NOTRE COMPETENCE, A VOTRE SERVICE', style: italicTextStyleLogo), + pw.SizedBox(height: 8), + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ - pw.Text('SOUS-TOTAL', style: normalTextStyle), - pw.SizedBox(width: 20), - pw.Text('${commande.montantTotal.toStringAsFixed(0)}', style: normalTextStyle), + pw.Row(children: [iconChecked, pw.SizedBox(width: 3), pw.Text('REMAX by GUYCOM Andravoangy', style: smallTextStyle)]), + pw.Row(children: [iconChecked, pw.SizedBox(width: 3), pw.Text('SUPREME CENTER Behoririka box 405', style: smallTextStyle)]), + pw.Row(children: [iconChecked, pw.SizedBox(width: 3), pw.Text('SUPREME CENTER Behoririka box 416', style: smallTextStyle)]), + pw.Row(children: [iconChecked, pw.SizedBox(width: 3), pw.Text('SUPREME CENTER Behoririka box 119', style: smallTextStyle)]), + pw.Row(children: [iconChecked, pw.SizedBox(width: 3), pw.Text('TRIPOLITSA Analakely BOX 7', style: smallTextStyle)]), ], ), - pw.SizedBox(height: 5), + pw.SizedBox(height: 6), + pw.Row(children: [iconPhone, pw.SizedBox(width: 3), pw.Text('033 37 808 18', style: smallTextStyle)]), + pw.Row(children: [iconGlobe, pw.SizedBox(width: 3), pw.Text('www.guycom.mg', style: smallTextStyle)]), + pw.Text('Facebook: GuyCom', style: smallTextStyle), + ], + ), + + // Section centrale - informations commande + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.center, + children: [ + pw.Text('Date: ${DateFormat('dd/MM/yyyy').format(DateTime.now())}', style: boldTexClienttStyle), + pw.SizedBox(height: 6), + pw.Container(width: 150, height: 1, color: PdfColors.black), + pw.SizedBox(height: 6), pw.Row( - mainAxisAlignment: pw.MainAxisAlignment.end, children: [ - pw.Text('REMISE', style: normalTextStyle), - pw.SizedBox(width: 20), - pw.Text('-${(commande.montantTotal - commande.montantApresRemise!).toStringAsFixed(0)}', - style: pw.TextStyle(fontSize: 10, color: PdfColors.red)), + pw.Container( + width: 80, + height: 35, + padding: const pw.EdgeInsets.all(4), + child: pw.Column( + children: [ + pw.Text('Boutique:', style: frameTextStyle), + pw.Text('${pointDeVente?['nom'] ?? 'S405A'}', style: boldTexClienttStyle), + ] + ) + ), + pw.SizedBox(width: 8), + pw.Container( + width: 80, + height: 35, + padding: const pw.EdgeInsets.all(4), + child: pw.Column( + children: [ + pw.Text('Facture N°:', style: frameTextStyle), + pw.Text('${pointDeVente?['nom'] ?? 'S405A'}-P${commande.id}', style: boldTexClienttStyle), + ] + ) + ), ], ), - pw.SizedBox(height: 5), - pw.Container(width: 200, height: 1, color: PdfColors.black), - pw.SizedBox(height: 5), ], - pw.Row( - mainAxisAlignment: pw.MainAxisAlignment.end, + ), + + // Section client - compacte + pw.Container( + width: 200, + height: 80, + decoration: pw.BoxDecoration( + border: pw.Border.all(color: PdfColors.black, width: 1), + ), + padding: const pw.EdgeInsets.all(8), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.center, children: [ - pw.Text('TOTAL', style: boldTextStyle), - pw.SizedBox(width: 20), - pw.Text('${(commande.montantApresRemise ?? commande.montantTotal).toStringAsFixed(0)}', style: boldTextStyle), + pw.Text('ID Client: ', style: frameTextStyle), + pw.SizedBox(height: 3), + pw.Text('${pointDeVente?['nom'] ?? 'S405A'} - ${client?.id ?? 'Non spécifié'}', style: boldTexClienttStyle), + pw.SizedBox(height: 3), + pw.Container(width: 150, height: 1, color: PdfColors.black), + pw.Text(client?.nom ?? 'Non spécifié', style: boldTexClienttStyle), + pw.SizedBox(height: 3), + pw.Text(client?.telephone ?? 'Non spécifié', style: frameTextStyle), ], ), + ), + ], + ), + + pw.SizedBox(height: 10), + + // Tableau des produits avec cadeaux - optimisé pour paysage + pw.Table( + border: pw.TableBorder.all(width: 0.5), + columnWidths: { + 0: const pw.FlexColumnWidth(4), // Plus d'espace pour les désignations + 1: const pw.FlexColumnWidth(1), + 2: const pw.FlexColumnWidth(1.5), + 3: const pw.FlexColumnWidth(2), // Colonne remise/cadeau + 4: const pw.FlexColumnWidth(1.5), // Colonne montant + }, + children: [ + pw.TableRow( + decoration: const pw.BoxDecoration(color: PdfColors.grey200), + children: [ + pw.Padding(padding: const pw.EdgeInsets.all(3), child: pw.Text('Désignations', style: boldTextStyle)), + pw.Padding(padding: const pw.EdgeInsets.all(3), child: pw.Text('Qté', style: boldTextStyle, textAlign: pw.TextAlign.center)), + pw.Padding(padding: const pw.EdgeInsets.all(3), child: pw.Text('Prix unitaire', style: boldTextStyle, textAlign: pw.TextAlign.right)), + pw.Padding(padding: const pw.EdgeInsets.all(3), child: pw.Text('Remise/Cadeau', style: boldTextStyle, textAlign: pw.TextAlign.right)), + pw.Padding(padding: const pw.EdgeInsets.all(3), child: pw.Text('Montant', style: boldTextStyle, textAlign: pw.TextAlign.right)), ], ), - pw.SizedBox(height: 10), - - pw.Text('Arrêté à la somme de: ${_numberToWords((commande.montantApresRemise ?? commande.montantTotal).toInt())} Ariary', style: italicTextStyle), + ...detailsAvecProduits.map((item) { + final detail = item['detail'] as DetailCommande; + final produit = item['produit']; + + return pw.TableRow( + decoration: detail.estCadeau + ? const pw.BoxDecoration( + color: PdfColors.green50, + border: pw.Border( + left: pw.BorderSide( + color: PdfColors.green300, + width: 3, + ), + ), + ) + : detail.aRemise + ? const pw.BoxDecoration( + color: PdfColors.orange50, + border: pw.Border( + left: pw.BorderSide( + color: PdfColors.orange300, + width: 3, + ), + ), + ) + : null, + children: [ + pw.Padding( + padding: const pw.EdgeInsets.all(3), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Row( + children: [ + pw.Expanded( + child: pw.Text(detail.produitNom ?? 'Produit inconnu', + style: pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold)), + ), + if (detail.estCadeau) + pw.Container( + padding: const pw.EdgeInsets.symmetric(horizontal: 3, vertical: 1), + decoration: pw.BoxDecoration( + color: PdfColors.green100, + borderRadius: pw.BorderRadius.circular(3), + ), + child: pw.Text( + 'CADEAU', + style: pw.TextStyle( + fontSize: 6, + fontWeight: pw.FontWeight.bold, + color: PdfColors.green700, + ), + ), + ), + ], + ), + pw.SizedBox(height: 1), + if (produit?.category != null && produit!.category.isNotEmpty && produit?.marque != null && produit!.marque.isNotEmpty) + pw.Text('${produit.category} - ${produit.marque}', style: smallTextStyle), + if (produit?.imei != null && produit!.imei!.isNotEmpty) + pw.Text('${produit.imei}', style: smallTextStyle), + if (produit?.reference != null && produit!.reference!.isNotEmpty && produit?.ram != null && produit!.ram!.isNotEmpty && produit?.memoireInterne != null && produit!.memoireInterne!.isNotEmpty) + pw.Text('${produit.ram} | ${produit.memoireInterne} | ${produit.reference}', style: smallTextStyle), + ], + ), + ), + pw.Padding( + padding: const pw.EdgeInsets.all(3), + child: pw.Text('${detail.quantite}', style: normalTextStyle, textAlign: pw.TextAlign.center), + ), + pw.Padding( + padding: const pw.EdgeInsets.all(3), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.end, + children: [ + if (detail.estCadeau) ...[ + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: pw.TextStyle( + fontSize: 6, + decoration: pw.TextDecoration.lineThrough, + color: PdfColors.grey600, + )), + pw.Text('GRATUIT', + style: pw.TextStyle( + fontSize: 7, + color: PdfColors.green700, + fontWeight: pw.FontWeight.bold, + )), + ] else if (detail.aRemise && detail.prixUnitaire != detail.sousTotal / detail.quantite) ...[ + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: pw.TextStyle( + fontSize: 6, + decoration: pw.TextDecoration.lineThrough, + color: PdfColors.grey600, + )), + pw.Text('${(detail.prixFinal / detail.quantite).toStringAsFixed(0)}', + style: pw.TextStyle(fontSize: 8, color: PdfColors.orange)), + ] else + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: normalTextStyle), + ], + ), + ), + pw.Padding( + padding: const pw.EdgeInsets.all(3), + child: pw.Text( + detail.estCadeau + ? 'CADEAU OFFERT' + : detail.aRemise + ? detail.remiseDescription + : '-', + style: pw.TextStyle( + fontSize: 7, + color: detail.estCadeau + ? PdfColors.green700 + : detail.aRemise + ? PdfColors.orange + : PdfColors.grey600, + fontWeight: detail.estCadeau ? pw.FontWeight.bold : pw.FontWeight.normal, + ), + textAlign: pw.TextAlign.right, + ), + ), + pw.Padding( + padding: const pw.EdgeInsets.all(3), + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.end, + children: [ + if (detail.estCadeau) ...[ + pw.Text('${detail.sousTotal.toStringAsFixed(0)}', + style: pw.TextStyle( + fontSize: 6, + decoration: pw.TextDecoration.lineThrough, + color: PdfColors.grey600, + )), + pw.Text('GRATUIT', + style: pw.TextStyle( + fontSize: 7, + fontWeight: pw.FontWeight.bold, + color: PdfColors.green700, + )), + ] else if (detail.aRemise && detail.sousTotal != detail.prixFinal) ...[ + pw.Text('${detail.sousTotal.toStringAsFixed(0)}', + style: pw.TextStyle( + fontSize: 6, + decoration: pw.TextDecoration.lineThrough, + color: PdfColors.grey600, + )), + pw.Text('${detail.prixFinal.toStringAsFixed(0)}', + style: pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold)), + ] else + pw.Text('${detail.prixFinal.toStringAsFixed(0)}', + style: normalTextStyle), + ], + ), + ), + ], + ); + }).toList(), + ], + ), + + pw.SizedBox(height: 8), + + // Sections inférieures en colonnes pour optimiser l'espace + pw.Row( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + // Colonne gauche - Totaux + pw.Expanded( + flex: 2, + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.end, + children: [ + if (totalRemises > 0 || totalCadeaux > 0) ...[ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('SOUS-TOTAL', style: normalTextStyle), + pw.SizedBox(width: 15), + pw.Text('${sousTotal.toStringAsFixed(0)}', style: normalTextStyle), + ], + ), + pw.SizedBox(height: 3), + ], + + if (totalRemises > 0) ...[ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('REMISES TOTALES', style: pw.TextStyle(color: PdfColors.orange, fontSize: 8)), + pw.SizedBox(width: 15), + pw.Text('-${totalRemises.toStringAsFixed(0)}', + style: pw.TextStyle(color: PdfColors.orange, fontWeight: pw.FontWeight.bold, fontSize: 8)), + ], + ), + pw.SizedBox(height: 3), + ], + + if (totalCadeaux > 0) ...[ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('CADEAUX OFFERTS ($nombreCadeaux)', + style: pw.TextStyle(color: PdfColors.green700, fontSize: 8)), + pw.SizedBox(width: 15), + pw.Text('-${totalCadeaux.toStringAsFixed(0)}', + style: pw.TextStyle(color: PdfColors.green700, fontWeight: pw.FontWeight.bold, fontSize: 8)), + ], + ), + pw.SizedBox(height: 3), + ], + + if (totalRemises > 0 || totalCadeaux > 0) ...[ + pw.Container( + width: 150, + height: 1, + color: PdfColors.black, + margin: const pw.EdgeInsets.symmetric(vertical: 3), + ), + ], + + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.end, + children: [ + pw.Text('TOTAL', style: boldTextStyle), + pw.SizedBox(width: 15), + pw.Text('${commande.montantTotal.toStringAsFixed(0)}', style: boldTextStyle), + ], + ), + + if (totalRemises > 0 || totalCadeaux > 0) ...[ + pw.SizedBox(height: 3), + pw.Text( + 'Économies réalisées: ${(totalRemises + totalCadeaux).toStringAsFixed(0)} MGA', + style: pw.TextStyle( + fontSize: 7, + color: PdfColors.green, + fontStyle: pw.FontStyle.italic, + ), + ), + ], + ], + ), + ), - pw.SizedBox(height: 30), + pw.SizedBox(width: 20), - // Signatures - pw.Row( - mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, - children: [ - pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, - children: [ - pw.Text('Signature du vendeur', style: smallTextStyle), - pw.SizedBox(height: 20), - pw.Container(width: 150, height: 1, color: PdfColors.black), - ], + // Colonne droite - Informations vendeurs + pw.Expanded( + flex: 3, + child: pw.Container( + padding: const pw.EdgeInsets.all(8), + decoration: pw.BoxDecoration( + color: PdfColors.grey100, + borderRadius: pw.BorderRadius.circular(6), + border: pw.Border.all(color: PdfColors.grey300), ), - pw.Column( + child: pw.Column( crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ - pw.Text('Signature du client', style: smallTextStyle), - pw.SizedBox(height: 20), - pw.Container(width: 150, height: 1, color: PdfColors.black), + pw.Text( + 'INFORMATIONS VENDEURS', + style: pw.TextStyle( + fontSize: 9, + fontWeight: pw.FontWeight.bold, + color: PdfColors.blue700, + ), + ), + pw.SizedBox(height: 6), + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, + children: [ + pw.Expanded( + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text( + 'Vendeur initiateur:', + style: pw.TextStyle( + fontSize: 7, + fontWeight: pw.FontWeight.bold, + color: PdfColors.grey700, + ), + ), + pw.SizedBox(height: 1), + pw.Text( + commandeur != null + ? '${commandeur.name} ${commandeur.lastName ?? ''}'.trim() + : 'Non spécifié', + style: pw.TextStyle( + fontSize: 8, + color: PdfColors.black, + ), + ), + pw.SizedBox(height: 2), + pw.Text( + 'Date: ${DateFormat('dd/MM/yyyy HH:mm').format(commande.dateCommande)}', + style: pw.TextStyle( + fontSize: 6, + color: PdfColors.grey600, + ), + ), + ], + ), + ), + pw.Container( + width: 1, + height: 30, + color: PdfColors.grey400, + ), + pw.SizedBox(width: 15), + pw.Expanded( + child: pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text( + 'Vendeur validateur:', + style: pw.TextStyle( + fontSize: 7, + fontWeight: pw.FontWeight.bold, + color: PdfColors.grey700, + ), + ), + pw.SizedBox(height: 1), + pw.Text( + validateur != null + ? '${validateur.name} ${validateur.lastName ?? ''}'.trim() + : 'Non spécifié', + style: pw.TextStyle( + fontSize: 8, + color: PdfColors.black, + ), + ), + pw.SizedBox(height: 2), + pw.Text( + 'Date: ${DateFormat('dd/MM/yyyy HH:mm').format(DateTime.now())}', + style: pw.TextStyle( + fontSize: 6, + color: PdfColors.grey600, + ), + ), + ], + ), + ), + ], + ), ], ), + ), + ), + ], + ), + + pw.SizedBox(height: 8), + + // Montant en lettres + pw.Text('Arrêté à la somme de: ${_numberToWords(commande.montantTotal.toInt())} Ariary', style: italicTextStyle), + + pw.SizedBox(height: 8), + + // Note de remerciement pour les cadeaux - compacte + if (totalCadeaux > 0) ...[ + pw.Container( + padding: const pw.EdgeInsets.all(6), + decoration: pw.BoxDecoration( + color: PdfColors.blue50, + borderRadius: pw.BorderRadius.circular(4), + ), + child: pw.Row( + children: [ + pw.Text('🎁 ', style: emojifont), + pw.Expanded( + child: pw.Text( + 'Merci de votre confiance ! Nous espérons que nos cadeaux vous feront plaisir. ($nombreCadeaux article(s) offert(s) - Valeur: ${totalCadeaux.toStringAsFixed(0)} MGA)', + style: pw.TextStyle( + fontSize: 7, + fontStyle: pw.FontStyle.italic, + color: PdfColors.blue700, + ), + ), + ), + ], + ), + ), + pw.SizedBox(height: 8), + ], + + // Signatures - horizontales et compactes + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, + children: [ + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text( + 'Signature vendeur initiateur', + style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold), + ), + pw.SizedBox(height: 1), + pw.Text( + commandeur != null + ? '${commandeur.name} ${commandeur.lastName ?? ''}'.trim() + : 'Non spécifié', + style: pw.TextStyle(fontSize: 6, color: PdfColors.grey600), + ), + pw.SizedBox(height: 15), + pw.Container(width: 100, height: 1, color: PdfColors.black), + ], + ), + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text( + 'Signature vendeur validateur', + style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold), + ), + pw.SizedBox(height: 1), + pw.Text( + validateur != null + ? '${validateur.name} ${validateur.lastName ?? ''}'.trim() + : 'Non spécifié', + style: pw.TextStyle(fontSize: 6, color: PdfColors.grey600), + ), + pw.SizedBox(height: 15), + pw.Container(width: 100, height: 1, color: PdfColors.black), + ], + ), + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Text( + 'Signature du client', + style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold), + ), + pw.SizedBox(height: 1), + pw.Text( + client?.nomComplet ?? 'Non spécifié', + style: pw.TextStyle(fontSize: 6, color: PdfColors.grey600), + ), + pw.SizedBox(height: 15), + pw.Container(width: 100, height: 1, color: PdfColors.black), ], ), ], - ); - }, - ), - ); + ), + ], + ); + }, + ), +); - final output = await getTemporaryDirectory(); - final file = File('${output.path}/facture_${commande.id}.pdf'); - await file.writeAsBytes(await pdf.save()); - await OpenFile.open(file.path); - } +final output = await getTemporaryDirectory(); +final file = File('${output.path}/facture_${commande.id}.pdf'); +await file.writeAsBytes(await pdf.save()); +await OpenFile.open(file.path); +} String _numberToWords(int number) { NumbersToLetters.toLetters('fr', number); return NumbersToLetters.toLetters('fr', number); } - Future _generateReceipt(Commande commande, PaymentMethod payment) async { - final details = await _database.getDetailsCommande(commande.id!); - final client = await _database.getClientById(commande.clientId); - final commandeur = commande.commandeurId != null - ? await _database.getUserById(commande.commandeurId!) - : null; - final validateur = commande.validateurId != null - ? await _database.getUserById(commande.validateurId!) - : null; - final pointDeVente = commandeur?.pointDeVenteId != null - ? await _database.getPointDeVenteById(commandeur!.pointDeVenteId!) - : null; - final List> detailsAvecProduits = []; - for (final detail in details) { - final produit = await _database.getProductById(detail.produitId); - detailsAvecProduits.add({ - 'detail': detail, - 'produit': produit, - }); - } +Future _generateInvoiceWithPasswordVerification(Commande commande) async { + await showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return PasswordVerificationDialog( + title: 'Génération de facture', + message: 'Pour générer la facture de la commande #${commande.id}, veuillez confirmer votre identité en saisissant votre mot de passe.', + onPasswordVerified: (String password) async { + // Afficher un indicateur de chargement + Get.dialog( + const Center( + child: CircularProgressIndicator(), + ), + barrierDismissible: false, + ); + + try { + await _generateInvoice(commande); + Get.back(); // Fermer l'indicateur de chargement + + Get.snackbar( + 'Succès', + 'Facture générée avec succès', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.green, + colorText: Colors.white, + duration: const Duration(seconds: 2), + ); + } catch (e) { + Get.back(); // Fermer l'indicateur de chargement + Get.snackbar( + 'Erreur', + 'Erreur lors de la génération de la facture: $e', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + duration: const Duration(seconds: 3), + ); + } + }, + ); + }, + ); +} +Future _generateBon_lifraisonWithPasswordVerification(Commande commande) async { + await showDialog( + context: context, + barrierDismissible: false, + builder: (BuildContext context) { + return PasswordVerificationDialog( + title: 'Génération de Bon de livraison', + message: 'Pour générer de Bon de livraison de la commande #${commande.id}, veuillez confirmer votre identité en saisissant votre mot de passe.', + onPasswordVerified: (String password) async { + // Afficher un indicateur de chargement + Get.dialog( + const Center( + child: CircularProgressIndicator(), + ), + barrierDismissible: false, + ); + + try { + await _generateBonLivraison(commande); + Get.back(); // Fermer l'indicateur de chargement + + Get.snackbar( + 'Succès', + 'Facture générée avec succès', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.green, + colorText: Colors.white, + duration: const Duration(seconds: 2), + ); + } catch (e) { + Get.back(); // Fermer l'indicateur de chargement + Get.snackbar( + 'Erreur', + 'Erreur lors de la génération de la facture: $e', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + duration: const Duration(seconds: 3), + ); + } + }, + ); + }, + ); +} - final pdf = pw.Document(); - final imageBytes = await loadImage(); - final image = pw.MemoryImage(imageBytes); - pdf.addPage( - pw.Page( - pageFormat: PdfPageFormat(70 * PdfPageFormat.mm, double.infinity), - margin: const pw.EdgeInsets.all(4), - build: (pw.Context context) { - return pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.center, - children: [ - pw.Center( - child: pw.Container( - width: 40, - height: 40, - child: pw.Image(image), - ), - ), - pw.SizedBox(height: 4), - - pw.Text('GUYCOM MADAGASCAR', - style: pw.TextStyle( - fontSize: 10, - fontWeight: pw.FontWeight.bold, - )), - pw.Text('Tél: 033 37 808 18', style: const pw.TextStyle(fontSize: 7)), - pw.Text('www.guycom.mg', style: const pw.TextStyle(fontSize: 7)), - - pw.SizedBox(height: 6), - - pw.Text('TICKET DE CAISSE', - style: pw.TextStyle( - fontSize: 10, - fontWeight: pw.FontWeight.bold, - decoration: pw.TextDecoration.underline, - )), - pw.Text('N°: ${pointDeVente?['abreviation'] ?? 'PV'}-${commande.id}', - style: const pw.TextStyle(fontSize: 8)), - pw.Text('Date: ${DateFormat('dd/MM/yyyy HH:mm').format(commande.dateCommande)}', - style: const pw.TextStyle(fontSize: 8)), - - if (pointDeVente != null) - pw.Text('Point de vente: ${pointDeVente['designation']}', - style: const pw.TextStyle(fontSize: 8)), - - pw.Divider(thickness: 0.5), - - pw.Text('CLIENT: ${client?.nomComplet ?? 'Non spécifié'}', - style: pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold)), - if (client?.telephone != null) - pw.Text('Tél: ${client!.telephone}', style: const pw.TextStyle(fontSize: 7)), - - if (commandeur != null || validateur != null) - pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, +String _getPaymentMethodLabel(PaymentMethod payment) { + switch (payment.type) { + case PaymentType.cash: + return 'LIQUIDE (${payment.amountGiven.toStringAsFixed(0)} MGA)'; + case PaymentType.card: + return 'CARTE BANCAIRE'; + case PaymentType.mvola: + return 'MVOLA'; + case PaymentType.orange: + return 'ORANGE MONEY'; + case PaymentType.airtel: + return 'AIRTEL MONEY'; + default: + return 'MÉTHODE INCONNUE (${payment.type.toString()})'; // Debug info + } +} + Future _generateReceipt(Commande commande, PaymentMethod payment) async { + final details = await _database.getDetailsCommande(commande.id!); + final client = await _database.getClientById(commande.clientId); + final commandeur = commande.commandeurId != null + ? await _database.getUserById(commande.commandeurId!) + : null; + final validateur = commande.validateurId != null + ? await _database.getUserById(commande.validateurId!) + : null; + final pointDeVente = commandeur?.pointDeVenteId != null + ? await _database.getPointDeVenteById(commandeur!.pointDeVenteId!) + : null; +final emojiSuportFont = pw.Font.ttf( await rootBundle.load('assets/NotoEmoji-Regular.ttf')); + final emojifont = pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold, font: emojiSuportFont); + final List> detailsAvecProduits = []; + for (final detail in details) { + final produit = await _database.getProductById(detail.produitId); + detailsAvecProduits.add({ + 'detail': detail, + 'produit': produit, + }); + } + + double sousTotal = 0; + double totalRemises = 0; + double totalCadeaux = 0; + int nombreCadeaux = 0; + + for (final detail in details) { + sousTotal += detail.sousTotal; + if (detail.estCadeau) { + totalCadeaux += detail.sousTotal; + nombreCadeaux += detail.quantite; + } else { + totalRemises += detail.montantRemise; + } + } + + final pdf = pw.Document(); + final imageBytes = await loadImage(); + final image = pw.MemoryImage(imageBytes); + // DEBUG: Affichage des informations de paiement + print('=== DEBUG PAYMENT METHOD ==='); + print('Payment type: ${payment.type}'); + print('Payment type toString: ${payment.type.toString()}'); + print('Payment type runtimeType: ${payment.type.runtimeType}'); + print('Payment type index: ${payment.type.index}'); + print('Amount given: ${payment.amountGiven}'); + print('PaymentType.airtel: ${PaymentType.airtel}'); + print('payment.type == PaymentType.airtel: ${payment.type == PaymentType.airtel}'); + print('=== END DEBUG ==='); + pdf.addPage( + pw.Page( + pageFormat: PdfPageFormat(70 * PdfPageFormat.mm, double.infinity), + margin: const pw.EdgeInsets.all(4), + build: (pw.Context context) { + return pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.center, + children: [ + pw.Center( + child: pw.Container( + width: 40, + height: 40, + child: pw.Image(image), + ), + ), + pw.SizedBox(height: 4), + + pw.Text('GUYCOM MADAGASCAR', + style: pw.TextStyle( + fontSize: 10, + fontWeight: pw.FontWeight.bold, + )), + pw.Text('Tél: 033 37 808 18', style: const pw.TextStyle(fontSize: 7)), + pw.Text('www.guycom.mg', style: const pw.TextStyle(fontSize: 7)), + + pw.SizedBox(height: 6), + + pw.Text('TICKET DE CAISSE', + style: pw.TextStyle( + fontSize: 10, + fontWeight: pw.FontWeight.bold, + decoration: pw.TextDecoration.underline, + )), + pw.Text('N°: ${pointDeVente?['abreviation'] ?? 'PV'}-${commande.id}', + style: const pw.TextStyle(fontSize: 8)), + pw.Text('Date: ${DateFormat('dd/MM/yyyy HH:mm').format(commande.dateCommande)}', + style: const pw.TextStyle(fontSize: 8)), + + if (pointDeVente != null) + pw.Text('Point de vente: ${pointDeVente['designation']}', + style: const pw.TextStyle(fontSize: 8)), + + pw.Divider(thickness: 0.5), + + pw.Text('CLIENT: ${client?.nomComplet ?? 'Non spécifié'}', + style: pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold)), + if (client?.telephone != null) + pw.Text('Tél: ${client!.telephone}', style: const pw.TextStyle(fontSize: 7)), + + if (commandeur != null || validateur != null) + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Divider(thickness: 0.5), + if (commandeur != null) + pw.Text('Vendeur: ${commandeur.name}', style: const pw.TextStyle(fontSize: 7)), + if (validateur != null) + pw.Text('Validateur: ${validateur.name}', style: const pw.TextStyle(fontSize: 7)), + ], + ), + + pw.Divider(thickness: 0.5), + + // Tableau des produits avec cadeaux + pw.Table( + columnWidths: { + 0: const pw.FlexColumnWidth(3.5), + 1: const pw.FlexColumnWidth(1), + 2: const pw.FlexColumnWidth(1.5), + }, + children: [ + pw.TableRow( children: [ - pw.Divider(thickness: 0.5), - if (commandeur != null) - pw.Text('Vendeur: ${commandeur.name}', style: const pw.TextStyle(fontSize: 7)), - if (validateur != null) - pw.Text('Validateur: ${validateur.name}', style: const pw.TextStyle(fontSize: 7)), + pw.Text('Désignation', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), + pw.Text('Qté', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), + pw.Text('P.U', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), ], - ), - - pw.Divider(thickness: 0.5), - - // Détails des produits - pw.Table( - columnWidths: { - 0: const pw.FlexColumnWidth(3.5), - 1: const pw.FlexColumnWidth(1), - 2: const pw.FlexColumnWidth(1.5), - }, - children: [ - pw.TableRow( - children: [ - pw.Text('Désignation', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), - pw.Text('Qté', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), - pw.Text('P.U', style: pw.TextStyle(fontSize: 7, fontWeight: pw.FontWeight.bold)), - ], - decoration: const pw.BoxDecoration( - border: pw.Border(bottom: pw.BorderSide(width: 0.5)), - ), + decoration: const pw.BoxDecoration( + border: pw.Border(bottom: pw.BorderSide(width: 0.5)), ), + ), + + ...detailsAvecProduits.map((item) { + final detail = item['detail'] as DetailCommande; + final produit = item['produit']; - ...detailsAvecProduits.map((item) { - final detail = item['detail'] as DetailCommande; - final produit = item['produit']; - - return pw.TableRow( - decoration: const pw.BoxDecoration( - border: pw.Border(bottom: pw.BorderSide(width: 0.2))), - children: [ - pw.Column( - crossAxisAlignment: pw.CrossAxisAlignment.start, - children: [ - pw.Row( - children: [ - pw.Text(detail.produitNom ?? 'Produit', + return pw.TableRow( + decoration: const pw.BoxDecoration( + border: pw.Border(bottom: pw.BorderSide(width: 0.2))), + children: [ + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.start, + children: [ + pw.Row( + children: [ + pw.Expanded( + child: pw.Text(detail.produitNom ?? 'Produit', style: const pw.TextStyle(fontSize: 7)), - if (detail.estCadeau == true) - pw.Text(' (CADEAU)', - style: pw.TextStyle(fontSize: 6, color: PdfColors.red)), - ], - ), - if (produit?.reference != null) - pw.Text('Ref: ${produit!.reference}', - style: const pw.TextStyle(fontSize: 6)), - if (produit?.imei != null) - pw.Text('IMEI: ${produit!.imei}', - style: const pw.TextStyle(fontSize: 6)), - ], - ), - pw.Text(detail.quantite.toString(), - style: const pw.TextStyle(fontSize: 7)), - pw.Text(detail.estCadeau == true ? 'OFFERT' : '${detail.prixUnitaire.toStringAsFixed(0)}', - style: const pw.TextStyle(fontSize: 7)), - ], - ); - }), + ), + if (detail.estCadeau) + pw.Text('🎁', style: emojifont), + ], + ), + if (produit?.reference != null) + pw.Text('Ref: ${produit!.reference}', + style: const pw.TextStyle(fontSize: 6)), + if (produit?.imei != null) + pw.Text('IMEI: ${produit!.imei}', + style: const pw.TextStyle(fontSize: 6)), + if (detail.estCadeau) + pw.Text('CADEAU OFFERT', + style: pw.TextStyle( + fontSize: 6, + color: PdfColors.green700, + fontWeight: pw.FontWeight.bold, + )), + if (detail.aRemise && !detail.estCadeau) + pw.Text('Remise: ${detail.remiseDescription}', + style: pw.TextStyle(fontSize: 6, color: PdfColors.orange)), + ], + ), + pw.Text(detail.quantite.toString(), + style: const pw.TextStyle(fontSize: 7)), + pw.Column( + crossAxisAlignment: pw.CrossAxisAlignment.end, + children: [ + if (detail.estCadeau) ...[ + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: pw.TextStyle( + fontSize: 6, + decoration: pw.TextDecoration.lineThrough, + color: PdfColors.grey600, + )), + pw.Text('GRATUIT', + style: pw.TextStyle( + fontSize: 7, + color: PdfColors.green700, + fontWeight: pw.FontWeight.bold, + )), + ] else if (detail.aRemise && detail.prixUnitaire != detail.prixFinal / detail.quantite) ...[ + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: pw.TextStyle( + fontSize: 6, + decoration: pw.TextDecoration.lineThrough, + color: PdfColors.grey600, + )), + pw.Text('${(detail.prixFinal / detail.quantite).toStringAsFixed(0)}', + style: const pw.TextStyle(fontSize: 7)), + ] else + pw.Text('${detail.prixUnitaire.toStringAsFixed(0)}', + style: const pw.TextStyle(fontSize: 7)), + ], + ), + ], + ); + }), + ], + ), + + pw.Divider(thickness: 0.5), + + // Totaux avec remises et cadeaux pour le ticket + if (totalRemises > 0 || totalCadeaux > 0) ...[ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, + children: [ + pw.Text('SOUS-TOTAL:', + style: const pw.TextStyle(fontSize: 8)), + pw.Text('${sousTotal.toStringAsFixed(0)} MGA', + style: const pw.TextStyle(fontSize: 8)), ], ), - pw.Divider(thickness: 0.5), - - // Totaux avec remise - if (commande.montantApresRemise != null) ...[ + if (totalRemises > 0) ...[ pw.Row( mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, children: [ - pw.Text('SOUS-TOTAL:', style: const pw.TextStyle(fontSize: 8)), - pw.Text('${commande.montantTotal.toStringAsFixed(0)} MGA', - style: const pw.TextStyle(fontSize: 8)), + pw.Text('REMISES:', + style: pw.TextStyle(fontSize: 8, color: PdfColors.orange)), + pw.Text('-${totalRemises.toStringAsFixed(0)} MGA', + style: pw.TextStyle(fontSize: 8, color: PdfColors.orange)), ], ), + ], + + if (totalCadeaux > 0) ...[ pw.Row( mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, children: [ - pw.Text('REMISE:', style: const pw.TextStyle(fontSize: 8)), - pw.Text('-${(commande.montantTotal - commande.montantApresRemise!).toStringAsFixed(0)} MGA', - style: pw.TextStyle(fontSize: 8, color: PdfColors.red)), + pw.Text('CADEAUX ($nombreCadeaux):', + style: pw.TextStyle(fontSize: 8, color: PdfColors.green700)), + pw.Text('-${totalCadeaux.toStringAsFixed(0)} MGA', + style: pw.TextStyle(fontSize: 8, color: PdfColors.green700)), ], ), - pw.SizedBox(height: 3), ], - pw.Row( - mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, - children: [ - pw.Text('TOTAL:', - style: pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold)), - pw.Text('${(commande.montantApresRemise ?? commande.montantTotal).toStringAsFixed(0)} MGA', - style: pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold)), - ], + pw.Divider(thickness: 0.3), + ], + + // Total final + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, + children: [ + pw.Text('TOTAL:', + style: pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold)), + pw.Text('${commande.montantTotal.toStringAsFixed(0)} MGA', + style: pw.TextStyle(fontSize: 9, fontWeight: pw.FontWeight.bold)), + ], + ), + + if (totalRemises > 0 || totalCadeaux > 0) ...[ + pw.SizedBox(height: 4), + pw.Text('Économies: ${(totalRemises + totalCadeaux).toStringAsFixed(0)} MGA !', + style: pw.TextStyle( + fontSize: 7, + color: PdfColors.green, + fontStyle: pw.FontStyle.italic, + ), + textAlign: pw.TextAlign.center, ), - - pw.SizedBox(height: 6), - - // Détails du paiement - pw.Text('MODE DE PAIEMENT:', + ], + + pw.Divider(thickness: 0.5), + + // Détails du paiement + pw.Text('MODE DE PAIEMENT:', + style: const pw.TextStyle(fontSize: 8)), + pw.Text( + _getPaymentMethodLabel(payment), + style: pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold), +), + + if (payment.type == PaymentType.cash && payment.amountGiven > commande.montantTotal) + pw.Text('Monnaie rendue: ${(payment.amountGiven - commande.montantTotal).toStringAsFixed(0)} MGA', style: const pw.TextStyle(fontSize: 8)), - pw.Text( - payment.type == PaymentType.cash - ? 'LIQUIDE (${payment.amountGiven.toStringAsFixed(0)} MGA)' - : payment.type == PaymentType.card - ? 'CARTE BANCAIRE' - : payment.type == PaymentType.mvola - ? 'MVOLA' - : payment.type == PaymentType.orange - ? 'ORANGE MONEY' - : 'AIRTEL MONEY', - style: pw.TextStyle(fontSize: 8, fontWeight: pw.FontWeight.bold), + + pw.SizedBox(height: 8), + + // Messages de fin avec cadeaux + if (totalCadeaux > 0) ...[ + pw.Container( + padding: const pw.EdgeInsets.all(4), + decoration: pw.BoxDecoration( + color: PdfColors.green50, + borderRadius: pw.BorderRadius.circular(4), + ), + child: pw.Column( + children: [ + pw.Row( + mainAxisAlignment: pw.MainAxisAlignment.center, + children: [ + + pw.Text('🎁', + style: emojifont, + textAlign: pw.TextAlign.center, + ), + pw.Text('Profitez de vos cadeaux !', + style: pw.TextStyle( + fontSize: 7, + fontWeight: pw.FontWeight.bold, + color: PdfColors.green700, + ), + textAlign: pw.TextAlign.center, + ), + pw.Text('🎁', + style: emojifont, + textAlign: pw.TextAlign.center, + ), + ] + ), + pw.Text('$nombreCadeaux article(s) offert(s)', + style: pw.TextStyle( + fontSize: 6, + color: PdfColors.green600, + ), + textAlign: pw.TextAlign.center, + ), + ], + ), ), - - if (payment.type == PaymentType.cash && payment.amountGiven > (commande.montantApresRemise ?? commande.montantTotal)) - pw.Text('Monnaie rendue: ${(payment.amountGiven - (commande.montantApresRemise ?? commande.montantTotal)).toStringAsFixed(0)} MGA', - style: const pw.TextStyle(fontSize: 8)), - - pw.SizedBox(height: 12), - - pw.Text('Article non échangeable - Garantie selon conditions', - style: const pw.TextStyle(fontSize: 6)), - pw.Text('Ticket à conserver comme justificatif', - style: const pw.TextStyle(fontSize: 6)), - pw.SizedBox(height: 8), - pw.Text('Merci pour votre confiance !', - style: pw.TextStyle(fontSize: 8, fontStyle: pw.FontStyle.italic)), + pw.SizedBox(height: 6), ], - ); - }, - ), - ); + + pw.Text('Article non échangeable - Garantie selon conditions', + style: const pw.TextStyle(fontSize: 6)), + pw.Text('Ticket à conserver comme justificatif', + style: const pw.TextStyle(fontSize: 6)), + pw.SizedBox(height: 8), + pw.Text('Merci pour votre confiance !', + style: pw.TextStyle(fontSize: 8, fontStyle: pw.FontStyle.italic)), + ], + ); + }, + ), + ); - final output = await getTemporaryDirectory(); - final file = File('${output.path}/ticket_${commande.id}.pdf'); - await file.writeAsBytes(await pdf.save()); - await OpenFile.open(file.path); - } + final output = await getTemporaryDirectory(); + final file = File('${output.path}/ticket_${commande.id}.pdf'); + await file.writeAsBytes(await pdf.save()); + await OpenFile.open(file.path); +} Color _getStatutColor(StatutCommande statut) { switch (statut) { @@ -856,8 +1907,6 @@ class _GestionCommandesPageState extends State { } } - - String statutLibelle(StatutCommande statut) { switch (statut) { case StatutCommande.enAttente: @@ -874,7 +1923,8 @@ class _GestionCommandesPageState extends State { _searchController.dispose(); super.dispose(); } - @override + + @override Widget build(BuildContext context) { return Scaffold( appBar: CustomAppBar(title: 'Gestion des Commandes'), @@ -905,7 +1955,8 @@ class _GestionCommandesPageState extends State { BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 4, - offset: const Offset(0, 2),) + offset: const Offset(0, 2), + ) ], ), child: ClipRRect( @@ -966,7 +2017,8 @@ class _GestionCommandesPageState extends State { BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 4, - offset: const Offset(0, 2),) + offset: const Offset(0, 2), + ) ], ), child: TextField( @@ -1156,7 +2208,8 @@ class _GestionCommandesPageState extends State { BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 4, - offset: const Offset(0, 2),) + offset: const Offset(0, 2), + ) ], ), padding: @@ -1227,217 +2280,268 @@ class _GestionCommandesPageState extends State { ), ) : ListView.builder( - padding: const EdgeInsets.symmetric(horizontal: 16), - itemCount: _filteredCommandes.length, - itemBuilder: (context, index) { - final commande = _filteredCommandes[index]; - return Container( - margin: const EdgeInsets.only(bottom: 12), + padding: const EdgeInsets.symmetric(horizontal: 16), + itemCount: _filteredCommandes.length, + itemBuilder: (context, index) { + final commande = _filteredCommandes[index]; + + return FutureBuilder>( + future: _database.getDetailsCommande(commande.id!), + builder: (context, snapshot) { + double totalRemises = 0; + bool aDesRemises = false; + + if (snapshot.hasData) { + for (final detail in snapshot.data!) { + totalRemises += detail.montantRemise; + if (detail.aRemise) aDesRemises = true; + } + } + + return Container( + margin: const EdgeInsets.only(bottom: 12), + decoration: BoxDecoration( + color: _getStatutColor(commande.statut), + borderRadius: BorderRadius.circular(12), + border: aDesRemises + ? Border.all(color: Colors.orange.shade300, width: 2) + : null, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 4, + offset: const Offset(0, 2), + ), + ], + ), + child: ExpansionTile( + tilePadding: const EdgeInsets.symmetric( + horizontal: 16, + vertical: 8, + ), + leading: Container( + width: 50, + height: 50, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(25), + border: aDesRemises + ? Border.all(color: Colors.orange.shade300, width: 2) + : null, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 2, + offset: const Offset(0, 1), + ), + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + aDesRemises ? Icons.discount : _getStatutIcon(commande.statut), + size: 20, + color: aDesRemises + ? Colors.teal.shade700 + : commande.statut == StatutCommande.annulee + ? Colors.red + : Colors.blue.shade600, + ), + Text( + '#${commande.id}', + style: const TextStyle( + fontSize: 10, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + title: Text( + commande.clientNomComplet, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox(height: 4), + Row( + children: [ + Icon( + Icons.calendar_today, + size: 14, + color: Colors.grey.shade600, + ), + const SizedBox(width: 4), + Text( + DateFormat('dd/MM/yyyy').format(commande.dateCommande), + style: TextStyle( + fontSize: 12, + color: Colors.grey.shade600, + ), + ), + const SizedBox(width: 16), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 8, + vertical: 2, + ), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(12), + ), + child: Text( + commande.statutLibelle, + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: commande.statut == StatutCommande.annulee + ? Colors.red + : Colors.blue.shade700, + ), + ), + ), + ], + ), + const SizedBox(height: 4), + Row( + children: [ + Icon( + Icons.attach_money, + size: 14, + color: Colors.green.shade600, + ), + const SizedBox(width: 4), + Text( + '${commande.montantTotal.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.green.shade700, + ), + ), + // Affichage des remises si elles existent + if (totalRemises > 0) ...[ + const SizedBox(width: 12), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 2, + ), decoration: BoxDecoration( - color: _getStatutColor(commande.statut), - borderRadius: BorderRadius.circular(12), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.1), - blurRadius: 4, - offset: const Offset(0, 2), - ), - ], + color: Colors.orange.shade100, + borderRadius: BorderRadius.circular(10), ), - child: ExpansionTile( - tilePadding: const EdgeInsets.symmetric( - horizontal: 16, - vertical: 8, - ), - leading: Container( - width: 50, - height: 50, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(25), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.1), - blurRadius: 2, - offset: const Offset(0, 1), - ), - ], - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - _getStatutIcon(commande.statut), - size: 20, - color: - commande.statut == StatutCommande.annulee - ? Colors.red - : Colors.blue.shade600, - ), - Text( - '#${commande.id}', - style: const TextStyle( - fontSize: 10, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - title: Text( - commande.clientNomComplet, - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - ), - ), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 4), - Row( - children: [ - Icon( - Icons.calendar_today, - size: 14, - color: Colors.grey.shade600, - ), - const SizedBox(width: 4), - Text( - DateFormat('dd/MM/yyyy') - .format(commande.dateCommande), - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - ), - ), - const SizedBox(width: 16), - Container( - padding: const EdgeInsets.symmetric( - horizontal: 8, - vertical: 2, - ), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(12), - ), - child: Text( - commande.statutLibelle, - style: TextStyle( - fontSize: 11, - fontWeight: FontWeight.w600, - color: commande.statut == - StatutCommande.annulee - ? Colors.red - : Colors.blue.shade700, - ), - ), - ), - ], - ), - const SizedBox(height: 4), - Row( - children: [ - Icon( - Icons.attach_money, - size: 14, - color: Colors.green.shade600, - ), - const SizedBox(width: 4), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (commande.montantApresRemise != null) ...[ - Text( - 'Total: ${commande.montantTotal.toStringAsFixed(2)} MGA', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - decoration: TextDecoration.lineThrough, - ), - ), - Text( - 'Final: ${commande.montantApresRemise!.toStringAsFixed(2)} MGA', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.green.shade700, - ), - ), - ] else - Text( - '${commande.montantTotal.toStringAsFixed(2)} MGA', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.green.shade700, - ), - ), - ], - ), - ], - ), - ], - ), - trailing: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.1), - blurRadius: 2, - offset: const Offset(0, 1), - ), - ], - ), - child: IconButton( - icon: Icon( - Icons.receipt_long, - color: Colors.blue.shade600, - ), - onPressed: () => _generateInvoice(commande), - tooltip: 'Générer la facture', - ), - ), - ], - ), + child: Row( + mainAxisSize: MainAxisSize.min, children: [ - Container( - padding: const EdgeInsets.all(16.0), - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(12), - bottomRight: Radius.circular(12), - ), - ), - child: Column( - children: [ - CommandeDetails(commande: commande), - const SizedBox(height: 16), - if (commande.statut != StatutCommande.annulee) - CommandeActions( - commande: commande, - onStatutChanged: _updateStatut, - onPaymentSelected: _showPaymentOptions, - onDiscountSelected: _showDiscountDialog, - onGiftSelected: _showGiftDialog, - ), - ], + Icon( + Icons.discount, + size: 12, + color: Colors.teal.shade700, + ), + const SizedBox(width: 2), + Text( + '-${totalRemises.toStringAsFixed(0)}', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.bold, + color: Colors.teal.shade700, ), ), ], ), - ); - }, + ), + ], + ], + ), + ], + ), + trailing: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 2, + offset: const Offset(0, 1), + ), + ], + ), + child: IconButton( + icon: Icon( + Icons.receipt_outlined, + color: Colors.blue.shade600, + ), + onPressed: () => _generateBon_lifraisonWithPasswordVerification(commande), + tooltip: 'Générer le Bon de livraison', + ), + ), + const SizedBox(width: 10,), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.1), + blurRadius: 2, + offset: const Offset(0, 1), + ), + ], + ), + child: IconButton( + icon: Icon( + Icons.receipt_long, + color: Colors.blue.shade600, + ), + onPressed: () => _generateInvoiceWithPasswordVerification(commande), + tooltip: 'Générer la facture', + ), + ), + ], + ), + children: [ + Container( + padding: const EdgeInsets.all(16.0), + decoration: const BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(12), + bottomRight: Radius.circular(12), ), + ), + child: Column( + children: [ + CommandeDetails(commande: commande), + const SizedBox(height: 16), + if (commande.statut != StatutCommande.annulee) + CommandeActions( + commande: commande, + onStatutChanged: _updateStatut, + onPaymentSelected: _showPaymentOptions, + ), + ], + ), + ), + ], + ), + ); + }, + ); + }, +) ), ], ), ); } -} +} \ No newline at end of file diff --git a/lib/Views/mobilepage.dart b/lib/Views/mobilepage.dart index db5711d..77f7f64 100644 --- a/lib/Views/mobilepage.dart +++ b/lib/Views/mobilepage.dart @@ -1,15 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; -import 'package:youmazgestion/Components/QrScan.dart'; -import 'package:youmazgestion/Components/app_bar.dart'; import 'package:youmazgestion/Components/appDrawer.dart'; -import 'package:youmazgestion/Models/client.dart'; -import 'package:youmazgestion/Models/users.dart'; -import 'package:youmazgestion/Models/produit.dart'; -import 'package:youmazgestion/Services/stock_managementDatabase.dart'; import 'package:youmazgestion/Views/historique.dart'; - void main() { runApp(const MyApp()); } @@ -39,2175 +31,14 @@ class MainLayout extends StatefulWidget { } class _MainLayoutState extends State { - int _currentIndex = 1; // Index par défaut pour la page de commande +// Index par défaut pour la page de commande - final List _pages = [ - const HistoriquePage(), - const NouvelleCommandePage(), // Page 1 - Nouvelle commande - const ScanQRPage(), // Page 2 - Scan QR - ]; @override Widget build(BuildContext context) { return Scaffold( - appBar: _currentIndex == 1 ? CustomAppBar(title: 'Nouvelle Commande') : null, drawer: CustomDrawer(), - body: _pages[_currentIndex], - bottomNavigationBar: _buildAdaptiveBottomNavBar(), - ); - } - - Widget _buildAdaptiveBottomNavBar() { - final isDesktop = MediaQuery.of(context).size.width > 600; - - return Container( - decoration: BoxDecoration( - border: isDesktop - ? const Border(top: BorderSide(color: Colors.grey, width: 0.5)) - : null, - ), - child: BottomNavigationBar( - currentIndex: _currentIndex, - onTap: (index) { - setState(() { - _currentIndex = index; - }); - }, - // Style adapté pour desktop - type: isDesktop ? BottomNavigationBarType.fixed : BottomNavigationBarType.fixed, - selectedFontSize: isDesktop ? 14 : 12, - unselectedFontSize: isDesktop ? 14 : 12, - iconSize: isDesktop ? 28 : 24, - items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.history), - label: 'Historique', - ), - BottomNavigationBarItem( - icon: Icon(Icons.add_shopping_cart), - label: 'Commande', - ), - BottomNavigationBarItem( - icon: Icon(Icons.qr_code_scanner), - label: 'Scan QR', - ), - ], - ), + body: const HistoriquePage(), ); } } - -class NouvelleCommandePage extends StatefulWidget { - const NouvelleCommandePage({super.key}); - - @override - _NouvelleCommandePageState createState() => _NouvelleCommandePageState(); -} - -class _NouvelleCommandePageState extends State { - final AppDatabase _appDatabase = AppDatabase.instance; - final _formKey = GlobalKey(); - bool _isLoading = false; - - // Contrôleurs client - final TextEditingController _nomController = TextEditingController(); - final TextEditingController _prenomController = TextEditingController(); - final TextEditingController _emailController = TextEditingController(); - final TextEditingController _telephoneController = TextEditingController(); - final TextEditingController _adresseController = TextEditingController(); - - // Contrôleurs pour les filtres - final TextEditingController _searchNameController = TextEditingController(); - final TextEditingController _searchImeiController = TextEditingController(); - final TextEditingController _searchReferenceController = TextEditingController(); - - // Panier - final List _products = []; - final List _filteredProducts = []; - final Map _quantites = {}; - - // Variables de filtre - bool _showOnlyInStock = false; - - // Utilisateurs commerciaux - List _commercialUsers = []; - Users? _selectedCommercialUser; - - // Variables pour les suggestions clients - List _clientSuggestions = []; - bool _showNomSuggestions = false; - bool _showTelephoneSuggestions = false; - GlobalKey _nomFieldKey = GlobalKey(); - GlobalKey _telephoneFieldKey = GlobalKey(); - - @override - void initState() { - super.initState(); - _loadProducts(); - _loadCommercialUsers(); - - // Listeners pour les filtres - _searchNameController.addListener(_filterProducts); - _searchImeiController.addListener(_filterProducts); - _searchReferenceController.addListener(_filterProducts); - - // Listeners pour l'autocomplétion client - _nomController.addListener(() { - if (_nomController.text.length >= 3) { - _showClientSuggestions(_nomController.text, isNom: true); - } else { - _hideNomSuggestions(); - } - }); - - _telephoneController.addListener(() { - if (_telephoneController.text.length >= 3) { - _showClientSuggestions(_telephoneController.text, isNom: false); - } else { - _hideTelephoneSuggestions(); - } - }); - } - - // Méthode pour vider complètement le formulaire et le panier - void _clearFormAndCart() { - setState(() { - // Vider les contrôleurs client - _nomController.clear(); - _prenomController.clear(); - _emailController.clear(); - _telephoneController.clear(); - _adresseController.clear(); - - // Vider le panier - _quantites.clear(); - - // Réinitialiser le commercial au premier de la liste - if (_commercialUsers.isNotEmpty) { - _selectedCommercialUser = _commercialUsers.first; - } - - // Masquer toutes les suggestions - _hideAllSuggestions(); - - // Réinitialiser l'état de chargement - _isLoading = false; - }); - } - - Future _showClientSuggestions(String query, {required bool isNom}) async { - if (query.length < 3) { - _hideAllSuggestions(); - return; - } - - final suggestions = await _appDatabase.suggestClients(query); - - setState(() { - _clientSuggestions = suggestions; - if (isNom) { - _showNomSuggestions = true; - _showTelephoneSuggestions = false; - } else { - _showTelephoneSuggestions = true; - _showNomSuggestions = false; - } - }); -} - - void _showOverlay({required bool isNom}) { - // Utiliser une approche plus simple avec setState - setState(() { - _clientSuggestions = _clientSuggestions; - if (isNom) { - _showNomSuggestions = true; - _showTelephoneSuggestions = false; - } else { - _showTelephoneSuggestions = true; - _showNomSuggestions = false; - } - }); - } - - void _fillClientForm(Client client) { - setState(() { - _nomController.text = client.nom; - _prenomController.text = client.prenom; - _emailController.text = client.email; - _telephoneController.text = client.telephone; - _adresseController.text = client.adresse ?? ''; - }); - - Get.snackbar( - 'Client trouvé', - 'Les informations ont été remplies automatiquement', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green, - colorText: Colors.white, - duration: const Duration(seconds: 2), - ); - } - - void _hideNomSuggestions() { - if (mounted && _showNomSuggestions) { - setState(() { - _showNomSuggestions = false; - }); - } - } - - void _hideTelephoneSuggestions() { - if (mounted && _showTelephoneSuggestions){ - setState(() { - _showTelephoneSuggestions = false; - }); - } - } - - void _hideAllSuggestions() { - _hideNomSuggestions(); - _hideTelephoneSuggestions(); - } - - Future _loadProducts() async { - final products = await _appDatabase.getProducts(); - setState(() { - _products.clear(); - _products.addAll(products); - _filteredProducts.clear(); - _filteredProducts.addAll(products); - }); - } - - Future _loadCommercialUsers() async { - final commercialUsers = await _appDatabase.getCommercialUsers(); - setState(() { - _commercialUsers = commercialUsers; - if (_commercialUsers.isNotEmpty) { - _selectedCommercialUser = _commercialUsers.first; - } - }); - } - - void _filterProducts() { - final nameQuery = _searchNameController.text.toLowerCase(); - final imeiQuery = _searchImeiController.text.toLowerCase(); - final referenceQuery = _searchReferenceController.text.toLowerCase(); - - setState(() { - _filteredProducts.clear(); - - for (var product in _products) { - bool matchesName = nameQuery.isEmpty || - product.name.toLowerCase().contains(nameQuery); - - bool matchesImei = imeiQuery.isEmpty || - (product.imei?.toLowerCase().contains(imeiQuery) ?? false); - - bool matchesReference = referenceQuery.isEmpty || - (product.reference?.toLowerCase().contains(referenceQuery) ?? false); - - bool matchesStock = !_showOnlyInStock || - (product.stock != null && product.stock! > 0); - - if (matchesName && matchesImei && matchesReference && matchesStock) { - _filteredProducts.add(product); - } - } - }); - } - - void _toggleStockFilter() { - setState(() { - _showOnlyInStock = !_showOnlyInStock; - }); - _filterProducts(); - } - - void _clearFilters() { - setState(() { - _searchNameController.clear(); - _searchImeiController.clear(); - _searchReferenceController.clear(); - _showOnlyInStock = false; - }); - _filterProducts(); - } - - // Section des filtres adaptée pour mobile - Widget _buildFilterSection() { - final isMobile = MediaQuery.of(context).size.width < 600; - - return Card( - elevation: 2, - margin: const EdgeInsets.only(bottom: 16), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Icon(Icons.filter_list, color: Colors.blue.shade700), - const SizedBox(width: 8), - const Text( - 'Filtres de recherche', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - color: Color.fromARGB(255, 9, 56, 95), - ), - ), - const Spacer(), - TextButton.icon( - onPressed: _clearFilters, - icon: const Icon(Icons.clear, size: 18), - label: isMobile ? const SizedBox() : const Text('Réinitialiser'), - style: TextButton.styleFrom( - foregroundColor: Colors.grey.shade600, - ), - ), - ], - ), - const SizedBox(height: 16), - - // Champ de recherche par nom - TextField( - controller: _searchNameController, - decoration: InputDecoration( - labelText: 'Rechercher par nom', - prefixIcon: const Icon(Icons.search), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - const SizedBox(height: 12), - - if (!isMobile) ...[ - // Version desktop - champs sur la même ligne - Row( - children: [ - Expanded( - child: TextField( - controller: _searchImeiController, - decoration: InputDecoration( - labelText: 'IMEI', - prefixIcon: const Icon(Icons.phone_android), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - ), - const SizedBox(width: 12), - Expanded( - child: TextField( - controller: _searchReferenceController, - decoration: InputDecoration( - labelText: 'Référence', - prefixIcon: const Icon(Icons.qr_code), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - ), - ], - ), - ] else ...[ - // Version mobile - champs empilés - TextField( - controller: _searchImeiController, - decoration: InputDecoration( - labelText: 'IMEI', - prefixIcon: const Icon(Icons.phone_android), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - const SizedBox(height: 12), - TextField( - controller: _searchReferenceController, - decoration: InputDecoration( - labelText: 'Référence', - prefixIcon: const Icon(Icons.qr_code), - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.grey.shade50, - ), - ), - ], - const SizedBox(height: 16), - - // Boutons de filtre adaptés pour mobile - Wrap( - spacing: 8, - runSpacing: 8, - children: [ - ElevatedButton.icon( - onPressed: _toggleStockFilter, - icon: Icon( - _showOnlyInStock ? Icons.inventory : Icons.inventory_2, - size: 20, - ), - label: Text(_showOnlyInStock - ? isMobile ? 'Tous' : 'Afficher tous' - : isMobile ? 'En stock' : 'Stock disponible'), - style: ElevatedButton.styleFrom( - backgroundColor: _showOnlyInStock - ? Colors.green.shade600 - : Colors.blue.shade600, - foregroundColor: Colors.white, - padding: EdgeInsets.symmetric( - horizontal: isMobile ? 12 : 16, - vertical: 8 - ), - ), - ), - ], - ), - - const SizedBox(height: 8), - - // Compteur de résultats - Container( - padding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 8 - ), - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(20), - ), - child: Text( - '${_filteredProducts.length} produit(s)', - style: TextStyle( - color: Colors.blue.shade700, - fontWeight: FontWeight.w600, - fontSize: isMobile ? 12 : 14, - ), - ), - ), - ], - ), - ), - ); - } - -// Variables pour le scanner - QRViewController? _qrController; - bool _isScanning = false; - final GlobalKey _qrKey = GlobalKey(debugLabel: 'QR'); - - // 4. Méthode pour démarrer le scan - void _startBarcodeScanning() { - if (_isScanning) return; - - setState(() { - _isScanning = true; - }); - - Get.to(() => _buildScannerPage())?.then((_) { - setState(() { - _isScanning = false; - }); - }); - } - - // 5. Page du scanner - Widget _buildScannerPage() { - return Scaffold( - appBar: AppBar( - title: const Text('Scanner IMEI'), - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - leading: IconButton( - icon: const Icon(Icons.close), - onPressed: () { - _qrController?.dispose(); - Get.back(); - }, - ), - actions: [ - IconButton( - icon: const Icon(Icons.flash_on), - onPressed: () async { - await _qrController?.toggleFlash(); - }, - ), - IconButton( - icon: const Icon(Icons.flip_camera_ios), - onPressed: () async { - await _qrController?.flipCamera(); - }, - ), - ], - ), - body: Stack( - children: [ - // Scanner view - QRView( - key: _qrKey, - onQRViewCreated: _onQRViewCreated, - overlay: QrScannerOverlayShape( - borderColor: Colors.green, - borderRadius: 10, - borderLength: 30, - borderWidth: 10, - cutOutSize: 250, - ), - ), - - // Instructions overlay - Positioned( - bottom: 100, - left: 20, - right: 20, - child: Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.black.withOpacity(0.7), - borderRadius: BorderRadius.circular(12), - ), - child: const Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon(Icons.qr_code_scanner, color: Colors.white, size: 40), - SizedBox(height: 8), - Text( - 'Pointez la caméra vers le code-barres IMEI', - style: TextStyle( - color: Colors.white, - fontSize: 16, - fontWeight: FontWeight.w500, - ), - textAlign: TextAlign.center, - ), - SizedBox(height: 4), - Text( - 'Le scan se fait automatiquement', - style: TextStyle( - color: Colors.white70, - fontSize: 14, - ), - textAlign: TextAlign.center, - ), - ], - ), - ), - ), - ], - ), - ); - } - - // 6. Configuration du contrôleur QR - void _onQRViewCreated(QRViewController controller) { - _qrController = controller; - - controller.scannedDataStream.listen((scanData) { - if (scanData.code != null && scanData.code!.isNotEmpty) { - // Pauser le scanner pour éviter les scans multiples - controller.pauseCamera(); - - // Fermer la page du scanner - Get.back(); - - // Traiter le résultat - _findAndAddProductByImei(scanData.code!); - } - }); - } - - // 7. Méthode pour trouver et ajouter un produit par IMEI - Future _findAndAddProductByImei(String scannedImei) async { - try { - // Montrer un indicateur de chargement - Get.dialog( - AlertDialog( - content: Column( - mainAxisSize: MainAxisSize.min, - children: [ - CircularProgressIndicator(color: Colors.green.shade700), - const SizedBox(height: 16), - const Text('Recherche du produit...'), - const SizedBox(height: 8), - Text( - 'IMEI: $scannedImei', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - fontFamily: 'monospace', - ), - ), - ], - ), - ), - barrierDismissible: false, - ); - - // Attendre un court instant pour l'effet visuel - await Future.delayed(const Duration(milliseconds: 300)); - - // Chercher le produit avec l'IMEI scanné - Product? foundProduct; - - for (var product in _products) { - if (product.imei?.toLowerCase().trim() == scannedImei.toLowerCase().trim()) { - foundProduct = product; - break; - } - } - - // Fermer l'indicateur de chargement - Get.back(); - - if (foundProduct == null) { - _showProductNotFoundDialog(scannedImei); - return; - } - - // Vérifier le stock - if (foundProduct.stock != null && foundProduct.stock! <= 0) { - Get.snackbar( - 'Stock insuffisant', - 'Le produit "${foundProduct.name}" n\'est plus en stock', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.orange.shade600, - colorText: Colors.white, - duration: const Duration(seconds: 3), - icon: const Icon(Icons.warning_amber, color: Colors.white), - ); - return; - } - - // Vérifier si le produit peut être ajouté (stock disponible) - final currentQuantity = _quantites[foundProduct.id] ?? 0; - if (foundProduct.stock != null && currentQuantity >= foundProduct.stock!) { - Get.snackbar( - 'Stock limite atteint', - 'Quantité maximum atteinte pour "${foundProduct.name}"', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.orange.shade600, - colorText: Colors.white, - duration: const Duration(seconds: 3), - icon: const Icon(Icons.warning_amber, color: Colors.white), - ); - return; - } - - // Ajouter le produit au panier - setState(() { - _quantites[foundProduct!.id!] = currentQuantity + 1; - }); - - // Afficher le dialogue de succès - _showSuccessDialog(foundProduct, currentQuantity + 1); - - } catch (e) { - // Fermer l'indicateur de chargement si il est encore ouvert - if (Get.isDialogOpen!) Get.back(); - - Get.snackbar( - 'Erreur', - 'Une erreur est survenue: ${e.toString()}', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red.shade600, - colorText: Colors.white, - duration: const Duration(seconds: 3), - ); - } - } - - // 8. Dialogue de succès - void _showSuccessDialog(Product product, int newQuantity) { - Get.dialog( - AlertDialog( - title: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.green.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon(Icons.check_circle, color: Colors.green.shade700), - ), - const SizedBox(width: 12), - const Expanded(child: Text('Produit ajouté !')), - ], - ), - content: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - product.name, - style: const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - ), - ), - const SizedBox(height: 8), - Text('Prix: ${product.price.toStringAsFixed(2)} MGA'), - Text('Quantité dans le panier: $newQuantity'), - if (product.stock != null) - Text('Stock restant: ${product.stock! - newQuantity}'), - ], - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: const Text('Continuer'), - ), - ElevatedButton( - onPressed: () { - Get.back(); - _showCartBottomSheet(); - }, - style: ElevatedButton.styleFrom( - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - ), - child: const Text('Voir le panier'), - ), - ], - ), - ); - } - - // 9. Dialogue produit non trouvé - void _showProductNotFoundDialog(String scannedImei) { - Get.dialog( - AlertDialog( - title: Row( - children: [ - Icon(Icons.search_off, color: Colors.red.shade600), - const SizedBox(width: 8), - const Text('Produit non trouvé'), - ], - ), - content: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text('Aucun produit trouvé avec cet IMEI:'), - const SizedBox(height: 8), - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.grey.shade100, - borderRadius: BorderRadius.circular(4), - ), - child: Text( - scannedImei, - style: const TextStyle( - fontFamily: 'monospace', - fontWeight: FontWeight.bold, - ), - ), - ), - const SizedBox(height: 12), - Text( - 'Vérifiez que l\'IMEI est correct ou que le produit existe dans la base de données.', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - ), - ), - ], - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: const Text('Fermer'), - ), - ElevatedButton( - onPressed: () { - Get.back(); - _startBarcodeScanning(); - }, - style: ElevatedButton.styleFrom( - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - ), - child: const Text('Scanner à nouveau'), - ), - ], - ), - ); - } - - - Widget _buildScanInfoCard() { - return Card( - elevation: 2, - margin: const EdgeInsets.only(bottom: 8), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.green.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon( - Icons.qr_code_scanner, - color: Colors.green.shade700, - size: 20, - ), - ), - const SizedBox(width: 12), - const Expanded( - child: Text( - 'Scanner rapidement un produit via son IMEI pour l\'ajouter au panier', - style: TextStyle( - fontSize: 14, - color: Color.fromARGB(255, 9, 56, 95), - ), - ), - ), - ElevatedButton.icon( - onPressed: _isScanning ? null : _startBarcodeScanning, - icon: _isScanning - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : const Icon(Icons.qr_code_scanner, size: 18), - label: Text(_isScanning ? 'Scan...' : 'Scanner'), - style: ElevatedButton.styleFrom( - backgroundColor: _isScanning ? Colors.grey : Colors.green.shade700, - foregroundColor: Colors.white, - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - ), - ), - ], - ), - ), - ); - } - - // 10. Modifier le Widget build pour ajouter le bouton de scan - @override - Widget build(BuildContext context) { - final isMobile = MediaQuery.of(context).size.width < 600; - - return Scaffold( - floatingActionButton: Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - // Bouton de scan - FloatingActionButton( - heroTag: "scan", - onPressed: _isScanning ? null : _startBarcodeScanning, - backgroundColor: _isScanning ? Colors.grey : Colors.green.shade700, - foregroundColor: Colors.white, - child: _isScanning - ? const SizedBox( - width: 20, - height: 20, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : const Icon(Icons.qr_code_scanner), - ), - const SizedBox(height: 10), - // Bouton panier existant - _buildFloatingCartButton(), - ], - ), - appBar: CustomAppBar(title: 'Nouvelle commande'), - drawer: CustomDrawer(), - body: GestureDetector( - onTap: _hideAllSuggestions, - child: Column( - children: [ - // Section d'information sur le scan (desktop) - if (!isMobile) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: _buildScanInfoCard(), - ), - - // Section des filtres - if (!isMobile) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: _buildFilterSection(), - ), - - // Boutons pour mobile - if (isMobile) ...[ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), - child: Row( - children: [ - Expanded( - flex: 2, - child: ElevatedButton.icon( - icon: const Icon(Icons.filter_alt), - label: const Text('Filtres'), - onPressed: () { - showModalBottomSheet( - context: context, - isScrollControlled: true, - builder: (context) => SingleChildScrollView( - padding: EdgeInsets.only( - bottom: MediaQuery.of(context).viewInsets.bottom, - ), - child: _buildFilterSection(), - ), - ); - }, - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue.shade700, - foregroundColor: Colors.white, - minimumSize: const Size(double.infinity, 48), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - ), - ), - ), - const SizedBox(width: 8), - Expanded( - flex: 1, - child: ElevatedButton.icon( - icon: _isScanning - ? const SizedBox( - width: 16, - height: 16, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : const Icon(Icons.qr_code_scanner), - label: Text(_isScanning ? 'Scan...' : 'Scan'), - onPressed: _isScanning ? null : _startBarcodeScanning, - style: ElevatedButton.styleFrom( - backgroundColor: _isScanning ? Colors.grey : Colors.green.shade700, - foregroundColor: Colors.white, - minimumSize: const Size(double.infinity, 48), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - ), - ), - ), - ], - ), - ), - // Compteur de résultats - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(20), - ), - child: Text( - '${_filteredProducts.length} produit(s)', - style: TextStyle( - color: Colors.blue.shade700, - fontWeight: FontWeight.w600, - ), - ), - ), - ), - ], - - // Liste des produits - Expanded( - child: _buildProductList(), - ), - ], - ), - ), - ); - } - - - Widget _buildSuggestionsList({required bool isNom}) { - if (_clientSuggestions.isEmpty) return const SizedBox(); - - return Container( - margin: const EdgeInsets.only(top: 4), - constraints: const BoxConstraints(maxHeight: 150), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.grey.shade300), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.1), - blurRadius: 4, - offset: const Offset(0, 2), - ), - ], - ), - child: ListView.builder( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: _clientSuggestions.length, - itemBuilder: (context, index) { - final client = _clientSuggestions[index]; - return ListTile( - dense: true, - leading: CircleAvatar( - radius: 16, - backgroundColor: Colors.blue.shade100, - child: Icon( - Icons.person, - size: 16, - color: Colors.blue.shade700, - ), - ), - title: Text( - '${client.nom} ${client.prenom}', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - ), - ), - subtitle: Text( - '${client.telephone} • ${client.email}', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - ), - ), - onTap: () { - _fillClientForm(client); - _hideAllSuggestions(); - }, - ); - }, - ), - ); -} - - Widget _buildFloatingCartButton() { - final isMobile = MediaQuery.of(context).size.width < 600; - final cartItemCount = _quantites.values.where((q) => q > 0).length; - - return FloatingActionButton.extended( - onPressed: () { - _showCartBottomSheet(); - }, - icon: const Icon(Icons.shopping_cart), - label: Text( - isMobile ? 'Panier ($cartItemCount)' : 'Panier ($cartItemCount)', - style: TextStyle(fontSize: isMobile ? 12 : 14), - ), - backgroundColor: Colors.blue.shade800, - foregroundColor: Colors.white, - ); - } - - void _showClientFormDialog() { - final isMobile = MediaQuery.of(context).size.width < 600; - - // Variables locales pour les suggestions dans le dialog - bool showNomSuggestions = false; - bool showPrenomSuggestions = false; - bool showEmailSuggestions = false; - bool showTelephoneSuggestions = false; - List localClientSuggestions = []; - - // GlobalKeys pour positionner les overlays - final GlobalKey nomFieldKey = GlobalKey(); - final GlobalKey prenomFieldKey = GlobalKey(); - final GlobalKey emailFieldKey = GlobalKey(); - final GlobalKey telephoneFieldKey = GlobalKey(); - - Get.dialog( - StatefulBuilder( - builder: (context, setDialogState) { - return Stack( - children: [ - AlertDialog( - title: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.blue.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon(Icons.person_add, color: Colors.blue.shade700), - ), - const SizedBox(width: 12), - Expanded( - child: Text( - isMobile ? 'Client' : 'Informations Client', - style: TextStyle(fontSize: isMobile ? 16 : 18), - ), - ), - ], - ), - content: Container( - width: isMobile ? double.maxFinite : 600, - constraints: BoxConstraints( - maxHeight: MediaQuery.of(context).size.height * 0.7, - ), - child: SingleChildScrollView( - child: Form( - key: _formKey, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // Champ Nom avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: nomFieldKey, - controller: _nomController, - label: 'Nom', - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer un nom' : null, - onChanged: (value) async { - if (value.length >= 2) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showNomSuggestions = suggestions.isNotEmpty; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - }); - } else { - setDialogState(() { - showNomSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - // Champ Prénom avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: prenomFieldKey, - controller: _prenomController, - label: 'Prénom', - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer un prénom' : null, - onChanged: (value) async { - if (value.length >= 2) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showPrenomSuggestions = suggestions.isNotEmpty; - showNomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - }); - } else { - setDialogState(() { - showPrenomSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - // Champ Email avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: emailFieldKey, - controller: _emailController, - label: 'Email', - keyboardType: TextInputType.emailAddress, - validator: (value) { - if (value?.isEmpty ?? true) return 'Veuillez entrer un email'; - if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(value!)) { - return 'Email invalide'; - } - return null; - }, - onChanged: (value) async { - if (value.length >= 3) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showEmailSuggestions = suggestions.isNotEmpty; - showNomSuggestions = false; - showPrenomSuggestions = false; - showTelephoneSuggestions = false; - }); - } else { - setDialogState(() { - showEmailSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - // Champ Téléphone avec suggestions (SANS bouton recherche) - _buildTextFormFieldWithKey( - key: telephoneFieldKey, - controller: _telephoneController, - label: 'Téléphone', - keyboardType: TextInputType.phone, - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer un téléphone' : null, - onChanged: (value) async { - if (value.length >= 3) { - final suggestions = await _appDatabase.suggestClients(value); - setDialogState(() { - localClientSuggestions = suggestions; - showTelephoneSuggestions = suggestions.isNotEmpty; - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - }); - } else { - setDialogState(() { - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - } - }, - ), - const SizedBox(height: 12), - - _buildTextFormField( - controller: _adresseController, - label: 'Adresse', - maxLines: 2, - validator: (value) => value?.isEmpty ?? true - ? 'Veuillez entrer une adresse' : null, - ), - const SizedBox(height: 12), - _buildCommercialDropdown(), - ], - ), - ), - ), - ), - actions: [ - TextButton( - onPressed: () => Get.back(), - child: const Text('Annuler'), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue.shade800, - foregroundColor: Colors.white, - padding: EdgeInsets.symmetric( - horizontal: isMobile ? 16 : 20, - vertical: isMobile ? 10 : 12 - ), - ), - onPressed: () { - if (_formKey.currentState!.validate()) { - // Fermer toutes les suggestions avant de soumettre - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - Get.back(); - _submitOrder(); - } - }, - child: Text( - isMobile ? 'Valider' : 'Valider la commande', - style: TextStyle(fontSize: isMobile ? 12 : 14), - ), - ), - ], - ), - - // Overlay pour les suggestions du nom - if (showNomSuggestions) - _buildSuggestionOverlay( - fieldKey: nomFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showNomSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - - // Overlay pour les suggestions du prénom - if (showPrenomSuggestions) - _buildSuggestionOverlay( - fieldKey: prenomFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showPrenomSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - - // Overlay pour les suggestions de l'email - if (showEmailSuggestions) - _buildSuggestionOverlay( - fieldKey: emailFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showEmailSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - - // Overlay pour les suggestions du téléphone - if (showTelephoneSuggestions) - _buildSuggestionOverlay( - fieldKey: telephoneFieldKey, - suggestions: localClientSuggestions, - onClientSelected: (client) { - _fillFormWithClient(client); - setDialogState(() { - showNomSuggestions = false; - showPrenomSuggestions = false; - showEmailSuggestions = false; - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - onDismiss: () { - setDialogState(() { - showTelephoneSuggestions = false; - localClientSuggestions = []; - }); - }, - ), - ], - ); - }, - ), - ); -} - -// Widget pour créer un TextFormField avec une clé -Widget _buildTextFormFieldWithKey({ - required GlobalKey key, - required TextEditingController controller, - required String label, - TextInputType? keyboardType, - int maxLines = 1, - String? Function(String?)? validator, - void Function(String)? onChanged, -}) { - return Container( - key: key, - child: _buildTextFormField( - controller: controller, - label: label, - keyboardType: keyboardType, - maxLines: maxLines, - validator: validator, - onChanged: onChanged, - ), - ); -} - -// Widget pour l'overlay des suggestions -Widget _buildSuggestionOverlay({ - required GlobalKey fieldKey, - required List suggestions, - required Function(Client) onClientSelected, - required VoidCallback onDismiss, -}) { - return Positioned.fill( - child: GestureDetector( - onTap: onDismiss, - child: Material( - color: Colors.transparent, - child: Builder( - builder: (context) { - // Obtenir la position du champ - final RenderBox? renderBox = fieldKey.currentContext?.findRenderObject() as RenderBox?; - if (renderBox == null) return const SizedBox(); - - final position = renderBox.localToGlobal(Offset.zero); - final size = renderBox.size; - - return Stack( - children: [ - Positioned( - left: position.dx, - top: position.dy + size.height + 4, - width: size.width, - child: GestureDetector( - onTap: () {}, // Empêcher la fermeture au tap sur la liste - child: Container( - constraints: const BoxConstraints( - maxHeight: 200, // Hauteur maximum pour la scrollabilité - ), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: Colors.grey.shade300), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.15), - blurRadius: 8, - offset: const Offset(0, 4), - ), - ], - ), - child: ClipRRect( - borderRadius: BorderRadius.circular(8), - child: Scrollbar( - thumbVisibility: suggestions.length > 3, - child: ListView.separated( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: suggestions.length, - separatorBuilder: (context, index) => Divider( - height: 1, - color: Colors.grey.shade200, - ), - itemBuilder: (context, index) { - final client = suggestions[index]; - return ListTile( - dense: true, - contentPadding: const EdgeInsets.symmetric( - horizontal: 12, - vertical: 4, - ), - leading: CircleAvatar( - radius: 16, - backgroundColor: Colors.blue.shade100, - child: Icon( - Icons.person, - size: 16, - color: Colors.blue.shade700, - ), - ), - title: Text( - '${client.nom} ${client.prenom}', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - ), - ), - subtitle: Text( - '${client.telephone} • ${client.email}', - style: TextStyle( - fontSize: 12, - color: Colors.grey.shade600, - ), - ), - onTap: () => onClientSelected(client), - hoverColor: Colors.blue.shade50, - ); - }, - ), - ), - ), - ), - ), - ), - ], - ); - }, - ), - ), - ), - ); -} - -// Méthode pour remplir le formulaire avec les données du client -void _fillFormWithClient(Client client) { - _nomController.text = client.nom; - _prenomController.text = client.prenom; - _emailController.text = client.email; - _telephoneController.text = client.telephone; - _adresseController.text = client.adresse ?? ''; - - Get.snackbar( - 'Client trouvé', - 'Les informations ont été remplies automatiquement', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green, - colorText: Colors.white, - duration: const Duration(seconds: 2), - ); -} - - Widget _buildTextFormField({ - required TextEditingController controller, - required String label, - TextInputType? keyboardType, - String? Function(String?)? validator, - int? maxLines, - void Function(String)? onChanged, - }) { - return TextFormField( - controller: controller, - decoration: InputDecoration( - labelText: label, - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.white, - ), - keyboardType: keyboardType, - validator: validator, - maxLines: maxLines, - onChanged: onChanged, - ); - } - - Widget _buildCommercialDropdown() { - return DropdownButtonFormField( - value: _selectedCommercialUser, - decoration: InputDecoration( - labelText: 'Commercial', - border: OutlineInputBorder( - borderRadius: BorderRadius.circular(8), - ), - filled: true, - fillColor: Colors.white, - ), - items: _commercialUsers.map((Users user) { - return DropdownMenuItem( - value: user, - child: Text('${user.name} ${user.lastName}'), - ); - }).toList(), - onChanged: (Users? newValue) { - setState(() { - _selectedCommercialUser = newValue; - }); - }, - validator: (value) => value == null ? 'Veuillez sélectionner un commercial' : null, - ); - } - - Widget _buildProductList() { - final isMobile = MediaQuery.of(context).size.width < 600; - - return _filteredProducts.isEmpty - ? _buildEmptyState() - : ListView.builder( - padding: const EdgeInsets.all(16.0), - itemCount: _filteredProducts.length, - itemBuilder: (context, index) { - final product = _filteredProducts[index]; - final quantity = _quantites[product.id] ?? 0; - - return _buildProductListItem(product, quantity, isMobile); - }, - ); - } - - Widget _buildEmptyState() { - return Center( - child: Padding( - padding: const EdgeInsets.all(32.0), - child: Column( - children: [ - Icon( - Icons.search_off, - size: 64, - color: Colors.grey.shade400, - ), - const SizedBox(height: 16), - Text( - 'Aucun produit trouvé', - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.w500, - color: Colors.grey.shade600, - ), - ), - const SizedBox(height: 8), - Text( - 'Modifiez vos critères de recherche', - style: TextStyle( - fontSize: 14, - color: Colors.grey.shade500, - ), - ), - ], - ), - ), - ); - } - - Widget _buildProductListItem(Product product, int quantity, bool isMobile) { - final bool isOutOfStock = product.stock != null && product.stock! <= 0; - - return Card( - margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - elevation: 2, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - border: isOutOfStock - ? Border.all(color: Colors.red.shade200, width: 1.5) - : null, - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - children: [ - Container( - width: isMobile ? 40 : 50, - height: isMobile ? 40 : 50, - decoration: BoxDecoration( - color: isOutOfStock - ? Colors.red.shade50 - : Colors.blue.shade50, - borderRadius: BorderRadius.circular(8), - ), - child: Icon( - Icons.shopping_bag, - size: isMobile ? 20 : 24, - color: isOutOfStock ? Colors.red : Colors.blue, - ), - ), - const SizedBox(width: 12), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - product.name, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: isMobile ? 14 : 16, - color: isOutOfStock ? Colors.red.shade700 : null, - ), - ), - const SizedBox(height: 4), - Text( - '${product.price.toStringAsFixed(2)} MGA', - style: TextStyle( - color: Colors.green.shade700, - fontWeight: FontWeight.w600, - fontSize: isMobile ? 12 : 14, - ), - ), - if (product.stock != null) - Text( - 'Stock: ${product.stock}${isOutOfStock ? ' (Rupture)' : ''}', - style: TextStyle( - fontSize: isMobile ? 10 : 12, - color: isOutOfStock - ? Colors.red.shade600 - : Colors.grey.shade600, - fontWeight: isOutOfStock ? FontWeight.w600 : FontWeight.normal, - ), - ), - // Affichage IMEI et Référence - plus compact sur mobile - if (product.imei != null && product.imei!.isNotEmpty) - Text( - 'IMEI: ${product.imei}', - style: TextStyle( - fontSize: isMobile ? 9 : 11, - color: Colors.grey.shade600, - fontFamily: 'monospace', - ), - ), - if (product.reference != null && product.reference!.isNotEmpty) - Text( - 'Réf: ${product.reference}', - style: TextStyle( - fontSize: isMobile ? 9 : 11, - color: Colors.grey.shade600, - ), - ), - ], - ), - ), - Container( - decoration: BoxDecoration( - color: isOutOfStock - ? Colors.grey.shade100 - : Colors.blue.shade50, - borderRadius: BorderRadius.circular(20), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - IconButton( - icon: Icon( - Icons.remove, - size: isMobile ? 16 : 18 - ), - onPressed: isOutOfStock ? null : () { - if (quantity > 0) { - setState(() { - _quantites[product.id!] = quantity - 1; - }); - } - }, - ), - Text( - quantity.toString(), - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: isMobile ? 12 : 14, - ), - ), - IconButton( - icon: Icon( - Icons.add, - size: isMobile ? 16 : 18 - ), - onPressed: isOutOfStock ? null : () { - if (product.stock == null || quantity < product.stock!) { - setState(() { - _quantites[product.id!] = quantity + 1; - }); - } else { - Get.snackbar( - 'Stock insuffisant', - 'Quantité demandée non disponible', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - } - }, - ), - ], - ), - ), - ], - ), - ), - ), - ); - } - - void _showCartBottomSheet() { - final isMobile = MediaQuery.of(context).size.width < 600; - - Get.bottomSheet( - Container( - height: MediaQuery.of(context).size.height * (isMobile ? 0.85 : 0.7), - padding: const EdgeInsets.all(16), - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.vertical(top: Radius.circular(20)), - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Votre Panier', - style: TextStyle( - fontSize: isMobile ? 18 : 20, - fontWeight: FontWeight.bold - ), - ), - IconButton( - icon: const Icon(Icons.close), - onPressed: () => Get.back(), - ), - ], - ), - const Divider(), - Expanded(child: _buildCartItemsList()), - const Divider(), - _buildCartTotalSection(), - const SizedBox(height: 16), - _buildSubmitButton(), - ], - ), - ), - isScrollControlled: true, - ); - } - - Widget _buildCartItemsList() { - final itemsInCart = _quantites.entries.where((e) => e.value > 0).toList(); - - if (itemsInCart.isEmpty) { - return const Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon(Icons.shopping_cart_outlined, size: 60, color: Colors.grey), - SizedBox(height: 16), - Text( - 'Votre panier est vide', - style: TextStyle(fontSize: 16, color: Colors.grey), - ), - ], - ), - ); - } - - return ListView.builder( - itemCount: itemsInCart.length, - itemBuilder: (context, index) { - final entry = itemsInCart[index]; - final product = _products.firstWhere((p) => p.id == entry.key); - - return Dismissible( - key: Key(entry.key.toString()), - background: Container( - color: Colors.red.shade100, - alignment: Alignment.centerRight, - padding: const EdgeInsets.only(right: 20), - child: const Icon(Icons.delete, color: Colors.red), - ), - direction: DismissDirection.endToStart, - onDismissed: (direction) { - setState(() { - _quantites.remove(entry.key); - }); - Get.snackbar( - 'Produit retiré', - '${product.name} a été retiré du panier', - snackPosition: SnackPosition.BOTTOM, - ); - }, - child: Card( - margin: const EdgeInsets.only(bottom: 8), - elevation: 1, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - child: ListTile( - contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - leading: Container( - width: 40, - height: 40, - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(8), - ), - child: const Icon(Icons.shopping_bag, size: 20), - ), - title: Text(product.name), - subtitle: Text('${entry.value} x ${product.price.toStringAsFixed(2)} MGA'), - trailing: Text( - '${(entry.value * product.price).toStringAsFixed(2)} MGA', - style: TextStyle( - fontWeight: FontWeight.bold, - color: Colors.blue.shade800, - ), - ), - ), - ), - ); - }, - ); - } - - Widget _buildCartTotalSection() { - double total = 0; - _quantites.forEach((productId, quantity) { - final product = _products.firstWhere((p) => p.id == productId); - total += quantity * product.price; - }); - - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - const Text( - 'Total:', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), - ), - Text( - '${total.toStringAsFixed(2)} MGA', - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: Colors.green, - ), - ), - ], - ), - const SizedBox(height: 8), - Text( - '${_quantites.values.where((q) => q > 0).length} article(s)', - style: TextStyle(color: Colors.grey.shade600), - ), - ], - ); - } - - Widget _buildSubmitButton() { - final isMobile = MediaQuery.of(context).size.width < 600; - - return SizedBox( - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - padding: EdgeInsets.symmetric( - vertical: isMobile ? 12 : 16 - ), - backgroundColor: Colors.blue.shade800, - foregroundColor: Colors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12), - ), - elevation: 4, - ), - onPressed: _submitOrder, - child: _isLoading - ? SizedBox( - width: 20, - height: 20, - child: CircularProgressIndicator( - strokeWidth: 2, - color: Colors.white, - ), - ) - : Text( - isMobile ? 'Valider' : 'Valider la Commande', - style: TextStyle(fontSize: isMobile ? 14 : 16), - ), - ), - ); - } - - Future _submitOrder() async { - // Vérifier d'abord si le panier est vide - final itemsInCart = _quantites.entries.where((e) => e.value > 0).toList(); - if (itemsInCart.isEmpty) { - Get.snackbar( - 'Panier vide', - 'Veuillez ajouter des produits à votre commande', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - _showCartBottomSheet(); // Ouvrir le panier pour montrer qu'il est vide - return; - } - - // Ensuite vérifier les informations client - if (_nomController.text.isEmpty || - _prenomController.text.isEmpty || - _emailController.text.isEmpty || - _telephoneController.text.isEmpty || - _adresseController.text.isEmpty) { - Get.snackbar( - 'Informations manquantes', - 'Veuillez remplir les informations client', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - _showClientFormDialog(); - return; - } - - setState(() { - _isLoading = true; - }); - - // Créer le client - final client = Client( - nom: _nomController.text, - prenom: _prenomController.text, - email: _emailController.text, - telephone: _telephoneController.text, - adresse: _adresseController.text, - dateCreation: DateTime.now(), - ); - - // Calculer le total et préparer les détails - double total = 0; - final details = []; - - for (final entry in itemsInCart) { - final product = _products.firstWhere((p) => p.id == entry.key); - total += entry.value * product.price; - - details.add(DetailCommande( - commandeId: 0, - produitId: product.id!, - quantite: entry.value, - prixUnitaire: product.price, - sousTotal: entry.value * product.price, - )); - } - - // Créer la commande - final commande = Commande( - clientId: 0, - dateCommande: DateTime.now(), - statut: StatutCommande.enAttente, - montantTotal: total, - notes: 'Commande passée via l\'application', - commandeurId: _selectedCommercialUser?.id, - ); - - try { - await _appDatabase.createCommandeComplete(client, commande, details); - - // Fermer le panier avant d'afficher la confirmation - Get.back(); - - // Afficher le dialogue de confirmation - adapté pour mobile - final isMobile = MediaQuery.of(context).size.width < 600; - - await showDialog( - context: context, - barrierDismissible: false, // Empêcher la fermeture accidentelle - builder: (context) => AlertDialog( - title: Row( - children: [ - Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.green.shade100, - borderRadius: BorderRadius.circular(8), - ), - child: Icon(Icons.check_circle, color: Colors.green.shade700), - ), - const SizedBox(width: 12), - Expanded( - child: Text( - 'Commande Validée', - style: TextStyle(fontSize: isMobile ? 16 : 18), - ), - ), - ], - ), - content: Text( - 'Votre commande a été enregistrée et expédiée avec succès.', - style: TextStyle(fontSize: isMobile ? 14 : 16), - ), - actions: [ - SizedBox( - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.green.shade700, - foregroundColor: Colors.white, - padding: EdgeInsets.symmetric( - vertical: isMobile ? 12 : 16 - ), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - ), - onPressed: () { - Navigator.pop(context); - // Vider complètement le formulaire et le panier - _clearFormAndCart(); - // Recharger les produits pour mettre à jour le stock - _loadProducts(); - }, - child: Text( - 'OK', - style: TextStyle(fontSize: isMobile ? 14 : 16), - ), - ), - ), - ], - ), - ); - - } catch (e) { - setState(() { - _isLoading = false; - }); - - Get.snackbar( - 'Erreur', - 'Une erreur est survenue: ${e.toString()}', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - } - } - - @override - void dispose() { - _qrController?.dispose(); - - // Vos disposals existants... - _hideAllSuggestions(); - _nomController.dispose(); - _prenomController.dispose(); - _emailController.dispose(); - _telephoneController.dispose(); - _adresseController.dispose(); - _searchNameController.dispose(); - _searchImeiController.dispose(); - _searchReferenceController.dispose(); - - super.dispose(); - } - } \ No newline at end of file diff --git a/lib/Views/newCommand.dart b/lib/Views/newCommand.dart index c11a3b0..e80f3c6 100644 --- a/lib/Views/newCommand.dart +++ b/lib/Views/newCommand.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart'; - import 'package:youmazgestion/Components/app_bar.dart'; import 'package:youmazgestion/Components/appDrawer.dart'; +import 'package:youmazgestion/Components/newCommandComponents/CadeauDialog.dart'; +import 'package:youmazgestion/Components/newCommandComponents/RemiseDialog.dart'; import 'package:youmazgestion/Models/client.dart'; import 'package:youmazgestion/Models/users.dart'; import 'package:youmazgestion/Models/produit.dart'; @@ -37,7 +38,7 @@ class _NouvelleCommandePageState extends State { final List _products = []; final List _filteredProducts = []; final Map _quantites = {}; - + final Map _panierDetails = {}; // Variables de filtre bool _showOnlyInStock = false; @@ -46,7 +47,6 @@ class _NouvelleCommandePageState extends State { Users? _selectedCommercialUser; // Variables pour les suggestions clients - List _clientSuggestions = []; bool _showNomSuggestions = false; bool _showTelephoneSuggestions = false; @@ -84,6 +84,177 @@ class _NouvelleCommandePageState extends State { } }); } +// ==Gestion des remise + +// 3. Ajouter ces méthodes pour gérer les remises + + Future _showRemiseDialog(Product product) async { + final detailExistant = _panierDetails[product.id!]; + + final result = await showDialog( + context: context, + builder: (context) => RemiseDialog( + product: product, + quantite: detailExistant?.quantite ?? 1, + prixUnitaire: product.price, + detailExistant: detailExistant, + ), + ); + + if (result != null) { + if (result == 'supprimer') { + _supprimerRemise(product.id!); + } else if (result is Map) { + _appliquerRemise(product.id!, result); + } + } + } + + + + void _appliquerRemise(int productId, Map remiseData) { + final detailExistant = _panierDetails[productId]; + if (detailExistant == null) return; + + final detailAvecRemise = detailExistant.appliquerRemise( + type: remiseData['type'] as RemiseType, + valeur: remiseData['valeur'] as double, + ); + + setState(() { + _panierDetails[productId] = detailAvecRemise; + }); + + Get.snackbar( + 'Remise appliquée', + 'Remise de ${detailAvecRemise.remiseDescription} appliquée', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.orange.shade600, + colorText: Colors.white, + duration: const Duration(seconds: 2), + ); + } + + void _supprimerRemise(int productId) { + final detailExistant = _panierDetails[productId]; + if (detailExistant == null) return; + + setState(() { + _panierDetails[productId] = detailExistant.supprimerRemise(); + }); + + Get.snackbar( + 'Remise supprimée', + 'La remise a été supprimée', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.blue.shade600, + colorText: Colors.white, + duration: const Duration(seconds: 2), + ); + } +// Ajout des produits au pannier +// 4. Modifier la méthode pour ajouter des produits au panier + void _ajouterAuPanier(Product product, int quantite) { + // Vérifier le stock disponible + if (product.stock != null && quantite > product.stock!) { + Get.snackbar( + 'Stock insuffisant', + 'Quantité demandée non disponible', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + ); + return; + } + + setState(() { + final detail = DetailCommande.sansRemise( + commandeId: 0, // Sera défini lors de la création + produitId: product.id!, + quantite: quantite, + prixUnitaire: product.price, + produitNom: product.name, + produitReference: product.reference, + ); + _panierDetails[product.id!] = detail; + }); + } + + // Modification de la méthode _modifierQuantite pour gérer les cadeaux +void _modifierQuantite(int productId, int nouvelleQuantite) { + final detailExistant = _panierDetails[productId]; + if (detailExistant == null) return; + + if (nouvelleQuantite <= 0) { + setState(() { + _panierDetails.remove(productId); + }); + return; + } + + final product = _products.firstWhere((p) => p.id == productId); + if (product.stock != null && nouvelleQuantite > product.stock!) { + Get.snackbar( + 'Stock insuffisant', + 'Quantité maximum: ${product.stock}', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.orange, + colorText: Colors.white, + ); + return; + } + + final nouveauSousTotal = nouvelleQuantite * detailExistant.prixUnitaire; + + setState(() { + if (detailExistant.estCadeau) { + // Pour un cadeau, le prix final reste à 0 + _panierDetails[productId] = DetailCommande( + id: detailExistant.id, + commandeId: detailExistant.commandeId, + produitId: detailExistant.produitId, + quantite: nouvelleQuantite, + prixUnitaire: detailExistant.prixUnitaire, + sousTotal: nouveauSousTotal, + prixFinal: 0.0, // Prix final à 0 pour un cadeau + estCadeau: true, + produitNom: detailExistant.produitNom, + produitReference: detailExistant.produitReference, + ); + } else if (detailExistant.aRemise) { + // Recalculer la remise si elle existe + final detail = DetailCommande( + id: detailExistant.id, + commandeId: detailExistant.commandeId, + produitId: detailExistant.produitId, + quantite: nouvelleQuantite, + prixUnitaire: detailExistant.prixUnitaire, + sousTotal: nouveauSousTotal, + prixFinal: nouveauSousTotal, + produitNom: detailExistant.produitNom, + produitReference: detailExistant.produitReference, + ).appliquerRemise( + type: detailExistant.remiseType!, + valeur: detailExistant.remiseValeur, + ); + _panierDetails[productId] = detail; + } else { + // Article normal sans remise + _panierDetails[productId] = DetailCommande( + id: detailExistant.id, + commandeId: detailExistant.commandeId, + produitId: detailExistant.produitId, + quantite: nouvelleQuantite, + prixUnitaire: detailExistant.prixUnitaire, + sousTotal: nouveauSousTotal, + prixFinal: nouveauSousTotal, + produitNom: detailExistant.produitNom, + produitReference: detailExistant.produitReference, + ); + } + }); +} + // === NOUVELLES MÉTHODES DE SCAN AUTOMATIQUE (identiques à ProductManagementPage) === @@ -257,29 +428,27 @@ class _NouvelleCommandePageState extends State { ); return; } - + final detailExistant = _panierDetails[foundProduct!.id!]; // Vérifier si le produit peut être ajouté (stock disponible) final currentQuantity = _quantites[foundProduct.id] ?? 0; if (foundProduct.stock != null && currentQuantity >= foundProduct.stock!) { - Get.snackbar( - 'Stock limite atteint', - 'Quantité maximum atteinte pour "${foundProduct.name}"', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.orange.shade600, - colorText: Colors.white, - duration: const Duration(seconds: 3), - icon: const Icon(Icons.warning_amber, color: Colors.white), - ); - return; - } + Get.snackbar( + 'Stock limite atteint', + 'Quantité maximum atteinte pour "${foundProduct.name}"', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.orange.shade600, + colorText: Colors.white, + duration: const Duration(seconds: 3), + icon: const Icon(Icons.warning_amber, color: Colors.white), + ); + return; + } // Ajouter le produit au panier - setState(() { - _quantites[foundProduct!.id!] = currentQuantity + 1; - }); + _modifierQuantite(foundProduct.id!, currentQuantity + 1); - // Afficher le dialogue de succès - _showProductFoundAndAddedDialog(foundProduct, currentQuantity + 1); + // Afficher le dialogue de succès + _showProductFoundAndAddedDialog(foundProduct, currentQuantity + 1); } catch (e) { // Fermer l'indicateur de chargement si il est encore ouvert @@ -597,7 +766,7 @@ class _NouvelleCommandePageState extends State { // === FIN DES NOUVELLES MÉTHODES DE SCAN AUTOMATIQUE === - // Méthode pour vider complètement le formulaire et le panier + // 8. Modifier _clearFormAndCart pour vider le nouveau panier void _clearFormAndCart() { setState(() { // Vider les contrôleurs client @@ -607,8 +776,8 @@ class _NouvelleCommandePageState extends State { _telephoneController.clear(); _adresseController.clear(); - // Vider le panier - _quantites.clear(); + // Vider le nouveau panier + _panierDetails.clear(); // Réinitialiser le commercial au premier de la liste if (_commercialUsers.isNotEmpty) { @@ -623,16 +792,15 @@ class _NouvelleCommandePageState extends State { }); } + Future _showClientSuggestions(String query, {required bool isNom}) async { if (query.length < 3) { _hideAllSuggestions(); return; } - final suggestions = await _appDatabase.suggestClients(query); setState(() { - _clientSuggestions = suggestions; if (isNom) { _showNomSuggestions = true; _showTelephoneSuggestions = false; @@ -644,24 +812,6 @@ class _NouvelleCommandePageState extends State { } - void _fillClientForm(Client client) { - setState(() { - _nomController.text = client.nom; - _prenomController.text = client.prenom; - _emailController.text = client.email; - _telephoneController.text = client.telephone; - _adresseController.text = client.adresse ?? ''; - }); - - Get.snackbar( - 'Client trouvé', - 'Les informations ont été remplies automatiquement', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.green, - colorText: Colors.white, - duration: const Duration(seconds: 2), - ); - } void _hideNomSuggestions() { if (mounted && _showNomSuggestions) { @@ -1511,155 +1661,333 @@ Widget _buildSuggestionOverlay({ ); } - Widget _buildProductListItem(Product product, int quantity, bool isMobile) { - final bool isOutOfStock = product.stock != null && product.stock! <= 0; - - return Card( - margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - elevation: 2, - shape: RoundedRectangleBorder( + // Modification de la méthode _buildProductListItem pour inclure le bouton cadeau +Widget _buildProductListItem(Product product, int quantity, bool isMobile) { + final bool isOutOfStock = product.stock != null && product.stock! <= 0; + final detailPanier = _panierDetails[product.id!]; + final int currentQuantity = detailPanier?.quantite ?? 0; + + return Card( + margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + elevation: 2, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + ), + child: Container( + decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), + border: isOutOfStock + ? Border.all(color: Colors.red.shade200, width: 1.5) + : detailPanier?.estCadeau == true + ? Border.all(color: Colors.green.shade300, width: 2) + : detailPanier?.aRemise == true + ? Border.all(color: Colors.orange.shade300, width: 2) + : null, ), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - border: isOutOfStock - ? Border.all(color: Colors.red.shade200, width: 1.5) - : null, - ), - child: Padding( - padding: const EdgeInsets.all(12.0), - child: Row( - children: [ - Container( - width: isMobile ? 40 : 50, - height: isMobile ? 40 : 50, - decoration: BoxDecoration( - color: isOutOfStock - ? Colors.red.shade50 - : Colors.blue.shade50, - borderRadius: BorderRadius.circular(8), - ), - child: Icon( - Icons.shopping_bag, - size: isMobile ? 20 : 24, - color: isOutOfStock ? Colors.red : Colors.blue, - ), + child: Padding( + padding: const EdgeInsets.all(12.0), + child: Row( + children: [ + Container( + width: isMobile ? 40 : 50, + height: isMobile ? 40 : 50, + decoration: BoxDecoration( + color: isOutOfStock + ? Colors.red.shade50 + : detailPanier?.estCadeau == true + ? Colors.green.shade50 + : detailPanier?.aRemise == true + ? Colors.orange.shade50 + : Colors.blue.shade50, + borderRadius: BorderRadius.circular(8), ), - const SizedBox(width: 12), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ + child: Icon( + detailPanier?.estCadeau == true + ? Icons.card_giftcard + : detailPanier?.aRemise == true + ? Icons.discount + : Icons.shopping_bag, + size: isMobile ? 20 : 24, + color: isOutOfStock + ? Colors.red + : detailPanier?.estCadeau == true + ? Colors.green.shade700 + : detailPanier?.aRemise == true + ? Colors.orange.shade700 + : Colors.blue, + ), + ), + const SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + product.name, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: isMobile ? 14 : 16, + color: isOutOfStock ? Colors.red.shade700 : null, + ), + ), + ), + if (detailPanier?.estCadeau == true) + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + decoration: BoxDecoration( + color: Colors.green.shade100, + borderRadius: BorderRadius.circular(10), + ), + child: Text( + 'CADEAU', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.bold, + color: Colors.green.shade700, + ), + ), + ), + ], + ), + const SizedBox(height: 4), + Row( + children: [ + if (detailPanier?.estCadeau == true) ...[ + Text( + 'Gratuit', + style: TextStyle( + color: Colors.green.shade700, + fontWeight: FontWeight.bold, + fontSize: isMobile ? 12 : 14, + ), + ), + const SizedBox(width: 8), + Text( + '${product.price.toStringAsFixed(2)} MGA', + style: TextStyle( + color: Colors.grey.shade500, + fontWeight: FontWeight.w600, + fontSize: isMobile ? 11 : 13, + decoration: TextDecoration.lineThrough, + ), + ), + ] else ...[ + Text( + '${product.price.toStringAsFixed(2)} MGA', + style: TextStyle( + color: Colors.green.shade700, + fontWeight: FontWeight.w600, + fontSize: isMobile ? 12 : 14, + decoration: detailPanier?.aRemise == true + ? TextDecoration.lineThrough + : null, + ), + ), + if (detailPanier?.aRemise == true) ...[ + const SizedBox(width: 8), + Text( + '${(detailPanier!.prixFinal / detailPanier.quantite).toStringAsFixed(2)} MGA', + style: TextStyle( + color: Colors.orange.shade700, + fontWeight: FontWeight.bold, + fontSize: isMobile ? 12 : 14, + ), + ), + ], + ], + ], + ), + if (detailPanier?.aRemise == true && !detailPanier!.estCadeau) Text( - product.name, + 'Remise: ${detailPanier!.remiseDescription}', style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: isMobile ? 14 : 16, - color: isOutOfStock ? Colors.red.shade700 : null, + fontSize: isMobile ? 10 : 12, + color: Colors.orange.shade600, + fontWeight: FontWeight.w500, ), ), - const SizedBox(height: 4), + if (product.stock != null) Text( - '${product.price.toStringAsFixed(2)} MGA', + 'Stock: ${product.stock}${isOutOfStock ? ' (Rupture)' : ''}', style: TextStyle( - color: Colors.green.shade700, - fontWeight: FontWeight.w600, - fontSize: isMobile ? 12 : 14, + fontSize: isMobile ? 10 : 12, + color: isOutOfStock + ? Colors.red.shade600 + : Colors.grey.shade600, + fontWeight: isOutOfStock ? FontWeight.w600 : FontWeight.normal, ), ), - if (product.stock != null) - Text( - 'Stock: ${product.stock}${isOutOfStock ? ' (Rupture)' : ''}', - style: TextStyle( - fontSize: isMobile ? 10 : 12, - color: isOutOfStock - ? Colors.red.shade600 - : Colors.grey.shade600, - fontWeight: isOutOfStock ? FontWeight.w600 : FontWeight.normal, + // Affichage IMEI et Référence + if (product.imei != null && product.imei!.isNotEmpty) + Text( + 'IMEI: ${product.imei}', + style: TextStyle( + fontSize: isMobile ? 9 : 11, + color: Colors.grey.shade600, + fontFamily: 'monospace', + ), + ), + if (product.reference != null && product.reference!.isNotEmpty) + Text( + 'Réf: ${product.reference}', + style: TextStyle( + fontSize: isMobile ? 9 : 11, + color: Colors.grey.shade600, + ), + ), + ], + ), + ), + // Actions (quantité, remise et cadeau) + Column( + children: [ + // Boutons d'actions (seulement si le produit est dans le panier) + if (currentQuantity > 0) ...[ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + // Bouton cadeau + Container( + margin: const EdgeInsets.only(right: 4), + child: IconButton( + icon: Icon( + detailPanier?.estCadeau == true + ? Icons.card_giftcard + : Icons.card_giftcard_outlined, + size: isMobile ? 16 : 18, + color: detailPanier?.estCadeau == true + ? Colors.green.shade700 + : Colors.grey.shade600, + ), + onPressed: isOutOfStock ? null : () => _basculerStatutCadeau(product.id!), + tooltip: detailPanier?.estCadeau == true + ? 'Retirer le statut cadeau' + : 'Marquer comme cadeau', + style: IconButton.styleFrom( + backgroundColor: detailPanier?.estCadeau == true + ? Colors.green.shade100 + : Colors.grey.shade100, + minimumSize: Size(isMobile ? 32 : 36, isMobile ? 32 : 36), + ), ), ), - // Affichage IMEI et Référence - plus compact sur mobile - if (product.imei != null && product.imei!.isNotEmpty) - Text( - 'IMEI: ${product.imei}', - style: TextStyle( - fontSize: isMobile ? 9 : 11, - color: Colors.grey.shade600, - fontFamily: 'monospace', + // Bouton remise (seulement pour les articles non-cadeaux) + if (!detailPanier!.estCadeau) + Container( + margin: const EdgeInsets.only(right: 4), + child: IconButton( + icon: Icon( + detailPanier.aRemise + ? Icons.discount + : Icons.local_offer, + size: isMobile ? 16 : 18, + color: detailPanier.aRemise + ? Colors.orange.shade700 + : Colors.grey.shade600, + ), + onPressed: isOutOfStock ? null : () => _showRemiseDialog(product), + tooltip: detailPanier.aRemise + ? 'Modifier la remise' + : 'Ajouter une remise', + style: IconButton.styleFrom( + backgroundColor: detailPanier.aRemise + ? Colors.orange.shade100 + : Colors.grey.shade100, + minimumSize: Size(isMobile ? 32 : 36, isMobile ? 32 : 36), + ), + ), ), + // Bouton pour ajouter un cadeau à un autre produit + Container( + margin: const EdgeInsets.only(left: 4), + child: IconButton( + icon: Icon( + Icons.add_circle_outline, + size: isMobile ? 16 : 18, + color: Colors.green.shade600, + ), + onPressed: isOutOfStock ? null : () => _showCadeauDialog(product), + tooltip: 'Ajouter un cadeau', + style: IconButton.styleFrom( + backgroundColor: Colors.green.shade50, + minimumSize: Size(isMobile ? 32 : 36, isMobile ? 32 : 36), + ), + ), + ), + ], + ), + const SizedBox(height: 8), + ], + + // Contrôles de quantité + Container( + decoration: BoxDecoration( + color: isOutOfStock + ? Colors.grey.shade100 + : detailPanier?.estCadeau == true + ? Colors.green.shade50 + : Colors.blue.shade50, + borderRadius: BorderRadius.circular(20), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + IconButton( + icon: Icon( + Icons.remove, + size: isMobile ? 16 : 18 + ), + onPressed: isOutOfStock ? null : () { + if (currentQuantity > 0) { + _modifierQuantite(product.id!, currentQuantity - 1); + } + }, ), - if (product.reference != null && product.reference!.isNotEmpty) Text( - 'Réf: ${product.reference}', + currentQuantity.toString(), style: TextStyle( - fontSize: isMobile ? 9 : 11, - color: Colors.grey.shade600, + fontWeight: FontWeight.bold, + fontSize: isMobile ? 12 : 14, ), ), - ], - ), - ), - Container( - decoration: BoxDecoration( - color: isOutOfStock - ? Colors.grey.shade100 - : Colors.blue.shade50, - borderRadius: BorderRadius.circular(20), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - IconButton( - icon: Icon( - Icons.remove, - size: isMobile ? 16 : 18 - ), - onPressed: isOutOfStock ? null : () { - if (quantity > 0) { - setState(() { - _quantites[product.id!] = quantity - 1; - }); - } - }, - ), - Text( - quantity.toString(), - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: isMobile ? 12 : 14, - ), - ), - IconButton( - icon: Icon( - Icons.add, - size: isMobile ? 16 : 18 + IconButton( + icon: Icon( + Icons.add, + size: isMobile ? 16 : 18 + ), + onPressed: isOutOfStock ? null : () { + if (product.stock == null || currentQuantity < product.stock!) { + if (currentQuantity == 0) { + _ajouterAuPanier(product, 1); + } else { + _modifierQuantite(product.id!, currentQuantity + 1); + } + } else { + Get.snackbar( + 'Stock insuffisant', + 'Quantité demandée non disponible', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + ); + } + }, ), - onPressed: isOutOfStock ? null : () { - if (product.stock == null || quantity < product.stock!) { - setState(() { - _quantites[product.id!] = quantity + 1; - }); - } else { - Get.snackbar( - 'Stock insuffisant', - 'Quantité demandée non disponible', - snackPosition: SnackPosition.BOTTOM, - backgroundColor: Colors.red, - colorText: Colors.white, - ); - } - }, - ), - ], + ], + ), ), - ), - ], - ), + ], + ), + ], ), ), - ); - } + ), + ); +} + void _showCartBottomSheet() { final isMobile = MediaQuery.of(context).size.width < 600; @@ -1703,117 +2031,432 @@ Widget _buildSuggestionOverlay({ ); } + // 6. Modifier _buildCartItemsList pour afficher les remises Widget _buildCartItemsList() { - final itemsInCart = _quantites.entries.where((e) => e.value > 0).toList(); - - if (itemsInCart.isEmpty) { - return const Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Icon(Icons.shopping_cart_outlined, size: 60, color: Colors.grey), - SizedBox(height: 16), - Text( - 'Votre panier est vide', - style: TextStyle(fontSize: 16, color: Colors.grey), - ), - ], - ), - ); - } + final itemsInCart = _panierDetails.entries.where((e) => e.value.quantite > 0).toList(); + + if (itemsInCart.isEmpty) { + return const Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.shopping_cart_outlined, size: 60, color: Colors.grey), + SizedBox(height: 16), + Text( + 'Votre panier est vide', + style: TextStyle(fontSize: 16, color: Colors.grey), + ), + ], + ), + ); + } - return ListView.builder( - itemCount: itemsInCart.length, - itemBuilder: (context, index) { - final entry = itemsInCart[index]; - final product = _products.firstWhere((p) => p.id == entry.key); - - return Dismissible( - key: Key(entry.key.toString()), - background: Container( - color: Colors.red.shade100, - alignment: Alignment.centerRight, - padding: const EdgeInsets.only(right: 20), - child: const Icon(Icons.delete, color: Colors.red), + return ListView.builder( + itemCount: itemsInCart.length, + itemBuilder: (context, index) { + final entry = itemsInCart[index]; + final detail = entry.value; + final product = _products.firstWhere((p) => p.id == entry.key); + + return Dismissible( + key: Key(entry.key.toString()), + background: Container( + color: Colors.red.shade100, + alignment: Alignment.centerRight, + padding: const EdgeInsets.only(right: 20), + child: const Icon(Icons.delete, color: Colors.red), + ), + direction: DismissDirection.endToStart, + onDismissed: (direction) { + setState(() { + _panierDetails.remove(entry.key); + }); + Get.snackbar( + 'Produit retiré', + '${product.name} a été retiré du panier', + snackPosition: SnackPosition.BOTTOM, + ); + }, + child: Card( + margin: const EdgeInsets.only(bottom: 8), + elevation: 1, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + side: detail.estCadeau + ? BorderSide(color: Colors.green.shade300, width: 1.5) + : detail.aRemise + ? BorderSide(color: Colors.orange.shade300, width: 1.5) + : BorderSide.none, ), - direction: DismissDirection.endToStart, - onDismissed: (direction) { - setState(() { - _quantites.remove(entry.key); - }); - Get.snackbar( - 'Produit retiré', - '${product.name} a été retiré du panier', - snackPosition: SnackPosition.BOTTOM, - ); - }, - child: Card( - margin: const EdgeInsets.only(bottom: 8), - elevation: 1, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - ), - child: ListTile( - contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), - leading: Container( - width: 40, - height: 40, - decoration: BoxDecoration( - color: Colors.blue.shade50, - borderRadius: BorderRadius.circular(8), - ), - child: const Icon(Icons.shopping_bag, size: 20), + child: ListTile( + contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + leading: Container( + width: 40, + height: 40, + decoration: BoxDecoration( + color: detail.estCadeau + ? Colors.green.shade50 + : detail.aRemise + ? Colors.orange.shade50 + : Colors.blue.shade50, + borderRadius: BorderRadius.circular(8), ), - title: Text(product.name), - subtitle: Text('${entry.value} x ${product.price.toStringAsFixed(2)} MGA'), - trailing: Text( - '${(entry.value * product.price).toStringAsFixed(2)} MGA', - style: TextStyle( - fontWeight: FontWeight.bold, - color: Colors.blue.shade800, - ), + child: Icon( + detail.estCadeau + ? Icons.card_giftcard + : detail.aRemise + ? Icons.discount + : Icons.shopping_bag, + size: 20, + color: detail.estCadeau + ? Colors.green.shade700 + : detail.aRemise + ? Colors.orange.shade700 + : Colors.blue.shade700, ), ), + title: Row( + children: [ + Expanded(child: Text(product.name)), + if (detail.estCadeau) + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2), + decoration: BoxDecoration( + color: Colors.green.shade100, + borderRadius: BorderRadius.circular(10), + ), + child: Text( + 'CADEAU', + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.bold, + color: Colors.green.shade700, + ), + ), + ), + ], + ), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text('${detail.quantite} x '), + if (detail.estCadeau) ...[ + Text( + 'GRATUIT', + style: TextStyle( + color: Colors.green.shade700, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(width: 8), + Text( + '(${detail.prixUnitaire.toStringAsFixed(2)} MGA)', + style: TextStyle( + fontSize: 11, + color: Colors.grey.shade500, + decoration: TextDecoration.lineThrough, + ), + ), + ] else if (detail.aRemise) ...[ + Text( + '${detail.prixUnitaire.toStringAsFixed(2)}', + style: const TextStyle( + decoration: TextDecoration.lineThrough, + color: Colors.grey, + ), + ), + const Text(' → '), + Text( + '${(detail.prixFinal / detail.quantite).toStringAsFixed(2)} MGA', + style: TextStyle( + color: Colors.orange.shade700, + fontWeight: FontWeight.bold, + ), + ), + ] else + Text('${detail.prixUnitaire.toStringAsFixed(2)} MGA'), + ], + ), + if (detail.aRemise && !detail.estCadeau) + Text( + 'Remise: ${detail.remiseDescription} (-${detail.montantRemise.toStringAsFixed(2)} MGA)', + style: TextStyle( + fontSize: 11, + color: Colors.orange.shade600, + fontStyle: FontStyle.italic, + ), + ), + if (detail.estCadeau) + Row( + children: [ + Icon( + Icons.card_giftcard, + size: 12, + color: Colors.green.shade600, + ), + const SizedBox(width: 4), + Text( + 'Article offert gracieusement', + style: TextStyle( + fontSize: 11, + color: Colors.green.shade600, + fontStyle: FontStyle.italic, + ), + ), + ], + ), + ], + ), + trailing: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + if (detail.estCadeau) ...[ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.card_giftcard, + size: 16, + color: Colors.green.shade700, + ), + const SizedBox(width: 4), + Text( + 'GRATUIT', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.green.shade700, + fontSize: 14, + ), + ), + ], + ), + Text( + 'Valeur: ${detail.sousTotal.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 10, + color: Colors.grey.shade500, + fontStyle: FontStyle.italic, + ), + ), + ] else if (detail.aRemise && detail.sousTotal != detail.prixFinal) ...[ + Text( + '${detail.sousTotal.toStringAsFixed(2)} MGA', + style: const TextStyle( + fontSize: 11, + decoration: TextDecoration.lineThrough, + color: Colors.grey, + ), + ), + Text( + '${detail.prixFinal.toStringAsFixed(2)} MGA', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.orange.shade700, + fontSize: 14, + ), + ), + ] else + Text( + '${detail.prixFinal.toStringAsFixed(2)} MGA', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.blue.shade800, + fontSize: 14, + ), + ), + ], + ), + onTap: () { + if (detail.estCadeau) { + _basculerStatutCadeau(product.id!); + } else { + _showRemiseDialog(product); + } + }, ), - ); - }, - ); - } + ), + ); + }, + ); +} + + // 7. Modifier _buildCartTotalSection pour afficher les totaux avec remises Widget _buildCartTotalSection() { - double total = 0; - _quantites.forEach((productId, quantity) { - final product = _products.firstWhere((p) => p.id == productId); - total += quantity * product.price; - }); + double sousTotal = 0; + double totalRemises = 0; + double totalCadeaux = 0; + double total = 0; + int nombreCadeaux = 0; + + _panierDetails.forEach((productId, detail) { + sousTotal += detail.sousTotal; + if (detail.estCadeau) { + totalCadeaux += detail.sousTotal; + nombreCadeaux += detail.quantite; + } else { + totalRemises += detail.montantRemise; + } + total += detail.prixFinal; + }); - return Column( - children: [ + return Column( + children: [ + // Sous-total + if (totalRemises > 0 || totalCadeaux > 0) ...[ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - const Text( - 'Total:', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + const Text('Sous-total:', style: TextStyle(fontSize: 14)), + Text( + '${sousTotal.toStringAsFixed(2)} MGA', + style: const TextStyle(fontSize: 14), ), + ], + ), + const SizedBox(height: 4), + ], + + // Remises totales + if (totalRemises > 0) ...[ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ Text( - '${total.toStringAsFixed(2)} MGA', - style: const TextStyle( - fontSize: 18, + 'Remises totales:', + style: TextStyle( + fontSize: 14, + color: Colors.orange.shade700, + ), + ), + Text( + '-${totalRemises.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 14, + color: Colors.orange.shade700, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + const SizedBox(height: 4), + ], + + // Cadeaux offerts + if (totalCadeaux > 0) ...[ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Icon( + Icons.card_giftcard, + size: 16, + color: Colors.green.shade700, + ), + const SizedBox(width: 4), + Text( + 'Cadeaux offerts ($nombreCadeaux):', + style: TextStyle( + fontSize: 14, + color: Colors.green.shade700, + ), + ), + ], + ), + Text( + '-${totalCadeaux.toStringAsFixed(2)} MGA', + style: TextStyle( + fontSize: 14, + color: Colors.green.shade700, fontWeight: FontWeight.bold, - color: Colors.green, ), ), ], ), - const SizedBox(height: 8), + const SizedBox(height: 4), + ], + + if (totalRemises > 0 || totalCadeaux > 0) + const Divider(height: 16), + + // Total final + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + 'Total:', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + Text( + '${total.toStringAsFixed(2)} MGA', + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.green, + ), + ), + ], + ), + + const SizedBox(height: 8), + + // Résumé + Text( + '${_panierDetails.values.where((d) => d.quantite > 0).length} article(s)', + style: TextStyle(color: Colors.grey.shade600), + ), + + // Économies totales + if (totalRemises > 0 || totalCadeaux > 0) ...[ + const SizedBox(height: 4), + Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + decoration: BoxDecoration( + color: Colors.green.shade50, + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.green.shade200), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.savings, + size: 16, + color: Colors.green.shade700, + ), + const SizedBox(width: 4), + Text( + 'Économies totales: ${(totalRemises + totalCadeaux).toStringAsFixed(2)} MGA', + style: TextStyle( + color: Colors.green.shade700, + fontWeight: FontWeight.bold, + fontSize: 12, + ), + ), + ], + ), + ), + ], + + // Détail des économies + if (totalRemises > 0 && totalCadeaux > 0) ...[ + const SizedBox(height: 4), Text( - '${_quantites.values.where((q) => q > 0).length} article(s)', - style: TextStyle(color: Colors.grey.shade600), + 'Remises: ${totalRemises.toStringAsFixed(2)} MGA • Cadeaux: ${totalCadeaux.toStringAsFixed(2)} MGA', + style: TextStyle( + color: Colors.grey.shade600, + fontSize: 11, + fontStyle: FontStyle.italic, + ), ), ], - ); - } + ], + ); +} Widget _buildSubmitButton() { final isMobile = MediaQuery.of(context).size.width < 600; @@ -1834,7 +2477,7 @@ Widget _buildSuggestionOverlay({ ), onPressed: _submitOrder, child: _isLoading - ? SizedBox( + ? const SizedBox( width: 20, height: 20, child: CircularProgressIndicator( @@ -1850,9 +2493,9 @@ Widget _buildSuggestionOverlay({ ); } - Future _submitOrder() async { + Future _submitOrder() async { // Vérifier d'abord si le panier est vide - final itemsInCart = _quantites.entries.where((e) => e.value > 0).toList(); + final itemsInCart = _panierDetails.entries.where((e) => e.value.quantite > 0).toList(); if (itemsInCart.isEmpty) { Get.snackbar( 'Panier vide', @@ -1861,11 +2504,11 @@ Widget _buildSuggestionOverlay({ backgroundColor: Colors.red, colorText: Colors.white, ); - _showCartBottomSheet(); // Ouvrir le panier pour montrer qu'il est vide + _showCartBottomSheet(); return; } - // Ensuite vérifier les informations client + // Vérifier les informations client if (_nomController.text.isEmpty || _prenomController.text.isEmpty || _emailController.text.isEmpty || @@ -1896,24 +2539,17 @@ Widget _buildSuggestionOverlay({ dateCreation: DateTime.now(), ); - // Calculer le total et préparer les détails + // Calculer le total final et préparer les détails double total = 0; final details = []; for (final entry in itemsInCart) { - final product = _products.firstWhere((p) => p.id == entry.key); - total += entry.value * product.price; - - details.add(DetailCommande( - commandeId: 0, - produitId: product.id!, - quantite: entry.value, - prixUnitaire: product.price, - sousTotal: entry.value * product.price, - )); + final detail = entry.value; + total += detail.prixFinal; + details.add(detail); } - // Créer la commande + // Créer la commande avec le total final (après remises) final commande = Commande( clientId: 0, dateCommande: DateTime.now(), @@ -1929,12 +2565,12 @@ Widget _buildSuggestionOverlay({ // Fermer le panier avant d'afficher la confirmation Get.back(); - // Afficher le dialogue de confirmation - adapté pour mobile + // Afficher le dialogue de confirmation final isMobile = MediaQuery.of(context).size.width < 600; await showDialog( context: context, - barrierDismissible: false, // Empêcher la fermeture accidentelle + barrierDismissible: false, builder: (context) => AlertDialog( title: Row( children: [ @@ -1975,9 +2611,7 @@ Widget _buildSuggestionOverlay({ ), onPressed: () { Navigator.pop(context); - // Vider complètement le formulaire et le panier _clearFormAndCart(); - // Recharger les produits pour mettre à jour le stock _loadProducts(); }, child: Text( @@ -2005,6 +2639,104 @@ Widget _buildSuggestionOverlay({ } } +Future _showCadeauDialog(Product product) async { + final detailExistant = _panierDetails[product.id!]; + + if (detailExistant == null || detailExistant.quantite == 0) { + Get.snackbar( + 'Produit requis', + 'Vous devez d\'abord ajouter ce produit au panier', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.orange, + colorText: Colors.white, + ); + return; + } + + final result = await showDialog>( + context: context, + builder: (context) => CadeauDialog( + product: product, + quantite: detailExistant.quantite, + detailExistant: detailExistant, + ), + ); + + if (result != null) { + _ajouterCadeauAuPanier( + result['produit'] as Product, + result['quantite'] as int, + ); + } +} +void _ajouterCadeauAuPanier(Product produitCadeau, int quantite) { + // Vérifier le stock disponible + if (produitCadeau.stock != null && quantite > produitCadeau.stock!) { + Get.snackbar( + 'Stock insuffisant', + 'Quantité de cadeau demandée non disponible', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + ); + return; + } + + setState(() { + final detailCadeau = DetailCommande.cadeau( + commandeId: 0, // Sera défini lors de la création + produitId: produitCadeau.id!, + quantite: quantite, + prixUnitaire: produitCadeau.price, + produitNom: produitCadeau.name, + produitReference: produitCadeau.reference, + ); + _panierDetails[produitCadeau.id!] = detailCadeau; + }); + + Get.snackbar( + 'Cadeau ajouté', + '${produitCadeau.name} a été ajouté comme cadeau', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.green.shade600, + colorText: Colors.white, + duration: const Duration(seconds: 3), + icon: const Icon(Icons.card_giftcard, color: Colors.white), + ); +} +void _basculerStatutCadeau(int productId) { + final detailExistant = _panierDetails[productId]; + if (detailExistant == null) return; + + setState(() { + if (detailExistant.estCadeau) { + // Convertir en article normal + _panierDetails[productId] = detailExistant.convertirEnArticleNormal(); + + Get.snackbar( + 'Statut modifié', + 'L\'article n\'est plus un cadeau', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.blue.shade600, + colorText: Colors.white, + duration: const Duration(seconds: 2), + ); + } else { + // Convertir en cadeau + _panierDetails[productId] = detailExistant.convertirEnCadeau(); + + Get.snackbar( + 'Cadeau offert', + 'L\'article est maintenant un cadeau', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.green.shade600, + colorText: Colors.white, + duration: const Duration(seconds: 2), + icon: const Icon(Icons.card_giftcard, color: Colors.white), + ); + } + }); +} @override void dispose() { _qrController?.dispose(); diff --git a/lib/Views/registrationPage.dart b/lib/Views/registrationPage.dart index 3bf44d5..a0ba967 100644 --- a/lib/Views/registrationPage.dart +++ b/lib/Views/registrationPage.dart @@ -3,7 +3,6 @@ import 'package:youmazgestion/Models/users.dart'; import 'package:youmazgestion/Models/role.dart'; import 'package:youmazgestion/Services/stock_managementDatabase.dart'; import 'package:youmazgestion/Views/Dashboard.dart'; -import 'package:youmazgestion/accueil.dart'; //import '../Services/app_database.dart'; // Changé de authDatabase.dart diff --git a/lib/Views/ticketPage.dart b/lib/Views/ticketPage.dart index 5e0a8fd..3d443da 100644 --- a/lib/Views/ticketPage.dart +++ b/lib/Views/ticketPage.dart @@ -1,10 +1,9 @@ import 'dart:io'; -import 'package:esc_pos_printer/esc_pos_printer.dart'; + import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:intl/intl.dart'; -import 'package:esc_pos_utils/esc_pos_utils.dart'; + import 'package:open_file/open_file.dart'; import 'package:path_provider/path_provider.dart'; import 'package:pdf/pdf.dart'; @@ -31,117 +30,6 @@ class TicketPage extends StatelessWidget { required this.amountPaid, }) : super(key: key); - Future _printTicket() async { - final profile = await CapabilityProfile.load(); - final printer = NetworkPrinter(PaperSize.mm80, profile); - - printer.text('Ticket de caisse', - styles: const PosStyles( - align: PosAlign.center, - height: PosTextSize.size2, - width: PosTextSize.size2, - )); - - printer.text('Entreprise : $businessName'); - printer.text('Adresse : $businessAddress'); - printer.text('Numéro de téléphone : $businessPhoneNumber'); - - printer.hr(); - printer.row([ - PosColumn( - text: 'Produit', - width: 3, - styles: const PosStyles(align: PosAlign.left, bold: true), - ), - PosColumn( - text: 'Quantité', - width: 1, - styles: const PosStyles(align: PosAlign.left, bold: true), - ), - PosColumn( - text: 'Prix unitaire', - width: 1, - styles: const PosStyles(align: PosAlign.left, bold: true), - ), - PosColumn( - text: 'Total', - width: 1, - styles: const PosStyles(align: PosAlign.left, bold: true), - ), - ]); - printer.hr(); - - for (final cartItem in cartItems) { - final product = cartItem.product; - final quantity = cartItem.quantity; - final productTotal = product.price * quantity; - - printer.row([ - PosColumn( - text: product.name, - width: 3, - ), - PosColumn( - text: quantity.toString(), - width: 1, - ), - PosColumn( - text: '${product.price.toStringAsFixed(2)} MGA', - width: 1, - ), - PosColumn( - text: '${productTotal.toStringAsFixed(2)} MGA', - width: 1, - ), - ]); - } - - printer.hr(); - printer.row([ - PosColumn( - text: 'Total :', - width: 3, - styles: const PosStyles(align: PosAlign.left, bold: true), - ), - PosColumn( - text: '${totalCartPrice.toStringAsFixed(2)} MGA', - width: 1, - styles: const PosStyles(align: PosAlign.left, bold: true), - ), - ]); - printer.row([ - PosColumn( - text: 'Somme remise :', - width: 3, - styles: const PosStyles(align: PosAlign.left), - ), - PosColumn( - text: '${amountPaid.toStringAsFixed(2)} MGA', - width: 1, - styles: const PosStyles(align: PosAlign.left), - ), - ]); - printer.row([ - PosColumn( - text: 'Somme rendue :', - width: 3, - styles: const PosStyles(align: PosAlign.left), - ), - PosColumn( - text: '${(amountPaid - totalCartPrice).toStringAsFixed(2)} MGA', - width: 1, - styles: const PosStyles(align: PosAlign.left), - ), - ]); - printer.hr(); - printer.text('Youmaz vous remercie pour votre achat!!!'); - printer.feed(2); - - printer.cut(); - printer.disconnect(); // Fermez la connexion après l'impression - - Get.snackbar('Impression', 'Ticket imprimé avec succès'); - } Future _generateAndSavePDF() async { final pdf = pw.Document(); @@ -265,11 +153,7 @@ class TicketPage extends StatelessWidget { } // Obtenir la date actuelle - final currentDate = DateTime.now(); - final formattedDate = DateFormat('dd/MM/yyyy HH:mm').format(currentDate); - // Calculer la somme remise - final double discount = totalOrderAmount - totalCartPrice; // Calculer la somme rendue final double change = amountPaid - totalOrderAmount; diff --git a/lib/accueil.dart b/lib/accueil.dart index 2bbd1f9..42039c8 100644 --- a/lib/accueil.dart +++ b/lib/accueil.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:intl/intl.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -115,7 +114,7 @@ class _AccueilPageState extends State { await orderDatabase.insertOrderItem( orderId, product.name, quantity, price); - final updatedStock = product.stock! - quantity; + final updatedStock = product.stock - quantity; await productDatabase.updateStock(product.id!, updatedStock); } diff --git a/lib/config/DatabaseConfig.dart b/lib/config/DatabaseConfig.dart index 79faab7..f0b7124 100644 --- a/lib/config/DatabaseConfig.dart +++ b/lib/config/DatabaseConfig.dart @@ -1,10 +1,10 @@ // Config/database_config.dart - Version améliorée class DatabaseConfig { - static const String host = '172.20.10.5'; + static const String host = 'localhost'; static const int port = 3306; static const String username = 'root'; static const String? password = null; - static const String database = 'guycom_databse_v1'; + static const String database = 'gico'; static const String prodHost = '185.70.105.157'; static const String prodUsername = 'guycom'; @@ -17,7 +17,7 @@ class DatabaseConfig { static const int maxConnections = 10; static const int minConnections = 2; - static bool get isDevelopment => false; + static bool get isDevelopment => true; static Map getConfig() { if (isDevelopment) { diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index ea57761..6713b98 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -9,7 +9,9 @@ #include #include #include +#include #include +#include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) charset_converter_registrar = @@ -21,7 +23,13 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) open_file_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "OpenFileLinuxPlugin"); open_file_linux_plugin_register_with_registrar(open_file_linux_registrar); + g_autoptr(FlPluginRegistrar) screen_retriever_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin"); + screen_retriever_plugin_register_with_registrar(screen_retriever_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); + g_autoptr(FlPluginRegistrar) window_manager_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "WindowManagerPlugin"); + window_manager_plugin_register_with_registrar(window_manager_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index e734d46..e1cc94e 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -6,7 +6,9 @@ list(APPEND FLUTTER_PLUGIN_LIST charset_converter file_selector_linux open_file_linux + screen_retriever url_launcher_linux + window_manager ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index d42444f..ce26282 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -10,8 +10,10 @@ import file_selector_macos import mobile_scanner import open_file_mac import path_provider_foundation +import screen_retriever import shared_preferences_foundation import url_launcher_macos +import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin")) @@ -19,6 +21,8 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin")) OpenFilePlugin.register(with: registry.registrar(forPlugin: "OpenFilePlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) + WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index 35e5036..3fac1ac 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -912,6 +912,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.3" + screen_retriever: + dependency: transitive + description: + name: screen_retriever + sha256: "6ee02c8a1158e6dae7ca430da79436e3b1c9563c8cf02f524af997c201ac2b90" + url: "https://pub.dev" + source: hosted + version: "0.1.9" shared_preferences: dependency: "direct main" description: @@ -1205,6 +1213,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.12.0" + window_manager: + dependency: "direct main" + description: + name: window_manager + sha256: "8699323b30da4cdbe2aa2e7c9de567a6abd8a97d9a5c850a3c86dcd0b34bbfbf" + url: "https://pub.dev" + source: hosted + version: "0.3.9" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f5ede25..ed45759 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -67,6 +67,7 @@ dependencies: fl_chart: ^0.65.0 # Version la plus récente au moment de cette répons numbers_to_letters: ^1.0.0 qr_code_scanner_plus: ^2.0.10+1 + window_manager: ^0.3.7 @@ -109,6 +110,7 @@ flutter: - assets/mvola.jpg - assets/Orange_money.png - assets/fa-solid-900.ttf + - assets/NotoEmoji-Regular.ttf - assets/fonts/Roboto-Italic.ttf # An image asset can refer to one or more resolution-specific "variants", see diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index a342058..5716043 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -8,13 +8,19 @@ #include #include +#include #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { CharsetConverterPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("CharsetConverterPlugin")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); + ScreenRetrieverPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("ScreenRetrieverPlugin")); UrlLauncherWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("UrlLauncherWindows")); + WindowManagerPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("WindowManagerPlugin")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 5d12043..239eabd 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -5,7 +5,9 @@ list(APPEND FLUTTER_PLUGIN_LIST charset_converter file_selector_windows + screen_retriever url_launcher_windows + window_manager ) list(APPEND FLUTTER_FFI_PLUGIN_LIST