-
-
Notifications
You must be signed in to change notification settings - Fork 403
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* updated documentation with benefits/drawbacks and getting started guide for developers * updated index and added introduction pages to user and developer guides * fixed table of contents * Added placeholder for Mac / Windows installation instructions. * changed copyright year * Made changes to the developer guide documentation * Added contributor documentation * Minor changes to the developer guide * Fixed relative URLs for images * minor changes to documentation * minor changes to configuration document * fixed minor grammar error
- Loading branch information
Showing
16 changed files
with
473 additions
and
117 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# Benefits of using OpenBoxes | ||
|
||
## Free, open-source software | ||
* OpenBoxes is entirely free to use. This can be a significant advantage in the face of limited operational resources. | ||
|
||
## Inventory Visibility & Tracking | ||
* Not only does OpenBoxes allow you to view your inventory at a glance, it provides a historical record of inventory | ||
transactions. This data is invaluable to accurately understand and forecast demand for future planning periods. | ||
* OpenBoxes allows you to set inventory max, min, and reorder points — this allows the user to quickly | ||
assess if supplies are overstocked, at appropriate stock levels, or in danger of being out of | ||
stock if not reordered soon. | ||
* OpenBoxes allows you to record the movement of goods from multiple sources and across different | ||
levels of the organization: | ||
* From central warehouses to your facility depot | ||
* From other hospital facilities to your facility depot | ||
* From vendor warehouses to your facility depot | ||
* From one warehouse to other warehouses within your network | ||
* From your facility depot to pharmacies and wards within your facility | ||
* Record lot numbers for items that have an expiry date to help identify stock that has expired or is about to expire. Lot numbers | ||
also provide a means to locate stock when a manufacturer recalls a certain item. | ||
* Record serial numbers for items that require lifecycle management (including assets such as computers, routers, hospital beds). | ||
* Upload and manage documents for each product (e.g. data sheets, product manuals, hazardous material handling requirements). | ||
|
||
## Shipping Documents | ||
* OpenBoxes offers the user the ability to produce Certificates of Donation, Packing Lists, and other documents | ||
required for shipping with just a few mouse clicks. | ||
* Documents can also be uploaded to OpenBoxes to allow operational leadership to save all the | ||
relevant shipping documents to a particular shipment within the system. | ||
|
||
## Grant Compliance | ||
* Certain grants require that inventory be tracked in very specific ways. Using OpenBoxes comprehensively would allow a | ||
site to account for the movement of goods bought with grant monies from vendor, to country, to facility — and the | ||
consumption of those items at a facility level. | ||
|
||
## Integration with Demand & Forecasting software | ||
* While the OpenBoxes stock usage history can provide a high-level picture of future demand for any particular item, | ||
integrating with demand forecasting software will allow those processes to be automated and more accurate. | ||
|
||
## Integration with Data Replication software | ||
* While OpenBoxes supports a hierachy of locations, sometimes it's not possible for all locations to access a | ||
centralized server due to power and Internet limitations at that site. In this case, you can manage multiple server | ||
installations (a central OpenBoxes server for most locations with good Internet) and separate OB server for each | ||
location that does not have a reliable connection to the Internet. Using [SymmetricDS](http:https://symmetricds.org), | ||
you can bi-directionally sync all data changes between each of these servers. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,113 @@ | ||
# Configuration | ||
|
||
## openboxes-config.properties (sample) | ||
``` | ||
# Database connection settings | ||
dataSource.url=jdbc:mysql:https://localhost:3306/openboxes | ||
dataSource.username=openboxes | ||
dataSource.password=openboxes | ||
# OpenBoxes administrator emails | ||
[email protected],[email protected] | ||
# Only used on local machines when dataSource.url is overriden | ||
openboxes.fixtures.enabled=false | ||
# OpenBoxes Identifier Formats | ||
# N: Numeric, L: Letter, A: Alphanumeric | ||
# For example, NNNLLL might lead to the following random identifier being generated 123ABC. | ||
openboxes.identifier.order.format = NNNLLL | ||
openboxes.identifier.product.format = LLNN | ||
openboxes.identifier.requisition.format = NNNLLL | ||
openboxes.identifier.shipment.format = NNNLLL | ||
openboxes.identifier.transaction.format = AAA-AAA-AAA | ||
# OpenBoxes Identifier Characters | ||
openboxes.identifier.numeric = 0123456789 | ||
openboxes.identifier.alphabetic = ABCDEFGHJKMNPQRSTUVXYZ | ||
openboxes.identifier.alphanumeric = 0123456789ABCDEFGHJKMNPQRSTUVWXYZ | ||
# Report logo header (not supported yet) | ||
# openboxes.report.header.logo = file:https:///home/jmiranda/Desktop/images.jpg | ||
openboxes.report.header.logo = http:https://localhost:8080/openboxes/images/hands.jpg | ||
openboxes.report.header.title = OpenBoxes | ||
# OpenBoxes Error Email feature (bug report) | ||
# Use your own address if you want to handle bug reports yourself. Otherwise leave as-is and OpenBoxes | ||
# support these support requests. | ||
openboxes.mail.errors.enabled = true | ||
openboxes.mail.errors.recipients = [email protected] | ||
# OpenBoxes Barcode Scanner detection | ||
# NOTE: This feature is an experimentation. If enabled you can scan barcode on any page and the app will | ||
# try to locate an object (product, shipment, etc) that is associated with that barcode. If an object is | ||
# found, the app just redirects to the details page for that database object. In the future, I'm hoping to | ||
# improve the barcode scanner to integrate with workflows (e.g. add item to purchase order). | ||
openboxes.scannerDetection.enabled = true | ||
# Used to specify default roles for newly registered users (implies automatic activation) | ||
#openboxes.signup.defaultRoles=ROLE_MANAGER,ROLE_ASSISTANT | ||
# General mail settings | ||
grails.mail.enabled=true | ||
grails.mail.host=<smtp server> | ||
grails.mail.port=<smtp port> | ||
grails.mail.username=<username> | ||
grails.mail.password=<password> | ||
grails.mail.from=<from address> | ||
# Example of general mail settings | ||
#[email protected] | ||
#grails.mail.host=smtp.gmail.com | ||
#grails.mail.port=465 | ||
#[email protected] | ||
#grails.mail.password=password | ||
#grails.mail.props = ["mail.smtp.auth":"true", "mail.smtp.socketFactory.port":"465", "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory", "mail.smtp.socketFactory.fallback":"false"] | ||
# Error email properties | ||
mail.error.debug=true | ||
mail.error.server=<smtp server> | ||
mail.error.username=<smtp username> | ||
mail.error.password=<smtp password> | ||
mail.error.port=<smtp port> | ||
mail.error.to=<to address> | ||
# Example of error email properties | ||
#mail.error.server=localhost | ||
#mail.error.server=smtp.pih.org | ||
#mail.error.username=openboxes | ||
#mail.error.password=password | ||
#[email protected] | ||
#Possible values: default|dynamic|alternate | ||
mail.error.appender=dynamic | ||
# OpenBoxes > Choose Location > Required Activities | ||
# The supported activities required in order for a location a location to show up on Choose Location page. | ||
# Possible values: MANAGE_INVENTORY, PLACE_ORDER, PLACE_REQUEST, FULFILL_ORDER, FULFILL_REQUEST, SEND_STOCK, RECEIVE_STOCK, EXTERNAL | ||
openboxes.chooseLocation.requiredActivities = MANAGE_INVENTORY | ||
# Amazon web service (not supported yet) | ||
aws.s3.domain=s3.amazonaws.com | ||
aws.s3.accessKey=0123456789ABCDEFG | ||
aws.s3.secretKey=0123456789ABCDEFGHIJKLMNOPQRS | ||
aws.s3.bucketName=files | ||
# Google Product Search (no longer supported -- Google deprecated API) | ||
# URL: https://www.googleapis.com/shopping/search/v1/public/products?key=${google.productSearch.key}&country=US&q=${q}&alt=scp&crowdBy=brand:1 | ||
google.api.key=<no longer supported> | ||
# Hipaaspace.com NDC Lookup (not supported yet) | ||
hipaaspace.api.key=<not supported yet> | ||
# RXNorm (not supported yet) | ||
# URL: http:https://rxnav.nlm.nih.gov/REST/ | ||
rxnorm.api.key=<not supported yet> | ||
# Google analytics | ||
google.analytics.enabled = false | ||
google.analytics.webPropertyID = <enter your google analytics property ID> | ||
``` | ||
|
||
## Configuration file location | ||
As mentioned in the installation instructions, you can override application configuration properties by creating a file called `$USER_HOME/.grails/openboxes-config.properties`. If you are a developer, `$USER_HOME` should resolve to your home directory (e.g. `/home/jmiranda` on Ubuntu). If you are deploying the application to Tomcat, the file is usually located under the `TOMCAT_HOME/.grails/openboxes-config.properties`. | ||
|
||
|
@@ -92,110 +202,3 @@ openboxes.identifier.shipment.format = NNNLLL | |
openboxes.identifier.transaction.format = AAA-AAA-AAA | ||
``` | ||
|
||
## Example openboxes-config.properties | ||
``` | ||
# OpenBoxes administrator emails | ||
[email protected],[email protected] | ||
# Only used on local machines when dataSource.url is overriden | ||
openboxes.fixtures.enabled=false | ||
# OpenBoxes Identifier Formats | ||
# N - Numeric, L - Letter, A - Alphanumeric | ||
openboxes.identifier.order.format = NNNLLL | ||
openboxes.identifier.product.format = LLNN | ||
openboxes.identifier.requisition.format = NNNLLL | ||
openboxes.identifier.shipment.format = NNNLLL | ||
openboxes.identifier.transaction.format = AAA-AAA-AAA | ||
# OpenBoxes Identifier Characters | ||
openboxes.identifier.numeric = 0123456789 | ||
openboxes.identifier.alphabetic = ABCDEFGHJKMNPQRSTUVXYZ | ||
openboxes.identifier.alphanumeric = 0123456789ABCDEFGHJKMNPQRSTUVWXYZ | ||
# Report logo header (not supported yet) | ||
# openboxes.report.header.logo = file:https:///home/jmiranda/Desktop/images.jpg | ||
openboxes.report.header.logo = http:https://localhost:8080/openboxes/images/hands.jpg | ||
openboxes.report.header.title = Last Mile Health | ||
# OpenBoxes Error Email feature (bug report) | ||
# Use your own address if you want to handle bug reports yourself. Otherwise leave as-is and OpenBoxes | ||
# support these support requests. | ||
openboxes.mail.errors.enabled = true | ||
openboxes.mail.errors.recipients = [email protected] | ||
# OpenBoxes Barcode Scanner detection | ||
# | ||
# NOTE: This feature is an experimentation. If enabled you can scan barcode on any page and the app will | ||
# try to locate an object (product, shipment, etc) that is associated with that barcode. If an object is | ||
# found, the app just redirects to the details page for that database object. In the future, I'm hoping to | ||
# improve the barcode scanner to integrate with workflows (e.g. add item to purchase order). | ||
openboxes.scannerDetection.enabled = true | ||
# Used to specify default roles for registered users (implies automatic activation) | ||
#openboxes.signup.defaultRoles=ROLE_MANAGER,ROLE_ASSISTANT | ||
# Database connection settings | ||
dataSource.url=jdbc:mysql:https://localhost:3306/openboxes?autoReconnect=true&zeroDateTimeBehavior=convertToNull&sessionVariables=storage_engine=InnoDB | ||
dataSource.username=openboxes | ||
dataSource.password=openboxes | ||
# General mail settings | ||
grails.mail.enabled=true | ||
grails.mail.host=<smtp server> | ||
grails.mail.port=<smtp port> | ||
grails.mail.username=<username> | ||
grails.mail.password=<password> | ||
grails.mail.from=<from address> | ||
# Example of general mail settings | ||
#[email protected] | ||
#grails.mail.host=smtp.gmail.com | ||
#grails.mail.port=465 | ||
#[email protected] | ||
#grails.mail.password=password | ||
#grails.mail.props = ["mail.smtp.auth":"true", "mail.smtp.socketFactory.port":"465", "mail.smtp.socketFactory.class":"javax.net.ssl.SSLSocketFactory", "mail.smtp.socketFactory.fallback":"false"] | ||
# Error email properties | ||
mail.error.debug=true | ||
mail.error.server=<smtp server> | ||
mail.error.username=<smtp username> | ||
mail.error.password=<smtp password> | ||
mail.error.port=<smtp port> | ||
mail.error.to=<to address> | ||
# Example of error email properties | ||
#mail.error.server=localhost | ||
#mail.error.server=smtp.pih.org | ||
#mail.error.username=openboxes | ||
#mail.error.password=password | ||
#[email protected] | ||
#Possible values: default|dynamic|alternate | ||
mail.error.appender=dynamic | ||
# OpenBoxes > Choose Location > Required Activities | ||
# The supported activities required in order for a location a location to show up on Choose Location page. | ||
# Possible values: MANAGE_INVENTORY, PLACE_ORDER, PLACE_REQUEST, FULFILL_ORDER, FULFILL_REQUEST, SEND_STOCK, RECEIVE_STOCK, EXTERNAL | ||
openboxes.chooseLocation.requiredActivities = MANAGE_INVENTORY | ||
# Amazon web service (not supported yet) | ||
aws.s3.domain=s3.amazonaws.com | ||
aws.s3.accessKey=0123456789ABCDEFG | ||
aws.s3.secretKey=0123456789ABCDEFGHIJKLMNOPQRS | ||
aws.s3.bucketName=files | ||
# Google Product Search (no longer supported -- Google deprecated API) | ||
# URL: https://www.googleapis.com/shopping/search/v1/public/products?key=${google.productSearch.key}&country=US&q=${q}&alt=scp&crowdBy=brand:1 | ||
google.api.key=<no longer supported> | ||
# Hipaaspace.com NDC Lookup (not supported yet) | ||
hipaaspace.api.key=<not supported yet> | ||
# RXNorm (not supported yet) | ||
# URL: http:https://rxnav.nlm.nih.gov/REST/ | ||
rxnorm.api.key=<not supported yet> | ||
# Google analytics | ||
google.analytics.enabled = false | ||
google.analytics.webPropertyID = <enter your google analytics property ID> | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# Contributing | ||
There are many ways to contribute to OpenBoxes, and not just through making changes to the source code. | ||
Here are a few examples of areas we need a considerable amount of help. | ||
|
||
* Develop a new feature | ||
* Patch a bug / hotfix | ||
* Improve translations | ||
* Improve documentation | ||
* Write unit, integration, functional tests | ||
|
||
## Procedure | ||
|
||
1. Find or create an issue for the feature or bug in [GitHub Issues.](https://github.com/openboxes/openboxes/issues) | ||
|
||
1. Fork the [openboxes/openboxes](https://github.com/openboxes/openboxes) GitHub repository. ![Fork Repo](../img/fork-repo.png) | ||
|
||
1. Create a branch for your changes (create a `hotfix` for bugs if working off `master` or a `feature` branch for | ||
features if working off `develop`). **NOTE:** The use of the `hotfix` or `develop` prefix will help us identify which | ||
branch we need to merge your changes into. | ||
|
||
git checkout -b hotfix/123-short-summary-of-issue | ||
git checkout -b feature/123-short-summary-of-issue | ||
|
||
1. Implement your feature or hotfix in your new branch. | ||
|
||
1. Write a test for your changes (if you have trouble with this step please comment in your ticket that you'd like some help). **NOTE:** Tests are required for features and bug fixes, but not for documentation and translation changes. | ||
|
||
1. Run tests. | ||
|
||
grails test-app unit: | ||
grails test-app integration: | ||
|
||
1. Commit your changes | ||
|
||
git commit -m "Implemented feature #123" | ||
|
||
1. Push to your fork. | ||
|
||
git push | ||
1. Submit a pull request. | ||
|
Oops, something went wrong.