{"id":13500463,"url":"https://github.com/openboxes/openboxes","last_synced_at":"2025-03-29T07:30:56.847Z","repository":{"id":4847452,"uuid":"6001800","full_name":"openboxes/openboxes","owner":"openboxes","description":"OpenBoxes is a supply chain management system designed to manage inventory and track stock movements for healthcare facilities.","archived":false,"fork":false,"pushed_at":"2024-10-29T18:31:45.000Z","size":98558,"stargazers_count":650,"open_issues_count":247,"forks_count":417,"subscribers_count":35,"default_branch":"develop","last_synced_at":"2024-10-29T18:47:31.612Z","etag":null,"topics":["disaster-response","grails","hacktoberfest","healthcare","inventory-management","shipment-tracking","warehouse-management"],"latest_commit_sha":null,"homepage":"https://openboxes.com","language":"Groovy","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openboxes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support/index.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"open_collective":"openboxes"}},"created_at":"2012-09-28T19:08:51.000Z","updated_at":"2024-10-28T11:54:23.000Z","dependencies_parsed_at":"2024-03-03T23:36:59.479Z","dependency_job_id":"07a8f9a2-68eb-480a-8597-6f52d6081088","html_url":"https://github.com/openboxes/openboxes","commit_stats":{"total_commits":8615,"total_committers":54,"mean_commits":"159.53703703703704","dds":0.718630295995357,"last_synced_commit":"43489bee9c3b5e0f74444e8ce3ec6bf891880763"},"previous_names":[],"tags_count":117,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openboxes%2Fopenboxes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openboxes%2Fopenboxes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openboxes%2Fopenboxes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openboxes%2Fopenboxes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openboxes","download_url":"https://codeload.github.com/openboxes/openboxes/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246127888,"owners_count":20727804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["disaster-response","grails","hacktoberfest","healthcare","inventory-management","shipment-tracking","warehouse-management"],"created_at":"2024-07-31T22:01:02.337Z","updated_at":"2025-03-29T07:30:56.834Z","avatar_url":"https://github.com/openboxes.png","language":"Groovy","funding_links":["https://opencollective.com/openboxes","https://opencollective.com/openboxes/contribute","https://opencollective.com/openboxes/organization/0/website","https://opencollective.com/openboxes/organization/1/website","https://opencollective.com/openboxes/organization/2/website","https://opencollective.com/openboxes/organization/3/website","https://opencollective.com/openboxes/organization/4/website","https://opencollective.com/openboxes/organization/5/website","https://opencollective.com/openboxes/organization/6/website","https://opencollective.com/openboxes/organization/7/website","https://opencollective.com/openboxes/organization/8/website","https://opencollective.com/openboxes/organization/9/website"],"categories":["Groovy","Healthcare","healthcare"],"sub_categories":[],"readme":"[![Documentation Status](https://readthedocs.org/projects/openboxes/badge/?version=develop)](https://readthedocs.org/projects/openboxes/?badge=develop)\n![dbdocs](https://github.com/openboxes/openboxes/actions/workflows/dbdocs.yml/badge.svg)\n![docker image](https://github.com/openboxes/openboxes/actions/workflows/docker-image.yml/badge.svg)\n[![Financial Contributors on Open Collective](https://opencollective.com/openboxes/all/badge.svg?label=financial+contributors)](https://opencollective.com/openboxes) \n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) \n[![Join the chat at https://gitter.im/openboxes/openboxes](https://badges.gitter.im/openboxes/openboxes.svg)](https://gitter.im/openboxes/openboxes?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\nOpenBoxes\n=========\n\n## About\n\nOpenBoxes is an Open Source Inventory and Supply Chain Management System. The initial implementation of OpenBoxes will occur at Partners In Health-supported facilities in Haiti.\n\n## Contributors\n\n### Code Contributors\n\nThis project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].\n\u003ca href=\"https://github.com/openboxes/openboxes/graphs/contributors\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/contributors.svg?width=890\u0026button=true\" /\u003e\u003c/a\u003e\n\n### Financial Contributors\n\nBecome a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/openboxes/contribute)]\n\n#### Individuals\n\n\u003ca href=\"https://opencollective.com/openboxes\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/individuals.svg?width=890\"\u003e\u003c/a\u003e\n\n#### Organizations\n\nSupport this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/openboxes/contribute)]\n\n\u003ca href=\"https://opencollective.com/openboxes/organization/0/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/0/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/1/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/1/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/2/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/2/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/3/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/3/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/4/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/4/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/5/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/5/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/6/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/6/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/7/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/7/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/8/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/8/avatar.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://opencollective.com/openboxes/organization/9/website\"\u003e\u003cimg src=\"https://opencollective.com/openboxes/organization/9/avatar.svg\"\u003e\u003c/a\u003e\n\n## License\n\nCopyright (c) 2012 Partners In Health.  All rights reserved.\nThe use and distribution terms for this software are covered by the\nEclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)\nwhich can be found in the file epl-v10.html at the root of this distribution.\nBy using this software in any fashion, you are agreeing to be bound by\nthe terms of this license.\nYou must not remove this notice, or any other, from this software.\n\n## Deployment Options\n\nWe currently support deploying the OpenBoxes application to DigitalOcean and Azure. We would like to support other deployment options like Amazon Web Services, Vultr, Linode, and others but don't have the resources to build and maintain these deployment options at the moment. If interested in other deployment options, please participate in the [discussion here](https://community.openboxes.com/t/adding-openboxes-to-linode/761) to help us better understand your requirements and expectations regarding deployment. For instance, it would be helpful to hear from service providers who would like to manage multiple customers or users who aren't tech savvy but prefer a certain deployment platform because of its ease of use.\n\n### Deploy to DigitalOcean\n\nThe *Deploy to DigitalOcean* button will redirect you to DigitalOcean, where you will be able to choose \n\nFor more information and step-by-step instructions go to: \nhttps://community.openboxes.com/t/install-openboxes-via-digitalocean-marketplace/311\n\nFor our DigitalOcean marketplace app go to:\nhttps://marketplace.digitalocean.com/apps/openboxes-server?refcode=da4712a483b4\n\n[![Deploy to DigitalOcean](https://www.deploytodo.com/do-btn-blue.svg)](https://marketplace.digitalocean.com/apps/openboxes-server?refcode=da4712a483b4\u0026action=deploy)\n\n### Deploy to Azure\n\n*Deploy to Azure* button will bring you to Azure portal, where after filling a few of the properties you can get your OpenBoxes environment in a matter of minutes. In the Azure setup screen, look at each property's tooltip description to understand its purpose.\n\nFor more information and step-by-step instructions go to:\nhttps://openboxes.atlassian.net/wiki/spaces/OBW/pages/1719435265/Push-button+deployment\n\n*Deploy to Azure* uses the ARM template defined in [openboxes-devops](https://github.com/openboxes/openboxes-devops/tree/master/arm-template) repository.\n\n[![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fopenboxes%2Fopenboxes-devops%2Fmaster%2Farm-template%2Fopenboxes-arm.json)\n\n*Visualize* will open armviz.io to display graph of all of the Azure resources, which the deployment will provision.\n\n[![Visualize](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/visualizebutton.svg?sanitize=true)](http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2Fopenboxes%2Fopenboxes-devops%2Fmaster%2Farm-template%2Fopenboxes-arm.json)\n\n\n## Setup development environment\n\n### Install Dependencies\n\n#### Required\n* [Java 8 (must install Java 8)](https://www.oracle.com/pl/java/technologies/javase/javase8-archive-downloads.html) or via SDK\n* [MySQL 5.7 or MySQL 8.0](https://downloads.mysql.com/archives/community/) or [MariaDB 10.11.4](https://mariadb.com/kb/en/mariadb-10-11-4-release-notes/)\n  * Mac users: 5.7.31 is the latest 5.7.x with a pre-built installer and works fine\n  * Issues related to the MySQL 8 upgrade could be found [here](https://github.com/openboxes/openboxes/issues?q=is%3Aissue+mysql+8+is%3Aopen+)\n* [SDK Man](https://sdkman.io/install)\n* [Grails 3.3.17](https://grails.org/download.html)\n* NPM 6.14.6\n* Node 14+\n\n#### Optional\n* [IntelliJ IDEA](https://www.jetbrains.com/idea/download/)\n* Chrome\n\n### Basic setup instructions for developers\n\nThese instructions are for developers only.  If you are a user/implementer, please check out our \n[Installation](http://docs.openboxes.com/en/latest/installation/) documentation.\n\n#### 1. Install Dependencies\nInstall required dependencies above\n\n#### 2. Install Grails and Java 8*\nCheck that you have SDK Man installed properly (otherwise follow instructions on the skdman install page).\n```\n$ sdk version\nSDKMAN 5.13.2\n```\n\nInstall Grails 3.3.10\n```\n$ sdk install grails 3.3.10\n```\n\nInstall Java 8*\n```\n$ sdk install java 8.0.332-zulu\n```\n\n`*` - in case you have not installed Java yet.\n\n#### 3. Clone repository \nIf you are a core contributor:\n```\ngit clone git@github.com:openboxes/openboxes.git      \n```\nIf you are a not core contributor, fork [openboxes git repository](https://github.com/openboxes/openboxes)\nand replace git url with the one of your forked repository\n```\ngit clone git@github.com:\u003cgitusername\u003e/openboxes.git      \n```\n\n#### 4. Create database \nCreate openboxes database\n```\nmysql -u root -p -e 'create database openboxes default charset utf8;'\n```\n\nCreate openboxes user \n```\nmysql -u root -p -e 'CREATE USER \"openboxes\"@\"localhost\" IDENTIFIED BY \"openboxes\";'\nmysql -u root -p -e 'GRANT ALL ON openboxes.* TO \"openboxes\"@\"localhost\";'\n```\n\n#### 5. Create Openboxes configuration file \nEdit `$HOME/.grails/openboxes-config.properties`\n\n```\n# Database connection settings\n# You can use dataSource.url when you are using a non-dev/non-test database (test-app may not run properly).\n# If you want to run $ grails test-app you should comment out the dataSource.url below and create a new \n# openboxes_test database.  Eventually, we will move to an in-memory H2 database for testing, but we're \n# currently stuck with MySQL because I'm using some MySQL-specific stuff in the Liquibase changesets.  My bad.\n\ndataSource.url=jdbc:mysql://localhost:3306/openboxes\ndataSource.username=openboxes\ndataSource.password=openboxes\n\n# OpenBoxes mail settings (disabled by default)\ngrails.mail.enabled=false\n```\nNOTE: If you are running in development mode with a copy of an existing production database, you will need to\ninstruct the application to not setup test fixtures automatically by uncommenting the above property:\n```\nopenboxes.fixtures.enabled=false\n```\n\n#### 6. Install NPM dependencies\n```    \nnpm config set engine-strict true\nnpm install\n```\n\n#### 7. Build React frontend\nYou can build React frontend with this command, but it will be automatically build when starting the application.\n```    \nnpm run bundle\n```\n\n#### 8. React frontend Hot-Reload\nWhen using this command React fronted will be rebuild automatically after any change, you just need to refresh the \nbrowser to see the effect.\n```    \nnpm run watch\n```\n\n#### 9. Upgrade the project to the currently installed grails version \nEither of the following actions (upgrade, compile, run-app) should generate the all important Spring configuration \n(`/WEB-INF/applicationContext.xml`) and start the dependency resolution process.  \n\n```    \ngrails upgrade\n```\nOR\n\n```    \ngrails compile\n```\n\nThe `grails compile` step is not necessary since `grails run-app` will invoke the compilation step, but it doesn't \nhurt anything.\n\nIf you see any errors, run the command again.  \n\n**IMPORTANT** That last line is important.  Because of some quirkiness with the way older versions of Grails resolve \ndependencies and generates config files, you may need to run either of these commands multiple times in order to \nresolve all dependencies and generate the config files.\n\nOnce the dependency resolution phase has completed, all dependencies will be stored in a local ivy cache (usually \nunder `$USER_HOME/.grails/ivy-cache`).  You do not have to worry about this, just know that the dependencies are now \non your machine and Grails will attempt to find them there before it tries to resolve them in a remote repository. \n\n#### 10. Start application in development mode\nThe application can be run in development mode.  This starts the application running in an instance of Tomcat within \nthe Grails console.\nYou may need to run 'grails run-app' several times in order to download all dependencies.\n```\ngrails run-app\n```\n\n#### 11. Open application in Google Chrome \n```\nhttp://localhost:8080/openboxes\n```\n\n#### 12. Log into OpenBoxes \nYou can use the default accounts (manager:password OR admin:password). Once you are logged in as an admin, you can \ncreate own account. Or you can use the signup form to create a new account.\n\n#### 13. React tests\nTo run new frontend (React) tests type:\n```\nnpm test\n```\n\n#### 14. Grails tests\nTo run Grails tests type:\n```\ngrails test-app\n```\n\n#### 15. React documentation\nStart a style guide dev server:\n```\nnpm run styleguide\n```\nView your style guide in the browser:\n```\nhttp://localhost:6060\n```\n\n## Troubleshooting\n\n### How to Debug \n* Run Grails normally\n    ```\n    grails run-app\n    ```\n* In Intellij navigate to Run \u003e Edit Configurations\n* Create a new Remote Debug Configuration\n    * Name: openboxes-debug\n    * Transport: Socket\n    * Debugger mode: Attach\n    * Host: localhost\n    * Port: 5005\n* Command line arguments should look something like this: \n    ```\n    -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005\n    ```\n\n\n### Problem\n```\nCaused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]\n```\n### Solution\nExecute the grails upgrade command in order to generate the files nece\n```\n$ grails upgrade\n```\nSee the following stackoverflow article:\nhttp://stackoverflow.com/questions/24243027/grails-spring-security-sample-application-not-working\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenboxes%2Fopenboxes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenboxes%2Fopenboxes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenboxes%2Fopenboxes/lists"}