mirror of
https://github.com/inventree/InvenTree.git
synced 2025-08-07 20:32:12 +00:00
Implement StatusCodeMixin for setting status code values
This commit is contained in:
@@ -78,6 +78,57 @@ class DiffMixin:
|
|||||||
return field_name in self.get_field_deltas()
|
return field_name in self.get_field_deltas()
|
||||||
|
|
||||||
|
|
||||||
|
class StatusCodeMixin:
|
||||||
|
"""Mixin class which handles custom 'status' fields.
|
||||||
|
|
||||||
|
- Implements a 'set_stutus' method which can be used to set the status of an object
|
||||||
|
- Implements a 'get_status' method which can be used to retrieve the status of an object
|
||||||
|
|
||||||
|
This mixin assumes that the implementing class has a 'status' field,
|
||||||
|
which must be an instance of the InvenTreeCustomStatusModelField class.
|
||||||
|
"""
|
||||||
|
|
||||||
|
STATUS_CLASS = None
|
||||||
|
STATUS_FIELD = 'status'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def status_class(self):
|
||||||
|
"""Return the status class associated with this model."""
|
||||||
|
return self.STATUS_CLASS
|
||||||
|
|
||||||
|
def get_status(self) -> int:
|
||||||
|
"""Return the status code for this object."""
|
||||||
|
return self.status
|
||||||
|
|
||||||
|
def set_status(self, status: int) -> bool:
|
||||||
|
"""Set the status code for this object."""
|
||||||
|
if not self.status_class:
|
||||||
|
raise NotImplementedError('Status class not defined')
|
||||||
|
|
||||||
|
base_values = self.status_class.values()
|
||||||
|
custom_value_set = self.status_class.custom_values()
|
||||||
|
|
||||||
|
custom_field = f'{self.STATUS_FIELD}_custom_key'
|
||||||
|
|
||||||
|
result = False
|
||||||
|
|
||||||
|
if status in base_values:
|
||||||
|
# Set the status to a 'base' value
|
||||||
|
setattr(self, self.STATUS_FIELD, status)
|
||||||
|
setattr(self, custom_field, None)
|
||||||
|
result = True
|
||||||
|
else:
|
||||||
|
for item in custom_value_set:
|
||||||
|
if item.key == status:
|
||||||
|
# Set the status to a 'custom' value
|
||||||
|
setattr(self, self.STATUS_FIELD, item.logical_key)
|
||||||
|
setattr(self, custom_field, item.key)
|
||||||
|
result = True
|
||||||
|
break
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
class PluginValidationMixin(DiffMixin):
|
class PluginValidationMixin(DiffMixin):
|
||||||
"""Mixin class which exposes the model instance to plugin validation.
|
"""Mixin class which exposes the model instance to plugin validation.
|
||||||
|
|
||||||
@@ -508,6 +559,13 @@ class InvenTreeModel(PluginValidationMixin, models.Model):
|
|||||||
|
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
"""Custom save method for InvenTreeModel.
|
||||||
|
|
||||||
|
- Ensure custom status code values are correctly updated
|
||||||
|
"""
|
||||||
|
super().save()
|
||||||
|
|
||||||
|
|
||||||
class InvenTreeMetadataModel(MetadataMixin, InvenTreeModel):
|
class InvenTreeMetadataModel(MetadataMixin, InvenTreeModel):
|
||||||
"""Base class for an InvenTree model which includes a metadata field."""
|
"""Base class for an InvenTree model which includes a metadata field."""
|
||||||
|
@@ -55,6 +55,7 @@ class Build(
|
|||||||
InvenTree.models.InvenTreeAttachmentMixin,
|
InvenTree.models.InvenTreeAttachmentMixin,
|
||||||
InvenTree.models.InvenTreeBarcodeMixin,
|
InvenTree.models.InvenTreeBarcodeMixin,
|
||||||
InvenTree.models.InvenTreeNotesMixin,
|
InvenTree.models.InvenTreeNotesMixin,
|
||||||
|
InvenTree.models.StatusCodeMixin,
|
||||||
InvenTree.models.MetadataMixin,
|
InvenTree.models.MetadataMixin,
|
||||||
InvenTree.models.PluginValidationMixin,
|
InvenTree.models.PluginValidationMixin,
|
||||||
InvenTree.models.ReferenceIndexingMixin,
|
InvenTree.models.ReferenceIndexingMixin,
|
||||||
@@ -84,6 +85,8 @@ class Build(
|
|||||||
priority: Priority of the build
|
priority: Priority of the build
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
STATUS_CLASS = BuildStatus
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Metaclass options for the BuildOrder model."""
|
"""Metaclass options for the BuildOrder model."""
|
||||||
|
|
||||||
|
@@ -183,6 +183,7 @@ class Order(
|
|||||||
InvenTree.models.InvenTreeAttachmentMixin,
|
InvenTree.models.InvenTreeAttachmentMixin,
|
||||||
InvenTree.models.InvenTreeBarcodeMixin,
|
InvenTree.models.InvenTreeBarcodeMixin,
|
||||||
InvenTree.models.InvenTreeNotesMixin,
|
InvenTree.models.InvenTreeNotesMixin,
|
||||||
|
InvenTree.models.StatusCodeMixin,
|
||||||
report.mixins.InvenTreeReportMixin,
|
report.mixins.InvenTreeReportMixin,
|
||||||
InvenTree.models.MetadataMixin,
|
InvenTree.models.MetadataMixin,
|
||||||
InvenTree.models.ReferenceIndexingMixin,
|
InvenTree.models.ReferenceIndexingMixin,
|
||||||
@@ -379,6 +380,7 @@ class PurchaseOrder(TotalPriceMixin, Order):
|
|||||||
|
|
||||||
REFERENCE_PATTERN_SETTING = 'PURCHASEORDER_REFERENCE_PATTERN'
|
REFERENCE_PATTERN_SETTING = 'PURCHASEORDER_REFERENCE_PATTERN'
|
||||||
REQUIRE_RESPONSIBLE_SETTING = 'PURCHASEORDER_REQUIRE_RESPONSIBLE'
|
REQUIRE_RESPONSIBLE_SETTING = 'PURCHASEORDER_REQUIRE_RESPONSIBLE'
|
||||||
|
STATUS_CLASS = PurchaseOrderStatus
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Model meta options."""
|
"""Model meta options."""
|
||||||
@@ -913,6 +915,7 @@ class SalesOrder(TotalPriceMixin, Order):
|
|||||||
|
|
||||||
REFERENCE_PATTERN_SETTING = 'SALESORDER_REFERENCE_PATTERN'
|
REFERENCE_PATTERN_SETTING = 'SALESORDER_REFERENCE_PATTERN'
|
||||||
REQUIRE_RESPONSIBLE_SETTING = 'SALESORDER_REQUIRE_RESPONSIBLE'
|
REQUIRE_RESPONSIBLE_SETTING = 'SALESORDER_REQUIRE_RESPONSIBLE'
|
||||||
|
STATUS_CLASS = SalesOrderStatus
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Model meta options."""
|
"""Model meta options."""
|
||||||
@@ -2157,6 +2160,7 @@ class ReturnOrder(TotalPriceMixin, Order):
|
|||||||
|
|
||||||
REFERENCE_PATTERN_SETTING = 'RETURNORDER_REFERENCE_PATTERN'
|
REFERENCE_PATTERN_SETTING = 'RETURNORDER_REFERENCE_PATTERN'
|
||||||
REQUIRE_RESPONSIBLE_SETTING = 'RETURNORDER_REQUIRE_RESPONSIBLE'
|
REQUIRE_RESPONSIBLE_SETTING = 'RETURNORDER_REQUIRE_RESPONSIBLE'
|
||||||
|
STATUS_CLASS = ReturnOrderStatus
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Model meta options."""
|
"""Model meta options."""
|
||||||
@@ -2449,9 +2453,11 @@ class ReturnOrder(TotalPriceMixin, Order):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ReturnOrderLineItem(OrderLineItem):
|
class ReturnOrderLineItem(InvenTree.models.StatusCodeMixin, OrderLineItem):
|
||||||
"""Model for a single LineItem in a ReturnOrder."""
|
"""Model for a single LineItem in a ReturnOrder."""
|
||||||
|
|
||||||
|
STATUS_CLASS = ReturnOrderLineStatus
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Metaclass options for this model."""
|
"""Metaclass options for this model."""
|
||||||
|
|
||||||
|
@@ -340,6 +340,7 @@ class StockItem(
|
|||||||
InvenTree.models.InvenTreeAttachmentMixin,
|
InvenTree.models.InvenTreeAttachmentMixin,
|
||||||
InvenTree.models.InvenTreeBarcodeMixin,
|
InvenTree.models.InvenTreeBarcodeMixin,
|
||||||
InvenTree.models.InvenTreeNotesMixin,
|
InvenTree.models.InvenTreeNotesMixin,
|
||||||
|
InvenTree.models.StatusCodeMixin,
|
||||||
report.mixins.InvenTreeReportMixin,
|
report.mixins.InvenTreeReportMixin,
|
||||||
InvenTree.models.MetadataMixin,
|
InvenTree.models.MetadataMixin,
|
||||||
InvenTree.models.PluginValidationMixin,
|
InvenTree.models.PluginValidationMixin,
|
||||||
@@ -373,6 +374,8 @@ class StockItem(
|
|||||||
packaging: Description of how the StockItem is packaged (e.g. "reel", "loose", "tape" etc)
|
packaging: Description of how the StockItem is packaged (e.g. "reel", "loose", "tape" etc)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
STATUS_CLASS = StockStatus
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Model meta options."""
|
"""Model meta options."""
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user