feat(Payments): Generate cash payment with purchase.
This commit is contained in:
parent
1f37e57e00
commit
0c95c21666
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user