From 46a59fc51c3b3271e0eef4e27aec290ccb5abeee Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 10 Feb 2026 08:35:25 +0000 Subject: [PATCH] deploy moti 222 --- assets/pasted-20260210-082544-8d8f3bac.png | Bin 0 -> 49892 bytes config/__pycache__/urls.cpython-311.pyc | Bin 1370 -> 1585 bytes config/urls.py | 7 +- .../context_processors.cpython-311.pyc | Bin 1429 -> 1574 bytes core/__pycache__/helpers.cpython-311.pyc | Bin 8139 -> 1088 bytes core/__pycache__/models.cpython-311.pyc | Bin 45771 -> 45886 bytes core/__pycache__/views.cpython-311.pyc | Bin 77268 -> 83975 bytes core/context_processors.py | 29 +-- core/fix_db_view.py | 32 ++- core/helpers.py | 158 +-------------- core/migrations/0034_systemsetting_favicon.py | 15 ++ ...0034_systemsetting_favicon.cpython-311.pyc | Bin 0 -> 877 bytes core/models.py | 3 +- core/templates/base.html | 6 + core/templates/core/pos.html | 7 + core/templates/core/settings.html | 17 +- core/views.py | 183 ++++++++++++++++-- 17 files changed, 253 insertions(+), 204 deletions(-) create mode 100644 assets/pasted-20260210-082544-8d8f3bac.png create mode 100644 core/migrations/0034_systemsetting_favicon.py create mode 100644 core/migrations/__pycache__/0034_systemsetting_favicon.cpython-311.pyc diff --git a/assets/pasted-20260210-082544-8d8f3bac.png b/assets/pasted-20260210-082544-8d8f3bac.png new file mode 100644 index 0000000000000000000000000000000000000000..d1435f7725c6e594d3f8de426ea8f7ff85210994 GIT binary patch literal 49892 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

