from django.db import models from django.contrib.auth.models import User from projects.models import Project from finance.models import Category, Supplier from django.db.models import Sum class InventoryCategory(models.Model): name = models.CharField(max_length=255, unique=True, verbose_name="Name") class Meta: verbose_name = "Inventarkategorie" verbose_name_plural = "Inventarkategorien" ordering = ["name"] def __str__(self): return self.name class InventoryLocation(models.Model): name = models.CharField(max_length=255, unique=True, verbose_name="Name") class Meta: verbose_name = "Inventarstandort" verbose_name_plural = "Inventarstandorte" ordering = ["name"] def __str__(self): return self.name class InventoryItem(models.Model): name = models.CharField(max_length=255, verbose_name="Name") description = models.TextField(blank=True, verbose_name="Beschreibung") quantity = models.PositiveIntegerField(default=0, verbose_name="Anzahl") location = models.ForeignKey(InventoryLocation, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Standort") article_number = models.CharField(max_length=255, blank=True, verbose_name="Artikelnummer") responsible = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Verantwortlicher") category = models.ForeignKey(InventoryCategory, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Kategorie") created_at = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = "Inventarartikel" verbose_name_plural = "Inventarartikel" ordering = ["name"] def __str__(self): return self.name class ProjectInventoryItem(models.Model): class Status(models.TextChoices): OPEN = "open", "Offen" PACKED = "packed", "Eingepackt" ON_SITE = "on_site", "Vor Ort" project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name="inventory_items", verbose_name="Projekt") item = models.ForeignKey(InventoryItem, on_delete=models.CASCADE, verbose_name="Artikel") quantity = models.PositiveIntegerField(default=1, verbose_name="Anzahl") status = models.CharField(max_length=20, choices=Status.choices, default=Status.OPEN, verbose_name="Status") created_at = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = "Projektartikel" verbose_name_plural = "Projektartikel" unique_together = ("project", "item") def __str__(self): return f"{self.project} - {self.item}" class ShoppingItem(models.Model): project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name="shopping_items", verbose_name="Projekt") name = models.CharField(max_length=255, verbose_name="Name") description = models.TextField(blank=True, verbose_name="Beschreibung") quantity = models.PositiveIntegerField(default=1, verbose_name="Anzahl") supplier = models.ForeignKey(Supplier, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Lieferant") price = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name="Preis") category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="Kategorie") created_at = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = "Einkaufslistenartikel" verbose_name_plural = "Einkaufslistenartikel" ordering = ["name"] def __str__(self): return self.name