Files @ bbb76c500fa5
Branch filter:

Location: rattail-project/rattail/docs/narr/batches.rst

bbb76c500fa5 1.8 KiB text/prs.fallenstein.rst Show Annotation Show as Raw Download as Raw
lance
Add support for extra header rows, for Excel reader

data doesn't always start right after main header row

.. _batches:

Data Batches
============

This document briefly outlines what comprises a batch in terms of the Rattail
database etc.


Data Model
----------

First and foremost is the data model, as each type of batch requires two tables
in which to store its data.  So two model classes must be defined, one for the
batch itself and another for its row data.  These model classes must inherit
from one of the following:

Batch proper, i.e. batch header:

* :class:`rattail.db.batch.model.BatchMixin`
* :class:`rattail.db.batch.model.FileBatchMixin`

Batch data rows:

* :class:`rattail.db.batch.model.BatchRowMixin`
* :class:`rattail.db.batch.model.ProductBatchRowMixin`

Note that all parent classes will add certain columns to your tables, though
which ones will vary by parent.  Any columns you define will be in addition to
those provided by the parent, although (I think?) specifying a duplicate name
would effectively overwrite a column.

For some implementation examples, you can see the vendor catalog batch:

* :class:`rattail.db.batch.vendorcatalog.model.VendorCatalog`
* :class:`rattail.db.batch.vendorcatalog.model.VendorCatalogRow`


Handler
-------

In addition to the data models, each batch type must be supported by a(t least
one) handler, which is where the logic lives for populating the batch and
executing it.  The handler class should inherit from the following:

* :class:`rattail.db.batch.handler.BatchHandler`

And here's the vendor catalog example:

* :class:`rattail.db.batch.vendorcatalog.handler.VendorCatalogHandler`


Using the Batch
---------------

Actually interacting with the batch(es) as a user implies something outside of
the scope of core Rattail.  However the Tailbone package provides some tools to
make adding support for a new batch relatively painless.  See the docs in that
package for more information.