3.0.0-beta - 28 October 2016

Release Notes

The OpenLMIS Community is pleased to announce the beta release of OpenLMIS 3.0!

The initial offering to come out of the re-architecture effort for OpenLMIS, 3.0.0-beta contains one slice of functionality, Requisitions, based on an all-new micro-service architecture. This release is the first to utilize the new architecture and is a bold step in the direction of “shared investment, shared benefit” that is the rallying cry of the OpenLMIS Community. 3.0 Beta is a proof of concept for this architecture and is not a feature-complete release. It does not contain every feature that the eventual 3.0 OpenLMIS stable release will. Further features will be added to the system as we work toward the full 3.0 release scheduled for the end of February, 2017. Please reference the Living Product Roadmap for the high-level estimated release schedule through version 3.3.

Background

Early contributions to OpenLMIS by PATH, USAID, Rockefeller Foundation, the Bill & Melinda Gates Foundation, the UN Commission on Life-Saving Commodities, JSI, ThoughtWorks and others first helped shape the product and define its original code base (v.0.9) for deployments in Tanzania and Zambia in late 2013 under the name “eLMIS.” In 2015, eLMIS was also deployed in Cote D’Ivoire, and OpenLMIS software development continued with the v1.0 release, which was deployed by VillageReach to manage vaccine distribution in Mozambique and Benin.

As new installations of OpenLMIS were developed and deployed, a key challenge was the inability to easily extend the code base, which resulted in a “code fork” between the early implementations and the later v1.0 implementations. In an effort to address the fork the community agreed to begin working toward a common master branch, and at the September 2015 all-community meeting, the community also agreed that a single, “core” code line was required. This effort to re-work the OpenLMIS code is referred to as the "Re-Architecture" of OpenLMIS.

VillageReach and partners have worked to make the re-architecture process as transparent as possible through clear documentation available on the OpenLMIS Wiki. The OpenLMIS Re-Architecture Acceleration Brief outlines the plan and approach for this effort, the high level architecture is captured at Architecture Overview (v3), and the Re-Architecture Concept Note provides a detailed, clear explanation of the re-architecture plan and approaches.

OpenLMIS is open source, and all source code for this 3.0.0-beta release is available on GitHub for collaboration: https://github.com/OpenLMIS/openlmis-blue. That repository contains the reference distribution, and each service lives in its own GitHub repository as well.

Key Objectives

OpenLMIS 3.0 is built with an all-new architecture that better supports customizations and extensions. The goal is to enable multiple OpenLMIS implementations in different countries while still sharing one global, open source codebase. This concept is at the heart of shared investment, shared benefit.  3.0.0-beta may look similar to version 2, but under the hood the architecture and technology are a leap forward. 

Specifically, the key goals of the 3.0 Beta are to demonstrate:

  • New micro-services architecture
  • Ability to support extensions
  • Basic feature set within requisitioning 

Again, the 3.0.0-Beta release is not a feature-complete release, meaning it does not contain every feature that 3.0 will contain. Instead, it focuses on demonstrating one slice of functionality, requisitions, based on an all-new micro-service architecture. Further features will be added to the system as we work towards the 3.0 release. 

New Architecture and Build Environment 

OpenLMIS 3.0 is built with an all-new architecture that better supports customizations and extensions. The goal is to enable different OpenLMIS implementations in different countries while still sharing one global, open source codebase.3.0 Beta may look similar to version 2, but under the hood the architecture and technology are a leap forward. Developers interested in following along in our progress are welcome to visit our Developer Documentation Guide and attend our Technical Committee calls.

Micro-services

OpenLMIS used to be one monolithic system, and it is now split into independent services that provide RESTful APIs for different functional areas. 3.0 Beta already provides services for Requisition, Reference data, Notifications, and Auth, which is powered by OAuth 2. The services find each other using Service Discovery, powered by Consul.

Each service has its own API with a RAML specification and automatically-generated online API documentation: http://openlmis.readthedocs.io/en/latest/api/

