76 lines
2.9 KiB
ReStructuredText
76 lines
2.9 KiB
ReStructuredText
|
|
=====================
|
|
Adding a Custom Batch
|
|
=====================
|
|
|
|
If none of the native batch types fit your needs, you can always add a
|
|
new one. See :doc:`native/index` for the list of what's available.
|
|
|
|
Adding a new batch type involves 3 steps:
|
|
|
|
* add the batch table schema
|
|
* add the batch handler
|
|
* add web views for user interaction
|
|
|
|
For sake of example here, we'll define a "Please Come Back" batch. The purpose
|
|
of this batch is to identify members who've not shopped in the store within the
|
|
last 6 months, and generate custom coupons for each, to encourage them to come
|
|
back.
|
|
|
|
Adding the batch table schema is not much different than adding any other table
|
|
to the DB; see also :doc:`/data/db/extend`. Note that you should always prefix
|
|
table names with something unique to your app, and generally speaking the word
|
|
"batch" should go in there somewhere too. For instance we might call them:
|
|
|
|
* ``poser_batch_plzcomeback``
|
|
* ``poser_batch_plzcomeback_row``
|
|
|
|
To add the batch tables, create a new Python module. This would go in
|
|
``~/src/poser/poser/db/model/batch/plzcomeback.py`` for instance. Within that
|
|
module you then define the batch table classes. Be sure to also define the
|
|
``batch_key`` for the main table, which should also get the app-specific
|
|
prefix, e.g.::
|
|
|
|
from rattail.db.model import Base, BatchMixin, BatchRowMixin
|
|
|
|
class PleaseComeBack(BatchMixin, Base):
|
|
__tablename__ = 'poser_batch_plzcomeback'
|
|
__batchrow_class__ = 'PleaseComeBackRow'
|
|
batch_key = 'poser_plzcomeback'
|
|
model_title = "Please Come Back Batch"
|
|
model_title_plural = "Please Come Back Batches"
|
|
|
|
class PleaseComeBackRow(BatchRowMixin, Base):
|
|
__tablename__ = 'poser_batch_plzcomeback_row'
|
|
__batch_class__ = PleaseComeBack
|
|
model_title = "Please Come Back Batch Row"
|
|
|
|
To add the batch handler, create a new Python module. This would go in
|
|
``~/src/poser/poser/batch/plzcomeback.py`` for instance. Within that module
|
|
you then define the batch handler class. Be sure to tie this back to the main
|
|
batch table, e.g.::
|
|
|
|
from rattail.batch import BatchHandler
|
|
from poser.db import model
|
|
|
|
class PleaseComeBackHandler(BatchHandler):
|
|
batch_model_class = model.PleaseComeBack
|
|
|
|
To add the web views, also create a new Python module. This one would go in
|
|
``~/src/poser/poser/web/views/batch/plzcomeback.py`` for instance. Within that
|
|
module you then define the batch master view class. Be sure to tie this back
|
|
to both the batch and row tables, as well as the handler, e.g.::
|
|
|
|
from tailbone.views.batch import BatchMasterView
|
|
from poser.db import model
|
|
|
|
class PleaseComeBackView(BatchMasterView):
|
|
model_class = model.PleaseComeBack
|
|
model_row_class = model.PleaseComeBackRow
|
|
default_handler_spec = 'poser.batch.plzcomeback:PleaseComeBackHandler'
|
|
route_prefix = 'batch.poser_plzcomeback'
|
|
url_prefix = '/batches/please-come-back'
|
|
|
|
def includeme(config):
|
|
PleaseComeBackView.defaults(config)
|