Zum Inhalt

Warehouse-App-Referenz

Die Warehouse-App verwaltet Bestandsverfolgung, Lagertransaktionen, Produktverkäufe und Lagerorte für Imkereibetriebe.

Übersicht

Speicherort: app/warehouse/

Zweck: Bestandsverwaltung, Transaktionsverfolgung, Produktverkäufe

Wichtige Modelle: InventoryItem, InventoryTransaction, ProductSale, ProductSaleItem, WarehouseLocation


Dateistruktur

warehouse/
├── models.py              # 5 Modelle
├── views/                 # Views-Paket (4 Module)
│   ├── __init__.py
│   ├── inventory_views.py # 5 Views
│   ├── transaction_views.py # 5 Views
│   ├── sale_views.py      # 3 Views
│   └── location_views.py  # 5 Views
├── forms.py               # 5 Model-Formulare + 3 Filter-Formulare
├── urls.py                # 18 URL-Patterns
├── admin.py               # Django-Admin-Konfiguration (5 Admin-Klassen)
├── templatetags/
│   └── warehouse_tags.py  # can_edit, can_delete Filter
├── tests/
│   ├── test_models.py
│   ├── test_sales.py
│   └── test_transactions.py
└── templates/warehouse/   # 15 HTML-Templates

Modelle

Siehe Datenbankmodelle - Warehouse-App für vollständige Feldreferenz.

InventoryItem

Geräte, Produkte und Materialien mit Mengenverfolgung.

Kategorien: equipment, product, supply (statische Auswahlen, nicht über SystemConfig konfigurierbar)

System-Artikeltypen: none, bucket, jar, feeding_material (TextChoices-Enum für zuverlässige App-übergreifende Identifikation)

Wichtige Felder: name, category, item_type (ConfigurableChoice), system_item_type, quantity, unit (ConfigurableChoice), min_quantity, warehouse_location, unit_cost, total_value (automatisch berechnet), description

Property: is_low_stock -- True wenn quantity < min_quantity (strikt kleiner als)

Validierung: can_be_deleted() prüft auf ProductSaleItem-Referenzen vor dem Löschen. Die delete()-Methode löst einen ValidationError aus, wenn der Artikel in Verkäufen referenziert wird.

InventoryTransaction

Vollständiger Audit-Trail aller Bestandsbewegungen.

Transaktionstypen: Konfigurierbar über SystemConfig (Kategorie: transaction_type)

Auto-Berechnungen beim Speichern:

  • Erfasst quantity_before und quantity_after
  • Aktualisiert item.quantity
  • Berechnet total_amount aus |quantity_change| * unit_price
  • Verarbeitet Standorttransfers (verschiebt item.warehouse_location zu to_location bei Typ 'transfer')

Verknüpft mit: hive, sale_item, feeding, from_location, to_location

Automatisch erstellt durch: ProductSaleItem.save() erstellt 'sale'-Transaktionen, HiveFeeding-Signale erstellen 'usage'-Transaktionen, HoneyBatchService erstellt 'usage'-Transaktionen für Eimer.

ProductSale

Verkaufsdatensätze mit Kundeninfo, Zahlungsmethode (konfigurierbar über SystemConfig) und Zahlungsstatus.

ProductSaleItem

Einzelne Positionen in Verkäufen. Bei Erstellung wird automatisch eine InventoryTransaction zur Bestandsreduzierung mit Rückverweis auf die Verkaufsposition erstellt. Der inventory_item-FK verwendet PROTECT, um das Löschen verkaufter Artikel zu verhindern.

WarehouseLocation

Benannte Lagerorte pro Organisation. Unique-Constraint auf (organization, name). Enthält is_active-Flag zur Deaktivierung. Die can_be_deleted()-Methode prüft sowohl auf am Standort gelagerte Artikel als auch auf Transaktionsreferenzen vor dem Löschen.


Views

Verwendet gemeinsame Mixins von home.mixins: ViewPermissionMixin, EditPermissionMixin, DeletePermissionMixin, SortableListMixin.

Bestandsverwaltung

View Zweck
InventoryListView Liste mit Org-/Kategorie-/Standort-/Bestandsstatus-/Namenssuche-/Artikeltyp-/System-Artikeltyp-Filtern, paginiert 50
InventoryDetailView Artikeldetails
InventoryCreateView Artikel erstellen, created_by zuweisen, Organisation an Formular übergeben
InventoryUpdateView Artikel bearbeiten (Menge aus Aktualisierungsformular ausgeschlossen)
InventoryDeleteView Löschen mit Referenzvalidierung

Transaktionsverwaltung

