wherehouse: add sender field to stock movemend model
This commit is contained in:
@@ -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"),
|
||||
|
||||
21
core/apps/wherehouse/migrations/0019_stockmovemend_sender.py
Normal file
21
core/apps/wherehouse/migrations/0019_stockmovemend_sender.py
Normal 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),
|
||||
),
|
||||
]
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user