def edit(request, pk): if request.method == "POST": instance = get_object_or_404(Customer.objects.filter(pk=pk)) form = CustomerForm(request.POST, request.FILES, instance=instance) if form.is_valid(): data = form.save(commit=False) data.date_updated = datetime.datetime.now() data.updater = request.user data.save() response_data = { "status": "true", "title": "Successfully Updated", "message": "Customer Successfully Updated.", "redirect": "true", "redirect_url": reverse('customers:customer', kwargs={"pk": data.pk}) } else: message = generate_form_errors(form, formset=False) response_data = { "status": "false", "stable": "true", "title": "Form validation error", "message": message } return HttpResponse(json.dumps(response_data), content_type='application/javascript') else: instance = get_object_or_404(Customer.objects.filter(pk=pk)) form = CustomerForm(instance=instance) context = { "form": form, "title": "Edit Customer", "redirect": True, "url": reverse('customers:edit', kwargs={"pk": instance.pk}), "is_need_select_picker": True, "is_need_popup_box": True, "is_need_custom_scroll_bar": True, "is_need_wave_effect": True, "is_need_bootstrap_growl": True, "is_need_chosen_select": True, "is_need_grid_system": True, "is_need_datetime_picker": True, "is_need_animations": True, } return render(request, 'customers/entry.html', context)
def create(request): if request.method == "POST": form = CustomerForm(request.POST, request.FILES) if form.is_valid(): data = form.save(commit=False) data.creator = request.user data.updater = request.user data.auto_id = get_auto_id(Customer) data.save() response_data = { "status": "true", "title": "Successfully Created", "message": "Customer Successfully Created.", "redirect": "true", "redirect_url": reverse('customers:customer', kwargs={"pk": data.pk}) } else: message = generate_form_errors(form, formset=False) response_data = { "status": "false", "stable": "true", "title": "Form validation error", "message": message } return HttpResponse(json.dumps(response_data), content_type='application/javascript') else: form = CustomerForm() context = { "form": form, "title": "Create Customer", "redirect": True, "url": reverse('customers:create'), "is_need_select_picker": True, "is_need_popup_box": True, "is_need_custom_scroll_bar": True, "is_need_wave_effect": True, "is_need_bootstrap_growl": True, "is_need_chosen_select": True, "is_need_grid_system": True, "is_need_datetime_picker": True, "is_need_animations": True, } return render(request, 'customers/entry.html', context)
def change_password(request,pk): instance = get_object_or_404(User.objects.filter(pk=pk,is_active=True)) if request.method == "POST": response_data = {} form = PasswordChangeForm(user=instance, data=request.POST) if form.is_valid(): form.save() response_data = { 'status' : 'true', 'title' : "Successfully Changed", 'redirect' : 'false', 'message' : "Password Successfully Changed." } else: message = generate_form_errors(form,formset=False) response_data = { 'status' : 'false', 'stable' : 'true', 'title' : "Form validation error", "message" : message, } return HttpResponse(json.dumps(response_data), content_type='application/javascript') else: title = "Change Password" change_password_form = PasswordChangeForm(user=instance) context = { "change_password_form" : change_password_form, "title" : title, "instance" : instance, "is_need_popup_box": True, "is_need_custom_scroll_bar": True, "is_need_wave_effect": True, "is_need_bootstrap_growl": True, "is_need_animations": True, "is_need_grid_system": True, "is_need_select_picker": True, "is_need_datetime_picker" : True } return render(request, 'users/change_password.html', context)
def create(request): SaleItemFormset = formset_factory(SaleItemForm, extra=1) if request.method == 'POST': form = SaleForm(request.POST) sale_item_formset = SaleItemFormset(request.POST, prefix='sale_item_formset') if form.is_valid() and sale_item_formset.is_valid(): # Creating Sale Item Objects for finding duplicate product entry items = {} for f in sale_item_formset: product = f.cleaned_data['product'] qty = f.cleaned_data['qty'] if str(product.pk) in items: q = items[str(product.pk)]["qty"] items[str(product.pk)]["qty"] = q + qty else: dic = { "qty": qty, } items[str(product.pk)] = dic # Checking the stock available for this product stock_ok = True error_message = '' for key, value in items.items(): product = Product.objects.get(pk=key) stock = product.stock qty = value['qty'] if qty > stock: stock_ok = False error_message += "{} has only {} in stock, You entered {} qty".format( product.name, str(stock), str(qty)) if stock_ok: discount = form.cleaned_data['discount'] data = form.save(commit=False) data.creator = request.user data.updator = request.user data.auto_id = get_auto_id(Sale) data.save() subtotal = 0 for key, value in items.items(): product = Product.objects.get(pk=key) qty = value["qty"] price = product.price sub = (qty * price) subtotal += sub SaleItem(sale=data, product=product, qty=qty).save() update_stock(product.pk, qty, 'decrease') total = subtotal - discount data.subtotal = subtotal data.total = total data.save() response_data = { "status": "true", "title": "Successfully Created", "message": "Sale Successfully Created.", "redirect": "true", "redirect_url": reverse('sales:sale', kwargs={'pk': data.pk}) } else: response_data = { "status": "false", "stable": "true", "title": "Out of Stock", "message": error_message } else: message = generate_form_errors(form, formset=False) message += generate_form_errors(sale_item_formset, formset=True) response_data = { "status": "false", "stable": "true", "title": "Form validation error", "message": message } return HttpResponse(json.dumps(response_data), content_type='application/javascript') else: form = SaleForm() sale_item_formset = SaleItemFormset(prefix='sale_item_formset') context = { 'title': 'Create Sale', 'form': form, 'sale_item_formset': sale_item_formset, 'redirect': True, 'url': reverse('sales:create'), "is_need_select_picker": True, "is_need_popup_box": True, "is_need_custom_scroll_bar": True, "is_need_wave_effect": True, "is_need_bootstrap_growl": True, "is_need_chosen_select": True, "is_need_grid_system": True, "is_need_datetime_picker": True, "is_need_animations": True, "is_dashboard": True } return render(request, 'sales/entry.html', context)
def edit(request, pk): instance = get_object_or_404(Sale.objects.filter(pk=pk)) if SaleItem.objects.filter(sale=instance).exists(): extra = 0 else: extra = 1 SaleItemFormset = inlineformset_factory( Sale, SaleItem, can_delete=True, extra=extra, exclude=('sale', ), widgets={ 'product': autocomplete.ModelSelect2( url='products:product_autocomplete', attrs={ 'data-placeholder': 'Product', 'data-minimum-input-length': 1 }, ), 'qty': TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Quantity' }), }) if request.method == 'POST': form = SaleForm(request.POST, instance=instance) sale_item_formset = SaleItemFormset(request.POST, prefix='sale_item_formset', instance=instance) if form.is_valid() and sale_item_formset.is_valid(): # Creating Sale Item Objects for finding duplicate product entry items = {} for f in sale_item_formset: product = f.cleaned_data['product'] qty = f.cleaned_data['qty'] if str(product.pk) in items: q = items[str(product.pk)]["qty"] items[str(product.pk)]["qty"] = q + qty else: dic = { "qty": qty, } items[str(product.pk)] = dic # Checking the stock available for this product stock_ok = True error_message = '' for key, value in items.items(): product = Product.objects.get(pk=key) prev_qty = 0 if SaleItem.objects.filter(sale=instance, product=product).exists(): prev_qty = SaleItem.objects.get(sale=instance, product=product).qty stock = product.stock + prev_qty qty = value['qty'] if qty > stock: stock_ok = False error_message += "{} has only {} in stock, You entered {} qty".format( product.name, str(stock), str(qty)) if stock_ok: discount = form.cleaned_data['discount'] data = form.save(commit=False) data.updator = request.user data.date_updated = datetime.datetime.now() data.save() #delete previous items and update stock previous_sale_items = SaleItem.objects.filter(sale=instance) for p in previous_sale_items: prev_qty = p.qty update_stock(p.product.pk, prev_qty, 'increase') previous_sale_items.delete() #save items subtotal = 0 for key, value in items.items(): product = Product.objects.get(pk=key) qty = value["qty"] price = product.price sub = (qty * price) subtotal += sub SaleItem(sale=data, product=product, qty=qty).save() update_stock(product.pk, qty, 'decrease') total = subtotal - discount data.subtotal = subtotal data.total = total data.save() response_data = { "status": "true", "title": "Successfully Updated", "message": "Sale Successfully Updated.", "redirect": "true", "redirect_url": reverse('sales:sale', kwargs={'pk': data.pk}) } else: response_data = { "status": "false", "stable": "true", "title": "Out of Stock", "message": error_message } else: message = generate_form_errors(form, formset=False) message += generate_form_errors(sale_item_formset, formset=True) response_data = { "status": "false", "stable": "true", "title": "Form validation error", "message": message } return HttpResponse(json.dumps(response_data), content_type='application/javascript') else: form = SaleForm(instance=instance) sale_item_formset = SaleItemFormset(prefix='sale_item_formset', instance=instance) context = { 'title': 'Edit Sale', 'form': form, 'sale_item_formset': sale_item_formset, 'redirect': True, 'url': reverse('sales:edit', kwargs={'pk': instance.pk}), "is_need_select_picker": True, "is_need_popup_box": True, "is_need_custom_scroll_bar": True, "is_need_wave_effect": True, "is_need_bootstrap_growl": True, "is_need_chosen_select": True, "is_need_grid_system": True, "is_need_datetime_picker": True, "is_need_animations": True, "is_dashboard": True } return render(request, 'sales/entry.html', context)
def edit(request, pk): instance = get_object_or_404(Sale.objects.filter(pk=pk, is_deleted=False)) if SaleItem.objects.filter(sale=instance).exists(): extra = 0 else: extra = 1 SaleItemFormset = inlineformset_factory( Sale, SaleItem, can_delete=True, extra=extra, exclude=[ 'creator', 'updater', 'auto_id', 'is_deleted', 'sale', ], widgets={ 'product': Select(attrs={ 'class': 'required form-control', 'data-placeholder': 'Product' }, ), 'qty': TextInput(attrs={ 'class': 'required number form-control', 'placeholder': 'Quantity' }), }) if request.method == "POST": form = SaleForm(request.POST, instance=instance) sale_item_formset = SaleItemFormset(request.POST, prefix='sale_item_formset', instance=instance) if form.is_valid() and sale_item_formset.is_valid(): items = {} for f in sale_item_formset: if f not in sale_item_formset.deleted_forms: product = f.cleaned_data['product'] qty = f.cleaned_data['qty'] if str(product.pk) in items: q = items[str(product.pk)]["qty"] items[str(product.pk)]["qty"] = q + qty else: dic = {"qty": qty} items[str(product.pk)] = dic stock_ok = True error_message = '' for key, value in items.items(): product = Product.objects.get(pk=key) prev_qty = 0 if SaleItem.objects.filter(sale=instance, product=product).exists(): prev_qty = SaleItem.objects.get(sale=instance, product=product).qty stock = product.stock + prev_qty product_qty = value['qty'] if product_qty > stock: stock_ok = False error_message += "%s has only %s in stock, You entered %s qty" % ( product.name, str(stock), str(qty)) stock_ok = True error_message = '' for key, value in items.items(): product = Product.objects.get(pk=key) prev_qty = 0 if SaleItem.objects.filter(sale=instance, product=product).exists(): prev_qty = SaleItem.objects.get(sale=instance, product=product).qty stock = product.stock + prev_qty product_qty = value['qty'] if product_qty > stock: stock_ok = False error_message += "%s has only %s in stock, " % ( product.name, str(stock)) if stock_ok: #update sale discount = form.cleaned_data['discount'] data = form.save(commit=False) data.updator = request.user data.date_updated = datetime.datetime.now() data.save() all_subtotal = 0 #delete previous items and update stock previous_sale_items = SaleItem.objects.filter(sale=instance) for p in previous_sale_items: prev_qty = p.qty update_stock(p.product.pk, prev_qty, "increase") previous_sale_items.delete() #save items for key, value in items.items(): product = Product.objects.get(pk=key) qty = value["qty"] price = product.price sub_total = (qty * price) all_subtotal += sub_total SaleItem( sale=data, product=product, qty=qty, ).save() update_stock(product.pk, qty, "decrease") total = all_subtotal - discount data.sub_total = all_subtotal data.total = total data.save() response_data = { "status": "true", "title": "Successfully Updated", "message": "Sale Successfully Updated.", "redirect": "true", "redirect_url": reverse('sales:sale', kwargs={'pk': data.pk}) } else: response_data = { "status": "false", "stable": "true", "title": "Out of Stock", "message": error_message } else: message = generate_form_errors(form, formset=False) message += generate_form_errors(sale_item_formset, formset=True) response_data = { "status": "false", "stable": "true", "title": "Form validation error", "message": message } return HttpResponse(json.dumps(response_data), content_type='application/javascript') else: form = SaleForm(instance=instance) sale_item_formset = SaleItemFormset(prefix='sale_item_formset', instance=instance) context = { "form": form, "title": "Edit Sale #: " + str(instance.auto_id), "instance": instance, "sale_item_formset": sale_item_formset, "redirect": True, "url": reverse('sales:edit', kwargs={"pk": instance.pk}), "is_need_select_picker": True, "is_need_popup_box": True, "is_need_custom_scroll_bar": True, "is_need_wave_effect": True, "is_need_bootstrap_growl": True, "is_need_chosen_select": True, "is_need_grid_system": True, "is_need_datetime_picker": True, "is_need_animations": True, } return render(request, 'sales/entry.html', context)