Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM

Size: px
Start display at page:

Download "Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM"

Transcription

1 Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM Version 01 Revision date: 11/10/16 Product release: Microsoft NAV Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license agreement from Avalara, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property Avalara, Inc. All rights reserved. Avalara, AvaTax, AvaTax Calc, AvaTax Returns, AvaTax Certs, AvaTax Local, AvaLocal, AvaTax POS, AvaPOS, AvaRates, TrustFile, BPObridge, Laserbridge+, Sales Taxll, Sales TaxPC, SalestaxPC+, StatetaxII, and StatetaxPC are either registered trademarks or trademarks of Avalara, Inc. in the United States or other countries. All other trademarks are property of their respective owners..

2 Microsoft Dynamics NAV - Product Details... 5 AvaTax Integration for Sales & Service Module... 6 Changes in Codeunits... 6 Codeunit 12 Gen. Jnl.-Post... 6 Codeunit 46 SelectionFilterManagement... 7 Codeunit 80 Sales-Post... 9 Codeunit 398 Sales Tax Calculate Codeunit 414 Release Sales Document Codeunit 442 Sales-Post Prepayments Codeunit 5980 Service-Post Codeunit 5986 Serv-Amounts Mgt Codeunit 5987 Serv-Posting Journals Mgt Codeunit 5988 Serv-Documents Mgt Changes in Pages Page 1 Company Information Page 21 Customer Card Page 22 Customer List Page 41 Sales Quote Page 42 Sales Order Page 43 Sales Invoice Page 44 Sales Credit Memo Page 46 Sales Order Subform Page 47 Sales Invoice Subform Page 95 Sales Quote Subform Page 96 Sales Cr. Memo Subform Page 132 Posted Sales Invoice Page 134 Posted Sales Credit Memo Page 143 Posted Sales Invoices Page 144 Posted Sales Credit Memos Page 300 Ship-to Address Page 368 Order Address Page 507 Blanket Sales Order Page 508 Blanket Sales Order Subform Page 5050 Contact Card Page 5703 Location Card Page 5714 Responsibility Center Card Page 5900 Service Order Avalara Inc. All rights reserved. Page 2 of 142

3 Page 5902 Service Order Subform Page 5905 Service Lines Page 5933 Service Invoice Page 5934 Service Invoice Subform Page 5935 Service Credit Memo Page 5936 Service Credit Memo Subform Page 5964 Service Quote Page 5965 Service Quote Subform Page 5966 Service Quote Lines Page 5971 Posted Service Credit Memos Page 5972 Posted Service Credit Memo Page 5977 Posted Service Invoices Page 5978 Posted Service Invoice Page 6050 Service Contract Page 6053 Service Contract Quote Page 6630 Sales Return Order Page 6631 Sales Return Order Subform Page 9300 Sales Quotes Page 9301 Sales Invoice List Page 9302 Sales Credit Memos Page 9303 Blanket Sales Orders Page 9304 Sales Return Order List Page 9305 Sales Order List Page 9317 Service Quotes Page 9318 Service Orders Page 9319 Service Invoices Page 9320 Service Credit Memos Page 9321 Service Contracts Page Sales Order Stats Page Sales Tax Lines Subform Page Sales Invoice Stats Page Sales Stats Page Sales Credit Memo Stats Page Service Order Stats Page Service Stats Page Service Invoice Stats Page Service Credit Memo Stats Avalara Inc. All rights reserved. Page 3 of 142

4 Changes in Reports Report 202 Sales Document - Test Report 296 Batch Post Sales Orders Report 5900 Service Order Report 5902 Service Quote Report 5915 Service Document - Test Report Sales Order Report Sales Quote AvaTax Integration for Purchase Module Changes in Codeunits Codeunit 90 Purch.-Post Changes in Pages Page 26 Vendor Card Page 27 Vendor List Page 50 Purchase Order Page 51 Purchase Invoice Page 9307 Purchase Order List Page 9308 Purchase Invoices Avalara Inc. All rights reserved. Page 4 of 142

5 Microsoft Dynamics NAV - Product Details Avalara Inc. All rights reserved. Page 5 of 142

6 AvaTax Integration for Sales & Service Module Changes in Codeunits Codeunit 12 Gen. Jnl.-Post Global variable Added AvaSalesTaxAdjustFlag Boolean Change to trigger InsertVAT TaxDetail."Tax Type"::"Sales Tax Only"); TaxDetail.SETRANGE("Effective Date",0D,"Posting Date"); //IF NOT TaxDetail.FIND('+') THEN //Avalara IF NOT TaxDetail.FIND('+') OR AvaSalesTaxAdjustFlag THEN//Avalara EXIT; New Function Added AvaSetSalesTaxAdjust Local Parameter AvaSalesTaxAdjustFlag:=tSalesTaxAdjust; Avalara Inc. All rights reserved. Page 6 of 142

7 Codeunit 46 SelectionFilterManagement New Function Added GetSelectionFilterForAvaDocs Local Parameters Return Value Avalara Inc. All rights reserved. Page 7 of 142

8 Variables RecRef.GETTABLE(AvaHeader); EXIT(GetSelectionFilter(RecRef,AvaHeader.FIELDNO("No."))); Changes in GetSelectionFilter RecRef.OPEN(TempRecRef.NUMBER); TempRecRefCount := TempRecRef.COUNT; IF TempRecRefCount > 0 THEN BEGIN TempRecRef.FIND('-'); WHILE TempRecRefCount > 0 DO BEGIN TempRecRefCount := TempRecRefCount - 1; RecRef.SETPOSITION(TempRecRef.GETPOSITION); RecRef.FIND; FieldRef := RecRef.FIELD(SelectionFieldID); FirstRecRef := FORMAT(FieldRef.VALUE); //LastRecRef := FirstRecRef; LastRecRef := FORMAT(FirstRecRef); //Avalara More := TempRecRefCount > 0; WHILE More DO IF RecRef.NEXT = 0 THEN More := FALSE Avalara Inc. All rights reserved. Page 8 of 142

9 Codeunit 80 Sales-Post Global Variable AvaValidCall Codeunit AVA Validate Call DocId Text PInvoice Boolean AvaTaxEngine Codeunit AVA Tax Engine Avaconfig Record AVA CONFIG AvaTaxServiceFlag Boolean AvaBatchModeFlag Boolean AvaDocErrorMsgs Record AVA Document Error Messages AvaBlnAvaIsValidDocument Boolean Global Text Constant Added Name DataType Subtype TextSalesTaxAdjust TextConst SALESTAXADJUST Change to trigger OnRun Local Variable Added Name DataType Subtype AvaInstallStatusFlag Boolean LSalesLine Record Sales Line AvaDocPostBuf Record AVA Document Post Status AvaRunCommitInv Boolean AvaRunCommitRtn Boolean IF PostingDateExists AND (ReplaceDocumentDate OR ("Document Date" = 0D)) THEN VALIDATE("Document Date",PostingDate); //Avalara - Start AvaInstallStatusFlag:=AvaCheckInstStatus(); IF AvaInstallStatusFlag THEN AvaTaxEngine.AVASaveBatchModeFlag(AvaBatchModeFlag,"No.","Document Type"); CLEARALL; WhseReference := "Posting from Whse. Ref."; "Posting from Whse. Ref." := 0; IF AvaInstallStatusFlag AND ("Prepayment %" > 0) AND "Prepmt. Include Tax" THEN //Avalara AvaValidCall.PrepUpdateAmountIncTax(SalesHeader); //Avalara Avalara Inc. All rights reserved. Page 9 of 142

10 IF Invoice THEN CreatePrepaymentLines(SalesHeader,TempPrepaymentSalesLine,TRUE); CheckDim; CopyAprvlToTempApprvl; SalesSetup.GET; CheckCustBlockage("Sell-to Customer No.",TRUE); IF "Bill-to Customer No." <> "Sell-to Customer No." THEN CheckCustBlockage("Bill-to Customer No.",TRUE); AvaInstallStatusFlag:=AvaCheckInstStatus(); IF AvaInstallStatusFlag THEN AvaValidCall.AvaSetShowMessage(); IF AvaInstallStatusFlag THEN BEGIN AvaValidCall.AvaSetShowMessage(); AvaDocPostBuf.SETRANGE(AvaDocPostBuf."No.","No."); IF NOT AvaDocPostBuf.FINDFIRST THEN BEGIN AvaDocPostBuf.INIT; AvaDocPostBuf."No.":="No."; AvaDocPostBuf.Type:=FORMAT("Document Type"); AvaDocPostBuf.INSERT; AvaValidCall.SetPostingFlag(TRUE); AvaValidCall.AvaSetReleaseFlag(Status = Status::Released); //Avalara End IF Invoice THEN BEGIN IF AvaInstallStatusFlag THEN IF AvaConfig.GET THEN BEGIN Avaconfig.Invoice := FALSE; Avaconfig.MODIFY; SalesLine.RESET; SalesLine.SETRANGE("Document Type","Document Type"); SalesLine.SETRANGE("Document No.","No."); SalesLine.SETFILTER(Quantity,'<>0'); IF "Document Type" IN ["Document Type"::Order,"Document Type"::"Return Order"] THEN SalesLine.SETFILTER("Qty. to Invoice",'<>0'); //Avalara - Start IF SalesLine.FINDFIRST AND (SalesLine."No." = 'SALESTAXADJUST') AND (Avaconfig."Enable Tax Amt Adj." = FALSE) THEN ERROR('Posting Not allowed as "Sales Tax Adjustment" is not enabled on AvaTax Configuration'); Invoice := NOT SalesLine.ISEMPTY; IF Invoice AND (NOT Ship) AND ("Document Type" = "Document Type"::Order) THEN BEGIN Avalara Inc. All rights reserved. Page 10 of 142

11 SalesLine.FINDSET; PInvoice := TRUE; IF AvaInstallStatusFlag THEN AvaTaxEngine.SetInvoiceFlag(PInvoice); Invoice := FALSE; REPEAT Invoice := SalesLine."Quantity Shipped" - SalesLine."Quantity Invoiced" <> 0; UNTIL Invoice OR (SalesLine.NEXT = 0); END ELSE IF Invoice AND (NOT Receive) AND ("Document Type" = "Document Type"::"Return Order") THEN BEGIN SalesLine.FINDSET; PInvoice := TRUE; IF AvaInstallStatusFlag THEN AvaTaxEngine.SetInvoiceFlag(PInvoice); Invoice := FALSE; IF (Status = Status::Open) OR (Status = Status::"Pending Prepayment") THEN BEGIN TempInvoice := Invoice; TempShpt := Ship; TempReturn := Receive; GetOpenLinkedATOs(TempAsmHeader); CODEUNIT.RUN(CODEUNIT::"Release Sales Document",SalesHeader); TESTFIELD(Status,Status::Released); Status := Status::Open; Invoice := TempInvoice; Ship := TempShpt; Receive := TempReturn; ReopenAsmOrders(TempAsmHeader); MODIFY; COMMIT; Status := Status::Released; AvaValidCall.AvaSetReleaseFlag(Status = Status::Released); //Avalara TransactionLogEntryNo := AuthorizeCreditCard("Authorization Required"); IF TaxOption = TaxOption::SalesTax THEN BEGIN IF AvaInstallStatusFlag THEN IF NOT("Tax Area Code"='') AND (Avaconfig.GET) THEN Avalara Inc. All rights reserved. Page 11 of 142

12 AvaTaxServiceFlag:=((Avaconfig.Services MOD 100)/10) >= 1 ELSE AvaTaxServiceFlag:=FALSE ELSE AvaTaxServiceFlag:=FALSE; IF(AvaTaxServiceFlag) AND ("Document Type" IN ["Document Type"::Order,"Document Type"::Invoice,"Document Type"::"Return Order","Document Type"::"Credit Memo"]) THEN BEGIN AvaValidCall.AvaSetDocNumTypeTable("No.","Document Type",1); AvaBlnAvaIsValidDocument := AvaValidCall.AvaIsValidDocument(2); //Avalara //AVANA IF AvaBlnAvaIsValidDocument THEN BEGIN //Avalara //AVANA AvaValidCall.OnReleasePost(Rec,TempSalesLineForSalesTax,'Sales '+FORMAT("Document Type")); AvaValidCall.OnPost(SalesHeader,TempSalesLineForSalesTax,DocId); IF AvaInstallStatusFlag AND AvaBlnAvaIsValidDocument THEN BEGIN //Avalara //AVANA AvaValidCall.AvaFillTempAvaLines(1); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,2,0,SalesHeader."Currency Factor"); END ELSE BEGIN IF SalesTaxCountry <> SalesTaxCountry::NoTax THEN BEGIN // NA0003.begin // SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); // NA0003.end // NA0003.begin IF UseExternalTaxEngine THEN SalesTaxCalculate.CallExternalTaxEngineForSales(SalesHeader,FALSE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); // NA0003.end SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxAmtLine); SalesTaxCalculate.DistTaxOverSalesLines(TempSalesLineForSalesTax); //Avalara END ELSE BEGIN TempVATAmountLineRemainder.DELETEALL; InsertValueEntryRelation; //AVANA IF AvaInstallStatusFlag THEN BEGIN IF NOT("Tax Area Code"='') AND (AvaConfig.GET) THEN AvaTaxServiceFlag:=((AvaConfig.Services MOD 100)/10) >= 1 ELSE AvaTaxServiceFlag:=FALSE; Avalara Inc. All rights reserved. Page 12 of 142

13 IF Invoice = TRUE THEN IF (AvaConfig.GET) AND (((AvaConfig.Services MOD 100)/10) >= 1) THEN IF "Document Type" IN ["Document Type"::Order,"Document Type"::Invoice] THEN BEGIN AvaValidCall.AvaSetDocNumTypeTable(SalesInvHeader."No.",2,2); IF AvaBlnAvaIsValidDocument THEN BEGIN //Avalara //AVANA SalesInvHeader.CALCFIELDS(Amount,"Amount Including VAT"); IF NOT AvaValidCall.AvaPostInv(DocId,SalesInvHeader,'Sales '+FORMAT("Document Type")) THEN ERROR('AvaTax Posting Failed..') ELSE AvaRunCommitInv := TRUE; END ELSE IF "Document Type" IN ["Document Type"::"Return Order","Document Type"::"Credit Memo"] THEN BEGIN AvaValidCall.AvaSetDocNumTypeTable(SalesCrMemoHeader."No.",5,3); IF AvaBlnAvaIsValidDocument THEN BEGIN //Avalara //AVANA SalesCrMemoHeader.CALCFIELDS(Amount,"Amount Including VAT"); IF NOT AvaValidCall.AvaPostRtn(DocId,SalesCrMemoHeader,'Sales '+FORMAT("Document Type")) THEN ERROR('AvaTax Posting Failed..') ELSE AvaRunCommitRtn := TRUE; IF NOT InvtPickPutaway THEN COMMIT; // Balancing account - online payment IF ("Bal. Account No." <> '') AND IsOnlinePayment(SalesHeader) AND Invoice THEN PostBalanceEntry( TransactionLogEntryNo,SalesHeader,TotalSalesLine,TotalSalesLineLCY, GenJnlLineDocType,GenJnlLineDocNo,GenJnlLineExtDocNo,SrcCode); IF NOT AvaConfig."Enable AsynchronousAvaTax Post" THEN BEGIN IF AvaRunCommitInv THEN AvaValidCall.AvaCommitInv(DocId,SalesInvHeader,'Sales '+FORMAT("Document Type")); IF AvaRunCommitRtn THEN AvaValidCall.AvaCommitRtn(DocId,SalesCrMemoHeader,'Sales '+FORMAT("Document Type")); AvaDocPostBuf.RESET; AvaDocPostBuf.SETFILTER(AvaDocPostBuf."No.","No."); AvaDocPostBuf.SETFILTER(AvaDocPostBuf.Type,FORMAT("Document Type")); IF AvaDocPostBuf.FINDFIRST THEN AvaDocPostBuf.DELETEALL; //AVANA Avalara Inc. All rights reserved. Page 13 of 142

14 Change to trigger PostItemJnlLine ItemJnlLine.Amount := ROUND(ItemJnlLine.Amount); IF AvaCheckInstStatus THEN BEGIN IF AvaConfig.GET THEN; IF (Avaconfig."Enable Tax Amt Adj.") AND (ItemJnlLine."Item No."=TextSalesTaxAdjust) THEN ItemJnlLine.Amount :=-(SalesLine."Amount Including VAT"); ItemJnlLine."Source Type" := ItemJnlLine."Source Type"::Customer; Change to trigger FillInvPostingBuffer InvPostingBuffer[1].PrepareSales(SalesLine); // Avalara Start IF AvaCheckInstStatus THEN BEGIN IF AvaConfig.GET THEN; IF (Avaconfig."Enable Tax Amt Adj.") AND (SalesLine."No."= TextSalesTaxAdjust) THEN BEGIN TotalAmount := SalesLine."Amount Including VAT" - SalesLine.Amount; TotalAmountACY := SalesLineACY."Amount Including VAT" - SalesLineACY.Amount; TotalVAT := SalesLine.Amount; TotalVATACY := SalesLineACY.Amount; END ELSE BEGIN TotalVAT := SalesLine."Amount Including VAT" - SalesLine.Amount; TotalVATACY := SalesLineACY."Amount Including VAT" - SalesLineACY.Amount; TotalAmount := SalesLine.Amount; TotalAmountACY := SalesLineACY.Amount; END ELSE BEGIN TotalVAT := SalesLine."Amount Including VAT" - SalesLine.Amount; TotalVATACY := SalesLineACY."Amount Including VAT" - SalesLineACY.Amount; TotalAmount := SalesLine.Amount; TotalAmountACY := SalesLineACY.Amount; IF SalesSetup."Discount Posting" IN Avalara Inc. All rights reserved. Page 14 of 142

15 Change to trigger SumSalesLines2 DivideAmount(QtyType,SalesLineQty); IF AvaCheckInstStatus THEN BEGIN IF AvaConfig.GET THEN; IF (Avaconfig."Enable Tax Amt Adj.") AND (SalesLine."No."=TextSalesTaxAdjust) THEN BEGIN SalesLine.Amount:=0; IF SalesLine."Line Amount"<>0 THEN SalesLine."Amount Including VAT":=SalesLine."Line Amount"; SalesLine."Line Amount":=0; SalesLine."VAT %":=0; SalesLine."VAT Base Amount":=0; SalesLine.Quantity := SalesLineQty; Change to trigger PostSalesTaxToGL Local Variable Added AvaSalesTaxAdjustFlag Boolean TotalSalesLineLCY."Amount Including VAT" := TotalSalesLineLCY.Amount; AvaSalesTaxAdjustFlag:=FALSE; IF AvaCheckInstStatus THEN BEGIN IF AvaConfig.GET THEN AvaSalesTaxAdjustFlag:=(SalesLine."Document Type"=SalesLine."Document Type"::"Credit Memo") AND (Avaconfig."Enable Tax Amt Adj.") AND (SalesLine."No."=TextSalesTaxAdjust); GenJnlPostLine.AvaSetSalesTaxAdjust(AvaSalesTaxAdjustFlag); IF TempSalesTaxAmtLine.FIND('-') THEN IF ((TempSalesTaxAmtLine."Tax Base Amount" <> 0) AND (TempSalesTaxAmtLine."Tax Type" = TempSalesTaxAmtLine."Tax Type"::"Sales and Use Tax")) OR ((TempSalesTaxAmtLine.Quantity <> 0) AND (TempSalesTaxAmtLine."Tax Type" = TempSalesTaxAmtLine."Tax Type"::"Excise Tax")) OR ((AvaSalesTaxAdjustFlag) AND (SalesLine."No."=TextSalesTaxAdjust))//Avalara THEN BEGIN GenJnlLine.INIT; Avalara Inc. All rights reserved. Page 15 of 142

16 GenJnlLine."VAT Base Amount (LCY)" := //ROUND(TempSalesTaxAmtLine."Tax Base Amount"); //Avalara CurrExchRate.ExchangeAmtFCYToLCY(UseDate,SalesHeader."Currency Code",TempSalesTaxAmtLine."Tax Base Amount",SalesHeader."Currency Factor"); //Avalara GenJnlLine."VAT Base Amount" := GenJnlLine."VAT Base Amount (LCY)"; RemSalesTaxSrcAmt := RemSalesTaxSrcAmt - GenJnlLine."Source Curr. VAT Amount"; //RemSalesTaxAmt := RemSalesTaxAmt + TempSalesTaxAmtLine."Tax Amount"; //Avalara RemSalesTaxAmt := RemSalesTaxAmt + CurrExchRate.ExchangeAmtFCYToLCY(UseDate,SalesHeader."Currency Code",TempSalesTaxAmtLine."Tax Amount",SalesHeader."Currency Factor"); //Avalara GenJnlLine."VAT Amount (LCY)" := SalesTaxCalculate.ArithmeticRound(RemSalesTaxAmt,GLSetup."Amount Rounding Precision"); New Function Added AvaSetBatchModeFlag Parameters AvaBatchModeFlag:=tBatchModeFlag; New Function Added AvaCheckInstStatus Return Value Avalara Inc. All rights reserved. Page 16 of 142

