From 3d13fbd1f80cb70c4e9dbb684306c7b19c7739e6 Mon Sep 17 00:00:00 2001 From: anhduy-tech Date: Mon, 26 Jan 2026 21:35:06 +0700 Subject: [PATCH] changes --- api/__pycache__/settings.cpython-313.pyc | Bin 3451 -> 3446 bytes app/__pycache__/models.cpython-313.pyc | Bin 139167 -> 139670 bytes .../workflow_utils.cpython-313.pyc | Bin 30481 -> 30481 bytes ..._date_dealer_commission_amount_and_more.py | 49 ++++++++++++++++++ app/migrations/0368_dealer_count_sale.py | 18 +++++++ app/models.py | 9 +++- 6 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 app/migrations/0367_dealer_batch_date_dealer_commission_amount_and_more.py create mode 100644 app/migrations/0368_dealer_count_sale.py diff --git a/api/__pycache__/settings.cpython-313.pyc b/api/__pycache__/settings.cpython-313.pyc index 6f12e0ef4d71c68776703c497d5472ef16e5f9ab..41931f458752559244a19e31637ac3e838704aef 100644 GIT binary patch delta 251 zcmew@^-YTRGcPX}0}x!bD$jg5k$0IUXAy5OXAxg8mp(%|B4yaHzSRPC&fJsFIMtznd(O{(_ zv0&vQaiGx>Kr9KwQo$-k(!r`lGQq;ZYQgF;!h8(D8ph1Qn!#E?o!WZLKr>~5ayr4f zF~Y%mCQSMuXXxuO0mbFg4KxiCH8!^~)-W=GRCooEH ee#8EZnbB?XWo~yyzRA)&i9oWJ=NF3$(6<02P&&5& delta 256 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 delta 10156 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 diff --git a/app/__pycache__/workflow_utils.cpython-313.pyc b/app/__pycache__/workflow_utils.cpython-313.pyc index 2c2998d4105ff4fc8eb3fa661192a39ddee7614e..55df2ea2af957ab620c3be8d733c3345989e9955 100644 GIT binary patch delta 22 ccmbREj&b5UM()qNyj%=Gpl?*Zk(;d?092|5Gynhq delta 22 ccmbREj&b5UM()qNyj%=G(D0*dBR5+)09$|uN&o-= diff --git a/app/migrations/0367_dealer_batch_date_dealer_commission_amount_and_more.py b/app/migrations/0367_dealer_batch_date_dealer_commission_amount_and_more.py new file mode 100644 index 00000000..6b3f949c --- /dev/null +++ b/app/migrations/0367_dealer_batch_date_dealer_commission_amount_and_more.py @@ -0,0 +1,49 @@ +# Generated by Django 5.1.7 on 2026-01-26 08:24 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0366_payment_schedule_batch_date'), + ] + + operations = [ + migrations.AddField( + model_name='dealer', + name='batch_date', + field=models.DateTimeField(null=True), + ), + migrations.AddField( + model_name='dealer', + name='commission_amount', + field=models.DecimalField(decimal_places=2, max_digits=15, null=True), + ), + migrations.AddField( + model_name='dealer', + name='commission_remain', + field=models.DecimalField(decimal_places=2, max_digits=15, null=True), + ), + migrations.AddField( + model_name='dealer', + name='pay_commission', + field=models.DecimalField(decimal_places=2, max_digits=15, null=True), + ), + migrations.AddField( + model_name='dealer', + name='pay_sale', + field=models.DecimalField(decimal_places=2, max_digits=15, null=True), + ), + migrations.AddField( + model_name='dealer', + name='sale_amount', + field=models.DecimalField(decimal_places=2, max_digits=15, null=True), + ), + migrations.AlterField( + model_name='product_booked', + name='transaction', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='transbk', to='app.transaction'), + ), + ] diff --git a/app/migrations/0368_dealer_count_sale.py b/app/migrations/0368_dealer_count_sale.py new file mode 100644 index 00000000..4ab12cdb --- /dev/null +++ b/app/migrations/0368_dealer_count_sale.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.7 on 2026-01-26 09:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0367_dealer_batch_date_dealer_commission_amount_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='dealer', + name='count_sale', + field=models.IntegerField(null=True), + ), + ] diff --git a/app/models.py b/app/models.py index 6a11d0cc..297bebc6 100644 --- a/app/models.py +++ b/app/models.py @@ -784,6 +784,13 @@ class Dealer(AutoCodeModel): phone = models.CharField(max_length=20, null=True, db_index=True) email = models.CharField(max_length=50, null=True) address = models.CharField(max_length=255, null=True) + sale_amount = models.DecimalField(max_digits=15, decimal_places=2,null=True) + pay_sale = models.DecimalField(max_digits=15, decimal_places=2,null=True) + commission_amount = models.DecimalField(max_digits=15, decimal_places=2,null=True) + pay_commission = models.DecimalField(max_digits=15, decimal_places=2,null=True) + commission_remain = models.DecimalField(max_digits=15, decimal_places=2,null=True) + batch_date = models.DateTimeField(null=True) + count_sale = models.IntegerField(null=True) create_time = models.DateTimeField(null=True, auto_now_add=True) update_time = models.DateTimeField(null=True, auto_now=True) @@ -1460,7 +1467,7 @@ class Transaction_File(models.Model): class Product_Booked(models.Model): product = models.OneToOneField(Product, null=False, related_name='prdbk', on_delete=models.PROTECT) - transaction = models.ForeignKey(Transaction, null=False, related_name='+', on_delete=models.PROTECT) + transaction = models.ForeignKey(Transaction, null=False, related_name='transbk', on_delete=models.PROTECT) create_time = models.DateTimeField(null=True, auto_now_add=True) update_time = models.DateTimeField(null=True, auto_now=True)