Integrating the POS¶
The general process of integrating a POS is roughly the same (so far) regardless of which POS system is involved. Here we describe the setup etc.
We will use CORE-POS as our example, for a few reasons, not least of which is that it’s also free (libre) software. See POS Integration for links to others.
Install Packages¶
Please remember to activate your virtual environment.
The first thing is, you must install the POS integration packages. The packages for CORE-POS are publiclly available, in which case if you just want the latest releases:
pip install tailbone-theo[app,corepos]
Or if you want to run from source then you can clone/install these:
https://kallithea.rattailproject.org/rattail-project/pycorepos
https://kallithea.rattailproject.org/rattail-project/rattail-corepos
https://kallithea.rattailproject.org/rattail-project/tailbone-corepos
But then just in case, do also run the above command as well, to ensure all dependencies are got.
Modify Config¶
You must tell Alembic how to find all schema extensions for your POS
integration package. Modify /srv/envs/theo/app/rattail.conf
per
the following.
The default contains:
[alembic]
version_locations = rattail.db:alembic/versions
But you now instead need something like:
[alembic]
version_locations = rattail_corepos.db:alembic/versions rattail.db:alembic/versions
Note that the POS integration path should come before the default path there.
In the same config file, you should declare your integration to Theo:
[theo]
integrate_corepos = true
Migrate Database¶
Most integrations will require some extra tables installed to your database. But installing them is no different than any other migration, i.e. just run the normal commands:
cd /srv/envs/theo
bin/alembic -c app/rattail.conf upgrade heads
Import POS Data¶
This process can vary a little but a couple of concepts will be useful regardless.
First is that data “versioning” must be considered here. Theo normally will use the versioning feature, i.e. whenever a record changes, a new “version” record is also created for it. The logic behind this has some performance cost, which is by far most pronounced when there are a “lot” of changes within the same database session.
Therefore a workaround is employed when the database is initially
populated: the versioning feature is disabled for the main import, and
then version records are created for the initial data in a separate
step. So the first import command always includes --no-versiong
:
cd /srv/envs/theo
bin/rattail -c app/quiet.conf -P import-corepos-api --no-versioning
Once all the data lives in Theo, then capture the initial version records for everything.
bin/rattail -c app/quiet.conf -P --runas corepos import-versions -m "initial data from POS"
Note the --runas
arg above, which declares the Theo username
responsible. The user must already exist within Theo, but can be
created via the Theo web app.
Ongoing Sync¶
There are a few ways to do the ongoing “sync” between the POS system and Theo. For now we will only describe a very basic sync which happens once per night, although could also be used hourly etc.
The idea here is basically just like the initial data import, although should not need the versioning workaround. So one command, something like:
cd /srv/envs/theo
bin/rattail -c app/quiet.conf --runas corepos import-corepos-api
This is a very basic example, in particular does not handle “deletions” which may occur in CORE. For now though we’ll leave it at that, hopefully more to come later.