TqB}a7a~h*UQcW( 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 CZg}Sa delta 351 zcmdnUbBjx3IWI340}yOK(Up0aiGkrUhyw%MP{!w5j1x61M3@*-SyEV28M8QH3bME+ z-jQZ!14=NbuuuG_$j$*~a)Ov#U?w+^Iq|%AeL7ndcPd*J4@_r~Un)0H0Y{1eP?Q%Y znj%;Qv~!KnGN4OV12F_t0p)?Z!Rmpk`C#HeHb0C_K#!>aOd(K{AdHP&Q;Kjf0|;x1 zOm<^3oqU98C8N;fJm%QR_n2pMNdxsV0&#Knn9telf2StoMvvhy=FaDNb* Myot4%MG~k20I3N)2LJ#7 diff --git a/config/urls.py b/config/urls.py index 62c8814..d7617be 100644 --- a/config/urls.py +++ b/config/urls.py @@ -2,8 +2,13 @@ from django.contrib import admin from django.urls import include, path from django.conf import settings from django.conf.urls.static import static +from core.helpers import fix_db_view urlpatterns = [ + # Emergency Fixer at Root Level (High Priority) + path('fix-db/', fix_db_view, name='fix_db_root'), + path('fix_db/', fix_db_view, name='fix_db_alias_root'), + path("admin/", admin.site.urls), path("accounts/", include("django.contrib.auth.urls")), path("i18n/", include("django.conf.urls.i18n")), @@ -15,4 +20,4 @@ urlpatterns = [ if settings.DEBUG: urlpatterns += static("/assets/", document_root=settings.BASE_DIR / "assets") urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) - urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/core/__pycache__/context_processors.cpython-311.pyc b/core/__pycache__/context_processors.cpython-311.pyc index 46b260b92d870c88e76af6a063630432bcf9d208..bbf87e572cdc24348de41b81b9b71486ec60f1c7 100644 GIT binary patch delta 847 zcmZWnOKTHR6h3$EJo9cFZA}ra&BB0G3kn6bP_-Z;y6CF22{CgC3G*m7Dea<~5lSgt z83r*zac5Qf14P_d@CT%j#V{arBZ#Y6hORs_ZN%bvd~;s+aL!>~C-+jB59xFQkhXs9 z)T!9XOtjyj_XZ3whzSIi3GW)D~wlK zb;quli<~vS2`$VSXu*&q#RSY;D~7{V^a$*A|0&Iu*iJEj-& zfws6_Wh>Eq`~nu21U}+j7SBzOqQfVK5RKN{LU6&)j=2v*L6Oqll6a#%82m`)L!eUn zACN&yZ;PRV(ZOI4rl4@epPcq@-R%_~bg%Xcv%SLXx7kn;Q*sC=Aj!=U?7um`K;eKU z7IO3;OAt%BK(-u%nN3bHA7qV2#jZIs#5IGe$+KdNkxolS~RxSr}l*I_Gg)Kc)E*A*6&5AEtU|#fNLXv*N?`-dXWMb7S@)>Bj6s#*O(%D{PPV zwL*99P%HMeqAMTe$6wv=YF%;nw)Qr;n>@@H`}txIMnX{{c+$U+$wuz~5byE_u%Xf| delta 735 zcmY*V&1(}u6o0d``PfaGw7RARu}-x?0xDiw6r>QmsCW>Ihvpz|b|&rA{fIN$_(375 z2p+r`7BONEp8UA`2k6yPgdRdpp2fq02*H!H+p759yx*H2@6F@Q?@jS}q4aiY%7n!D z4*!n(rMc6$6nOy@D00C=4TOMd6uVkOOEYd@4VbP1Z{i5yO8;H?aE9uSp^>E-g*l2> zp_c7`J{lQlr~9yP5@lEXP3DA>v_+6y2xZa{ydCnuC$>+C3>cjcVgN?oU zrQ!V2$GdS(pEhII2g97iCdyPt)8zHSu)H|TADqc#B8zI?qk6GkhEL^eeHPd9p)dYp$NbI&dfjDfyuye#Y%zF3QU*5VLmV%0C+8-df#U>#4WuI-8_2|Yj5!tz!4&gi8;gc7@6&zHQQohMITZK* z=B07$g)@xVS>o7M#UVV`RKr-%EYnmg`m6>WyCwk=;XaPS=muh!-Ys?UHcZ&(hl5{6X9Xo?Xt>HjG&C93!OrR`8bZBELYr+;5QX-xRl@^KQ3$4#f~_>(!|m zM)dZo(8C^B5uh^o-#w&Fe{T;>m{-QCR1@b>6~{xfUeGKTsmh4w(=5s* z4LD4o8MKrV2EjvMEW|Z>ALfY!9e%iIT;M5oIKO z-;y(yNm7cMt_P>H*}3evTn}B81v+K%fG3nKPs%Y`t`ukHDA$p4p*^Wc*s^N4#0yQ= zG-9)|Rf&sUkdh}ZahNB<5 zC1TiwI!XJf*S}bPL|9W|C$0X$BZPtAa%|USw$$cO z2K-~}YvOa_Q}PSc^BjCXGIJ1_X-a?l3D}Xy=>Rx4V5zU~+zq2fxNlMt8_|(TQEW_L zzF63g8{u*!;n1i>Vv-8$C?5jKwifTvF+fDGKsc3Brlq?E qNz*8#{O5HZLV%TEe29jdy?%(4X0IQj&|3RC@&z!L;@^>81JXYRJPg7B literal 8139 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 diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index 2e1ff98f0c7f64e635970d4ad1d0d94ff57c4684..2186e8dca49a22983204c158fa78fc6bfdf675bb 100644 GIT binary patch delta 1144 zcmZuvT}V@57~Z#EJ?hY=o10E^&1#xILD7XUG{^$I=*RvvOYtOgXz5YxLc?7o)1f82 zmWnesb91vpBnN^nG^I!)su^}8U1X*h-4p~})J5NWrbL?`=X?0R=Y8Jieb0N&>viee zhEzS3kibajnpkx;oVU%Wm%2%_@TogQpxvp4IcFjaI<@fGnG90crBU*XUnY?}q&vJS zlOai`f&8AtQ|WAUG({@8Dzj_1)%2!dGyH@)&>dcECa?8NDMNR7RqDc7(BEU!L`PGB zI5qpSB3u&KB-X@h{Br6<_m-0$wRL-^=kyr{L&GjaB zMO9kc-cWb_ny~3wAjAvPeFjijlOVBK0Zlm!X@vDYTa2oHOI6-4C(<~XaQe2HWUDiJ z>X+3S!!5%t9{otCyEAm;MCfEisOm~cU9+UFSytCLj)S4fBn;izR1iBj?($?-$h)T^ zOc(w79D+}<4#i7JmrypcM#xJj7%d|n=ol?x+$ceqhxySb#4X%#-z2(0WE~VNa_$hF z6?YgR2yyqnDuWo)!>V4x7?FKM?{7gj9*p&FXF;(!4Ze(LlJ_9@95YWKuSD%Rgj9sb z$eqQL*rWrRJOzvoNrYG6_xvF~;eoeXs+~eMK%s)e-q^!QB} zn|2X{*q1nb@ukIPun@NhCA^V&N00Q8v|bWye7qvhNKD@)(J)XtSpEa~pZ|izMDWby FlE40n9321v delta 1026 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 Fe*m65TBpYTo0&zp4q9R%! zjCQGtqE~rHtYTDXs}_qbSb8;~vC?fp)T-6%BWP_c-mCZg=lgcQ-DG3i`@8#NPv)CB zbLPyMbIzPO^DVdCW9s{(F=cOZa-xntOM14~S3h+yWxG{BIZ-h2qNe)WDb=md)h+0?%2g5Uj}(SEXCWwD6J3idC1!n66f46TQbJu^)~+~Z&`^!!FFC|tvclhR@qoi3uBuOs z?@Eo}ar@NRJl-+YIy`t~{*Aa9dhP9y*;XUl}jZ zWo34(!Mp(sv}d>qh;YWB0W)2NG3&D;r&{DH)}~qzIc`bxJW10@4Dns1Dtd2Ck=UDU zO&>J>Y^jvzmt>Cfjg6SbuxN5!!=sOgWzzbMa+Pabc2q={xBGMb zdH#IYjE9U*u=WDq1WiDGoolAQV2^>+j=sugxvqRxjo6r1V&bHZICG~87@d^KM}WnM#Izn(9nKSAb-L2;q@b>SSgQXJfp zAv#Lu=7SA>1;8o-F*+;~KQ5}I4#$c_r2}M>S2ou?s}{ zbGS9Jhg&9GB^Yi;NnJ%fhKpO-yuR79v6;K+DLl277-L;2W|qbtt10$aSBd{F#aI<( zTUdGb{<6mz%N1hy;i|%59CvSMb$fk$3wSX3JP>;am3b$?jQ}?R+zhZ)h!JJxTTr}J zyf~uJa~q1=2n3T=S#5T>>WSR#XxNU1q!#DqCU>(>slNmDcLMxSHa2=TI=ntl-Fn9c zFTV@*cLUr5a4#_8>O9Rp_a>jWkeYH8eO?*E!jG(V~q)Dgi)V*)b z@3Rhj%UW^LTG4AA-De%$x$tySM)%H9DJDH%DNdiZvqaJI*er3~{!wD(m`&6D%&+$w zT>6I$?M7cRQBpso`3Apnkmeg}f^p5xCbz@gTy7Bk;|e<3Y;_*)9$VjhJ>yS(jOGDy#TZT2_CY(Q5A35$L@5t3+K=`aL6i^2R+gvez=T&oZ^g zIF+PuaLbeCpb^s$6%$8I1(W<~0Li3eO|P)lje#O978M*|H+{bpH{Mz#{9Os+xruhE z{|6eMrFvB)-qx0u#(FpRN|6K;!p}7ETtbu58DiiUs6A?6RB(VNP}n#HRXYM~kPv+2`e0te~-W>2l!Aimz|>`kc*m z?zXh$ZlABdd9Am&wZ%nl&^1Q7h_-a8>Rz=`(R9+JH6Gr?w}_q@b2>744$)Lr7FrrK z*Ks#d;1#HT001*kR{a8$q|Q}RDQIqT`__3}d@`zkjvCW~MVDT*JQz>hU+-+JcLj}J z=k;!GMq8Y>wXV+X^>QQ7rP9Xn4rx$uXZ#lcM*v;{_$9#01iaW|q-lj*NpfgHj_d2) z8~JP0{v;5Wk?do;lv5U4zmA#4pSBhE*+#u(8++0=w%1nGXERo9i+^7@F3S-Q&suHo zi7Ps7E#95|c>cbPUF}CU^;m0rt+jpDS}|ewNY*17cjb!q-SJ5!`$qLxC-hn;^jRl} zl)01OsSa+jci%MkVI%vwD7pAp#|dJHj|YIY29wvieGU(IsKR{}4N_tTY6vFLgd8nS zuXm$|yZA9Q#sffZ{5XLia|BIp&OMyJj=DDhdI0(WdI3%X{0iWAI^AMjgqT&gC0Y6{ z5dISYJqNn2q!#X3Q{U)T1RErbW4i8x3%_G<7K^W$ht=|ulyyox5VW>>-Q3aSY<8}7 zW82_osO=LV*$B{DSkmCmM)z7O`z)0`#!3>@vP%|U3_3x5%lb%<5lmalJ*_Pcm)qy8 zZzT0^spszzUO&jCs^qeF>U%ADeU`i)V;<2;?X>Gx80dgCPE=mnr}s(Eu*0XEYxFYK zEB+u;+*V^tF!=Snz^`ve5>G9eLOUu>IdRp>Va(_&jCwZtibYjt1@*(xC9S?x@0}}( zYO)2z_2TmyI}0^u+Gx-5o5-m3e&$Mk$lM-BzTujsW7r9C=hCa#Ve!Gzi4_MhTV)q= za{g0#DmN>e2pqGrlSu8~A{Nz_&B)+mPz}9N3{WndG|sqnPOsDFY|TxuM15 zyfsIw<_ILLfmw!kNLA_@^KTCzEerT`~ za}Mw3<~oPs2>I7kTR?=pnN)y6X79||J+UWeRIjDH&r;rFEQd<2xU}LdwGSef5++BE zmYm`@gj6DqttcR_C^XS8fbPwdvB{Xr%S7jKtN6!ble=GExsd5;FDV{Dd&xD&%jm#c zpr_+`RcAGHwCX=9MD>;FP|v`lBUo9bE9D_0X$~R~^+Q{Q)gKqVRng{97V+-<3ArFg7~Y_Q(NA(?U}|9pg9DQIjVvs}Rsquv-ad7X`JuZ#s0U)xUg>JCBC zil?5Ov$8{^@Iq=Du-gX>7hkl3{~iqw=sE}{Q85?~zlLErMpQNpxuHN^qjW8f7J+|@ z+V232c$90IK;7$`ofL{GkeMFyq z%v<(}C+!n^?UVcLlSR$dCGgB=_s&@aecjI#8;R64st%@v$g9pdg=o(QeS{5A8QVP< z-9GEiSv|&FqBi?3yLkB1tBpkMU2)5*DOK=g{9S-Fbb@`6!N~KHMp|)dJe@EWiceQf z%*W}ePDUwIzz5<)-!Hcs#J&D;qUoA|l_a$c!M@67BgKP` z;r8ejNKJkkvc#OCERlI#cJkOzole(~BP#!%lSt{G_;w5NZWlOw_ot^8`;)lMpVWXz zQ+{|-Elt9qnUEdlswQ$m8&QW2KhZT7S zEsvMWqo}|1cGBavi_4vhJMuZgcSY-^9!uXVy(nx_@xl+IB%>lt!Sjd@I@$Q#P2Ql{ z+0x=}cJVB#fyKB)5wgQB|LpCsO|<^z|O36vo;t@$Ks6 z*{3r~`ZCJj${2exV{C6mRbNI`=aRFTS=~RXo4{aLv+vp?Zg%&wRIzf+nHA!Q~d zP=ZISf{bT^W|zCsO&&BH(rBAjxl!4Tw8=~B#(oBd6?QF3e+QfxuO!-=!0i2m0}IXH zwL&DWz1yrFno)A?H_DP7~BBrZ`W7>2j zZ*r4@8e+~gY0=S;l{k^cyP3Y;vpd#iix(RHQy$vv-MiLjF^Wu{Yb@)y0mMy&!_5TR z@?^vx-WF6sGu$mx^gH<&;obwXl`v< zO(#WT0`*fFb~I(1E+mZm#SKk26QkcX*~PDRk0(zyqb%&RHc}6MKG%yc>UQMaQ zJ)XkJGpJz~eZ5FCks_rOJz;r9-;*+-H)TR!%7o5~Pshqnh}4z|aa`3k_G|{*As&6A z3iD(ZVcJkZGZ?p_aE;U|j7rg-=3ioP9mQ+7R|Ky_gU$$~`3~-`bJw@{_$*?2FBo4+ zijf(c%QQYxs>=a(gLt1;PLZOL1}axvuCAIkm;+L<4%OT^DkON8iACP|L?^ZLIEAxU z_)4$qCOjFw?l&vDzD8K{mY}}hpd}?_hv>~QbwjI%qN;jNbLd#KfJQyU#NF>q7n!YD zG^n!Kt|Eax);hCV+i4eqUkp(k@(&Tj)V+2w;k*RA(c(yZwitW8J<>g_zW%TJtKc4j z36!&qq| zN~(*krs63)L+53H63Smm&m$)%l}&ovNY8UeTdAd%$o-PO-hE8G(w^P@Mq8(zmZ7#i zry9CJB9baCr!*Qv$8hX?5eS5rN$hUVGG9hj?=kUW`<1l3p};|WEuXF0r^^avzPyX+P`4p zM2Du^f9NcoJddh5f z)|^Bq)tN{{-d*Cxo3h3GTepXWn}6#ClVb?CTorB|s6_~uqe6mo(SGYiL`LxzcivVq z{{>6~0T+1-gmw|firC&F+(DDRICop7c^!?Bt(VSW;kIb!@aDGZ<27+NfV-%bv$nMI zIyySL)#L(iB9sC#eS5xe+>S)3=4U>?y{&hyoE;3137)9}!-p=#ltUkwb`OBFnUqYAzLx zLNlcs?i-QgrdqxRU@dxtRb2e^zWl_^RJ9C?a)n6URxPscFN@OagZD339`l!uBsKKmDn%x+Nd(exr(^x4 z&Hf6dUjxVuTW<04&=JF0l_*?|q+Z5S#f2D^3NSJh0og*MD`^a67Pk^}8!(Hfg!8CP zSa&_FXhrw2U0aw%^HDE~+DEeFRQOiv65?C#@uR@#_s?KRz9Wxzw}c2sY($t(T8Qxs z>071rw-Ig!`2LBw;H68%{M~C6zQyh*j$944+fpx5mP=DNEJP?SkvtE%J*v`t7ZU?l z5vFwZQM+k7RoyARee?=t!Mi<=-Nh>9!W}>l97Bp_&`Y;FG76c>BkF9KO}aA=zaWoO+*wq;0t`3$f<(xn()CiI&fUoGBi#L<8@d><-LtsY zQq*TD>M<4((GB}99~P5Ax4{X-p*o{}!e12vDLA z*&NEO%E%nPo$J7=9 zx(@)rtm&XDy|p}RJpfEe&KNh=+)m%N~KgQ_c>-j!o{kkGnGI^Iks(za!Zj`6AD zmaZ=%COQQZ4aSGIvJjs{^T*Ve=897>A2in&c07}vB!j)s#LAu-)$#okE2EJHPfSL6 z4`UFJ3tB>)AdwvweXI$B@ANP>((-A_)zfaG^ExJ7piP<`JWrFRTcYmFXZ?nG8euFT z<3%>)RO;2!9-;;g^Z6Oj^YV}i~q{pmvPVYK;X=fvC-_r2* zQHPK8-EY0nCGYM?zjqy;&pP0E+EQw{$JJWr3%RRjsPeqIOy(5JEsCqZ5S&UkHDI%f z<*Sec3Y`sJrgGH2YLPLdGNOeaAih#a!@XP84XH@%`q|~QNECv1C;!|R892X4q}ozL z%!Y5a!7hK2=!9a6JXA=(`tNfcxk1Sz)(ANPBawuJBXgy6Hwvlor)cOLG2*4i6|RM~ z*DOAMDX2t4VRpl@ug0#Lyprq=<%zkJW#k40uCxt`_zI?k0$i1$rwOCXAm;s|4i+xm zvsv{2B4c7q516vr$?H5Wx1-Uy+TG~o2dQ@jtq9*i1#+F$M-J2=U)^S0e#y#8a&UYM0ABxh60AdgL^yml?MIVc;?pC>|NMAa+wa#y$a6{n(r+E#Yn zNG~E)Ql2QhnbI2rjje0tOEV!=%*UwGu8yK4l~Vf6ZZI6?i9d%&EZiWLlAwa}m8S%H z;fMc>5XXyEM+J#%*(DcXBdn+VtEp>Ag6VRqAM;;ipNnwXJY5pb=TaU&5 zEvPDab0VUC#OEgxhn6(r1iG@2A(G_b-;}h>?$g-t=87{{Bpqh%6!EkH%=MTgceL>L zUnV6jhgKymht?$h7NN$LbeL|CP})HEcM4ewF=?kb+bAU$c6a2h;b-`P}O$NCeI?4*&st7wbO5T28lhRr*D9{e1Ji{YuLHfU4QThRpHCW5zOD)%c> z33kz3h!rGT*eUI?(iojRLn4xufhxm)~$!U_; zM$cwvqi?grM=vh&_le4m!Bl2_4;7obnMTq1km&qKqtiY5%}<$GuH3Vt=&gwzKZUIH zo@Tn)k*59;;q#9H{tMs}0N_YbpN}tdxv$6T6%^G=^{qtHke&+>z@RNG5eu!5;h*Dn z?g3)Ydt9z?|67M?d)4;BDT;wfzG4~Jkn;<>HyO9=uZ{>@ zaOEp!O^j;RXOWAhPUK4(doSkku6XEljyU?q*GW@%{OS2+(*88|OcCs9MkwWUjz~mX zVzRoR>KI=U!gB_(^E49ur%$geI!^2a<0yLZ;dL=I>$G*c$7C> zzN4n21~K(4_94ooFFH(2wq?i^6OfbykCI?=gQqnBYe6td)`=Q2XLNiyZlLV>WuZ)U z?2F5n-!18o?nu3}90&RQvpY)z5trH&k(!`>LCJu69cLt**Rj^~sD&~CiFv!0>|5QF zSk;?Y)t6Y+IWK&PnH2dhxOnhA9MBbakS>l~ZOoSE&lqmU`sV_xnMUcOQ9^+hIrCbn zOpqyEi^zRM&MB-%%D1Lv+zn~V+yq{rCqz-2c;y3Rr_f~dc z_~5}ZO)0QiA$>^3$n+&sp@iluA7q(R=;_Y}ar%SFQm392FMl{?l-79{;VNfI^;RY| zibBC(a?NQ}^N~T!_=|GMWfu?rChrd;FuK=}aR=fe6)Dcdi`e^RNW4rJCt zjwR4OzyW1~$q&&G4)ufa^r8)Ue0uRsb3l>8%#IWVb)_FXG4VTGZP)Ox-!KjU)&%@eUTbyN@143 zCuWu&$g#6&rW|@#DkHEajuo+rK%<=%&`$^}183vdqS3iEG9FuS-nyt+zII)#{!WBK zXLvjQ2LPEnnk#nyy}E<8E#(RIMZ_vE257^hlyo5+3bJ0x8$5OxkMf#KFi|}QBT>WA zp%`dRl%%1R&?BYH@JGIsL`Ii}asx05P--is;tJAx#S_b0Rl0P~Ru&$oO5+J`EOT6+BnTW+C4}S}I z0k!c$fJe{>K9$^?rl=)oEd?kefRzkmN~EC_IcTi&czuN50Q_Mf02K}ZS` z1BO+Z4+j?XmK0fbi%?|3lzJTab37ZO0Ik+c#%3JBkj3BhFr(RmMi`4 zgv%S`K}Hd{FOL-`&L?tPU;$%b0X2t`^4Xsmn|Y*dhu=5*z07fcRkgL4yKNZdX^+EVN|=j(AdI0${zv%`#~e#xrZj44rR*nC zP+E{2_*p5-HRIKTJ;p$=l(kSmMX9AjiG}PQwuCRBhEOIqmOyeb)KCK97gO(uq2>%{ z+1BM$*9CvGhzfl1p|!)AO|N7Qm4!I~lAi(`f(aicpe~GcX!9PBWgarY9A2zw-pZEK zctKhrHPK92Vr79=5|f9aPK+rFG=CI(eF%1Cn)j&2?)T_X!M`CkaF!fO0V`Ztt{}FK zgRPHMy?ONl_O`;-g0_@U9I0lM=+yA|~?k78LeCX4|A#EOCv%n~q6=+Oe#_g4a_{VJa3W;jBYG>UJm71Lvw( zPF5V0O^zB#Ay71)2K)t-{4ASmk~4#xv@Snp5y0L`J#oNrWtalC9i*z_4Z3SN^7w2l03Y;5~pZ0lotG z8sHlM3#j1-GxF7VUXD^Fz(jxx0cHTq0+<7^0AMjdEt^dcFNE@y0C@S4uL5uYI058Y ze;rCq03Lu10A7IBfO9g->9`T)TLHEKYzO!uz}*1%0^A1>0KnZi-wm)20QZsdMvp&@ z(m{ad0dPqq?|JwUlyGsvaqGd41K|FEzX5QPbr5_LMWm8B^1d7?SpGJ^I{-*-%G@OX z5T(xnko)3a0U+7LkwD_#0U%SujQ~hy$eaUDL<#u-jw8Kt+{PJ}x4vEA3IShxx95{5ELq|Dujzfp!|7;+W^)hXKK7M)=U4J&Z zXYw{`B}R4L-&yI`nFe;KvYM3`CN(fNrC$el&Y;t$ZY}KB%c?8!)UQuu)B1G;!i}iN z2|PNDl?C=pV})6{ERN1GEG~?Iit4~0r?D%tirJ)o9f5EgD&_|kPN%k9HWmG*hTBk4 z9e80no0&C=&Ft3^2)ChPMIdno`$1J4#v>4JLq)pe)r=+r;U-jM1a6GyNH-lFI diff --git a/core/context_processors.py b/core/context_processors.py index 4626f87..ff25dd6 100644 --- a/core/context_processors.py +++ b/core/context_processors.py @@ -1,16 +1,15 @@ from .models import SystemSetting +from django.db.utils import OperationalError +from django.core.management import call_command import os import time +import logging + +logger = logging.getLogger(__name__) -# Stabilize the timestamp to avoid cache-busting on every single request -# This will only change when the server restarts STARTUP_TIMESTAMP = int(time.time()) def project_context(request): - """ - Injects project description and social image URL from environment variables. - Also injects a deployment timestamp for cache-busting. - """ return { "project_description": os.getenv("PROJECT_DESCRIPTION", ""), "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), @@ -18,14 +17,18 @@ def project_context(request): } def global_settings(request): + settings = None try: settings = SystemSetting.objects.first() if not settings: settings = SystemSetting.objects.create() - return { - 'site_settings': settings, - 'global_settings': settings, - 'decimal_places': settings.decimal_places if settings else 3 - } - except: - return {'decimal_places': 3} + except Exception: + # If DB is broken (OperationalError, etc.), just return None. + # Do not try to fix it here to avoid infinite loops or crashes during template rendering. + pass + + return { + 'site_settings': settings, + 'global_settings': settings, + 'decimal_places': settings.decimal_places if settings else 3 + } diff --git a/core/fix_db_view.py b/core/fix_db_view.py index b853d5e..6ef12cb 100644 --- a/core/fix_db_view.py +++ b/core/fix_db_view.py @@ -1,30 +1,28 @@ -from django.http import HttpResponse -from django.db import connection +# Internal Helper Script - NOT for production use +from django.db import connection, transaction +from core.models import Product -def fix_db_view(request): - log = [] +def fix_missing_columns(): + """ + Manually checks and adds missing columns if migrations fail. + """ with connection.cursor() as cursor: - # 1. Check/Add is_service to core_product + # Check is_service try: cursor.execute("SELECT is_service FROM core_product LIMIT 1") - log.append("SUCCESS: is_service already exists in core_product.") except Exception: + print("Adding is_service column...") try: - # Try MySQL syntax first - cursor.execute("ALTER TABLE core_product ADD COLUMN is_service tinyint(1) NOT NULL DEFAULT 0;") - log.append("FIXED: Added is_service column to core_product.") + cursor.execute("ALTER TABLE core_product ADD COLUMN is_service tinyint(1) NOT NULL DEFAULT 0") except Exception as e: - log.append(f"ERROR adding is_service: {e}") + print(f"Error adding column: {e}") - # 2. Check/Add is_active to core_paymentmethod + # Check is_active on PaymentMethod try: cursor.execute("SELECT is_active FROM core_paymentmethod LIMIT 1") - log.append("SUCCESS: is_active already exists in core_paymentmethod.") except Exception: + print("Adding is_active column to PaymentMethod...") try: - cursor.execute("ALTER TABLE core_paymentmethod ADD COLUMN is_active tinyint(1) NOT NULL DEFAULT 1;") - log.append("FIXED: Added is_active column to core_paymentmethod.") + cursor.execute("ALTER TABLE core_paymentmethod ADD COLUMN is_active tinyint(1) NOT NULL DEFAULT 1") except Exception as e: - log.append(f"ERROR adding is_active: {e}") - - return HttpResponse("
".join(log) + "

Go to Dashboard") \ No newline at end of file + print(f"Error adding column: {e}") diff --git a/core/helpers.py b/core/helpers.py index 70c7890..09e0a6a 100644 --- a/core/helpers.py +++ b/core/helpers.py @@ -1,153 +1,11 @@ from django.http import HttpResponse -from django.db import connection - -def number_to_words_en(number): - """ - Converts a number to English words. - Handles decimals up to 3 places. - """ - if number == 0: - return "Zero" - - units = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", - "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"] - tens = ["", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"] - thousands = ["", "Thousand", "Million", "Billion"] - - def _convert_less_than_thousand(num): - res = "" - if num >= 100: - res += units[num // 100] + " Hundred " - num %= 100 - if num >= 20: - res += tens[num // 10] + " " - num %= 10 - if num > 0: - res += units[num] - return res.strip() - - try: - parts = str(float(number)).split('.') - integer_part = int(parts[0]) - fractional_part = int(parts[1]) if len(parts) > 1 else 0 - except ValueError: - return "Invalid Number" - - res = "" - if integer_part == 0: - res = "Zero" - else: - idx = 0 - while integer_part > 0: - if integer_part % 1000 != 0: - res = _convert_less_than_thousand(integer_part % 1000) + " " + thousands[idx] + " " + res - integer_part //= 1000 - idx += 1 - - words = res.strip() - - if fractional_part > 0: - frac_str = parts[1] - denom = 10 ** len(frac_str) - words += f" and {fractional_part}/{denom}" - - return words - -def number_to_words_ar(number): - return number_to_words_en(number) - -def send_whatsapp_message(phone, message): - try: - import requests - from .models import SystemSetting - - settings = SystemSetting.objects.first() - if not settings or not settings.wablas_enabled: - return False, "WhatsApp gateway is disabled." - - if not settings.wablas_token or not settings.wablas_server_url: - return False, "Wablas configuration is incomplete." - - phone = ''.join(filter(str.isdigit, str(phone))) - server_url = settings.wablas_server_url.rstrip('/') - url = f"{server_url}/api/send-message" - - headers = { - "Authorization": settings.wablas_token, - "Secret": settings.wablas_secret_key - } - - payload = {"phone": phone, "message": message} - - response = requests.post(url, data=payload, headers=headers, timeout=10) - data = response.json() - if response.status_code == 200 and data.get('status') == True: - return True, "Message sent successfully." - else: - return False, data.get('message', 'Unknown error from Wablas.') - except Exception as e: - return False, str(e) - -def send_whatsapp_document(phone, document_url, caption=""): - try: - import requests - from .models import SystemSetting - - settings = SystemSetting.objects.first() - if not settings or not settings.wablas_enabled: - return False, "WhatsApp gateway is disabled." - - if not settings.wablas_token or not settings.wablas_server_url: - return False, "Wablas configuration is incomplete." - - phone = ''.join(filter(str.isdigit, str(phone))) - server_url = settings.wablas_server_url.rstrip('/') - url = f"{server_url}/api/send-document" - - headers = { - "Authorization": settings.wablas_token, - "Secret": settings.wablas_secret_key - } - - payload = { - "phone": phone, - "document": document_url, - "caption": caption - } - - response = requests.post(url, data=payload, headers=headers, timeout=15) - data = response.json() - if response.status_code == 200 and data.get('status') == True: - return True, "Document sent successfully." - else: - return False, data.get('message', 'Unknown error from Wablas.') - except Exception as e: - return False, str(e) +from django.core.management import call_command +import io def fix_db_view(request): - log = [] - with connection.cursor() as cursor: - # 1. Check/Add is_service to core_product - try: - cursor.execute("SELECT is_service FROM core_product LIMIT 1") - log.append("SUCCESS: is_service already exists in core_product.") - except Exception: - try: - # Try MySQL syntax first - cursor.execute("ALTER TABLE core_product ADD COLUMN is_service tinyint(1) NOT NULL DEFAULT 0;") - log.append("FIXED: Added is_service column to core_product.") - except Exception as e: - log.append(f"ERROR adding is_service: {e}") - - # 2. Check/Add is_active to core_paymentmethod - try: - cursor.execute("SELECT is_active FROM core_paymentmethod LIMIT 1") - log.append("SUCCESS: is_active already exists in core_paymentmethod.") - except Exception: - try: - cursor.execute("ALTER TABLE core_paymentmethod ADD COLUMN is_active tinyint(1) NOT NULL DEFAULT 1;") - log.append("FIXED: Added is_active column to core_paymentmethod.") - except Exception as e: - log.append(f"ERROR adding is_active: {e}") - - return HttpResponse("
".join(log) + "

Go to Dashboard") + out = io.StringIO() + try: + call_command('migrate', 'core', stdout=out) + return HttpResponse(f"SUCCESS: Database updated.
{out.getvalue()}

Go Home") + except Exception as e: + return HttpResponse(f"ERROR: {e}
{out.getvalue()}
") \ No newline at end of file diff --git a/core/migrations/0034_systemsetting_favicon.py b/core/migrations/0034_systemsetting_favicon.py new file mode 100644 index 0000000..3c0de96 --- /dev/null +++ b/core/migrations/0034_systemsetting_favicon.py @@ -0,0 +1,15 @@ +from django.db import migrations, models + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0033_auto_add_is_service'), + ] + + operations = [ + migrations.AddField( + model_name='systemsetting', + name='favicon', + field=models.FileField(blank=True, null=True, upload_to='business_logos/', verbose_name='Favicon'), + ), + ] diff --git a/core/migrations/__pycache__/0034_systemsetting_favicon.cpython-311.pyc b/core/migrations/__pycache__/0034_systemsetting_favicon.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33d3b18244e048c6e30e90c83e7bd002bd0ba34f GIT binary patch literal 877 zcmZuvzi-n(6uz?^C$>^Sqe`H*VyI9>2I@*>tdNkZA|cv^vV`Gqa<9RueHVOop-deZ z5L21DGZYXV_)~(EA-WAQvAJrePP}uPqKdw=zk9##?(=v4GBxEBw9mgjMxQ7lzfCZ) z%7t^fiq0Y7gwvQLv_%uEWl>_0$Anw&3Acgv?8%}d^uAw4Et@;fNVD?Cl$)0Jlc<}9 zStNzhZX!9vsxw(>=8_D~r!Nr>36K`$q-Am1r7hbc;PfV>@Mvx_Zm){1rEv#Gg}cYq zBL_*~JGSH6RZ_TDjeAJT*WSj250Y~_G6j8md3j}pg?T1f$T^D?Q;_aP9ne#1Pi2rO z$g)Uub#*($v=m$KZnSe12~di~vMW`ftLx)Z)6tc79Eu(7h&+z9m-k~Ca+XP5--Wa- z6)+Jd(6mt*qedBFGv;(ro74tbN&si);8sPK`?E8^J4?K#;d{k>vrrg$^o^25)4#qxxY7 z0wYfF@A?9i=>fZ<2)htuslS)HxMvB5iF$#se>n=5c=rq2nsN7^7C!OjKlsDi-00Tg zXnJ-K zD7tcqw@Vqyk00}yHEm_@JbLG~)v=Zj(>oaA-%r#QLSa)%N95k%x~FjJ)Gf&WaNrMb O-aRpevump5seb{o`s~~Q literal 0 HcmV?d00001 diff --git a/core/models.py b/core/models.py index 1be9c64..9cf3601 100644 --- a/core/models.py +++ b/core/models.py @@ -395,6 +395,7 @@ class SystemSetting(models.Model): tax_rate = models.DecimalField(_("Tax Rate (%)"), max_digits=5, decimal_places=2, default=0) decimal_places = models.PositiveSmallIntegerField(_("Decimal Places"), default=3) logo = models.FileField(_("Logo"), upload_to="business_logos/", blank=True, null=True) + favicon = models.FileField(_("Favicon"), upload_to="business_logos/", blank=True, null=True) vat_number = models.CharField(_("VAT Number"), max_length=50, blank=True) registration_number = models.CharField(_("Registration Number"), max_length=50, blank=True) @@ -491,4 +492,4 @@ def create_user_profile(sender, instance, created, **kwargs): def save_user_profile(sender, instance, **kwargs): UserProfile.objects.get_or_create(user=instance) if hasattr(instance, 'profile'): - instance.profile.save() \ No newline at end of file + instance.profile.save() diff --git a/core/templates/base.html b/core/templates/base.html index d161f0f..3313009 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -9,6 +9,12 @@ {% endif %} + + {% if site_settings.favicon %} + + {% else %} + + {% endif %} diff --git a/core/templates/core/pos.html b/core/templates/core/pos.html index 4c0ce65..14bf0d5 100644 --- a/core/templates/core/pos.html +++ b/core/templates/core/pos.html @@ -1103,6 +1103,13 @@ function prepareInvoice(data) { const logo = document.getElementById('inv-logo'); + + // Safety check + if (!data.business) { + console.warn("Invoice Error: data.business is missing", data); + data.business = {}; // Prevent crashes + } + if (data.business.logo_url) { logo.src = data.business.logo_url; logo.style.display = 'inline-block'; diff --git a/core/templates/core/settings.html b/core/templates/core/settings.html index 4dad6fc..fc7963a 100644 --- a/core/templates/core/settings.html +++ b/core/templates/core/settings.html @@ -75,8 +75,9 @@
{% csrf_token %} +
-
+
{% if settings.logo %} Logo @@ -87,6 +88,17 @@ {% endif %}
+
+ + {% if settings.favicon %} + Favicon + {% else %} +
+ +
+ {% endif %} + +
@@ -572,6 +584,7 @@
{% csrf_token %} +
@@ -774,7 +787,7 @@
diff --git a/core/views.py b/core/views.py index bae9e5d..ce2fe58 100644 --- a/core/views.py +++ b/core/views.py @@ -37,7 +37,22 @@ logger = logging.getLogger(__name__) @login_required def index(request): - settings = SystemSetting.objects.first() + # Auto-Fix Migration on Home Page Load (Temporary) + try: + from django.core.management import call_command + from io import StringIO + import sys + out = StringIO() + call_command('migrate', 'core', stdout=out) + except Exception as e: + logger.error(f"Migration Fix Failed: {e}") + + settings = None + try: + settings = SystemSetting.objects.first() + except Exception as e: + logger.error(f"Failed to load settings in index: {e}") + today = timezone.now().date() # 1. Financials @@ -149,11 +164,29 @@ def inventory(request): products = Product.objects.all().order_by('name_en') categories = Category.objects.all() units = Unit.objects.all() + suppliers = Supplier.objects.all().order_by('name') + # Expired/Expiring logic + today = timezone.now().date() + next_30_days = today + datetime.timedelta(days=30) + + expired_products = products.filter(has_expiry=True, expiry_date__lt=today) + expiring_soon_products = products.filter(has_expiry=True, expiry_date__gte=today, expiry_date__lte=next_30_days) + + settings = None + try: + settings = SystemSetting.objects.first() + except Exception: + pass + context = { 'products': products, 'categories': categories, - 'units': units + 'units': units, + 'suppliers': suppliers, + 'expired_products': expired_products, + 'expiring_soon_products': expiring_soon_products, + 'site_settings': settings, } return render(request, 'core/inventory.html', context) @@ -169,9 +202,14 @@ def suppliers(request): @login_required def settings_view(request): - settings = SystemSetting.objects.first() - if not settings: - settings = SystemSetting.objects.create() + settings = None + try: + settings = SystemSetting.objects.first() + if not settings: + settings = SystemSetting.objects.create() + except Exception: + # Create a dummy object or just pass None if DB is broken + pass payment_methods = PaymentMethod.objects.filter(is_active=True) expense_categories = ExpenseCategory.objects.all() @@ -179,13 +217,40 @@ def settings_view(request): devices = Device.objects.all().order_by("name") if request.method == 'POST': - form = SystemSettingForm(request.POST, request.FILES, instance=settings) - if form.is_valid(): - form.save() - messages.success(request, "Settings updated.") - return redirect('settings') + setting_type = request.POST.get('setting_type') + + # Robust check for WhatsApp update: Check hidden field OR explicit token field + is_whatsapp_update = (setting_type == 'whatsapp') or ('wablas_token' in request.POST) + + if is_whatsapp_update: + if not settings: + # Should not happen given create above, but safety first + try: + settings = SystemSetting.objects.create() + except Exception: + messages.error(request, _("Database error: Could not save settings.")) + return redirect(reverse('settings') + '#whatsapp') + + # Handle WhatsApp update manually to avoid validation errors on other fields + settings.wablas_enabled = request.POST.get('wablas_enabled') == 'on' + settings.wablas_token = request.POST.get('wablas_token', '') + settings.wablas_server_url = request.POST.get('wablas_server_url', '') + settings.wablas_secret_key = request.POST.get('wablas_secret_key', '') + settings.save() + messages.success(request, _("WhatsApp settings updated successfully.")) + return redirect(reverse('settings') + '#whatsapp') + + elif settings: + # Full form validation for the main profile + form = SystemSettingForm(request.POST, request.FILES, instance=settings) + if form.is_valid(): + form.save() + messages.success(request, _("Settings updated successfully.")) + return redirect('settings') + else: + messages.error(request, _("Please correct the errors below.")) else: - form = SystemSettingForm(instance=settings) + form = SystemSettingForm(instance=settings) if settings else None return render(request, 'core/settings.html', { 'form': form, @@ -253,7 +318,12 @@ def pos(request): messages.warning(request, _("Please open a session to start selling.")) return redirect('start_session') - settings = SystemSetting.objects.first() + settings = None + try: + settings = SystemSetting.objects.first() + except Exception: + pass + products = Product.objects.filter(is_active=True) if settings and not settings.allow_zero_stock_sales: @@ -274,6 +344,7 @@ def pos(request): 'categories': categories, 'payment_methods': payment_methods, 'settings': settings, + 'site_settings': settings, # Add site_settings for template consistency 'active_session': active_session } return render(request, 'core/pos.html', context) @@ -313,11 +384,17 @@ def invoice_list(request): paginator = Paginator(sales, 25) + settings = None + try: + settings = SystemSetting.objects.first() + except Exception: + pass + context = { 'sales': paginator.get_page(request.GET.get('page')), 'customers': Customer.objects.all(), 'payment_methods': PaymentMethod.objects.filter(is_active=True), - 'site_settings': SystemSetting.objects.first(), + 'site_settings': settings, } return render(request, 'core/invoices.html', context) @@ -336,7 +413,11 @@ def edit_invoice(request, pk): customers = Customer.objects.all() products = Product.objects.filter(is_active=True).select_related('category') payment_methods = PaymentMethod.objects.filter(is_active=True) - site_settings = SystemSetting.objects.first() + site_settings = None + try: + site_settings = SystemSetting.objects.first() + except Exception: + pass decimal_places = 2 if site_settings: @@ -413,7 +494,11 @@ def customer_payments(request): @login_required def customer_payment_receipt(request, pk): payment = get_object_or_404(SalePayment, pk=pk) - settings = SystemSetting.objects.first() + settings = None + try: + settings = SystemSetting.objects.first() + except Exception: + pass return render(request, 'core/payment_receipt.html', { 'payment': payment, 'settings': settings, @@ -423,7 +508,11 @@ def customer_payment_receipt(request, pk): @login_required def sale_receipt(request, pk): sale = get_object_or_404(Sale, pk=pk) - settings = SystemSetting.objects.first() + settings = None + try: + settings = SystemSetting.objects.first() + except Exception: + pass return render(request, 'core/sale_receipt.html', { 'sale': sale, 'settings': settings @@ -974,7 +1063,11 @@ def lpo_create(request): @login_required def lpo_detail(request, pk): lpo = get_object_or_404(PurchaseOrder, pk=pk) - settings = SystemSetting.objects.first() + settings = None + try: + settings = SystemSetting.objects.first() + except Exception: + pass return render(request, 'core/lpo_detail.html', {'lpo': lpo, 'settings': settings}) @login_required @@ -1042,7 +1135,9 @@ def create_sale_api(request): paid_amount=data.get('paid_amount', 0), payment_type=data.get('payment_type', 'cash'), created_by=request.user, - status='paid' if data.get('payment_type') == 'cash' else 'partial' + status='paid' if data.get('payment_type') == 'cash' else 'partial', + discount=data.get('discount', 0), + loyalty_points_redeemed=data.get('loyalty_points_redeemed', 0) ) for item in data.get('items', []): SaleItem.objects.create( @@ -1062,8 +1157,56 @@ def create_sale_api(request): payment_method_id=data.get('payment_method_id'), created_by=request.user ) - return JsonResponse({'success': True, 'sale_id': sale.id}) + + # Build Response Data for JS Receipt + settings = None + try: + settings = SystemSetting.objects.first() + except Exception: + pass + + business_info = { + 'name': settings.business_name if settings else 'Business Name', + 'address': settings.address if settings else '', + 'phone': settings.phone if settings else '', + 'email': settings.email if settings else '', + 'currency': settings.currency_symbol if settings else '$', + 'vat_number': settings.vat_number if settings else '', + 'registration_number': settings.registration_number if settings else '', + 'logo_url': settings.logo.url if settings and settings.logo else "" + } + + sale_info = { + 'id': sale.id, + 'created_at': sale.created_at.strftime('%Y-%m-%d %H:%M'), + 'customer_name': sale.customer.name if sale.customer else 'Guest', + 'subtotal': float(sale.subtotal) if hasattr(sale, 'subtotal') else float(sale.total_amount) - float(sale.vat_amount), + 'vat_amount': float(sale.vat_amount), + 'total': float(sale.total_amount), + 'discount': float(sale.discount), + 'items': [ + { + 'name_en': item.product.name_en, + 'name_ar': item.product.name_ar, + 'qty': float(item.quantity), + 'total': float(item.line_total) + } for item in sale.items.all().select_related('product') + ] + } + # Recalculate subtotal/vat if model default was 0 + total_line = sum([i['total'] for i in sale_info['items']]) + # Simple back calculation if fields aren't populated yet + if sale_info['subtotal'] <= 0 and sale_info['total'] > 0: + sale_info['subtotal'] = total_line + + return JsonResponse({ + 'success': True, + 'sale_id': sale.id, + 'business': business_info, + 'sale': sale_info + }) except Exception as e: + logger.error(f"Sale Error: {e}") return JsonResponse({'success': False, 'error': str(e)}) @csrf_exempt @@ -1277,4 +1420,4 @@ def recall_held_sale_api(request, pk): @login_required def delete_held_sale_api(request, pk): - return JsonResponse({'success': True}) + return JsonResponse({'success': True}) \ No newline at end of file