https://github.com/sde1000/quicktill
Figure out where all the money and stock went to
https://github.com/sde1000/quicktill
cash-register epos escpos point-of-sale pos python
Last synced: 3 months ago
JSON representation
Figure out where all the money and stock went to
- Host: GitHub
- URL: https://github.com/sde1000/quicktill
- Owner: sde1000
- License: gpl-3.0
- Created: 2013-09-30T22:59:50.000Z (over 12 years ago)
- Default Branch: main
- Last Pushed: 2026-03-07T19:45:34.000Z (3 months ago)
- Last Synced: 2026-03-08T01:16:25.570Z (3 months ago)
- Topics: cash-register, epos, escpos, point-of-sale, pos, python
- Language: Python
- Size: 6.77 MB
- Stars: 47
- Watchers: 8
- Forks: 9
- Open Issues: 70
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
quicktill — cash register software
==================================
Copying
-------
quicktill is Copyright (C) 2004–2026 Stephen Early
It is distributed under the terms of the GNU General Public License
as published by the Free Software Foundation, either version 3
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see [this
link](http://www.gnu.org/licenses/).
Features
--------
* Any number of departments, products, price lookups, users, etc.
* Products sold can be entered through keys on a keyboard, on-screen
buttons, or barcode scans
* Works on multiple terminals at once; transactions follow users
between terminals
* Web interface for reporting and management
* Flexible discount policies, and reporting on discounts given
* [Xero](https://www.xero.com/) integration
* [Square Terminal](https://developer.squareup.com/docs/terminal-api/overview) integration
It should be possible to run this software on any system that supports
Python 3.12. Usually it runs on Debian-derived Linux systems.
Misfeatures
-----------
* Lack of documentation — you're reading it now!
* Only one developer at the moment
* Arguably: Configuration is written in python (although there is an
ongoing effort to move configuration into the database)
Quick start
-----------
The till software includes an anonymised copy of the database from
[EMFcamp 2024](https://www.emfcamp.org/) which can be used for
testing. This guide assumes you have a fresh installation of Ubuntu
24.04 Desktop. (You will need a graphical user interface for the
on-screen keyboard, and the Desktop version has the "universe"
component enabled by default.)
### Installing needed packages ###
In a terminal window, run the following to install packages the till
software needs:
sudo apt install git postgresql python3-sqlalchemy
sudo apt install python3-dateutil python3-psycopg2
### Configuring postgres ###
We need to set up postgres to allow your user account to create new
databases. This procedure may vary from system to system, but on
Debian-derived Linux systems will go something like this:
sudo -u postgres createuser -d your-username
You will need to substitute your own username for "your-username".
If you don't want to give your user account permission to create new
databases, you could [use the instructions
here](https://wiki.debian.org/PostgreSql) to do something more
restricted.
### Obtaining the till software and test data ###
We will create a clone of the till software from github:
git clone https://github.com/sde1000/quicktill.git
This puts the till software in a directory called "quicktill". From
now on we'll assume that this is your current working directory:
cd quicktill
To create a database and install the test data in it:
createdb emfcamp
psql emfcamp >> td.s.query(Department).all()
A list of transactions in the current session:
>>> Session.current(td.s).transactions
A list of sessions and their totals (in a single round-trip to the
database):
>>> from sqlalchemy.orm import undefer
>>> [(x,x.total) for x in td.s.query(Session).options(undefer('total')).all()]
Credits
-------
This software incorporates code from the following projects, which may
be under a different licence:
* [MultiSelect](https://plugins.jquery.com/multi-select/) ([DWTFYWT](http://www.wtfpl.net/txt/copying/) licence)
* [json-viewer](https://github.com/LorDOniX/json-viewer) (MIT licence)