From d0b49e0c8a22668d5909e74e6a576171edf1c617 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 7 Feb 2026 17:25:07 +0000 Subject: [PATCH] final 1 --- core/__pycache__/views.cpython-311.pyc | Bin 45283 -> 48263 bytes core/views.py | 62 ++++++++++++++++++++++--- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index b8245d985a0d7df1f45ee79b5227b780bedceb2a..081938d0ef7b6dbeedef5c29be15cb90a475ac9a 100644 GIT binary patch delta 3345 zcmZ`*dr(u^8NW9#!XpWf5CVh{@*q5f7_6Y+`q&~Y6=W2h-L9~i$i0hTNc7~Q#f=SJ zU8TzIQjVzYqS6`a+SO4U{#ZMm&iG$-96Pyp?rhTA)xoxQ*LFIEc3Z3MOnbgSSYCT3 z_m}T{zu!6EIp2BQ`-dm8(=TM&k2RVUij?1Rr@Qy{-qz~t=@0M~mm8mH&%|%nzk|OV z$;Ose-Bj}Sewv=dCmNd4>_WPoPcIhJiwBzU=C|^uo;UnbFFQcvnVsA4i+u+C$twnY zwmk!XF=D{Y?OFIieZr^5soM=$mu|C>V z`seu8LftT!Nk7J=g9-ikpoX5tHwXJwzo#k6DZ`b)T>N28vTQ_!$6ae7jYaJ;GDG^f zEJXFl$?)Taksl;piW-)opNDYZ&7wj^!6>g1-}Sg3xDf48!9SFFjcOH5(wt&JleCIP zy-cHCMYFIP^Rbdw(Zu)4qVc4xqDfsAE0sxGF|V{`8V#deq0ubU=$P~s8toE|gUPr` zR^d8%<_eQJmt~SkUBVZi9j?tz&tAl)FJTKAJ(Im6R>m@ofyr5+$y}x}GPx@>SxYny zChr@^tY4xmWb#+ZcJ?xjX%&rOiRKNaU=>YHLc^HJJ~bw4M<|rJxXze!6BO*vg-VDX z&%?8u^f=-VsJ?|vW4Nc!Gxzvob(+s_3(T)=}^hGl!7F)-AudG{d}c@nX@2tmrs7AZ5~ z@&F%~cDHo&o$B;4c7w1%Sk(zX8kw{GBH8(N|#p6X0I}&jJ1o@PdG(Y-noU z-iBU+;|avt3LpUt1HchN8vs59*aT1u0B5vRg+{@KJV;4%V`tDTxc&nj{x?i82=~1u zUeIn3Y7)8f9O-6{B8u#pQt||&1O}+5Mu%vuh#KnzW8Iy@5n~;1+$I{g@rvw$*9N<$ zle8zlf6*W$74k`i(?ul{rf88{C~{A_?pEYOWN_mDfUdcJt<~qIoNHmLGFgPK2V)8o^l;+0b$i@y^|% zb2m`-SiW^^Q#8L^$S=RvG>Q29S~0&C7~_nJvX@VUH$`ph1lzjEx3=Hy<83XXtp!+1 z%w!vDj+)j8rZv~zypzG3>O@l=Fu5^n>BO3-wMwv7Mb>@$?k?WiC|VnVDvXu6Z>))y z)e2>`k-9d%Y>!yBC-O$SP}UB#b1vf70eM@47`8RsvkSJJb3sd7H`1ad8-$V#k&Ug9 zU3>VFy<*8;;2g{5804L8qO%Psd#t!(!WS*B7K*DQH9PL@<%`?I;y7g^A#G)ghRa*) zMQi;%gPCNMp;jV$tLtd~K*@TAlu(=8Wctx*^@5?vXm3tU~x= z&d-V>_8q*nS+q9u>K0Mm5>dB2(&b!C;dM4qXN#z9PYpKFP#!h71cQq=xJ83|p!Jbf zKje>UErQm6x&z|xubl`3L+ zrhI256`h3}M;y3eL@Q5X3h?of=c(q9>Lc=gxg@_~!C_pWD++0Q;L9;y7%RSxZ__s1 zac)F`p3)SaIagYu>hmA+b~EId_7WBH6OdFv&dc=$Q3{ELbO7lx{GHJ4$>+Au* zLx2c?0Pq<=3_t?-9N;m)Gyr@*$1gYp%Z*^A5iBx-2_YB}g7^qRBZ!JxAu)RZ;I4eB z-qagl`g|I8GulCD(j67-nL0M{ajI!X=Ay~IA}}kbWa%f(bB_Hqso-0;vT@VoPyP?; CkEz1| delta 1039 zcmZ9KZ%i9y9LMju?h3R}uPtC1ls~poU}Ln~%#4Xj6qn5`i<%f?R;i75nloL;p1WZd zyGXW4iOxXw7159l%Hoz)jo`@}7n8j-L>JgF0~VcRnP!^dCT#wBqtCB`FTCVF_kHg7 z_j#UQ_D}iRqUSI$za@qYZgCm`aQkbk%m?QtJ-VPa2< z$XtPE;+2R#S%DY(ReTe7vtrE0tC=5n;+D_Fn?ytWFd<6_qvwVF!AT)|r0Z&6R;|CR z{;$4W(%Bnk%NRJ^%cgMekz=l}nI!pT5#5hiS1rzWw&2c@UF-rLJDO)RxOp_kE}{R; zcU_l-V>LPE(SGQ0_AU1JZe{a0-5W3H^$2D?> zf|J#t_~iZGV8)ZE6NguL(nVS=9y$5DyDsA#mbCg4j*lDAJ`%j=zKrM9@S2wvLTY4! zg;6_toGsw<(dJlDm!8%{i_K2HSGe)Cz=EeMd2p|uwi2e5v<{g3S5cd<5biQ4xfaI_ zO~U3}YmxInx+`gD=*&GUuP{vJ_Q}f(jbodj4FvG~*aPw(3U|zsJr5nk=7I4NsCM5^S$_I1_a;@1rQB6vHO(Q zr3zC_yyjioIQ2f0>zZuGhhMS{jhhD6&8nekH8kg~8C^G9AG_#{O?zW=jT_etKQy)# zr2XUREwbVhNrq5+Hlvga^#MlC9#blX8b&n#wh|EPgnd50g)zlm`DoCgPf@cprThY6 zhH!~M1IgzJR|qs<{3>CQK*LiQ2~L;K>E1bAIj4b)TZI%Jl9?=( aq+1Tg*c=+h%k9nMZ@KZ=7Zq4I_sKt)d`xlx diff --git a/core/views.py b/core/views.py index 1d638f8..c121f76 100644 --- a/core/views.py +++ b/core/views.py @@ -299,7 +299,7 @@ def pos(request): products = Product.objects.filter(is_active=True).select_related('category') categories = Category.objects.all() - customers = Customer.objects.filter(is_active=True) + customers = Customer.objects.all() payment_methods = PaymentMethod.objects.filter(is_active=True) settings = SystemSetting.objects.first() @@ -373,7 +373,7 @@ def invoice_detail(request, pk): @login_required def invoice_create(request): - customers = Customer.objects.filter(is_active=True) + 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() @@ -551,7 +551,55 @@ def delete_sale(request, pk): return redirect('invoices') @login_required def supplier_payments(request): return redirect('purchases') @login_required -def settings_view(request): return render(request, 'core/settings.html') +def settings_view(request): + settings, created = SystemSetting.objects.get_or_create(id=1) + + if request.method == 'POST': + # Business Profile + settings.business_name = request.POST.get('business_name', '') + settings.email = request.POST.get('email', '') + settings.phone = request.POST.get('phone', '') + settings.vat_number = request.POST.get('vat_number', '') + settings.registration_number = request.POST.get('registration_number', '') + settings.address = request.POST.get('address', '') + + # Financial + settings.currency_symbol = request.POST.get('currency_symbol', 'OMR') + settings.tax_rate = request.POST.get('tax_rate', 0) + settings.decimal_places = request.POST.get('decimal_places', 3) + settings.allow_zero_stock_sales = request.POST.get('allow_zero_stock_sales') == 'on' + + # Loyalty + settings.loyalty_enabled = request.POST.get('loyalty_enabled') == 'on' + settings.min_points_to_redeem = request.POST.get('min_points_to_redeem', 100) + settings.points_per_currency = request.POST.get('points_per_currency', 1.0) + settings.currency_per_point = request.POST.get('currency_per_point', 0.010) + + # WhatsApp (Wablas) + settings.wablas_enabled = request.POST.get('wablas_enabled') == 'on' + settings.wablas_server_url = request.POST.get('wablas_server_url', '') + settings.wablas_token = request.POST.get('wablas_token', '') + settings.wablas_secret_key = request.POST.get('wablas_secret_key', '') + + # Logo Upload + if 'logo' in request.FILES: + settings.logo = request.FILES['logo'] + + settings.save() + messages.success(request, _('System settings updated successfully.')) + return redirect('settings') + + payment_methods = PaymentMethod.objects.all() + devices = Device.objects.all() + loyalty_tiers = LoyaltyTier.objects.all() + + return render(request, 'core/settings.html', { + 'settings': settings, + 'payment_methods': payment_methods, + 'devices': devices, + 'loyalty_tiers': loyalty_tiers, + }) + @login_required def profile_view(request): return render(request, 'core/profile.html') @login_required @@ -591,7 +639,7 @@ def create_sale_api(request): sale = Sale( customer=customer, created_by=request.user, - payment_status='pending', + status='unpaid', discount=discount, notes=notes, invoice_number=invoice_number @@ -633,11 +681,11 @@ def create_sale_api(request): sale.total_amount = subtotal + vat_amount - discount if payment_type == 'credit': - sale.payment_status = 'unpaid' + sale.status = 'unpaid' elif paid_amount >= sale.total_amount: - sale.payment_status = 'paid' + sale.status = 'paid' else: - sale.payment_status = 'partial' + sale.status = 'partial' sale.save()