About me
Link to my personal space : /wiki/spaces/~apremalal/overview
Project proposal
User generated documents module is a new feature which will added to the MifosX system which allow users with basic drag and drop skills and a knowledge of MifosX platform to easily generate custom well formatted report templates.
The key point about generating templates with this module is that the users only have to drag drop/click on context aware tags which will display in a floating tool box to create a custom report template and MifosX system will be capable of rendering the report when the created template applied to a certain entity.
Abstract
MFI’s typically generate client-facing documents (whose format varies from MFI to MFI) from their MIS. These documents are usually limited to the context of a Client (Client registration documents) and Loans (Loan Contracts, Passbooks etc.).
To overcome this limitation , I am proposing the following project plan to implement the document template generation module.
Project implementation plan
Mock UI : link
2. Expose a set of context sensitive keywords. like ${clientName}, ${loanIdentifier} through the API, which users can add as placeholders in the documents.
When a user choose a particular entity to create a template, the associated context place holders will be sent to the front-end through the REST API.
Ex: An active Client could have a list of permissible keywords like “clientName","address","age","joiningdate" etc.. An active Loan could have a list of permissible keywords like "disbursalDate", "amount", "principalRepaid", "interestRepaid", "lastRepaymentDate", "lastRepaymentAmount".
Jquery UI element accordion will be used to display the tags in the front end form editor.
3. Periodic background saves.(If time permits)
This feature will periodically (every 15 or 30 sec) stores a "draft" of the html form that is being worked on in a "non-submitted" state. This would allow users who do not have permission to edit a submitted form to return to a form (in the instance that perhaps they accidentally close or navigate away from the page in the browser, the computer runs out of battery, etc).
This feature would allow users to not have to start over the form from scratch if a problem occurred. I would propose creating a separate table that contains a flag for signed forms vs. forms in progress. Signed forms would be considered submitted, but prior to "signing" forms would be stored every 15 to 30 sec as a form in progress. forms in progress would appear and could be edited within the encounter's page until they are signed and submitted.
4.Server side and Client side report validation + Client side parser.
5.Server side parser: Some of the advantages of having the parser at the server side would be,
i. Initially ,will deal with simple place holders ,that would be replaced by the Text value the placeholder represents.
Ex : ${clientName} would be replaced by “Andy Jones” etc…
i. They would be used primarily for generating tabular data.
Ex: The placeholder ${repaymentSchedule('date','principalAmount','interestAmount') } would create a HTML table for repayments with the table columns based on the passed in parameters ‘date', 'principalAmount', 'interestAmount'
The Restful service for server side document generation would look similar to
/{entityName}/user.defined.report/{reportId}?entityId=10&parse=true
Where,
Once the web service received a request with the above details a spring MVC controller will direct it to the validation layer implemented in the 5th phase. Then the received html content will be parsed upon successful validation and will be sent to the front-end.
6. Write unit test cases.
Participation
I will be hanging around #mifos and mifos developer-mailing list, as those seem to be ideal places to ask for help, and learn from others. I expect to talk with my mentor quite regularly, and ask for advice when needed, as well as receive comments on code review. I expect to submit code as a branch and follow best practices as mentioned in the wiki pages.
Project time line
May 3rd – May 27th | Getting familiar with the needed technologies |
May 28th – June 16th | Knowing each other of the developer community , Discuss project design and plans with the mentor |
June 17th – July 28th | Implementation of task 1, 2 , [3*] |
July 29th – Aug 2nd | Mid Evaluations |
Aug 3rd – Sep 15th | Implementation of task 4, 5 |
Sep 16th – Sep 22nd | Further testing and improve documentation |
Sep 23rd – Sep 27th | Final evaluation |
If time permits