feat: Add customer information to CatalogSale

This commit is contained in:
2026-06-05 09:11:52 -05:00
parent ff67720cea
commit 77761ea8cc
3 changed files with 58 additions and 5 deletions

View File

@@ -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),
),
]

View File

@@ -20,7 +20,9 @@ class SaleLineAbstractModel(models.Model):
product = models.ForeignKey( product = models.ForeignKey(
Product, null=False, blank=False, on_delete=models.CASCADE 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) unit_price = models.DecimalField(max_digits=9, decimal_places=2)
description = models.CharField(max_length=255, null=True, blank=True) description = models.CharField(max_length=255, null=True, blank=True)
@@ -53,7 +55,9 @@ class Sale(SaleAbstractModel):
def clean(self): def clean(self):
if self.payment_method not in PaymentMethods.values: if self.payment_method not in PaymentMethods.values:
raise ValidationError({"payment_method": "Invalid payment method"}) raise ValidationError(
{"payment_method": "Invalid payment method"}
)
@classmethod @classmethod
def sale_header_csv(cls): def sale_header_csv(cls):
@@ -71,6 +75,12 @@ class SaleLine(SaleLineAbstractModel):
class CatalogSale(SaleAbstractModel): class CatalogSale(SaleAbstractModel):
external_id = models.CharField(max_length=100, null=True, blank=True) 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): def __str__(self):
return f"{self.date} {self.customer}" return f"{self.date} {self.customer}"

View File

@@ -47,7 +47,9 @@ class CatalogSaleLineSerializer(serializers.ModelSerializer):
class CatalogSaleSerializer(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") total = serializers.ReadOnlyField(source="get_total")
class Meta: class Meta:
@@ -59,6 +61,10 @@ class CatalogSaleSerializer(serializers.ModelSerializer):
"catalogsaleline_set", "catalogsaleline_set",
"total", "total",
"external_id", "external_id",
"customer_name",
"customer_phone",
"customer_address",
"pickup_method",
] ]
def create(self, validated_data): def create(self, validated_data):
@@ -66,7 +72,9 @@ class CatalogSaleSerializer(serializers.ModelSerializer):
catalog_sale = CatalogSale.objects.create(**validated_data) catalog_sale = CatalogSale.objects.create(**validated_data)
for line_data in lines_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 return catalog_sale
@@ -98,7 +106,9 @@ class CatalogSummarySaleLineSerializer(serializers.ModelSerializer):
class CatalogSaleSummarySerializer(serializers.ModelSerializer): class CatalogSaleSummarySerializer(serializers.ModelSerializer):
customer = ListCustomerSerializer() customer = ListCustomerSerializer()
lines = CatalogSummarySaleLineSerializer(many=True, source="catalogsaleline_set") lines = CatalogSummarySaleLineSerializer(
many=True, source="catalogsaleline_set"
)
class Meta: class Meta:
model = CatalogSale model = CatalogSale