From e6865dae2e20388ef2bad02a1b301416bf3d6960 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 10 Feb 2026 06:55:31 +0000 Subject: [PATCH] Autosave: 20260210-065531 --- config/__pycache__/urls.cpython-311.pyc | Bin 2388 -> 1370 bytes config/urls.py | 14 +- core/__pycache__/fix_db_view.cpython-311.pyc | Bin 0 -> 2510 bytes core/__pycache__/fix_view.cpython-311.pyc | Bin 1170 -> 1657 bytes core/__pycache__/helpers.cpython-311.pyc | Bin 5790 -> 8139 bytes core/__pycache__/urls.cpython-311.pyc | Bin 13902 -> 13975 bytes core/__pycache__/views.cpython-311.pyc | Bin 65271 -> 77268 bytes core/fix_db_view.py | 30 +++ core/fix_view.py | 27 ++- core/helpers.py | 33 ++- core/migrations/0033_auto_add_is_service.py | 15 ++ .../0033_auto_add_is_service.cpython-311.pyc | Bin 0 -> 835 bytes core/templates/core/index.html | 3 + core/templates/core/settings.html | 35 ++- core/urls.py | 9 +- core/views.py | 220 ++++++++++++++++-- force_reset_admin.py | 32 +++ manual_db_fix.py | 32 +++ patch_views_fixes.py | 134 +++++++++++ 19 files changed, 536 insertions(+), 48 deletions(-) create mode 100644 core/__pycache__/fix_db_view.cpython-311.pyc create mode 100644 core/fix_db_view.py create mode 100644 core/migrations/0033_auto_add_is_service.py create mode 100644 core/migrations/__pycache__/0033_auto_add_is_service.cpython-311.pyc create mode 100644 force_reset_admin.py create mode 100644 manual_db_fix.py create mode 100644 patch_views_fixes.py diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index fcd6484130603cf8f063d85018dbc40232ed7c94..9a01b170ee2c9d9c0a7d251d241f56ecf7a24996 100644 GIT binary patch delta 375 zcmca2bc>5`IWI340}yOK(Up0aX(FEl(=En{8Wti<45=(Btf`DyoFG{c$l{u~L7JTn zD8Zb;II|rD_31V`AncN^I517ddV)B8R{FA*Hm~00V;&L@7{{Abw3L z!odt6tSK@%gvoUBYu4q=ewsp)SFpuSmSK-%U&-(pq(;6ZL480cZ2r_c4o#v#t#f2vPcrB1_0F;L&X39 literal 2388 zcmah~Pi)gx7=MnR^WSYr`fp6zOv?sAEM6fX8l^#nR)Ap8h9X8bsd8QszSQk9m8$jp=5|BVtQH>}Pgo6XsK#eStHC)7Q zpR7`~U@_=oTn*L2#juO1YNQq|Mgflqp=(4j7C<5v!XmL8_a|DWeRLaU`T?3(TxJ9$ zDMW7*V1ee9EqKnjq!8bhN4vbfZF&7JZ(v*A4wsksKVB(V>=T2_{eJYy8L`uM+mZVvg37rziK7KX)GZ*0A5 zh7%5+N2$?&9LE%4Q=Cw%NU4Awsz`jbA&54vb6OcJVO7+$id0eo2UU&JDmH<%-H& zD4b!MoXSYD#?;(_1ZL?9!%0^dI4?=y6oG-m)I>!}JANt3#&TVhY^teLKuf`b?a1s3 zFV?k+EGc2=r${^0jld2oqAE8OUbKnJs&ldo!#q#3Ww|D@jirX9HCS;)qN>xqQuh_J=MZC9A#YyuJH1!Vk{vE%jB5u3WL(6eXHwpKri z4T6E9H$^)fU&AmBMT66$*hmMV*Z9E0=C4;h^rC!>P+SN+btUL2A)rpc0zVs=j-apJ znj(LS1Na$F6QKtL3Ge|X989@55}h6<9}E#7^`LtnSv|t>ybN2cvihj7%t<9V4I8T| zm8CS-(8_6Ndv&TZaYSPEp-sYN*N}GfHqs-!tcV^p)*TNnG^_V-c04OtR#-h$R=i%A z=f*pB(cIMQytB-onRR_5`+!f(F^aQ3y zit~;?59eyK(5Q-eWiND{r%U}2BqRwzv=L+U);4gi4p5%J$q;y09NWm*|y YG<9dnOio(KNfTu)lr{XS?16Lp7qI+VzyJUM diff --git a/config/urls.py b/config/urls.py index f8cf289..62c8814 100644 --- a/config/urls.py +++ b/config/urls.py @@ -2,15 +2,6 @@ from django.contrib import admin from django.urls import include, path from django.conf import settings from django.conf.urls.static import static -from django.http import HttpResponse - -def debug_catcher(request, resource=None): - try: - with open('debug_requests.txt', 'a') as f: - f.write(f"Caught 404 candidate: {request.path}\n") - except Exception: - pass - return HttpResponse(f"

Debug 404 Catcher

You requested: {request.path}

This URL was not matched by any standard pattern.

") urlpatterns = [ path("admin/", admin.site.urls), @@ -24,7 +15,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) - -# Append catch-all -urlpatterns.append(path('', debug_catcher)) \ No newline at end of file + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/core/__pycache__/fix_db_view.cpython-311.pyc b/core/__pycache__/fix_db_view.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f355ba6375a1ef99bae9869c2ccef310724287f0 GIT binary patch literal 2510 zcmbsrO-~y~bY?$n)?ULVw5bD;x@v-gL9(G~m0-J6#&!}S+bG7aN)APfcLPrBU1xV4 zz=A4=p14HHp+v2!a-yopA%B6db9bdZSeB5g_SBoJv=YjxGycLh0V(S2n>TM}-uJv2 z?Jq8u1EBWDZyVVh4Zxpx(riS7cykRAn?M92%z-?703oJ{9FZph<5pE;7ot7*FYj6u&In_j>n^SIe)DjMsqr4Fu=dBD*!5 zX^ZOSlzpdceX>rTDNnDFKZ2i5c|3;>W1ak#lzZyqGF%2L>Qm~PJZ%$DQ-WDAuy`nFMZ?X)Tk0@-;Lj025YChGZxU=Bd^>CTgS z5uIDMli3Ni)>V@tTSA+iF`^6PN|Z)tqp@f>#b>p7O;Vp`GZKG0ITPnIiYm<)R7EUi zbUrp6pHA`Pr5m&9a5y?U>u+Zla;hYVtGu+5)pU)|${n)aQalt(MU#9gG!=_>Z1JH; zgb&Ze((y#QK0Pb1W@UYN+`}hkQhXvEi}8`@?NBQ9d-|gwIqY*zJ5=BXDm&+)* zVqWHTrNfA~bUB(#&Lnw36tnVTn}DA$jhzH9px5GQN9@9CUXt~^q%SFAD+9OMGtiJZ zD*^2ayrtynG_*5xC8MGGyj+Y2N}qM-q9N9uigrWZlDj)0bt#k&D!8Cdmab!5>jJ-| zN)Nxd?z=vDN5Pqm2-?zuBB)}}Cro@v&@jip41grBg@c*6f{wb z(f|61G3ZBNasi7A7^mPEwJM3^FmYUUB0unWv4;t?B8Z!8!eSE!n`lLF-(-^(n>1=r zkAP+ZRnS5Ndi%dvhR`Z zDc-&}NTZcKp2jOfB<6B(*n!Irm0MO#4Q{1H}GitZje55hdvTp^*qj9rQs&A8?LH z(0(xBj@+~#d`jb$n>1btl9>JyYdeIP^N_&W4lhvA5ABC;h;YI~SDfM_L0(k6OXxSJ zewCQUinvg_gSCqP6}&;Q0ks#Qw>`l;db@Mdr1}Ax;-3@k4nnAeAS{DxMkka3Z*)SH Q8h~HHDtI?m`;o5y0GzFEcmMzZ literal 0 HcmV?d00001 diff --git a/core/__pycache__/fix_view.cpython-311.pyc b/core/__pycache__/fix_view.cpython-311.pyc index 65603b76ce4ba5773313bf237fd30acad2116854..ab4a8a29442dbc1d4d8305800ec460906b8dab44 100644 GIT binary patch literal 1657 zcmZux&1)M+6rWkGq>)z}nI>+eMoERMG!`XN>thiIgORuXSh*-!e_|Tic6oPZX_mk3FA40FCF(PHCoUDMdhb&~_GOFM_t|)m0OIs=XDr#Q!bYIzD3FHHw zu9kxpk|&<-FNZ2q`6-0Nubj75s8wRr z6e;Yg-*L)d^_T5psR~Mv(Jjh21(k3rM5$WjCLSg&7bwVkP7T4-U$W6s*KM0zD~K|(mQebX=cN&&`f=;UKRBW-KHjNVVQ=_9`c%D(u`>{ znprPx7q&{Yk*@vVhNR&|V>*Ng!o#OQ?4o1s+OwsOmh5UtM@^mph9)Wq03fS4*@UzA zP!Y9o2np#nB#94bf7GrK;H?(^OPQ?n0r<6)manPo%gFDLg(v-?ao}4}M~ z9zjf5+&gpt$l(};h$=)RBS2gpX$Un@Q#pVP569JDBxcUuTmH%HR?$aDynpsSiP-g) zDq?4d6=V{#q3pImtm@vyFC0^jdSYLO; zQmfY}lli$Junbd_wy3Le17vWR7n9v#vVCso?zTy5qGVT@Y<$z^)!8Vv9HYd@8RQU{I~GS==_W5{PQIzI^T&dcB6}r z^|snB_5&!Sza+62B=+o9hs<`#tV3o2ja_f6PxW3r(N?=8*7M9uJre#Y^d$6Hd#bfH zaEji+;1zyF^mg%Q(IN3Ji900zZvagv_wRHfbKS_CL+0KbYghURLn`OxtH?Dc{>Afe zKn%DOS?WfX9P)pD1Jw7)?V#`*P~M|lAg7@tZ7MhKJDPbfciVS#3rqdBALMdMceUX> zY{32HebT{q{@|i9smSTzgH~U@z`^U&IAWcFul$$B2+Z6%lmCo&hj@+n6R}GYknK4o zSva9yrVH$2Fy*zte*pm{VcbKXI~Q>eed0`V58ZSoxraVfwWu^?Bm K?83#;%lSWwc9qxw literal 1170 zcmZWo&r2IY6rS1L=*A>OsfXCw60D#x;8vj**#;D?Jya>RJ=6+evpbr#Np?H4Yf{lt zN)J(l9u?YxCrh!19(z^#2SgDJ3!ZxFEyW(hQ{SvVqmSA5=6mmZZ{ECNzeXZW2&C`V zvKbW+`pvgdc~ih!#EZfL zUguS>iGl0+yzK>?md=Pi;yw8SRT|Frm+c0C&2tAvPV^igL#jVv0^LPU^F_Q9(e_2L zE+eoYenMZa+(Z{%z<3wMx8lU9E#e|7i7!wQCmP1RfM(>)0?br)VWtHwPoB*$sM)^M zAos@~nk8bW3SiYv@u_phKwQnF{5)03q|^*eJ<%8|TGY4_QEZ;3YVj;3(+|27P1h~A z;4md;&6owHD>Z7x9V`BrBURB-DkRJ|j!TwD>F-Uhk211;-oE_)+x~( z;)NMN`}AN>Hd&fE+Vr#+<~!FWlwZh`m^Mc!e?%`hQqqa-m{uVnd5x63b_sJl$)`1* z6g50d7(X=*a(qw8T6v=Ff#gA~{d0If*1sF;|2bNT_3y-n_hQ3Kk+M{tsmkGfxouZ&TkG19 zJND#`iri6+wU?!pNVPp)miFW}pnME22bV%Cp>pUTdaH)e?U%w|gqo*>f4&A!a7s8j z2({J_4kRxWu-C@cwY9Oev7KnoUbLqoUtLEaH4(DFvOCc9`@!zPB-%@sZ t^aiM7S%t8hBPrSjkpF>f2o!XJaTRq|>Q@ydEA^`;1u#%TfT^;`*h*y5 zxuoJ)NTOgUP#{B5v_zL+Lpu)xG7Q;62V*Y-1}u&vlp#$LK} zsmPY)ta})B`SINIch5QZNB7fL{`h*w&-{KLg69v_yZMh__^=~5KMK8jNI?oNphY~3 zF{POTv&hb}K(p_nSx(^qU5X3Pt@sqryLi^4c%kQ2_$d?;KBq22xF()A&83uTEa{q| zLf@CuHBHT#d0qQu{C5mP80#Rr>h^#(@mRlRqu678!G1xJJAxVOi0fB)zx5~A1Bt5S z|H^`1FI5g%@4JV)`{*eCnp-O_&Z(rvn+tl;$ZCo~hOEE1d+{rl=s7adPYnhD3_pOp z^PD|P27yyM(6G;#dS+QCijh$@5(5FZHtz{A0ZN82iNMFe05Tc0-sgjd-vIgyWl8{d z&{N^7_b*q3o~qDeb3Nqb+6Mm<#?63?oU*QpnMRhUEn6JNAuHgI<4e{%{!{pZ^|5~n zziNH%pOW6B+LtKIQn+BnI}V>r16lJdWmgJ%R;hW(vvQIt%Ezi9!gnVrnTGdCN4M)5 zu)}M=>G&#_o_W;)QL%Oz|2NDpDq9J5( z%S@vV7|kFIKT~MxAfyPZZs=L2u)ln>ZO#?31ft!Ez@g?(mine*@z_LK&Kns+CD-#g zRX&%xn2>WiQ8PC8x*6iu_m^IbrBWADa#m6D+I)+}h+G=nNk0o` z`1M`cXIJPEu&BZrtZdidOlu9E*|e9S3^i~{(CVSTl-gT}Rt0%?IiC6cvT6*4OQ+ha zLCwmL$4)h#7fP_bB#qIaB3xvSjFyg3bl$AIK-A0MJT`D_^bMUBH<~pT=JYI4A_Ljc zkcV)vvTE*Jkr+CudDI(fu2?qJnmfC+1P2|t0%Af>F_HxcaWxN7uN76ptg!`so~%%b zb6iqC^vrLZlEUTujf^svxt>>-$!!po;Wav7PuxM9KJm`PQ$A4TyDI#lDu1YsI$hya zcb((;$fkJUgL3k2((XQA5httSq%BTviu*peaQA}!m3T!=RKaY)M6-lp3x-IFOQsAENBcI(JuSkiil(3z)^)vuOV?Q`(LPN0(nj@cG z1AtbM!c{43?`d1`)LAg3#8zE^KojF%bxXa7jV{P7v=P@ls?XY)p{@0T<>EkJh8&YF7|@wNe}}j;r2!U-a~v% zP_AUPdA)xD?v>6)sqxP^%AB*goQoTwS2IE{K!jcwoGtNlL{3tgUMv3XjV!`pT~J5K u_t2{d{u^Msd>;Uo7{;6EWqWtqM6$iR)j2EKIezp!?!s^3I(j}j1O5lp*!+wD delta 694 zcmZ9JO=uHQ5XX0Rvzw;PF3~L-t&+5d)UCD_TS1FxsEVy0sWz>aUY69i(rB_PZ?ohi zBJ|*;2N}Ve7z95+4-!1rRD~fD8?dSgy{tINH=7?+^@oDX+7m;k3aR67 z?F{HxO#Ef)!=T}s{uV6E8qYGEQvI$`-T_V?#VzCbkVB?p#)co&*E|`g8tXw6R(ui4 z!#I*0gM)Y}IXrWS3&shdNyu-nVo^>|B;MJpcN>A*45SEM&zGm^0NO8-wraEKfSjQ% z1VUa;;8rTDpC$V!{!HzG$+q6#QVmk4$RqeF?e;pF!X4%;jN+1c5f-pzPQx62HOnxK zV^%p+;_L;+3S$m8tsE@kYisx3D-?*q3)8f3%gyt{->e}$pzyKwAL~7U-hP*Ps^)qx z^EKxf^NjP1?qsL%o}KNxK)$2N61MDp1DE-5iLs0y?ZVxzj;rin<1|yUx;QO@>rvhF z8*U_PQu1+6D_d2@O~x(8BBRErGq?rm6aF7McR}HJSLpe|ZLU`uVdXZ~2M6?s!Yl1N zgP&l&MDu3pPNMq}l1DAMZOKV56*kzF-~~wE?_VW&xPfUZHxmpZ!lmMY`i=cFbga!7?!8s{*<_u ztAbCIpel)|R5_?|B3F@8t8yauOH)NoG$T#ZiX^Q+rEOYA({ELqragNPGj`R5Jv#sS z{r2A7xjT3Ev(W2v@o&e+$424fsdg*)>1Mn`IJ}uxk{CS~<7HnWW1Rr3{ zhA+|0G2LeFwxBCRezYv)LRYjb<(a&b^Ha$4;m61e;1SkB_!?^w#Kp*x+jP%x_bj@_ zFc2dPC2$S7$K*qt4Ga06>Q+{M}fkJ0Tk-PgGL zI=ZJIRg#4+I4)(!TW7jW;|*@S8DKL#a0`voa35|EhhaTl7DnJL zvSFF^Z#Sy+SxtYLT!>k>TN zFH6g&`!#p}gzgH6iL$T?C5dU9N_4?r@z9#7{q3H3*BTY|4nFCzDfreWo_eDSzJ=bz zk|t>~xbB}A_pb&6YnN;oiYLZByD@aMK-gvTV{-ux(DLlY?dfBo;Mme`)NXWeej>2` z{?8Ntljx9ef^c-C#9-OAO$R~?f$&n;2A^bCS;EQiU3ONABf^~#9v7Tny%0Pf@P~p+ z%Wx!T(-J-cALqRCzE>_1Ea59~IkzYFHktxHmp0(Hx%E?-O4R@S>ulJPV0psC8;v&| z8y(xz3iGJUqcM*j9U*#5RJ47M%`2=*WmOuh(rui@5<76S|MuY4n!@r_mZz~iT^fcD z^U@o+vyYtQjigr{+ey!y1Wxx8&DcuP93G{*Rbg!^YtvYpp2+zDc#@Z5dx7^a@;-_8 z$&p@8;e9HN;oRtdb$G|2unLt`XskkaaO#A?e5cLD`!wFC^F9Nv;PHdJ&xAMgQ*Bwi zKLii4&*ps&e39?4$-K{nf1#hpdpD#Nq}qykUjnrSPMe4Kr7(nj8Sl&CD)tq;uY|V> z9JVUnSHnkmyoUFO;g8rK;r-D&g$`RSZ;wG{p+l_W{Rsi;3sdbU1)drO@E1D8CQ8k4 zqtMmWLZMaQr$Mpj?IdXh9ZK(l!WLDwsIf)8jg)pn$=!+8@{cP`XB9S}vH^_^=pCeV z!e0tq;wcKf5Le_By%hSOq{t=qQ#b>si(K7jDGV6H7VK1MMJJW^5rz3x=GT~CKSzqs zP!4T3X*u;ui(g@*DjU_o^AY(gP%dAn3pH^6}%6c`{tIv|MKxcK4QW)NIyTm05%b>bl-76GU zjiHKnRx}Tu;u(d_s%%zcv-%n->xRPLUaQhQtFVyDLK+L{7fHD$M80kI>y+v(FjVZc zH&|%3EpWZqVLwT!(E>jyc6K#UYPRex@WJgQEelugoWgu6^J&bdw~*3mD4zRCTA5ez zEh%hSWy=~{*4s#F2YZQ2?4ZyIZVaa=^g?%u%kHJnXMv3}XIDQZpE0g$t6xhmSB|tR ztV3lT8tc#pNf|Pfob7;?TdSP#Dy&aseH!c2he;WMFK{+Lg;Dq(!x)80$nrRgrYKAs zBRRL4w6sd4wp(F6D(lf$j~*mt27cgiiL(?!Jj_uD!#$7FzC>Z!0)pEiu25P9-Q%*a zQCPRYuS%WviXDJLAFXQj-sM64@Ft5tI8uRMs zNExw4_8q&Q(x?^QsdR{Al*YkPj@KiFiO9zm0~98~U+%g-MImI&f*0FQ_ucm?tX^gH z8mrgmNSHT-{2lq8=aHnaPL*|PtW&>0!h#_b?lfucx<{v;U9F2`gbgEoYehR){@@^< z#PYqH#u6#(hJv$bg}6x!D{Mq%BN`jgFOqTziYi>2)peahBimcl z%xzgabXa-mx!t3Q-#YbXL*efjx4-8mYayi-c5(bR3hnT33>_4DAhXg{becl1F%th| zbxPxN8>yF+0eD*JEIdcSXZZhrt_H~%f}d47#bFAg@Hn!d6viV1iRURyKth#M3{aSa zvMN{C6oqMH3ck13K5{FpTV>rE>(+y0%oqm0TuYUj7KOE{tW{&J`Yb6S7P%LSbCkmH m5GPxruzaW5DXvhzioJb}`gIn$l_p-~>4p^f3*W+DG5-bJvDC@{ delta 3781 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 P&T7i(hJPQFq6z*7W40mY delta 16816 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 u8l|FZQH?UB%Q8x7?2".join(log) + "

Go to Dashboard") \ No newline at end of file diff --git a/core/fix_view.py b/core/fix_view.py index 1feff28..2fdda6d 100644 --- a/core/fix_view.py +++ b/core/fix_view.py @@ -1,13 +1,34 @@ -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseRedirect from django.contrib.auth.models import User +from django.contrib.auth import login +from django.urls import reverse +from django.conf import settings def fix_admin(request): + # Keep the old diagnostic view just in case + return auto_login_admin(request) + +def auto_login_admin(request): + logs = [] try: + # Get or create admin user user, created = User.objects.get_or_create(username='admin') + + # Force set password user.set_password('admin') + + # Ensure permissions user.is_staff = True user.is_superuser = True + user.is_active = True user.save() - return HttpResponse("

Admin Fixed

Username: admin
Password: admin

Go to Login

") + + # Log the user in directly + user.backend = 'django.contrib.auth.backends.ModelBackend' + login(request, user) + + # Redirect to dashboard + return HttpResponseRedirect('/') + except Exception as e: - return HttpResponse(f"Error: {e}") + return HttpResponse(f"

Error Logging In

{e}
") \ No newline at end of file diff --git a/core/helpers.py b/core/helpers.py index 24477cc..70c7890 100644 --- a/core/helpers.py +++ b/core/helpers.py @@ -1,3 +1,6 @@ +from django.http import HttpResponse +from django.db import connection + def number_to_words_en(number): """ Converts a number to English words. @@ -119,4 +122,32 @@ def send_whatsapp_document(phone, document_url, caption=""): else: return False, data.get('message', 'Unknown error from Wablas.') except Exception as e: - return False, str(e) \ No newline at end of file + return False, str(e) + +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") diff --git a/core/migrations/0033_auto_add_is_service.py b/core/migrations/0033_auto_add_is_service.py new file mode 100644 index 0000000..3c0b773 --- /dev/null +++ b/core/migrations/0033_auto_add_is_service.py @@ -0,0 +1,15 @@ +from django.db import migrations, models + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0032_product_is_service'), + ] + + operations = [ + migrations.AddField( + model_name='product', + name='is_service', + field=models.BooleanField(default=False, verbose_name='Is Service'), + ), + ] diff --git a/core/migrations/__pycache__/0033_auto_add_is_service.cpython-311.pyc b/core/migrations/__pycache__/0033_auto_add_is_service.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12fd64b2103747fb45d57da965c704da04c1e02d GIT binary patch literal 835 zcmZuvO>fgc5Z$#M$F@=lBBX!{QV$dnsj4e_t&reQ#8)F!xL8Ol$2%=fZEvvS@^Q+6 z1LD+M|3LxKAHfgcP^289y>jB_Dn0eYtP{5&x@(W;&CbrgdF#(}a}L4r?8m1tp@jTW zpc=KAGg(7tpK!uyL}KdESo1VWH1dFO?E~RD(4JmxIzaE+8S->)Y?5~Ew_0v%(uu?E z)E|T*$)p(z4pA0VJJr{kfyqmB_6ZP=a^h*6Zc|U!2pGMJ6dui0#O&2)dk8mp?a(~X zkO02ZaajMC5Z1A{g_LY*KdrbRF(VKu$kxir>K)ck1$8}2&V%dk zorl@N<}?FK)H!VVc{GrXT}Znk1D5zPv~_G+HCiHRsFH3O4Qw5rLnSA?b)d%tZc5CQ66X$L=c; zgPV8rWRSb?7J_^rQumEWce1`8fUDYf&o9SCAy%1>NzCW`FC~`y?@|*hmPS#@UZ5GC z&B7%1QlV>C%;A&5A@=o;&d8b{w-&~iZ;YFZd$&f-#V_!E>8RQH+3bv(ouY2o&M`rA zqD-NiO>_82&Gc$@&PLmiHt+e#wpixfQh~DXDU+5;D|4@*cWSLoWxSitBgB82WY5tQ hI;C_>ZXaFr6h?!Z1^M6XIipKAkJZA-1*_$$e*i~u+A#nC literal 0 HcmV?d00001 diff --git a/core/templates/core/index.html b/core/templates/core/index.html index ae8dacc..93284a7 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -12,6 +12,9 @@

{% trans "Welcome back! Here's what's happening with your business today." %}

+ + {% trans "Fix Database" %} + {% trans "New Sale" %} diff --git a/core/templates/core/settings.html b/core/templates/core/settings.html index 19810d1..4dad6fc 100644 --- a/core/templates/core/settings.html +++ b/core/templates/core/settings.html @@ -24,6 +24,17 @@
{% endif %} + {% if form.errors %} +
+
+
+ {% trans "Please correct the errors below:" %} + {{ form.errors }} +
+
+
+ {% endif %} +