From 5b8b815592bb65c8482bf063f3f616174ef7c50c Mon Sep 17 00:00:00 2001 From: Xuan Loi Date: Wed, 14 Jan 2026 10:45:12 +0700 Subject: [PATCH] changes --- api/__pycache__/settings.cpython-312.pyc | Bin 3432 -> 3432 bytes app/__pycache__/models.cpython-312.pyc | Bin 137021 -> 137187 bytes ...hts_is_edit_product_price_excluding_vat.py | 23 ++++++++++++++++++ app/models.py | 2 ++ 4 files changed, 25 insertions(+) create mode 100644 app/migrations/0355_group_rights_is_edit_product_price_excluding_vat.py diff --git a/api/__pycache__/settings.cpython-312.pyc b/api/__pycache__/settings.cpython-312.pyc index cbaab4aa0232ee1f7ba228bc58e3988a6fca8c42..2dab8f09831d976faaef540540796e3f074771bc 100644 GIT binary patch delta 20 acmaDM^+JmKG%qg~0}$-tPT$BK%L@QMtp!s6 delta 20 acmaDM^+JmKG%qg~0}xD!OWDXB%L@QNcm;a^ diff --git a/app/__pycache__/models.cpython-312.pyc b/app/__pycache__/models.cpython-312.pyc index 44da62595c741775b1ed2719aaae1be5af03e7f9..b0d1afa5ecf11420d6cd1a2a7c0dd0af68241494 100644 GIT binary patch delta 7593 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 Rcgux}x9V6O{nTC8{{w(pEBycf delta 7584 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 J`HD*O{{w2rKgj?9 diff --git a/app/migrations/0355_group_rights_is_edit_product_price_excluding_vat.py b/app/migrations/0355_group_rights_is_edit_product_price_excluding_vat.py new file mode 100644 index 00000000..8f501e8f --- /dev/null +++ b/app/migrations/0355_group_rights_is_edit_product_price_excluding_vat.py @@ -0,0 +1,23 @@ +# Generated by Django 5.1.7 on 2026-01-14 03:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0354_group_rights'), + ] + + operations = [ + migrations.AddField( + model_name='group_rights', + name='is_edit', + field=models.BooleanField(default=False, null=True), + ), + migrations.AddField( + model_name='product', + name='price_excluding_vat', + field=models.DecimalField(decimal_places=2, max_digits=15, null=True), + ), + ] diff --git a/app/models.py b/app/models.py index 09fc7f16..bfacce23 100644 --- a/app/models.py +++ b/app/models.py @@ -804,6 +804,7 @@ class Product(AutoCodeModel): policy = models.ForeignKey(Sale_Policy, null=True, related_name='+', on_delete=models.PROTECT) note = models.TextField(null=True) origin_price = models.DecimalField(max_digits=15, decimal_places=2, null=True) + price_excluding_vat = models.DecimalField(max_digits=15, decimal_places=2, null=True) product_type = models.CharField(max_length=255, null=True) template_name = models.CharField(max_length=255, null=True) link = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, null=True) @@ -1117,6 +1118,7 @@ class Dealer_Rights(models.Model): class Group_Rights(models.Model): setting = models.ForeignKey(Biz_Setting, null=False, related_name='+', on_delete=models.PROTECT) group = models.ForeignKey(User_Type, null=False, related_name='+', on_delete=models.PROTECT) + is_edit = models.BooleanField(null=True, default=False) create_time = models.DateTimeField(null=True, auto_now_add=True) class Meta: