Add some more "handler" docs
app handler, batch handlers, native batch types, people handler
This commit is contained in:
parent
0726a70192
commit
84477e5e36
|
@ -1,8 +0,0 @@
|
||||||
|
|
||||||
App Handlers
|
|
||||||
============
|
|
||||||
|
|
||||||
TODO
|
|
||||||
|
|
||||||
* :doc:`/data/reports/handler`
|
|
||||||
* :doc:`/data/batch/handlers`
|
|
23
docs/base/handlers/app.rst
Normal file
23
docs/base/handlers/app.rst
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
|
||||||
|
App Handler
|
||||||
|
===========
|
||||||
|
|
||||||
|
There is one handler which corresponds to the app itself, whereas all
|
||||||
|
other handlers correspond to some "portion" of the app. This main app
|
||||||
|
handler's primary purpose is to:
|
||||||
|
|
||||||
|
- provide a common interface for obtaining all other handlers
|
||||||
|
- provide some "global" methods, e.g. for rendering date/time values
|
||||||
|
|
||||||
|
You can override the main app handler, with config like:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[rattail]
|
||||||
|
app.handler = poser.app:PoserAppHandler
|
||||||
|
|
||||||
|
Of course that must point to a valid ``AppHandler`` class, which you
|
||||||
|
probably must create.
|
||||||
|
|
||||||
|
See also :class:`rattail:rattail.app.AppHandler` which is the default
|
||||||
|
and base class.
|
15
docs/base/handlers/batch.rst
Normal file
15
docs/base/handlers/batch.rst
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
Batch Handlers
|
||||||
|
==============
|
||||||
|
|
||||||
|
There is a handler for each unique "type" of batch which exists in the
|
||||||
|
app. For instance the Pricing Batch has its own handler, and so does
|
||||||
|
the Inventory Batch, and the Purchase Batch, and so on.
|
||||||
|
|
||||||
|
See :doc:`/data/batch/handlers` for some more background on these.
|
||||||
|
|
||||||
|
See :doc:`/data/batch/native/index` for a list of natively-supported
|
||||||
|
batch types. (Again, there is a handler for each type.)
|
||||||
|
|
||||||
|
See also :class:`rattail:rattail.batch.handlers.BatchHandler` which is
|
||||||
|
the base class for all batch handlers.
|
7
docs/base/handlers/import.rst
Normal file
7
docs/base/handlers/import.rst
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
Import Handlers
|
||||||
|
===============
|
||||||
|
|
||||||
|
TODO
|
||||||
|
|
||||||
|
* :doc:`/data/importing/index`
|
24
docs/base/handlers/index.rst
Normal file
24
docs/base/handlers/index.rst
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
Handlers
|
||||||
|
========
|
||||||
|
|
||||||
|
Rattail uses the concept of a "handler" to allow for two things primarily:
|
||||||
|
|
||||||
|
- customization of app logic without "forking" Rattail package(s)
|
||||||
|
- keep logic in a "single" place which can be leverage by multiple UIs
|
||||||
|
|
||||||
|
The idea is that for various aspects of an app, there will be one and
|
||||||
|
only one "handler" which is responsible for the business logic.
|
||||||
|
Rattail usually comes with a default handler, which will be used
|
||||||
|
unless you've created your own handler and configured it to be used
|
||||||
|
instead.
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
app
|
||||||
|
batch
|
||||||
|
import
|
||||||
|
other/index
|
5
docs/base/handlers/other/board.rst
Normal file
5
docs/base/handlers/other/board.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
Board Handler
|
||||||
|
=============
|
||||||
|
|
||||||
|
TODO
|
5
docs/base/handlers/other/clientele.rst
Normal file
5
docs/base/handlers/other/clientele.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
Clientele Handler
|
||||||
|
=================
|
||||||
|
|
||||||
|
TODO
|
5
docs/base/handlers/other/email.rst
Normal file
5
docs/base/handlers/other/email.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
Email Handler
|
||||||
|
=============
|
||||||
|
|
||||||
|
TODO
|
5
docs/base/handlers/other/employment.rst
Normal file
5
docs/base/handlers/other/employment.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
Employment Handler
|
||||||
|
==================
|
||||||
|
|
||||||
|
TODO
|
5
docs/base/handlers/other/feature.rst
Normal file
5
docs/base/handlers/other/feature.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
Feature Handler
|
||||||
|
===============
|
||||||
|
|
||||||
|
TODO
|
20
docs/base/handlers/other/index.rst
Normal file
20
docs/base/handlers/other/index.rst
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
Other / Misc. Handlers
|
||||||
|
======================
|
||||||
|
|
||||||
|
Here are some handlers which are specific to various aspects of the
|
||||||
|
business logic, or a particular feature etc.
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
board
|
||||||
|
clientele
|
||||||
|
email
|
||||||
|
employment
|
||||||
|
feature
|
||||||
|
people
|
||||||
|
products
|
||||||
|
report
|
19
docs/base/handlers/other/people.rst
Normal file
19
docs/base/handlers/other/people.rst
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
|
||||||
|
People Handler
|
||||||
|
==============
|
||||||
|
|
||||||
|
This handler is responsible for business logic surrounding the
|
||||||
|
:class:`~rattail:rattail.db.model.people.Person` model.
|
||||||
|
|
||||||
|
You can obtain a reference to the configured handler via
|
||||||
|
:meth:`~rattail:rattail.app.AppHandler.get_people_handler`.
|
||||||
|
|
||||||
|
You may override the default handler with config like:
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
|
||||||
|
[rattail]
|
||||||
|
people.handler = poser.people:PoserPeopleHandler
|
||||||
|
|
||||||
|
The default handler is :class:`rattail:rattail.people.PeopleHandler` -
|
||||||
|
see its documentation for a list of methods you can override.
|
5
docs/base/handlers/other/products.rst
Normal file
5
docs/base/handlers/other/products.rst
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
Products Handler
|
||||||
|
================
|
||||||
|
|
||||||
|
TODO
|
7
docs/base/handlers/other/report.rst
Normal file
7
docs/base/handlers/other/report.rst
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
|
||||||
|
Report Handler
|
||||||
|
==============
|
||||||
|
|
||||||
|
TODO
|
||||||
|
|
||||||
|
* :doc:`/data/reports/handler`
|
|
@ -18,4 +18,4 @@ Base Layer
|
||||||
supervisor
|
supervisor
|
||||||
filemon
|
filemon
|
||||||
upgrades
|
upgrades
|
||||||
handlers
|
handlers/index
|
||||||
|
|
|
@ -9,5 +9,5 @@ Data Batch Processing
|
||||||
overview
|
overview
|
||||||
schema
|
schema
|
||||||
handlers
|
handlers
|
||||||
native
|
native/index
|
||||||
custom
|
custom
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
|
|
||||||
==================
|
|
||||||
Native Batch Types
|
|
||||||
==================
|
|
||||||
|
|
||||||
The following batch types are provided by Rattail itself. Listed below for
|
|
||||||
each is the "batch type key" followed by the descriptive name.
|
|
||||||
|
|
||||||
* ``custorder`` - Customer Order Batch
|
|
||||||
* ``handheld`` - Handheld Batch
|
|
||||||
* ``importer`` - Importer Batch
|
|
||||||
* ``inventory`` - Inventory Batch
|
|
||||||
* ``labels`` - Label Batch
|
|
||||||
* ``newproduct`` - New Product Batch
|
|
||||||
* ``pricing`` - Pricing Batch
|
|
||||||
* ``product`` - Product Batch
|
|
||||||
* ``purchase`` - Purchasing Batch
|
|
||||||
* ``vendor_catalog`` - Vendor Catalog
|
|
||||||
* ``vendor_invoice`` - Vendor Invoice
|
|
13
docs/data/batch/native/custorder.rst
Normal file
13
docs/data/batch/native/custorder.rst
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
Customer Order Batch
|
||||||
|
====================
|
||||||
|
|
||||||
|
**Batch Type Key:** ``custorder``
|
||||||
|
|
||||||
|
**Purpose:** Create and/or process a customer order.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.custorder.CustomerOrderBatchHandler`
|
||||||
|
|
||||||
|
As of this writing, the only actual use for this batch is to create a
|
||||||
|
*new* customer order, specifically in the context of a so-called
|
||||||
|
"case" or "special" order.
|
22
docs/data/batch/native/delproduct.rst
Normal file
22
docs/data/batch/native/delproduct.rst
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
Delete Product Batch
|
||||||
|
====================
|
||||||
|
|
||||||
|
**Batch Type Key:** ``delproduct``
|
||||||
|
|
||||||
|
**Purpose:** Delete products from the system.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.delproduct.DeleteProductBatchHandler`
|
||||||
|
|
||||||
|
Data for this batch may come from spreadsheet file or grid query, etc.
|
||||||
|
|
||||||
|
It should try to catch potential issues which might arise should the
|
||||||
|
products actually be deleted, for instance if a given item has pending
|
||||||
|
customer orders.
|
||||||
|
|
||||||
|
It also should try to highlight items which have seen recent movement,
|
||||||
|
to help avoid removing items which are more active than you thought
|
||||||
|
etc.
|
||||||
|
|
||||||
|
Ultimately executing this batch will just update Rattail by default;
|
||||||
|
you may want a custom handler to update your POS system instead.
|
17
docs/data/batch/native/handheld.rst
Normal file
17
docs/data/batch/native/handheld.rst
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
Handheld Batch
|
||||||
|
==============
|
||||||
|
|
||||||
|
**Batch Type Key:** ``handheld``
|
||||||
|
|
||||||
|
**Purpose:** Process a basic / generic product batch from a handheld device.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.handheld.HandheldBatchHandler`
|
||||||
|
|
||||||
|
This batch can read from a variety of file formats, which correspond
|
||||||
|
to particular types of handheld devices. The file is expected to have
|
||||||
|
a UPC or barcode field, and can optionally have case and/or unit
|
||||||
|
quantities for each.
|
||||||
|
|
||||||
|
Executing this batch usually just "converts" it into either an
|
||||||
|
:doc:`inventory` or a :doc:`labels`.
|
19
docs/data/batch/native/importer.rst
Normal file
19
docs/data/batch/native/importer.rst
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
|
||||||
|
Importer Batch
|
||||||
|
==============
|
||||||
|
|
||||||
|
**Batch Type Key:** ``importer``
|
||||||
|
|
||||||
|
**Purpose:** Allows user to preview an importer run before committing it.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.importer.ImporterBatchHandler`
|
||||||
|
|
||||||
|
Normally when an importer runs, e.g. via command line, it reads data
|
||||||
|
from the host system and writes it to the local / target side. If in
|
||||||
|
dry run mode, then the local data is not actually written. But it's
|
||||||
|
normally "all or nothing" in the sense that you either want to commit
|
||||||
|
all the writes, or else you don't (dry run).
|
||||||
|
|
||||||
|
It's also possible to write the import data to a batch, which can then
|
||||||
|
be previewed and perhaps even adjusted. Then executing the batch will
|
||||||
|
"finalize" the import using data from the batch.
|
26
docs/data/batch/native/index.rst
Normal file
26
docs/data/batch/native/index.rst
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
Native Batch Types
|
||||||
|
==================
|
||||||
|
|
||||||
|
This section describes all "native" batch types which are provided (in
|
||||||
|
whole or in part) by Rattail itself.
|
||||||
|
|
||||||
|
Of course you can always make your own batch types for other purposes;
|
||||||
|
see :doc:`/data/batch/custom`.
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
custorder
|
||||||
|
delproduct
|
||||||
|
handheld
|
||||||
|
importer
|
||||||
|
inventory
|
||||||
|
labels
|
||||||
|
newproduct
|
||||||
|
pricing
|
||||||
|
product
|
||||||
|
purchase
|
||||||
|
vendor_catalog
|
||||||
|
vendor_invoice
|
18
docs/data/batch/native/inventory.rst
Normal file
18
docs/data/batch/native/inventory.rst
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
Inventory Batch
|
||||||
|
===============
|
||||||
|
|
||||||
|
**Batch Type Key:** ``inventory``
|
||||||
|
|
||||||
|
**Purpose:** Process counts and adjustments for product inventory.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.inventory.InventoryBatchHandler`
|
||||||
|
|
||||||
|
Data for this batch can come directly from file, or from a Handheld
|
||||||
|
Batch etc. It can contain counts for various products.
|
||||||
|
|
||||||
|
Executing this batch with the default handler in place, will cause
|
||||||
|
Rattail's own inventory counts to be updated according to the batch
|
||||||
|
data. Depending on your POS system it may be possible to push the
|
||||||
|
updates to it instead, and if so you'd probably want to, since your
|
||||||
|
POS is likely the authority for current inventory levels.
|
17
docs/data/batch/native/labels.rst
Normal file
17
docs/data/batch/native/labels.rst
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
Label Batch
|
||||||
|
===========
|
||||||
|
|
||||||
|
**Batch Type Key:** ``labels``
|
||||||
|
|
||||||
|
**Purpose:** Print item labels / shelf tags for a set of products.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.labels.LabelBatchHandler`
|
||||||
|
|
||||||
|
Data for this batch can come directly from file, or from a
|
||||||
|
:doc:`handheld` etc. It can contain a list of items and various label
|
||||||
|
printing attributes for each.
|
||||||
|
|
||||||
|
Executing this batch may send a job(s) directly to your dedicated
|
||||||
|
label printer if you have one. Or it can generate an Excel file for
|
||||||
|
use with BarTender or other software, etc.
|
16
docs/data/batch/native/newproduct.rst
Normal file
16
docs/data/batch/native/newproduct.rst
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
|
||||||
|
New Product Batch
|
||||||
|
=================
|
||||||
|
|
||||||
|
**Batch Type Key:** ``newproduct``
|
||||||
|
|
||||||
|
**Purpose:** Import new products into the system.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.newproduct.NewProductBatchHandler`
|
||||||
|
|
||||||
|
Data for this batch usually comes from a spreadsheet file. It should
|
||||||
|
contain new product records, with all necessary data for each.
|
||||||
|
|
||||||
|
Executing this batch may just create the item in Rattail by default.
|
||||||
|
You may want to use a custom handler for inserting the item directly
|
||||||
|
to your POS system instead, for instance.
|
22
docs/data/batch/native/pricing.rst
Normal file
22
docs/data/batch/native/pricing.rst
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
Pricing Batch
|
||||||
|
=============
|
||||||
|
|
||||||
|
**Batch Type Key:** ``pricing``
|
||||||
|
|
||||||
|
**Purpose:** Change pricing for a set of products, optionally calculating new prices.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.pricing.PricingBatchHandler`
|
||||||
|
|
||||||
|
There are sort of 2 modes for this batch type:
|
||||||
|
|
||||||
|
In "static" mode you would have a data file containing the new prices,
|
||||||
|
which you upload as a new batch. Executing this batch would then
|
||||||
|
apply the prices from the file.
|
||||||
|
|
||||||
|
In "dynamic" mode you need only identify the set of products, and then
|
||||||
|
let the software calculate new prices for each. Executing this batch
|
||||||
|
would then apply the new calculated prices.
|
||||||
|
|
||||||
|
In either case the default handler will update Rattail itself, so you
|
||||||
|
may need a custom handler to update your POS instead.
|
15
docs/data/batch/native/product.rst
Normal file
15
docs/data/batch/native/product.rst
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
|
||||||
|
Product Batch
|
||||||
|
=============
|
||||||
|
|
||||||
|
**Batch Type Key:** ``product``
|
||||||
|
|
||||||
|
**Purpose:** Generic batch to identify and act on a set of items.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.product.ProductBatchHandler`
|
||||||
|
|
||||||
|
Data for this batch type usually comes from a simple file, or perhaps
|
||||||
|
a grid query. Executing it will usually create another type of batch
|
||||||
|
using the current one only to define which items are involved. For
|
||||||
|
example by default it will create either a :doc:`labels` or a
|
||||||
|
:doc:`pricing`.
|
27
docs/data/batch/native/purchase.rst
Normal file
27
docs/data/batch/native/purchase.rst
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
|
||||||
|
Purchase Batch
|
||||||
|
==============
|
||||||
|
|
||||||
|
**Batch Type Key:** ``purchase``
|
||||||
|
|
||||||
|
**Purpose:** Provides workflows for ordering, receiving, and invoice costing.
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.purchase.PurchaseBatchHandler`
|
||||||
|
|
||||||
|
There are 3 "modes" for this type of batch, meant to correspond to the
|
||||||
|
life-cycle of a purchase order:
|
||||||
|
|
||||||
|
- Ordering
|
||||||
|
- Receiving
|
||||||
|
- Costing
|
||||||
|
|
||||||
|
Depending on the mode, data for the batch may come from any of:
|
||||||
|
|
||||||
|
- PO file or invoice file from the vendor
|
||||||
|
- purchase order data from the POS system
|
||||||
|
- directly entered via the Rattail app
|
||||||
|
|
||||||
|
Execution of this type of batch will also depend on the mode. The
|
||||||
|
default handler may just update Rattail data (e.g. ``purchase`` table)
|
||||||
|
according to the batch. If applicable, you may want a custom handler
|
||||||
|
so it updates your POS instead.
|
18
docs/data/batch/native/vendor_catalog.rst
Normal file
18
docs/data/batch/native/vendor_catalog.rst
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
Vendor Catalog Batch
|
||||||
|
====================
|
||||||
|
|
||||||
|
**Batch Type Key:** ``vendor_catalog``
|
||||||
|
|
||||||
|
**Purpose:** Allows updating product costs from new catalog data
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.vendorcatalog.VendorCatalogHandler`
|
||||||
|
|
||||||
|
Data for this type of batch usually comes from a spreadsheet or
|
||||||
|
similar file, as obtained directly from the vendor. You can also
|
||||||
|
define a "common" format to use, in which case you would convert each
|
||||||
|
vendor file to that format. (That is to cut down on the number of
|
||||||
|
file parsers needed.)
|
||||||
|
|
||||||
|
In any case executing this batch will just update Rattail by default;
|
||||||
|
you may want a custom handler to update your POS system instead.
|
20
docs/data/batch/native/vendor_invoice.rst
Normal file
20
docs/data/batch/native/vendor_invoice.rst
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
Vendor Invoice Batch
|
||||||
|
====================
|
||||||
|
|
||||||
|
**Batch Type Key:** ``vendor_invoice``
|
||||||
|
|
||||||
|
**Purpose:** (DEPRECATED) Process a vendor invoice
|
||||||
|
|
||||||
|
**Default Handler:** :class:`~rattail:rattail.batch.vendorinvoice.VendorInvoiceHandler`
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This batch type should be considered deprecated. It still exists
|
||||||
|
and may be used, but that may not always be the case. If possible
|
||||||
|
please use :doc:`purchase` instead.
|
||||||
|
|
||||||
|
Data for this type of batch usually comes from a spreadsheet or
|
||||||
|
similar file, as obtained directly from the vendor.
|
||||||
|
|
||||||
|
Executing this batch does nothing at all by default; you would need a
|
||||||
|
custom handler to make it useful.
|
Loading…
Reference in a new issue