from lxml.etree import tostring
from lxml.objectify import E
from q2_sdk.core.dynamic_imports import (
api_ExecuteStoredProcedure as ExecuteStoredProcedure,
)
from q2_sdk.hq.models.hq_params.stored_procedure import ParamsBuilder
from q2_sdk.hq.table_row import TableRow
from .db_object import DbObject
D_TYPES = ExecuteStoredProcedure.DataType
[docs]
class TemplateRow(TableRow):
TemplateID: int
TransactionTypeID: int
TransactionType: str
TransactionTypeDescription: str
BitFlags: int
Name: str
Description: str
CustomerID: int
CreateDate: str
LastEditDate: str
IsSinglePayment: bool
RecipientCount: int
ACHClassCodeID: int
ACHClassCode: int
DefaultAccountID: int
DefaultSubsidiaryID: int
LastPaymentProcessedDate: str
LastPaymentProcessedAmount: str
CompanyEntryDescription: str
[docs]
class TemplateRecipientRow(TableRow):
TemplateID: int
RecipientID: int
[docs]
class Template(DbObject):
GET_BY_NAME_KEY = "Name"
NAME = "Template"
REPRESENTATION_ROW_CLASS = TemplateRow
[docs]
async def get(self, user_id: int) -> list[TemplateRow]:
assert isinstance(user_id, int), "Please supply a valid user id"
response = await self.call_hq(
"Q2_TemplateAccessData",
ExecuteStoredProcedure.SqlParameters([
ExecuteStoredProcedure.SqlParam(
ExecuteStoredProcedure.DataType.Int, "UserID", user_id
)
]),
specific_table="Table1",
)
return response
[docs]
async def get_template_recipients(
self, template_id: int
) -> list[TemplateRecipientRow]:
assert isinstance(template_id, int), "Please supply a valid user id"
response = await self.call_hq(
"sdk_GetTemplateRecipients",
ExecuteStoredProcedure.SqlParameters([
ExecuteStoredProcedure.SqlParam(
ExecuteStoredProcedure.DataType.Int, "template_id", template_id
)
]),
representation_class_override=TemplateRecipientRow,
)
return response
[docs]
async def get_by_subsidiary_ids(
self,
subsidiary_ids: list[int],
) -> list[TemplateRow]:
"""
Get templates for the specified subsidiary IDs.
:param subsidiary_ids: list of Q2_Subsidiary.SubsidiaryID to query
"""
subsidiary_nodes = [E.subsidiary(id=str(sid)) for sid in subsidiary_ids]
request_xml = E.root(*subsidiary_nodes)
request = tostring(request_xml, encoding="utf-8")
params = (
ParamsBuilder().add_param(D_TYPES.Xml, "request", request.decode()).build()
)
return await self.call_hq(
"sdk_GetTemplatesBySubsidiaryIds",
ExecuteStoredProcedure.SqlParameters(params),
)