pre sale system deployment
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -78,9 +78,10 @@ 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'],
|
||||||
"type": value['type']
|
"type": value['type']
|
||||||
}for key, value in merged.items()]
|
} for key, value in merged.items()]
|
||||||
}
|
}
|
||||||
|
|||||||
18
apps/product/migrations/0074_quota_limit_by_herd_size.py
Normal file
18
apps/product/migrations/0074_quota_limit_by_herd_size.py
Normal 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),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
36
apps/warehouse/migrations/0028_quotapresaleitem.py
Normal file
36
apps/warehouse/migrations/0028_quotapresaleitem.py
Normal 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,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -202,3 +202,9 @@ class InventoryQuotaSaleItemSerializer(serializers.ModelSerializer):
|
|||||||
"total_price",
|
"total_price",
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class QuotaPreSaleItemSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = warehouse_models.QuotaPreSaleItem
|
||||||
|
fields = '__all__'
|
||||||
|
|||||||
Reference in New Issue
Block a user