17 Variable AvaInstall.RESET; IF (AvaInstall.FINDFIRST) AND (AvaInstall."Install Status" = 3)THEN EXIT(TRUE) ELSE EXIT(FALSE); Avalara Inc. All rights reserved. Page 17 of 142

18 Codeunit 398 Sales Tax Calculate Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaTaxPer Decimal AvaTaxAmt Decimal AvaConfig Record AVA CONFIG AvaInstallStatusFlag Boolean Global Text Constant Added Name DataType Subtype TextSalesTaxAdjust TextConst SALESTAXADJUST Change to trigger AddSalesLine SalesLine.TESTFIELD("Tax Group Code"); AvaInstallStatusFlag:=AvaCheckInstStatus(); IF AvaInstallStatusFlag THEN AvaValidCall.AvaSetDocNumTypeTable(SalesHeader."No.",SalesHeader."Document Type",1); WITH TempSalesTaxLine DO BEGIN Change to trigger AddServiceLine IF NOT GetSalesTaxCountry(ServiceLine."Tax Area Code") THEN EXIT; //Avalara start AvaInstallStatusFlag:=AvaCheckInstStatus(); IF AvaInstallStatusFlag THEN AvaValidCall.AvaServiceSetDocNumTypeTable(ServiceHeader."No.",ServiceHeader."Document Type",1); //Avalara end ServiceLine.TESTFIELD("Tax Group Code"); Change to trigger DistTaxOverSalesLines SalesLine.SETRANGE("Tax Group Code","Tax Group Code"); SalesLine.FINDSET(TRUE); AvaInstallStatusFlag := AvaCheckInstStatus; //Avalara REPEAT IF ((TaxCountry = TaxCountry::US) OR ((TaxCountry = TaxCountry::CA) AND TaxAreaLine.GET(SalesLine."Tax Area Code","Tax Jurisdiction Code"))) AND CheckTaxAmtLinePos(SalesLine."Line Amount" - SalesLine."Inv. Discount Amount", Avalara Inc. All rights reserved. Page 18 of 142

19 Positive) THEN BEGIN IF "Tax Type" = "Tax Type"::"Sales and Use Tax" THEN BEGIN IF AvaInstallStatusFlag THEN BEGIN AvaConfig.GET; IF (AvaConfig."Enable Tax Amt Adj.") AND (SalesLine."No."=TextSalesTaxAdjust) THEN BEGIN Amount := 0; TaxAmount := SalesLine."Line Amount"; END ELSE BEGIN Amount := (SalesLine."Line Amount" - SalesLine."Inv. Discount Amount"); TaxAmount := Amount * "Tax %" / 100; END END ELSE BEGIN Amount := (SalesLine."Line Amount" - SalesLine."Inv. Discount Amount"); IF "Tax Difference" <> 0 THEN TaxAmount := "Tax Amount" ELSE TaxAmount := Amount * "Tax %" / 100; END END ELSE BEGIN IF (SalesLine."Quantity (Base)" = 0) OR (Quantity = 0) THEN TaxAmount := 0 ELSE TaxAmount := "Tax Amount" * ExchangeFactor * SalesLine."Quantity (Base)" / Quantity; IF TaxAmount = 0 THEN ReturnTaxAmount := 0 ELSE BEGIN ReturnTaxAmount := ArithmeticRound(TaxAmount + TotalTaxAmountRounding,Currency."Amount Rounding Precision"); TotalTaxAmountRounding := TaxAmount + TotalTaxAmountRounding - ReturnTaxAmount; IF AvaInstallStatusFlag THEN BEGIN AvaConfig.GET; IF (AvaConfig."Enable Tax Amt Adj.") AND (SalesLine."No."=TextSalesTaxAdjust) THEN BEGIN SalesLine.Amount :=0; SalesLine."Line Amount":=0; END ELSE SalesLine.Amount := SalesLine."Line Amount" - SalesLine."Inv. Discount Amount"; END ELSE SalesLine.Amount := SalesLine."Line Amount" - SalesLine."Inv. Discount Amount"; SalesLine."VAT Base Amount" := SalesLine.Amount; IF SalesLine2.GET(SalesLine."Document Type",SalesLine."Document No.",SalesLine."Line No.") THEN BEGIN Avalara Inc. All rights reserved. Page 19 of 142

20 SalesLine2."Amount Including VAT" := SalesLine2."Amount Including VAT" + ReturnTaxAmount; SalesLine2.MODIFY; END ELSE BEGIN SalesLine2.COPY(SalesLine); SalesLine2."Amount Including VAT" := SalesLine.Amount + ReturnTaxAmount; SalesLine2.INSERT; Change to trigger DistTaxOverServLines IF "Tax Type" = "Tax Type"::"Sales and Use Tax" THEN BEGIN IF AvaCheckInstStatus THEN BEGIN AvaConfig.GET; IF (AvaConfig."Enable Tax Amt Adj.") AND (ServLine."No."=TextSalesTaxAdjust) THEN BEGIN Amount := 0; TaxAmount := ServLine."Line Amount"; END ELSE BEGIN Amount := (ServLine."Line Amount" - ServLine."Inv. Discount Amount"); TaxAmount := Amount * "Tax %" / 100; END END ELSE BEGIN Amount := (ServLine."Line Amount" - ServLine."Inv. Discount Amount"); TaxAmount := Amount * "Tax %" / 100; END END ELSE BEGIN IF (ServLine."Quantity (Base)" = 0) OR (Quantity = 0) THEN TaxAmount := 0 ELSE TaxAmount := "Tax Amount" * ExchangeFactor * ServLine."Quantity (Base)" / Quantity; IF TaxAmount = 0 THEN ReturnTaxAmount := 0 ELSE BEGIN ReturnTaxAmount := ArithmeticRound(TaxAmount + TotalTaxAmountRounding,Currency."Amount Rounding Precision"); TotalTaxAmountRounding := TaxAmount + TotalTaxAmountRounding - ReturnTaxAmount; IF AvaCheckInstStatus THEN BEGIN AvaConfig.GET; IF (AvaConfig."Enable Tax Amt Adj.") AND (ServLine."No."=TextSalesTaxAdjust) THEN BEGIN ServLine.Amount :=0; ServLine."Line Amount":=0; END ELSE ServLine.Amount := ServLine."Line Amount" - ServLine."Inv. Discount Amount"; Avalara Inc. All rights reserved. Page 20 of 142

21 END ELSE ServLine.Amount := ServLine."Line Amount" - ServLine."Inv. Discount Amount"; ServLine."VAT Base Amount" := ServLine.Amount; New Function Added UpdateAvaTaxVal Parameters AvaTaxPer := InpAvaTax; AvaTaxAmt := InpAvaTaxAmt; New Function Added AvaCheckInstStatus Return Value Avalara Inc. All rights reserved. Page 21 of 142

22 Variables AvaInstall.RESET; IF (AvaInstall.FINDFIRST) AND (AvaInstall."Install Status" = 3)THEN EXIT(TRUE) ELSE EXIT(FALSE); Codeunit 414 Release Sales Document Avalara Inc. All rights reserved. Page 22 of 142

23 Global variable Added AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AvaTaxServiceFlag Boolean Change to trigger OnRun Local variable Added lavadocpostbuf Record AVA Document Post Status ReleaseATOs(Rec); lavadocpostbuf.reset; lavadocpostbuf.setfilter("no.","no."); lavadocpostbuf.setfilter(type,format("document Type")); IF lavadocpostbuf.findfirst THEN AvaValidCall.SetPostingFlag(TRUE); IF NOT AvaValidCall.OnRelease(Rec,SalesLine,'Sales '+FORMAT("Document Type")) THEN SalesLine.CalcSalesTaxLines(Rec,SalesLine); MODIFY(TRUE); Avalara Inc. All rights reserved. Page 23 of 142

24 Codeunit 442 Sales-Post Prepayments Changes in function FillInvLineBuffer Modified Code (Search for 1 st line / modified code marked in Red color) WITH PrepmtInvBuf DO BEGIN CLEAR(PrepmtInvBuf); FillInvLineBufKey(SalesLine,PrepmtInvBuf); IF NOT SalesHeader."Compress Prepayment" THEN BEGIN "Line No." := SalesLine."Line No."; Description := SalesLine.Description; FillFromGLAcc(SalesHeader."Compress Prepayment"); "Gen. Bus. Posting Group" := SalesLine."Gen. Bus. Posting Group"; "VAT Bus. Posting Group" := SalesLine."VAT Bus. Posting Group"; "VAT Calculation Type" := SalesLine."Prepmt. VAT Calc. Type"; "Global Dimension 1 Code" := SalesLine."Shortcut Dimension 1 Code"; "Global Dimension 2 Code" := SalesLine."Shortcut Dimension 2 Code"; Amount := SalesLine."Prepayment Amount"; "Amount Incl. VAT" := SalesLine."Prepmt. Amt. Incl. VAT"; "VAT Base Amount" := SalesLine."Prepayment Amount"; "VAT Amount" := SalesLine."Prepmt. Amt. Incl. VAT" - SalesLine."Prepayment Amount"; "Amount (ACY)" := SalesLine."Prepayment Amount"; "VAT Base Amount (ACY)" := SalesLine."Prepayment Amount"; "VAT Amount (ACY)" := SalesLine."Prepmt. Amt. Incl. VAT" - SalesLine."Prepayment Amount"; //"VAT %" := SalesLine."Prepayment VAT %"; IF AVAValidTrans(SalesLine."Tax Area Code") THEN "VAT %" := SalesLine."Prepayment VAT %" ELSE "VAT %" := SalesLine."VAT %"; //Avalara end "VAT Identifier" := SalesLine."Prepayment VAT Identifier"; "VAT Difference" := SalesLine."Prepayment VAT Difference"; Changes in function UpdateVATOnLines Modified Code (Search for 1 st line / modified code marked in Red color) IF SalesHeader."Prices Including VAT" THEN BEGIN IF PrepmtAmt = 0 THEN BEGIN IF AVAValidTrans(SalesHeader."Tax Area Code") THEN //Avalara VATAmount := 0; NewAmountIncludingVAT := 0; END ELSE BEGIN VATAmount := TempVATAmountLineRemainder."VAT Amount" + VATAmountLine."VAT Amount" * PrepmtAmt / VATAmountLine."Line Amount"; NewAmountIncludingVAT := Avalara Inc. All rights reserved. Page 24 of 142

25 TempVATAmountLineRemainder."Amount Including VAT" + VATAmountLine."Amount Including VAT" * PrepmtAmt / VATAmountLine."Line Amount"; NewAmount := ROUND(NewAmountIncludingVAT,Currency."Amount Rounding Precision") - ROUND(VATAmount,Currency."Amount Rounding Precision"); NewVATBaseAmount := ROUND( NewAmount * (1 - SalesHeader."VAT Base Discount %" / 100), Currency."Amount Rounding Precision"); END ELSE BEGIN NewAmount := PrepmtAmt; NewVATBaseAmount := ROUND( NewAmount * (1 - SalesHeader."VAT Base Discount %" / 100), Currency."Amount Rounding Precision"); IF AVAValidTrans(SalesHeader."Tax Area Code") THEN //Avalara IF VATAmountLine."VAT Base" = 0 THEN VATAmount := 0 ELSE VATAmount := TempVATAmountLineRemainder."VAT Amount" + VATAmountLine."VAT Amount" * NewAmount / VATAmountLine."VAT Base"; NewAmountIncludingVAT := NewAmount + ROUND(VATAmount,Currency."Amount Rounding Precision"); "Prepayment Amount" := NewAmount; Changes in function CalcVATAmountLines Modified Code (Search for 1 st line / modified code marked in Red color) IF SalesHeader."Currency Code" = '' THEN Currency.InitRoundingPrecision ELSE Currency.GET(SalesHeader."Currency Code"); VATAmountLine.DELETEALL; WITH SalesLine DO BEGIN ApplyFilter(SalesHeader,DocumentType,SalesLine); IF FIND('-') THEN REPEAT NewAmount := PrepmtAmount(SalesLine,DocumentType); IF NewAmount <> 0 THEN BEGIN IF DocumentType = DocumentType::Invoice THEN NewAmount := "Prepmt. Line Amount"; IF "Prepmt. VAT Calc. Type" IN ["VAT Calculation Type"::"Reverse Charge VAT","VAT Calculation Type"::"Sales Tax"] THEN IF AVAValidTrans(SalesLine."Tax Area Code") THEN //Avalara Avalara Inc. All rights reserved. Page 25 of 142

26 "VAT %" := 0; IF NOT VATAmountLine.GET( "Prepayment VAT Identifier", "Prepmt. VAT Calc. Type","Prepayment Tax Group Code", FALSE,NewAmount >= 0) THEN BEGIN VATAmountLine.INIT; Changes in function UpdateSalesTaxOnLines Modified Code (Search for 1 st line / modified code marked in Red color) //NA0001.begin WITH SalesLine DO BEGIN IF FINDSET THEN REPEAT IF IncludeTax THEN BEGIN "Prepmt. Line Amount" := ROUND("Line Amount" * "Prepayment %" / 100,Currency."Amount Rounding Precision"); "Prepayment Amount" := ROUND("Prepmt. Line Amount" + ("Amount Including VAT" - "Line Amount") * "Prepayment %" / 100, Currency."Amount Rounding Precision"); END ELSE "Prepayment Amount" := PrepmtAmount(SalesLine,DocumentType); "Prepmt. Amt. Incl. VAT" := "Prepayment Amount"; "Prepayment VAT %" := 0; IF AVAValidTrans("Tax Area Code") THEN //Avalara MODIFY; UNTIL NEXT = 0; //NA0001.end Add new function AVAValidTrans Local Parameter TaxAreaCode : Code[20] Return parameter AvaResultBln : Boolean; Local variables AvaUserPref : Record ; AvaConfig : Record ; Code AvaUserPref.RESET; AvaUserPref.SETRANGE("User Pref Name",USERID); IF AvaUserPref.FINDFIRST THEN AvaResultBln := (NOT AvaConfig.GET) OR (TaxAreaCode <> AvaConfig."Tax Group No.") OR AvaConfig."Disable Tax Calc." OR AvaUserPref.Disable ELSE Avalara Inc. All rights reserved. Page 26 of 142

27 AvaResultBln := (NOT AvaConfig.GET) OR (TaxAreaCode <> AvaConfig."Tax Group No.") OR AvaConfig."Disable Tax Calc."; Avalara Inc. All rights reserved. Page 27 of 142

28 Codeunit 5980 Service-Post Global Varaible Added AvaConfig Record AVA CONFIG Change to trigger PostWithLines Finalize(ServiceHeader); ServDocumentsMgt.AvaServPostCommitFinal;//Avalara PassedServHeader := ServiceHeader; ServDocumentsMgt.AvaUpdateTaxPostStatus(ServiceHeader."Last Posting No.");//Avalara Codeunit 5986 Serv-Amounts Mgt. Global Variable Added Name DataType Subtype Value AvaConfig Record AVA CONFIG Global Text Constant Added Name DataType Subtype TextSalesTaxAdjust TextConst SALESTAXADJUST Change to trigger FillInvPostingBuffer InvPostingBuffer[1].PrepareService(ServiceLine); IF AvaCheckInstStatus THEN BEGIN AvaConfig.GET; IF (AvaConfig."Enable Tax Amt Adj.") AND (ServiceLine."No."= TextSalesTaxAdjust) THEN BEGIN TotalAmount := ServiceLine."Amount Including VAT" - ServiceLine.Amount; TotalAmountACY := ServiceLineACY."Amount Including VAT" - ServiceLineACY.Amount; TotalVAT := ServiceLine.Amount; TotalVATACY := ServiceLineACY.Amount; END ELSE BEGIN TotalVAT := ServiceLine."Amount Including VAT" - ServiceLine.Amount; TotalVATACY := ServiceLineACY."Amount Including VAT" - ServiceLineACY.Amount; TotalAmount := ServiceLine.Amount; Avalara Inc. All rights reserved. Page 28 of 142

29 TotalAmountACY := ServiceLineACY.Amount; END ELSE BEGIN TotalVAT := ServiceLine."Amount Including VAT" - ServiceLine.Amount; TotalVATACY := ServiceLineACY."Amount Including VAT" - ServiceLineACY.Amount; TotalAmount := ServiceLine.Amount; TotalAmountACY := ServiceLineACY.Amount; IF SalesSetup."Discount Posting" IN Change to trigger SumServiceLines2 Local Variable Added Name DataType Subtype Value AvaConfig Record AVA CONFIG TempVATAmountLineRemainder,TempServiceLineForSalesTax); IF AvaCheckInstStatus THEN BEGIN AvaConfig.GET; IF (AvaConfig."Enable Tax Amt Adj.") AND (ServLine."No."=TextSalesTaxAdjust) THEN BEGIN ServLine.Amount:=0; IF ServLine."Line Amount"<>0 THEN ServLine."Amount Including VAT":=ServLine."Line Amount"; ServLine."Line Amount":=0; ServLine."VAT %":=0; ServLine."VAT Base Amount":=0; ServLine.Quantity := ServLineQty; Avalara Inc. All rights reserved. Page 29 of 142

30 New Fucntion Added AvaCheckInstStatus Return Value Variables AvaInstall.RESET; IF (AvaInstall.FINDFIRST) AND (AvaInstall."Install Status" = 3)THEN EXIT(TRUE) ELSE EXIT(FALSE); Avalara Inc. All rights reserved. Page 30 of 142

31 Codeunit 5987 Serv-Posting Journals Mgt. Global Variable Added Name DataType Subtype Value AvaConfig Record AVA CONFIG Global Text Constant Added Name DataType Subtype TextSalesTaxAdjust TextConst SALESTAXADJUST Change to trigger PostItemJnlLine ItemJnlLine.Amount := ROUND(ItemJnlLine.Amount); IF AvaCheckInstStatus THEN BEGIN IF (AvaConfig."Enable Tax Amt Adj.") AND (ItemJnlLine."Item No."=TextSalesTaxAdjust) THEN ItemJnlLine.Amount:=-(ServiceLine."Amount Including VAT"); ItemJnlLine."Source Type" := ItemJnlLine."Source Type"::Customer; Change to trigger PostSalesTaxToGL Local Variable Added LServiceLine Record Service Line AvaSalesTaxAdjustFlag Boolean RemSalesTaxSrcAmt := 0; IF ServiceHeader."Currency Code" <> '' THEN BEGIN //Avalara TotalServiceLineLCY."Amount Including VAT" := TotalServiceLineLCY.Amount; //Avalara - Start IF (ServiceHeader."Document Type" IN [ServiceHeader."Document Type"::Quote]) AND (ServiceHeader."Posting Date" = 0D) THEN UseDate := WORKDATE ELSE UseDate := ServiceHeader."Posting Date"; IF AvaCheckInstStatus THEN BEGIN AvaConfig.GET; AvaSalesTaxAdjustFlag:=AvaConfig."Enable Tax Amt Adj."; LServiceLine.RESET; Avalara Inc. All rights reserved. Page 31 of 142

