dasaproject/django/Item/views.py
2023-09-27 15:49:36 +07:00

171 lines
6.4 KiB
Python

from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse
from django.urls import reverse
from django.db import transaction
from django.core.paginator import Paginator
from django.db.models import Q
from .models import Item, UOM
from .forms import ItemForm, PriceLevelForm
from django.db.models import Q
from Item.models import Item, PriceLevel, PriceLevelItem
import json
def index_pricelevel(request):
context={}
context['objects']=PriceLevel.objects.order_by('Name')
context['addurl'] = reverse('Item:add_pricelevel')
# print(context['objects'])
return render(request, "Item/index_pricelevel.html", context=context)
def add_pricelevel(request, id=None):
context={}
# print(f"idroot={id}")
pricelevel1 = None
plname=None
context['pk'] = 'null'
if id:
print(f"edit id={id}")
pricelevel1=get_object_or_404(PriceLevel, pk=id)
plname= pricelevel1.Name
print(plname)
context['pk'] = pricelevel1.pk
else:
print("add new")
form = PriceLevelForm(request.POST or None, instance=pricelevel1)
qs1 = Item.objects.filter(itempricelevel__PL__Name=plname).prefetch_related("itempricelevel").values('FullName','SalesPrice', 'itempricelevel__Price')
qs2 = Item.objects.exclude(itempricelevel__PL__Name=plname).prefetch_related("itempricelevel").values( "FullName", "SalesPrice", "AlwaysNull")
# print(qs2)
qs = qs1.union(qs2)
# print(type(qs))
# print(qs)
context['objects'] = qs
context['form'] = form
if request.POST:
datas = request.POST.get('data')
pk = request.POST.get('pk')
print(pk)
with transaction.atomic():
if form.is_valid():
print(form.cleaned_data["Name"])
pricelevel = form.save()
print("form pricelevel saved")
# return redirect(reverse("index"))
else:
print("form not valid")
return render(request, "Item/addedit_pricelevel.html", context=context)
# pricelevel = get_object_or_404(PriceLevel, pk=pk)
# print(f"pk={pk}; object={pricelevel}")
# print(type(datas))
# print(datas)
datas = json.loads(datas)
# print(type(datas))
# print(datas)
# print(form["Name"].value())
blAllSaved = True
if len(datas)>0:
print("more than 0")
for data in datas:
print(type(data))
print(data)
# print(data['FullName'])
if data['dtchange']=="1" or data['dtchange']=="2":
## add new pricelevelitem
print("dtchange 1,2")
item = get_object_or_404(Item, FullName = f"{data['FullName']}")
print(f"object=={item}")
pricelevelitem, created = PriceLevelItem.objects.get_or_create(PL=pricelevel, IPL=item, defaults={'Price':data['price']})
print(f"created={created}")
print(f"object=={pricelevelitem}")
if not created:
pricelevelitem.Price = data['price']
pricelevelitem.save()
print(f"object=={pricelevelitem}")
else:
blAllSaved=False
print("dtchange is NOT 1 or 2")
if blAllSaved:
return redirect(reverse('Item:index_pricelevel'))
else:
return redirect(reverse('Item:edit_pricelevel', pricelevel.pk ))
else:
return redirect(reverse('Item:index_pricelevel'))
return render(request, "Item/addedit_pricelevel.html", context=context)
def edit_pricelevel(request, pk):
context={}
qs1 = Item.objects.filter(itempricelevel__PL__Name='B2020',).prefetch_related("itempricelevel").values('FullName','SalesPrice', 'itempricelevel__Price')
qs2 = Item.objects.exclude(itempricelevel__PL__Name='B2020').prefetch_related("itempricelevel").values( "FullName", "SalesPrice", "AlwaysNull")
# print(qs2)
qs = qs1.union(qs2)
# print(type(qs))
# print(qs)
context['objects'] = qs
return render(request, "Item/addedit_pricelevel.html", context=context)
def index(request):
context={}
search = request.GET.get("q")
items=Item.objects.all().order_by('FullName')
if search:
item = Item.objects.order_by('FullName').filter(Q(Name__icontains=search) | Q(FullName__icontains=search))
else:
item = Item.objects.order_by('FullName')
paginator = Paginator(item, 25) # Show 25 contacts per page.
page_number = request.GET.get("page")
page_obj = paginator.get_page(page_number)
# heads = [f.name for f in Item._meta.get_fields()]
# print(heads)
context['objects'] = page_obj
context['items'] = items
context['addurl'] = reverse('Item:add_item')
return render(request, "Item/index.html", context=context)
def add_item(request):
form = ItemForm(request.POST or None)
if request.POST:
print(form["Name"].value())
if form.is_valid():
print(form.cleaned_data["Name"])
form.save()
return redirect(reverse("Item:index"))
print(form["Name"].value())
return render(request, "Item/addedit_item.html", {"form":form})
def delete_item(request, pk):
item = get_object_or_404(Item, pk=pk)
item.delete()
return HttpResponse(f"{pk} is deleted")
def edit_item(request, pk):
print(pk)
print(request)
item = get_object_or_404(Item, pk=pk)
form = ItemForm( request.POST or None, instance=item)
if request.method == "GET":
print("GET")
if item:
# form = ItemForm(instance=item)
return render(request, "Item/addedit_item.html", {"objects": [item,], "form":form})
elif request.method == "POST":
print("POST")
# form = ItemForm(request.POST, instance=item)
if form.is_valid():
print("form is valid")
item=form.save()
# return redirect(reverse('Item:edit_item', kwargs={"pk":pk}))
return render(request, "Item/index.html", {"objects": [item]})
else:
print("not valid form")
return render(request, "Item/addedit_item.html", {"objects": [item,], "form":form})