# This is an autogenerated file from the command "q2 generate_hq_api" and will be overwritten if run again
"""
Add single ach payment using SEC AchClassCode
"""
from typing import List, Optional
from lxml import etree
from q2_sdk.core.q2_logging.logger import Q2LoggerType
from q2_sdk.hq.models.hq_response import HqResponse
from q2_sdk.hq.models.hq_credentials import HqCredentials
from q2_sdk.hq.models.hq_params.base import BaseParameter
from q2_sdk.hq.models.hq_params.wedge_online_banking import WedgeOnlineBankingParamsObj
from q2_sdk.hq.models.hq_request.wedge_online_banking import WedgeOnlineBankingRequest
[docs]
class additionalElements(BaseParameter):
def __init__(self, string: List[str]):
self.string = string
[docs]
def serialize_as_xml(self):
root = etree.Element("additionalElements")
for i in self.string:
etree.SubElement(root, "string").text = str(i)
return root
[docs]
def serialize_as_json(self):
return [x for x in self.string]
[docs]
class wageGarnishmentAddendaRequest(BaseParameter):
def __init__(
self,
medical_support_indicator: bool,
disbursement_unit_name: Optional[str] = None,
tax_type_short_name: Optional[str] = None,
entry_type_short_name: Optional[str] = None,
case_identifier: Optional[str] = None,
garnished_ssn: Optional[str] = None,
originator_reference_id: Optional[str] = None,
additional_elements: Optional[additionalElements] = None,
tax_period_end_date: Optional[str] = None,
):
self.disbursement_unit_name = disbursement_unit_name
self.tax_type_short_name = tax_type_short_name
self.entry_type_short_name = entry_type_short_name
self.case_identifier = case_identifier
self.garnished_ssn = garnished_ssn
self.medical_support_indicator = medical_support_indicator
self.originator_reference_id = originator_reference_id
self.additional_elements = additional_elements
self.tax_period_end_date = tax_period_end_date
[docs]
def serialize_as_xml(self):
root = etree.Element("wageGarnishmentAddendaRequest")
elem = etree.SubElement(root, "disbursementUnitName")
elem.text = str(self.disbursement_unit_name)
elem = etree.SubElement(root, "taxTypeShortName")
elem.text = str(self.tax_type_short_name)
elem = etree.SubElement(root, "entryTypeShortName")
elem.text = str(self.entry_type_short_name)
elem = etree.SubElement(root, "caseIdentifier")
elem.text = str(self.case_identifier)
elem = etree.SubElement(root, "garnishedSSN")
elem.text = str(self.garnished_ssn)
elem = etree.SubElement(root, "medicalSupportIndicator")
elem.text = str(self.medical_support_indicator.real)
elem = etree.SubElement(root, "originatorReferenceId")
elem.text = str(self.originator_reference_id)
if self.additional_elements is not None:
for elem in self.additional_elements:
root.append(elem.serialize_as_xml())
elem = etree.SubElement(root, "taxPeriodEndDate")
elem.text = str(self.tax_period_end_date)
return root
[docs]
def serialize_as_json(self):
return {
"disbursementUnitName": self.disbursement_unit_name,
"taxTypeShortName": self.tax_type_short_name,
"entryTypeShortName": self.entry_type_short_name,
"caseIdentifier": self.case_identifier,
"garnishedSSN": self.garnished_ssn,
"medicalSupportIndicator": self.medical_support_indicator,
"originatorReferenceId": self.originator_reference_id,
"additionalElements": self.additional_elements,
"taxPeriodEndDate": self.tax_period_end_date,
}
[docs]
class ParamsObj(WedgeOnlineBankingParamsObj):
"""Parameters definition for AddSingleAchPaymentWithSecCode"""
def __init__(
self,
logger: Q2LoggerType,
hq_credentials: HqCredentials,
effective_date: str,
originating_account_id: int,
transaction_amount: float,
currency_code_id: int,
subsidiary_id: int,
template_id: int,
is_same_day_ach: bool,
wage_garnishment_tax_type_code_id: int,
transaction_type_short_name: Optional[str] = None,
description: Optional[str] = None,
aba: Optional[str] = None,
to_account_number: Optional[str] = None,
to_account_type: Optional[str] = None,
identification_number: Optional[str] = None,
to_name: Optional[str] = None,
discretionary_data: Optional[str] = None,
addenda: Optional[str] = None,
recipient_display_name: Optional[str] = None,
ach_class_code: Optional[str] = None,
email_address: Optional[str] = None,
company_entry_description: Optional[str] = None,
wage_garnishment_addenda: Optional[str] = None,
wage_garnishment_addenda_request: Optional[
wageGarnishmentAddendaRequest
] = None,
structured_addenda_type: Optional[str] = None,
):
"""
:param logger: Reference to calling request's logger (self.logger in your extension)
:param hq_credentials: HqCredentials instance with an hq_url and auth_token
:param effective_date:
:param originating_account_id: Q2_HostAccount.HostAccountID
:param transaction_amount: ex. 2.43
:param currency_code_id: Q2_CurrentyCode.CurrencyCodeID
:param subsidiary_id: Q2_Subsidiary.SubsidiaryID
:param template_id:
:param is_same_day_ach:
:param wage_garnishment_tax_type_code_id:
:param transaction_type_short_name:
:param description: Free form text
:param aba: Routing Number
:param to_account_number:
:param to_account_type:
:param identification_number:
:param to_name:
:param discretionary_data:
:param addenda:
:param recipient_display_name:
:param ach_class_code:
:param email_address: ex. test@q2ebanking.com
:param company_entry_description:
:param wage_garnishment_addenda:
:param wage_garnishment_addenda_request:
:param structured_addenda_type:
"""
super().__init__(logger, hq_credentials)
self.request_params.update({
"transactionTypeShortName": transaction_type_short_name,
"effectiveDate": effective_date,
"originatingAccountId": originating_account_id,
"transactionAmount": transaction_amount,
"currencyCodeId": currency_code_id,
"description": description,
"ABA": aba,
"toAccountNumber": to_account_number,
"toAccountType": to_account_type,
"identificationNumber": identification_number,
"toName": to_name,
"discretionaryData": discretionary_data,
"addenda": addenda,
"recipientDisplayName": recipient_display_name,
"achClassCode": ach_class_code,
"emailAddress": email_address,
"subsidiaryId": subsidiary_id,
"TemplateId": template_id,
"companyEntryDescription": company_entry_description,
"IsSameDayAch": is_same_day_ach,
"wageGarnishmentAddenda": wage_garnishment_addenda,
"wageGarnishmentTaxTypeCodeId": wage_garnishment_tax_type_code_id,
"wageGarnishmentAddendaRequest": wage_garnishment_addenda_request,
"structuredAddendaType": structured_addenda_type,
})
[docs]
async def execute(params_obj: ParamsObj, use_json=False, **kwargs) -> HqResponse:
"""
This is the default way to submit the request to HQ.
In theory, both json and soap payloads are equally accepted by HQ, though
several variables may affect that (HQ version, Q2SDK implementation bugs, etc).
This should not affect anything about the way your code deals with the data. In fact,
the only difference to consuming extensions is the logging.
Basically, call this with default parameters unless you find a compelling
reason not to.
:param params_obj: Object containing everything necessary to call this HQ endpoint
:param use_json: If True, will call HQ's .ashx (json) endpoint instead of .asmx (soap)
"""
request = WedgeOnlineBankingRequest(
"AddSingleAchPaymentWithSecCode", use_json=use_json, **kwargs
)
return await request.execute(params_obj, **kwargs)
[docs]
async def get_soap(params_obj: ParamsObj, **kwargs) -> HqResponse:
"""Deprecated. Please use execute instead"""
params_obj.logger.warning(
"AddSingleAchPaymentWithSecCode.get_soap is deprecated. Please use AddSingleAchPaymentWithSecCode.execute instead."
)
return await execute(params_obj, **kwargs)
[docs]
async def get_json(params_obj: ParamsObj, **kwargs) -> HqResponse:
"""Deprecated. Please use execute instead"""
params_obj.logger.warning(
"AddSingleAchPaymentWithSecCode.get_json is deprecated. Please use AddSingleAchPaymentWithSecCode.execute instead."
)
return await execute(params_obj, use_json=True, **kwargs)
[docs]
def build_json(params_obj: ParamsObj):
return WedgeOnlineBankingRequest.build_json(params_obj)
[docs]
def build_soap(params_obj: ParamsObj):
return WedgeOnlineBankingRequest(
"AddSingleAchPaymentWithSecCode", use_json=False
).build_soap(params_obj)