feat: Add customer information to CatalogSale
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 5.0.6 on 2026-06-05 14:02
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('don_confiao', '0047_catalogsale_external_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='catalogsale',
|
||||
name='customer_address',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='catalogsale',
|
||||
name='customer_name',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='catalogsale',
|
||||
name='customer_phone',
|
||||
field=models.CharField(blank=True, max_length=13, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='catalogsale',
|
||||
name='pickup_method',
|
||||
field=models.CharField(blank=True, max_length=30, null=True),
|
||||
),
|
||||
]
|
||||
@@ -20,7 +20,9 @@ class SaleLineAbstractModel(models.Model):
|
||||
product = models.ForeignKey(
|
||||
Product, null=False, blank=False, on_delete=models.CASCADE
|
||||
)
|
||||
quantity = models.DecimalField(max_digits=10, decimal_places=2, null=True)
|
||||
quantity = models.DecimalField(
|
||||
max_digits=10, decimal_places=2, null=True
|
||||
)
|
||||
unit_price = models.DecimalField(max_digits=9, decimal_places=2)
|
||||
description = models.CharField(max_length=255, null=True, blank=True)
|
||||
|
||||
@@ -53,7 +55,9 @@ class Sale(SaleAbstractModel):
|
||||
|
||||
def clean(self):
|
||||
if self.payment_method not in PaymentMethods.values:
|
||||
raise ValidationError({"payment_method": "Invalid payment method"})
|
||||
raise ValidationError(
|
||||
{"payment_method": "Invalid payment method"}
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def sale_header_csv(cls):
|
||||
@@ -71,6 +75,12 @@ class SaleLine(SaleLineAbstractModel):
|
||||
|
||||
class CatalogSale(SaleAbstractModel):
|
||||
external_id = models.CharField(max_length=100, null=True, blank=True)
|
||||
customer_name = models.CharField(max_length=255, null=True, blank=True)
|
||||
customer_phone = models.CharField(max_length=13, null=True, blank=True)
|
||||
customer_address = models.CharField(
|
||||
max_length=255, null=True, blank=True
|
||||
)
|
||||
pickup_method = models.CharField(max_length=30, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.date} {self.customer}"
|
||||
|
||||
@@ -47,7 +47,9 @@ class CatalogSaleLineSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
||||
class CatalogSaleSerializer(serializers.ModelSerializer):
|
||||
catalogsaleline_set = CatalogSaleLineSerializer(many=True, required=False)
|
||||
catalogsaleline_set = CatalogSaleLineSerializer(
|
||||
many=True, required=False
|
||||
)
|
||||
total = serializers.ReadOnlyField(source="get_total")
|
||||
|
||||
class Meta:
|
||||
@@ -59,6 +61,10 @@ class CatalogSaleSerializer(serializers.ModelSerializer):
|
||||
"catalogsaleline_set",
|
||||
"total",
|
||||
"external_id",
|
||||
"customer_name",
|
||||
"customer_phone",
|
||||
"customer_address",
|
||||
"pickup_method",
|
||||
]
|
||||
|
||||
def create(self, validated_data):
|
||||
@@ -66,7 +72,9 @@ class CatalogSaleSerializer(serializers.ModelSerializer):
|
||||
catalog_sale = CatalogSale.objects.create(**validated_data)
|
||||
|
||||
for line_data in lines_data:
|
||||
CatalogSaleLine.objects.create(catalog_sale=catalog_sale, **line_data)
|
||||
CatalogSaleLine.objects.create(
|
||||
catalog_sale=catalog_sale, **line_data
|
||||
)
|
||||
|
||||
return catalog_sale
|
||||
|
||||
@@ -98,7 +106,9 @@ class CatalogSummarySaleLineSerializer(serializers.ModelSerializer):
|
||||
|
||||
class CatalogSaleSummarySerializer(serializers.ModelSerializer):
|
||||
customer = ListCustomerSerializer()
|
||||
lines = CatalogSummarySaleLineSerializer(many=True, source="catalogsaleline_set")
|
||||
lines = CatalogSummarySaleLineSerializer(
|
||||
many=True, source="catalogsaleline_set"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = CatalogSale
|
||||
|
||||
Reference in New Issue
Block a user