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 = 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}"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user