From 77761ea8cc4afc9d2d0caf021c8efba2d5a73bd5 Mon Sep 17 00:00:00 2001 From: aserrador Date: Fri, 5 Jun 2026 09:11:52 -0500 Subject: [PATCH] feat: Add customer information to CatalogSale --- ...8_catalogsale_customer_address_and_more.py | 33 +++++++++++++++++++ tienda_ilusion/don_confiao/models/sales.py | 14 ++++++-- .../don_confiao/serializers/sales.py | 16 +++++++-- 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 tienda_ilusion/don_confiao/migrations/0048_catalogsale_customer_address_and_more.py diff --git a/tienda_ilusion/don_confiao/migrations/0048_catalogsale_customer_address_and_more.py b/tienda_ilusion/don_confiao/migrations/0048_catalogsale_customer_address_and_more.py new file mode 100644 index 0000000..8d2f6ba --- /dev/null +++ b/tienda_ilusion/don_confiao/migrations/0048_catalogsale_customer_address_and_more.py @@ -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), + ), + ] diff --git a/tienda_ilusion/don_confiao/models/sales.py b/tienda_ilusion/don_confiao/models/sales.py index 4adabb1..8a4d466 100644 --- a/tienda_ilusion/don_confiao/models/sales.py +++ b/tienda_ilusion/don_confiao/models/sales.py @@ -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}" diff --git a/tienda_ilusion/don_confiao/serializers/sales.py b/tienda_ilusion/don_confiao/serializers/sales.py index 51543fa..72db3cf 100644 --- a/tienda_ilusion/don_confiao/serializers/sales.py +++ b/tienda_ilusion/don_confiao/serializers/sales.py @@ -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