quickbooks-sync icon indicating copy to clipboard operation
quickbooks-sync copied to clipboard

Payment receipt template returns `true` for template type

Open rogerfar opened this issue 3 years ago • 4 comments

I was using a sample company today and noticed that all the templates of type Payment Receipt return a TemplateType of true.

Very strange behaviour, but breaks XML deserialization because it's expecting an enum.

<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="13.0"?>
<QBXML>
	<QBXMLMsgsRq onError="continueOnError">
		<TemplateQueryRq requestID="10a28a0a-526d-4dac-9282-5e87db89cbb7" />
	</QBXMLMsgsRq>
</QBXML>
<QBXML>
	<QBXMLMsgsRs>
		<TemplateQueryRs requestID="10a28a0a-526d-4dac-9282-5e87db89cbb7"
               			statusCode="0"
               			statusSeverity="Info"
               			statusMessage="Status OK">
			<TemplateRet>
				<ListID>A0000-1193777333</ListID>
				<TimeCreated>2007-10-30T14:48:53-07:00</TimeCreated>
				<TimeModified>2008-01-01T15:40:55-07:00</TimeModified>
				<EditSequence>1199227255</EditSequence>
				<Name>Work Order</Name>
				<IsActive>true</IsActive>
				<TemplateType>SalesOrder</TemplateType>
			</TemplateRet>
			<TemplateRet>
				<ListID>80000028-1924956754</ListID>
				<TimeCreated>2030-12-31T07:12:34-07:00</TimeCreated>
				<TimeModified>2030-12-31T07:12:34-07:00</TimeModified>
				<EditSequence>1924956754</EditSequence>
				<Name>Intuit Standard Payment Receipt</Name>
				<IsActive>true</IsActive>
				<TemplateType>true</TemplateType>
			</TemplateRet>
			<TemplateRet>
				<ListID>8000002A-1988119998</ListID>
				<TimeCreated>2032-12-31T08:33:18-07:00</TimeCreated>
				<TimeModified>2032-12-31T08:33:18-07:00</TimeModified>
				<EditSequence>1988119998</EditSequence>
				<Name>New Payment Receipt Template</Name>
				<IsActive>true</IsActive>
				<TemplateType>true</TemplateType>
			</TemplateRet>
		</TemplateQueryRs>
	</QBXMLMsgsRs>
</QBXML>

This seems a new type of template introduced in QB 2021 (https://www.intuitiveaccountant.com/accounting-tech/general-ledger/quickbooks-desktop-2021-customize-payment-receipts/).

I'm not sure if this something we should fix in the parser, or address with Intuit, but doing the latter will 99% result in a, works as intended, or we don't really care response.

rogerfar avatar Apr 07 '21 15:04 rogerfar

I doubt Intuit moves about these things. You can raise it on their developer community forum and see what people say about this. Wait a few days if you get an answer, but in the end, we should probably fix the qbxml130_modified.xsd then regenerate the Objects.cs

<xsd:element name="TemplateRet">
	<xsd:complexType>
		<xsd:sequence>
			<xsd:group ref="ListCore"/>
			<xsd:element name="Name" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="STRTYPE">
						<xsd:maxLength value="31"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element ref="IsActive" minOccurs="0"/>
			<xsd:element ref="TemplateType" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
</xsd:element>

Also, to note, that the XSD says minOccurs="0" but here it says it's mandatory: image

jsgoupil avatar Apr 08 '21 19:04 jsgoupil

So I received an answer from the development group, they weren't aware of the new template and they're looking into it... So maybe a fix in 2029 from Intuit?

rogerfar avatar Apr 27 '21 16:04 rogerfar

Unfortunately found another example, VendorQueryRs has a field ReportingPeriod which can return Annual, but according to the XML:

image

Contacting support about these kind of issues got me nowhere, so I manually filter the responses before parsing the XML:

xml = xml.Replace("<TemplateType>true</TemplateType>", "<TemplateType>PurchaseOrder</TemplateType>");
xml = xml.Replace("<ReportingPeriod>Annual</ReportingPeriod>", "<ReportingPeriod>Monthly</ReportingPeriod>");

rogerfar avatar Jan 12 '23 16:01 rogerfar

I think for those, I am fully open to edit the XML and generate new Objects.cs But I think based on the other bug we should move towards QbXML 16.

I think though, when I use this quickbooks-sync package, I know I will not be using QbXML 16 features and still need to support some QuickBooks v19, but I would still like to be able to update. In this case, we should be able to say which QBXML do we want to send to the wire.

jsgoupil avatar Jan 12 '23 22:01 jsgoupil