The database storage for each service is separated into its own schema with its own ERD diagram automatically generated: http://openlmis.readthedocs.io/en/latest/erd/ (drill in to see any Live ERD)

All the services are bundled together in a distribution code-named 'Blue', which includes: all back-end APIs; an AngularJS web application providing the front-end UI; and an NGINX proxy to make it simple to route to all the services via one URL.The new micro-services architecture of OpenLMIS 3 allows individual components to be used, customized or extended in a modular way. Learn more in the wiki (includes architectural diagrams): https://openlmis.atlassian.net/wiki/pages/viewpage.action?pageId=51019809

Docker Containers

Version 3 of OpenLMIS is built with containers and ready for the cloud. Each service runs in its own Docker container, and Docker Compose ties multiple services together with other third-party components like Consul and NGINX. Every OpenLMIS 3 service and the Reference UI are published to Docker Hub as a deployable image. The 'Blue' distribution uses Docker Compose to allow you to swap in or out components and run an entire OpenLMIS system. Containerization makes it easier for developers to get involved in OpenLMIS and makes deployments to production more predictable and repeatable.

Extensibility

Two approaches to extensibility are supported along with examples and documentation: First, Extension Points are built into services in areas where we expect extension and customization will be needed. Second, individual micro-services could be added in or swapped out in order to provide a new or altered area of functionality. The team has built working examples and documentation of each, and will continue to include extension points into areas of functionality as they are built. To learn more about the OpenLMIS 3.0 extension architecture and use cases, see: https://openlmis.atlassian.net/wiki/x/IYAKAw

For an example extension point and documentation, see: https://github.com/OpenLMIS/openlmis-example#extension-points-and-extension-modules

OAuth 2 Compatibility

OpenLMIS 3.0.0-Beta implements OAuth so that the product can easily integrate with other systems in a single sign-on environment.

Automated Testing

