menu-voucherlist #101
@ -94,6 +94,7 @@ func (ls *LocalHandlerService) GetHandler() (*ussd.Handlers, error) {
|
||||
ls.DbRs.AddLocalFunc("quit_with_help", ussdHandlers.QuitWithHelp)
|
||||
ls.DbRs.AddLocalFunc("check_vouchers", ussdHandlers.CheckVouchers)
|
||||
ls.DbRs.AddLocalFunc("get_vouchers", ussdHandlers.GetVoucherList)
|
||||
ls.DbRs.AddLocalFunc("view_voucher", ussdHandlers.ViewVoucher)
|
||||
|
||||
return ussdHandlers, nil
|
||||
}
|
||||
|
@ -1053,3 +1053,71 @@ func (h *Handlers) CheckVouchers(ctx context.Context, sym string, input []byte)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// ViewVoucher retrieves the token holding and balance from the subprefixDB
|
||||
func (h *Handlers) ViewVoucher(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
var res resource.Result
|
||||
var err error
|
||||
inputStr := string(input)
|
||||
|
||||
if inputStr == "0" || inputStr == "00" {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
flag_incorrect_voucher, _ := h.flagManager.GetFlag("flag_incorrect_voucher")
|
||||
|
||||
// Initialize the store and prefix database
|
||||
store := h.userdataStore
|
||||
prefixdb := storage.NewSubPrefixDb(store, []byte("token_holdings"))
|
||||
|
||||
// Retrieve the voucher symbol list
|
||||
voucherSymbolList, err := prefixdb.Get(ctx, []byte("tokens"))
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("failed to retrieve voucher symbol list: %v", err)
|
||||
}
|
||||
|
||||
// Retrieve the voucher balance list
|
||||
voucherBalanceList, err := prefixdb.Get(ctx, []byte(voucherSymbolList))
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("failed to retrieve voucher balance list: %v", err)
|
||||
}
|
||||
|
||||
// Convert the symbol and balance lists from byte arrays to strings
|
||||
lash marked this conversation as resolved
Outdated
|
||||
voucherSymbols := string(voucherSymbolList)
|
||||
voucherBalances := string(voucherBalanceList)
|
||||
|
||||
// Split the lists into slices for processing
|
||||
symbols := strings.Split(voucherSymbols, "\n")
|
||||
balances := strings.Split(voucherBalances, "\n")
|
||||
|
||||
var matchedSymbol, matchedBalance string
|
||||
|
||||
for i, symbol := range symbols {
|
||||
symbolParts := strings.SplitN(symbol, ":", 2)
|
||||
if len(symbolParts) != 2 {
|
||||
continue
|
||||
}
|
||||
voucherNum := symbolParts[0]
|
||||
voucherSymbol := symbolParts[1]
|
||||
|
||||
// Check if input matches either the number or the symbol
|
||||
if inputStr == voucherNum || strings.EqualFold(inputStr, voucherSymbol) {
|
||||
matchedSymbol = voucherSymbol
|
||||
Alfred-mk marked this conversation as resolved
Outdated
lash
commented
Please put in separate, unit-testable method. Please put in separate, unit-testable method.
|
||||
// Ensure there's a corresponding balance
|
||||
if i < len(balances) {
|
||||
matchedBalance = strings.SplitN(balances[i], ":", 2)[1] // Extract balance after the "x:balance" format
|
||||
}
|
||||
break
|
||||
}
|
||||
Alfred-mk marked this conversation as resolved
Outdated
lash
commented
Not a very descriptive prefix? Not a very descriptive prefix?
|
||||
}
|
||||
|
||||
// If a match is found, return the symbol and balance
|
||||
if matchedSymbol != "" && matchedBalance != "" {
|
||||
res.Content = fmt.Sprintf("%s\n%s", matchedSymbol, matchedBalance)
|
||||
res.FlagReset = append(res.FlagReset, flag_incorrect_voucher)
|
||||
} else {
|
||||
res.FlagSet = append(res.FlagSet, flag_incorrect_voucher)
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
@ -4,6 +4,3 @@ MOUT back 0
|
||||
HALT
|
||||
INCMP _ 0
|
||||
INCMP select_voucher 1
|
||||
|
||||
|
||||
|
||||
|
@ -12,5 +12,5 @@ flag,flag_invalid_amount,18,this is set when the given transaction amount is inv
|
||||
flag,flag_incorrect_pin,19,this is set when the provided PIN is invalid or does not match the current account's PIN
|
||||
flag,flag_valid_pin,20,this is set when the given PIN is valid
|
||||
flag,flag_allow_update,21,this is set to allow a user to update their profile data
|
||||
flag,flag_single_edit,22,this is set to allow a user to edit a single profile item such as year of birth
|
||||
flag,flag_incorrect_voucher,22,this is set when the selected voucher is invalid
|
||||
flag,flag_incorrect_date_format,23,this is set when the given year of birth is invalid
|
||||
|
|
@ -1,11 +1,15 @@
|
||||
LOAD get_vouchers 0
|
||||
MAP get_vouchers
|
||||
MOUT back 0
|
||||
MOUT quit 9
|
||||
MOUT quit 00
|
||||
MNEXT next 11
|
||||
MPREV prev 22
|
||||
HALT
|
||||
LOAD view_voucher 80
|
||||
RELOAD view_voucher
|
||||
CATCH . flag_incorrect_voucher 1
|
||||
INCMP _ 0
|
||||
INCMP quit 9
|
||||
INCMP > 11
|
||||
INCMP < 22
|
||||
INCMP view_voucher *
|
||||
|
2
services/registration/view_voucher
Normal file
2
services/registration/view_voucher
Normal file
@ -0,0 +1,2 @@
|
||||
Enter PIN to confirm selection:
|
||||
{{.view_voucher}}
|
11
services/registration/view_voucher.vis
Normal file
11
services/registration/view_voucher.vis
Normal file
@ -0,0 +1,11 @@
|
||||
RELOAD view_voucher
|
||||
MAP view_voucher
|
||||
MOUT back 0
|
||||
MOUT quit 9
|
||||
LOAD authorize_account 6
|
||||
HALT
|
||||
RELOAD authorize_account
|
||||
CATCH incorrect_pin flag_incorrect_pin 1
|
||||
INCMP _ 0
|
||||
INCMP quit 9
|
||||
INCMP voucher_set *
|
2
services/registration/view_voucher_swa
Normal file
2
services/registration/view_voucher_swa
Normal file
@ -0,0 +1,2 @@
|
||||
Weka PIN ili kuthibitisha chaguo:
|
||||
{{.view_voucher}}
|
1
services/registration/voucher_set
Normal file
1
services/registration/voucher_set
Normal file
@ -0,0 +1 @@
|
||||
Success! symbol is now your active voucher.
|
5
services/registration/voucher_set.vis
Normal file
5
services/registration/voucher_set.vis
Normal file
@ -0,0 +1,5 @@
|
||||
MOUT back 0
|
||||
MOUT quit 9
|
||||
HALT
|
||||
INCMP ^ 0
|
||||
INCMP quit 9
|
1
services/registration/voucher_set_swa
Normal file
1
services/registration/voucher_set_swa
Normal file
@ -0,0 +1 @@
|
||||
Hongera! symbol ni Sarafu inayotumika sasa.
|
Loading…
Reference in New Issue
Block a user
Now this is code smell; we don't want to use menu selectors in branching here.
But I assume it is done because it is necessary to determine whether we are selecting token or merely navigating laterally? If that is the case, I will make an issue for go-vise to provide whether lateral is indeed the case.
This was added because the vise runs the function when we're navigating, instead of prioritizing the INCMP and navigate to the specified node