wherehouse: add sender field to stock movemend model

This commit is contained in:
behruz-dev
2025-10-31 21:49:47 +05:00
parent f49a446c71
commit 0c2d73f892
5 changed files with 51 additions and 4 deletions

View File

@@ -47,12 +47,14 @@ class Command(BaseCommand):
user = None
if item.get('recieved_user'):
user = User.objects.filter(full_name=item['recieved_user']['full_name']).first()
sender_user = User.objects.filter(full_name=item['sender_user']['full_name']).first()
stock_movemend, created = StockMovemend.objects.get_or_create(
number=item['id'],
defaults={
"wherehouse_to": recieved_warehouse,
"wherehouse_from": sender_warehouse,
"recipient": user,
"sender": sender_user,
"project_folder": project_folder,
"movemend_type": movemend_types.get(item['status']),
"date": datetime.strptime(item['date'], "%d.%m.%Y"),

View File

@@ -0,0 +1,21 @@
# Generated by Django 5.2.4 on 2025-10-31 21:35
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wherehouse', '0018_alter_invalidproduct_project_folder'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='stockmovemend',
name='sender',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stock_sender', to=settings.AUTH_USER_MODEL),
),
]

View File

@@ -27,6 +27,9 @@ class StockMovemend(BaseModel):
recipient = models.ForeignKey(
User, on_delete=models.SET_NULL, related_name='stock_movmends', null=True, blank=True
)
sender = models.ForeignKey(
User, on_delete=models.SET_NULL, related_name='stock_sender', null=True, blank=True
)
project_folder = models.ForeignKey(
ProjectFolder, on_delete=models.SET_NULL, related_name='stock_movmends', null=True, blank=True
)

View File

@@ -9,6 +9,7 @@ from core.apps.wherehouse.models import (
StockMovmendProduct,
WhereHouse,
)
from core.apps.accounts.models import User
class StockMovmendProductSerializer(serializers.Serializer):
@@ -31,6 +32,7 @@ class StockMovmendCreateSerializer(serializers.Serializer):
wherehouse_from_id = serializers.UUIDField()
date = serializers.DateField(required=False)
comment = serializers.CharField(required=False)
recipient_id = serializers.UUIDField(required=False)
def validate(self, data):
if data.get("project_folder_id"):
@@ -53,6 +55,11 @@ class StockMovmendCreateSerializer(serializers.Serializer):
).first()
if not wherehouse_from:
raise serializers.ValidationError("WhereHouse from not found")
if data.get('recipient'):
recipient = User.objects.filter(id=data.get('recipient_id')).first()
if not recipient:
raise serializers.ValidationError("Recipient not found")
data['recipient'] = recipient
data["wherehouse_to"] = wherehouse_to
data["wherehouse_from"] = wherehouse_from
return data
@@ -67,7 +74,8 @@ class StockMovmendCreateSerializer(serializers.Serializer):
comment=validated_data.get("comment"),
wherehouse_to=validated_data.get("wherehouse_to"),
wherehouse_from=validated_data.get("wherehouse_from"),
recipient=self.context.get("user"),
sender=self.context.get("user"),
recipient=validated_data.get('recipient'),
)
movmend_products = []
for product in products:
@@ -97,7 +105,7 @@ class StockMovemendProductListSerializer(serializers.ModelSerializer):
"type": obj.inventory.product.type,
"name": obj.inventory.product.name,
}
if obj.inventory.product
if obj.inventory and obj.inventory.product
else None
)
@@ -107,7 +115,7 @@ class StockMovemendProductListSerializer(serializers.ModelSerializer):
"id": obj.inventory.unity.id,
"value": obj.inventory.unity.value,
}
if obj.inventory.unity
if obj.inventory and obj.inventory.unity
else None
)
@@ -119,6 +127,7 @@ class StockMovemendListSerializer(serializers.ModelSerializer):
method_name="get_wherehouse_from"
)
recipient = serializers.SerializerMethodField(method_name="get_recipient")
sender = serializers.SerializerMethodField(method_name="get_sender")
project_folder = serializers.SerializerMethodField(method_name="get_project_folder")
project = serializers.SerializerMethodField(method_name="get_project")
@@ -130,6 +139,7 @@ class StockMovemendListSerializer(serializers.ModelSerializer):
"wherehouse_to",
"wherehouse_from",
"recipient",
"sender",
"project_folder",
"project",
"movemend_type",
@@ -168,6 +178,17 @@ class StockMovemendListSerializer(serializers.ModelSerializer):
else None
)
def get_sender(self, obj):
return (
{
"id": obj.sender.id,
"full_name": obj.sender.full_name,
}
if obj.sender
else None
)
def get_project_folder(self, obj):
return (
{"id": obj.project_folder.id, "name": obj.project_folder.name}

View File

@@ -35,7 +35,7 @@ class StockMovemendCreateApiView(generics.GenericAPIView):
class StockMovemendListApiView(generics.GenericAPIView):
serializer_class = serializers.StockMovemendListSerializer
queryset = StockMovemend.objects.select_related(
'wherehouse_to', 'wherehouse_from', 'recipient', 'project_folder', 'project'
'wherehouse_to', 'wherehouse_from', 'recipient', 'project_folder', 'project', 'sender'
).prefetch_related('movemend_products')
permission_classes = [HasRolePermission]
filter_backends = [DjangoFilterBackend, filters.SearchFilter]