In a micro-service world, automated testing is even more important. OpenLMIS 3.0 Beta includes new patterns and tools for automated test coverage at all levels. Unit tests continue to be the foundation of our automated testing strategy, as they were in previous versions of OpenLMIS. But 3.0 Beta introduces a new focus on integration tests, component tests, and contract tests (using Cucumber).Test coverage for unit and integration tests is being tracked automatically using Sonar (see http://sonar.openlmis.org). Check the status of test coverage at: http://sonar.openlmis.org/

CI/CD Pipelines

Continuous Integration and Deployment have also seen significant investment in 3.0 Beta. Jenkins is used to automate builds and deployments trigged by code commits. The CI/CD process includes running automated tests, generating ERDs, publishing to Docker Hub, deploying to Test and UAT servers, and more. Furthermore, documentation of these build pipeline allows any OpenLMIS implementation to close this configuration and employ CI/CD best practices. See the status of all builds online: http://build.openlmis.org/ 

Learn more about OpenLMIS CI/CD on the wiki: https://openlmis.atlassian.net/wiki/pages/viewpage.action?pageId=87195734

Reference User Interface

The reference UI is one single-page application built with AngularJS, and it is structured to allow extension and customization. The router allows areas of functionality to be added or removed and the menu dynamically includes them.

Updated Product Model

The new product model incorporates lessons learned from previous versions of OpenLMIS in the area of stock management and local fulfillment. It also uses the GS1 logical model and implements supply chain best practices (such as support for lots, packaging, GTINs, etc). Read more and see diagrams of the new Product Model on the wiki: Medical Commodities: OpenLMIS Model for GS1

And More

We've also invested in other areas of the platform that are important for OpenLMIS to be a trusted, global platform: security, localization, and over 240 JIRA tickets in total. Follow along in JIRA: (https://openlmis.atlassian.net/projects/OLMIS/issues/OLMIS-400?filter=allopenissues) ...or get involved in the committees or on the developer email list (see http://openlmis.org/openlmis-community/).

UI Functionality within Requisitions

The 3.0.0-beta release demonstrates the fundamentals of the system's ability to support various levels of configuration with users, products, programs, facilities, geographic levels/zones, and more. Within the new reference User Interface, you can log in as an administrator and step through the main process flow for requesting products, within a program, and moving that requisition to approval.

As a “administrator” user, I will be able to:

  • Login and logout
  • Initiate a regular requisition and be able to select a program, type (regular) and current processing period.
  • Populate a requisition form (create requisition view) based on a template. Some basic data entry validations implemented. The form includes, header, list of products, seve columns from the requisition template.
    • Beginning Balance
    • Total Received Quantity
    • Total Losses / Adjustments 
    • Total Consumed Quantity (default user input, but can also be calculated)
    • Stock on Hand (calculated)
    • Requested Quantity 
    • Requested Quantity Explanation 
  • Delete a requisition
  • Save a requisition
  • Submit a requisition
  • Authorize a requisition
  • View of list of requisitions waiting for approval
  • Approve a requisition
    • The approval form includes, two columns from the template (Approved Quantity and Remarks)
  • Reject a requisition

Implemented and Available via API

In addition to features available within the UI, there are also features implemented and available via API endpoints. For the entire list of current APIs, please visit: http://openlmis.readthedocs.io/en/latest/api/index.html

  • Convert approved requisitions to orders
  • View orders
  • Generate an order file based on an order template
  • Reset password functionality
  • Create, read, update delete reference data

Tickets Completed in 3.0.0-beta

3.0 Beta Scope (OpenLMIS JIRA Filter)

Issue TypeEpic KeySummary
StoryCI/CDOLMIS-995Organize jobs, pipelines and monitors
StoryCI/CDOLMIS-994Configure deployment environments, create deployment scripts and jobs
StoryCI/CDOLMIS-993Reorganize/cleanup Jenkins jobs
TaskCI/CDOLMIS-955Create CI/CD Technical Specification
TaskCI/CDOLMIS-954Analysis of Current Build Tools, Processes and Flows
StoryCI/CDOLMIS-860Create an automation testing workflow and lay a foundation for it (contract tests in CI)
StoryCI/CDOLMIS-858CI server space, memory running low
StoryConfigurationOLMIS-871Create an email notification service
StoryConfigurationOLMIS-730Reference Data should be Immutable
StoryConfigurationOLMIS-700Identify facilities that do not have access to OpenLMIS
StoryConfigurationOLMIS-602Seed Reference Data service
StoryConfigurationOLMIS-429Facility approved products
StoryConfigurationOLMIS-428Supply Lines
StoryConfigurationOLMIS-427Supervisory groups
StoryConfigurationOLMIS-425Geographic zones
StoryConfigurationOLMIS-424Supervisory nodes
StoryConfigurationOLMIS-423Users
StoryConfigurationOLMIS-420Basic Rights and Roles API
StoryConfigurationOLMIS-415Create a Facility
StoryConfigurationOLMIS-387Create a Program
StoryContract testsOLMIS-1111Contract test for initiate a Requisition
StoryContract testsOLMIS-1097Contract test for create Facility Type
TaskGS1 SupportOLMIS-666Define GS1 Requirements for Product Data Model
TaskModular Architecture and Extension FrameworkOLMIS-1057Set up compose files to allow running singular services properly within our platform
StoryModular Architecture and Extension FrameworkOLMIS-1055Refactor code in Services so they do not call each other directly
TaskModular Architecture and Extension FrameworkOLMIS-1052Refactor ITs that require external APIs to work
TaskModular Architecture and Extension FrameworkOLMIS-1044Set up initial service discovery, and hook things up at openlmis-blue
StoryModular Architecture and Extension FrameworkOLMIS-911Create UML for all of reference data & remove SDR
StoryModular Architecture and Extension FrameworkOLMIS-872Fix search endpoints to use query parameters
StoryModular Architecture and Extension FrameworkOLMIS-864Implement Product Model
StoryModular Architecture and Extension FrameworkOLMIS-862Revise relation annotations between models
StoryModular Architecture and Extension FrameworkOLMIS-849Spike: what can OpenLMIS use from MOTECH?
StoryModular Architecture and Extension FrameworkOLMIS-841Add Server Service Discovery
StoryModular Architecture and Extension FrameworkOLMIS-804Create design proposal from API spec - Inventory
StoryModular Architecture and Extension FrameworkOLMIS-803Create design proposal from API spec - Orders
StoryModular Architecture and Extension FrameworkOLMIS-783Extension modules - design & example
StoryModular Architecture and Extension FrameworkOLMIS-766Web service specification/documentation
StoryModular Architecture and Extension FrameworkOLMIS-763Reference Data Service
StoryModular Architecture and Extension FrameworkOLMIS-750Add schema to service template and children
StoryModular Architecture and Extension FrameworkOLMIS-671Spike: Investigate use of Swagger for interface definition
StoryModular Architecture and Extension FrameworkOLMIS-669Configure log level for a Docker container
StoryModular Architecture and Extension FrameworkOLMIS-668Spike: Authentication across services
StoryModular Architecture and Extension FrameworkOLMIS-667Add Spring Security to Service Example
StoryModular Architecture and Extension FrameworkOLMIS-665Service Example: add REST controls
TaskModular Architecture and Extension FrameworkOLMIS-664ID strategy?
StoryModular Architecture and Extension FrameworkOLMIS-663Integration testing of Service & DB
StoryModular Architecture and Extension FrameworkOLMIS-662API Data Validation
StoryModular Architecture and Extension FrameworkOLMIS-596Spike: convention for OpenLMIS environment/options
StoryModular Architecture and Extension FrameworkOLMIS-592Establish i18n conventions
StoryModular Architecture and Extension FrameworkOLMIS-590Spike: standardized error handling
StoryModular Architecture and Extension FrameworkOLMIS-580Create Service Template
StoryModular Architecture and Extension FrameworkOLMIS-546Web Security
StoryModular Architecture and Extension FrameworkOLMIS-795Create reference distribution
StoryModular Architecture and Extension FrameworkOLMIS-726Update existing domain objects to use UUID
TaskOpenLMIS Dev and Build infrastructureOLMIS-1079Get Blue in CD pipeline
TaskOpenLMIS Dev and Build infrastructureOLMIS-1071Plan steps to roll the 3.0 Beta release
TaskOpenLMIS Dev and Build infrastructureOLMIS-1064Generate Reference Data ERD
TaskOpenLMIS Dev and Build infrastructureOLMIS-1053Set default mailing properties for notification service
StoryOpenLMIS Dev and Build infrastructureOLMIS-1049Spec CI/CD that Utilizes AWS Best Practices using Docker
TaskOpenLMIS Dev and Build infrastructureOLMIS-1042Update RAML for Products
TaskOpenLMIS Dev and Build infrastructureOLMIS-1019Re-activate spring security on Reference Data service
TaskOpenLMIS Dev and Build infrastructureOLMIS-1018Re-write de-activated Reference Data integration tests
TaskOpenLMIS Dev and Build infrastructureOLMIS-1017Enable developers to write Component tests
StoryOpenLMIS Dev and Build infrastructureOLMIS-977Remove Stock and its related code from requisition service
StoryOpenLMIS Dev and Build infrastructureOLMIS-968Fix table names to conform to the code style guide
StoryOpenLMIS Dev and Build infrastructureOLMIS-967Change line items from sets to lists
TaskOpenLMIS Dev and Build infrastructureOLMIS-963Rename *Line classes to *LineItem where it makes sense
StoryOpenLMIS Dev and Build infrastructureOLMIS-913Design seed data levels
StoryOpenLMIS Dev and Build infrastructureOLMIS-896Document Testing Strategy
StoryOpenLMIS Dev and Build infrastructureOLMIS-895Clean up and consolidate readmes
StoryOpenLMIS Dev and Build infrastructureOLMIS-893Publish ERD as a build artifact
StoryOpenLMIS Dev and Build infrastructureOLMIS-873Add Swagger for openlmis-auth
StoryOpenLMIS Dev and Build infrastructureOLMIS-853Build information in every service/distribution
StoryOpenLMIS Dev and Build infrastructureOLMIS-851Turn checkstyle rule severity to error
StoryOpenLMIS Dev and Build infrastructureOLMIS-848Sonar: integration tests not included in coverage
StoryOpenLMIS Dev and Build infrastructureOLMIS-847Demo data
StoryOpenLMIS Dev and Build infrastructureOLMIS-846Generate static (offline) documentation for services' APIs
StoryOpenLMIS Dev and Build infrastructureOLMIS-823Publish a complete v3 OpenLMIS deployment to an AWS server
StoryOpenLMIS Dev and Build infrastructureOLMIS-822Upgrade Jenkins to version 2
StoryOpenLMIS Dev and Build infrastructureOLMIS-802Add API guides to style guide
StoryOpenLMIS Dev and Build infrastructureOLMIS-796Document IDL process for development
StoryOpenLMIS Dev and Build infrastructureOLMIS-765Integrate Transifex for translations
StoryOpenLMIS Dev and Build infrastructureOLMIS-761Reverse proxy server deployment (nginx)
StoryOpenLMIS Dev and Build infrastructureOLMIS-759ERD generation
StoryOpenLMIS Dev and Build infrastructureOLMIS-753Add PMD ruleset and integrate PMD with the build
StoryOpenLMIS Dev and Build infrastructureOLMIS-738Specify and implement log format
StoryOpenLMIS Dev and Build infrastructureOLMIS-735Connect Postgres logs to rsyslog container
StoryOpenLMIS Dev and Build infrastructureOLMIS-732Sonar: projects for current v3 repositories
StoryOpenLMIS Dev and Build infrastructureOLMIS-724Install fisheye on CI server
StoryOpenLMIS Dev and Build infrastructureOLMIS-722Add Google Java checkstyle to service template and children
StoryOpenLMIS Dev and Build infrastructureOLMIS-673Publish documentation
StoryOpenLMIS Dev and Build infrastructureOLMIS-672Install ci-game on Jenkins
StoryOpenLMIS Dev and Build infrastructureOLMIS-657Service template: connect JDK debug
StoryOpenLMIS Dev and Build infrastructureOLMIS-656Docker Dev: hand db connection credentials to container
StoryOpenLMIS Dev and Build infrastructureOLMIS-652Evaluate and select code review tool
StoryOpenLMIS Dev and Build infrastructureOLMIS-651Jenkins: build jobs for current v3 repositories
StoryOpenLMIS Dev and Build infrastructureOLMIS-598Unit test framework setup/exemplar
StoryOpenLMIS Dev and Build infrastructureOLMIS-591RESTful web service testing setup
StoryOpenLMIS Dev and Build infrastructureOLMIS-582Java development environment in Docker
StoryOpenLMIS Dev and Build infrastructureOLMIS-191Jenkins: enable more than one executor
StoryOpenLMIS Dev and Build infrastructureOLMIS-1143Trial load of demo data into UAT and Test environments
StoryOpenLMIS Dev and Build infrastructureOLMIS-1093Revise the demo data for publishing the 3.0 Beta
TaskOpenLMIS Dev and Build infrastructureOLMIS-1076Choose and document browsers/devices and languages for QA testing
StoryOpenLMIS Dev and Build infrastructureOLMIS-840Publish requisition and auth services to dockerhub
StoryOpenLMIS Dev and Build infrastructureOLMIS-835Design Reviews - Sprint 4
StoryOpenLMIS Dev and Build infrastructureOLMIS-806Improve IDL Related Functionality
StoryOpenLMIS Dev and Build infrastructureOLMIS-797Design Reviews
TaskOpenLMIS Dev and Build infrastructureOLMIS-723Increase disk space on CI server
StoryOpenLMIS Dev and Build infrastructureOLMIS-676Research and recommend centralized logging approach
StoryOpenLMIS Dev and Build infrastructureOLMIS-555Multi_language Support
TaskOrder ExportOLMIS-1047Refactor configuration of order file template
StoryOrder ExportOLMIS-988View list of approved requisitions ready for order conversion
StoryOrder ExportOLMIS-965Configure order file template
StoryOrder ExportOLMIS-401Configure Order Number for Export
StoryOrder ExportOLMIS-227Assign supplying depot to requisitions for "Convert to Order"
StoryOrders (Local Fill)OLMIS-641Ability to View Orders via endpoints
StoryOrders (Local Fill)OLMIS-240Change order status to shipped via endpoints
TaskOrders (PoD)OLMIS-1006PoD improvements: add ability to download, refactor behavior, add messages
StoryOrders (PoD)OLMIS-861PoD customer configuration
StoryOrders (PoD)OLMIS-805Ability to download a CSV file of the order
StoryOrders (PoD)OLMIS-675Spike: draft schema and API for Products
StoryOrders (PoD)OLMIS-660Add Line Items to an existing Order
StoryOrders (PoD)OLMIS-637Print Proof of Deliver (POD)
StoryOrders (PoD)OLMIS-618Order creation (for Products)
StoryOrders (PoD)OLMIS-605View Approved Orders
TaskReference UI ModuleOLMIS-1173Fix home page layout
StoryReference UI ModuleOLMIS-1150Title heading standarization.
StoryReference UI ModuleOLMIS-1149Application border
StoryReference UI ModuleOLMIS-1128404 page is shown when link (or content) not found
StoryReference UI ModuleOLMIS-1046Create a production docker image for requisition-refUI
StoryReference UI ModuleOLMIS-1045Development and production server loads single index.html page
StoryReference UI ModuleOLMIS-1040User's authentication is checked on page load
StoryReference UI ModuleOLMIS-1030Build process to compile and compress JS/CSS
StoryReference UI ModuleOLMIS-1029Add Bower for front-end library management
StoryReference UI ModuleOLMIS-925User authenticates using Auth Service (OAuth) in Requisition-UI
StoryReference UI ModuleOLMIS-859Describe forms in OpenLMIS
StoryReference UI ModuleOLMIS-793Create Living Styleguide for Reference UI (aka Component-based Development)
StoryReference UI ModuleOLMIS-1033Configurable top nav area
StoryRequisition - Approval(s)OLMIS-226Convert approved requisition to orders
StoryRequisition - Approval(s)OLMIS-224Reject an R&R
StoryRequisition - Approval(s)OLMIS-223Review and approve submitted requisitions
StoryRequisition - Authorization(s)OLMIS-642Authorize a requisition
StoryRequisition - Authorization(s)OLMIS-229View requisitions based on selected facility, program, and date filters
TaskRequisition - ConfigurationOLMIS-998Add template fields from v2 to the requisition template
StoryRequisition - ConfigurationOLMIS-875Requisition group members
StoryRequisition - ConfigurationOLMIS-874Requisition Group
StoryRequisition - ConfigurationOLMIS-868Configure Approved Quantity
StoryRequisition - ConfigurationOLMIS-838Configure Stock on Hand
StoryRequisition - ConfigurationOLMIS-836Revisit existing API in requisitions and add missing RAML
StoryRequisition - ConfigurationOLMIS-821Configure 'Requested Quantity Explanation' attribute
StoryRequisition - ConfigurationOLMIS-820Configure 'Requested Quantity' attribute
StoryRequisition - ConfigurationOLMIS-817Rename column headers/attributes
StoryRequisition - ConfigurationOLMIS-816Configure Remarks
StoryRequisition - ConfigurationOLMIS-815Configure Total Losses / Adjustments in Requisition Template
StoryRequisition - ConfigurationOLMIS-814Configure Total Consumed Quantity
StoryRequisition - ConfigurationOLMIS-813Configure Total Received Quantity attribute
StoryRequisition - ConfigurationOLMIS-812Configure Beginning Balance attribute
StoryRequisition - ConfigurationOLMIS-811Require display of the product attribute
StoryRequisition - ConfigurationOLMIS-810Configure product code attribute
StoryRequisition - ConfigurationOLMIS-786Display/Hide columns attributes on the requisition form
StoryRequisition - ConfigurationOLMIS-774Configure 'skip a period' feature
StoryRequisition - ConfigurationOLMIS-755Define periods within a schedule
StoryRequisition - ConfigurationOLMIS-537Enable customizations with with extension points
StoryRequisition - ConfigurationOLMIS-422Create and edit a schedule
StoryRequisition - ConfigurationOLMIS-388Define the display order of columns to appear in the requisition
StoryRequisition - ConfigurationOLMIS-386Create a requisition template for a program
StoryRequisition - ConfigurationOLMIS-381Configure Stock Adjustment Reason by Program
StoryRequisition - ConfigurationOLMIS-214Define Non-Full Supply (/Additional drugs and Medical Supplies) attributes
StoryRequisition - CreationOLMIS-997Associate non-emergency requisitions with the proper period
TaskRequisition - CreationOLMIS-990Simplify the requisition submit, authorize & update APIs
StoryRequisition - CreationOLMIS-916Activity diagrams (from v2) for requisitions
TaskRequisition - CreationOLMIS-807Submit requisition only if quantity entered
StoryRequisition - CreationOLMIS-770Save a requisition
StoryRequisition - CreationOLMIS-760Create a basic requisition
StoryRequisition - CreationOLMIS-741Create a simple requisition with additional stock information
StoryRequisition - CreationOLMIS-655Create the Requisition Service
StoryRequisition - CreationOLMIS-219Deleting a requisition/R&R
StoryRequisition - CreationOLMIS-380Apply Adjustment Reason to Adjustment quantity
StoryRequisition UIOLMIS-1163Button consistency
StoryRequisition UIOLMIS-1140Create regular requisition for period from Initialize Requisition screen
StoryRequisition UIOLMIS-1127Product grid is editable
StoryRequisition UIOLMIS-1126Submit a requisition
StoryRequisition UIOLMIS-1125Product grid auto-calculates inventory fields
StoryRequisition UIOLMIS-1103Create read-only product grid for requisition
StoryRequisition UIOLMIS-1075Show approval columns on product grid
StoryRequisition UIOLMIS-1060Approve/Reject a requisition
StoryRequisition UIOLMIS-1059Save a requisition
StoryRequisition UIOLMIS-1058Delete a requistion
StoryRequisition UIOLMIS-1051Create page state to view Requisition
StoryRequisition UIOLMIS-1043Approve requisition list
StoryRequisition UIOLMIS-1005Authorize a requisition
StoryRequisition UIOLMIS-1004UI: Initiate a requisition for "My Facilities"
TaskRequisition UIOLMIS-927Catalog Existing OpenLMISv2 Requisitions-UI API Calls
StoryRequisition UIOLMIS-922Create Requisition-UI Repository and Build Process
StoryRequisition UIOLMIS-818Full Supply Data validation in the product grid
TaskRequisition UIOLMIS-1229Respect isDisplayed from the requisition template on the UI
StoryRequisition UIOLMIS-1068Stock adjustment modal window
StoryUser Authentication and Password ManagementOLMIS-906Password email notification
StoryUser Authentication and Password ManagementOLMIS-589Session expiration
StoryUser Authentication and Password ManagementOLMIS-588Forgot Password
StoryUser Authentication and Password ManagementOLMIS-587Password Reset
StoryUser Authentication and Password ManagementOLMIS-586Restrict access to only authenticated users via password
StoryUser Authentication and Password ManagementOLMIS-496Logout
StoryUser PermissionsOLMIS-884Manage the user profile
StoryUser PermissionsOLMIS-883Permission Check Tool
StoryUser PermissionsOLMIS-867Assign roles to a user record for requisitions
StoryUser PermissionsOLMIS-545Role-Based Access Control (RBAC) for Admin/Requisitions/Fulfillment





Table of Contents

OpenLMIS: the global initiative for powerful LMIS software