32 LServiceLine.SETRANGE(LServiceLine."Document No.",ServiceHeader."No."); LServiceLine.SETRANGE(LServiceLine."Customer No.",ServiceHeader."Customer No."); LServiceLine.FINDFIRST; GenJnlPostLine.AvaSetSalesTaxAdjust(FALSE); IF TempSalesTaxAmtLine.FIND('-') THEN REPEAT TaxLineCount := TaxLineCount + 1; IF ((TempSalesTaxAmtLine."Tax Base Amount" <> 0) AND (TempSalesTaxAmtLine."Tax Type" = TempSalesTaxAmtLine."Tax Type"::"Sales and Use Tax")) OR ((TempSalesTaxAmtLine.Quantity <> 0) AND (TempSalesTaxAmtLine."Tax Type" = TempSalesTaxAmtLine."Tax Type"::"Excise Tax")) OR ((AvaSalesTaxAdjustFlag) AND (LServiceLine."No."=TextSalesTaxAdjust)) //Avalara THEN BEGIN GenJnlLine.INIT; GenJnlLine."Posting Date" := ServiceHeader."Posting Date"; GenJnlLine."Document Date" := ServiceHeader."Document Date"; GenJnlLine.Description := ServiceHeader."Posting Description"; GenJnlLine."Reason Code" := ServiceHeader."Reason Code"; GenJnlLine."Document Type" := GenJnlLineDocType; GenJnlLine."Document No." := GenJnlLineDocNo; GenJnlLine."External Document No." := GenJnlLineExtDocNo; GenJnlLine."System-Created Entry" := TRUE; GenJnlLine.Amount := 0; GenJnlLine."Source Currency Code" := ServiceHeader."Currency Code"; GenJnlLine."Source Currency Amount" := 0; GenJnlLine.Correction := ServiceHeader.Correction; GenJnlLine."Gen. Posting Type" := GenJnlLine."Gen. Posting Type"::Sale; GenJnlLine."Tax Area Code" := TempSalesTaxAmtLine."Tax Area Code"; GenJnlLine."Tax Type" := TempSalesTaxAmtLine."Tax Type"; GenJnlLine."Tax Exemption No." := ServiceHeader."Tax Exemption No."; GenJnlLine."Tax Group Code" := TempSalesTaxAmtLine."Tax Group Code"; GenJnlLine."Tax Liable" := TempSalesTaxAmtLine."Tax Liable"; GenJnlLine.Quantity := TempSalesTaxAmtLine.Quantity; GenJnlLine."VAT Calculation Type" := GenJnlLine."VAT Calculation Type"::"Sales Tax"; GenJnlLine."VAT Posting" := GenJnlLine."VAT Posting"::"Manual VAT Entry"; GenJnlLine."Shortcut Dimension 1 Code" := ServiceHeader."Shortcut Dimension 1 Code"; GenJnlLine."Shortcut Dimension 2 Code" := ServiceHeader."Shortcut Dimension 2 Code"; GenJnlLine."Dimension Set ID" := ServiceHeader."Dimension Set ID"; GenJnlLine."Source Code" := SrcCode; GenJnlLine."EU 3-Party Trade" := ServiceHeader."EU 3-Party Trade"; GenJnlLine."Bill-to/Pay-to No." := ServiceHeader."Bill-to Customer No."; GenJnlLine."Source Type" := GenJnlLine."Source Type"::Customer; GenJnlLine."Source No." := ServiceHeader."Bill-to Customer No."; GenJnlLine."Posting No. Series" := ServiceHeader."Posting No. Series"; GenJnlLine."STE Transaction ID" := ServiceHeader."STE Transaction ID"; GenJnlLine."Source Curr. VAT Base Amount" := TempSalesTaxAmtLine."Tax Base Amount"; Avalara Inc. All rights reserved. Page 32 of 142

33 GenJnlLine."VAT Base Amount (LCY)" := //ROUND(TempSalesTaxAmtLine."Tax Base Amount"); //Avalara CurrExchRate.ExchangeAmtFCYToLCY( UseDate,ServiceHeader."Currency Code",TempSalesTaxAmtLine."Tax Base Amount",ServiceHeader."Currency Factor"); //Avalara GenJnlLine."VAT Base Amount" := GenJnlLine."VAT Base Amount (LCY)"; IF TaxJurisdiction.Code <> TempSalesTaxAmtLine."Tax Jurisdiction Code" THEN BEGIN TaxJurisdiction.GET(TempSalesTaxAmtLine."Tax Jurisdiction Code"); IF SalesTaxCountry = SalesTaxCountry::CA THEN BEGIN RemSalesTaxAmt := 0; RemSalesTaxSrcAmt := 0; IF ServiceHeader."Currency Code" <> '' THEN BEGIN IF (ServiceHeader."Document Type" IN [ServiceHeader."Document Type"::Quote]) AND (ServiceHeader."Posting Date" = 0D) THEN UseDate := WORKDATE ELSE UseDate := ServiceHeader."Posting Date"; IF TaxJurisdiction."Unrealized VAT Type" > 0 THEN BEGIN TaxJurisdiction.TESTFIELD("Unreal. Tax Acc. (Sales)"); GenJnlLine."Account No." := TaxJurisdiction."Unreal. Tax Acc. (Sales)"; END ELSE BEGIN TaxJurisdiction.TESTFIELD("Tax Account (Sales)"); GenJnlLine."Account No." := TaxJurisdiction."Tax Account (Sales)"; GenJnlLine."Tax Jurisdiction Code" := TempSalesTaxAmtLine."Tax Jurisdiction Code"; IF TempSalesTaxAmtLine."Tax Amount" <> 0 THEN BEGIN RemSalesTaxSrcAmt := RemSalesTaxSrcAmt + CurrExchRate.ExchangeAmtLCYToFCY( UseDate,ServiceHeader."Currency Code",TempSalesTaxAmtLine."Tax Amount",ServiceHeader."Currency Factor"); GenJnlLine."Source Curr. VAT Amount" := SalesTaxCalculate.ArithmeticRound(RemSalesTaxSrcAmt,Currency."Amount Rounding Precision"); RemSalesTaxSrcAmt := RemSalesTaxSrcAmt - GenJnlLine."Source Curr. VAT Amount"; //RemSalesTaxAmt := RemSalesTaxAmt + TempSalesTaxAmtLine."Tax Amount"; //Avalara RemSalesTaxAmt := RemSalesTaxAmt + CurrExchRate.ExchangeAmtFCYToLCY( UseDate,ServiceHeader."Currency Code",TempSalesTaxAmtLine."Tax Amount",ServiceHeader."Currency Factor"); //Avalara GenJnlLine."VAT Amount (LCY)" := SalesTaxCalculate.ArithmeticRound(RemSalesTaxAmt,GLSetup."Amount Rounding Precision"); RemSalesTaxAmt := RemSalesTaxAmt - GenJnlLine."VAT Amount (LCY)"; GenJnlLine."VAT Amount" := GenJnlLine."VAT Amount (LCY)"; GenJnlLine."VAT Difference" := TempSalesTaxAmtLine."Tax Difference"; Avalara Inc. All rights reserved. Page 33 of 142

34 IF NOT (ServiceHeader."Document Type" IN [ServiceHeader."Document Type"::"Credit Memo"]) THEN BEGIN GenJnlLine."Source Curr. VAT Base Amount" := -GenJnlLine."Source Curr. VAT Base Amount"; GenJnlLine."VAT Base Amount (LCY)" := -GenJnlLine."VAT Base Amount (LCY)"; GenJnlLine."VAT Base Amount" := -GenJnlLine."VAT Base Amount"; GenJnlLine."Source Curr. VAT Amount" := -GenJnlLine."Source Curr. VAT Amount"; GenJnlLine."VAT Amount (LCY)" := -GenJnlLine."VAT Amount (LCY)"; GenJnlLine."VAT Amount" := -GenJnlLine."VAT Amount"; GenJnlLine.Quantity := -GenJnlLine.Quantity; GenJnlLine."VAT Difference" := -GenJnlLine."VAT Difference"; IF ServiceHeader."Currency Code" <> '' THEN TotalServiceLineLCY."Amount Including VAT" := TotalServiceLineLCY."Amount Including VAT" + GenJnlLine."VAT Amount (LCY)"; GenJnlPostLine.AvaSetSalesTaxAdjust((AvaSalesTaxAdjustFlag) AND (LServiceLine."No."=TextSalesTaxAdjust));//Avalara GenJnlPostLine.RunWithCheck(GenJnlLine); UNTIL TempSalesTaxAmtLine.NEXT = 0; New Function Added AvaCheckInstStatus Return Value Variables Avalara Inc. All rights reserved. Page 34 of 142

35 AvaInstall.RESET; IF (AvaInstall.FINDFIRST) AND (AvaInstall."Install Status" = 3)THEN EXIT(TRUE) ELSE EXIT(FALSE); Avalara Inc. All rights reserved. Page 35 of 142

36 Codeunit 5988 Serv-Documents Mgt. Global Variable Added AvaValidCall Codeunit AVA Validate Call DocId Text Pinvoice Boolean AvaTaxEngine Codeunit AVA Tax Engine AvaConfig Record AVA CONFIG AvaTaxServiceFlag Boolean TempServInvHeader Record Service Invoice Header TempServInvLine Record Service Invoice Line TempServCRMemoHeader Record Service Cr.Memo Header TempServCRMemoLine Record Service Cr.Memo Line AvaInstall Record AVA Install AvaDocPostBuf Record AVA Document Post Status AvaBlnAvaIsValidDocument Boolean Change to trigger PostDocumentLines Local Variable Added AvaInstallStatusFlag Boolean ServLine.SETRANGE("Qty. to Invoice"); AvaInstall.RESET; AvaInstallStatusFlag:=(AvaInstall.FIND('-') AND (AvaInstall."Install Status"=3)); IF AvaInstallStatusFlag THEN BEGIN AvaValidCall.AvaSetShowMessage(); AvaDocPostBuf.SETRANGE(AvaDocPostBuf."No.","No."); IF NOT AvaDocPostBuf.FINDFIRST THEN BEGIN AvaDocPostBuf.INIT; AvaDocPostBuf."No.":=ServHeader."No."; AvaDocPostBuf.Type:=FORMAT(ServHeader."Document Type"); AvaDocPostBuf.INSERT; AvaValidCall.SetPostingFlag(TRUE); IF TaxOption = TaxOption::SalesTax THEN BEGIN IF (AvaInstallStatusFlag) AND (AvaConfig.GET) THEN Avalara Inc. All rights reserved. Page 36 of 142

37 AvaTaxServiceFlag:=((AvaConfig.Services MOD 100)/10) >= 1; IF (AvaInstallStatusFlag) AND (AvaTaxServiceFlag) AND (AvaConfig."Enable Serv. Modu. Integrtn") AND ("Document Type" IN ["Document Type"::Order,"Document Type"::Invoice,"Document Type"::"Credit Memo"]) THEN BEGIN AvaValidCall.AvaServiceSetDocNumTypeTable("No.","Document Type",1); AvaBlnAvaIsValidDocument := AvaValidCall.AvaServiceIsValidDocument(2); //Today IF (AvaInstallStatusFlag) AND AvaBlnAvaIsValidDocument THEN BEGIN AvaValidCall.OnServiceReleasePost(ServHeader,TempServiceLineForSalesTax,'Service '+FORMAT("Document Type")); AvaValidCall.OnServicePost(ServHeader,TempServiceLineForSalesTax,DocId); IF (AvaInstallStatusFlag) AND (AvaConfig."Enable Serv. Modu. Integrtn") AND AvaBlnAvaIsValidDocument THEN BEGIN AvaValidCall.AvaFillTempAvaLines(2); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,2,0,ServHeader."Currency Factor"); END ELSE IF SalesTaxCountry <> SalesTaxCountry::NoTax THEN BEGIN IF UseExternalTaxEngine THEN SalesTaxCalculate.CallExternalTaxEngineForServ(ServHeader,FALSE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxAmtLine); SalesTaxCalculate.DistTaxOverServLines(TempServiceLineForSalesTax); END ELSE BEGIN TempVATAmountLineRemainder.DELETEALL; InvPostingBuffer[1].DELETEALL; //Avalara - Start IF ServLine.FINDFIRST AND (ServLine."No." = 'SALESTAXADJUST') AND (AvaConfig."Enable Tax Amt Adj." = FALSE) THEN ERROR('Posting Not allowed as "Sales Tax Adjustment" is not enabled on AvaTax Configuration'); // init cu for posting SLE type Usage Change to trigger FinalizeLines WITH ServLine DO BEGIN IF PServLine.GET("Document Type","Document No.","Line No.") THEN BEGIN PServLine.DELETE;//Avalara-Standard Error PServLine.COPY(ServLine); //PServLine.MODIFY;//Avalara-Standard Error PServLine.INSERT;//Avalara-Standard Error Avalara Inc. All rights reserved. Page 37 of 142

38 END ELSE // invoice discount lines only Change to trigger FinalizeInvoiceDocument UNTIL ServCrMemoLine.NEXT = 0; ServCrMemoLine.DELETEALL; AvaSetInvDetail (PServInvHeader, PServInvLine);//Avalara Change to trigger FinalizeCrMemoDocument UNTIL ServCrMemoLine.NEXT = 0; ServCrMemoLine.DELETEALL; AvaSetCrMemoDetail (PServCrMemoHeader, PServCrMemoLine);//Avalara Change to trigger CheckAndSetPostingConstants Local Variable Added AvaInstallStatusFlag Boolean UNTIL PassedConsume OR (ServLine.NEXT = 0); AvaInstall.RESET; AvaInstallStatusFlag:=(AvaInstall.FIND('-') AND (AvaInstall."Install Status"=3)); IF PassedInvoice THEN BEGIN IF AvaConfig.GET AND (AvaInstallStatusFlag) THEN BEGIN AvaConfig.Invoice := FALSE; AvaConfig.MODIFY; ServLine.RESET; ServLine.SETFILTER(Quantity,'<>0'); IF "Document Type" = "Document Type"::Order THEN ServLine.SETFILTER("Qty. to Invoice",'<>0'); PassedInvoice := ServLine.FIND('-'); IF PassedInvoice AND ("Document Type" = "Document Type"::Order) AND NOT PassedShip THEN BEGIN Pinvoice := TRUE; IF (AvaInstallStatusFlag) THEN Avalara Inc. All rights reserved. Page 38 of 142

39 AvaTaxEngine.SetInvoiceFlag(Pinvoice); PassedInvoice := FALSE; New Function Added AvaGetServInvNo Parameters ServInvHeaderVAR.INIT; ServInvHeaderVAR.COPY(ServInvHeader); New Function Added AvaSetCrMemoDetail Parameters Avalara Inc. All rights reserved. Page 39 of 142

40 Return Value TempServInvHeader:=PServInvHeader; TempServInvLine:= PServInvLine; New Function Added AvaSetInvDetail Parameters Avalara Inc. All rights reserved. Page 40 of 142

41 Avalara Inc. All rights reserved. Page 41 of 142

42 TempServInvHeader:=PServInvHeader; TempServInvLine:= PServInvLine; New Function Added AvaServPostCommitFinal Add new local Variables AvaRunCommitInv : Boolean; AvaRunCommitRtn : Boolean; AvaInstall.RESET; IF AvaInstall.FIND('-') AND (AvaInstall."Install Status"=3) THEN BEGIN IF AvaConfig.GET THEN BEGIN IF (((AvaConfig.Services MOD 100)/10) >= 1) AND (AvaConfig."Enable Serv. Modu. Integrtn") THEN BEGIN IF ServHeader."Document Type" IN [ServHeader."Document Type"::Order,ServHeader."Document Type"::Invoice] THEN BEGIN IF Invoice = TRUE THEN BEGIN AvaValidCall.AvaServiceSetDocNumTypeTable(TempServInvHeader."No.",2,2); IF AvaBlnAvaIsValidDocument THEN BEGIN IF NOT AvaValidCall.AvaServicePostInv(DocId,TempServInvHeader,TempServInvLine,'Service '+FORMAT(ServHeader."Document Type") ) THEN ERROR('Avatax Posting Failed..') ELSE //AVANA AvaRunCommitInv := TRUE; //AVANA END ELSE IF ServHeader."Document Type" IN [ServHeader."Document Type"::"Credit Memo"] THEN BEGIN IF Invoice = TRUE THEN BEGIN AvaValidCall.AvaServiceSetDocNumTypeTable(TempServCRMemoHeader."No.",3,3); IF AvaBlnAvaIsValidDocument THEN BEGIN IF NOT AvaValidCall.AvaServicePostRtn(DocId,TempServCRMemoHeader,TempServCRMemoLine, 'Service '+FORMAT(ServHeader."Document Type")) THEN ERROR('Avatax Posting Failed..') ELSE //AVANA AvaRunCommitRtn := TRUE; //AVANA //AVANA Start IF NOT AvaConfig."Enable AsynchronousAvaTax Post" THEN BEGIN IF AvaRunCommitInv THEN AvaValidCall.AvaServiceCommitInv(DocId,TempServInvHeader,'Service '+FORMAT(ServHeader."Document Type")); Avalara Inc. All rights reserved. Page 42 of 142

43 IF AvaRunCommitRtn THEN AvaValidCall.AvaServiceCommitRtn(DocId,TempServCRMemoHeader,'Service '+FORMAT(ServHeader."Document Type")); //AVANA End AvaDocPostBuf.RESET; AvaDocPostBuf.SETFILTER("No.",ServHeader."No."); AvaDocPostBuf.SETFILTER(Type,FORMAT(ServHeader."Document Type")); IF AvaDocPostBuf.FINDFIRST THEN AvaDocPostBuf.DELETEALL; New Function Added AvaUpdateTaxPostStatus Parameter AvaValidCall.AvaUpdateTaxPostStatus(PostedDocCode); Avalara Inc. All rights reserved. Page 43 of 142

44 Changes in Pages Page 1 Company Information Global Variable Added AvaAddrValidn Page AVA Address Validation CuAvaSAddrValidn Codeunit AVA Address Validation AvaConfig Record AVA CONFIG AvaInstall Record AVA Install CuAvaIsInstalled Codeunit Changes in Property Image=Addresses; Changes in Page Action Added Validate Addresses Name Caption CaptionML ShortCutKey Image Validate Addresses Validate Addresses Validate Addresses Ctrl+A Addresses //AvaInstall.RESET; //IF AvaInstall.FIND('-') AND (AvaInstall."Install Status" = 3) THEN IF CuAvaIsInstalled.IsAvaTaxInstalled THEN//Changes //AvalaraEnd IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION + ' - General','',''); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; //Avalara IF AvaAddrValidn.UpdateAccept THEN //Avalara AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); //Validate Shipping Address CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Ship-to Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm("Ship-to Address","Ship-to Address 2","Ship-to City","Ship-to Post Code","Ship-to County", "Ship-to Country/Region Code", CurrPage.CAPTION + ' - Shipping','','Ship-to'); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; //Avalara IF AvaAddrValidn.UpdateAccept THEN //Avalara AvaAddrValidn.RtnAddress("Ship-to Address","Ship-to Address 2","Ship-to City","Ship-to Post Code","Shipto County", Avalara Inc. All rights reserved. Page 44 of 142

45 "Ship-to Country/Region Code"); CurrPage.UPDATE(); END ELSE MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 45 of 142

46 Page 21 Customer Card Global Variable Added AvaAddrValidn Page AVA Address Validation AvaTaxEng Codeunit AVA Tax Engine AvaCertExm Page AvaCert Exemption AvaAddExmCust Page AVA Add Exemption Customer CuAvaSAddrValidn Codeunit AVA Address Validation AvaConfig Record AVA CONFIG AvaInstall Record AVA Install AvaValidAddr Record AVA Validated Address ShipToAddr Record Ship-to Address CuAvaIsInstalled Codeunit AVA IsInstalled AvaCert2 Codeunit AVA Cert2 AvaCertificateStatus Page AVA Certificate Status AvaCertificateDetails Page AVA Certificate Details Changes in Page Action Added Validate Address Type Name Caption CaptionML ShortCutKey Image Action <Validate Address> Validate Address Vali&date Address Ctrl+A Addresses //AvaInstall.RESET; //IF AvaInstall.FIND('-') AND (AvaInstall."Install Status" = 3) THEN IF CuAvaIsInstalled.IsAvaTaxInstalled THEN//Avalara IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"No.",''); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; IF AvaAddrValidn.UpdateAccept THEN AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); CurrPage.UPDATE(); Avalara Inc. All rights reserved. Page 46 of 142

47 END ELSE MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidAddr.RESET; AvaValidAddr.SETRANGE(AvaValidAddr."No.","No."); AvaValidAddr.SETRANGE(Code,''); IF NOT(AvaValidAddr.FINDFIRST) THEN BEGIN AvaValidAddr.INIT; AvaValidAddr.Source := 1; AvaValidAddr."No." := "No."; AvaValidAddr.Code:=''; AvaValidAddr.INSERT; ShipToAddr.RESET; ShipToAddr.SETRANGE(ShipToAddr."Customer No.","No."); IF ShipToAddr.FINDFIRST THEN BEGIN REPEAT AvaValidAddr.RESET; AvaValidAddr.SETRANGE("No.",ShipToAddr."Customer No."); AvaValidAddr.SETRANGE(Code,ShipToAddr.Code); IF NOT(AvaValidAddr.FINDFIRST) THEN BEGIN AvaValidAddr.INIT; AvaValidAddr.Source := 1; AvaValidAddr."No." := "No."; AvaValidAddr.Code:=ShipToAddr.Code; AvaValidAddr.INSERT; UNTIL ShipToAddr.NEXT = 0 COMMIT; AvaValidAddr.RESET; AvaValidAddr.SETRANGE(AvaValidAddr."No.","No."); PAGE.RUNMODAL( ,AvaValidAddr,"No."); Create ActionGroup: CaptionML AvaCert ActionContainerType NewDocumentItems Avalara Inc. All rights reserved. Page 47 of 142

48 Image SalutationFormula Changes in Page Action Added Add AvaCert Customer Type Caption CaptionML ShortCutKey Image Action Add AvaCert Customer Create Customer AddContacts IF AvaConfig.GET THEN BEGIN //IF (AvaConfig.Services/100) >= 1 THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN BEGIN//Avalara CLEAR(AvaAddExmCust); AvaAddExmCust.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"No.",''); AvaAddExmCust.UpdateCustInfo("No.",Name,Contact,"Phone No.","Fax No."," "); IF AvaAddExmCust.RUNMODAL = ACTION::OK THEN BEGIN AvaAddExmCust.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); END ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Send Request for Exemption Type Caption CaptionML Actio Send Request for n Exemption Initiate Exemption Request ShortCutKe y Image SendElectronicDocum ent IF AvaConfig.GET THEN BEGIN //IF (AvaConfig.Services/100) >= 1 THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN BEGIN//Avalara CLEAR(AvaCertExm); AvaCertExm.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"No.",''); AvaCertExm.UpdateCustInfo("No.",Name,Contact,"Phone No.","Fax No."," "); IF AvaCertExm.RUNMODAL = ACTION::OK THEN BEGIN AvaCertExm.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); END ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 48 of 142

49 Changes in Page Action Added Send Request for Exemption Type Name CaptionML ShortCutKey Image <Retrieve Certificates(s) Action Status> Retrieve Certificate(s) Status ChangeStatus IF AvaConfig.GET THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN AvaCert2.fnGetCertificateStatus("No.",AvaConfig."Company ID",AvaConfig."Account Number",AvaConfig."License Key",AvaConfig."Tax Url",AvaConfig."Connector Version") ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Send Request for Exemption Type Name CaptionML Actio n <Retrieve Certificate(s)> Retrieve Certificate(s) ShortCutKe y Image ImportChartOfAccoun ts IF AvaConfig.GET THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN AvaCert2.fnGetCertificateDetails("No.",AvaConfig."Company ID",AvaConfig."Account Number",AvaConfig."License Key",AvaConfig."Tax Url",AvaConfig."Connector Version") ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 49 of 142

50 Page 22 Customer List Global Variable Added AvaAddrValidn Page AVA Address Validation AvaTaxEng Codeunit AVA Tax Engine AvaCertExm Page AvaCert Exemption AvaAddExmCust Page AVA Add Exemption Customer CuAvaSAddrValidn Codeunit AVA Address Validation AvaConfig Record AVA CONFIG AvaInstall Record AVA Install AvaValidAddr Record AVA Validated Address ShipToAddr Record Ship-to Address CuAvaIsInstalled Codeunit AVA IsInstalled AvaCert2 Codeunit AVA Cert2 AvaCertificateStatus Page AVA Certificate Status AvaCertificateDetails Page AVA Certificate Details Changes in Page Action Added Validate Address Type Name Caption CaptionML ShortCutKey Image Action <Validate Address> Validate Address Vali&date Address Ctrl+A Addresses //AvaInstall.RESET; //IF AvaInstall.FIND('-') AND (AvaInstall."Install Status" = 3) THEN IF CuAvaIsInstalled.IsAvaTaxInstalled THEN//Avalara IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"No.",''); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; IF AvaAddrValidn.UpdateAccept THEN AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); CurrPage.UPDATE(); END ELSE Avalara Inc. All rights reserved. Page 50 of 142

51 MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidAddr.RESET; AvaValidAddr.SETRANGE(AvaValidAddr."No.","No."); AvaValidAddr.SETRANGE(Code,''); IF NOT(AvaValidAddr.FINDFIRST) THEN BEGIN AvaValidAddr.INIT; AvaValidAddr.Source := 1; AvaValidAddr."No." := "No."; AvaValidAddr.Code:=''; AvaValidAddr.INSERT; ShipToAddr.RESET; ShipToAddr.SETRANGE(ShipToAddr."Customer No.","No."); IF ShipToAddr.FINDFIRST THEN BEGIN REPEAT AvaValidAddr.RESET; AvaValidAddr.SETRANGE("No.",ShipToAddr."Customer No."); AvaValidAddr.SETRANGE(Code,ShipToAddr.Code); IF NOT(AvaValidAddr.FINDFIRST) THEN BEGIN AvaValidAddr.INIT; AvaValidAddr.Source := 1; AvaValidAddr."No." := "No."; AvaValidAddr.Code:=ShipToAddr.Code; AvaValidAddr.INSERT; UNTIL ShipToAddr.NEXT = 0 COMMIT; AvaValidAddr.RESET; AvaValidAddr.SETRANGE(AvaValidAddr."No.","No."); PAGE.RUNMODAL( ,AvaValidAddr,"No."); Changes in Page Action Added Add AvaCert Customer Type Caption CaptionML ShortCutKey Image Avalara Inc. All rights reserved. Page 51 of 142

52 Action Add AvaCert Customer Create Customer AddContacts IF AvaConfig.GET THEN BEGIN //IF (AvaConfig.Services/100) >= 1 THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN BEGIN//Avalara CLEAR(AvaAddExmCust); AvaAddExmCust.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"No.",''); AvaAddExmCust.UpdateCustInfo("No.",Name,Contact,"Phone No.","Fax No."," "); IF AvaAddExmCust.RUNMODAL = ACTION::OK THEN BEGIN AvaAddExmCust.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); END ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Send Request for Exemption Type Caption CaptionML Actio Send Request for n Exemption Initiate Exemption Request ShortCutKe y Image SendElectronicDocum ent IF AvaConfig.GET THEN BEGIN //IF (AvaConfig.Services/100) >= 1 THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN BEGIN//Avalara CLEAR(AvaCertExm); AvaCertExm.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"No.",''); AvaCertExm.UpdateCustInfo("No.",Name,Contact,"Phone No.","Fax No."," "); IF AvaCertExm.RUNMODAL = ACTION::OK THEN BEGIN AvaCertExm.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); END ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Send Request for Exemption Type Name CaptionML ShortCutKey Image <Retrieve Certificates(s) Action Status> Retrieve Certificate(s) Status ChangeStatus Avalara Inc. All rights reserved. Page 52 of 142

53 IF AvaConfig.GET THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN AvaCert2.fnGetCertificateStatus("No.",AvaConfig."Company ID",AvaConfig."Account Number",AvaConfig."License Key",AvaConfig."Tax Url",AvaConfig."Connector Version") ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Send Request for Exemption Type Name CaptionML Actio n <Retrieve Certificate(s)> Retrieve Certificate(s) ShortCutKe y Image ImportChartOfAccoun ts IF AvaConfig.GET THEN BEGIN IF CuAvaIsInstalled.AvaIsCertServEnabled(AvaConfig) THEN AvaCert2.fnGetCertificateDetails("No.",AvaConfig."Company ID",AvaConfig."Account Number",AvaConfig."License Key",AvaConfig."Tax Url",AvaConfig."Connector Version") ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 53 of 142

54 Page 41 Sales Quote Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger Tax Area Code - OnValidate() AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesSales(Rec,CurrPage.CAPTION); EXIT; //Avalara-End Changes in Page Action Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Statistics",Rec) ELSE BEGIN //Avalara AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION); //Avalara PAGE.RUNMODAL(PAGE::"Sales Stats.",Rec); //Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses Avalara Inc. All rights reserved. Page 54 of 142

55 //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Changes in Page Action Print AvaValidCall.AvaStatisticsActionSales(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara DocPrint.PrintSalesHeader(Rec); Avalara Inc. All rights reserved. Page 55 of 142

56 Page 42 Sales Order Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger Tax Area Code - OnValidate() AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesSales(Rec,CurrPage.CAPTION); EXIT; //Avalara-End Changes in Page Action Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Order Statistics",Rec) ELSE BEGIN AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec); Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //Avalara - Start Avalara Inc. All rights reserved. Page 56 of 142

57 AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Changes in Page Action Added Test Report AvaValidCall.AvaStatisticsActionSales(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintSalesHeader(Rec); Changes in Page Action Added Prepayment &Test Report AvaValidCall.AvaStatisticsActionSales(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintSalesHeaderPrepmt(Rec); Changes in Page Action Added Post Prepayment &Invoice AvaValidCall.AvaStatisticsActionSales(Rec,FALSE, FALSE,CurrPage.CAPTION);//Avalara IF ApprovalMgt.PrePostApprovalCheck(Rec,PurchaseHeader) THEN SalesPostYNPrepmt.PostPrepmtInvoiceYN(Rec,FALSE); Changes in Page Action Added Print Confirmation AvaValidCall.AvaStatisticsActionSales(Rec,FALSE, FALSE,CurrPage.CAPTION);//Avalara DocPrint.PrintSalesOrder(Rec,Usage::"Order Confirmation"); Avalara Inc. All rights reserved. Page 57 of 142

58 Page 43 Sales Invoice Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger Tax Area Code - OnValidate() AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesSales(Rec,CurrPage.CAPTION); EXIT; //Avalara-End Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Statistics",Rec) ELSE BEGIN AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec) End; Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses Avalara Inc. All rights reserved. Page 58 of 142

59 //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Changes in Page Action Added Test Report AvaValidCall.AvaStatisticsActionSales(Rec,FALSE, FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintSalesHeader(Rec); Avalara Inc. All rights reserved. Page 59 of 142

60 Page 44 Sales Credit Memo Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger Tax Area Code - OnValidate() AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesSales(Rec,CurrPage.CAPTION); EXIT; //Avalara-End Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Statistics",Rec) ELSE BEGIN AvaValidCall.AvaCheckSalesTaxAdjust("No.","Document Type");//Avalara AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec); IF AvaValidCall.AvaAdjustSalesLines("Document Type", "No.") THEN//Avalara CurrPage.UPDATE;//Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Avalara Inc. All rights reserved. Page 60 of 142

61 Action Validate Address Validate Address Ctrl+A Addresses //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Changes in Page Action Added Test Report AvaValidCall.AvaCheckSalesTaxAdjust("No.","Document Type");//Avalara AvaValidCall.AvaStatisticsActionSales(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintSalesHeader(Rec); Page 46 Sales Order Subform Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE); //Avalara END Change to trigger OnModifyRecord Avalara Inc. All rights reserved. Page 61 of 142

62 IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE); Change to trigger OnDeleteRecord ReserveSalesLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumSalesLine(Rec,TRUE) //Avalara Avalara Inc. All rights reserved. Page 62 of 142

63 Page 47 Sales Invoice Subform Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); //Avalara END AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) Change to trigger OnModifyRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) Change to trigger OnDeleteRecord ReserveSalesLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumSalesLine(Rec,TRUE) Avalara Inc. All rights reserved. Page 63 of 142

64 Page 95 Sales Quote Subform Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); //Avalara END AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) Change to trigger OnModifyRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) Change to trigger OnDeleteRecord ReserveSalesLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumSalesLine(Rec,TRUE) Avalara Inc. All rights reserved. Page 64 of 142

65 Page 96 Sales Cr. Memo Subform Global Variable Added AVATaxEngine Codeunit AVA Tax Engine AvaConfig Record AVA CONFIG AVAValidateCall Codeunit AVA Validate Call Change to trigger OnInsertRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN IF AvaConfig.GET AND NOT(AvaConfig."Enable Tax Amt Adj.") THEN BEGIN ERROR('Enable Tax Amount Adjustment is disabled in Avatax Configuration'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) //Avalara END Change to trigger OnModifyRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN IF AvaConfig.GET AND NOT(AvaConfig."Enable Tax Amt Adj.") THEN BEGIN ERROR('Enable Tax Amount Adjustment is disabled in Avatax Configuration'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) //Avalara END Change to trigger OnDeleteRecord ReserveSalesLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumSalesLine(Rec,TRUE) Create new Action Group Avalara Functions Create new Action Tax Calculation Date Name CaptionML Image Tax Calculation Date Tax Calculation Date TaxDetail Create loca variables SalesHeader Record Sales Header AVA Document Tax Calc. AvaDocTaxCalcDate Record Date Avalara Inc. All rights reserved. Page 65 of 142

66 Add Code IF SalesHeader.GET("Document Type","Document No.") THEN AVAValidateCall.AvaTaxCalcDate(1,"Document Type","Document No.","Line No.",SalesHeader."Document Date",FALSE); Page 132 Posted Sales Invoice Global variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Invoice Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionInvoiceSales(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Invoice Stats.",Rec,"No."); Page 134 Posted Sales Credit Memo Global Variable Added AvaValidCall Codeunit AVA Validate Call Property Added to Page Action Type SubType Name Caption Action Statistics Statistics Change to trigger Statistics@OnAction IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Credit Memo Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionCreditSales(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Credit Memo Stats.",Rec,"No."); Avalara Inc. All rights reserved. Page 66 of 142

67 Page 143 Posted Sales Invoices Global variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Invoice Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionInvoiceSales(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Invoice Stats.",Rec,"No."); Page 144 Posted Sales Credit Memos Global Variable Added AvaValidCall Codeunit AVA Validate Call Property Added to Page Action Type SubType Name Caption Action Statistics Statistics Change to trigger Statistics@OnAction IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Credit Memo Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionCreditSales(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Credit Memo Stats.",Rec,"No."); Avalara Inc. All rights reserved. Page 67 of 142

68 Page 300 Ship-to Address Global variable Added AvaAddrValidn Page AVA Address Validation AvaConfig Record AVA CONFIG CuAvaSAddrValidn Codeunit AVA Address Validation AvaInstall Record AVA CONFIG AvaValidAddr Record AVA Validated Address ShipToAddr Record Ship-to Address Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Vali&date Address Vali&date Address Ctrl+A Addresses IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION, "Customer No.",Code); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; IF AvaAddrValidn.UpdateAccept THEN AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); CurrPage.UPDATE(); END ELSE MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Changes in Page Action Added Latitude / Longitude Type Caption CaptionML Image Action Latitude / Longitude Latitude / Longitude CurrencyExchangeRates IF NOT AvaConfig.GET THEN EXIT; Avalara Inc. All rights reserved. Page 68 of 142

69 AvaValidAddr.RESET; AvaValidAddr.SETRANGE(AvaValidAddr."No.","Customer No."); AvaValidAddr.SETRANGE(AvaValidAddr.Code,Code); IF NOT(AvaValidAddr.FINDFIRST) THEN BEGIN AvaValidAddr.INIT; AvaValidAddr.Source := 1; AvaValidAddr."No." := "Customer No."; AvaValidAddr.Code:=Code; AvaValidAddr.INSERT; COMMIT; AvaValidAddr.RESET; AvaValidAddr.SETRANGE(AvaValidAddr."No.","Customer No."); AvaValidAddr.SETRANGE(AvaValidAddr.Code,Code); PAGE.RUNMODAL( ,AvaValidAddr,"Customer No."); Avalara Inc. All rights reserved. Page 69 of 142

70 Page 368 Order Address Global Variable Added AvaAddrValidn Page AVA Address Validation AvaConfig Record AVA CONFIG CuAvaSAddrValidn Codeunit AVA Address Validation Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"Vendor No.",Code); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; IF AvaAddrValidn.UpdateAccept THEN AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); CurrPage.UPDATE(); END ELSE MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 70 of 142

71 Page 507 Blanket Sales Order Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger Tax Area Code - OnValidate() AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesSales(Rec,CurrPage.CAPTION); EXIT; //Avalara-End Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Order Statistics",Rec) ELSE BEGIN AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec) Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses Avalara Inc. All rights reserved. Page 71 of 142

72 //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Avalara Inc. All rights reserved. Page 72 of 142

73 Page 508 Blanket Sales Order Subform Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) //Avalara END Change to trigger OnModifyRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) Change to trigger OnDeleteRecord AVATaxEngine.AvaDocNumSalesLine(Rec,TRUE) Avalara Inc. All rights reserved. Page 73 of 142

74 Page 5050 Contact Card Global Variable Added AvaAddrValidn Page AVA Address Validation AvaConfig Record AVA CONFIG CuAvaSAddrValidn Codeunit AVA Address Validation AvaInstall Record AVA Install CuAvaIsInstalled Codeunit Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //AvaInstall.RESET; //IF AvaInstall.FIND('-') AND (AvaInstall."Install Status" = 3) THEN IF CuAvaIsInstalled.IsAvaTaxInstalled THEN//Avalara //AvalaraEnd IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,"No.",''); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; IF AvaAddrValidn.UpdateAccept THEN AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); CurrPage.UPDATE(); END ELSE MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 74 of 142

75 Page 5703 Location Card Global Variable Added AvaAddrValidn Page AVA Address Validation AvaConfig Record AVA CONFIG CuAvaSAddrValidn Codeunit AVA Address Validation AvaInstall Record AVA Install CuAvaIsInstalled Codeunit Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //AvaInstall.RESET; //IF AvaInstall.FIND('-') AND (AvaInstall."Install Status"=3) THEN IF CuAvaInstalled.IsAvaTaxInstalled THEN//Avalara IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,Code,''); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; IF AvaAddrValidn.UpdateAccept THEN AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); CurrPage.UPDATE(); END ELSE MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 75 of 142

76 Page 5714 Responsibility Center Card Global Variable Added AvaAddrValidn Page AVA Address Validation AvaConfig Record AVA CONFIG CuAvaSAddrValidn Codeunit AVA Address Validation AvaInstall Record AVA Install CuAvaIsInstalled Codeunit Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //AvaInstall.RESET; //IF AvaInstall.FIND('-') AND (AvaInstall."Install Status"=3) THEN IF CuAvaIsInstalled.IsAvaTaxInstalled THEN//Avalara IF AvaConfig.GET THEN BEGIN IF ((AvaConfig.Services MOD 100) MOD 10) = 1 THEN BEGIN IF AvaConfig."Disable Address" = FALSE THEN BEGIN CLEAR(AvaAddrValidn); IF CuAvaSAddrValidn.IsConfigValid("Country/Region Code") THEN BEGIN AvaAddrValidn.InitForm(Address,"Address 2",City,"Post Code",County,"Country/Region Code",CurrPage.CAPTION,Code,''); IF AvaAddrValidn.RUNMODAL = ACTION::LookupOK THEN; IF AvaAddrValidn.UpdateAccept THEN AvaAddrValidn.RtnAddress(Address,"Address 2",City,"Post Code",County,"Country/Region Code"); CurrPage.UPDATE(); END ELSE MESSAGE('Address Validation is disabled in AvaTax User Preference/ Configuration Window. Cannot proceed address validation'); END ELSE MESSAGE('Service Unavailable'); Avalara Inc. All rights reserved. Page 76 of 142

77 Page 5900 Service Order Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; CLEAR(ServLogMgt); ServLogMgt.ServHeaderManualDelete(Rec); //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesServ(Rec,CurrPage.CAPTION); EXIT; Change to trigger Statistics@OnAction SalesSetup.GET; IF SalesSetup."Calc. Inv. Discount" THEN BEGIN ServLine.RESET; ServLine.SETRANGE("Document Type","Document Type"); ServLine.SETRANGE("Document No.","No."); IF ServLine.FIND('-') THEN BEGIN ServLines.SETTABLEVIEW(ServLine); ServLines.CalcInvDisc(ServLine); COMMIT IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Order Statistics",Rec) ELSE BEGIN//Avalara AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Order Stats.",Rec) //Avalara Avalara Inc. All rights reserved. Page 77 of 142

78 Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Vali&date Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q; CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Changes in Page Action Added Test Report AvaValidCall.AvaStatisticsActionService(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintServiceHeader(Rec); Change to trigger Tax Area Code AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Changes in Page Action Added Post //Avalara CalcInvDiscForHeader; COMMIT; //Avalara ServHeader.GET("Document Type","No."); ServPostYesNo.PostDocument(ServHeader); Avalara Inc. All rights reserved. Page 78 of 142

79 Page 5902 Service Order Subform Change to trigger OnInsertRecord //Avalara START IF ("Item No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos') //Avalara END Change to trigger OnModifyRecord //Avalara START IF ("Item No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos') //Avalara END Page 5905 Service Lines Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnOpenPage CLEAR(SelectionFilter); SelectionFilter := SelectionFilter::"Lines per Selected Service Item"; SetSelectionFilter; Change to trigger OnInsertRecord //Avalara START IF ("No." ='SALESTAXADJUST') THEN ERROR('%1 - Item is available for "Tax Amount Adjustment entry" % Available only under Credit Memos',"No."); //Avalara END AVATaxEngine.AvaDocNumServLine(Rec,FALSE) Change to trigger OnModifyRecord //Avalara START IF ("No." ='SALESTAXADJUST') THEN ERROR('%1 - Item is available for "Tax Amount Adjustment entry" % Available only under Credit Memos',"No."); //Avalara END AVATaxEngine.AvaDocNumServLine(Rec,FALSE) Avalara Inc. All rights reserved. Page 79 of 142

80 Change to trigger OnDeleteRecord ReserveServLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumServLine(Rec,TRUE) Avalara Inc. All rights reserved. Page 80 of 142

81 Page 5933 Service Invoice Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; CLEAR(ServLogMgt); ServLogMgt.ServHeaderManualDelete(Rec); //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesServ(Rec,CurrPage.CAPTION); EXIT; Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Statistics",Rec) ELSE BEGIN//Avalara AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Stats.",Rec) //Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Vali&date Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Avalara Inc. All rights reserved. Page 81 of 142

82 Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q; CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Changes in Page Action Test Report AvaValidCall.AvaStatisticsActionService(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintServiceHeader(Rec); Change to trigger Tax Area Code AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Changes in Page Action Post //Avalara CalcInvDiscForHeader; COMMIT; //Avalara ServPostYesNo.PostDocument(Rec); Avalara Inc. All rights reserved. Page 82 of 142

83 Page 5934 Service Invoice Subform Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumServLine(Rec,FALSE); //Avalara END Change to trigger OnModifyRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumServLine(Rec,FALSE) //Avalara END Change to trigger OnDeleteRecord ReserveServLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumServLine(Rec,TRUE); //Avalara Avalara Inc. All rights reserved. Page 83 of 142

84 Page 5935 Service Credit Memo Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; CLEAR(ServLogMgt); ServLogMgt.ServHeaderManualDelete(Rec); //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN IF AvaConfig.GET AND ("Tax Area Code" = AvaConfig."Tax Group No.") THEN AVATaxEngine.AvaDeleteTablesServ(Rec,CurrPage.CAPTION); EXIT; Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Statistics",Rec) ELSE BEGIN AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Stats.",Rec); IF AvaValidCall.AvaAdjustServiceLines("Document Type", "No.") THEN//Avalara CurrPage.UPDATE;//Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses Avalara Inc. All rights reserved. Page 84 of 142

85 AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Changes in Page Action Test report AvaValidCall.AvaStatisticsActionService(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintServiceHeader(Rec); Change to trigger Tax Area Code AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Avalara Inc. All rights reserved. Page 85 of 142

86 Page 5936 Service Credit Memo Subform Global Variable Added AvaConfig Record AVA CONFIG AVAValidateCall Codeunit AVA Validate Call AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN IF AvaConfig.GET AND NOT(AvaConfig."Enable Tax Amt Adj.") THEN BEGIN ERROR('Enable Tax Amount Adjustment is disabled in Avatax Configuration'); AVATaxEngine.AvaDocNumServLine(Rec,FALSE) //Avalara END Change to trigger OnModifyRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN IF AvaConfig.GET AND NOT(AvaConfig."Enable Tax Amt Adj.") THEN BEGIN ERROR('Enable Tax Amount Adjustment is disabled in Avatax Configuration'); AVATaxEngine.AvaDocNumServLine(Rec,FALSE) //Avalara END Change to trigger OnDeleteRecord ReserveServLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumServLine(Rec,FALSE) //Avalara Create new Action Group Avalara Functions Create new Action Tax Calculation Date Name CaptionML Image Tax Calculation Date Tax Calculation Date TaxDetail Create loca variables SalesHeader Record Sales Header AvaDocTaxCalcDate Record AVA Document Tax Calc. Date Add Code IF SalesHeader.GET("Document Type","Document No.") THEN Avalara Inc. All rights reserved. Page 86 of 142

87 AVAValidateCall.AvaTaxCalcDate(1,"Document Type","Document No.","Line No.",SalesHeader."Document Date",FALSE); Avalara Inc. All rights reserved. Page 87 of 142

88 Page 5964 Service Quote Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesServ(Rec,CurrPage.CAPTION); EXIT; Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Statistics",Rec) ELSE BEGIN//Avalara AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Stats.",Rec); //Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Avalara Inc. All rights reserved. Page 88 of 142

89 Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML Image Action Latitude / Longitude Latitude / Longitude CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Change to trigger Tax Area Code AVATaxEngine.AvaDocNumSales(Rec,CurrPage.CAPTION); //Avalara Change to Action trigger Print AvaValidCall.AvaStatisticsActionService(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara CurrPage.UPDATE(TRUE); DocPrint.PrintServiceHeader(Rec); Avalara Inc. All rights reserved. Page 89 of 142

90 Page 5965 Service Quote Subform Change to trigger OnInsertRecord //Avalara START IF ("Item No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos') //Avalara END Change to trigger OnModifyRecord //Avalara START IF ("Item No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos') //Avalara END Avalara Inc. All rights reserved. Page 90 of 142

91 Page 5966 Service Quote Lines Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('%1 - Item is available for "Tax Amount Adjustment entry" % Available only under Credit Memos',"No."); AVATaxEngine.AvaDocNumServLine(Rec,FALSE) //Avalara END Change to trigger OnModifyRecord //Avalara START IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('%1 - Item is available for "Tax Amount Adjustment entry" % Available only under Credit Memos',"No."); AVATaxEngine.AvaDocNumServLine(Rec,FALSE) //Avalara END Change to trigger OnDeleteRecord ReserveServLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumServLine(Rec,TRUE) //Avalara Avalara Inc. All rights reserved. Page 91 of 142

92 Page 5971 Posted Service Credit Memos Global Variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Credit Memo Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionCreditService(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Credit Memo Stats.",Rec,"No."); Page 5972 Posted Service Credit Memo Global Variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger Statistics@OnAction IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Credit Memo Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionCreditService(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Credit Memo Stats.",Rec,"No."); Avalara Inc. All rights reserved. Page 92 of 142

93 Page 5977 Posted Service Invoices Global Variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Invoice Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionInvoiceService(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Invoice Stats.",Rec,"No."); Page 5978 Posted Service Invoice Global Variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger Statistics@OnAction IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Invoice Statistics",Rec,"No.") ELSE BEGIN AvaValidCall.AvaStatisticsActionInvoiceService(Rec,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Invoice Stats.",Rec,"No."); Avalara Inc. All rights reserved. Page 93 of 142

94 Page 6050 Service Contract Global Variable Added AvaValidCall Codeunit AVA Validate Call Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateServiceContract(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Avalara Inc. All rights reserved. Page 94 of 142

95 Page 6053 Service Contract Quote Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AvaInstall Record AVA Install Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateServiceContract(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsServiceContract(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML Image Action Latitude / Longitude Latitude / Longitude CurrencyExchangeRates Local Variable Added AVADocLatLongDataExists Boolean AvaValidCall.AvaDocLatLongServiceContract(Rec,FALSE);//Avalara Changes in Page Action New Added Tax Calculation Date Name Type Syb type AvaDocTaxCalcDate Record AvaDocTaxCalcDate.RESET; AvaDocTaxCalcDate.SETFILTER("Document No.","No."); Avalara Inc. All rights reserved. Page 95 of 142

96 AvaDocTaxCalcDate.SETFILTER("Document Type",FORMAT("Document Type")); AvaDocTaxCalcDate.SETFILTER("Document Group",FORMAT(AvaDocTaxCalcDate."Document Group"::Sales)); IF NOT(AvaDocTaxCalcDate.FINDFIRST) THEN BEGIN AvaDocTaxCalcDate.INIT; AvaDocTaxCalcDate."Document Group":= AvaDocTaxCalcDate."Document Group"::Sales; AvaDocTaxCalcDate."Document Type":= "Document Type"; AvaDocTaxCalcDate."Document No." := "No."; AvaDocTaxCalcDate."Tax Calculation Date":="Document Date"; AvaDocTaxCalcDate.INSERT; COMMIT; IF PAGE.RUNMODAL(PAGE::"AVA Document Tax Calc. Date",AvaDocTaxCalcDate) = ACTION::OK THEN; Avalara Inc. All rights reserved. Page 96 of 142

97 Avalara Inc. All rights reserved. Page 97 of 142

98 Page 6630 Sales Return Order Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger Tax Area Code - OnValidate() AVATaxEngine.AvaDocNumSales(Rec, CurrPage.CAPTION); //Avalara Change to trigger OnModifyRecord AVATaxEngine.AvaDocNumSales(Rec, CurrPage.CAPTION); //Avalara Change to trigger OnDeleteRecord CurrPage.SAVERECORD; //EXIT(ConfirmDeletion); IF ConfirmDeletion THEN BEGIN AvaConfig.GET; IF "Tax Area Code" = AvaConfig."Tax Group No." THEN AVATaxEngine.AvaDeleteTablesSales(Rec,CurrPage.CAPTION); EXIT; //Avalara-End Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Order Statistics",Rec) ELSE BEGIN AvaValidCall.AvaCheckSalesTaxAdjust("No.","Document Type");//Avalara AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec); END Avalara Inc. All rights reserved. Page 98 of 142

99 Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Changes in Page Action Test Report AvaValidCall.AvaCheckSalesTaxAdjust("No.","Document Type");//Avalara AvaValidCall.AvaStatisticsActionSales(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintSalesHeader(Rec); Changes in Page Action New Added Tax Calculation Date Name Type Syb type AvaDocTaxCalcDate Record AvaDocTaxCalcDate.RESET; AvaDocTaxCalcDate.SETFILTER("Document No.","No."); AvaDocTaxCalcDate.SETFILTER("Document Type",FORMAT("Document Type")); AvaDocTaxCalcDate.SETFILTER("Document Group",FORMAT(AvaDocTaxCalcDate."Document Group"::Sale)); IF NOT(AvaDocTaxCalcDate.FINDFIRST) THEN BEGIN AvaDocTaxCalcDate.INIT; AvaDocTaxCalcDate."Document Group":= AvaDocTaxCalcDate."Document Group"::Sale; AvaDocTaxCalcDate."Document Type":= "Document Type"; AvaDocTaxCalcDate."Document No." := "No."; Avalara Inc. All rights reserved. Page 99 of 142

100 AvaDocTaxCalcDate."Tax Calculation Date":="Document Date"; AvaDocTaxCalcDate.INSERT; COMMIT; IF PAGE.RUNMODAL(PAGE::"AVA Document Tax Calc. Date",AvaDocTaxCalcDate) = ACTION::OK THEN; Page 6631 Sales Return Order Subform Global Variable Added AVATaxEngine Codeunit AVA Tax Engine Change to trigger OnInsertRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); //Avalara END AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) Change to trigger OnModifyRecord IF (Type = Type::Item) AND ("No." ='SALESTAXADJUST') THEN ERROR('SALESTAXADJUST Item is available only under Credit Memos'); AVATaxEngine.AvaDocNumSalesLine(Rec,FALSE) Change to trigger OnDeleteRecord ReserveSalesLine.DeleteLine(Rec); AVATaxEngine.AvaDocNumSalesLine(Rec,TRUE) Avalara Inc. All rights reserved. Page 100 of 142

101 Page 9300 Sales Quotes Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger CalcInvDiscForHeader; COMMIT; // NA0001.begin IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Statistics",Rec) ELSE BEGIN //Avalara AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Stats.",Rec); //Avalara // NA0001.end Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML Image Action Latitude / Longitude Latitude / Longitude CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Avalara Inc. All rights reserved. Page 101 of 142

102 Page 9301 Sales Invoice List Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger CalcInvDiscForHeader; COMMIT; // NA0001.begin IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Statistics",Rec) ELSE BEGIN //Avalara AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Stats.",Rec); //Avalara // NA0001.end Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML Image Action Latitude / Longitude Latitude / Longitude CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Avalara Inc. All rights reserved. Page 102 of 142

103 Page 9302 Sales Credit Memos Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger CalcInvDiscForHeader; COMMIT; // NA0001.begin //PAGE.RUNMODAL(PAGE::"Sales Statistics",Rec); IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Statistics",Rec) ELSE BEGIN //Avalara AvaValidCall.AvaCheckSalesTaxAdjust("No.","Document Type");//Avalara AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec); IF AvaValidCall.AvaAdjustSalesLines("Document Type", "No.") THEN//Avalara CurrPage.UPDATE;//Avalara //Avalara // NA0001.end Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML Image Action Latitude / Longitude Latitude / Longitude CurrencyExchangeRates Avalara Inc. All rights reserved. Page 103 of 142

104 AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Changes in Page Action Added Test Report; AvaValidCall.AvaCheckSalesTaxAdjust("No.","Document Type");//Avalara AvaValidCall.AvaStatisticsActionSales(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintSalesHeader(Rec); Avalara Inc. All rights reserved. Page 104 of 142

105 Page 9303 Blanket Sales Orders Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Order Statistics",Rec) ELSE BEGIN AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec) Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Avalara Inc. All rights reserved. Page 105 of 142

106 Page 9304 Sales Return Order List Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Order Statistics",Rec) ELSE BEGIN AvaValidCall.AvaCheckSalesTaxAdjust("No.","Document Type");//Avalara AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec); END Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Avalara Inc. All rights reserved. Page 106 of 142

107 Page 9305 Sales Order List Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger CalcInvDiscForHeader; COMMIT; // NA0001.begin //PAGE.RUNMODAL(PAGE::"Sales Order Statistics",Rec); IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Sales Order Statistics",Rec) ELSE BEGIN AvaValidCall.AvaStatisticsActionSales(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Sales Order Stats.",Rec) // NA0001.end Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses //Avalara - Start AvaValidCall.AvaAddrValidateSales(Rec,CurrPage.CAPTION); CurrPage.UPDATE; //Avalara - End Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsSales(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongSales(Rec,true);//Avalara Avalara Inc. All rights reserved. Page 107 of 142

108 Changes in Page Action Added Test Report; AvaValidCall.AvaStatisticsActionSales(Rec,FALSE,FALSE,CurrPage.CAPTION);//Avalara ReportPrint.PrintSalesHeader(Rec); Avalara Inc. All rights reserved. Page 108 of 142

109 Page 9317 Service Quotes Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Statistics",Rec) ELSE BEGIN//Avalara AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Stats.",Rec); //Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Changes in Page Action Added Latitude / Longitude Type Caption CaptionML Image Action Latitude / Longitude Latitude / Longitude CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Avalara Inc. All rights reserved. Page 109 of 142

110 Page 9318 Service Orders Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG Change to trigger SalesSetup.GET; IF SalesSetup."Calc. Inv. Discount" THEN BEGIN ServLine.RESET; ServLine.SETRANGE("Document Type","Document Type"); ServLine.SETRANGE("Document No.","No."); IF ServLine.FIND('-') THEN BEGIN ServLines.SETTABLEVIEW(ServLine); ServLines.CalcInvDisc(ServLine); COMMIT IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Order Statistics",Rec) ELSE BEGIN//Avalara AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Order Stats.",Rec) //Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Vali&date Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Avalara Inc. All rights reserved. Page 110 of 142

111 Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q; CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Page 9319 Service Invoices Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Statistics",Rec) ELSE BEGIN//Avalara AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Stats.",Rec) //Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Vali&date Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Avalara Inc. All rights reserved. Page 111 of 142

112 Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q; CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Page 9320 Service Credit Memos Global Variable Added AVAAddrValidn Page AVA Address Validation AvaValidCall Codeunit AVA Validate Call AvaConfig Record AVA CONFIG AVATaxEngine Codeunit AVA Tax Engine Change to trigger Statistics@OnAction CalcInvDiscForHeader; COMMIT; IF "Tax Area Code" = '' THEN PAGE.RUNMODAL(PAGE::"Service Statistics",Rec) ELSE BEGIN AvaValidCall.AvaStatisticsActionService(Rec,TRUE,TRUE,CurrPage.CAPTION);//Avalara PAGE.RUNMODAL(PAGE::"Service Stats.",Rec); IF AvaValidCall.AvaAdjustServiceLines("Document Type", "No.") THEN//Avalara CurrPage.UPDATE;//Avalara Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateService(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Changes in Page Action Added Document Entity / Use Code Mapping Type Caption CaptionML ShortCutKey Image Action Document Entity / Use Code Mapping Document Entity / Use Code Mapping Ctrl+D DocumentsMaturity AvaValidCall.AvaDocEntityClsService(Rec);//Avalara Avalara Inc. All rights reserved. Page 112 of 142

113 Changes in Page Action Added Latitude / Longitude Type Caption CaptionML ShortCutKey Image Action Latitude / Longitude Latitude / Longitude Ctrl+Q CurrencyExchangeRates AvaValidCall.AvaDocLatLongService(Rec);//Avalara Page 9321 Service Contracts Global Variable Added AvaValidCall Codeunit AVA Validate Call Changes in Page Action Added Validate Address Type Caption CaptionML ShortCutKey Image Action Validate Address Validate Address Ctrl+A Addresses AvaValidCall.AvaAddrValidateServiceContract(Rec,CurrPage.CAPTION);//Avalara CurrPage.UPDATE();//Avalara Avalara Inc. All rights reserved. Page 113 of 142

114 Page Sales Order Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaSalesTaxAdjustFlag Boolean AvaIsTaxCalculated Boolean Change to trigger OnAfterGetRecord Add Local variable AvaSalesTaxAdjustFlag Boolean Add Local Text Name TextSalesTaxAdjust Const value SALESTAXADJUST UNTIL TempSalesLine.NEXT = 0; TempSalesLine.RESET; AvaIsTaxCalculated := AvaValidCall.AvaNavStatisticsValidDocument(TempSalesLine."Document No.",TempSalesLine."Document Type",1,TempSalesLine."No.",AvaSalesTaxAdjustFlag); IF AvaIsTaxCalculated THEN BEGIN CASE i OF 1: BEGIN TempSalesTaxLine1.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForSales(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine1,1,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,1,0,"Currency Factor"); 2: BEGIN TempSalesTaxLine2.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForSales(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine2,2,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,2,0,"Currency Factor"); 3: BEGIN TempSalesTaxLine3.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForSales(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine3,3,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,3,0,"Currency Factor"); Avalara Inc. All rights reserved. Page 114 of 142

115 END ELSE BEGIN CASE i OF 1: BEGIN TempSalesTaxLine1.DELETEALL; SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine1); 2: BEGIN TempSalesTaxLine2.DELETEALL; SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine2); 3: BEGIN TempSalesTaxLine3.DELETEALL; SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine3); //Avalara VATAmount[i] := 0; IF NOT AvaIsTaxCalculated THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); BrkIdx := 0; PrevPrintOrder := 0; PrevTaxPercent := 0; IF TaxArea.Country = TaxArea.Country::CA THEN BreakdownTitle := Text ELSE BreakdownTitle := Text ; WITH TempSalesTaxAmtLine DO BEGIN RESET; SETCURRENTKEY("Print Order","Tax Area Code for Key","Tax Jurisdiction Code"); IF FIND('-') THEN REPEAT IF AvaIsTaxCalculated THEN BEGIN IF (AvaSalesTaxAdjustFlag) OR ("Tax %" > 0) THEN BEGIN IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt, 2) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[i,BrkIdx] := Text ; END ELSE Avalara Inc. All rights reserved. Page 115 of 142

116 BreakdownLabel[i,BrkIdx] := STRSUBSTNO("Print Description","Tax %"); BreakdownAmt[i,BrkIdx] := BreakdownAmt[i,BrkIdx] + "Tax Amount"; VATAmount[i] := VATAmount[i] + "Tax Amount"; //TotalAmount2[i] := TotalAmount2[i] + VATAmount[i]; //NA0000 END//Avalara END ELSE BEGIN IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[i,BrkIdx] := Text ; END ELSE BreakdownLabel[i,BrkIdx] := STRSUBSTNO("Print Description","Tax %"); BreakdownAmt[i,BrkIdx] := BreakdownAmt[i,BrkIdx] + "Tax Amount"; VATAmount[i] := VATAmount[i] + "Tax Amount"; // TotalAmount2[i] := TotalAmount2[i] + VATAmount[i]; //NA0000 //Avalara UNTIL NEXT = 0; Change to trigger UpdateHeaderInfo Add Code IF AvaIsTaxCalculated THEN//Avalara EXIT;//Avalara TotalSalesLine[IndexNo]."Inv. Discount Amount" := SalesTaxAmountLine.GetTotalInvDiscAmount; Page Sales Tax Lines Subform Property added to Field Source Expr Property Value Tax% DecimalPlaces 4:05 Avalara Inc. All rights reserved. Page 116 of 142

