pre sale system deployment

This commit is contained in:
2025-09-20 16:58:24 +03:30
parent 8cfe3888f1
commit 209f067287
9 changed files with 154 additions and 4 deletions

View File

@@ -9,11 +9,11 @@ https://docs.djangoproject.com/en/5.2/howto/deployment/asgi/
# import os # import os
# #
# from django.core.asgi import get_asgi_application # from django.core.asgi import get_asgi_application # noqa
# #
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Rasaddam_Backend.settings') # os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Rasaddam_Backend.settings') # noqa
# #
# application = get_asgi_application() # application = get_asgi_application() # noqa
import os import os
from channels.routing import ProtocolTypeRouter, URLRouter from channels.routing import ProtocolTypeRouter, URLRouter

View File

@@ -78,6 +78,7 @@ def rancher_quota_weight(rancher, inventory_entry: InventoryEntry = None, distri
return { return {
"total_weight": total_weight, "total_weight": total_weight,
"remaining_weight": 20,
"by_type": [{ "by_type": [{
"name": key, "name": key,
"weight": value['weight'], "weight": value['weight'],

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.0 on 2025-09-20 13:26
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('product', '0073_historicalquotadistribution_free_sale_and_more'),
]
operations = [
migrations.AddField(
model_name='quota',
name='limit_by_herd_size',
field=models.BooleanField(default=True),
),
]

View File

@@ -361,6 +361,7 @@ class Quota(BaseModel):
base_price_factory = models.PositiveBigIntegerField(default=0) base_price_factory = models.PositiveBigIntegerField(default=0)
base_price_cooperative = models.PositiveBigIntegerField(default=0) base_price_cooperative = models.PositiveBigIntegerField(default=0)
final_price = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True) final_price = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True)
limit_by_herd_size = models.BooleanField(default=True)
is_closed = models.BooleanField(default=False) is_closed = models.BooleanField(default=False)
closed_at = models.DateTimeField(null=True, blank=True) closed_at = models.DateTimeField(null=True, blank=True)

View File

@@ -0,0 +1,36 @@
# Generated by Django 5.0 on 2025-09-20 10:25
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('authentication', '0036_organization_phone'),
('product', '0073_historicalquotadistribution_free_sale_and_more'),
('warehouse', '0027_extrasale_sale_item'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='QuotaPreSaleItem',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('creator_info', models.CharField(max_length=100, null=True)),
('modifier_info', models.CharField(max_length=100, null=True)),
('trash', models.BooleanField(default=False)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createddby', to=settings.AUTH_USER_MODEL)),
('distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pre_sales', to='product.quotadistribution')),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
('organization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pre_sales', to='authentication.organization')),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,44 @@
# Generated by Django 5.0 on 2025-09-20 13:26
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('warehouse', '0028_quotapresaleitem'),
]
operations = [
migrations.AddField(
model_name='inventoryquotasaletransaction',
name='free_sale_state',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='inventoryquotasaletransaction',
name='pre_sale',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='quotapresaleitem',
name='sale_item',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pre_sale', to='warehouse.inventoryquotasaleitem'),
),
migrations.AddField(
model_name='quotapresaleitem',
name='settlement_state',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='quotapresaleitem',
name='transaction',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pre_sales', to='warehouse.inventoryquotasaletransaction'),
),
migrations.AddField(
model_name='quotapresaleitem',
name='weight',
field=models.IntegerField(default=0),
),
]

View File

@@ -113,6 +113,8 @@ class InventoryQuotaSaleTransaction(BaseModel):
ref_num = models.CharField(max_length=50, null=True) ref_num = models.CharField(max_length=50, null=True)
terminal = models.CharField(max_length=50, null=True) terminal = models.CharField(max_length=50, null=True)
payer_cart = models.CharField(max_length=50, null=True) payer_cart = models.CharField(max_length=50, null=True)
free_sale_state = models.BooleanField(default=False)
pre_sale = models.BooleanField(default=False)
additional = models.JSONField(default=dict) additional = models.JSONField(default=dict)
@property @property
@@ -190,3 +192,38 @@ class ExtraSale(BaseModel):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
return super(ExtraSale, self).save(*args, **kwargs) return super(ExtraSale, self).save(*args, **kwargs)
class QuotaPreSaleItem(BaseModel):
organization = models.ForeignKey(
Organization,
on_delete=models.CASCADE,
related_name='pre_sales',
null=True
)
distribution = models.ForeignKey(
product_models.QuotaDistribution,
on_delete=models.CASCADE,
related_name='pre_sales',
null=True
)
transaction = models.ForeignKey(
InventoryQuotaSaleTransaction,
on_delete=models.CASCADE,
related_name='pre_sales',
null=True
)
sale_item = models.ForeignKey(
InventoryQuotaSaleItem,
on_delete=models.CASCADE,
related_name='pre_sale',
null=True
)
weight = models.IntegerField(default=0)
settlement_state = models.BooleanField(default=False)
def __str__(self):
return f'Distribution {self.distribution.distribution_id} - Transaction {self.transaction.transaction_id}'
def save(self, *args, **kwargs):
return super(QuotaPreSaleItem, self).save(*args, **kwargs)

View File

@@ -126,3 +126,10 @@ class InventoryQuotaSaleTransactionViewSet(viewsets.ModelViewSet, DynamicSearchM
if page is not None: if page is not None:
serializer = self.get_serializer(page, many=True) serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data) return self.get_paginated_response(serializer.data)
class QuotaPreSaleItemViewSet(viewsets.ModelViewSet):
queryset = warehouse_models.QuotaPreSaleItem.objects.all().select_related(
'organization', 'transaction', 'sale_item'
)
serializer_class = warehouse_serializers

View File

@@ -202,3 +202,9 @@ class InventoryQuotaSaleItemSerializer(serializers.ModelSerializer):
"total_price", "total_price",
] ]
class QuotaPreSaleItemSerializer(serializers.ModelSerializer):
class Meta:
model = warehouse_models.QuotaPreSaleItem
fields = '__all__'