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_beforeundquantity_after - Aktualisiert
item.quantity - Berechnet
total_amountaus|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¶
- Datenbankmodelle - Warehouse
- Benutzerhandbuch - Lager
- Home-App-Referenz - Niedriger-Bestand-Warnungen auf dem Dashboard