Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save varsvat/be08d5234770b1c22d809177564a6276 to your computer and use it in GitHub Desktop.
Save varsvat/be08d5234770b1c22d809177564a6276 to your computer and use it in GitHub Desktop.
GSoC '21 Final Report | The Mifos Initiative | Fineract-CN-mobile | The Apache Software Foundation

apchelogo gsoc_logo mifos_logo



GSoC '2021 @ The Mifos Initiative | Fineract-CN-mobile

This gist contains the details about what I learned and the work completed in the Google Summer Of Code 2021 with The Mifos Initiative, under the umbrella organization The Apache Software Foundation. During GSoC, I worked on making functional enhancements to the Fineract-cn-mobile project. This year the project was selected under the umbrella organization The Apache Software Foundation as Mifos organization was unfortunately not selected for GSoC'21. One of the best things that I loved about Mifos and open source ,in general, is how people from all around the world come together to build a product and are ready of help and support each other. I loved working with Edward Cable, Ahmad Jawid Muhammadi, Chinmay Kulkarni, Devansh Aggarwal and would like to take a moment to especially thank my mentors, Chinmay and Ahmad for always being available to guide me and Edward for making the whole program sailing so smooth and for being proactive for arranging the weekly check-in meet every week, which definitely helped me boost my productivity and seek for help whenever I was stuck at something.

The Fineract-cn-mobile application is the Android client of Apache Fineract CN, built on top of the Fineract CN Platform. It provides banking solutions for people around the world who are unbacked. This app is for field officers who go to their customers and provide them with financial services. The app currently does not supports product, Accounting, Teller features, etc. I worked on implementing these features. My GSoc'21 project plan can be accessed here

Work completed:

Added support for creating, viewing, editing and deleting Tellers

The Rest APIs for creating and editing tellers are available in the Fineract-CN so I made the necessary data model and service class modifications. The PR for this feature has been created and has been reviewed by my mentor and will be soon merged in the base development branch of the project.

  • View Teller Details Screen
  • Stepperlayout adapter classes for creating or updating tellers
  • Replaced the aleady implemented MVP architecture with the Google recommended MVVM architecture
  • Teller List Screen
    • Added Validation checks for various fields in Teller Step fragments

πŸ‘‰ For more information, please refer to this PR

Layouts

Teller List Teller Details Create/Edit Teller Stepper
tellerlist teller_details stepperlayoutTeller

Screen Recording

teller_functionalities

Implemented Teller Task management features in the application

I implemented the Task management features in the teller's section which adds support to close, reopen, and activate the pending teller accounts, using the MVVM archietecture. The PR for this feature can be found here, the changes have been reviewed by my mentor and the PR is ready to be merged. The Task management features added will enable the field officers to:

  • Close an open teller account
  • Activate a teller account
  • Open a close teller account
  • Delete a Teller account

πŸ‘‰ For more information, please refer this PR

tellerstatus


Reviewed multiple Pull-requests in the project

Out of the multiple Pull requests that were open in the project repo, I reviewed most of them and requested changes wherever required. I had an engaging response from the developers and once the changes are incorporated, Pull requests will be ready to be merged.

GIS features Enhancement

I started my work on the GIS feature, but after having a discussion with my mentor, we decided to wait for the already raised PR to be merged first. Also, the Endpoints are missing in Fineract-CN platform to store the geo-coordinates, I have asked in the community mailing list if some one is intrested to work on it and once the endpoints are ready, we can carry forward this work.

Jira ticket created: https://issues.apache.org/jira/browse/FINCN-237

