71 lines
2.1 KiB
ReStructuredText
71 lines
2.1 KiB
ReStructuredText
|
|
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.
|
|
|
|
|
|
Adding a New Vendor Catalog File Parser
|
|
---------------------------------------
|
|
|
|
Let's say you buy product from a vendor named "Acme Distribution" and
|
|
you want to add support for their catalog file format.
|
|
|
|
First you must define the file parser class, and register it.
|
|
|
|
We suggest keeping catalog parsers in a particular folder, e.g.
|
|
``~/src/poser/poser/vendor/catalogs/`` in your project. Create
|
|
folders as needed and then within that create a new file ``acme.py``
|
|
and for now just put this in it::
|
|
|
|
from rattail.vendors.catalogs import CatalogParser
|
|
|
|
class AcmeCatalogParser(CatalogParser):
|
|
|
|
key = 'poser.acme'
|
|
vendor_key = 'poser.acme'
|
|
|
|
Now you must register it. To do this, first add something like the
|
|
following to ``setup.py`` for your project::
|
|
|
|
setup(
|
|
# ...
|
|
|
|
entry_points = {
|
|
'rattail.vendors.catalogs.parsers': [
|
|
'poser.acme = poser.vendors.catalogs.acme:AcmeCatalogParser',
|
|
],
|
|
},
|
|
)
|
|
|
|
Then re-install your project, e.g. with:
|
|
|
|
.. code-block:: sh
|
|
|
|
cd /srv/envs/poser
|
|
bin/pip install -e ~/src/poser
|
|
|
|
At this point your parser should be visible within the web app and you
|
|
can move on to fleshing out the parser logic, and test it by making a
|
|
new batch in the web app etc.
|
|
|
|
See :class:`rattail:rattail.vendors.catalogs.CatalogParser` for
|
|
details of what attributes and methods you can implement.
|
|
|
|
See
|
|
https://forgejo.wuttaproject.org/rattail/rattail/src/branch/master/rattail/contrib/vendors/catalogs
|
|
for some example parsers.
|