import logging
from lxml import etree
from lxml.builder import E
from q2_sdk.models.cores.queries.base_query import BaseQuery
from q2_sdk.models.demographic import DemographicInfo
from q2_cores.JXchange.queries import mock_responses
[docs]
class UpdateDemographicInfoQuery(BaseQuery):
def __init__(
self, logger: logging.Logger, cust_id: str, demographic_info: DemographicInfo
):
self.cust_id = cust_id
self.demographic_info = demographic_info
super().__init__(logger)
[docs]
def build(self) -> str:
address = self.demographic_info.addresses[0]
email = self.demographic_info.emails[0]
phone = self.demographic_info.phones[0]
error_overrides = [
"400100",
"400101",
"410043",
"410010",
"410029",
"410043",
"410081",
"410007",
"410023",
]
error_override_nodes = []
for errorcode in error_overrides:
error_override_nodes.append(E.ErrOvrRd(E.ErrCode(errorcode), E.Ver_1))
root = E.passthru(
E.CustMod(
E.MsgRqHdr(),
E.CustId(self.cust_id),
E.ErrOvrRdInfoArray(*error_override_nodes),
E.CustDetail(
E.Addr(
E.StreetAddr1(address.address_1),
E.StreetAddr2(address.address_2),
E.City(address.city),
E.StateCode(address.state),
E.PostalCode(address.zipcode),
E.Ver_1,
),
E.BirthDt(self.demographic_info.dob),
E.EmailArray(
E.EmailInfo(
E.EmailAddr(email), E.EmailType("Primary E-Mail"), E.Ver_1
)
),
E.PhoneArray(
E.PhoneInfo(
E.PhoneNum(phone.area_code + phone.phone_number),
E.PhoneType("Home Phone"),
E.Ver_1,
)
),
E.Ver_1,
),
xmlns="http://jackhenry.com/jxchange/TPG/2008",
),
servicename="Customer",
)
xml_as_bytes = etree.tostring(root)
return xml_as_bytes.decode()
[docs]
def mock_response(self):
return mock_responses.mock_update_demographic_info_response(self.cust_id)