Pull Request(for the part completed by Ahmad during GSoC '20): apache/fineract-cn-mobile#110

Added support for all the account functionalities in the application

The Rest APIs for these features are available in the Fineract-CN so I made implemented all these features in the mobile application too. The functionalities that have been added are:

  • Account details Screen
  • Stepperlayout adapter classes for creating or updating Accounts
  • Made custom models for the Holders and signature auhorites step Fragment
  • Replaced the aleady implemented MVP architecture with the Google recommended MVVM architecture
  • Account List Screen
  • Added Validation checks for various fields in AccountDetails Step fragment(For ex. Account Identifier should not be null, etc.)

πŸ‘‰ For more information, please refer here

Layouts

Account List Account Details Account details Step Add Signature authorities Step
tellerlist teller_details stepperlayoutTeller

Screen Recording

Implemented Account Task management features in the application

**The Account Task management features added will enable the field officers to: **

  • Close an open account
  • unlock account
  • Lock account
  • Reopen a closed account

πŸ‘‰ For more information, please refer here

account task


Researched offline-first approach using Couchbase

Couchbase Mobile is the complete NoSQL database solution for all data storage, access, sync and security across the entire application stack. It includes an Embedded database, Rest API and Synchronization which is critical for enabling offline-first mobile apps.I went through the documentation available on the couchabse website, some articles and blogs to understand the working of the couchbase-server, couchbase lite Db and sync-gateway. I also attended this course, from the Couchbase team to understand the working and implementation part of Couchbase.

Improved offline functionality of the application using Couchbase implementation

I have implemented Couchbase Lite and sync-gateway in various app functionalities, replacing the REST API Interaction with the Couhbase-only interaction. Due to this feature, the field officers will be able to update the data in the mobile application even when there is no internet connection in the mobile device, the data changed will be saved in the local databse of the device and sync-gateway will replicate and sync the data to the couchbase-server as soon as the internet conectivity resumes.

Features implemented using Couchabse are:

  • create a new teller
  • update a teller
  • Teller list
  • Teller details
  • change status of teller (task magmt. features)
  • create a new account
  • add holers and signature authorities to an account
  • edit account details
  • Account list
  • Account details
  • Account task mgmt. features
  • Define a new Product
  • Edit the product
  • Product List
  • Product details

Linked Pull requests:


Converting Java Files to Kotlin

Used and modified kotlin in following type of files:

  • Data models
  • viewmodel classes
  • RecyclerView Adapter classes
  • Stepper Adapter classes
  • Any new Activity, fragment classes

Added support for all the Product functionalities in the application

The Rest APIs for these features are available in the Fineract-CN so I made implemented all these features in the mobile application too. The functionalities that have been added are:

  • Product List Screen
  • Product details Screen
  • Stepperlayout adapter classes for creating or updating Accounts
  • Made custom models for the Account assignment RecyclerView
  • Replaced the aleady implemented MVP architecture with the Google recommended MVVM architecture
  • Added Validation checks for various fields in Product Stepper fragments

πŸ‘‰ For more information, please refer here

Layouts

Product List Product Details Product details Step Add Account assignments Step
teller_details stepperlayoutTeller

Screen Recording

Added UI/Integration tests for the code written

Writing tests is as important as writing good quality code. A developer needs to make sure if the code written by him/her doesn't break anything else. Manual testing comes with its own set of challenges. One cannot test every scenario with manual testing, that is why Automated tests are important. I have written UI and integration tests for the following:

  • Teller List
  • Create Teller Step Fragments
  • Teller details
  • Create new teller
  • Teller Task management features
  • Product List
  • Product details
  • Create Product Step Fragments
  • Create new product
  • Account list
  • Account details
  • Create Account Step Fragments
  • Create a new Account
  • Account Task management features
Create Teller test Create Product tests Account Task mgmt. feature test
teller_details stepperlayoutTeller

Linked Pull requests:

Integrate payment-hub for payment dibursal using GSMA Mobile money API

I am working on the UI part of the payment disbursal via payment hub. Once the UI is done, then we will start integrating APIs, not sure if the endpoints are available on the Fineract-CN instance.

Next Steps

The complete GSoC experience was one of the best experience I have had as a student. I got to learn a lot and I belive we were able to achieve a lot durign this summer but still, there is a lot to achieve ahead. There is a lot a of scope for improvements and for adding new features in the application. Also, the payment-hub integration and GIS feature enhancements is yet to be worked upon and I hope to continue working with Mifos Initiative in the future and would be delighted to help others in the community to get started too πŸ˜€

JIRA Tickets

JIRA Tickets for some of the major issues/features that I worked upon:

Links


GitHub | varunsanjeevjain@gmail.com | LinkedIn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment