Skip to content

Instantly share code, notes, and snippets.

@jawidMuhammadi
Last active February 23, 2023 09:31
Show Gist options
  • Save jawidMuhammadi/9fa91d37b1cbe43d9cdfe165ad8f2102 to your computer and use it in GitHub Desktop.
Save jawidMuhammadi/9fa91d37b1cbe43d9cdfe165ad8f2102 to your computer and use it in GitHub Desktop.
This gist file has been created to show case my work done in Google Summer of Code 2020


My Journey in GSoC 2020

In this Gist file, I will share what I learned and completed in Google Summer of Code 2020 with Mifos Organization. One of the best things about the Mifos Organisation is that it’s a diverse community with members from all around the world and all of them have been very supportive and helping. I loved working with Edward Cable, Rajan Maurya, Saksham Handu, Saransh Sharma, and I would like to thank all of them especially my mentor and Edward for their guidance, help, and motivation throughout the program. I learned a lot of things from this program and working with this incredible community has been an amazing experience for me.

GSoC Project:

Fineract-CN-Mobile was my project in GSoC'20, it is an Android app for Digital Financial services, that is 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 financial services.

What has been completed? 🎯 πŸ’Ό

1. Added support for all functionalities of creating a Ledger

  1. Create Ledger
  2. View details of ledger and sub-ledgers
  3. Edit ledgers
  4. Add, edit and delete sub-ledgers
  5. Delete a Ledger account

πŸ“Œ For more details, please view the Pull Request.

create_ledger add_edit_sub_ledger view_ledger_sub_detials edit_ledger_sub

2. Added support for editing loan details

Field officers can edit a loan If it has not been approved or canceled otherwise the Edit Menu is invisible.

πŸ“Œ For more details, please view the Pull Request

2020-03-04-16-56-06

3. Improved UI and implemented more functionality for Groups

This PR has been created on top of PR68 that has been developed by Mr. Saksham Handu in GSOC'2019, and this PR adds support for following functionalities and improvements which were missing in his PR:

  1. Edit and Update group details
  2. Edit or delete group members name
  3. Edit or delete group leaders name
  4. Reopen a group if it has been closed
  5. Activate a group if it is pending
  6. Close a group account
  7. UI refactoring in GroupdDetailsFragment, AddGroupMemberFragment, AddGroupLeaderFragment, and ReviewFragment to provide a better UX/UI experience to users based on Material Design guidelines.
  8. Adds Coroutines Library to call APIs in Background Thread and Handle Errors in a better way which is Google's recommended way.
  9. Refactored the signature of the creating group method to handle network errors.

group_details_and_task edit_group add_edit_delete_leader_names

πŸ“Œ For more details, please view the Pull Request.

4. Settings screen improved and change PassCode functionality implemented

Users can select a language and change the passcode.

settings

πŸ“Œ For more details, please view the Pull Request.

5. Added task management feature for the Loan Account

Add support for loan account-related tasks like approving the loan, close, reject or delete loan accounts

Screenshot_1594061705 Screenshot_1594061722

πŸ“Œ For more details, please view the Pull Request.

6. Extended Kotlin support in-app and changed Java classes to Kotlin

There were more than 15 java classes needed to be converted to Kotlin. I converted all the classes to Kotlin and tested the app to make sure the changes have not broken any code. I did the conversion in two categories Retrofit model classes and Service interfaces. I created two different PR for each:

7. Reviewed all Pull Request of the project

There were more than 30 pull requests in the repo, I went through all of them one by one. There were many pull requests that needed changes so I requested changes on them and the contributors had a great response, they implemented nearly all of my requested changes in their pull requests. So right now, most of them are ready to be merged in the base development branch.

8. 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. In this period of GSoC I researched how to implement it, and also I created a mini project to practice it's implementation. Here is the project. I also documented how to download, install, and configure Couchbase Lite, Couchbase Server, and Sync Gateway. Visit this gist file to know more.

9. Tested all functionalities of the app with the new Fineract CN instance demo

The Fineract CN mobile app has been developed with a layer of mockup data. I went through the Fineract CN API documentation, changed the base URL of the app to the new demo instance of the Fineract CN, and tested all functionalities of the App. There were many bugs which were causing the app to crash, I solved them and raised a solution pull request. You can take a look at here.

10. Completed all remained functionalities of Role/Permission

The APIs for editing, creating, and deleting functionality of Role/Permission have been developed in Fineract CN so I implemented it in Fineract CN Mobile too, actually I have started working on this feature early (before coding period).

πŸ“Œ For screenshots and more details, please review the raised pull request.

Screenshot_1593287840 (1) Screenshot_1593287845 Screenshot_1593287853 Screenshot_1593287873 Screenshot_1593287886 Screenshot_1593287940

11. Added GIS feature like location tracking and dropping of the pin into the App

Implementing GIS (geographic information system) into the app was one of the most interesting and fun tasks I did. It was really great playing and creating amazing functionalities with Google Maps. The following functionalities added into the app:

  • Add a pin to the current location of the User.
  • Show nearby customers.
  • Navigate to the customer and shows the route map.
  • Search for places.
  • Show previously visited places and click on the map to revisit again.
  • Save the user path with an ongoing notification.

Screenshot_1596408197 Screenshot_1596408105

Screenshot_1596408280 Screenshot_1596408181

Screenshot_1596408173 Screenshot_1596408132

πŸ“Œ For codes and more details, please review the raised Pull Request.

12. Integrated the app with Couchbase database

Integrating the offline-first approach using Couchbase mobile was one of the most challenging tasks in my GSoC journey, I put a lot of time to read and research about this amazing NoSQL database technology, I learned a lot of new concepts. Here is the list of functionalities which implemented to work offline:

  • Create a new customer
  • View customer details
  • Task management feature like activate and lock a customer account
  • Show customer lists
  • Create a group
  • View group details
  • Task management feature like activate and close a group
  • Show group lists

🟒 Couchbase Server:

rsz_screenshot_from_2020-08-22_22-12-56

🟠 Sync Gateway:

rsz_screenshot_from_2020-08-25_18-30-11

πŸ“Œ Please read this Jira Ticket to know about how I implemented Couchbase Lite.

πŸ“Œ For codes and more details, please review the Pull Request.

13. Added UI/Integration tests

Automated UI tests and integration tests play an important rule to produce a robust and quality codes. I implemented UI and integration tests for following screens in the app:

  • Group List
  • Group Details
  • Create a Group

πŸ“Œ For codes and more details, please review the Pull Request.

What is remained to do? ⏳

πŸ”Ά APIs for adding support for loan account-related tasks were not ready, so I only created the UI parts of it. Here is the link for a Jira Ticket regarding the missing APIs.

πŸ”Ά There were no APIs for saving the user's tracked path coordinates after APIs created then we can show previously visited customers list. I implemented this feature using mock data only. Here is the Jira Ticket regarding missing APIs.

πŸ”Ά For Couchbase implementation, I only implemented customer and group related functionalities, after merging current PRs and integrating Coucbase and Sync Gateway in the Fineract CN platform, then we can continue integrating remained functionalities.

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