117 Page Sales Invoice Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaIsTaxCalculated Boolean Change to trigger OnAfterGetRecord SalesTaxCalculate.StartSalesTaxCalculation; TempSalesTaxLine.DELETEALL; AvaIsTaxCalculated:=AvaValidCall.AvaNavHistStatisticsValidDocument(SalesInvLine."Document No."); // AvaValidCall.AvaFillTempAvaHistLines; IF AvaIsTaxCalculated THEN BEGIN IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Sales Invoice Header",0,"No.") ELSE BEGIN AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxLine); AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxAmtLine); END ELSE BEGIN IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Sales Invoice Header",0,"No.") ELSE BEGIN SalesTaxCalculate.AddSalesInvoiceLines("No."); SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); //Avalara SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine); IF NOT (AvaIsTaxCalculated) THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); IF TaxArea."Country/Region" = TaxArea."Country/Region"::CA THEN BreakdownTitle := Text006 ELSE BreakdownTitle := Text007; WITH TempSalesTaxAmtLine DO BEGIN Avalara Inc. All rights reserved. Page 117 of 142

118 Page Sales Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaIsTaxCalculated Boolean Change to trigger OnAfterGetRecord TempSalesTaxLine.DELETEALL; AvaIsTaxCalculated := AvaValidCall.AvaNavStatisticsValidDocument(TempSalesLine."Document No.",TempSalesLine."Document Type",1,TempSalesLine."No.",AvaSalesTaxAdjustFlag); IF AvaIsTaxCalculated THEN BEGIN TempSalesTaxLine.DELETEALL; AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine,1,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,1,0,"Currency Factor"); END ELSE BEGIN IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForSales(Rec,TRUE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine); //Avalara SalesTaxCalculate.DistTaxOverSalesLines(TempSalesLine); SalesPost.SumSalesLinesTemp( Rec,TempSalesLine,0,TotalSalesLine,TotalSalesLineLCY, TaxAmount,TaxAmountText,ProfitLCY,ProfitPct,TotalAdjCostLCY); AdjProfitLCY := TotalSalesLineLCY.Amount - TotalAdjCostLCY; IF TotalSalesLineLCY.Amount <> 0 THEN AdjProfitPct := ROUND(AdjProfitLCY / TotalSalesLineLCY.Amount * 100,0.1); IF "Prices Including VAT" THEN BEGIN TotalAmount2 := TotalSalesLine.Amount; TotalAmount1 := TotalAmount2 + TaxAmount; TotalSalesLine."Line Amount" := TotalAmount1 + TotalSalesLine."Inv. Discount Amount"; END ELSE BEGIN TotalAmount1 := TotalSalesLine.Amount; TotalAmount2 := TotalSalesLine."Amount Including VAT"; IF NOT AvaIsTaxCalculated THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); Avalara Inc. All rights reserved. Page 118 of 142

119 Change to function UpdateHeaderInfo TotalAmount1 := TotalSalesLine."Line Amount" - TotalSalesLine."Inv. Discount Amount"; IF (TaxAmount = 0) AND (AvaValidCall.AvaIsTaxCalculated <> 0) THEN //Avalara TaxAmount := TempSalesTaxLine.GetTotalTaxAmountFCY; IF "Prices Including VAT" THEN TotalAmount2 := TotalSalesLine.Amount ELSE TotalAmount2 := TotalAmount1 + TaxAmount; Change to trigger UpdateTaxBreakdown IF FIND('-') THEN REPEAT IF AvaIsTaxCalculated THEN BEGIN IF ("Tax %" > 0) THEN BEGIN//Avalara IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[BrkIdx] := Text008; END ELSE BreakdownLabel[BrkIdx] := STRSUBSTNO("Print Description","Tax %"); BreakdownAmt[BrkIdx] := BreakdownAmt[BrkIdx] + "Tax Amount"; TaxAmount := TaxAmount + "Tax Amount";//Avalara //VATAmount[i] := VATAmount[i] + "Tax Amount";//Avalara //TotalAmount2[i] := TotalAmount2[i] + VATAmount[i]; //NA0000 IF UpdateTaxAmount THEN TaxAmount := TaxAmount + "Tax Amount"; END//Avalara END ELSE BEGIN IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[BrkIdx] := Text008; END ELSE BreakdownLabel[BrkIdx] := STRSUBSTNO("Print Description","Tax %"); Avalara Inc. All rights reserved. Page 119 of 142

120 BreakdownAmt[BrkIdx] := BreakdownAmt[BrkIdx] + "Tax Amount"; IF UpdateTaxAmount THEN TaxAmount := TaxAmount + "Tax Amount" ELSE BreakdownAmt[BrkIdx] := BreakdownAmt[BrkIdx] + "Tax Difference"; //Avalara UNTIL NEXT = 0; Avalara Inc. All rights reserved. Page 120 of 142

121 Page Sales Credit Memo Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaIsTaxCalculated Boolean Change to trigger OnAfterGetRecord AvaIsTaxCalculated := AvaValidCall.AvaNavHistStatisticsValidDocument(SalesCrMemoLine."Document No."); IF AvaIsTaxCalculated THEN BEGIN IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Sales Cr.Memo Header",0,"No.") ELSE BEGIN AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxLine); AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxAmtLine); END ELSE BEGIN //Avalara IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Sales Cr.Memo Header",0,"No.") ELSE BEGIN SalesTaxCalculate.AddSalesCrMemoLines("No."); SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); //Avalara SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine); IF NOT AvaIsTaxCalculated THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); Avalara Inc. All rights reserved. Page 121 of 142

122 Page Service Order Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger OnAfterGetRecord Local Variable Added AvaTaxFeatureEnabled Boolean AvaIsTaxCalculated Boolean AvaSalesTaxAdjustFlag Boolean CLEAR(BreakdownAmt); AvaTaxFeatureEnabled := FALSE; //Avalara FOR i := 1 TO 7 DO BEGIN TempServLine.DELETEALL; CLEAR(TempServLine); ServAmtsMgt.GetServiceLines(Rec,TempServLine,i - 1); SalesTaxCalculate.StartSalesTaxCalculation; IF NOT TaxArea."Use External Tax Engine" THEN BEGIN TempServLine.SETFILTER(Type,'>0'); TempServLine.SETFILTER(Quantity,'<>0'); IF TempServLine.FIND('-') THEN REPEAT SalesTaxCalculate.AddServiceLine(TempServLine); UNTIL TempServLine.NEXT = 0; AvaValidCall.AvaServiceSetDocNumTypeTable(TempServLine."Document No.",TempServLine."Document Type",1); IF AvaValidCall.AvaServiceIsValidDocument(2) THEN BEGIN IF AvaValidCall.AvaServiceIsTaxCalculated = 0 THEN BEGIN AvaValidCall.AvaFillTempAvaLines(2); CASE i OF 1: BEGIN TempSalesTaxLine1.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine1,1,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,1,0,"Currency Factor"); 2: BEGIN Avalara Inc. All rights reserved. Page 122 of 142

123 TempSalesTaxLine2.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine2,2,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,2,0,"Currency Factor"); 3: BEGIN TempSalesTaxLine3.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine3,3,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,3,0,"Currency Factor"); END ELSE BEGIN // ////Avalara CASE i OF 1: BEGIN TempSalesTaxLine1.DELETEALL; TaxCalculation; SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine1); 2: BEGIN TempSalesTaxLine2.DELETEALL; TaxCalculation; SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine2); 3: BEGIN TempSalesTaxLine3.DELETEALL; TaxCalculation; SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine3); //Avalara //Avalara ServAmtsMgt.SumServiceLinesTemp( Rec,TempServLine,i - 1,TotalServLine[i],TotalServLineLCY[i], VATAmount[i],VATAmountText[i],ProfitLCY[i],ProfitPct[i],TotalAdjCostLCY[i]); // IF Status = Status::Open THEN SalesTaxCalculate.DistTaxOverServLines(TempServLine); Avalara Inc. All rights reserved. Page 123 of 142

124 // SalesPost.SumSalesLinesTemp( // Rec,TempSalesLine,i - 1,TotalServLine[i],TotalServLineLCY[i], // VATAmount[i],VATAmountText[i],ProfitLCY[i],ProfitPct[i],TotalAdjCostLCY[i]); IF i = 3 THEN TotalAdjCostLCY[i] := TotalServLineLCY[i]."Unit Cost (LCY)"; AdjProfitLCY[i] := TotalServLineLCY[i].Amount - TotalAdjCostLCY[i]; IF TotalServLineLCY[i].Amount <> 0 THEN AdjProfitPct[i] := ROUND(AdjProfitLCY[i] / TotalServLineLCY[i].Amount * 100,0.1); TotalAmount1[i] := TotalServLine[i].Amount; TotalAmount2[i] := TotalAmount1[i]; VATAmount[i] := 0; IF NOT (AvaIsTaxCalculated) THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); BrkIdx := 0; PrevPrintOrder := 0; PrevTaxPercent := 0; IF TaxArea.Country = TaxArea.Country::CA THEN BreakdownTitle := Text ELSE BreakdownTitle := Text ; WITH TempSalesTaxAmtLine DO BEGIN RESET; SETCURRENTKEY("Print Order","Tax Area Code for Key","Tax Jurisdiction Code"); IF FIND('-') THEN REPEAT IF AvaIsTaxCalculated THEN BEGIN IF ("Tax %" > 0) THEN BEGIN//Avalara AvaTaxFeatureEnabled := TRUE; // Avalara IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt,2) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[i,BrkIdx] := Text ; END ELSE BreakdownLabel[i,BrkIdx] := STRSUBSTNO("Print Description","Tax %"); BreakdownAmt[i,BrkIdx] := BreakdownAmt[i,BrkIdx] + "Tax Amount"; VATAmount[i] := VATAmount[i] + "Tax Amount"; //TotalAmount2[i] := TotalAmount2[i] + VATAmount[i]; //NA0000 END//Avalara END ELSE BEGIN IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR Avalara Inc. All rights reserved. Page 124 of 142

125 ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[i,BrkIdx] := Text ; END ELSE BreakdownLabel[i,BrkIdx] := STRSUBSTNO("Print Description","Tax %"); BreakdownAmt[i,BrkIdx] := BreakdownAmt[i,BrkIdx] + "Tax Amount"; VATAmount[i] := VATAmount[i] + "Tax Amount"; //Avalara UNTIL NEXT = 0; TotalAmount2[i] := TotalAmount2[i] + VATAmount[i]; // Avalara ++ IF (AvaTaxFeatureEnabled AND(i=3)) THEN i:=7; // Avalara -- TempServLine.DELETEALL; Change to trigger UpdateHeaderInfo Add Code IF (AvaValidCall.AvaIsTaxCalculated = 0) THEN//Avalara EXIT;//Avalara Avalara Inc. All rights reserved. Page 125 of 142

126 Page Service Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaIsTaxCalculated Boolean Change to trigger OnAfterGetRecord Add Local variable AvaSalesTaxAdjustFlag Boolean Add Local Text Name TextSalesTaxAdjust Const value SALESTAXADJUST Local Variable Added AvaTaxFeatureEnabled Boolean CLEAR(BreakdownLabel); CLEAR(BreakdownAmt); AvaTaxFeatureEnabled := FALSE; //Avalara FOR i := 1 TO 7 DO BEGIN TempServLine.DELETEALL; CLEAR(TempServLine); ServAmtsMgt.GetServiceLines(Rec,TempServLine,i - 1); SalesTaxCalculate.StartSalesTaxCalculation; IF NOT TaxArea."Use External Tax Engine" THEN BEGIN TempServLine.SETFILTER(Type,'>0'); TempServLine.SETFILTER(Quantity,'<>0'); IF TempServLine.FIND('-') THEN REPEAT SalesTaxCalculate.AddServiceLine(TempServLine); UNTIL TempServLine.NEXT = 0; AvaValidCall.AvaServiceSetDocNumTypeTable(TempServLine."Document No.",TempServLine."Document Type",1); IF AvaValidCall.AvaServiceIsValidDocument(2) THEN BEGIN IF AvaValidCall.AvaServiceIsTaxCalculated = 0 THEN BEGIN AvaValidCall.AvaFillTempAvaLines(2); IF TempServLine."No." = TextSalesTaxAdjust THEN AvaSalesTaxAdjustFlag := TRUE ELSE Avalara Inc. All rights reserved. Page 126 of 142

127 AvaSalesTaxAdjustFlag := FALSE; CASE i OF 1: BEGIN TempSalesTaxLine1.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine1,1,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,1,0,"Currency Factor"); 2: BEGIN TempSalesTaxLine2.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine2,2,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,2,0,"Currency Factor"); 3: BEGIN TempSalesTaxLine3.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxLine3,3,0,"Currency Factor"); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmtLine,3,0,"Currency Factor"); END ELSE BEGIN CASE i OF 1: BEGIN TempSalesTaxLine1.DELETEALL; CASE i OF 1: BEGIN TempSalesTaxLine1.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine1); 2: Avalara Inc. All rights reserved. Page 127 of 142

128 BEGIN TempSalesTaxLine2.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine2); 3: BEGIN TempSalesTaxLine3.DELETEALL; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ(Rec,TRUE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine3); //Avalara ServAmtsMgt.SumServiceLinesTemp( Rec,TempServLine,i - 1,TotalServLine[i],TotalServLineLCY[i], VATAmount[i],VATAmountText[i],ProfitLCY[i],ProfitPct[i],TotalAdjCostLCY[i]); // IF Status = Status::Open THEN SalesTaxCalculate.DistTaxOverServLines(TempServLine); // SalesPost.SumSalesLinesTemp( // Rec,TempSalesLine,i - 1,TotalServLine[i],TotalServLineLCY[i], // VATAmount[i],VATAmountText[i],ProfitLCY[i],ProfitPct[i],TotalAdjCostLCY[i]); IF i = 3 THEN TotalAdjCostLCY[i] := TotalServLineLCY[i]."Unit Cost (LCY)"; AdjProfitLCY[i] := TotalServLineLCY[i].Amount - TotalAdjCostLCY[i]; IF TotalServLineLCY[i].Amount <> 0 THEN AdjProfitPct[i] := ROUND(AdjProfitLCY[i] / TotalServLineLCY[i].Amount * 100,0.1); TotalAmount1[i] := TotalServLine[i].Amount; TotalAmount2[i] := TotalAmount1[i]; VATAmount[i] := 0; IF NOT (AvaIsTaxCalculated) THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); BrkIdx := 0; PrevPrintOrder := 0; PrevTaxPercent := 0; IF TaxArea.Country = TaxArea.Country::CA THEN BreakdownTitle := Text ELSE BreakdownTitle := Text ; WITH TempSalesTaxAmtLine DO BEGIN RESET; Avalara Inc. All rights reserved. Page 128 of 142

129 SETCURRENTKEY("Print Order","Tax Area Code for Key","Tax Jurisdiction Code"); IF FIND('-') THEN REPEAT IF AvaIsTaxCalculated THEN BEGIN IF (AvaSalesTaxAdjustFlag) OR("Tax %">0) THEN BEGIN//Avalara AvaTaxFeatureEnabled := TRUE; // Avalara IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt,2) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[i,BrkIdx] := Text ; END ELSE BreakdownLabel[i,BrkIdx] := STRSUBSTNO("Print Description","Tax %"); BreakdownAmt[i,BrkIdx] := BreakdownAmt[i,BrkIdx] + "Tax Amount"; VATAmount[i] := VATAmount[i] + "Tax Amount"; //TotalAmount2[i] := TotalAmount2[i] + VATAmount[i]; //NA0000 END//Avalara END ELSE BEGIN IF ("Print Order" = 0) OR ("Print Order" <> PrevPrintOrder) OR ("Tax %" <> PrevTaxPercent) THEN BEGIN BrkIdx := BrkIdx + 1; IF BrkIdx > ARRAYLEN(BreakdownAmt) THEN BEGIN BrkIdx := BrkIdx - 1; BreakdownLabel[i,BrkIdx] := Text ; END ELSE BreakdownLabel[i,BrkIdx] := STRSUBSTNO("Print Description","Tax %"); BreakdownAmt[i,BrkIdx] := BreakdownAmt[i,BrkIdx] + "Tax Amount"; VATAmount[i] := VATAmount[i] + "Tax Amount"; //Avalara UNTIL NEXT = 0;s TotalAmount2[i] := TotalAmount2[i] + VATAmount[i]; // Avalara ++ IF (AvaTaxFeatureEnabled AND(i=3)) THEN i:=7; // Avalara -- TempServLine.DELETEALL; Avalara Inc. All rights reserved. Page 129 of 142

130 Page Service Invoice Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call Change to trigger OnAfterGetRecord SalesTaxCalculate.StartSalesTaxCalculation; TempSalesTaxLine.DELETEALL; AvaValidCall.AvaSetHistDocNumTypeTable(ServInvLine."Document No."); IF AvaValidCall.AvaServiceIsValidDocument(2) THEN BEGIN AvaValidCall.AvaFillTempAvaHistLines; IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Service Invoice Header",0,"No.") ELSE BEGIN AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxLine); AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxAmtLine); END ELSE BEGIN IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Service Invoice Header",0,"No.") ELSE BEGIN SalesTaxCalculate.AddServInvoiceLines("No."); SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); //Avalara SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine); IF NOT (AvaValidCall.AvaServiceIsTaxCalculated <> 0) THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); Avalara Inc. All rights reserved. Page 130 of 142

131 Page Service Credit Memo Stats. Global Variable Added AvaValidCall Codeunit AVA Validate Call AvaIsTaxCalculated Boolean Change to trigger OnAfterGetRecord SalesTaxCalculate.StartSalesTaxCalculation; TempSalesTaxLine.DELETEALL; AvaIsTaxCalculated := AvaValidCall.AvaNavHistStatisticsValidDocumentService(ServCrMemoLine."Document No."); IF AvaIsTaxCalculated THEN BEGIN IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Service Cr.Memo Header",0,"No.") ELSE BEGIN AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxLine); AvaValidCall.AvaSummarizeInvoiceTaxLines(TempSalesTaxAmtLine); END ELSE BEGIN IF TaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForDoc(DATABASE::"Service Cr.Memo Header",0,"No.") ELSE BEGIN SalesTaxCalculate.AddServCrMemoLines("No."); SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); //Avalara SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxLine); IF NOT AvaIsTaxCalculated THEN //Avalara SalesTaxCalculate.GetSummarizedSalesTaxTable(TempSalesTaxAmtLine); Avalara Inc. All rights reserved. Page 131 of 142

132 Changes in Reports Report 202 Sales Document - Test Global variable Added AvaValidCal Codeunit AVA Validate Call AvaIsTaxCalculated Boolean Change to trigger (Search for below first line) TotalAmountInclVAT := VATAmountLine.GetTotalAmountInclVAT; IF SalesTax THEN BEGIN SalesTaxAmountLine.DELETEALL; AvaValidCal.AvaSetDocNumTypeTable("Sales Header"."No.","Sales Header"."Document Type",1); IF AvaValidCal.AvaIsValidDocument(1) THEN BEGIN AvaValidCal.AvaFillTempAvaLines(1); AvaValidCal.AvaSummarizeTaxLines(SalesTaxAmountLine,2,0,SalesHeader."Currency Factor"); AvaIsTaxCalculated:=TRUE; END ELSE AvaIsTaxCalculated:=FALSE; SalesTaxCalculate.StartSalesTaxCalculation; Change to trigger (Search for below first line) IF Number = TempSalesLine.COUNT THEN BEGIN TempVATAmount := VATAmount; IF SalesTax THEN BEGIN IF NOT AvaIsTaxCalculated THEN BEGIN//Avalara IF HeaderTaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForSales("Sales Header",TRUE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Sales Header"."Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(SalesTaxAmountLine); //Avalara VATAmount := SalesTaxAmountLine.GetTotalTaxAmountFCY; VATBaseAmount := SalesTaxAmountLine.GetTotalTaxBase; IF SalesTax THEN TaxText := SalesTaxAmountLine.TaxAmountText ELSE TaxText := VATAmountLine.VATAmountText; Avalara Inc. All rights reserved. Page 132 of 142

133 Report 296 Batch Post Sales Orders Change to trigger Sales (Search for below first line) SalesPost.SetPostingDate(ReplacePostingDate,ReplaceDocumentDate,PostingDateReq); SalesPost.AvaSetBatchModeFlag(TRUE);//Avalara IF IsApprovedForPostingBatch THEN IF SalesPost.RUN("Sales Header") THEN BEGIN CounterOK := CounterOK + 1; IF MARKEDONLY THEN MARK(FALSE); SalesPost.AvaSetBatchModeFlag(FALSE);//Avalara Report 5900 Service Order DateItem CopyLoop OnAfteretRecord Global variable Added AvaValidCal Codeunit AVA Validate Call SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxAmountLine); AvaValidCall.AvaServiceSetDocNumTypeTable("Document No.","Document Type",1); IF AvaValidCall.AvaServiceIsValidDocument(2) THEN BEGIN IF AvaValidCall.AvaServiceIsTaxCalculated = 0 THEN AvaValidCall.AvaFillTempAvaLines(2); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmountLine,1,"Line No.","Service Header"."Currency Factor"); //Avalara end GrossAmt := Amt + TempSalesTaxAmountLine.GetTotalTaxAmountFCY; END ELSE BEGIN Report 5902 Service Quote DateItem CopyLoop OnAfteretRecord Global variable Added AvaValidCal Codeunit AVA Validate Call Avalara Inc. All rights reserved. Page 133 of 142

