import logging
from typing import Optional
from uuid import uuid4
from q2_sdk.hq.models.hq_credentials import HqCredentials
from q2_sdk.models.cores.base_core import BaseCore
from q2_sdk.models.cores.models.core_user import CoreUser
from .mappers.demographic_info_mapper import DemographicInfoMapper
from .queries.demographic_info_query import DemographicInfoQuery
from .mappers.initial_search_mapper import InitialSearchMapper
from .queries.initial_search_query import InitialSearchQuery
[docs]
class Core(BaseCore):
CONFIG_FILE_NAME = "FiservCleartouch_Core"
OPTIONAL_CONFIGURATIONS = {
"POPULATE_MOBILE_PHONE_FROM_MAIN_PHONE": False,
}
def __init__(
self,
logger: logging.Logger,
core_user: CoreUser,
hq_credentials: Optional[HqCredentials] = None,
**kwargs,
):
super().__init__(logger, core_user, hq_credentials=hq_credentials, **kwargs)
self.tran_code = None
[docs]
async def build_demographic_info(
self,
) -> DemographicInfoMapper:
"""
Builds a core request using the customer's permanent ID to retrieve demographic information.
:return: :py:class:`DemographicInfoMapper` object
"""
initial_mapper = await self.build_initial_search()
customer_perm_id = await initial_mapper.execute()
request_dict = {
"customer_perm_id": customer_perm_id,
"request_id": str(uuid4()),
}
demographic_info_query = DemographicInfoQuery(
logger=self.logger, request_dict=request_dict
)
populate_mobile_phone_from_main_phone = getattr(
self.config, "populate_mobile_phone_from_main_phone", False
)
return DemographicInfoMapper(
[demographic_info_query],
hq_credentials=self.hq_credentials,
zone_context=self.core_user,
populate_mobile_phone_from_main_phone=populate_mobile_phone_from_main_phone,
)
[docs]
async def build_initial_search(self) -> InitialSearchMapper:
"""
Builds an initial search request to the core using a configured user's SSN to get the user's permanent ID.
:return: :py:class:`InitialSearchMapper` object
"""
request_dict = {
"tax_id": self.configured_user.ssn,
"request_id": str(uuid4()),
}
initial_search_query = InitialSearchQuery(
logger=self.logger, config=self.config, req_dict=request_dict
)
return InitialSearchMapper(
[initial_search_query],
hq_credentials=self.hq_credentials,
)