View Zweck
TransactionListView Liste mit Org-/Typ-/Artikel-/Artikeltyp-/Artikelkategorie-/Datumsbereich-Filtern, paginiert 50
TransactionCreateView Bewegung erfassen, Artikelmenge aktualisieren, Artikel und Standorte nach Organisation filtern
TransactionDetailView Transaktionsdetails
TransactionUpdateView Aktualisieren, Mengendelta zwischen alten und neuen Werten neu berechnen
TransactionDeleteView Löschen, Mengenänderungen am Inventarartikel rückgängig machen

Verkaufsverwaltung

View Zweck
SaleListView Liste mit Org-/Zahlungsmethode-/Bezahltstatus-/Datumsbereich-Filtern, paginiert 20
SaleDetailView Verkaufsdetails mit Positionen
SaleCreateView Verkauf erstellen, recorded_by zuweisen

Lagerorte

View Zweck
WarehouseLocationListView Aktive Standorte mit Artikelmengen-Annotationen auflisten, paginiert 50
WarehouseLocationDetailView Standortdetails mit an diesem Standort gelagerten Artikeln
WarehouseLocationCreateView Standort erstellen, created_by zuweisen
WarehouseLocationUpdateView Standort aktualisieren (Name, Beschreibung, Aktivstatus)
WarehouseLocationDeleteView Löschen mit Referenzvalidierung (Artikel und Transaktionen)

Formulare

Model-Formulare

Formular Zweck
InventoryItemForm Artikel erstellen mit konfigurierbaren Dropdown-Feldern für item_type, unit und warehouse_location
InventoryItemUpdateForm Artikel aktualisieren (schließt Menge aus, um transaktionsbasierte Änderungen zu erzwingen)
InventoryTransactionForm Transaktion erstellen mit konfigurierbarem transaction_type-Dropdown
InventoryTransactionUpdateForm Transaktion aktualisieren (schließt Artikelfeld aus)
ProductSaleForm Verkauf erstellen mit konfigurierbarem payment_method-Dropdown

Alle Model-Formulare akzeptieren ein organization-Schlüsselwortargument zum Filtern von ConfigurableChoice-Dropdowns und Lagerort-Optionen.

Filter-Formulare

InventoryListFilterForm

Filter: organization, category, warehouse_location, stock_status (ok/low), name_search, item_type, system_item_type

TransactionListFilterForm (erweitert DateRangeFilterMixin)

Filter: organization, transaction_type, item, item_type, item_category, start_date, end_date

SaleListFilterForm (erweitert DateRangeFilterMixin)

Filter: organization, payment_method, is_paid (paid/unpaid), start_date, end_date


URL-Patterns

warehouse/                              → InventoryListView
warehouse/<int:pk>/                     → InventoryDetailView
warehouse/new/                          → InventoryCreateView
warehouse/<int:pk>/edit/                → InventoryUpdateView
warehouse/<int:pk>/delete/              → InventoryDeleteView
warehouse/transactions/                 → TransactionListView
warehouse/transaction/new/              → TransactionCreateView
warehouse/transaction/<int:pk>/         → TransactionDetailView
warehouse/transaction/<int:pk>/edit/    → TransactionUpdateView
warehouse/transaction/<int:pk>/delete/  → TransactionDeleteView
warehouse/sales/                        → SaleListView
warehouse/sale/<int:pk>/                → SaleDetailView
warehouse/sale/new/                     → SaleCreateView
warehouse/locations/                    → WarehouseLocationListView
warehouse/location/new/                 → WarehouseLocationCreateView
warehouse/location/<int:pk>/            → WarehouseLocationDetailView
warehouse/location/<int:pk>/edit/       → WarehouseLocationUpdateView
warehouse/location/<int:pk>/delete/     → WarehouseLocationDeleteView

Template-Tags

Speicherort: app/warehouse/templatetags/warehouse_tags.py

Filter Verwendung
can_edit {% if item\|can_edit:user %}
can_delete {% if item\|can_delete:user %}

Diese Filter delegieren an organizations.utils.user_can_edit und organizations.utils.user_can_delete.


Admin-Konfiguration

Admin-Klasse Wichtige Funktionen
InventoryItemAdmin Inline-Transaktionen, Fieldsets (Grundinformationen/Inventar/Kosten), Menge bei Bearbeitung schreibgeschützt
InventoryTransactionAdmin Datumshierarchie auf transaction_date, schreibgeschützte berechnete Felder
ProductSaleAdmin Inline-Verkaufspositionen, Fieldsets (Verkaufsdetails/Zahlung/Notizen), Datumshierarchie
ProductSaleItemAdmin Grundlegende Listenansicht mit Verkauf, Artikel, Menge, Preis, Zwischensumme
WarehouseLocationAdmin Fieldsets (Grundinformationen/Status/Zeitstempel), einklappbare Zeitstempel

Signale

Die Warehouse-App hat keine Signal-Handler. Alle Bestandsaktualisierungen werden über Model-Save-Hooks und View-Logik behandelt.


Siehe auch