mirror of
https://github.com/bcomsugi/dasaproject.git
synced 2026-01-10 07:02:38 +07:00
210 lines
9.7 KiB
Python
210 lines
9.7 KiB
Python
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.urls import reverse
|
|
from django.http import HttpResponse, JsonResponse
|
|
from django.forms import modelformset_factory, inlineformset_factory
|
|
from django.db import transaction
|
|
from django.core import serializers
|
|
from .models import SalesOrder, SalesOrderItemLine
|
|
from Item.models import Item, PriceLevel, PriceLevelItem
|
|
from Customer.models import Customer
|
|
from .forms import SalesOrderForm, SalesOrderItemLineForm
|
|
import json
|
|
from django.core.serializers.json import DjangoJSONEncoder
|
|
from django.contrib import messages
|
|
|
|
def index(request):
|
|
print("index SO")
|
|
context = {}
|
|
context['objects'] = SalesOrder.objects.order_by('-TimeCreated')
|
|
context['addurl'] = reverse('SalesOrder:add_so')
|
|
return render(request, "SalesOrder/index_salesorder.html", context=context)
|
|
|
|
def add_so(request, pk=None):
|
|
print("create SO")
|
|
context = {}
|
|
obj=None
|
|
plname = None
|
|
if pk:
|
|
obj = get_object_or_404(SalesOrder.objects.select_related(), pk=pk)
|
|
# obj = get_object_or_404(SalesOrder, pk=pk)
|
|
plname = obj.CustomerRefFullName.PriceLevelRefFullName.Name
|
|
# print(f"{obj.CustomerRefFullName.PriceLevelRefFullName.Name}")
|
|
form = SalesOrderForm(request.POST or None, instance=obj)
|
|
# SalesOrderItemLineFormset = modelformset_factory(SalesOrderItemLine, form=SalesOrderItemLineForm, extra=0) #cannot use extra >0 because the formset is zip with the qs below
|
|
SalesOrderItemLineFormset = inlineformset_factory(SalesOrder, SalesOrderItemLine, form=SalesOrderItemLineForm, extra=0) #cannot use extra >0 because the formset is zip with the qs below
|
|
# SalesOrderItemLineFormset = modelformset_factory(SalesOrderItemLine, fields = ('ItemRefFullName', 'Desc', 'Quantity', 'UnitOfMeasure', 'Rate', 'Amount', 'Invoiced', 'LineIsManuallyClosed',), extra=1)
|
|
# SalesOrderItemLineFormset = modelformset_factory(SalesOrderItemLine, fields = ('ItemRefFullName', 'Desc', 'Quantity', 'UnitOfMeasure', 'Rate', 'Amount', 'Invoiced', 'LineIsManuallyClosed',), extra=1)
|
|
qs=None
|
|
formset = SalesOrderItemLineFormset(request.POST or None)
|
|
if pk:
|
|
print("got ID")
|
|
qs = obj.salesorderitemline_set.all().order_by('id').select_related('ItemRefFullName')
|
|
# formset = SalesOrderItemLineFormset(request.POST or None, queryset=qs)
|
|
formset = SalesOrderItemLineFormset(request.POST or None, instance=obj)
|
|
print(request.POST)
|
|
# print(formset)
|
|
# print(len(formset))
|
|
# print(f"queryset={qs}")
|
|
# print(f"queryset={qs[0].ItemRefFullName}")
|
|
# qsItemList = list(x.ItemRefFullName for x in qs)
|
|
# print(qsItemList)
|
|
print(f'plname:{plname}')
|
|
qsIn = Item.objects.filter(itempricelevel__PL__Name=plname).prefetch_related("itempricelevel").values('id', 'FullName','SalesDesc', 'SalesPrice', 'itempricelevel__Price')
|
|
qsEx = Item.objects.exclude(itempricelevel__PL__Name=plname).prefetch_related("itempricelevel").values( "id", "FullName", "SalesDesc", "SalesPrice", "AlwaysNull")
|
|
# print(qsIn)
|
|
# print("qsEx")
|
|
# print(qsEx)
|
|
context['itemdatalist'] = qsIn.union(qsEx)
|
|
|
|
context['object'] = obj
|
|
context['qsformset'] = None
|
|
if pk:
|
|
context['qsformset'] = list(zip(qs, formset))
|
|
if request.method == "POST":
|
|
with transaction.atomic():
|
|
if form.is_valid():
|
|
# print(form.cleaned_data)
|
|
# with transaction.atomic():
|
|
# print(formset)
|
|
if formset.is_valid():
|
|
for delform in formset.deleted_forms:
|
|
pass
|
|
totalamount=form.cleaned_data['TotalAmount']
|
|
print(totalamount, type(totalamount))
|
|
totalamountChildren=0
|
|
for fm in formset:
|
|
# print(fm)
|
|
print(fm['DELETE'].value())
|
|
if not fm['DELETE'].value() and 'Amount' in fm.cleaned_data:
|
|
print(f"fm.cleaced_data: {fm.cleaned_data['Amount']}")
|
|
amount=fm.cleaned_data['Amount']
|
|
# print(amount)
|
|
print(fm['DELETE'].value())
|
|
totalamountChildren+=amount
|
|
print(totalamountChildren)
|
|
if totalamount==totalamountChildren:
|
|
print("correct total amount")
|
|
else:
|
|
print(f"not correct total amount:{totalamount} supposed={totalamountChildren}")
|
|
# form.cleaned_data['TotalAmount'] = totalamountChildren
|
|
parentobj = form.save(commit=False)
|
|
parentobj.TotalAmount = totalamountChildren
|
|
parentobj.save()
|
|
# print(parentobj)
|
|
print("formset valid")
|
|
instances = formset.save(commit=False)
|
|
for obj in formset.deleted_objects:
|
|
print("deelted object")
|
|
print(obj)
|
|
obj.delete()
|
|
for instance in instances:
|
|
# print(instance.ItemRefFullName)
|
|
# print(instance.pk)
|
|
# print(parentobj.id)
|
|
instance.SalesOrder = parentobj
|
|
instance.save()
|
|
context['message'] = "All Data Saved"
|
|
print("all formset saved")
|
|
print(parentobj.pk, type(parentobj.pk))
|
|
print(reverse('SalesOrder:edit_so', args=[parentobj.pk]))
|
|
messages.success(request, "All Data is Saved")
|
|
return redirect(reverse('SalesOrder:edit_so', args=[parentobj.pk]))
|
|
else:
|
|
print("formset error")
|
|
print(formset.errors)
|
|
else:
|
|
print("form error")
|
|
print(form.errors)
|
|
context['form'] = form
|
|
context['formset'] = formset
|
|
return render(request, "SalesOrder/create-update.html", context=context)
|
|
|
|
# def add_so(request):
|
|
# print("create SO")
|
|
# context = {}
|
|
# # obj = get_object_or_404(SalesOrder, pk=id)
|
|
# obj=None
|
|
# form = SalesOrderForm(request.POST or None, )
|
|
# SalesOrderItemLineFormset = modelformset_factory(SalesOrderItemLine, form=SalesOrderItemLineForm, extra=1)
|
|
# # qs = obj.salesorderitemline_set.all()
|
|
# qs=None
|
|
# formset = SalesOrderItemLineFormset(request.POST or None, )
|
|
# context['form'] = form
|
|
# context['formset'] = formset
|
|
# context['object'] = obj
|
|
|
|
# if all([form.is_valid(), formset.is_valid()]):
|
|
# print(form.cleaned_data)
|
|
# for form in formset:
|
|
# print(form.clean_data)
|
|
# context['message'] = "All Data saved"
|
|
# return render(request, "SalesOrder/create-update.html", context=context)
|
|
|
|
|
|
def getpricelist_so(request, pk=None):
|
|
print(f"getpricelist SO; pk={pk}")
|
|
context = {}
|
|
obj=None
|
|
plname = None
|
|
if pk:
|
|
# obj = get_object_or_404(SalesOrder.objects.select_related(), pk=pk)
|
|
obj = get_object_or_404(Customer.objects.select_related(), pk=pk)
|
|
plname = obj.PriceLevelRefFullName.Name
|
|
# print(f"{obj.CustomerRefFullName.PriceLevelRefFullName.Name}")
|
|
# form = SalesOrderForm(request.POST or None, instance=obj)
|
|
# SalesOrderItemLineFormset = inlineformset_factory(SalesOrder, SalesOrderItemLine, form=SalesOrderItemLineForm, extra=0) #cannot use extra >0 because the formset is zip with the qs below
|
|
print(obj)
|
|
qs=None
|
|
# formset = SalesOrderItemLineFormset(request.POST or None)
|
|
# if pk:
|
|
# print("got ID")
|
|
# qs = obj.salesorderitemline_set.all().order_by('id').select_related('ItemRefFullName')
|
|
# # formset = SalesOrderItemLineFormset(request.POST or None, queryset=qs)
|
|
# formset = SalesOrderItemLineFormset(request.POST or None, instance=obj)
|
|
print(request.GET)
|
|
# print(len(formset))
|
|
# print(f"queryset={qs}")
|
|
# print(f"queryset={qs[0].ItemRefFullName}")
|
|
# qsItemList = list(x.ItemRefFullName for x in qs)
|
|
# print(qsItemList)
|
|
print(f'plname:{plname}')
|
|
qsIn = Item.objects.filter(itempricelevel__PL__Name=plname).prefetch_related("itempricelevel").values('id', 'FullName','SalesDesc', 'SalesPrice', 'itempricelevel__Price')
|
|
qsEx = Item.objects.exclude(itempricelevel__PL__Name=plname).prefetch_related("itempricelevel").values( "id", "FullName", "SalesDesc", "SalesPrice", "AlwaysNull")
|
|
context['itemdatalist'] = qsIn.union(qsEx)
|
|
serialized_q = json.dumps(list( context['itemdatalist']), cls=DjangoJSONEncoder)
|
|
# p=json.loads(serialized_q)
|
|
# print(serialized_q)
|
|
serialized_obj = serializers.serialize('json', [ obj, ])
|
|
context['obj'] = serialized_obj
|
|
context['itemdatalist'] = serialized_q
|
|
# serialized_q = serialized_q + serialized_obj
|
|
# print(serialized_obj)
|
|
data = json.dumps(context, indent=4, sort_keys=True, default=str)
|
|
# print(data)
|
|
# print(serialized_q)
|
|
return JsonResponse(data, safe=False)
|
|
|
|
def edit_so(request):
|
|
print("Edit SO")
|
|
context = {}
|
|
obj = get_object_or_404(SalesOrder, pk=id)
|
|
form = SalesOrderForm(request.POST or None, instance=obj)
|
|
SalesOrderItemLineFormset = modelformset_factory(SalesOrderItemLine, form=SalesOrderItemLineForm, extra=1)
|
|
qs = obj.salesorderitemline_set.all()
|
|
formset = SalesOrderItemLineFormset(request.POST or None, isinstance=qs)
|
|
context['form'] = form
|
|
context['formset'] = formset
|
|
context['object'] = obj
|
|
|
|
if all([form.is_valid(), formset.is_valid()]):
|
|
print(form.cleaned_data)
|
|
for form in formset:
|
|
print(form.clean_data)
|
|
context['message'] = "All Data saved"
|
|
return render(request, "SalesOrder/create-update.html", context=context)
|
|
|
|
def delete_so(request):
|
|
pass
|
|
|
|
|