Modified quantity logic
This commit is contained in:
parent
d27ba0021a
commit
938f1d6335
@ -1,7 +1,7 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from .models import *
|
from .models import *
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
from django.db.models import F
|
||||||
|
|
||||||
class UserSerializer(serializers.ModelSerializer):
|
class UserSerializer(serializers.ModelSerializer):
|
||||||
password = serializers.CharField(write_only=True)
|
password = serializers.CharField(write_only=True)
|
||||||
@ -50,38 +50,38 @@ class ProductSerializer(serializers.ModelSerializer):
|
|||||||
model = Product
|
model = Product
|
||||||
fields = ["id", "name", "description", "quantity", "creation_date", "modification_date", "user","stock_limit","alert_enabled","is_stock_low","image","warehouses",]
|
fields = ["id", "name", "description", "quantity", "creation_date", "modification_date", "user","stock_limit","alert_enabled","is_stock_low","image","warehouses",]
|
||||||
|
|
||||||
|
#GERER les nombres négatifs impossible #
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
warehouses = validated_data.pop('warehouses', [])
|
warehouses = validated_data.pop('warehouses', [])
|
||||||
product = Product.objects.create(**validated_data)
|
product = Product.objects.create(**validated_data)
|
||||||
product.warehouses.set(warehouses)
|
product.warehouses.set(warehouses)
|
||||||
|
|
||||||
for warehouse in product.warehouses.all():
|
for warehouse in product.warehouses.all():
|
||||||
print(f'capacité actuelle {warehouse.actual_capacity}, - {product.quantity}')
|
warehouse.actual_capacity = F('actual_capacity') - product.quantity
|
||||||
warehouse.actual_capacity -= product.quantity
|
warehouse.save(update_fields=['actual_capacity'])
|
||||||
warehouse.save()
|
|
||||||
return product
|
return product
|
||||||
|
|
||||||
def update(self,instance, validated_data):
|
def update(self,instance, validated_data):
|
||||||
product = Product.objects.get(id=instance.id)
|
|
||||||
instance.name = validated_data.get("name", instance.name)
|
instance.name = validated_data.get("name", instance.name)
|
||||||
instance.description = validated_data.get("description", instance.description)
|
instance.description = validated_data.get("description", instance.description)
|
||||||
instance.quantity = validated_data.get("quantity", instance.quantity)
|
new_quantity = validated_data.get("quantity", instance.quantity)
|
||||||
instance.save()
|
|
||||||
|
|
||||||
for warehouse in product.warehouses.all():
|
quantity_difference = new_quantity - instance.quantity
|
||||||
warehouse.actual_capacity = warehouse.max_capacity
|
instance.quantity = new_quantity
|
||||||
warehouse.actual_capacity -= instance.quantity
|
instance.save()
|
||||||
warehouse.save()
|
instance.refresh_from_db()
|
||||||
|
|
||||||
|
for warehouse in instance.warehouses.all():
|
||||||
|
warehouse.actual_capacity = F('actual_capacity') - quantity_difference
|
||||||
|
warehouse.save(update_fields=['actual_capacity'])
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
def destroy(self, instance):
|
def destroy(self, instance):
|
||||||
product = Product.objects.get(id=instance.id)
|
for warehouse in instance.warehouses.all():
|
||||||
|
warehouse.actual_capacity = F('actual_capacity') + instance.quantity
|
||||||
for warehouse in product.warehouses.all():
|
warehouse.save(update_fields=['actual_capacity'])
|
||||||
warehouse.actual_capacity += instance.quantity
|
|
||||||
warehouse.save()
|
|
||||||
instance.delete()
|
instance.delete()
|
||||||
return instance
|
|
||||||
|
|
||||||
def validate_warehouses(self, value):
|
def validate_warehouses(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
@ -96,13 +96,30 @@ class ProductSerializer(serializers.ModelSerializer):
|
|||||||
def get_is_stock_low(self, obj):
|
def get_is_stock_low(self, obj):
|
||||||
return obj.alert_enabled and obj.stock_limit is not None and obj.quantity < obj.stock_limit
|
return obj.alert_enabled and obj.stock_limit is not None and obj.quantity < obj.stock_limit
|
||||||
|
|
||||||
|
|
||||||
class WarehouseSerializer(serializers.ModelSerializer):
|
class WarehouseSerializer(serializers.ModelSerializer):
|
||||||
user = serializers.PrimaryKeyRelatedField(read_only=True)
|
user = serializers.PrimaryKeyRelatedField(read_only=True)
|
||||||
|
|
||||||
|
def update(self, instance, validated_data):
|
||||||
|
old_max_capacity = instance.max_capacity
|
||||||
|
instance.name = validated_data.get("name", instance.name)
|
||||||
|
instance.location = validated_data.get("location", instance.location)
|
||||||
|
new_max_capacity = validated_data.get("max_capacity", instance.max_capacity)
|
||||||
|
capacity_difference = new_max_capacity - old_max_capacity
|
||||||
|
|
||||||
|
instance.actual_capacity = F('actual_capacity') + capacity_difference
|
||||||
|
instance.max_capacity = new_max_capacity
|
||||||
|
|
||||||
|
instance.save()
|
||||||
|
instance.refresh_from_db()
|
||||||
|
|
||||||
|
return instance
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Warehouse
|
model = Warehouse
|
||||||
fields = ["id", "name", "location", "max_capacity","user","actual_capacity"]
|
fields = ["id", "name", "location", "max_capacity","user","actual_capacity"]
|
||||||
|
|
||||||
|
|
||||||
def validate_max_capacity(self, value):
|
def validate_max_capacity(self, value):
|
||||||
if value < 0:
|
if value < 0:
|
||||||
raise serializers.ValidationError("La capacité maximale ne peut pas être négative.")
|
raise serializers.ValidationError("La capacité maximale ne peut pas être négative.")
|
||||||
|
@ -53,6 +53,10 @@ class ProductView(viewsets.ModelViewSet):
|
|||||||
def perform_update(self, serializer):
|
def perform_update(self, serializer):
|
||||||
serializer.save(user=self.request.user)
|
serializer.save(user=self.request.user)
|
||||||
|
|
||||||
|
def perform_destroy(self, instance):
|
||||||
|
serializer = self.get_serializer(instance)
|
||||||
|
serializer.destroy(instance)
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return Product.objects.filter(user_id=self.request.user)
|
return Product.objects.filter(user_id=self.request.user)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user