134 SalesTaxCalculate.EndSalesTaxCalculation("Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(TempSalesTaxAmountLine); AvaValidCall.AvaServiceSetDocNumTypeTable("Document No.","Document Type",1); IF AvaValidCall.AvaServiceIsValidDocument(2) THEN BEGIN IF AvaValidCall.AvaServiceIsTaxCalculated = 0 THEN AvaValidCall.AvaFillTempAvaLines(2); AvaValidCall.AvaSummarizeTaxLines(TempSalesTaxAmountLine,2,"Line No.","Service Header"."Currency Factor"); //Avalara end GrossAmt := Amt + TempSalesTaxAmountLine.GetTotalTaxAmountFCY; TotAmt := TotAmt + Amt; Report 5915 Service Document - Test Global variable Added AvaValidCal Codeunit AVA Validate Call AvaIsTaxCalculated Bolean Change to trigger CopyLoop@ OnAfterGetRecord (Search for below first line) TotalAmountInclVAT := VATAmountLine.GetTotalAmountInclVAT; IF SalesTax THEN BEGIN SalesTaxAmountLine.DELETEALL; AvaIsTaxCalculated := FALSE; AvaValidCal.AvaServiceSetDocNumTypeTable("Service Header"."No.","Service Header"."Document Type",1); IF AvaValidCal.AvaServiceIsValidDocument(1) THEN BEGIN AvaValidCal.AvaFillTempAvaLines(2); AvaValidCal.AvaSummarizeTaxLines(SalesTaxAmountLine,2,0,"Service Header"."Currency Factor"); AvaIsTaxCalculated := TRUE; SalesTaxCalculate.StartSalesTaxCalculation; Change to trigger (Search for below first line) IF "Line No." = OrigMaxLineNo THEN BEGIN IF SalesTax THEN BEGIN IF NOT AvaIsTaxCalculated THEN BEGIN//Avalara IF HeaderTaxArea."Use External Tax Engine" THEN SalesTaxCalculate.CallExternalTaxEngineForServ("Service Header",TRUE) ELSE SalesTaxCalculate.EndSalesTaxCalculation("Service Header"."Posting Date"); SalesTaxCalculate.GetSalesTaxAmountLineTable(SalesTaxAmountLine); //Avalara VATAmount := SalesTaxAmountLine.GetTotalTaxAmountFCY; Avalara Inc. All rights reserved. Page 134 of 142

135 VATBaseAmount := SalesTaxAmountLine.GetTotalTaxBase; TaxText := SalesTaxAmountLine.TaxAmountText; END ELSE TaxText := VATAmountLine.VATAmountText; Change to trigger (Search for below first line) IF Number = 1 THEN SalesTaxAmountLine.FINDFIRST ELSE SalesTaxAmountLine.NEXT; //Avalara start IF AvaIsTaxCalculated THEN SumtotalVAT += SalesTaxAmountLine."Tax Amount" ELSE //Avalara end IF SalesTax AND (SalesTaxAmountLine."Tax Amount" <> 0) THEN SumtotalVAT := SumtotalVAT + SalesTaxAmountLine."Tax Amount"; SumtotalExchFactor := SalesTaxAmountLine."Tax Amount" * ExchangeFactor; Report Sales Order Global Variable Added AvaValidCal Codeunit AVA Validate Call lavataxexemptamount Decimal Change to trigger SalesLine@ OnAfterGetRecord (Search for below first line) IF "Tax Area Code" <> '' THEN TaxAmount := "Amount Including VAT" - Amount ELSE TaxAmount := 0; AvaValidCal.AvaSetDocNumTypeTable("Sales Header"."No.","Sales Header"."Document Type",1); IF AvaValidCal.AvaIsValidDocument(2) THEN BEGIN TaxAmount := AvaValidCal.AvaGetTaxAmountFull(TempSalesLine); lavataxexemptamount := AvaValidCal.AvaGetTaxExemptAmountFull(TempSalesLine); //AVANA //AVANA IF TaxAmount <> 0 THEN //TaxLiable := Amount; //Avalara AVANA TaxLiable := Amount - lavataxexemptamount //Avalara AVANA ELSE TaxLiable := 0; AmountExclInvDisc := "Line Amount"; Avalara Inc. All rights reserved. Page 135 of 142

136 Report Sales Quote Global Variable Added AvaValidCal Codeunit AVA Validate Call TaxFlag Boolean lavataxexemptamount Decimal Change to trigger OnAfterGetRecord (Search for below first line) IF "Tax Area Code" <> '' THEN TaxAmount := "Amount Including VAT" - Amount ELSE TaxAmount := 0; AvaValidCal.AvaSetDocNumTypeTable("Sales Header"."No.","Sales Header"."Document Type",1); IF AvaValidCal.AvaIsValidDocument(2) THEN BEGIN TaxAmount := AvaValidCal.AvaGetTaxAmountFull(TempSalesLine); lavataxexemptamount := AvaValidCal.AvaGetTaxExemptAmountFull(TempSalesLine); //IF TaxAmount <> 0 THEN // TaxLiable := Amount //ELSE // TaxLiable := 0; IF TaxAmount <> 0 THEN BEGIN TaxFlag := TRUE; //TaxLiable := Amount; TaxLiable := Amount - lavataxexemptamount; END ELSE BEGIN TaxFlag := FALSE; TaxLiable := 0; AmountExclInvDisc := "Line Amount"; Avalara Inc. All rights reserved. Page 136 of 142

137 AvaTax Integration for Purchase Module Changes in Codeunits Codeunit 90 Purch.-Post Global variable Added AVAPurchaseValidate Codeunit AVA Purchase Validate Change to trigger OnRun() Trigger // Balancing account IF "Bal. Account No." <> '' THEN BEGIN IF GUIALLOWED THEN Window.UPDATE(5,1); VendLedgEntry.FINDLAST; GenJnlLine.INIT; GenJnlLine."Posting Date" := "Posting Date"; GenJnlLine."Document Date" := "Document Date"; GenJnlLine.Description := "Posting Description"; GenJnlLine."Shortcut Dimension 1 Code" := "Shortcut Dimension 1 Code"; GenJnlLine."Shortcut Dimension 2 Code" := "Shortcut Dimension 2 Code"; GenJnlLine."Dimension Set ID" := "Dimension Set ID"; GenJnlLine."Reason Code" := "Reason Code"; GenJnlLine."Account Type" := GenJnlLine."Account Type"::Vendor; GenJnlLine."Account No." := "Pay-to Vendor No."; IF "Document Type" IN ["Document Type"::"Return Order","Document Type"::"Credit Memo"] THEN GenJnlLine."Document Type" := GenJnlLine."Document Type"::Refund ELSE GenJnlLine."Document Type" := GenJnlLine."Document Type"::Payment; GenJnlLine."Document No." := GenJnlLineDocNo; GenJnlLine."External Document No." := GenJnlLineExtDocNo; IF "Bal. Account Type" = "Bal. Account Type"::"Bank Account" THEN GenJnlLine."Bal. Account Type" := GenJnlLine."Bal. Account Type"::"Bank Account"; GenJnlLine."Bal. Account No." := "Bal. Account No."; GenJnlLine."Currency Code" := "Currency Code"; GenJnlLine.Amount := TotalPurchLine."Amount Including VAT" + VendLedgEntry."Remaining Pmt. Disc. Possible"; GenJnlLine.Correction := Correction; GenJnlLine."Source Currency Code" := "Currency Code"; GenJnlLine."Source Currency Amount" := GenJnlLine.Amount; VendLedgEntry.CALCFIELDS(Amount); IF VendLedgEntry.Amount = 0 THEN GenJnlLine."Amount (LCY)" := TotalPurchLineLCY."Amount Including VAT" ELSE GenJnlLine."Amount (LCY)" := TotalPurchLineLCY."Amount Including VAT" + ROUND( VendLedgEntry."Remaining Pmt. Disc. Possible" / VendLedgEntry."Adjusted Currency Factor"); IF "Currency Code" = '' THEN Avalara Inc. All rights reserved. Page 137 of 142

138 GenJnlLine."Currency Factor" := 1 ELSE GenJnlLine."Currency Factor" := "Currency Factor"; GenJnlLine."Applies-to Doc. Type" := GenJnlLineDocType; GenJnlLine."Applies-to Doc. No." := GenJnlLineDocNo; GenJnlLine."Source Type" := GenJnlLine."Source Type"::Vendor; GenJnlLine."Source No." := "Pay-to Vendor No."; GenJnlLine."Source Code" := SrcCode; GenJnlLine."Posting No. Series" := "Posting No. Series"; GenJnlLine."IC Partner Code" := "Pay-to IC Partner Code"; GenJnlLine."Allow Zero-Amount Posting" := TRUE; GenJnlLine."Salespers./Purch. Code" := "Purchaser Code"; GenJnlPostLine.RunWithCheck(GenJnlLine); IF Invoice THEN AVAPurchaseValidate.AvaStatisticsActionPurchase(PurchHeader,TRUE,PurchInvHeader."No.",Receive,Invoice,'Purc hase Invoice'); IF ICGenJnlLineNo > 0 THEN PostICGenJnl; IF Receive THEN BEGIN "Last Receiving No." := "Receiving No."; "Receiving No." := ''; Avalara Inc. All rights reserved. Page 138 of 142

139 Changes in Pages Page 26 Vendor Card Global variable Added AVAVendorUseTaxAssessment Record AVA Vendors Use Tax Assessment AVAVendorUseTaxAssessmentPage Page AVA Vendor Use Tax Assessment Add new Action New Code IF NOT AVAVendorUseTaxAssessment.GET("No.") THEN BEGIN AVAVendorUseTaxAssessment.INIT; AVAVendorUseTaxAssessment."Vendor No." := "No."; AVAVendorUseTaxAssessment.Name := Name; AVAVendorUseTaxAssessment.INSERT; COMMIT; AVAVendorUseTaxAssessment.GET("No."); PAGE.RUNMODAL( ,AVAVendorUseTaxAssessment,"No."); Avalara Inc. All rights reserved. Page 139 of 142

140 Page 27 Vendor List Global variable Added AVAVendorUseTaxAssessment Record AVA Vendors Use Tax Assessment AVAVendorUseTaxAssessmentPage Page AVA Vendor Use Tax Assessment Add new Action New Code IF NOT AVAVendorUseTaxAssessment.GET("No.") THEN BEGIN AVAVendorUseTaxAssessment.INIT; AVAVendorUseTaxAssessment."Vendor No." := "No."; AVAVendorUseTaxAssessment.Name := Name; AVAVendorUseTaxAssessment.INSERT; COMMIT; AVAVendorUseTaxAssessment.GET("No."); PAGE.RUNMODAL( ,AVAVendorUseTaxAssessment,"No."); Avalara Inc. All rights reserved. Page 140 of 142

Avalara AvaTax for Microsoft Dynamics NAV 2013 R2

Avalara AvaTax for Microsoft Dynamics NAV 2013 R2 Avalara AvaTax for Microsoft Dynamics NAV 2013 R2 Version 01 Revision date: 9/9/15 Product release: Microsoft NAV 7.10.35473.09.00 Avalara may have patents, patent applications, trademarks, copyrights,

More information

Avalara AvaTax for Microsoft Dynamics NAV 2013 RTM

Avalara AvaTax for Microsoft Dynamics NAV 2013 RTM Avalara AvaTax for Microsoft Dynamics NAV 2013 RTM Version 01 Revision date: 10/9/14 Product release: Microsoft NAV 7.00.33781.03.00 Avalara may have patents, patent applications, trademarks, copyrights,

More information

Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM

Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM Version 01 Revision date: 12/2/14 Product release: Microsoft NAV 8.00.37874.01.00 Avalara may have patents, patent applications, trademarks, copyrights,

More information

Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM

Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM Version 01 Revision date: 8/28/15 Product release: Microsoft NAV 8.00.37874.05.00 Avalara may have patents, patent applications, trademarks, copyrights,

More information

Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM

Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM Avalara AvaTax for Microsoft Dynamics NAV 2015 RTM Version 01 Revision date: 11/30/17 Product release: Microsoft NAV 8.00.37874.11.04 Avalara may have patents, patent applications, trademarks, copyrights,

More information

Avalara AvaTax for Microsoft Dynamics NAV 2013 RTM

Avalara AvaTax for Microsoft Dynamics NAV 2013 RTM Avalara AvaTax for Microsoft Dynamics NAV 2013 RTM Version 01 Revision date: 4/30/15 Product release: Microsoft NAV 7.00.33781.05.00 Avalara may have patents, patent applications, trademarks, copyrights,

More information

Avalara AvaTax for Microsoft Dynamics 365 Finance and Operations Enterprise Edition

Avalara AvaTax for Microsoft Dynamics 365 Finance and Operations Enterprise Edition Avalara AvaTax for Microsoft Dynamics 365 Finance and Operations Enterprise Edition Version 01 Revision date: 9/25/18 Product release: Microsoft Dynamics 365 FO - EE Avalara may have patents, patent applications,

More information

AvaTax for Microsoft Dynamics AX Retail 2012

AvaTax for Microsoft Dynamics AX Retail 2012 Revision date: 04/22/2013 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly

More information

VAT Reporting v

VAT Reporting v Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

Sage 300 ERP Sales Tax

Sage 300 ERP Sales Tax Sage 300 ERP Sales Tax User Guide Version 1.0.1 Revision date: 01/28/2013 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject

More information

VAT Reporting v17.4.1

VAT Reporting v17.4.1 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v17.1.1

VAT Reporting v17.1.1 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v18.1.1

VAT Reporting v18.1.1 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v17.3.1

VAT Reporting v17.3.1 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v

VAT Reporting v Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v18.3.1

VAT Reporting v18.3.1 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v

VAT Reporting v Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v17.8.1

VAT Reporting v17.8.1 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v

VAT Reporting v Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

VAT Reporting v17.9.2

VAT Reporting v17.9.2 Avalara may have patents, patent applications, trademarks, copyrights, or other intellectual property rights governing the subject matter in this document. Except as expressly provided in any written license

More information

Direct Purchasing for Version 3.x to NAV 2009 Classic RTC has same functionality, but different UI

Direct Purchasing for Version 3.x to NAV 2009 Classic RTC has same functionality, but different UI Direct Purchasing for Version 3.x to NAV 2009 Classic RTC has same functionality, but different UI Direct Purchasing adds many new features to Navision Attain. First it allows you to issue a Purchase Order

More information

Microsoft Dynamics NAV 2009 Changes

Microsoft Dynamics NAV 2009 Changes Microsoft Dynamics NAV 2009 Changes This document provides an overview of the changed and new Microsoft Dynamics NAV objects. Sana 9 - The future of B2B e-commerce 2015 Sana Commerce Page 1 of 7 Table

More information

The shortcut to e-commerce

The shortcut to e-commerce The shortcut to e-commerce The table below provides the list of standard Microsoft Dynamics NAV objects that are modified by Sana Commerce. The standard Microsoft Dynamics NAV objects modified by Sana

More information

The shortcut to e-commerce

The shortcut to e-commerce The shortcut to e-commerce The table below provides the list of standard Microsoft Dynamics NAV 2017 2018 objects that are modified by Sana Commerce. The standard Microsoft Dynamics NAV objects modified

More information

The shortcut to e-commerce

The shortcut to e-commerce The shortcut to e-commerce The table below provides the list of standard Microsoft Dynamics NAV objects that are modified by Sana Commerce. The standard Microsoft Dynamics NAV objects modified by Sana

More information

Document Capture for Microsoft Dynamics NAV

Document Capture for Microsoft Dynamics NAV Document Capture for Microsoft Dynamics NAV Walkthroughs - Version 4.50 Document Capture - Walkthroughs - Version 4.50 Page 1 / 57 TABLE OF CONTENTS TABLE OF CONTENTS... 2 SETUP AND ADMINISTRATION WALKTHROUGHS...

More information

C/AL Programming Guide

C/AL Programming Guide C/AL Programming Guide The Way to Grow C/AL PROGRAMMING GUIDE NOTICE This material is for informational purposes only. Navision a/s disclaims all warranties and conditions with regard to use of the material

More information

Document Capture for Microsoft Dynamics NAV. Change Log and Upgrade Notes version 3.02

Document Capture for Microsoft Dynamics NAV. Change Log and Upgrade Notes version 3.02 Document Capture for Microsoft Dynamics NAV Change Log and Upgrade Notes version 3.02 TABLE OF CONTENTS General Changes... 3 Classic Client... 5 RoleBased Client & Server... 6 Web Approval... 7 Upgrade

More information

Pop-Up Notes Manual Pop-Up Notes. For Microsoft Dynamics NAV

Pop-Up Notes Manual Pop-Up Notes. For Microsoft Dynamics NAV Pop-Up Notes For Microsoft Dynamics NAV Produced and Distributed by: Cost Control Software, Inc. 12409 Old Meridian Street Carmel, IN 46032 Phone: (317) 846-6025 www.costcontrolsoftware.com Page 1 Table

More information

'SC_Standard_objects Type ID Name WSExposed 2016 Sana Commerce Page 2 of 6

'SC_Standard_objects Type ID Name WSExposed 2016 Sana Commerce Page 2 of 6 This table provides the list of standard Microsoft Dynamics NAV 2009 R2 objects that are changed by Sana Commerce. This means that in these standard Microsoft Dynamics NAV objects some fields were created

More information

Sage 300. Sage CRM 7.3 Integration Upgrade Guide

Sage 300. Sage CRM 7.3 Integration Upgrade Guide Sage 300 Sage CRM 7.3 Integration Upgrade Guide This is a publication of Sage Software, Inc. Copyright 2015. Sage Software, Inc. All rights reserved. Sage, the Sage logos, and the Sage product and service

More information

Pop-up Notes Features:

Pop-up Notes Features: Pop-up Notes The purpose of Pop-Up Notes is to streamline your internal communications. Pop-Up Notes gives you the ability to repeatedly issue Notes and reminders electronically. Instead of scribbled on

More information

Microsoft Dynamics GP Release Integration Guide For Microsoft Retail Management System Headquarters

Microsoft Dynamics GP Release Integration Guide For Microsoft Retail Management System Headquarters Microsoft Dynamics GP Release 10.0 Integration Guide For Microsoft Retail Management System Headquarters Copyright Copyright 2007 Microsoft Corporation. All rights reserved. Complying with all applicable

More information

Cisco Systems (Italy) S.r.l. Services Overview Cisco and/or its affiliates. All rights reserved. Cisco Public 0

Cisco Systems (Italy) S.r.l. Services Overview Cisco and/or its affiliates. All rights reserved. Cisco Public 0 Cisco Systems (Italy) S.r.l. Services Overview 2012 Cisco and/or its affiliates. All rights reserved. Cisco Public 0 Introduction of Cisco Services (Italy) S.r.l. How it Affects You What is Changing and

More information

Microsoft Dynamics GP. Working With Configurations Release 10.0

Microsoft Dynamics GP. Working With Configurations Release 10.0 Microsoft Dynamics GP Working With Configurations Release 10.0 Copyright Copyright 2008 Microsoft Corporation. All rights reserved. Complying with all applicable copyright laws is the responsibility of

More information

Invoice Specification EDI 810

Invoice Specification EDI 810 Invoice Specification EDI 80 This document is solely for the use of Logicbroker, Inc. personnel and its intended client. No part of it may be circulated, Quoted, or reproduced for distribution outside

More information

ShipRite s Account Receivable Instructions

ShipRite s Account Receivable Instructions ShipRite s Account Receivable Instructions Setting up a new account Click on the POS button Enter the existing customer s PHONE number here. If they are in the database, their information will appear at

More information

SLIM CD LEVEL 3 User Manual Slim CD Inc

SLIM CD LEVEL 3 User Manual Slim CD Inc SLIM CD LEVEL 3 User Manual 2017 Slim CD Inc. support@slimcd.com 1-877-475-4623 954-752-9309 0 support@slimcd.com Contents WHAT IS LEVEL 3?... 2 SLIM CD LEVEL 3 EXPRESS... 3 ITEMS... 4 CUSTOMERS... 6 ADD

More information

Install and Configure Avalara AvaTax for Microsoft Dynamics 365 for Operations

Install and Configure Avalara AvaTax for Microsoft Dynamics 365 for Operations Install and Configure Avalara AvaTax for Microsoft Dynamics 365 for Operations 1 This article applies to: Now that you've activated your AvaTax account and set up your tax profile, it's time to setup and

More information

NC Tax. Documentation. NCT 8.02 for Microsoft Dynamics NAV 2016*

NC Tax. Documentation. NCT 8.02 for Microsoft Dynamics NAV 2016* Documentation NC Tax NCT 8.02 for Microsoft Dynamics NAV 2016* *NC Tax 8.02 is available for Navision Financials 2.60, Microsoft Business Solutions Navision 3.70, Microsoft Business Solutions Navision

More information

RMH GENERAL CONFIGURATION

RMH GENERAL CONFIGURATION RMH GENERAL CONFIGURATION Retail Management Hero (RMH) rmhsupport@rrdisti.com www.rmhpos.com Copyright 2016, Retail Realm. All Rights Reserved. RMHDOCGENCONFIGD051216 Disclaimer Information in this document,

More information

Microsoft Dynamics GP. This paper provides guidance for ISV products that integrate with Inventory transaction posting.

Microsoft Dynamics GP. This paper provides guidance for ISV products that integrate with Inventory transaction posting. INTEGRATE Microsoft Dynamics GP Integrating with the Historical Inventory Trial Balance White Paper This paper provides guidance for ISV products that integrate with Inventory transaction posting. Date:

More information

3096 Temple Ave Pomona, CA Tel: Fax: Website:

3096 Temple Ave Pomona, CA Tel: Fax: Website: NETcellent s Sales Order Import For ELLIOTT VERSION 7.4x From NETcellent System, Inc. 3096 Temple Ave Pomona, CA 91766 Tel: 909.622.5009 Fax: 909.622.5119 E-mail: sales@netcellent.com Website: www.netcellent.com

More information

9. CREATING PURCHASE ORDERS ONLINE

9. CREATING PURCHASE ORDERS ONLINE 9. CREATING PURCHASE ORDERS ONLINE Overview: This document will demonstrate how to create purchase orders online in PeopleSoft 8.9. A PO consists of four basic components: header, line(s), schedule(s),

More information

OPplus Vertical Solution

OPplus Vertical Solution OPplus Vertical Solution Certified For Microsoft Dynamics NAV for Microsoft Dynamics NAV all versions Manual BASE Manual ASSOCIATION gbedv GmbH & Co. KG www.opplus.de www.gbedv.de Contents General Information

More information

Invoice 13 Pro Outline

Invoice 13 Pro Outline Invoice 13 Pro Outline Invoice 13 Pro is a feature rich productivity tool for the small business or company from 1 to 30 users. It is notjust an Invoicing software. It is in fact an Invoicing, Accounts

More information

Manual Ext. Fixed Assets

Manual Ext. Fixed Assets Manual Ext. Fixed Assets Prepared for Customers & Partners Project OPplus Ext. Fixed Assets Prepared by gbedv GmbH & Co. KG Contents General... 4 Manual Structure... 4 Description of Icons... 4 OPplus

More information

Client Access and Log In... CUSTOMER CENTER: Overview... 3 Home Links Quick Search... 5 Settings... 5

Client Access and Log In... CUSTOMER CENTER: Overview... 3 Home Links Quick Search... 5 Settings... 5 Table of Contents WWW.LABELKINGS.COM Client Access and Log In....... Page 2 CUSTOMER CENTER: Overview.... 3 Home Links... 4 Billing, Orders, Support Quick Search...... 5 Settings.... 5 ENTERING NEW ORDERS......

More information

e-invoicing Guide Version 1.2 March 2014

e-invoicing Guide Version 1.2 March 2014 e-invoicing Guide Version 1.2 March 2014 Table of Contents About this Guide...3 Introduction...4 Creating an e-invoice/quotation...5 e-invoice/quotation Fields...5 e-invoice/quotation Details...5 Customer

More information

Data Import Guide DBA Software Inc.

Data Import Guide DBA Software Inc. Contents 3 Table of Contents 1 Introduction 4 2 Data Import Instructions 5 3 Data Import - Customers 10 4 Data Import - Customer Contacts 16 5 Data Import - Delivery Addresses 19 6 Data Import - Suppliers

More information

Mobilcomm 1211 West Sharon Road, Cincinnati, OH 45240

Mobilcomm 1211 West Sharon Road, Cincinnati, OH 45240 BRICS Princeton Road Hamilton, Ohio 45011 Matt Franke, Bill Vedra Attn: Email: Reference: Motorola XTS1500 Pricing Quote: Issued: Expires: Phone: Fax: 901-16854 10/3/2012 11/15/2012 513-785-1299 Item Product

More information

NC Tax. Changes. NCT for Microsoft Dynamics NAV*

NC Tax. Changes. NCT for Microsoft Dynamics NAV* Changes NC Tax NCT 11.00 for Microsoft Dynamics NAV* *NC Tax 11.00 is available for Microsoft Business Solutions Navision 3.70, Microsoft Business Solutions Navision 4.0 SP3, Microsoft Dynamics NAV 5.0

More information

Automatic Record Matching in the Payment Reconciliation Journal

Automatic Record Matching in the Payment Reconciliation Journal Automatic Record Matching in the Payment Reconciliation Journal Design Insight White Paper Ciprian Iordache Software Development Engineer II Nikola Kukrika Software Development Engineer II September 2014

More information

Design Insights Enhanced Cue Functionality

Design Insights Enhanced Cue Functionality Design Insights Enhanced Cue Functionality May 2014 Contents Introduction 3 Basics of Implementing Cue Controls 3 Best Practices for Implementing Cue Controls: Enabling End User Customization of Indicators

More information

PO110 Create and Maintain Purchase Orders Training Guide

PO110 Create and Maintain Purchase Orders Training Guide Training Guide COPYRIGHT & TRADEMARKS Copyright 1998, 2009, 2010 Oracle, IBM and Grant MacEwan University and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation

More information

Manual Base Foreign Currency

Manual Base Foreign Currency Manual Base Foreign Currency Prepared for Customers & Partners Project OPplus Base Prepared by gbedv GmbH & Co. KG Contents General Information... 3 Manual Structure... 3 Description of Icons... 3 OPplus

More information

AbleCommerce v7.x AvaTax Connector Guide

AbleCommerce v7.x AvaTax Connector Guide AbleCommerce v7.x AvaTax Connector Guide Revision: 1.0 December 17, 2009 Copyright 2009 Able Solutions Corporation. All rights reserved. AbleCommerce is a division of Able Solutions Corporation. CommerceBuilder

More information

User Documentation. t-commerce User s Guide

User Documentation. t-commerce User s Guide User Documentation t-commerce User s Guide TRIBUTE INC. USER DOCUMENTATION t-commerce User s Guide Copyright Notice and Trademarks 2000-2007 Tribute, Inc. All rights reserved t-commerce is a registered

More information

Bill Designer for Shoper 9

Bill Designer for Shoper 9 The information contained in this document is current as of the date of publication and subject to change. Because Tally must respond to changing market conditions, it should not be interpreted to be a

More information

North Dakota University System. Financial Systems 9.2. User Preferences

North Dakota University System. Financial Systems 9.2. User Preferences North Dakota University System Financial Systems 9.2 User Preferences July 2017 Table of Contents Overview... 1 User Preferences... 1 General Preferences... 2 Overall Preference... 2 OLE Information...

More information

R98306 SNC-Lavalin ProFac Inc. 5/22/ :58: Override Next Status. 7. Override Transaction Unit of Measure

R98306 SNC-Lavalin ProFac Inc. 5/22/ :58: Override Next Status. 7. Override Transaction Unit of Measure Title 1 Defaults 1. Order Type (Required) SO 2. Line Type 3. Beginning Status 520 4. Override Next Status 5. Line Number Increment 0 6. Reason Code 7. Override Transaction Unit of Measure 8. Default Transaction

More information

Purchase Order & Invoicing standards for Swiss Re Denmark Services A/S

Purchase Order & Invoicing standards for Swiss Re Denmark Services A/S and Swiss Re is committed to meeting its obligations to vendors, including timely payment for agreed goods/services. In order to meet this goal we ask all our vendors to comply with minimum requirements

More information

IMPORTING QUICKBOOKS DATA. Use this guide to help you convert from QuickBooks to Denali

IMPORTING QUICKBOOKS DATA. Use this guide to help you convert from QuickBooks to Denali IMPORTING QUICKBOOKS DATA Use this guide to help you convert from QuickBooks to Denali Importing QuickBooks Data Copyright Notification At Cougar Mountain Software, Inc., we strive to produce high-quality

More information

v12.1 The following sections have been changed in this release:

v12.1 The following sections have been changed in this release: 9 / 2 9 / 2 0 1 5, PixelPoint Release Notes v12.1 This document details changes made to PixelPoint files. Changes are listed in order from newest to oldest, and are either new features that have been added

More information

End User Procedure (EUP) Create Request for Quotation

End User Procedure (EUP) Create Request for Quotation Create Request for Quotation ME41 Purpose Trigger Menu Path Use this procedure to create Requests for Quotations to send to a vendor or a series of vendors for bidding. Perform this procedure when transaction

More information

Eclipse Business Connect XML. Release (Eterm)

Eclipse Business Connect XML. Release (Eterm) Eclipse Business Connect XML Release 8.6.4 (Eterm) Legal Notices 2008 Activant Solutions Inc. All rights reserved. Unauthorized reproduction is a violation of applicable laws. Activant and the Activant

More information

Sage 300. Sage CRM 2018 Integration Upgrade Guide. October 2017

Sage 300. Sage CRM 2018 Integration Upgrade Guide. October 2017 Sage 300 Sage CRM 2018 Integration Upgrade Guide October 2017 This is a publication of Sage Software, Inc. 2017 The Sage Group plc or its licensors. All rights reserved. Sage, Sage logos, and Sage product

More information

Manual G/L Open Entries

Manual G/L Open Entries Manual Prepared for Customers and Partners Project OPplus Prepared by Contents General Information... 3 Manual Structure... 3 Description of Icons... 3 OPlus Navigation Area... 4 OPplus License Information

More information

ESIS. EDI Implementation Guide. Purchase Order Change X Version 4010 Release 8.0. EDI_Guide_Change_Order_X12_860_Version_4010_Release_8-0.

ESIS. EDI Implementation Guide. Purchase Order Change X Version 4010 Release 8.0. EDI_Guide_Change_Order_X12_860_Version_4010_Release_8-0. EDI Implementation Guide ESIS Purchase Order Change X12 860 Version 4010 Release 8.0 Page 1 of 37 EDI Implementation Support Information EDI Contact Name: ESIS, E-Commerce Provider of Raytheon EDI Contact

More information

Expense Management for Microsoft Dynamics NAV

Expense Management for Microsoft Dynamics NAV Expense Management for Microsoft Dynamics NAV Tables and Fields Documentation - Version 2.60 Expense Management - Tables and Fields Documentation - Version 2.50 Page 1 / 67 TABLE OF CONTENTS INTRODUCTION...

More information

Bridgestone National Accounts Interface

Bridgestone National Accounts Interface Bridgestone National Accounts Interface The Bridgestone National Accounts Interface links TireMaster and Bridgestone s Automated Delivery Receipt System, giving you the ability to electronically file claims

More information

Light Account Process Step by step Guide

Light Account Process Step by step Guide Light Account Process Step by step Guide DISCLAIMER: This training material is created by UTC Climate, Controls & Security to help its suppliers register for Light Accounts and navigate the dashboard.

More information

YEAR-END PROCESS CHECK OFF LIST CAPS XL 2005 Revised 11/25/2005 PRELIMINARY PREPARATION

YEAR-END PROCESS CHECK OFF LIST CAPS XL 2005 Revised 11/25/2005 PRELIMINARY PREPARATION YEAR-END PROCESS CHECK OFF LIST CAPS XL 2005 Revised 11/25/2005 PRELIMINARY PREPARATION 1. PRINT DOCUMENTATION 1. In the Action field, type SC;BISYE then to return to the Action field. 2.

More information

IDYNAMICS PRINTING DOCS USERS GUIDE

IDYNAMICS PRINTING DOCS USERS GUIDE IDYNAMICS PRINTING DOCS USERS GUIDE Document Version: 1.0 Document Date: JANUARY 28, 2019 Author Name: DPT. I+D+I INDEX 1. IDYNAMICS PRINTING DOCS... 3 1.1 KNOWN LIMITATIONS... 3 2. SETUP... 3 2.1. REPORT

More information

Issue dated 25 th July Create Credit Notes

Issue dated 25 th July Create Credit Notes Create Credit Notes From time to time a business may have to issue a credit note to a customer to cancel an invoice or part of the value of the invoice. Usually, as an Invoice has already been previously

More information

Page 1 of 10 Title: Patch 9D Run User-Defined Report Reload Print Report: Info Sheet Report 10/08/2012 16:43:58 Query: Info Sheet Patch 9D Count: 56 Select: Choose Selection Set Transition CR ID Module

More information

CONNECTED 8.3 Release Notes

CONNECTED 8.3 Release Notes CONNECTED 8.3 Release Notes Introduction... 3 Minimum System Requirements for Connected 8.3... 3 Connected 8.3 Installation... 3 Enhancements... 4 General Enhancements... 4 Advanced Email Templates...

More information

What s New in Microsoft Dynamics NAV 2013 R2

What s New in Microsoft Dynamics NAV 2013 R2 What s New in Microsoft Dynamics NAV 2013 R2 September 2013 Contents What s New: Application Changes for Microsoft Dynamics NAV 2013 R2 and Microsoft Dynamics NAV 2013 3 RapidStart Services for Microsoft

More information

How to Cancel a Purchase Order/ Blanket Order

How to Cancel a Purchase Order/ Blanket Order How to Cancel a Purchase Order/ Blanket Order Description: This form is used to cancel an online purchase order or blanket order. The summarized document data for the purchase order or blanket order defaults

More information

Document Capture for Microsoft Dynamics NAV

Document Capture for Microsoft Dynamics NAV Document Capture for Microsoft Dynamics NAV Daily Usage for End Users - Version 4.50 Document Capture - Daily Usage for End Users - Version 4.50 Page 1 / 13 TABLE OF CONTENTS INTRODUCTION... 3 SCAN, OCR

More information

Invoice QuickStart Guide

Invoice QuickStart Guide Invoice QuickStart Guide Table of Contents Working with Payment Requests Manually Creating a Payment Request from an Existing Vendor Creating a Recurring Payment Request Adding Distributions to a Payment

More information

AT&T Virtual Private Network Service. Alternate List Tariffs

AT&T Virtual Private Network Service. Alternate List Tariffs AT&T Virtual Private Network Service Alternate List Tariffs AT&T Virtual Private Network Service 1. THE SERVICE; DEFINITIONS 1.1 Services AT&T Global Network Services India will provide the Services to

More information

Evolution M Core Training Contract, Sales & Cash Book Issue 2

Evolution M Core Training Contract, Sales & Cash Book Issue 2 Evolution M Core Training Contract, Sales & Cash Book Issue 2 Contents Training............................................................................................ 1 Contract Ledger........................................................................................

More information

CONFIGURABLE FRONT OFFICE AND BACK OFFICE INTEGRATION WITHOUT CODING

CONFIGURABLE FRONT OFFICE AND BACK OFFICE INTEGRATION WITHOUT CODING CONFIGURABLE FRONT OFFICE AND BACK OFFICE INTEGRATION WITHOUT CODING WITH THE SCRIBE MICROSOFT DYNAMICS NAV AND MICROSOFT DYNAMICS CRM TEMPLATE MARCH 2011 PUBLISHED BY SCRIBE SOFTWARE CORPORATION 2011.

More information

RESOLV EDI CONTROL. User Guide Version 9.2 for HANA PRESENTED BY ACHIEVE IT SOLUTIONS

RESOLV EDI CONTROL. User Guide Version 9.2 for HANA PRESENTED BY ACHIEVE IT SOLUTIONS RESOLV EDI CONTROL User Guide Version 9.2 for HANA PRESENTED BY ACHIEVE IT SOLUTIONS Copyright 2011-2016 by Achieve IT Solutions These materials are subject to change without notice. These materials are

More information

Ordering Instructions

Ordering Instructions Ordering Instructions MRO18 Facilities Maintenance and Repair & Operations (MRO) and Industrial Supplies Ordering Requirements Any Agency may order Facilities MRO and Industrial Supplies from the vendor

More information

Eclipse Forms. Release 8.7.2

Eclipse Forms. Release 8.7.2 Eclipse Forms Release 8.7.2 Legal Notices 2011 Epicor Software Corporation. All rights reserved. Unauthorized reproduction is a violation of applicable laws. Epicor and the Epicor logo are registered trademarks

More information

How to Cancel a Change Order

How to Cancel a Change Order How to Cancel a Change Order Description: This form is used to cancel a change order that was completed and posted. The summarized document data for the change order defaults into the fields. Form Name/Direct

More information

JD Edwards World. User Defined Data for Distribution Guide Release A9.3 E

JD Edwards World. User Defined Data for Distribution Guide Release A9.3 E JD Edwards World User Defined Data for Distribution Guide Release A9.3 E21563-03 April 2013 JD Edwards World User Defined Data for Distribution Guide, Release A9.3 E21563-03 Copyright 2013, Oracle and/or

More information

Unique Serial Numbers per Item IM-1241

Unique Serial Numbers per Item IM-1241 Unique Serial Numbers per Item IM-1241 Overview This Extended Solution to the Inventory Management module checks for use of a Serial Number in all Warehouses (rather than just the warehouse the Item is

More information

New Account Application

New Account Application *Required fields Date: 3/12/2018 GENERAL ACCOUNT DETAILS *Billing Name and Address City State Postal Code *Shipping Name and Address City State Postal Code Tel# Tel# Email Email Contact Name Contact Name

More information

NextMark User s Guide. Order Processing Brokerage

NextMark User s Guide. Order Processing Brokerage NextMark User s Guide Order Processing Brokerage Table of Contents NextMark Order Processing... 3 Product Overview... 3 Scope and Content... 3 Getting Help...3 Getting Started... 3 Tools you will need:...

More information

Version 4 Prices April 2018

Version 4 Prices April 2018 Page 1 Version 4 Prices April 2018 One-off Purchase options Purchase a perpetual licence with a one-off payment. Single, one-off payment Additional-user(s) discount Includes maintenance updates for the

More information

For addition help including training and support please contact Scanco by or phone. Scanco Support -

For addition help including training and support please contact Scanco by  or phone. Scanco Support  - Scanco Mobility Module Contents Mobility Remote Setup... 2 Purchase Order EZ Import... 9 Sales Order EZ Import... 10 Bill of Materials EZ Import... 11 EZ Import Reject Maintenance... 12 Rejected Import

More information

Manual Ext. Analysis. Customers and Partners. OPplus. Prepared for. Project. Prepared by. gbedv

Manual Ext. Analysis. Customers and Partners. OPplus. Prepared for. Project. Prepared by. gbedv Manual Ext. Analysis Prepared for Customers and Partners Project OPplus Prepared by Contents General Informaton... 4 Manual Structure... 4 Descripion of Icons... 4 OPplus Navigation Area... 5 OPplus License

More information

Purchase Orders T i ra i n ng

Purchase Orders T i ra i n ng Purchase Orders Training i Agenda Overview Creation & Setup Items Vendors Addresses Accounting Attachments Internal Communication Vendor Notification Change Order Periscope Holdings, Inc. 2 Overview Overview

More information

Drywall Finishing Council, Inc. c/o Walsworth - WFBM, LLP Account No.:

Drywall Finishing Council, Inc. c/o Walsworth - WFBM, LLP Account No.: Quote Date: 2015/07/14 Valid Until: 2015/10/30 One City Boulevard West, 5th Floor Orange, CA 92868-3677 United States Single Industry Wide EPD Greetings, On behalf of UL, it is my pleasure to submit to

More information

810 IBM Subset - Invoice To Customer - (004010)

810 IBM Subset - Invoice To Customer - (004010) 810 IBM Subset - Invoice To Customer - (004010) Functional Group ID=IN Introduction: This Draft Standard for Trial Use contains the format and establishes the data contents of the Invoice Transaction Set

More information

Purchase Order & Invoicing standards for Swiss Re International SE, Niederlassung Deutschland Swiss Re Europe S.A., Niederlassung Deutschland

Purchase Order & Invoicing standards for Swiss Re International SE, Niederlassung Deutschland Swiss Re Europe S.A., Niederlassung Deutschland and Swiss Re is committed to meeting its obligations to vendors, including timely payment for agreed goods/services. In order to meet this goal we ask all our vendors to comply with minimum requirements

More information

E-CST Return for Gujarat FORM III (B)

E-CST Return for Gujarat FORM III (B) FORM III (B) November 2009 The information contained in this document represents the current view of Tally Solutions Pvt. Ltd., ( Tally in short) on the topics discussed as of the date of publication.

More information