add: add new field to InvalidProduct model

This commit is contained in:
behruz-dev
2025-08-27 16:12:01 +05:00
parent dad1d5ede8
commit 992fdf8390
3 changed files with 51 additions and 6 deletions

View File

@@ -0,0 +1,29 @@
# Generated by Django 5.2.4 on 2025-08-27 16:10
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wherehouse', '0007_inventory_unit_price'),
]
operations = [
migrations.AddField(
model_name='invalidproduct',
name='invalid_status',
field=models.CharField(choices=[('BROKEN', 'singan'), ('LOST', 'yoqolgan'), ('OTHER', 'boshqa')], default='other', max_length=20),
),
migrations.AddField(
model_name='invalidproduct',
name='wherehouse',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='invalid_products', to='wherehouse.wherehouse'),
),
migrations.AlterField(
model_name='invalidproduct',
name='status',
field=models.CharField(choices=[('OPEN', 'ochiq'), ('EXPECTED', 'kutilmoqda'), ('ACCEPTED', 'qabul qilingan'), ('CANCELLED', 'bekor qilingan')], default='OPEN', max_length=20),
),
]

View File

@@ -11,11 +11,17 @@ from core.apps.accounts.models import User
class InvalidProduct(BaseModel): class InvalidProduct(BaseModel):
STATUS = ( INVALID_STATUS = (
('BROKEN', 'singan'), ('BROKEN', 'singan'),
('LOST', 'yoqolgan'), ('LOST', 'yoqolgan'),
('OTHER', 'boshqa'), ('OTHER', 'boshqa'),
) )
STATUS = (
('OPEN', 'ochiq'),
('EXPECTED', 'kutilmoqda'),
('ACCEPTED', 'qabul qilingan'),
('CANCELLED', 'bekor qilingan')
)
# relationship # relationship
inventory = models.ForeignKey(Inventory, on_delete=models.CASCADE, related_name='invalid_products') inventory = models.ForeignKey(Inventory, on_delete=models.CASCADE, related_name='invalid_products')
@@ -26,9 +32,11 @@ class InvalidProduct(BaseModel):
work = models.ForeignKey( work = models.ForeignKey(
EstimateWork, on_delete=models.SET_NULL, null=True, blank=True, related_name='invalid_products' EstimateWork, on_delete=models.SET_NULL, null=True, blank=True, related_name='invalid_products'
) )
wherehouse = models.ForeignKey(WhereHouse, on_delete=models.CASCADE, related_name='invalid_products', null=True)
# required # required
amount = models.PositiveIntegerField() amount = models.PositiveIntegerField()
status = models.CharField(max_length=20, choices=STATUS, default='other') invalid_status = models.CharField(max_length=20, choices=INVALID_STATUS, default='other')
status = models.CharField(max_length=20, choices=STATUS, default='OPEN')
# optional # optional
created_date = models.DateField(null=True, blank=True) created_date = models.DateField(null=True, blank=True)
expiry_date = models.DateField(null=True, blank=True) expiry_date = models.DateField(null=True, blank=True)

View File

@@ -14,7 +14,7 @@ class InvalidProductCreateSerializer(serializers.Serializer):
witnesses_ids = serializers.ListField(child=serializers.UUIDField()) witnesses_ids = serializers.ListField(child=serializers.UUIDField())
work_id = serializers.UUIDField(required=False) work_id = serializers.UUIDField(required=False)
amount = serializers.IntegerField() amount = serializers.IntegerField()
status = serializers.ChoiceField(choices=InvalidProduct.STATUS) status = serializers.ChoiceField(choices=InvalidProduct.INVALID_STATUS)
created_date = serializers.DateField(required=False) created_date = serializers.DateField(required=False)
expiry_date = serializers.DateField(required=False) expiry_date = serializers.DateField(required=False)
comment = serializers.CharField(required=False) comment = serializers.CharField(required=False)
@@ -49,6 +49,7 @@ class InvalidProductCreateSerializer(serializers.Serializer):
expiry_date=validated_data.get('expiry_date'), expiry_date=validated_data.get('expiry_date'),
comment=validated_data.get('comment'), comment=validated_data.get('comment'),
file=validated_data.get('file'), file=validated_data.get('file'),
wherehouse=validated_data.get('inventory').wherehouse
) )
invalid_product.witnesses.set(witnesses_ids) invalid_product.witnesses.set(witnesses_ids)
invalid_product.inventory.is_invalid = True invalid_product.inventory.is_invalid = True
@@ -62,12 +63,13 @@ class InvliadProductListSerializer(serializers.ModelSerializer):
inventory = InventoryListSerializer() inventory = InventoryListSerializer()
project_folder = serializers.SerializerMethodField(method_name='get_folder') project_folder = serializers.SerializerMethodField(method_name='get_folder')
witnesses = UserListSerializer(many=True) witnesses = UserListSerializer(many=True)
wherehouse = serializers.SerializerMethodField(method_name='get_wherehouse')
class Meta: class Meta:
model = InvalidProduct model = InvalidProduct
fields = [ fields = [
'id', 'status', 'inventory', 'project_folder', 'witnesses', 'work', 'amount', 'id', 'status', 'invalid_status', 'inventory', 'project_folder', 'witnesses', 'work',
'created_date', 'expiry_date', 'comment', 'file' 'amount', 'created_date', 'expiry_date', 'comment', 'file', 'wherehouse'
] ]
def get_folder(self, obj): def get_folder(self, obj):
@@ -75,3 +77,9 @@ class InvliadProductListSerializer(serializers.ModelSerializer):
'id': obj.project_folder.id, 'id': obj.project_folder.id,
'name': obj.project_folder.name, 'name': obj.project_folder.name,
} }
def get_wherehouse(self, obj):
return {
'id': obj.wherehouse.id,
'name': obj.wherehouse.name
} if obj.wherehouse else None