Create Warehouses
This commit is contained in:
parent
8290dda9cf
commit
5251a74855
@ -2,6 +2,16 @@ from django.db import models
|
|||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
||||||
|
class Warehouse(models.Model):
|
||||||
|
name = models.CharField(null=False, max_length=30, blank=False)
|
||||||
|
location = models.CharField(null=False, max_length=30, blank=False)
|
||||||
|
max_capacity = models.IntegerField(null=False, default=0, blank=False)
|
||||||
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="warehouses", null=False, blank=False)
|
||||||
|
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
class Product(models.Model):
|
class Product(models.Model):
|
||||||
name = models.CharField(null=False, max_length=30, blank=False)
|
name = models.CharField(null=False, max_length=30, blank=False)
|
||||||
description = models.CharField(default=None, null=True, blank=True, max_length=120)
|
description = models.CharField(default=None, null=True, blank=True, max_length=120)
|
||||||
@ -12,6 +22,7 @@ class Product(models.Model):
|
|||||||
stock_limit = models.IntegerField(null=True, blank=True)
|
stock_limit = models.IntegerField(null=True, blank=True)
|
||||||
alert_enabled = models.BooleanField(default=False)
|
alert_enabled = models.BooleanField(default=False)
|
||||||
image = models.CharField(null=True, blank=True)
|
image = models.CharField(null=True, blank=True)
|
||||||
|
warehouse = models.ManyToManyField(Warehouse, related_name="products")
|
||||||
@property
|
@property
|
||||||
def is_stock_low(self):
|
def is_stock_low(self):
|
||||||
return self.alert_enabled and self.stock_limit is not None and self.quantity < self.stock_limit
|
return self.alert_enabled and self.stock_limit is not None and self.quantity < self.stock_limit
|
||||||
|
@ -34,7 +34,10 @@ class UserSerializer(serializers.ModelSerializer):
|
|||||||
class ProductSerializer(serializers.ModelSerializer):
|
class ProductSerializer(serializers.ModelSerializer):
|
||||||
user = serializers.PrimaryKeyRelatedField(read_only=True)
|
user = serializers.PrimaryKeyRelatedField(read_only=True)
|
||||||
is_stock_low = serializers.SerializerMethodField()
|
is_stock_low = serializers.SerializerMethodField()
|
||||||
|
warehouse = serializers.PrimaryKeyRelatedField(
|
||||||
|
queryset=Warehouse.objects.all(),
|
||||||
|
many=True
|
||||||
|
)
|
||||||
def validate(self, data):
|
def validate(self, data):
|
||||||
if data.get('alert_enabled') and data.get('stock_limit') is None:
|
if data.get('alert_enabled') and data.get('stock_limit') is None:
|
||||||
raise serializers.ValidationError({
|
raise serializers.ValidationError({
|
||||||
@ -44,7 +47,12 @@ class ProductSerializer(serializers.ModelSerializer):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Product
|
model = Product
|
||||||
fields = ["id", "name", "description", "quantity", "creation_date", "modification_date", "user","stock_limit","alert_enabled","is_stock_low","image"]
|
fields = ["id", "name", "description", "quantity", "creation_date", "modification_date", "user","stock_limit","alert_enabled","is_stock_low","image","warehouse"]
|
||||||
|
|
||||||
|
def validate_warehouse(self, value):
|
||||||
|
if not value:
|
||||||
|
raise serializers.ValidationError("Un produit doit être associé à au moins un entrepôt.")
|
||||||
|
return value
|
||||||
|
|
||||||
def validate_quantity(self, value):
|
def validate_quantity(self, value):
|
||||||
if value < 0:
|
if value < 0:
|
||||||
@ -55,3 +63,15 @@ class ProductSerializer(serializers.ModelSerializer):
|
|||||||
if not isinstance(obj, Product):
|
if not isinstance(obj, Product):
|
||||||
return None
|
return None
|
||||||
return obj.is_stock_low
|
return obj.is_stock_low
|
||||||
|
|
||||||
|
class WarehouseSerializer(serializers.ModelSerializer):
|
||||||
|
user = serializers.PrimaryKeyRelatedField(read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Warehouse
|
||||||
|
fields = ["id", "name", "location", "max_capacity","user"]
|
||||||
|
|
||||||
|
def validate_max_capacity(self, value):
|
||||||
|
if value < 0:
|
||||||
|
raise serializers.ValidationError("La capacité maximale ne peut pas être négative.")
|
||||||
|
return value
|
@ -4,12 +4,13 @@ from rest_framework import routers
|
|||||||
from .views import *
|
from .views import *
|
||||||
from . import views
|
from . import views
|
||||||
from rest_framework_simplejwt.views import *
|
from rest_framework_simplejwt.views import *
|
||||||
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
|
from drf_spectacular.views import SpectacularAPIView
|
||||||
|
|
||||||
##juge pas les noms d'acces OK ?##
|
##juge pas les noms d'acces OK ?##
|
||||||
|
|
||||||
router = routers.DefaultRouter()
|
router = routers.DefaultRouter()
|
||||||
router.register(r'products', ProductView, basename='product')
|
router.register(r'products', ProductView, basename='product')
|
||||||
|
router.register(r'warehouses', WarehouseView, basename='warehouse')
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('api/', include(router.urls)),
|
path('api/', include(router.urls)),
|
||||||
|
@ -53,3 +53,15 @@ class ProductView(viewsets.ModelViewSet):
|
|||||||
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)
|
||||||
|
|
||||||
|
class WarehouseView(viewsets.ModelViewSet):
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
throttle_classes = [UserRateThrottle]
|
||||||
|
serializer_class = WarehouseSerializer
|
||||||
|
queryset = Warehouse.objects.all()
|
||||||
|
|
||||||
|
def perform_create(self, serializer):
|
||||||
|
serializer.save(user=self.request.user)
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return Warehouse.objects.filter(user_id=self.request.user)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user