π Open inventory management and Point of sales (powered by python) for small shops.
- π Crisp UI
- π Intuitive
- π Instant lookup
- βοΈ Towards customisation
alpha - highly volatile, core features not yet finished
π²πΊ π©πͺ π¨π³ π¬π§
- Confirmation before deleting section
- Settings fully operationable
- Apply settings works for existing and non-existing db
Months ago i was searching github, looking for a point of sales solution using Python. What pricked me was that a good many had an annoying point. Some mandatorily required Posgres as though it ships with your computer, others' codebases were a tkinter spaghetti mess, yet others were django-based accounting monsters ...
I decided to give it a try, modelling it after a client request i once got. Made it flask-based with sqlalchemy+sqlite. You can instantly get started with no hassle, switching to something powerful when you want to (since it uses an ORM)
For the UI, we used the latest, bootstrap4, fa5 and jq3. Interestingly enough, i had two shop owners try it, the usage simplicity was praised
It's still in dev and supports instant lookup. Long story short, with some programming skills, you can solve some everyday problems. And yes, no cdn, all libs are bundled so that you can use it completely offline
See this linked-in article!
If you want to contribute, go ahead, we β€οΈ it. We follow a π― % first-timers-friendly policy.
- Add your country flag in readme after accepted PR
- download python3.7
- clone and cd into project
- run
python -m pip install -r requirements.txt
run initialise.py
python initialise.py
python apply_settings.py
then run the app in shopyo/shopyo
python app.py
the go to the indicated url
Each landing page and subsection should contain the following headers.
{% extends "base/main_base.html" %}
// extends the base.html file.
{% set active_page = "sectionName" %}
// sets the active section (change section name).
Inside the template folder create a file ending _index.html
.
* /template
* /base
* <changeme>_index.html (swap <changeme> for section name).
Inside the template folder create a new file keeping the same section name as _index .html
.
* /template
* /base
* example_index.html
* example_<changeme>.html (swap <changeme> for subsection name).
Inside the template folder create a file with the same section name as _index.html
. Changing _index.html
for _nav.html
.
* /template
* /base
* example_index.html
* example_<changeme>.html (swap changeme for subsection name.)
* example_nav.html
In the _nav
.html file elements for the navigation can be created.
Open the template /base
folder and locate the nav_base.html
.
In the nav_bar_log([])
array. Enter the section name last in the list.
{% set nav_bar_log = [
('section0'),
('section1'),
('new_section')
] %}
Now enter a new elif statement containing a reference to the _nav.html
{% elif active_page == nav_bar_log[0] %}
{% include "section0_nav.html" %}
{% elif active_page == nav_bar_log[1] %}
{% include "section1_nav.html" %}
{% elif active_page == nav_bar_log[2] %} <- - - Add 1 to index.
{% include "new_section_nav.html" %}
Then the navagation elements will be displayed in the new section.