Makes cintas import work

This commit is contained in:
2023-04-04 12:48:37 -07:00
parent df33854d25
commit 9745cc4f3b
25 changed files with 645 additions and 65 deletions

View File

@@ -0,0 +1,4 @@
Test
This is a test file to test the sftp
Thanks
OPentext

View File

@@ -0,0 +1,4 @@
Test
This is a test file to test the sftp
Thanks
OPentext

View File

@@ -0,0 +1,167 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd">
<cXML version="1.0" payloadID="10032023 09390200.000" timestamp="2023-03-10T09:39:02-00:00" xml:lang="en-US">
<Header>
<From>
<Credential domain="DUNS">
<Identity>056481716-T</Identity>
</Credential>
</From>
<To>
<Credential domain="DUNS">
<Identity>NTGCORP-T</Identity>
</Credential>
</To>
<Sender>
<Credential domain="DUNS">
<Identity>056481716-T</Identity>
<SharedSecret>NtG$c7S</SharedSecret>
</Credential>
<UserAgent>Cintas</UserAgent>
</Sender>
</Header>
<Request deploymentMode="production">
<InvoiceDetailRequest>
<InvoiceDetailRequestHeader invoiceID="1500000592" operation="new" purpose="standard" invoiceDate="
2023-03-09T09:39:02-00:00">
<InvoiceDetailHeaderIndicator/>
<InvoiceDetailLineIndicator isAccountingInLine="yes"/>
<InvoicePartner>
<Contact role="remitTo">
<Name xml:lang="CINTAS CORPORATION #0464"/>
<PostalAddress>
<Street>PO BOX 29059</Street>
<City>Phoenix</City>
<State>AZ</State>
<PostalCode>850389059</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
</Contact>
</InvoicePartner>
<InvoiceDetailShipping>
<Contact addressID="3007" role="shipTo">
<Name xml:lang="en-US">NICK THE GREEK</Name>
<PostalAddress>
<Street>2034 BROADWAY ST</Street>
<City>REDWOOD CITY</City>
<State>CA</State>
<PostalCode>940631802</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
</Contact>
</InvoiceDetailShipping>
</InvoiceDetailRequestHeader>
<InvoiceDetailOrder>
<InvoiceDetailOrderInfo>
<OrderReference>
<DocumentReference payloadID="1500000592"/>
</OrderReference>
</InvoiceDetailOrderInfo>
<InvoiceDetailServiceItem quantity="1.000" invoiceLineNumber="000020">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X106</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">SERVICE CHARGE</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="ANC" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">2.56</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">2.56</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
<InvoiceDetailServiceItem quantity="4.000" invoiceLineNumber="000040">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X1919</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">2X3 WELLNESS AF MAT ONYX</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="FACSVCS" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">7.168</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">1.792</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
<InvoiceDetailServiceItem quantity="100.000" invoiceLineNumber="000050">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X2700</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">TERRY TOWEL - WHITE</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="FACSVCS" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">10.2</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">0.102</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
<InvoiceDetailServiceItem quantity="75.000" invoiceLineNumber="000060">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X2861</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">BIB APRON-RED</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="FACSVCS" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">19.95</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">0.266</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
</InvoiceDetailOrder>
<InvoiceDetailSummary>
<SubtotalAmount>
<Money currency="USD">39.88</Money>
</SubtotalAmount>
<Tax>
<Money currency="USD">0.00</Money>
<Description xml:lang="en-US">0.00</Description>
<TaxDetail purpose="tax" category="sales">
<TaxAmount>
<Money currency="USD">0.00</Money>
</TaxAmount>
<Description xml:lang="en-US">TAX ON ITEMS</Description>
</TaxDetail>
</Tax>
<GrossAmount>
<Money currency="USD">39.88</Money>
</GrossAmount>
<NetAmount>
<Money currency="USD">39.88</Money>
</NetAmount>
<DueAmount>
<Money currency="USD">39.88</Money>
</DueAmount>
</InvoiceDetailSummary>
</InvoiceDetailRequest>
</Request>
</cXML>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd">
<cXML version="1.0" payloadID="10032023 09390200.000" timestamp="2023-03-10T09:39:02-00:00" xml:lang="en-US">
<Header>
<From>
<Credential domain="DUNS">
<Identity>056481716-T</Identity>
</Credential>
</From>
<To>
<Credential domain="DUNS">
<Identity>NTGCORP-T</Identity>
</Credential>
</To>
<Sender>
<Credential domain="DUNS">
<Identity>056481716-T</Identity>
<SharedSecret>NtG$c7S</SharedSecret>
</Credential>
<UserAgent>Cintas</UserAgent>
</Sender>
</Header>
<Request deploymentMode="production">
<InvoiceDetailRequest>
<InvoiceDetailRequestHeader invoiceID="1500000593" operation="new" purpose="standard" invoiceDate="2023-03-09T09:39:02-00:00">
<InvoiceDetailHeaderIndicator/>
<InvoiceDetailLineIndicator isAccountingInLine="yes"/>
<InvoicePartner>
<Contact role="remitTo">
<Name xml:lang="CINTAS CORPORATION #0630"/>
<PostalAddress>
<Street>PO BOX 29059</Street>
<City>Phoenix</City>
<State>AZ</State>
<PostalCode>850389059</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
</Contact>
</InvoicePartner>
<InvoiceDetailShipping>
<Contact addressID="3005" role="shipTo">
<Name xml:lang="en-US">NICK THE GREEK</Name>
<PostalAddress>
<Street>125 BERNAL RD</Street>
<City>SAN JOSE</City>
<State>CA</State>
<PostalCode>951191397</PostalCode>
<Country isoCountryCode="US">United States</Country>
</PostalAddress>
</Contact>
</InvoiceDetailShipping>
</InvoiceDetailRequestHeader>
<InvoiceDetailOrder>
<InvoiceDetailOrderInfo>
<OrderReference>
<DocumentReference payloadID="1500000593"/>
</OrderReference>
</InvoiceDetailOrderInfo>
<InvoiceDetailServiceItem quantity="1.000" invoiceLineNumber="000020">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X106</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">SERVICE CHARGE</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="ANC" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">2.56</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">2.56</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
<InvoiceDetailServiceItem quantity="1.000" invoiceLineNumber="000030">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X1132</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">MINIMUM CHARGE</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="ANC" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">0.63</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">0.63</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
<InvoiceDetailServiceItem quantity="6.000" invoiceLineNumber="000040">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X1919</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">2X3 WELLNESS AF MAT ONYX</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="FACSVCS" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">10.752</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">1.792</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
<InvoiceDetailServiceItem quantity="50.000" invoiceLineNumber="000050">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X2700</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">TERRY TOWEL</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="FACSVCS" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">5.1</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">0.102</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
<InvoiceDetailServiceItem quantity="60.000" invoiceLineNumber="000060">
<InvoiceDetailServiceItemReference lineNumber="001">
<ItemID>
<SupplierPartID>X2861</SupplierPartID>
</ItemID>
<Description xml:lang="en-US">BIB APRON-RED</Description>
<Extrinsic name="CustomFields">
<IdReference identifier="FACSVCS" domain="CustomField">
<Description xml:lang="en">Product Category</Description>
</IdReference>
</Extrinsic>
</InvoiceDetailServiceItemReference>
<SubtotalAmount>
<Money currency="USD">15.96</Money>
</SubtotalAmount>
<UnitOfMeasure>EA</UnitOfMeasure>
<UnitPrice>
<Money currency="USD">0.266</Money>
</UnitPrice>
</InvoiceDetailServiceItem>
</InvoiceDetailOrder>
<InvoiceDetailSummary>
<SubtotalAmount>
<Money currency="USD">35.00</Money>
</SubtotalAmount>
<Tax>
<Money currency="USD">0.00</Money>
<Description xml:lang="en-US">0.00</Description>
<TaxDetail purpose="tax" category="sales">
<TaxAmount>
<Money currency="USD">0.00</Money>
</TaxAmount>
<Description xml:lang="en-US">TAX ON ITEMS</Description>
</TaxDetail>
</Tax>
<GrossAmount>
<Money currency="USD">35.00</Money>
</GrossAmount>
<NetAmount>
<Money currency="USD">35.00</Money>
</NetAmount>
<DueAmount>
<Money currency="USD">35.00</Money>
</DueAmount>
</InvoiceDetailSummary>
</InvoiceDetailRequest>
</Request>
</cXML>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd"><cXML version="1.0" payloadID="15032023 09240500.000" timestamp="2023-03-15T09:24:05-00:00" xml:lang="en-US"><Header><From><Credential domain="DUNS"><Identity>056481716-T</Identity></Credential></From><To><Credential domain="DUNS"><Identity>NTGCORP-T</Identity></Credential></To><Sender><Credential domain="DUNS"><Identity>056481716-T</Identity><SharedSecret>NtG$c7S</SharedSecret></Credential><UserAgent>Cintas</UserAgent></Sender></Header><Request deploymentMode="production"><InvoiceDetailRequest><InvoiceDetailRequestHeader invoiceID="9200208324" operation="new" purpose="creditMemo" invoiceDate="2023-03-09T09:24:05-00:00"><InvoiceDetailHeaderIndicator></InvoiceDetailHeaderIndicator><InvoiceDetailLineIndicator isAccountingInLine="yes"></InvoiceDetailLineIndicator><InvoicePartner><Contact role="remitTo"><Name xml:lang="CINTAS CORPORATION #0464"></Name><PostalAddress><Street>PO BOX 29059</Street><City>Phoenix</City><State>AZ</State><PostalCode>850389059</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoicePartner><InvoiceDetailShipping><Contact addressID="3007" role="shipTo"><Name xml:lang="en-US">NICK THE GREEK</Name><PostalAddress><Street>2034 BROADWAY ST</Street><City>REDWOOD CITY</City><State>CA</State><PostalCode>940631802</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoiceDetailShipping></InvoiceDetailRequestHeader><InvoiceDetailOrder><InvoiceDetailOrderInfo><OrderReference><DocumentReference payloadID="9200208324"></DocumentReference></OrderReference></InvoiceDetailOrderInfo><InvoiceDetailServiceItem quantity="-1.000" invoiceLineNumber="000020"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X106</SupplierPartID></ItemID><Description xml:lang="en-US">SERVICE CHARGE</Description><Extrinsic name="CustomFields"><IdReference identifier="ANC" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">2.56</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">2.56</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="-4.000" invoiceLineNumber="000040"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X1919</SupplierPartID></ItemID><Description xml:lang="en-US">2X3 WELLNESS AF MAT ONYX</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">7.168</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">1.792</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="-100.000" invoiceLineNumber="000050"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2700</SupplierPartID></ItemID><Description xml:lang="en-US">TERRY TOWEL - WHITE</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">10.2</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.102</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="-75.000" invoiceLineNumber="000060"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2861</SupplierPartID></ItemID><Description xml:lang="en-US">BIB APRON-RED</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">19.95</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.266</Money></UnitPrice></InvoiceDetailServiceItem></InvoiceDetailOrder><InvoiceDetailSummary><SubtotalAmount><Money currency="USD">-39.88</Money></SubtotalAmount><Tax><Money currency="USD">0.00</Money><Description xml:lang="en-US">0.00</Description><TaxDetail purpose="tax" category="sales"><TaxAmount><Money currency="USD">0.00</Money></TaxAmount><Description xml:lang="en-US">TAX ON ITEMS</Description></TaxDetail></Tax><GrossAmount><Money currency="USD">-39.88</Money></GrossAmount><NetAmount><Money currency="USD">-39.88</Money></NetAmount><DueAmount><Money currency="USD">-39.88</Money></DueAmount></InvoiceDetailSummary></InvoiceDetailRequest></Request></cXML>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd"><cXML version="1.0" payloadID="15032023 09240500.000" timestamp="2023-03-15T09:24:05-00:00" xml:lang="en-US"><Header><From><Credential domain="DUNS"><Identity>056481716-T</Identity></Credential></From><To><Credential domain="DUNS"><Identity>NTGCORP-T</Identity></Credential></To><Sender><Credential domain="DUNS"><Identity>056481716-T</Identity><SharedSecret>NtG$c7S</SharedSecret></Credential><UserAgent>Cintas</UserAgent></Sender></Header><Request deploymentMode="production"><InvoiceDetailRequest><InvoiceDetailRequestHeader invoiceID="1500000601" operation="new" purpose="standard" invoiceDate="2023-03-15T09:24:05-00:00"><InvoiceDetailHeaderIndicator></InvoiceDetailHeaderIndicator><InvoiceDetailLineIndicator isAccountingInLine="yes"></InvoiceDetailLineIndicator><InvoicePartner><Contact role="remitTo"><Name xml:lang="CINTAS CORPORATION #0630"></Name><PostalAddress><Street>PO BOX 29059</Street><City>Phoenix</City><State>AZ</State><PostalCode>850389059</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoicePartner><InvoiceDetailShipping><Contact addressID="3005" role="shipTo"><Name xml:lang="en-US">NICK THE GREEK</Name><PostalAddress><Street>125 BERNAL RD</Street><City>SAN JOSE</City><State>CA</State><PostalCode>951191397</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoiceDetailShipping></InvoiceDetailRequestHeader><InvoiceDetailOrder><InvoiceDetailOrderInfo><OrderReference><DocumentReference payloadID="1500000601"></DocumentReference></OrderReference></InvoiceDetailOrderInfo><InvoiceDetailServiceItem quantity="1.000" invoiceLineNumber="000020"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X106</SupplierPartID></ItemID><Description xml:lang="en-US">SERVICE CHARGE</Description><Extrinsic name="CustomFields"><IdReference identifier="ANC" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">2.56</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">2.56</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="6.000" invoiceLineNumber="000040"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X1919</SupplierPartID></ItemID><Description xml:lang="en-US">2X3 WELLNESS AF MAT ONYX</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">10.752</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">1.792</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="60.000" invoiceLineNumber="000060"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2861</SupplierPartID></ItemID><Description xml:lang="en-US">BIB APRON-RED</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">15.96</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.266</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="3.000" invoiceLineNumber="000070"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X10223</SupplierPartID></ItemID><Description xml:lang="en-US">3X5 XTRAC MAT INGO</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">16.896</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">5.632</Money></UnitPrice></InvoiceDetailServiceItem></InvoiceDetailOrder><InvoiceDetailSummary><SubtotalAmount><Money currency="USD">46.17</Money></SubtotalAmount><Tax><Money currency="USD">0.00</Money><Description xml:lang="en-US">0.00</Description><TaxDetail purpose="tax" category="sales"><TaxAmount><Money currency="USD">0.00</Money></TaxAmount><Description xml:lang="en-US">TAX ON ITEMS</Description></TaxDetail></Tax><GrossAmount><Money currency="USD">46.17</Money></GrossAmount><NetAmount><Money currency="USD">46.17</Money></NetAmount><DueAmount><Money currency="USD">46.17</Money></DueAmount></InvoiceDetailSummary></InvoiceDetailRequest></Request></cXML>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd"><cXML version="1.0" payloadID="27032023 12240200.000" timestamp="2023-03-27T12:24:02-00:00" xml:lang="en-US"><Header><From><Credential domain="DUNS"><Identity>056481716-T</Identity></Credential></From><To><Credential domain="DUNS"><Identity>NTGCORP-T</Identity></Credential></To><Sender><Credential domain="DUNS"><Identity>056481716-T</Identity><SharedSecret>NtG$c7S</SharedSecret></Credential><UserAgent>Cintas</UserAgent></Sender></Header><Request deploymentMode="production"><InvoiceDetailRequest><InvoiceDetailRequestHeader invoiceID="1500000604" operation="new" purpose="standard" invoiceDate="2023-03-16T12:24:02-00:00"><InvoiceDetailHeaderIndicator></InvoiceDetailHeaderIndicator><InvoiceDetailLineIndicator isAccountingInLine="yes"></InvoiceDetailLineIndicator><InvoicePartner><Contact role="remitTo"><Name xml:lang="CINTAS CORPORATION #0622"></Name><PostalAddress><Street>PO BOX 29059</Street><City>Phoenix</City><State>AZ</State><PostalCode>850389059</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoicePartner><InvoiceDetailShipping><Contact addressID="31025" role="shipTo"><Name xml:lang="en-US">NICK THE GREEK</Name><PostalAddress><Street>206 E ST</Street><City>DAVIS</City><State>CA</State><PostalCode>956164522</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoiceDetailShipping></InvoiceDetailRequestHeader><InvoiceDetailOrder><InvoiceDetailOrderInfo><OrderReference><DocumentReference payloadID="1500000604"></DocumentReference></OrderReference></InvoiceDetailOrderInfo><InvoiceDetailServiceItem quantity="1.000" invoiceLineNumber="000020"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X106</SupplierPartID></ItemID><Description xml:lang="en-US">SERVICE CHARGE</Description><Extrinsic name="CustomFields"><IdReference identifier="ANC" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">2.56</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">2.56</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="3.000" invoiceLineNumber="000040"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X10197</SupplierPartID></ItemID><Description xml:lang="en-US">4X6 TRAFFIC MAT</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">15.36</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">5.12</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="100.000" invoiceLineNumber="000050"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2700</SupplierPartID></ItemID><Description xml:lang="en-US">TERRY TOWEL - WHITE</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">10.2</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.102</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="50.000" invoiceLineNumber="000060"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2873</SupplierPartID></ItemID><Description xml:lang="en-US">BIB APRON-BLACK</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">10.25</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.205</Money></UnitPrice></InvoiceDetailServiceItem></InvoiceDetailOrder><InvoiceDetailSummary><SubtotalAmount><Money currency="USD">38.37</Money></SubtotalAmount><Tax><Money currency="USD">0.00</Money><Description xml:lang="en-US">0.00</Description><TaxDetail purpose="tax" category="sales"><TaxAmount><Money currency="USD">0.00</Money></TaxAmount><Description xml:lang="en-US">TAX ON ITEMS</Description></TaxDetail></Tax><GrossAmount><Money currency="USD">38.37</Money></GrossAmount><NetAmount><Money currency="USD">38.37</Money></NetAmount><DueAmount><Money currency="USD">38.37</Money></DueAmount></InvoiceDetailSummary></InvoiceDetailRequest></Request></cXML>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd"><cXML version="1.0" payloadID="10032023 09390200.000" timestamp="2023-03-10T09:39:02-00:00" xml:lang="en-US"><Header><From><Credential domain="DUNS"><Identity>056481716-T</Identity></Credential></From><To><Credential domain="DUNS"><Identity>NTGCORP-T</Identity></Credential></To><Sender><Credential domain="DUNS"><Identity>056481716-T</Identity><SharedSecret>NtG$c7S</SharedSecret></Credential><UserAgent>Cintas</UserAgent></Sender></Header><Request deploymentMode="production"><InvoiceDetailRequest><InvoiceDetailRequestHeader invoiceID="1500000592" operation="new" purpose="standard" invoiceDate="2023-03-09T09:39:02-00:00"><InvoiceDetailHeaderIndicator></InvoiceDetailHeaderIndicator><InvoiceDetailLineIndicator isAccountingInLine="yes"></InvoiceDetailLineIndicator><InvoicePartner><Contact role="remitTo"><Name xml:lang="CINTAS CORPORATION #0464"></Name><PostalAddress><Street>PO BOX 29059</Street><City>Phoenix</City><State>AZ</State><PostalCode>850389059</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoicePartner><InvoiceDetailShipping><Contact addressID="3007" role="shipTo"><Name xml:lang="en-US">NICK THE GREEK</Name><PostalAddress><Street>2034 BROADWAY ST</Street><City>REDWOOD CITY</City><State>CA</State><PostalCode>940631802</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoiceDetailShipping></InvoiceDetailRequestHeader><InvoiceDetailOrder><InvoiceDetailOrderInfo><OrderReference><DocumentReference payloadID="1500000592"></DocumentReference></OrderReference></InvoiceDetailOrderInfo><InvoiceDetailServiceItem quantity="1.000" invoiceLineNumber="000020"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X106</SupplierPartID></ItemID><Description xml:lang="en-US">SERVICE CHARGE</Description><Extrinsic name="CustomFields"><IdReference identifier="ANC" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">2.56</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">2.56</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="4.000" invoiceLineNumber="000040"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X1919</SupplierPartID></ItemID><Description xml:lang="en-US">2X3 WELLNESS AF MAT ONYX</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">7.168</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">1.792</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="100.000" invoiceLineNumber="000050"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2700</SupplierPartID></ItemID><Description xml:lang="en-US">TERRY TOWEL - WHITE</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">10.2</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.102</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="75.000" invoiceLineNumber="000060"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2861</SupplierPartID></ItemID><Description xml:lang="en-US">BIB APRON-RED</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">19.95</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.266</Money></UnitPrice></InvoiceDetailServiceItem></InvoiceDetailOrder><InvoiceDetailSummary><SubtotalAmount><Money currency="USD">39.88</Money></SubtotalAmount><Tax><Money currency="USD">0.00</Money><Description xml:lang="en-US">0.00</Description><TaxDetail purpose="tax" category="sales"><TaxAmount><Money currency="USD">0.00</Money></TaxAmount><Description xml:lang="en-US">TAX ON ITEMS</Description></TaxDetail></Tax><GrossAmount><Money currency="USD">39.88</Money></GrossAmount><NetAmount><Money currency="USD">39.88</Money></NetAmount><DueAmount><Money currency="USD">39.88</Money></DueAmount></InvoiceDetailSummary></InvoiceDetailRequest></Request></cXML>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE cXML SYSTEM "http://xml.cXML.org/schemas/cXML/1.2.020/InvoiceDetail.dtd"><cXML version="1.0" payloadID="27032023 12240200.000" timestamp="2023-03-27T12:24:02-00:00" xml:lang="en-US"><Header><From><Credential domain="DUNS"><Identity>056481716-T</Identity></Credential></From><To><Credential domain="DUNS"><Identity>NTGCORP-T</Identity></Credential></To><Sender><Credential domain="DUNS"><Identity>056481716-T</Identity><SharedSecret>NtG$c7S</SharedSecret></Credential><UserAgent>Cintas</UserAgent></Sender></Header><Request deploymentMode="production"><InvoiceDetailRequest><InvoiceDetailRequestHeader invoiceID="1500000604" operation="new" purpose="standard" invoiceDate="2023-03-16T12:24:02-00:00"><InvoiceDetailHeaderIndicator></InvoiceDetailHeaderIndicator><InvoiceDetailLineIndicator isAccountingInLine="yes"></InvoiceDetailLineIndicator><InvoicePartner><Contact role="remitTo"><Name xml:lang="CINTAS CORPORATION #0622"></Name><PostalAddress><Street>PO BOX 29059</Street><City>Phoenix</City><State>AZ</State><PostalCode>850389059</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoicePartner><InvoiceDetailShipping><Contact addressID="31025" role="shipTo"><Name xml:lang="en-US">NICK THE GREEK</Name><PostalAddress><Street>206 E ST</Street><City>DAVIS</City><State>CA</State><PostalCode>956164522</PostalCode><Country isoCountryCode="US">United States</Country></PostalAddress></Contact></InvoiceDetailShipping></InvoiceDetailRequestHeader><InvoiceDetailOrder><InvoiceDetailOrderInfo><OrderReference><DocumentReference payloadID="1500000604"></DocumentReference></OrderReference></InvoiceDetailOrderInfo><InvoiceDetailServiceItem quantity="1.000" invoiceLineNumber="000020"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X106</SupplierPartID></ItemID><Description xml:lang="en-US">SERVICE CHARGE</Description><Extrinsic name="CustomFields"><IdReference identifier="ANC" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">2.56</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">2.56</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="3.000" invoiceLineNumber="000040"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X10197</SupplierPartID></ItemID><Description xml:lang="en-US">4X6 TRAFFIC MAT</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">15.36</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">5.12</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="100.000" invoiceLineNumber="000050"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2700</SupplierPartID></ItemID><Description xml:lang="en-US">TERRY TOWEL - WHITE</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">10.2</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.102</Money></UnitPrice></InvoiceDetailServiceItem><InvoiceDetailServiceItem quantity="50.000" invoiceLineNumber="000060"><InvoiceDetailServiceItemReference lineNumber="001"><ItemID><SupplierPartID>X2873</SupplierPartID></ItemID><Description xml:lang="en-US">BIB APRON-BLACK</Description><Extrinsic name="CustomFields"><IdReference identifier="FACSVCS" domain="CustomField"><Description xml:lang="en">Product Category</Description></IdReference></Extrinsic></InvoiceDetailServiceItemReference><SubtotalAmount><Money currency="USD">10.25</Money></SubtotalAmount><UnitOfMeasure>EA</UnitOfMeasure><UnitPrice><Money currency="USD">0.205</Money></UnitPrice></InvoiceDetailServiceItem></InvoiceDetailOrder><InvoiceDetailSummary><SubtotalAmount><Money currency="USD">38.37</Money></SubtotalAmount><Tax><Money currency="USD">0.00</Money><Description xml:lang="en-US">0.00</Description><TaxDetail purpose="tax" category="sales"><TaxAmount><Money currency="USD">0.00</Money></TaxAmount><Description xml:lang="en-US">TAX ON ITEMS</Description></TaxDetail></Tax><GrossAmount><Money currency="USD">38.37</Money></GrossAmount><NetAmount><Money currency="USD">38.37</Money></NetAmount><DueAmount><Money currency="USD">38.37</Money></DueAmount></InvoiceDetailSummary></InvoiceDetailRequest></Request></cXML>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -2,61 +2,37 @@
(:require (:require
[amazonica.aws.s3 :as s3] [amazonica.aws.s3 :as s3]
[auto-ap.datomic :refer [conn]] [auto-ap.datomic :refer [conn]]
[auto-ap.datomic.clients :as d-clients]
[auto-ap.datomic.invoices :refer [code-invoice]]
[auto-ap.jobs.core :refer [execute]] [auto-ap.jobs.core :refer [execute]]
[auto-ap.ledger :refer [transact-with-ledger]] [auto-ap.ledger :refer [transact-with-ledger]]
[auto-ap.logging :as log]
[auto-ap.parse :as parse] [auto-ap.parse :as parse]
[auto-ap.time :as t] [auto-ap.time :as atime]
[clj-time.coerce :as coerce] [clj-time.coerce :as coerce]
[clj-time.core :as time]
[clojure.data.csv :as csv] [clojure.data.csv :as csv]
[clojure.java.io :as io] [clojure.java.io :as io]
[clojure.string :as str] [clojure.string :as str]
[auto-ap.logging :as log :refer [capture-context->lc with-context-as]] [clojure.xml :as xml]
[com.unbounce.dogstatsd.core :as statsd] [clojure.zip :as zip]
[config.core :refer [env]] [datomic.api :as d])
[datomic.api :as d]
[com.brunobonacci.mulog :as mu]
[auto-ap.time :as atime])
(:import (:import
(java.util UUID))) (java.util UUID)))
(def bucket-name "data.prod.app.integreatconsult.com" #_(:data-bucket env)) (def bucket-name "data.prod.app.integreatconsult.com" #_(:data-bucket env))
(defn read-csv [k] (defn read-csv [stream]
(log/info ::reading-csv :key k) (-> stream
(-> (s3/get-object {:bucket-name bucket-name
:key k})
:input-stream
io/reader io/reader
csv/read-csv)) csv/read-csv))
(defn read-xml [stream]
(-> (slurp stream)
(.getBytes)
(java.io.ByteArrayInputStream. )
xml/parse
zip/xml-zip))
(defn extract-invoice-details [csv-rows clients]
(clojure.pprint/pprint (take 4 csv-rows))
(->> csv-rows
(drop 1)
(filter (fn [[_ _ _ _ _ _ _ _ _ _ _ break-flag]]
(= "Y" break-flag)))
(map (fn [[vendor location-hint invoice-number ship-date invoice-total ]]
(let [[matching-client similarity] (and location-hint
(parse/best-match clients location-hint 0.0))]
(clojure.pprint/pprint {:invoice/vendor vendor
:invoice/location (parse/best-location-match matching-client location-hint location-hint )
:invoice/date (coerce/to-date (atime/parse ship-date atime/normal-date))
:invoice/invoice-number invoice-number
:invoice/total (Double/parseDouble invoice-total)
:invoice/outstanding-balance (Double/parseDouble invoice-total)
:invoice/client matching-client
:invoice/import-status :import-status/completed
:invoice/status :invoice-status/unpaid
:invoice/client-identifier location-hint
}))))
(filter :invoice/client)))
(defn mark-key [k] (defn mark-key [k]
(s3/copy-object {:source-bucket-name bucket-name (s3/copy-object {:source-bucket-name bucket-name
@@ -69,46 +45,212 @@
(defn is-csv-file? [x] (defn is-csv-file? [x]
(= "csv" (last (str/split x #"[\\.]")))) (= "csv" (last (str/split x #"[\\.]"))))
(defn decipher-source [k]
(cond
(str/includes? k "Cintas")
:cintas
(and (str/includes? k "GeneralProduce")
(is-csv-file? k))
:general-produce
:else
:unknown))
(defmulti extract-invoice-details (fn [key input-stream clients]
(decipher-source key)))
(defmethod extract-invoice-details :general-produce
[k input-stream clients]
(log/info ::parsing-general-produce :key k)
(->> (read-csv input-stream)
(drop 1)
(filter (fn [[_ _ _ _ _ _ _ _ _ _ _ break-flag]]
(= "Y" break-flag)))
(map (fn [[vendor location-hint invoice-number ship-date invoice-total ]]
(let [[matching-client similarity] (and location-hint
(parse/best-match clients location-hint 0.0))]
{:invoice/vendor vendor
:invoice/location (parse/best-location-match matching-client location-hint location-hint )
:invoice/date (coerce/to-date (atime/parse ship-date atime/normal-date))
:invoice/invoice-number invoice-number
:invoice/total (Double/parseDouble invoice-total)
:invoice/outstanding-balance (Double/parseDouble invoice-total)
:invoice/client matching-client
:invoice/import-status :import-status/imported
:invoice/status :invoice-status/unpaid
:invoice/client-identifier location-hint
})))
(filter :invoice/client)))
(defmethod extract-invoice-details :unknown
[k input-stream clients]
(log/warn ::unknown-invoice-format
:key k)
[])
(defn zip-seq [zipper]
(->> (zip/xml-zip (zip/node zipper))
(iterate zip/next )
(take-while (complement zip/end?))))
(defmethod extract-invoice-details :cintas
[k input-stream clients]
(log/info ::parsing-cintas :key k)
(let [vendor (d/pull (d/db conn) '[:vendor/default-account] :vendor/cintas)
top (read-xml input-stream)
node-seq (->> top
(iterate zip/next)
(take-while (complement zip/end?)))
location-hint (->> node-seq
(filter (fn [z]
(= (:tag (zip/node z))
:InvoiceDetailShipping)))
first
zip-seq
(map zip/node)
(filter (fn [node]
(= :Street
(:tag node))))
first
:content
first)
[matching-client similarity] (and location-hint (parse/best-match clients location-hint 0.0))
]
(if matching-client
(let [invoice-date (->> node-seq
(map zip/node)
(filter (fn [node]
(= (:tag node)
:InvoiceDetailRequestHeader)))
first
(#(-> % :attrs :invoiceDate
coerce/to-date-time
atime/localize
(atime/unparse atime/iso-date)
(atime/parse atime/iso-date))))
location (parse/best-location-match matching-client location-hint location-hint )
due (-> invoice-date
(time/plus (time/days 30))
(coerce/to-date))
total (->> node-seq
(filter (fn [zipper]
(= (:tag (zip/node zipper))
:NetAmount)))
first
zip-seq
(map zip/node)
(filter (fn [node]
(= :Money
(:tag node))))
first
:content
first
Double/parseDouble)
invoice {:invoice/vendor :vendor/cintas
:invoice/import-status :import-status/imported
:invoice/status :invoice-status/unpaid
:invoice/location location
:invoice/client-identifier location-hint
:invoice/client (:db/id matching-client)
:invoice/total total
:invoice/outstanding-balance total
:invoice/invoice-number (->> node-seq
(map zip/node)
(filter (fn [node]
(= (:tag node)
:InvoiceDetailRequestHeader)))
first
(#(-> % :attrs :invoiceID)))
:invoice/due due
:invoice/scheduled-payment (when-not ((into #{} (->> matching-client
:client/feature-flags))
"manually-pay-cintas")
due)
:invoice/date (coerce/to-date invoice-date)
:invoice/expense-accounts [{:invoice-expense-account/account
(-> vendor :vendor/default-account :db/id)
:invoice-expense-account/location location
:invoice-expense-account/amount (Math/abs total)
}]}]
(log/info ::cintas-invoice-importing
:invoice invoice)
[invoice])
(do
(log/info ::missing-client
:client-hint location-hint)
[]))))
(defn mark-error [k]
(s3/copy-object {:source-bucket-name bucket-name
:destination-bucket-name bucket-name
:source-key k
:destination-key (str "ntg-invoices/error/"
(.getName (io/file k)))}))
(defn copy-readable-version [k]
(let [invoice-key (str "invoice-files/" (UUID/randomUUID) "." (last (str/split k #"[\\.]")))]
(log/info ::assigned-random-key
:key k
:invoice-key invoice-key)
(s3/copy-object {:source-bucket-name bucket-name
:destination-bucket-name bucket-name
:source-key k
:destination-key invoice-key })
invoice-key))
(defn import-ntg-invoices [] (defn import-ntg-invoices []
(let [clients (d-clients/get-all) (let [clients (map first (d/q '[:find (pull ?c [:client/code
keys (->> (s3/list-objects-v2 {:bucket-name bucket-name :db/id
:prefix "ntg-invoices/pending"}) :client/feature-flags
:object-summaries {:client/location-matches [:location-match/matches :location-match/location]}
(map :key))] :client/name
:client/matches
:client/locations])
:where [?c :client/code]]
(d/db conn)))
keys (->> (s3/list-objects-v2 {:bucket-name bucket-name
:prefix "ntg-invoices/pending"})
:object-summaries
(map :key))]
(log/info ::found-invoice-keys (log/info ::found-invoice-keys
:keys keys ) :keys keys )
(let [transaction (->> keys (let [transaction (->> keys
(filter is-csv-file?)
(mapcat (fn [k] (mapcat (fn [k]
(try (try
(log/info ::trying-csv :key k) (let [invoice-key (copy-readable-version k)
(let [invoice-key (str "invoice-files/" (UUID/randomUUID) ".csv") ;
invoice-url (str "http://" bucket-name ".s3-website-us-east-1.amazonaws.com/" invoice-key)] invoice-url (str "http://" bucket-name ".s3-website-us-east-1.amazonaws.com/" invoice-key)]
(s3/copy-object {:source-bucket-name bucket-name (with-open [is (-> (s3/get-object {:bucket-name bucket-name
:destination-bucket-name bucket-name :key k})
:source-key k :input-stream)]
:destination-key invoice-key}) (doto
(->> (extract-invoice-details (read-csv k) clients) (->> (extract-invoice-details k
(map (fn [i] is
[:propose-invoice (assoc i :invoice/source-url invoice-url)])) clients)
)) (map (fn [i]
(log/info ::importing-invoice
:invoice i)
i))
(mapv (fn [i]
[:propose-invoice (assoc i :invoice/source-url invoice-url)])))
println)))
(catch Exception e (catch Exception e
(log/error ::cant-load-file (log/error ::cant-load-file
:key k :key k
:exception e) :exception e)
(log/info (mark-error k)
(s3/copy-object {:source-bucket-name bucket-name []))))
:destination-bucket-name bucket-name (into []))]
:source-key k (transact-with-ledger transaction {:user/name "sysco importer" :user/role "admin"})
:destination-key (str "ntg-invoices/error/" (log/info ::success
(.getName (io/file k)))})) :count (count transaction)
[]))))) :sample (take 3 transaction)))
#_result #_(transact-with-ledger transaction {:user/name "sysco importer" :user/role "admin"})]
(clojure.pprint/pprint transaction)
#_(log/infof "Imported %d invoices" (/ (count (:tempids result)) 2)))
(doseq [k keys] (doseq [k keys]
(mark-key k)))) (mark-key k))))

View File

@@ -0,0 +1,58 @@
(ns auto-ap.integration.jobs.ntg
(:require [auto-ap.jobs.ntg :as sut]
[auto-ap.integration.util :refer [wrap-setup admin-token setup-test-data test-vendor test-account dissoc-id]]
[clojure.test :as t :refer [deftest is testing use-fixtures]]
[datomic.api :as d]
[clojure.java.io :as io]))
(use-fixtures :each wrap-setup)
(deftest extract-invoice-details-cintas
(testing "Should parse a single cintas invoice"
(let [client {:db/id 1
:client/name "NICK THE GREEK"
:client/locations ["OP"]
:client/matches ["2034 BROADWAY ST"]}]
(is (=
[{:invoice/invoice-number "1500000592"
:invoice/date #inst "2023-03-09T08:00:00-00:00"
:invoice/due #inst "2023-04-08T07:00:00-00:00"
:invoice/import-status :import-status/imported
:invoice/client-identifier "2034 BROADWAY ST"
:invoice/location "OP"
:invoice/status :invoice-status/unpaid
:invoice/vendor :vendor/cintas
:invoice/scheduled-payment #inst "2023-04-08T07:00:00-00:00"
:invoice/client 1
:invoice/total 39.88
:invoice/outstanding-balance 39.88
}]
(map #(dissoc % :invoice/expense-accounts)
(sut/extract-invoice-details "ntg-invoices/Cintas/123"
(io/input-stream (io/resource "test-cintas/o.zcic.230310093903"))
[client]))))))
(testing "Should disable automatic payment based on feature flag"
(let [client {:db/id 1
:client/name "NICK THE GREEK"
:client/locations ["OP"]
:client/matches ["2034 BROADWAY ST"]
:client/feature-flags ["manually-pay-cintas"]}]
(is (nil? (->> (sut/extract-invoice-details "ntg-invoices/Cintas/123"
(io/input-stream (io/resource "test-cintas/o.zcic.230310093903"))
[client])
first
:invoice/scheduled-payment)))))
(testing "Should not import anything when there isn't an exact match"
(let [client {:db/id 1
:client/name "NICK THE GREEK"
:client/locations ["OP"]
:client/matches ["123 time square"]}]
(is (=
[]
(sut/extract-invoice-details "ntg-invoices/Cintas/123"
(io/input-stream (io/resource "test-cintas/o.zcic.230310093903"))
[client]))))))