feat(Payments): Generate cash payment with purchase.
This commit is contained in:
		@@ -3,6 +3,7 @@ from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from django.core.exceptions import ValidationError
 | 
			
		||||
 | 
			
		||||
from decimal import Decimal
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Customer(models.Model):
 | 
			
		||||
@@ -118,7 +119,7 @@ class ReconciliationJar(models.Model):
 | 
			
		||||
            self.payment_set.add(payment)
 | 
			
		||||
        self.is_valid = True
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
class Payment(models.Model):
 | 
			
		||||
    date_time = models.DateTimeField()
 | 
			
		||||
    type_payment = models.CharField(
 | 
			
		||||
@@ -144,3 +145,23 @@ class Payment(models.Model):
 | 
			
		||||
                reconciliation_jar=None
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def total_payment_from_sale(cls, payment_method, sale):
 | 
			
		||||
        payment = cls()
 | 
			
		||||
        payment.date_time = datetime.today()
 | 
			
		||||
        payment.type_payment = payment_method
 | 
			
		||||
        payment.amount = sale.get_total()
 | 
			
		||||
        payment.clean()
 | 
			
		||||
        payment.save()
 | 
			
		||||
 | 
			
		||||
        payment_sale = PaymentSale()
 | 
			
		||||
        payment_sale.payment = payment
 | 
			
		||||
        payment_sale.sale = sale
 | 
			
		||||
        payment_sale.clean()
 | 
			
		||||
        payment_sale.save()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PaymentSale(models.Model):
 | 
			
		||||
    payment = models.ForeignKey(Payment, on_delete=models.CASCADE)
 | 
			
		||||
    sale = models.ForeignKey(Sale, on_delete=models.CASCADE)
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ class TestPurchaseWithPayment(TestCase):
 | 
			
		||||
        quantity = 2
 | 
			
		||||
        unit_price = 2500
 | 
			
		||||
        total = 5000
 | 
			
		||||
        response = self.client.post(
 | 
			
		||||
        self.client.post(
 | 
			
		||||
            '/don_confiao/comprar',
 | 
			
		||||
            {
 | 
			
		||||
                "customer": str(self.customer.id),
 | 
			
		||||
@@ -42,6 +42,10 @@ class TestPurchaseWithPayment(TestCase):
 | 
			
		||||
                "payment_method": "CASH",
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        purchases = Sale.objects.all()
 | 
			
		||||
        self.assertEqual(1, len(purchases))
 | 
			
		||||
        payments = Payment.objects.all()
 | 
			
		||||
        self.assertEqual(1, len(payments))
 | 
			
		||||
        self.assertEqual(total, payments[0].amount)
 | 
			
		||||
        self.assertEqual('CASH', payments[0].type_payment)
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ from django.http import HttpResponse, HttpResponseRedirect, JsonResponse
 | 
			
		||||
from django.views.generic import ListView
 | 
			
		||||
from django.db import transaction
 | 
			
		||||
 | 
			
		||||
from .models import Sale, Product, ProductCategory, Payment
 | 
			
		||||
from .models import Sale, Product, ProductCategory, Payment, PaymentMethods
 | 
			
		||||
from .forms import ImportProductsForm, PurchaseForm, SaleLineFormSet, ReconciliationJarForm, PurchaseSummaryForm
 | 
			
		||||
 | 
			
		||||
import csv
 | 
			
		||||
@@ -13,7 +13,6 @@ import io
 | 
			
		||||
def index(request):
 | 
			
		||||
    return render(request, 'don_confiao/index.html')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def buy(request):
 | 
			
		||||
    if request.method == "POST":
 | 
			
		||||
        sale_form = PurchaseForm(request.POST)
 | 
			
		||||
@@ -24,11 +23,18 @@ def buy(request):
 | 
			
		||||
            line_formset.is_valid(),
 | 
			
		||||
            sale_summary_form.is_valid()
 | 
			
		||||
        ])
 | 
			
		||||
        payment_method = request.POST.get('payment_method')
 | 
			
		||||
        valid_payment_methods = [PaymentMethods.CASH]
 | 
			
		||||
        valid_payment_method = payment_method in valid_payment_methods
 | 
			
		||||
        if forms_are_valid:
 | 
			
		||||
            with transaction.atomic():
 | 
			
		||||
                sale = sale_form.save()
 | 
			
		||||
                line_formset.instance = sale
 | 
			
		||||
                line_formset.save()
 | 
			
		||||
                Payment.total_payment_from_sale(
 | 
			
		||||
                    payment_method,
 | 
			
		||||
                    sale
 | 
			
		||||
                )
 | 
			
		||||
            return HttpResponseRedirect("compras")
 | 
			
		||||
    else:
 | 
			
		||||
        sale_form = PurchaseForm()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user