{ "info": { "author": "Lawrence Liu", "author_email": "lawrence@betterlife.io", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Framework :: Flask", "License :: OSI Approved :: MIT License", "Natural Language :: Chinese (Simplified)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Office/Business :: Financial", "Topic :: Office/Business :: Financial :: Accounting", "Topic :: Office/Business :: Financial :: Point-Of-Sale" ], "description": "\n# Betterlife Intelligent PSI [![Travis (.org)](https://img.shields.io/travis/com/betterlife/betterlifepsi.svg?logo=travis&style=flat-square)](https://travis-ci.com/betterlife/betterlifepsi) [![Code Coverage](https://img.shields.io/codecov/c/github/betterlife/betterlifepsi.svg?label=Coverage&style=flat-square)](http://codecov.io/github/betterlife/betterlifepsi?branch=master)\n\nIntelligent PSI(Purchase, Sales and Inventory) management system\n\n![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat-square)\n[![Code Health](https://landscape.io/github/betterlife/betterlifepsi/master/landscape.svg?style=flat-square)](https://landscape.io/github/betterlife/betterlifepsi/master)\n[![Requires.io](https://img.shields.io/requires/github/betterlife/betterlifepsi.svg?style=flat-square)](https://requires.io/github/betterlife/betterlifepsi/requirements/?branch=master)\n[![commits since release](https://img.shields.io/github/commits-since/betterlife/betterlifepsi/V0.6.7.svg?style=flat-square)](http://github.com/betterlife/betterlifepsi/releases)\n[![Release](https://img.shields.io/github/release/betterlife/betterlifepsi.svg?style=flat-square)](http://github.com/betterlife/betterlifepsi/releases) \n[![PyPI](https://img.shields.io/pypi/v/betterlifepsi.svg?style=flat-square)](https://pypi.org/project/betterlifepsi/)\n\n\n## Try to answer some questions like\n\n - Which product generates the most revenue/profit in my store and what's the data?\n - When do I need to replenish the stock and how much do I lost if that's not done?\n - What is the optimized quantity/date for replenish the stock?\n\n## Install & Run & Deploy \n\n - Run using Docker (Recommend)\n\n * Make sure docker is installed and configured correctly. \n * Clone the code via `git clone https://github.com/betterlife/betterlifepsi.git`\n * `cd betterlifepsi && docker-compose build && docker-compose up` to build and run the docker image\n * Please notice the database data is mounted to a docker volume called psi_data by default.\n\n - Install and run locally\n * Clone the code via `git clone https://github.com/betterlife/betterlifepsi.git`\n * `pip install -r requirements.txt` to install runtime dependencies.\n * `pip install -r etc/requirements/test.txt` to install development dependencies.\n * Create postgresql database and user for the application.\n * Set follow environment variables:\n * DATABASE_URL : Database URL, only postgresql is tested as of now.\n * FLASK_APP: Should be set to `psi.cli:application`\n * SECURITY_PASSWORD_SALT : password salt for password generation\n * SECRET_KEY : secret key for password generation\n * CLOUDINARY_URL : Cloudinary URL if use cloudinary to store image attachments\n * SENTRY_DSN : Sentry DSN if use sentry to handle exceptions \n * `flask run` to run the application\n * Set environment variable `TEST_DATABASE_URL` and invoke `flask test` to run tests.\n\n - Install and run on heroku\n * Click button [![Deploy](https://img.shields.io/badge/Heroku-Deploy-brightgreen.svg?style=flat-square)](https://heroku.com/deploy) to deploy current version to heroku.\n\n## Links\n\n - [Demo environment](https://psi-dev.herokuapp.com/)\n - Organization administrator user: super_admin / password\n - Business user: bu / password\n - [Knowledge Center](https://github.com/betterlife/psi/wiki) \n - [Story management](https://betterlife.atlassian.net)\n\n## License \nBetterlife PSI uses [MIT License](https://github.com/betterlife/flask-psi/blob/master/LICENSE)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/betterlife/psi", "keywords": "Betterlife,Intelligent,Purchase Order,Sales Order,Inventory Management,Retail", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "betterlifepsi", "package_url": "https://pypi.org/project/betterlifepsi/", "platform": "", "project_url": "https://pypi.org/project/betterlifepsi/", "project_urls": { "Homepage": "https://github.com/betterlife/psi" }, "release_url": "https://pypi.org/project/betterlifepsi/0.6.8/", "requires_dist": [ "Flask (==1.0.2)", "Jinja2 (==2.10)", "Flask-Admin (==1.5.2)", "sqlalchemy (==1.2.13)", "Flask-SQLAlchemy (==2.3.2)", "Flask-SSLify (==0.1.5)", "MarkupSafe (==1.0)", "Werkzeug (==0.14.1)", "gunicorn (==19.9.0)", "Flask-BabelEx (==0.9.3)", "raven (==6.9.0)", "Flask-Migrate (==2.3.0)", "Flask-Security (==3.0.0)", "Flask-DebugToolbar (==0.10.1)", "cloudinary (==1.14.0)", "Flask-RESTful (==0.3.6)", "flask-socketio (==3.0.1)", "eventlet (==0.24.1)", "pypinyin (==0.33.2)", "python-dotenv (==0.9.1)" ], "requires_python": "", "summary": "Betterlife Intelligent PSI(Purchase, Sales and Inventory) system", "version": "0.6.8" }, "last_serial": 4450250, "releases": { "0.6.7.post3": [ { "comment_text": "", "digests": { "md5": "5b71a5b947a0280bb6734c89c2b60c6f", "sha256": "fb52376229fdf69720b551e13140c52478f0315e9eb9956e885e6811127cc1d7" }, "downloads": -1, "filename": "betterlifepsi-0.6.7.post3-py3-none-any.whl", "has_sig": false, "md5_digest": "5b71a5b947a0280bb6734c89c2b60c6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1602854, "upload_time": "2018-09-04T18:16:50", "url": "https://files.pythonhosted.org/packages/f9/4a/7d17e6fc0cd1fc1e5bbb61a8a235a227956b77beed20f6188646e7c7e7a4/betterlifepsi-0.6.7.post3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "98f4849e4d2924b909045ffd0714cb02", "sha256": "f207ec6aa3ab562b66275bce82ba1343ad0d348caad2a9c7225948fdec4be8ec" }, "downloads": -1, "filename": "betterlifepsi-0.6.7.post3.tar.gz", "has_sig": false, "md5_digest": "98f4849e4d2924b909045ffd0714cb02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1417671, "upload_time": "2018-09-04T18:16:53", "url": "https://files.pythonhosted.org/packages/2b/3b/c4c3b6bf87a2f429978b98efae23cb8785e63d238df6b09d955313b11e57/betterlifepsi-0.6.7.post3.tar.gz" } ], "0.6.7.post4": [ { "comment_text": "", "digests": { "md5": "2278c258d0439330b2da364d3c106f01", "sha256": "787d6a790e44093e28883e1f5c6b2e599e1396e3fc706d33282d2c79f9b8520a" }, "downloads": -1, "filename": "betterlifepsi-0.6.7.post4-py3-none-any.whl", "has_sig": false, "md5_digest": "2278c258d0439330b2da364d3c106f01", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1602274, "upload_time": "2018-09-04T18:42:37", "url": "https://files.pythonhosted.org/packages/09/6d/9b862bff8fc0b86757128776f7bb1e64e7c508e8ad287b7fa79609e9d38a/betterlifepsi-0.6.7.post4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9dbdba42613143ff9411b7e7718a81e7", "sha256": "81b0d19dc8908e7ce33c298871467e4868b0a73227bcdaabdf5c0d5e3757edec" }, "downloads": -1, "filename": "betterlifepsi-0.6.7.post4.tar.gz", "has_sig": false, "md5_digest": "9dbdba42613143ff9411b7e7718a81e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1398188, "upload_time": "2018-09-04T18:42:39", "url": "https://files.pythonhosted.org/packages/1f/52/07a2b7f6616b531a0d10b703c8eb37ea8f6e76c0bab53a91dc940c2dcb68/betterlifepsi-0.6.7.post4.tar.gz" } ], "0.6.8": [ { "comment_text": "", "digests": { "md5": "c6db5e14058bb15a37fa5358a7088fe4", "sha256": "af36980bf08ab44f909524988c4878c7a6600b94967f507a04670081aa45be10" }, "downloads": -1, "filename": "betterlifepsi-0.6.8-py3-none-any.whl", "has_sig": false, "md5_digest": "c6db5e14058bb15a37fa5358a7088fe4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1605163, "upload_time": "2018-11-04T17:46:12", "url": "https://files.pythonhosted.org/packages/85/e4/746139b790bbdf3959ef177cc09f3dcdc84a4a6f40ca8614a7c5737b9610/betterlifepsi-0.6.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2878d6898f1d2b57450c7c211f50f802", "sha256": "7469c8688b0d1364dc328a8ff3e77250145a9172d0d0d79d46f73c09eec63a06" }, "downloads": -1, "filename": "betterlifepsi-0.6.8.tar.gz", "has_sig": false, "md5_digest": "2878d6898f1d2b57450c7c211f50f802", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1399279, "upload_time": "2018-11-04T17:46:14", "url": "https://files.pythonhosted.org/packages/f9/89/5c4f239e7cba7223b5cec8ab8bbebda89b9056ade5a2e7367cafdf02c1e1/betterlifepsi-0.6.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c6db5e14058bb15a37fa5358a7088fe4", "sha256": "af36980bf08ab44f909524988c4878c7a6600b94967f507a04670081aa45be10" }, "downloads": -1, "filename": "betterlifepsi-0.6.8-py3-none-any.whl", "has_sig": false, "md5_digest": "c6db5e14058bb15a37fa5358a7088fe4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1605163, "upload_time": "2018-11-04T17:46:12", "url": "https://files.pythonhosted.org/packages/85/e4/746139b790bbdf3959ef177cc09f3dcdc84a4a6f40ca8614a7c5737b9610/betterlifepsi-0.6.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2878d6898f1d2b57450c7c211f50f802", "sha256": "7469c8688b0d1364dc328a8ff3e77250145a9172d0d0d79d46f73c09eec63a06" }, "downloads": -1, "filename": "betterlifepsi-0.6.8.tar.gz", "has_sig": false, "md5_digest": "2878d6898f1d2b57450c7c211f50f802", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1399279, "upload_time": "2018-11-04T17:46:14", "url": "https://files.pythonhosted.org/packages/f9/89/5c4f239e7cba7223b5cec8ab8bbebda89b9056ade5a2e7367cafdf02c1e1/betterlifepsi-0.6.8.tar.gz" } ] }