Batch Models¶
Each batch type will involve 2 tables in the app database. Each table is mapped to a data model as shown below.
Note that the model should only describe the data structure; all logic belongs in the batch handler.
Batch (header)¶
The model class for the batch header should inherit from
BatchMixin, which gives it the
base set of columns for identifying the batch creator/executor etc.
Declaring the
batch_type is
optional; if not specified the table name is used. Remember the batch
type is used for batch handler lookup (among other things).
Additional columns may be added as needed, per the nature of the batch type:
import sqlalchemy as sa
from wuttjamaican.db import model
class InventoryBatch(model.BatchMixin, model.Base):
""" Simple batch for counting inventory. """
# name of table within the app DB
__tablename__ = "poser_batch_inventory"
# unique identifier for this batch type
batch_type = "inventory"
device = sa.Column(sa.String(length=255), nullable=True, doc="""
Name of the scanning device used when counting.
""")
Batch Row¶
The model class for batch rows should inherit from
BatchRowMixin, which gives it
the base set of columns for tracking status etc.
Note that it also must declare the
__batch_class__ for
things to work correctly.
Additional columns may be added as needed, per the nature of the batch type:
class InventoryBatchRow(model.BatchRowMixin, model.Base):
""" Item entry row for inventory counting. """
# name of table within the app DB
__tablename__ = "poser_batch_inventory_row"
# direct reference to batch model class
__batch_class__ = InventoryBatch
scancode = sa.Column(sa.String(length=14), nullable=False, doc="""
Scanned UPC of the item.
""")
quantity = sa.Column(sa.Numeric(precision=6, scale=2), nullable=False, default=0, doc="""
Quantity of the item.
""")