Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)