fineract-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nayan Ambali <nayan.amb...@gmail.com>
Subject Re: All Share Accounts
Date Sun, 15 May 2016 01:47:12 GMT
Terence,

For this use case buildig report is better solution than getting this list
directly from API.

But I agree with you that there should be a API for /shares that returns
the collection of shares with sensible filters and limits.

Thanks
Nayan Ambali


On Sat, May 14, 2016, 3:43 PM Terence Monteiro <terence@sanjosesolutions.in>
wrote:

> Hi Nazeer,
>
> On Fri, May 13, 2016 at 4:44 PM, Nazeer Shaik <
> nazeer.shaik@confluxtechnologies.com> wrote:
>
> > Hi Terence,
> >
> > Can you tell me what is the use case to have all share accounts?
> Currently
> > it is implemented per client basis as I don't really find use of
> returning
> > all share accounts.
>
>
> ​Some use cases:​
>
>
>    1. ​A Financial Institution having micro savings and credit recently
>    added shares. This FI has 500,000 clients and in a month about 1% of
> these
>    clients apply for shares so we have 5,000 clients with share accounts.
> The
>    management wants to know some information such as:
>    1. Total number of share accounts
>       1.  with the existing functionality I'll have to do something like
>          1. Initialize a total share accounts counter
>             2. Get list of clients, f
>             oreach Client
>                1. Get accounts for that client
>                2. Ignore savings and loan accounts, pick shareaccounts
>                3. Increment the counter by number of share accounts
>                3. ​Report the result​
>
>             4. The efficiency of the above is 500,000 - the number of
>             clients and the number of requests is also 500,000
>             2. ​if we had a get all share accounts facility, I could
>          1. call it and get the share account list and count in 1 request
>             2. Number of clients having share accounts:
>       1.  with the existing functionality I'll have to do something like
>          1. Initialize a total clients having share accounts counter
>             2. Get list of clients, f
>             oreach Client
>                1. Get accounts for that client
>                2. Ignore savings and loan accounts, pick shareaccounts
>                3. Increment the counter if share accounts length > 0
>                2. ​if we had a get all share accounts facility, I could
>          1. call it and get the share account list
>             2. populate a Hash / Map object which tells whether a client
>             has the share account or not
>
>             3. ​return the number of keys in the hash (number of clients
>             which have a share account)​
>
>             3. Total value of shares bought by all clients
>       1. ​with the existing functionality, I'll have to iterate through
>          clients and for each ​client
>
>          1. get share account list and iterate over it and for each share
>             account
>             1. get the number of shares and the unit price and multiply to
>                get the share value for that client
>                2. Add this to a counter
>                2. if we could get all shares in 1 API call, I could iterate
>          over it and
>          1. multiple the share unit price with number of shares and sum the
>             product
>             2. If I have multiple share products and want a breakup of
>    share accounts # based on share product and client to gauge which
> products
>    are more popular again with the existing API it's painfully inefficient
> for
>    both application programmer and use
>    ​.
>
> ​
> ​I could think of any number of similar reporting or aggregation functions
>
> We are returning truncated data as data size will be more in case of
> > returning all share products and client is not really going to use entire
> > available data. In case of single product we are returning the complete
> > data.
> >
>
> ​This is fine but as API designers we can build flags like?fields=a,b,c to
> get a truncated list. So an application developer builing on top of the API
> can ​choose which fields they want and hence reduce the data size so this
> is an alternative design which imo has the benefits you mention but doesn't
> limit the application options and wider usability of the API.
>
>
> > Thanks,
> > Nazeer
> >
> >
> > On Fri, May 13, 2016 at 4:31 PM, Terence Monteiro <
> > terence@sanjosesolutions.in> wrote:
> >
> > > Hi Nazeer,
> > >
> > > Thanks for your response. I'm aware this is one way of getting the
> share
> > > accounts for an individual client. I wanted to know if there is a way
> to
> > > get for all clients. For instance if I GET
> > > /fineract-provider/api/v1/savingsaccounts, I get all the savings
> > accounts.
> > > One use case of this is where say out of 5000 clients 5 have share
> > > accounts. If I had to do a per client method, I'd have to make 5000
> > > requests. But I'd like a way to query all share accounts of all clients
> > in
> > > a single query - in this case I should get 5 share accounts returned
> and
> > > since each has a clientId. Also considering the REST pattern, if
> > > /path/to/resource/<resourceId> gives me a single resource object, then
> > > /path/to/resource should give me all the objects of that resource.
> > >
> > > A second question I have is regarding the get all share products API.
> > This
> > > currently returns a truncated set of fields. Let's say I have 1 share
> > > product only on the server. If I do GET
> > > /fineract-provider/api/v1/products/share I get:
> > >
> > > {
> > >     "totalFilteredRecords": 1,
> > >     "pageItems": [
> > >         {
> > >             "id": 2,
> > >             "name": "SACCO Shares",
> > >             "shortName": "SAS",
> > >             "totalShares": 100000
> > >         }
> > >     ]
> > > }
> > >
> > > However, if I do /fineract-provider/api/v1/products/share/2 , I get the
> > > full product:
> > >
> > > {
> > >     "id": 2,
> > >     "name": "SACCO Shares",
> > >     "shortName": "SAS",
> > >     "description": "k-Mayra SACCO Shares",
> > >     "currency": {
> > >         "code": "ETB",
> > >         "name": "Ethiopian Birr",
> > >         "decimalPlaces": 2,
> > >         "inMultiplesOf": 10,
> > >         "nameCode": "currency.ETB",
> > >         "displayLabel": "Ethiopian Birr [ETB]"
> > >     },
> > >     "totalShares": 100000,
> > >     "totalSharesIssued": 10000,
> > >     "unitPrice": 5,
> > >     "shareCapital": 50000,
> > >     "minimumShares": 1,
> > >     "nominalShares": 10,
> > >     "maximumShares": 1000,
> > >     "marketPrice": [],
> > >     "charges": [],
> > >     "allowDividendCalculationForInactiveClients": false,
> > >     "lockinPeriod": 0,
> > >     "lockPeriodTypeEnum": {
> > >         "id": 4,
> > >         "code": "savingsPeriodFrequencyType.invalid",
> > >         "value": "Invalid"
> > >     },
> > >     "minimumActivePeriod": 0,
> > >     "minimumActivePeriodForDividendsTypeEnum": {
> > >         "id": 0,
> > >         "code": "savings.lockin.savingsPeriodFrequencyType.days",
> > >         "value": "Days"
> > >     },
> > >     "accountingRule": {
> > >         "id": 1,
> > >         "code": "accountingRuleType.none",
> > >         "value": "NONE"
> > >     }
> > > }
> > >
> > > So in the former query, lot of information is missing.
> > >
> > > --
> > > Best Regards,
> > > Terence Monteiro,
> > > Mob: +91 96633 13728
> > > www.sanjosesol.com
> > >
> > > <http://goog_1610728024>
> > > "Providence", No. 36,
> > > Ahmed Sait Road,
> > > Frazer Town, Bangalore - 5.
> > >
> > > On Fri, May 13, 2016 at 4:19 PM, Nazeer Shaik <
> > > nazeer.shaik@confluxtechnologies.com> wrote:
> > >
> > > > Hi Terrence,
> > > >
> > > > As part of existing API, you can get share accounts along with other
> > > > accounts for selected client.
> > > >
> > > > https://localhost:8443/fineract-provider/api/v1/clients/1/accounts
> > > >
> > > > The response :
> > > >
> > > > {
> > > >     "loanAccounts": [],
> > > >     "savingsAccounts": [],
> > > >     "shareAccounts": []
> > > > }
> > > >
> > > > Thanks,
> > > > Nazeer
> > > >
> > > > On Fri, May 13, 2016 at 4:08 PM, Terence Monteiro <
> > > > terence@sanjosesolutions.in> wrote:
> > > >
> > > > > Hi Devs,
> > > > >
> > > > > Is there a way to get all the share accounts similar to the savings
> > and
> > > > > loan accounts if I don't have the share account id and I want to
> full
> > > > list?
> > > > > I'm able to get a single share account with:
> > > > >
> > > > > GET /accounts/share/<accountId>
> > > > >
> > > > > However, if I skip the accountId, I get:
> > > > >
> > > > > {
> > > > >     "timestamp": 1463135795016,
> > > > >     "status": 500,
> > > > >     "error": "Internal Server Error",
> > > > >     "exception": "java.lang.NullPointerException",
> > > > >     "message": null
> > > > > }
> > > > >
> > > > > Can you confirm whether this is issue is known or whether it needs
> to
> > > be
> > > > > tracked.
> > > > >
> > > > > --
> > > > > Best Regards,
> > > > > Terence Monteiro,
> > > > > Mob: +91 96633 13728
> > > > > www.sanjosesol.com
> > > > >
> > > > > <http://goog_1610728024>
> > > > > "Providence", No. 36,
> > > > > Ahmed Sait Road,
> > > > > Frazer Town, Bangalore - 5.
> > > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message