fix language list navigation
This commit is contained in:
@@ -540,5 +540,8 @@ def response(account: Account, display_key: str, menu_name: str, session: Sessio
|
||||
if menu_name == 'exit_successful_token_selection':
|
||||
return menu_processor.exit_successful_token_selection()
|
||||
|
||||
preferred_language = get_cached_preferred_language(account.blockchain_address)
|
||||
preferred_language = i18n.config.get('fallback')
|
||||
if account:
|
||||
preferred_language = get_cached_preferred_language(account.blockchain_address)
|
||||
|
||||
return translation_for(display_key, preferred_language)
|
||||
|
||||
@@ -16,6 +16,7 @@ from cic_ussd.processor.menu import response
|
||||
from cic_ussd.processor.util import latest_input, resume_last_ussd_session
|
||||
from cic_ussd.session.ussd_session import create_or_update_session, persist_ussd_session
|
||||
from cic_ussd.state_machine import UssdStateMachine
|
||||
from cic_ussd.state_machine.logic.manager import States
|
||||
from cic_ussd.validator import is_valid_response
|
||||
|
||||
|
||||
@@ -123,7 +124,16 @@ def handle_no_account_menu_operations(account: Optional[Account],
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
menu = UssdMenu.find_by_name('initial_language_selection')
|
||||
initial_language_selection = 'initial_language_selection'
|
||||
menu = UssdMenu.find_by_name(initial_language_selection)
|
||||
last_ussd_session: UssdSession = UssdSession.last_ussd_session(phone_number, session)
|
||||
if last_ussd_session:
|
||||
menu_name = menu.get('name')
|
||||
if user_input:
|
||||
state = next_state(account, session, user_input, last_ussd_session.to_json())
|
||||
menu = UssdMenu.find_by_name(state)
|
||||
elif menu_name not in States.non_resumable_states and menu_name != initial_language_selection:
|
||||
menu = resume_last_ussd_session(last_ussd_session.state)
|
||||
ussd_session = create_or_update_session(
|
||||
external_session_id=external_session_id,
|
||||
msisdn=phone_number,
|
||||
@@ -132,15 +142,6 @@ def handle_no_account_menu_operations(account: Optional[Account],
|
||||
session=session,
|
||||
user_input=user_input)
|
||||
persist_ussd_session(external_session_id, queue)
|
||||
last_ussd_session: UssdSession = UssdSession.last_ussd_session(phone_number, session)
|
||||
if last_ussd_session:
|
||||
if not user_input:
|
||||
menu = resume_last_ussd_session(last_ussd_session.state)
|
||||
else:
|
||||
session = SessionBase.bind_session(session)
|
||||
state = next_state(account, session, user_input, last_ussd_session.to_json())
|
||||
menu = UssdMenu.find_by_name(state)
|
||||
|
||||
return response(account=account,
|
||||
display_key=menu.get('display_key'),
|
||||
menu_name=menu.get('name'),
|
||||
|
||||
@@ -6,13 +6,12 @@ import time
|
||||
from typing import List, Union
|
||||
|
||||
# external imports
|
||||
from cic_types.condiments import MetadataPointer
|
||||
from cic_types.models.person import get_contact_data_from_vcard
|
||||
from tinydb.table import Document
|
||||
|
||||
# local imports
|
||||
from cic_ussd.cache import cache_data_key, get_cached_data
|
||||
from cic_ussd.menu.ussd_menu import UssdMenu
|
||||
from cic_ussd.state_machine.logic.manager import States
|
||||
from cic_ussd.translation import translation_for
|
||||
|
||||
logg = logging.getLogger(__file__)
|
||||
@@ -66,19 +65,8 @@ def resume_last_ussd_session(last_state: str) -> Document:
|
||||
:return:
|
||||
:rtype:
|
||||
"""
|
||||
# TODO [Philip]: This can be cleaned further
|
||||
non_reusable_states = [
|
||||
'account_creation_prompt',
|
||||
'exit',
|
||||
'exit_invalid_pin',
|
||||
'exit_invalid_new_pin',
|
||||
'exit_invalid_recipient',
|
||||
'exit_invalid_request',
|
||||
'exit_pin_blocked',
|
||||
'exit_pin_mismatch',
|
||||
'exit_successful_transaction'
|
||||
]
|
||||
if last_state in non_reusable_states:
|
||||
|
||||
if last_state in States.non_resumable_states:
|
||||
return UssdMenu.find_by_name('start')
|
||||
return UssdMenu.find_by_name(last_state)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user