def loans(request, msg, bank_code, last_position, pos, goback_message): menu_response = "" msisdn = request.GET["msisdn"] networkid = request.GET["networkid"] sessionid = request.GET["sessionid"] mode = request.GET["mode"] userdata = request.GET["userdata"] if last_position == "LONSTA": # start of loans session # check if client is on local api # url = f"https://10.85.85.80:34567/api/mobile-loans/v2/customer/check-mobile-profile/{msisdn}" # result = requests.get(url, verify=False, timeout=10) # results = result.text # loans_processor.libhandler.writelog(logfile, f"Response: {results}") # # # obtaining status code and customer status # # respo = results.split(',') # first_resp = respo[0] # response = first_resp.split(':') # status = response[1] # # cust_respo = respo[2] # response = cust_respo.split(':') # c_status = response[1] # loans_processor.libhandler.writelog(logfile, f"Status - {status} and customer_status - {c_status}") # # cust_sta = c_status.split('"') # loans_processor.libhandler.writelog(logfile, f"Message: {cust_sta[1]}") # # cust_status = cust_sta[1] cust_status = "INTERESTED" stored_data = cust_status if cust_status == "ACTIVATED" or cust_status == "INTERESTED": message = f"{msg}^Please select an option:^1. " \ f"Request for Loan" \ f"^2. Make Enquiries^3. Terms and Conditions" menu_response = f"{networkid}|more|{msisdn}|{sessionid}|{message}" loans_processor.libhandler.writelog(logfile, f"Message: {menu_response}") session_processor.store_menupoint.store_menupoint( request, "LONOPT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message: {message}") elif cust_status == 'DISABLED' or cust_status == "DISABLE": # account has been disabled and can message = f"Your account has been disabled.Please contact {bank_code} for more information." menu_response = core_processor.make_response.make_response( request, "end", message) loans_processor.libhandler.writelog(logfile, f"Message: {message}") elif cust_status == 'BLACKLISTED' or cust_status == "BLACKLIST": message = f"Your account has been disabled.Please contact {bank_code} for more information." menu_response = core_processor.make_response.make_response( request, "end", message) loans_processor.libhandler.writelog(logfile, f"Message: {message}") else: # could be first time viewers # # check the network id of phone number dialing the menu loans_processor.libhandler.writelog(logfile, f"Network [ {networkid} ]") if networkid == 'MTN_GH_DIRECT': netwid = '38' else: netw = networkid.lstrip('GH4HUB_') network = netw.rstrip('_GH') loans_processor.libhandler.writelog( logfile, f"Network strip [ {network} ]") if network == 'VODAFONE' or network == 'Vodafone': netwid = '37' elif network == "AIRTEL" or network == "Airtel" or network == "TIGO" or network == "Tigo": netwid = '39' elif network == 'MTN' or network == 'Mtn': netwid = '38' elif networkid == 'MTN_GH_DIRECT': netwid = '38' else: netwid = '' loans_processor.libhandler.writelog(logfile, f"Pay test ") payload = { 'trx': f"{trxid_processor.get_alph_id.get_alph_trxid(bank_code)}", # "trx": "adb8909090", 'mno_id': netwid, 'msisdn': msisdn } loans_processor.libhandler.writelog(logfile, f"Payload [ {payload} ]") # call postNameEnquiry # verifying the msisdn url = "http://10.85.85.60:24766/cbs/adb/ghipss-momo/postNameEnquiry/" response = requests.post(url, json=payload, verify=False) loans_processor.libhandler.writelog(logfile, f"{response.text}") extract_reply = response.text.split('|') extract_split = extract_reply[0] status_split = extract_split.split(':') status = status_split[1] # phone number from menu dial is registered on momo if status == "SUCCESSFUL" or status == "SUCCESS": # partially register their phone number to move status to interested. url = f"https://10.85.85.80:34567/api/mobile-loans/v2/customer/register-mobile-number/{msisdn}/" loans_processor.libhandler.writelog(logfile, f"Url: {url}") re = requests.post(url, verify=False, timeout=10) loans_processor.libhandler.writelog(logfile, f"Re: {re}") resp = re.text loans_processor.libhandler.writelog(logfile, f"Resp: {resp}") respo = resp.split(',') respo1 = respo[0] response = respo1.split(':') stat = response[1] status = int(stat) cust_respo1 = respo[3] response = cust_respo1.split(':') c_status = response[1] loans_processor.libhandler.writelog( logfile, f"Status - {status} and customer_status - {c_status}") cust_sta = c_status.split('"') loans_processor.libhandler.writelog(logfile, f"Message: {cust_sta[1]}") cust_status = cust_sta[1] stored_data = cust_status if status == 200 or status == 406: message = f"Welcome to {bank_code} Mobile Loans by MeSIKA.^Please select an option:^1. " \ f"Request for Loan" \ f"^2. Make Enquiries^3. Terms and Conditions" menu_response = f"{networkid}|more|{msisdn}|{sessionid}|{message}" loans_processor.libhandler.writelog( logfile, f"Message: {menu_response}") session_processor.store_menupoint.store_menupoint( request, "LONOPT", stored_data) loans_processor.libhandler.writelog( logfile, f"Message: {message}") else: message = "Your mobile number could not be registered. Please try again later." menu_response = core_processor.make_response.make_response( request, "end", message) loans_processor.libhandler.writelog( logfile, f"Message: {message}") else: # phone number from menu dial is not registered on momo message = "Kindly dial with a registered mobile money number." menu_response = core_processor.make_response.make_response( request, "end", message) loans_processor.libhandler.writelog(logfile, f"Message: {message}") elif last_position == "LONOPT": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) status = extract stored_data = status if userdata == "1": # Request for Loan message = "Terms and Conditions:^^Monthly Interest rate of 3.5%.^" \ "Enter any digit to Continue" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONTER", stored_data) loans_processor.libhandler.writelog(logfile, f"Message: {message}") elif userdata == "2": # enquiries message = "Please select an option:^1. Loan Balance^2. Loan Requirements^3. Loan Charges" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONENQ", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif userdata == "3": # submit request for sms to be sent # call charges function message = "Interest rate of 3.5%/month.^" \ "4.5% of loan amount charged as processing fee.^Visit loans.mesika.org/ts to review " \ "this in full." menu_response = core_processor.make_response.notitle_response( request, "end", message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") else: menu_response = core_processor.unknown_option.throw_unknown_option( request, stored_data, goback_message) # ================ Session begins ======================================== elif last_position == "LONTER": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) cust_status = extract stored_data = cust_status message = "4.5% of loan amount as processing fee.^Visit loans.mesika.org/ts to review this in " \ "full.^Enter any digit to continue." menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONCON", stored_data) loans_processor.libhandler.writelog(logfile, f"Message: {message}") elif last_position == "LONCON": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) cust_status = extract stored_data = cust_status message = "Are you a government worker?^1. Yes^2. No" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONGOV", stored_data) loans_processor.libhandler.writelog(logfile, f"Message: {message}") elif last_position == "LONGOV": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) cust_status = extract stored_data = cust_status if userdata == "1": gov = 1 elif userdata == "2": gov = 0 else: gov = "" if cust_status == "INTERESTED" or cust_status == "INTEREST": # id_name to be passed to api # url = f"https://10.85.85.80:34567/api/mobile-loans/v2/customer/get-id-types/" # re = requests.get(url, verify=False, timeout=10) # resp = re.text # loans_processor.libhandler.writelog(logfile, f"Response: {resp}") # res = json.loads(resp) # # # obtaining status code and customer status res = { "status": 200, "id_type_list": [ { "id_uuid": 12332, "id_name": "Voters ID" }, { "id_uuid": 12232, "id_name": "Passport" }, { "id_uuid": 10332, "id_name": "Drivers License" }, ] } status = res['status'] id_list = res['id_type_list'] loans_processor.libhandler.writelog( logfile, f"Status - {status} and List -{id_list} ") if status == 200: message = "" count = 0 for n in id_list: id_uuid = n['id_uuid'] id_name = n['id_name'] count += 1 message += str(count) + '. ' + str(id_name) + '^' str_conv = json.dumps(id_list) stored_data = f"{str_conv}|{cust_status}|{gov}" message = f"Select your ID Type^{message}" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONTYP", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") else: message = "List of IDs cannot be displayed right now. Kindly try again later." menu_response = core_processor.goto_start( request, message, stored_data, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif cust_status == "ACTIVATED" or cust_status == "ACTIVE": # status|gov|id_type|id_number|staff_id id_type = "" id_number = "" staff_id = "" stored_data = f"{cust_status}|{gov}|{id_type}|{id_number}|{staff_id}" message = f"Enter amount Eg: 5" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONAMT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message: {message}") else: message = f"You are not registered for this service. Kindly contact {bank_code}" menu_response = core_processor.goto_start.goto_start( request, message, "", goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") # ================= Registration ========================================= """ elif last_position == "LONTYP": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) extract_reply = extract.split('|') list = extract_reply[0] cust_status = extract_reply[1] gov = extract_reply[2] sel0 = userdata sel0 = int(sel0) sel = sel0 - 1 id_list = json.loads(list) id_uuid = id_list[sel]['id_uuid'] id_name = id_list[sel]['id_name'] loans_processor.libhandler.writelog(logfile, f"ID Type = {id_uuid}") stored_data = f"{cust_status}|{gov}|{id_uuid}" message = f"Enter your {id_name} Number" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONNUM", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif last_position == "LONNUM": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) extract_reply = extract.split('|') gov = extract_reply[1] id_num = userdata stored_data = f"{extract}|{id_num}" if gov == "0": staff_id = "" stored_data = f"{stored_data}|{staff_id}" message = "Enter amount Eg: 5" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONAMT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif gov == "1": message = "Enter your Staff ID" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONSTF", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") else: menu_response = core_processor.unknown_option.throw_unknown_option( request, stored_data, goback_message) elif last_position == "LONSTF": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) staff_id = userdata stored_data = f"{extract}|{staff_id}" message = "Enter amount Eg: 5" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONAMT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") # ================= Completing loan request ============================== """ elif last_position == "LONAMT": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) stored_data = extract amount = userdata if not amount.isdigit(): message = "Value entered is Invalid. Please enter again" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONAMT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif amount.isdigit(): if amount == "0": message = "Amount entered cannot be GHS 0^Kindly enter amount again." menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONAMT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") else: stored_data = f"{extract}|{amount}" message = "Enter your expected monthly income Eg: 10056" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONINC", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif last_position == "LONINC": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) stored_data = extract income = userdata loans_processor.libhandler.writelog(logfile, f"Amount = {type(income)}") if not income.isdigit(): message = "Value entered is Invalid. Please enter again" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONINC", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif income.isdigit(): if income == "0": message = "Your income cannot be GHS 0^Kindly enter your monthly income again." menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONINC", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") # elif income > 0: else: stored_data = f"{extract}|{income}" message = f"Enter period for loan in months.^Limit is 36 months." menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONACT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message: {message}") # else: # message = "Value entered is Invalid. Please enter again" # menu_response = core_processor.make_response.make_response(request, "more", message) # session_processor.store_menupoint.store_menupoint("LONAMT|{stored_data}") # loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif last_position == "LONACT": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) extract_reply = extract.split('|') loans_processor.libhandler.writelog(logfile, f"Extract: {extract_reply}") status = extract_reply[0] amount = extract_reply[5] loans_processor.libhandler.writelog(logfile, f"Extract: {status} and {amount}") stored_data = extract tenure = int(userdata) # if not num.isdigit(): # message = "Value entered is Invalid. Please enter again" # menu_response = core_processor.make_response.make_response(request, "more", message) # session_processor.store_menupoint.store_menupoint("LONACT|{stored_data}") # loans_processor.libhandler.writelog(logfile, f"Message = {message}") # elif num.isdigit(): if tenure <= 0 or tenure > 36: message = "Value entered is not within the valid period for this loan.^Kindly enter period " \ "again." menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONACT", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif tenure > 1 or tenure <= 36: stored_data = f"{extract}|{tenure}" # list charges # url = "https://10.85.85.80:34567/api/mobile-loans/v2/charges/list-charges/" # re = requests.get(url, verify=False, timeout=10) # resp = re.text # loans_processor.libhandler.writelog(logfile, f"Response: {resp}") # # respo = resp.split(',') # first_resp = respo[0] # first_respo1 = first_resp.split(':') # status = first_respo1[1] status = 200 if status == 200: # calculate charge amt = float(amount) # total = processing_fee * amt + service_fee total = 0.055 * amt loans_processor.libhandler.writelog(logfile, f"Total Charge = {total}") total_charge = "%.2f" % total loans_processor.libhandler.writelog( logfile, f"Charge format = {total_charge}") final = amt - float(total_charge) final_amount = "%.2f" % final message = f"Your charge on this loan request for {tenure} months is GHS{total_charge}" \ f"^You will receive a total of GHS{final_amount} Continue?^1. Yes^2. No" menu_response = core_processor.make_response.make_response( request, "more", message) session_processor.store_menupoint.store_menupoint( request, "LONCNF", stored_data) loans_processor.libhandler.writelog(logfile, f"Message = {message}") else: message = "Charge cannot be displayed on this transaction. Please try again later" menu_response = core_processor.goto_start.goto_start( request, message, status, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif last_position == "LONCNF": loans_processor.libhandler.writelog(logfile, f"Extract: welcome") extract = session_processor.get_ussd_extra.get_ussd_extra(pos) extract_reply = extract.split('|') loans_processor.libhandler.writelog(logfile, f"Extract: {extract}") # message = "Your loan application has been cancelled.^Your request will not be submitted." # menu_response = core_processor.make_response.make_response(request, "end", message) # loans_processor.libhandler.writelog(logfile, f"Message = {message}") # if registered, pass without id type and number cust_status = extract_reply[0] gov = extract_reply[1] id_type = extract_reply[2] id_number = extract_reply[3] staff_id = extract_reply[4] amount = extract_reply[5] income = extract_reply[6] tenure = extract_reply[7] # loans_processor.libhandler.writelog(logfile, f"Extract: {extract}") # if userdata == "1": first_application = 0 if cust_status == 'INTERESTED': first_application = 1 elif cust_status == 'ACTIVATED': first_application = 0 payload = { "msisdn": msisdn, "is_government_worker": gov, "id_type": id_type, "id_number": id_number, "staff_id": staff_id, "amount": amount, "monthly_income": income, "tenure": tenure, "first_application": first_application } loans_processor.libhandler.writelog(logfile, f"Payload: {payload}") message = f"Your loan application of GHS {amount} for {tenure} months has been received.^" \ f"You will receive a notification in less than 24 hours." menu_response = core_processor.goto_start.goto_start( request, message, cust_status, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") # url = "https://10.85.85.80:34567/api/mobile-loans/v2/loans/apply/" # re = requests.post(url, json=payload, verify=False, timeout=10) # # response = re.json() # loans_processor.libhandler.writelog(logfile, f"Response: {response}") # respo = resp.split(',') # first_resp = respo[0] # first_respo1 = first_resp.split(':') # status = first_respo1[1] # else: # message = "You do not qualify for this loan.Please try again " # menu_response = core_processor.goto_start(message, cust_status, goback_message) # loans_processor.libhandler.writelog(logfile, f"Message = {message}") # process loan elif userdata == "2": message = "Your loan application has been cancelled.^Your request will not be submitted." menu_response = core_processor.goto_start.goto_start( request, message, cust_status, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") # else: # menu_response = core_processor.unknown_option.throw_unknown_option(request, cust_status, goback_message) # ================= Enquiries ============================================ elif last_position == "LONENQ": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) status = extract stored_data = status if userdata == "1": # loan balance # get the balances for the loans # url = f"https://10.85.85.80:34567/api/mobile-loans/v2/loans/checkBalance/{msisdn}/" # loans_processor.libhandler.writelog(logfile, f"Balance Endpoint: {url}") # re = requests.get(url, verify=False, timeout=10) # resp = re.text # loans_processor.libhandler.writelog(logfile, f"Response: {resp}") # # respo = resp.split(',') # first_resp = respo[0] # first_respo1 = first_resp.split(':') # status = first_respo1[1] # loans_processor.libhandler.writelog(logfile, f"Balance Status: {type(status)}") # status = int(status) status = 200 if status == 200: message = "Your loan balance is GHS 400.76" menu_response = core_processor.goto_start.goto_start( request, message, stored_data, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif status == 404: message = "You have not applied for a loan yet." menu_response = core_processor.goto_start.goto_start( request, message, stored_data, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") else: message = "Your balance cannot be viewed right now. Please try again later." menu_response = core_processor.goto_start.goto_start( request, message, stored_data, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") # if status == "ACTIVATED" or status == "ACTIVE": # # # elif status == "INTERESTED" or status == "INTEREST": # message = f"You do not have any loans with {bank_code}." # menu_response = core_processor.goto_start(message, stored_data, goback_message) # loans_processor.libhandler.writelog(logfile, f"Message = {message}") # # else: # message = "You do not have any loan yet." # menu_response = core_processor.goto_start(message, stored_data, goback_message) # loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif userdata == "2": # requirements message = "To request for a loan, you need:^1. Valid government staff id^2. " \ "Valid identification number^3. Registered Mobile Money number for disbursement^" menu_response = core_processor.make_response.make_response( request, "end", message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") elif userdata == "3": # list charges # url = "https://10.85.85.80:34567/api/mobile-loans/v2/charges/list-charges/" # re = requests.get(url, verify=False, timeout=10) # resp = re.text # loans_processor.libhandler.writelog(logfile, f"Response: {resp}") # # respo = resp.split(',') # first_resp = respo[0] # first_respo1 = first_resp.split(':') # status = first_respo1[1] # message = f"Loan Charges:^1. Service Fee - {service_fee}% of amount ^2. Bank Processing Fee - " \ # f"{pro_fee}% of amount^" message = "Charges:^5.5% of amount." menu_response = core_processor.goto_start.goto_start( request, message, stored_data, goback_message) loans_processor.libhandler.writelog(logfile, f"Message = {message}") else: menu_response = core_processor.unknown_option.throw_unknown_option( request, stored_data, goback_message) # return menu_response
def dispense_cash(request, data, last_position, pos, goback_message): menu_response = "" msisdn = request.GET["msisdn"] networkid = request.GET["networkid"] sessionid = request.GET["sessionid"] mode = request.GET["mode"] userdata = request.GET["userdata"] if last_position == "WTHBNK": # get list of banks # message = "Please select a Financial Institution:^1. ADB^2. NIB^3. GCB^4. Stanchart^5. Stanbic^6. Cal Bank" # menu_response = core_processor.make_response.make_response(request, "more", message) # session_processor.store_session.store_session(msisdn, sessionid, networkid, "WTHSTA") # withdrawal_processor.libhandler.writelog(logfile, f"Message: {message}") #elif last_position == "WTHSTA": message = "Enter Transaction Token:" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "WTHWAL", data) # session is stored using the agent's msisdn withdrawal_processor.libhandler.writelog(logfile, f"Message {message}") elif last_position == "WTHWAL": pay_code = userdata extract = session_processor.get_ussd_extra.get_ussd_extra(pos) # payload = {"paycode": paycode} # response = call_api(payload, "cowrypay", "verifyPaycode") # status = response['status'] count = 0 status = 200 amount = "2" cust_msisdn = "0504169784" paycode_limit = "5" if status == 200: amount = "1" # cust_msisdn = "0504169784" # get other information to store for confirmation # amount = response['amount'] # cust_msisdn = response['customer_msisdn'] stored_data = f"{extract}|{amount}|{cust_msisdn}|{pay_code}" message = f"Confirm Withdrawal of Ghc {amount} from customer with phone number {msisdn}.^1. " \ f"Yes^2. No" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "WTHCNF", stored_data) withdrawal_processor.libhandler.writelog(logfile, f"Message {message}") elif status == 203: message = "This transaction has been blocked. Please contact your bank" menu_response = core_processor.goto_start.goto_start(request, message, "", goback_message) withdrawal_processor.libhandler.writelog(logfile, f"Message {message}") else: # paycode_limit = response['paycode_limit'] count += 1 retries = paycode_limit retries -= 1 if count == paycode_limit and retries == 0: message = "This paycode has been blocked as you have exceeded the number of retries.^Please " \ "contact your bank." menu_response = core_processor.goto_start(request, message, "", goback_message) withdrawal_processor.libhandler.writelog(logfile, f"Message {message}") else: message = f"Paycode entered is incorrect.^You have {retries} more attempt(s)^^Enter paycode again" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_session.store_session(msisdn, sessionid, networkid, "WTHWAL") withdrawal_processor.libhandler.writelog(logfile, f"Message {message}") elif last_position == "WTHCNF": if userdata == "1": withdrawal_processor.libhandler.writelog(logfile, f"Option chosen: {userdata}") extract = session_processor.get_ussd_extra.get_ussd_extra(pos) extract_reply = extract.split('|') service_id = extract_reply[0] amount = extract_reply[1] cust_msisdn = extract_reply[2] paycode = extract_reply[3] message = "Withdrawal successful. Please give cash to customer." menu_response = core_processor.goto_start.goto_start(request, message, "", goback_message) withdrawal_processor.libhandler.writelog(logfile, f"Message {message}") # back end sms sent to customer and agent elif userdata == "2": message = "Transaction cancelled" menu_response = core_processor.goto_start.goto_start(request, message, "", goback_message) withdrawal_processor.libhandler.writelog(logfile, f"Message {message}") else: menu_response = core_processor.unknown_option.throw_unknown_option(request, "", goback_message) return menu_response
def deposit(request, bank_code, url, service_id, last_position, pos, goback_message): menu_response = "" msisdn = request.GET["msisdn"] networkid = request.GET["networkid"] sessionid = request.GET["sessionid"] mode = request.GET["mode"] userdata = request.GET["userdata"] if last_position == "DEPSTA": # call api # message = "Please select a Financial Institution:^1. ADB^2. NIB^3. GCB^4. Stanchart^5. Stanbic^6." \ # " Cal Bank" # menu_response = core_processor.make_response.make_response(request, "more", message) # session_processor.store_session.store_session(msisdn, sessionid, networkid, "DEPSIT") # deposit_processor.libhandler.writelog(logfile, f"Message: {message}") # elif last_position == "DEPSIT": # service_id = "" message = "Enter account number of customer" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "DEPNUM", service_id) deposit_processor.libhandler.writelog(logfile, f"Message: {message}") elif last_position == "DEPNUM": acct_num = userdata extract = session_processor.get_ussd_extra.get_ussd_extra(pos) service_id = extract stored_data = f"{service_id}:{acct_num}" if not acct_num.isdigit(): message = "Account number entered is invalid. Please enter account number again" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "DEPNUM", extract) deposit_processor.libhandler.writelog(logfile, f"Message {message}") elif acct_num.isdigit(): # verify account status = 200 if status == 200: # menu_response = core_processor.request_account(bank_id, stored_data, "ACTSEL", # "getCustomerAccountlist", cust_msisdn) message = "Please enter amount to be deposited E.g: 1" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "DEPAMT", stored_data) deposit_processor.libhandler.writelog(logfile, f"Message {message}") elif status == 201: # account blocked message = "This account has been blocked due to irregular activities.Deposit transaction has been " \ "cancelled" menu_response = core_processor.goto_start(message, stored_data, goback_message) deposit_processor.libhandler.writelog(logfile, f"Message: {message}") else: message = "Account does not exist" menu_response = core_processor.goto_start(message, stored_data, goback_message) deposit_processor.libhandler.writelog(logfile, f"Message {message}") else: menu_response = core_processor.unknown_option.throw_unknown_option(request, "", goback_message) elif last_position == "DEPAMT": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) amount = userdata if not amount.isdigit(): message = "Amount entered is invalid.^Enter Amount again. Eg: 5" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "DEPAMT", extract) deposit_processor.libhandler.writelog(logfile, f"Message {message}") elif amount.isdigit(): if len(amount) < 1 or len(amount) > 4 or amount == "0": message = "Please check amount entered!^Enter amount again" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "DEPAMT", extract) deposit_processor.libhandler.writelog(logfile, f"Message {message}") else: stored_data = f"{extract}:{amount}" extract_reply = extract.split(':') acct_num = extract_reply[1] message = f"Account {acct_num} is depositing GHS {amount}. Is this correct?^1. Yes^2. No" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "DEPCNF", stored_data) deposit_processor.libhandler.writelog(logfile, f"Message {message}") elif last_position == "DEPCNF": extract = session_processor.get_ussd_extra.get_ussd_extra(pos) # extract_reply = extract.split(':') # service_id = extract_reply[0] # acct_num = extract_reply[1] # amount = extract_reply[2] stored_data = extract if userdata == "1": #message = f"Your will receive a response shortly. Your Ref ID is: 93849302930" \ message = f"Enter Receipt Number" menu_response = core_processor.make_response.make_response(request, "more", message) session_processor.store_menupoint.store_menupoint(request, "DEPRCT", stored_data) deposit_processor.libhandler.writelog(logfile, f"Message {message}") # call deposit transfer api elif userdata == "2": message = f"Transaction failed. The account of the customer will not be debited." menu_response = core_processor.goto_start.goto_start(request, message, "", goback_message) deposit_processor.libhandler.writelog(logfile, f"Message {message}") else: menu_response = core_processor.unknown_option.throw_unknown_option(request, "", goback_message) elif last_position == "DEPRCT": message = f"You will receive a response shortly. Your Ref ID is: 93849302930" menu_response = core_processor.goto_start.goto_start(request, message, "", goback_message) deposit_processor.libhandler.writelog(logfile, f"Message {message}") else: menu_response = core_processor.unknown_option.throw_unknown_option(request, "", goback_message) return menu_response