58
AvaTax for Dynamics AX 2012 R3 Code Change Document Version 1.0 Revision date: 10/31/14 Product release #: AvaTax for Microsoft Dynamics AX 2012 R3 Version AX 6.3.164.0.02.00 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. © 2013 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.

AvaTax for Dynamics AX 2012 R3 - Avalara Help Centerapi/deki/files/7551/Code_changes_for... · AvaTax for Dynamics AX 2012 R3 Code Change Document ... MarkupTrans ... Tax::getSalesPurchJournalLine_IN

Embed Size (px)

Citation preview

AvaTax for Dynamics AX 2012 R3

Code Change Document

Version 1.0

Revision date: 10/31/14 Product release #: AvaTax for Microsoft Dynamics AX 2012 R3 Version AX 6.3.164.0.02.00

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. © 2013 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.

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

2 | P a g e

Table of Contents 1. OVERVIEW ............................................................................................................................... 4 2. TABLES ..................................................................................................................................... 5 

1. TaxData ................................................................................................................................... 5 2. TmpTaxWorkTrans................................................................................................................. 6 3. TaxOnItem .............................................................................................................................. 9 4. TaxGroupData......................................................................................................................... 9 5. TaxTable ............................................................................................................................... 10 6. TaxLedgerAccountGroup ..................................................................................................... 11 7. TaxReportPeriod ................................................................................................................... 11 8. TaxPeriodHead ..................................................................................................................... 12 9. TaxAuthorityAddress ............................................................................................................ 13 10. TaxGroupHeading............................................................................................................... 13 11. TaxItemGroupHeading ....................................................................................................... 14 12. SalesParameters .................................................................................................................. 14 13. LogisticsPostalAddress ....................................................................................................... 14 14. SalesTable ........................................................................................................................... 15 15. MarkupTrans ....................................................................................................................... 16 

3. MAP .......................................................................................................................................... 17 1. LogisticsPostalAddressMap .................................................................................................. 17 

4. CLASSES ................................................................................................................................. 19 1. SalesQuotationEditLinesForm_Sales_Confir ....................................................................... 19 2. SalesQuotationEditLinesForm_Sales_Send ......................................................................... 20 3. SalesInvoiceJournalPost ....................................................................................................... 20 4. CustPostInvoice .................................................................................................................... 21 5. SalesTotals_ParmTrans......................................................................................................... 22 6. SalesInvoiceJournalCreate .................................................................................................... 22 7. ApplicationVersion ............................................................................................................... 23 8. Tax ........................................................................................................................................ 23 9. SalesTableForm .................................................................................................................... 28 10. NumberSeqModuleSalesOrder ........................................................................................... 28 11. SalesTotals .......................................................................................................................... 29 12. SalesTableListPageInteraction ............................................................................................ 29 

5. FORMS ..................................................................................................................................... 30 1. CustFreeInvoice .................................................................................................................... 30 2. SalesQuotationTable ............................................................................................................. 31 3. SalesTable ............................................................................................................................. 32 4. SalesTableListPage ............................................................................................................... 34 5. LogisticsPostalAddress ......................................................................................................... 35 6. CUSTTABLE ..................................................................................................................... 40 7. CUSTTABLELISTPAGE .................................................................................................. 41 

6. Number Sequence ..................................................................................................................... 43 Ava_Head ..................................................................................................................................... 43 7. MENU ....................................................................................................................................... 44 8. TABLES (Project Integration) .................................................................................................. 46 

1. ProjProposalJour ................................................................................................................... 46 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

3 | P a g e

2. TmpTaxWorkTrans............................................................................................................... 47 9. CLASSES (Project Integration) ................................................................................................ 50 

1. ProjInvoiceJournalCreate ...................................................................................................... 50 2. ProjInvoiceJournalPost ......................................................................................................... 51 3. TaxProj .................................................................................................................................. 51 4. SalesQuotationEditLinesForm_Proj_Send ........................................................................... 54 5. SalesQuotationEditLinesForm_Proj_Confir ......................................................................... 55 

10. FORMS (Project Integration) ................................................................................................. 56 1. SalesQuotationProjTable ...................................................................................................... 56 2. ProjInvoiceProposalDetail .................................................................................................... 57 3. ProjInvoiceProposalListPage ................................................................................................ 57 4. ProjInvoiceTotals .................................................................................................................. 58 

    

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

4 | P a g e

1. OVERVIEW 

  

To install the AvaTax connector for MS Dynamics AX 2012 R3 

The process is divided into sections as per the AOT. 

Standard followed in the AvaTax connector‐ 

1. Any code changes / addition to the core product (MS Dynamics AX 2012 R3) is within ‘//@AVA +‘ & ‘//@AVA ‐’ 

2. While looking for any AvaTax connector code within native code one should search for ‘AVA’ and proceed. 

3. Try looking for a single commented lines (especially the END; statements) they are mentioned by a ‘//@AVA ‐’ 

All objects/global includes the three alphabets ‘AVA’ in their version List in order to recognize that this global object is being used by AvaTax code 

 

Common step for all the following lists  1. Open MS Dynamics AX 2012 R3. point to the database which has a backup copy 2. Warning: Do not point to a live database / SQL instance. Any loss to critical data because of the 

following integration process shall be on the client’s risk if the data is live/production. 3. Open the AOT for making any changes to the native AX related to the connector 

  Note: This document is divided into two parts; first part represents code changes related to AR integration 

and second part represents code changes related to Project integration.                         

   

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

5 | P a g e

2. TABLES 

AvaTax change the following tables:  

S. No.  Object ID  Name 

1.  429  TaxData 

2.  550  TmpTaxWorkTrans 

3.  434  TaxOnItem 

4.  430  TaxGroupData 

5.  439  TaxTable 

6.  433  TaxLedgerAccountGroup 

7.  437  TaxReportPeriod 

8.  436  TaxPeriodHead 

9.  427  TaxAuthorityAddress 

10.  431  TaxGroupHeading 

11.  432  TaxItemGroupHeading 

12.  367  SalesParameters 

13.  2941  LogisticsPostalAddress 

14.  366  SalesTable 

15.  230   MarkupTrans

    

1. TaxData 

 Method Name  Modifications 

1. initTaxData  

Create this new method with below code. /// <summary> /// Initialization of taxData table /// </summary> /// <param name="_taxCode"> /// TaxCode _taxCode /// </param> server void  initTaxData(TaxCode _taxCode) {     ;     this.taxCode = _taxCode; } 

2. findTaxCode  Create this new method with below code. /// <summary> /// Method finds tax code /// </summary> /// <param name="_taxCode"> /// TaxCode _taxCode /// </param> /// <param name="_forupdate"> 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

6 | P a g e

/// boolean _forupdate  = false/// </param> /// <param name="_concurrencyModel"> /// ConcurrencyModel _concurrencyModel = ConcurrencyModel::Auto /// </param> /// <returns> /// TaxData taxData /// </returns> public static TaxData findTaxCode( TaxCode          _taxCode,                                    boolean          _forupdate        = false,                                    ConcurrencyModel _concurrencyModel = ConcurrencyModel::Auto) {     TaxData taxData;     ;     if(_taxCode)     {         taxData.selectForUpdate(_forupdate);         if (_forupdate && _concurrencyModel != ConcurrencyModel::Auto)         {             taxData.concurrencyModel(_concurrencyModel);         }          select firstonly taxData             where taxData.TaxCode     == _taxCode;     }     return taxData; } 

 

2. TmpTaxWorkTrans 

 

Method Name Modifications showTaxValue

Insert the highlighted lines as specified hereunder: // BP Deviation Documented server display TaxValue showTaxValue() { TaxValue taxValue; // @AVA + TaxGroup taxGroup; Container conAmtNumber; Ava_taxEngine taxEngine = new Ava_taxEngine(); //BP Deviation Documented int detailNumber = 3; TaxCode prevTaxCode; SysGlobalCache globalCache = Infolog.globalCache(); // @AVA - // <GIN> SalesPurchJournalLine_IN salesPurchJournalLine;

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

7 | P a g e

// </GIN> ; // @AVA + #AVA_Macro //BP Deviation Documented if ((AVA_Configuration::find().TaxGroupId == this.TaxGroup ) || (substr(AVA_Configuration::find().TaxGroupId,1,6) == substr(this.TaxGroup,1,6))) { TaxGroup = this.TaxGroup; if (this.SourceTableId == tablename2id(tablestr(SalesLine))) { ConAmtNumber = TaxEngine.SalesTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(CustInvoiceLine))) { ConAmtNumber = TaxEngine.CustInvoiceTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(MarkupTrans))) { ConAmtNumber = TaxEngine.MarkupTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(SalesQuotationLine))) { ConAmtNumber = TaxEngine.SalesQuotationTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalOnAcc))) { ConAmtNumber = TaxEngine.projProposalOnAccTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalItem))) { ConAmtNumber = TaxEngine.projProposalItemTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); }

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

8 | P a g e

if (this.SourceTableId == tablename2id(tablestr(projProposalEmpl))) { ConAmtNumber = TaxEngine.projProposalEmplTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalRevenue))) { ConAmtNumber = TaxEngine.projProposalRevenueTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalCost))) { ConAmtNumber = TaxEngine.projProposalCostTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } //BP Deviation Documented TaxValue = Conpeek(ConAmtNumber,1); //BP Deviation Documented DetailNumber = Conpeek(ConAmtNumber,2); //BP Deviation Documented PrevTaxCode = Conpeek(ConAmtNumber,3); //BP Deviation Documented globalCache.set(#TmpTaxWorkTrans, 0,PrevTaxCode); //BP Deviation Documented globalCache.set(#TmpTaxWorkTrans, 1,int2str(DetailNumber)); } else // @AVA - if (this.TaxCode && this.TransDate) { // <GIN> if (TaxParameters::checkTaxParameters_IN() && TaxTable::find(this.TaxCode).TaxType_IN != TaxType_IN::None) { salesPurchJournalLine = Tax::getSalesPurchJournalLine_IN(this.SourceRecId, this.SourceTableId); taxValue = this.showTaxValue_IN(salesPurchJournalLine); } else { // </GIN> taxValue = TaxData::percent(this.TaxCode,

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

9 | P a g e

this.CalculationDate, this.TaxBaseAmount); // <GIN> } // </GIN> } return taxValue; }

3. TaxOnItem

Method Name Modifications initTaxOnItem

Create this new method with below code. /// <summary> /// Initialization tax on item table /// </summary> /// <param name="_taxItemGroup"> /// TaxItemGroup _taxItemGroup /// </param> /// <param name="_taxCode"> /// TaxCode _taxCod /// </param> server void initTaxOnItem( TaxItemGroup _taxItemGroup, TaxCode _taxCode) { ; this.TaxItemGroup = _taxItemGroup; this.TaxCode = _taxCode; }

4. TaxGroupData

Method Name Modifications initTaxGroupData Create this new method with below code.

/// <summary> /// Initialization of the taxGroupData table /// </summary> /// <param name="_taxGroup"> /// TaxGroup _taxGroup /// </param> /// <param name="_taxCode"> /// TaxCode _taxCode)

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

10 | P a g e

/// </param> server void initTaxGroupData( TaxGroup _taxGroup, TaxCode _taxCode) { ; this.TaxGroup = _taxGroup; this.TaxCode = _taxCode; }

5. TaxTable

Method Name Modifications initTaxTable Create this new method with below code.

/// <summary> /// Initialization fileds on the taxTable table /// </summary> /// <param name="_taxCode"> /// TaxCode _taxCode /// </param> /// <param name="_taxName"> /// TaxName _taxName /// </param> /// <param name="_taxPeriod"> /// TaxPeriod _taxPeriod /// </param> /// <param name="_taxAccountGroup"> /// TaxAccountGroup _taxAccountGroup /// </param> /// <param name="_taxLimitBase"> /// TaxLimitBase _taxLimitBase /// </param> /// <param name="_currencyCode"> /// CurrencyCode _currencyCode /// </param> server void initTaxTable( TaxCode _taxCode, TaxName _taxName, TaxPeriod _taxPeriod, TaxAccountGroup _taxAccountGroup, TaxLimitBase _taxLimitBase, CurrencyCode _currencyCode) { ; this.TaxCode = _taxCode; this.TaxName = _taxName; this.TaxPeriod = _taxPeriod;

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

11 | P a g e

this.TaxAccountGroup = _taxAccountGroup; this.TaxLimitBase = _taxLimitBase; this.TaxCurrencyCode = _currencyCode; }

6. TaxLedgerAccountGroup

Method Name Modifications

initTaxLedgerAccount

Create this new method with below code. /// <summary> /// Method added value into TaxLedgerAccountGroup table, field taxAccountGroup /// </summary> /// <param name="_taxAccountGroup"> /// TaxAccountGroup _taxAccountGroup) /// </param> //@AVA +- server void initTaxLedgerAccount(TaxAccountGroup _taxAccountGroup) { ; this.TaxAccountGroup = _TaxAccountGroup; }

7. TaxReportPeriod

Method Name Modifications initTaxPeriod Create this new method with below code.

/// <summary> /// Method added values into taxReportPeriod table /// </summary> /// <param name="_taxPeriod"> /// TaxPeriod _taxPeriod /// </param> /// <param name="_fromDate"> /// TaxPeriodDate _fromDate /// </param> /// <param name="_toDate"> /// TaxPeriodDate _toDate /// </param> //@AVA +- server void initTaxPeriod( TaxPeriod _taxPeriod, TaxPeriodDate _fromDate, TaxPeriodDate _toDate) {

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

12 | P a g e

; this.TaxPeriod = _taxPeriod; this.FromDate = _fromDate; this.ToDate = _toDate; }

8. TaxPeriodHead

Method Name Modifications initTaxPeriodHead Create this new method with below code.

/// <summary> /// Method added values into taxPeriodHead table /// </summary> /// <param name="_taxPeriod"> /// TaxPeriod _taxPeriod /// </param> /// <param name="_taxAuth"> /// TaxAuthority _taxAuth /// </param> /// <param name="_name"> /// Name _name /// </param> /// <param name="_periodUnit"> /// PeriodUnit _periodUnit /// </param> /// <param name="_qty"> /// Days _qty /// </param> //@AVA +- server void initTaxPeriodHead( TaxPeriod _taxPeriod, TaxAuthority _taxAuth, Name _name, PeriodUnit _periodUnit, Days _qty) { ; this.TaxPeriod = _taxPeriod; this.TaxAuthority = _taxAuth; this.Name = _name; this.PeriodUnit = _periodUnit; this.QtyUnit = _qty; }

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

13 | P a g e

9. TaxAuthorityAddress

Method Name Modifications initTaxAuthCode Create this new method with below code.

/// <summary> /// Method added values into taxAuthorityAddress table /// </summary> /// <param name="_taxAuth"> /// TaxAuthority _taxAuth /// </param> /// <param name="_name"> /// Name _name /// </param> //@AVA +- server void initTaxAuthCode( TaxAuthority _taxAuth, Name _name) { ; this.TaxAuthority = _taxAuth; this.Name = _name; }

10. TaxGroupHeading

Method Name Modifications initTaxGrpCode Create this new method with below code.

/// <summary> /// Method added values into taxGroupHeading table /// </summary> /// <param name="_taxGrp"> /// TaxGroup _taxGrp /// </param> /// <param name="_taxGrpName"> /// TaxGroupName _taxGrpName /// </param> //@AVA +- server void initTaxGrpCode( TaxGroup _taxGrp, TaxGroupName _taxGrpName) { ;

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

14 | P a g e

this.TaxGroup = _taxGrp; this.TaxGroupName = _taxGrpName; }

11. TaxItemGroupHeading

Method Name Modifications initTaxItemGrpCode

Create this new method with below code. /// <summary> /// Method added values into taxItemGroupHeading table /// </summary> /// <param name="_taxItemGrp"> /// TaxItemGroup _taxItemGrp /// </param> /// <param name="_name"> /// Name _name /// </param> //@AVA +- server void initTaxItemGrpCode( TaxItemGroup _taxItemGrp, Name _name) { ; this.TaxItemGroup = _taxItemGrp; this.Name =_name; }

12. SalesParameters

Method Name Modifications numRefAVANum

Create this new method with below code. static client server NumberSequenceReference numRefAVANum() { return NumberSeqReference::findReference(extendedTypeNum(AVA_HeaderId)); }

13. LogisticsPostalAddress

Method Name Modifications initFromAVA_AddressValidation

Create this new method with below code.

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

15 | P a g e

server void initFromAVA_AddressValidation (AVA_AddressValidation _addressValidation) { if (_addressValidation.parmAddressing()) { this.Address = _addressValidation.parmAddressing(); this.City = _addressValidation.parmCity(); this.State = _addressValidation.parmState(); this.CountryRegionId = _addressValidation.parmCountry(); this.County = _addressValidation.parmCounty(); this.Zipcode = _addressValidation.parmZip(); this.Street = _addressValidation.parmLine1(); } }

initFromAVA_tmpValidAddress

Create this new method with below code. /// <summary> /// Initialization of Address table /// </summary> /// <param name="_tmpValidAddress"> /// AVA_tmpValidAddress _tmpValidAddress /// </param> // @AVA +- server void initFromAVA_tmpValidAddress(AVA_tmpValidAddress _tmpValidAddress) { ; this.City = _tmpValidAddress.City; this.State = _tmpValidAddress.State; this.CountryRegionId = _tmpValidAddress.Country; this.County = _tmpValidAddress.County; this.Zipcode = _tmpValidAddress.Zipcode; this.Street = _tmpValidAddress.Address1; this.Address = _tmpValidAddress.Address; }  

14. SalesTable

Method Name Modifications 1. checkAgainst

CreditLimit

Search the line “this.Touched = NoYes::No; }” and “return ret;” and insert the following code in between // @AVA+ if (!Ava_Configuration::find().DisableTaxCalculation) { this.Touched = NoYes::Yes; } //@AVA-

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

16 | P a g e

2. setEstimate

Search the line “hasEstimatedChanged = (this.Estimate != estimatedOld); }}” and “this.Touched = NoYes::No;” and insert the following code in between // @AVA+ if (!Ava_Configuration::find().DisableTaxCalculation) { this.Touched = NoYes::Yes; } else // @AVA-

15. MarkupTrans

Method Name Modifications

taxCombinationAllowed

Search the line “if (markupTable.CustType == MarkupType::CustVend || markupTable.VendType == MarkupType::CustVend) return true;” and “return !Tax::potentialSalesTax(this.TaxGroup, this.TaxItemGroup, systemdateget(), this.taxModuleType());” and insert the following code in between // @AVA + if ((this.TaxGroup == AVA_Configuration::find().TaxGroupId) || (substr(AVA_Configuration::find().TaxGroupId,1,6) == substr(this.TaxGroup,1,6))) return true; else // @AVA -

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

17 | P a g e

3. MAP 

S. No.  Object ID  Name 

1.  3110  LogisticsPostalAddressMap 

 

1. LogisticsPostalAddressMap 

 Create mapping for AVA_tmpInputAddress as follows:   

   

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

18 | P a g e

Create mapping for AVA_tmpValidAddress as follows: 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

19 | P a g e

4. CLASSES 

  

 S. No. 

 Object ID  Name 

1.  685  SalesQuotationEditLinesForm_Sales_Confir 

2.  686  SalesQuotationEditLinesForm_Sales_Send 

3.  1019307  SalesInvoiceJournalPost 

4.  77  CustPostInvoice 

5.  547  SalesTotals_ParmTrans 

6.  1019305  SalesInvoiceJournalCreate 

7.  758Global_C  ApplicationVersion 

8.  583  Tax 

9.  1235  SalesTableForm

10.  1018435   NumberSeqModuleSalesOrder 

11.  546  SalesTotals 

12.    SalesTableListPageInteraction 

 

1. SalesQuotationEditLinesForm_Sales_Confir 

 Method Name  Modifications 

1. Class Declaration  Declare the following variable // @AVA +     int64                           ArrLine [];     int                             line;     // @AVA ‐ 

2. createJournal  

1. Declare the following variable AVA_TaxEngine           TaxEngine = New AVA_TaxEngine(); //@AVA +‐   2. Search the line “salesQuotationTotals.prepareQuantitiesCalculation();” and “this.tax(salesQuotationTotals.tax());” and insert the following code in between  

TaxEngine.GetTax(salesQuotationTable, systemDateGet()); // @AVA +‐  

3. createSalesLines  

1. Declare the following variable int                         Line = 1;       // @AVA +‐   2. Search the line “salesDeliverySchedule.insert();     }” and “// PBA Begin if (salesQuotationLineUpdate.ItemPBAId)” and insert the following code in between  // @AVA + Line++; 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

20 | P a g e

ArrLine [Line] = salesLine.RecId;// @AVA ‐  

4. updateNow  

1. Declare the following variable AVA_TaxEngine       TaxEngine = New AVA_TaxEngine(); // @AVA +‐     MarkupTrans         markupTrans;  2. Search the line “this.createSalesLines(salesQuotationTable, salesTableCreated);” and “} } this.writeJournalLine();” and insert the following code in between  //  @AVA + while select RecId from markupTrans where markupTrans.TransTableId == salesTableCreated.TableId && markupTrans.TransRecId   == salesTableCreated.RecId {   line++;         ArrLine [Line] = markupTrans.RecId; } //  @AVA ‐ TaxEngine.CopyAvaTables(salesQuotationTable.QuotationId, salesTableCreated.SalesId, ArrLine); // @AVA +‐    

 

2. SalesQuotationEditLinesForm_Sales_Send 

 

Method Name  Modifications 

createJournal  

1. Declare the following variable AVA_TaxEngine       TaxEngine = New AVA_TaxEngine();// @AVA +‐  2. Search the line “salesQuotationTotals.totalAmountCashDiscOnInvoice(true); }” and “this.tax(salesQuotationTotals.tax());” and insert the following code in between  taxEngine.GetTax(salesQuotationTable, systemDateGet()); // @AVA +‐  

   

3. SalesInvoiceJournalPost 

  

Method Name  Modifications 

1. postJournalPost    

1. Declare the following variable AVA_TaxEngine           ava_TaxEngine = new AVA_TaxEngine();  // AVA +‐ 2. Search the line “this.deleteFullyInvoiced(); 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

21 | P a g e

” and closing bracket “}” and insert the following code in between  // @AVA +     if (custInvoiceJour.InvoiceId && !this.isProforma())         AVA_TaxEngine.CommitTax(custInvoiceJour.InvoiceId, SalesParmTable.salesTable().TaxGroup, salesParmTable.salesTable().SalesType);     // @AVA  

2. postFailed   

1. Declare the following variable AVA_TaxEngine               taxEngine = new AVA_TaxEngine(); // @AVA +‐  2. Search the line “super(_logText);” and closing bracket “}” and insert the following code in between   // @AVA +     if (custInvoiceJour.InvoiceId && !this.isProforma())         taxEngine.CancelTax(custInvoiceJour.InvoiceId, SalesParmTable.salesTable().TaxGroup,SalesParmTable.salesTable().SalesType);     // @AVA ‐  

 

4. CustPostInvoice 

 

Method Name  Modifications 

runInternal  1. Declare the following variable AVA_TaxEngine               taxEngine   = new AVA_TaxEngine(); // @AVA +‐  2. Search the line “voucher = custInvoiceTable.mcrLedgerVoucher; }”  and “if (!voucher)” and insert the following code in between    TaxEngine.GetTax(CustInvoiceTable, CustInvoiceTable.InvoiceDate, False, NULL, Ava_documentType::SalesInvoice, InvoiceId); // @AVA +‐    3. search the line  “isPostingOK = true;” and 

“TradeBLWIFormCodes::initclassFromCust(custInvoiceJour, TradeBLWITypeOfForm::CustInvoiceJour, TradeBLWITypeOfForm::CustFreeInvoice);”  and insert the following code in between 

 taxEngine.CommitTax(invoiceId, custInvoiceTable.TaxGroup); // @AVA +‐            

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

22 | P a g e

4.Search the line “sourceDocumentHeader.update();” and “ttscommit;” and insert the following code in between  // @AVA + if(!isPostingOK)             taxEngine.CancelTax(invoiceId, custInvoiceTable.TaxGroup); // @AVA ‐  

 

5. SalesTotals_ParmTrans 

 Method Name  Modifications 

1. showTax  1. Declare the following variable AVA_TaxEngine ava_TaxEngine = new AVA_TaxEngine(); // @AVA +‐     ; 2. Search the line “salesTotals = SalesTotals::construct(_salesParmTable.salesTable(), _specQty, AccountOrder::None, _salesParmTable.ParmId,  '',_salesParmTable.Ordering);” and “salesTotals.calc();” and insert the following code  AVA_TaxEngine.GetTax(_salesParmTable.salesTable(), _salesParmTable.Transdate, True, _salesParmTable ); // @AVA +‐ 

 

 

6. SalesInvoiceJournalCreate 

 

Method Name  Modifications

1. initJournalHeader  

1. Add the following variable and macro declaration:  // @AVA +     AVA_TaxEngine           ava_TaxEngine           = New AVA_TaxEngine();      #AVA_Macro ;     // @AVA ‐    2. Search the line “super();“ and insert the following code thereafter   // @AVA +     if (!salesParmTable.salesTable().ProjId)     {         if (salesParmUpdate.Proforma)             ava_TaxEngine.GetTax(salesParmTable.salesTable(), salesParmTable.Transdate, true, salesParmTable);         else             AVA_TaxEngine.GetTax(salesTable, salesParmTable.Transdate, false, salesParmTable, ava_DocumentType::SalesInvoice, custInvoiceJour.InvoiceId);     }     // @AVA ‐

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

23 | P a g e

 

 

7. ApplicationVersion 

 

Method Name  Modifications 

AVA_BuildNo  

Create this new method with below code. /// <summary> /// Returns the version number of the Avatax connector in the layer where this method is defined. /// </summary> /// <returns> /// The version number. /// </returns> /// <remarks> /// The version number is displayed in the About box. Even when it is overlayered. /// </remarks> static client str AVA_BuildNo() {     #AVA_Macro     return #ConnectorVersion; } 

 

 

 

  

8. Tax 

 

Method Name  Modifications 

1. Class Declaration  

Declare the following variable // @AVA +     Int                 detailNumber;     Container           conAmtNumber;     TaxCode             prevTaxCode;     InvoiceId           AVA_invoiceId;     SysGlobalCache      globalCacheInvoiceId;     // @AVA ‐  

2. allocateInTaxWorkTrans 

 

1. Declare the following variable // @AVA +     AVA_TaxEngine           taxEngine = new Ava_TaxEngine();     TaxGroup                taxGroup;     // @AVA ‐  

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

24 | P a g e

  2. Search the line “taxWorkTrans.SourceBaseAmountCur          = sourceCurrency.amount_Instance(taxWorkTrans.SourceBaseAmountCur);}// </GBR>”   and “} taxWorkTrans.TaxInCostPrice         = sourceCurrency.amount_Instance(taxWorkTrans.TaxInCostPrice);” and insert the following code in between  }             // @AVA +              if ((AVA_Configuration::find().TaxGroupId == taxWorkTrans.TaxGroup ) || (substr(AVA_Configuration::find().TaxGroupId,1,6) == substr(taxWorkTrans.TaxGroup,1,6)))             {                 taxGroup = taxWorkTrans.TaxGroup;                  if (taxWorkTrans.SourceTableId == tablename2id(tablestr(SalesLine)))                 {                     ConAmtNumber           = TaxEngine.SalesTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(CustInvoiceLine)))                 {                     ConAmtNumber           = TaxEngine.CustInvoiceTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(MarkupTrans)))                 {                     ConAmtNumber           = TaxEngine.MarkupTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(SalesQuotationLine)))                 {                     ConAmtNumber            = TaxEngine.SalesQuotationTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(projProposalOnAcc)))                 {                     ConAmtNumber            = TaxEngine.projProposalOnAccTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(projProposalItem)))                 { 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

25 | P a g e

                    ConAmtNumber            = TaxEngine.projProposalItemTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(projProposalEmpl)))                 {                     ConAmtNumber            = TaxEngine.projProposalEmplTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(projProposalRevenue)))                 {                     ConAmtNumber            = TaxEngine.projProposalRevenueTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 if (taxWorkTrans.SourceTableId == tablename2id(tablestr(projProposalCost)))                 {                     ConAmtNumber            = TaxEngine.projProposalCostTaxDataUpdate(taxWorkTrans.TaxCode, taxWorkTrans.SourceRecId, DetailNumber, AVA_invoiceId,  PrevTaxCode);                 }                 taxWorkTrans.TaxAmount              = Conpeek(ConAmtNumber,1)*(‐1);                 DetailNumber                        = Conpeek(ConAmtNumber,2);                 PrevTaxCode                         = Conpeek(ConAmtNumber,3);                      taxWorkTrans.SourceTaxAmountCur     = Conpeek(ConAmtNumber,4)*(‐1);                 taxWorkTrans.SourceTaxAmountCurReal = Conpeek(ConAmtNumber,4)*(‐1);                taxWorkTrans.TaxAmountCur           = taxWorkTrans.TaxAmount;               }                // @AVA ‐   3. Insert  the highlighted lines as specified hereunder:   if ((AVA_Configuration::find().TaxGroupId != TaxGroup ) && (substr(AVA_Configuration::find().TaxGroupId,1,6) != substr(TaxGroup,1,6))) // @AVA +‐     {         if (savedTax                    != taxAmount              ||             savedTaxCur                 != taxAmountCur           ||             savedSourceTaxCurReal       != sourceTaxAmountCurReal ||             savedTaxInCostPrice         != taxInCostPrice         ||             savedTaxInCostPriceMST      != taxInCostPriceMST      ||             savedTaxInCostPriceCur      != taxInCostPriceCur      ||             savedSourceTaxCur           != sourceTaxAmountCur      )          { 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

26 | P a g e

            // If a tax amount must be allocated and there are no other lines with tax, use the first line             // to place the tax on.             if (taxAmount && !taxWorkTransRecId)                 taxWorkTransRecId = taxWorkTransRecIdFirst;              select firstonly forupdate taxWorkTrans                 where taxWorkTrans.RecId == taxWorkTransRecId;              if (taxWorkTrans)             {                 if (savedTax != taxAmount)                     taxWorkTrans.TaxAmount += taxAmount ‐ savedTax;                  if (savedTaxCur != taxAmountCur)                     taxWorkTrans.TaxAmountCur += taxAmountCur ‐ savedTaxCur;                  if (savedTaxInCostPrice != taxInCostPrice)                     taxWorkTrans.TaxInCostPrice += taxInCostPrice ‐ savedTaxInCostPrice;                  if (savedTaxInCostPriceMST != taxInCostPriceMST)                     taxWorkTrans.TaxInCostPriceMST += taxInCostPriceMST ‐ savedTaxInCostPriceMST;                  if (savedTaxInCostPriceCur != taxInCostPriceCur)                     taxWorkTrans.TaxInCostPriceCur += taxInCostPriceCur ‐ savedTaxInCostPriceCur;                  if (savedSourceTaxCur != sourceTaxAmountCur)                     taxWorkTrans.SourceTaxAmountCur += sourceTaxAmountCur ‐ savedSourceTaxCur;                  if (savedSourceTaxCurReal != sourceTaxAmountCurReal)                     taxWorkTrans.SourceTaxAmountCurReal += sourceTaxAmountCurReal ‐ savedSourceTaxCurReal;                  taxWorkTrans.update(this.ignoreCalculatedSalesTax());             }         }     }  

3. distributeTotalTax   

 1. Declare the following variable and macro as below:  // @AVA +     anytype         AVA_invoiceIdTemp;      #AVA_Macro     // @AVA ‐   2. Search the code “while select 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

27 | P a g e

            sum(TaxBaseAmountMSTRaw),            sum(TaxBaseAmountMST),             sum(TaxAmountCur),             sum(TaxAmountMST),             sum(TaxInCostPrice),             sum(TaxInCostPriceCur),             sum(TaxInCostPriceMST),             sum(TaxBaseQty),             sum(SourceTaxAmountCur),             sum(SourceTaxAmountCurReal)         from tmpTax         group by TaxCode, TaxDirection, CalculationDate, Warning         where             tmpTax.TaxCalculationOrder == _taxCalculationOrder ” and insert the following code just above that  // @AVA +     //BP Deviation Documented     DetailNumber = 3;     globalCacheInvoiceId = Infolog.globalCache();     if (globalCacheInvoiceId.get(#TaxWorkTransInvoice, 0, ''))         AVA_invoiceIdTemp   = globalCacheInvoiceId.get(#TaxWorkTransInvoice, 0, '');     else         AVA_invoiceIdTemp   = '';     AVA_invoiceId = AVA_invoiceIdTemp ;     // @AVA ‐   3. Search the line “this.allocateInTaxWorkTrans(tmpTax.TaxCode,                                  tmpTax.TaxDirection,                                  tmpTax.TaxAmountMST,                                  tmpTax.TaxAmountCur,                                  tmpTax.TaxInCostPrice,                                  tmpTax.TaxInCostPriceMST,                                  tmpTax.TaxInCostPriceCur,                                  tmpTax.TaxBaseAmountMSTRaw,                                  tmpTax.TaxBaseQty,                                  tmpTax.SourceTaxAmountCur,                                  tmpTax.SourceTaxAmountCurReal,                                  NoYes::No,                                  tmpTax.CalculationDate,                                  tmpTax.Warning);” and replace the existing code with the below code   } //@AVA+‐                  this.allocateInTaxWorkTrans(tmpTax.TaxCode,                                  tmpTax.TaxDirection,                                  tmpTax.TaxAmountMST,                                  tmpTax.TaxAmountCur,                                  tmpTax.TaxInCostPrice, 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

28 | P a g e

                                 tmpTax.TaxInCostPriceMST,                                 tmpTax.TaxInCostPriceCur,                                  tmpTax.TaxBaseAmountMSTRaw,                                  tmpTax.TaxBaseQty,                                  tmpTax.SourceTaxAmountCur,                                  tmpTax.SourceTaxAmountCurReal,                                  NoYes::No,                                  tmpTax.CalculationDate,                                  tmpTax.Warning);           //}//@AVA+‐ 

  

9. SalesTableForm 

 

Method Name  Modifications 

1.  setTouched   

Replace the below code.“If(_salesTable.Touched == NoYes::Yes) { return; }” with the highlighted code // @AVA+     if (!Ava_Configuration::find().DisableTaxCalculation)     {         _salesTable.Touched = NoYes::Yes;     }     else     {     // @AVA‐         if (_salesTable.Touched == NoYes::Yes)         {             return;         }     }  

10. NumberSeqModuleSalesOrder 

 

Method Name  Modifications 

1.  loadModule 

 Insert the following code at the end and just before the last bracket (NOTE:   The value of “numRef.SortField” should be higher than the existing maximum value of    numRef.SortField in this method )               

// @AVA +     datatype.parmDatatypeId(extendedtypenum(AVA_HeaderId));     datatype.parmReferenceHelp(literalstr("@AVA534"));     datatype.parmWizardIsContinuous(true);     datatype.parmWizardIsManual(NoYes::No);     datatype.parmWizardIsChangeDownAllowed(NoYes::No);     datatype.parmWizardIsChangeUpAllowed(NoYes::No); 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

29 | P a g e

   datatype.parmIsGroupEnabled(NoYes::Yes);    datatype.parmSortField(66);      datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);     this.create(datatype);     // @AVA ‐  

 

11. SalesTotals 

 

Method Name  Modifications 

1.  executeDisplayFieldsServer  

 

1. Declare the following variable and macro as below: AVA_TaxEngine   ava_TaxEngine = new AVA_TaxEngine(); // @AVA +‐  2. Search the line “else     {         salesTotals = SalesTotals::construct(_orderTable, _specQty);     } ”   and salesTotals.calc(); ” and insert the following code in between  ava_TaxEngine.GetTax(salesParmTable.salesTable(), salesParmTable ? salesParmTable.Transdate : today(), True, salesParmTable ); // @AVA +‐  

12. SalesTableListPageInteraction 

 

Method Name  Modifications 

1.  setButtonSell   

 

1. Declare the following macro as below: #AVA_Macro //@AVA+‐  2. at the end of method add below code after condition “if (isConfigurationkeyEnabled(configurationKeyNum(Retail)))”:      // @AVA +     if(strscan(( AVA_Configuration::find().Services), #TaxService, 1, 100) && (AVA_Configuration::find().EnableTaxOverrideDate))     {         this.listPage().actionPaneControlEnabled(formControlStr(salesTableListPage, AVA_TaxOverrideDate),true);     }     else     {         this.listPage().actionPaneControlEnabled(formControlStr(salesTableListPage,AVA_TaxOverrideDate),false);     }     // @AVA ‐  

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

30 | P a g e

5. FORMS 

S. No.  Name 

1.  CustFreeInvoice 

2.  SalesQuotationTable 

3.  SalesTable 

4.  SalesTableListPage 

5.  LogisticsPostalAddress 

6.  CustTable 

7.  CustTableListPage 

1. CustFreeInvoice Method: Code Changes 1. Data Source -CustInvoiceTable -> written

1. Declare the following variable AVA_TaxEngine ava_TaxEngine = New AVA_TaxEngine(); // @AVA +- 2. Search the lines “super ();” and “ttscommit;” and

insert the following code between these lines. // @ AVA + if (custInvoiceLine.RecId && ((subStr(custInvoiceTable.TaxGroup,1,6) == subStr(AVA_Configuration::find().TaxGroupId,1,6)))) ava_TaxEngine.GetTax(custInvoiceTable, custInvoiceTable.InvoiceDate); // @ AVA -

2. Data Source -CustInvoiceLine -> written

1. Declare the following variable

AVA_TaxEngine ava_TaxEngine = New AVA_TaxEngine(); // @AVA +-

2. Add the following code at the end of method // @ AVA + if (custInvoiceLine.RecId && ((subStr(custInvoiceTable.TaxGroup,1,6) == subStr(AVA_Configuration::find().TaxGroupId,1,6)))) ava_TaxEngine.GetTax(custInvoiceTable, custInvoiceTable.InvoiceDate); // @ AVA -

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

31 | P a g e

2. SalesQuotationTable

Method: Code Changes Methods: 1. ClassDeclaration 2. init 3. isCalcTax

1. Declare the following variable boolean isCalcTax; // @AVA +- 1. Add following code at the end of method

this.isCalcTax(true); // @AVA +- 1. Create new method as follows

public boolean isCalcTax(boolean _isCalcTax = isCalc{ isCalcTax = _isCalcTax; return isCalcTax; }

1. Override “clicked” method as follows: void clicked() { // @AVA +- AVA_TaxEngine taxEngine = new AVA_TaxEngine(); / ; if (element.isCalcTax()) { ttsbegin; TaxEngine.GetTax(salesQuotationTable, today() ttscommit; } // @AVA +- super(); element.isCalcTax(false); // @AVA +- } 2. Override “clicked” method as follows: void clicked() { AVA_TaxEngine taxEngine = new AVA_TaxEngine(); / ; // @AVA +- if (element.isCalcTax()) { ttsbegin; taxEngine.GetTax(salesQuotationTable, today()); ttscommit;

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

32 | P a g e

Datasources: SalesQuotationTable 1. write Datasources: SalesQuotationLine 1. write

} // @AVA +- SalesQuotationTotals::showTax(menuitemDisplayStr(TaxsalesQuotationTable); element.isCalcTax(false); // @AVA +- } 1. Declare the following variable AVA_TaxEngine TaxEngine= New AVA_TaxEngine(); 2. Search the lines “super();” and insert just after that

between these lines. // @AVA + taxEngine.GetTax(salesQuotationTable, systemD if(SalesQuotationLine.RecId) { element.isCalcTax(false); } // @AVA - 1. At the end of method just before the code of //<GIN

following code element.isCalcTax(true); // @AVA +-

3. SalesTable Create a MenuItemButton as mentioned below:

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

33 | P a g e

Method: Code Changes Datasources : SalesTable 1. write

1. Declare the following variable AVA_TaxEngine AVA_TaxEngine= New AVA_TaxEngine(); 2. Search the lines “ mustReread = true }” and

“ttscommit;” and insert the following code between these lines, just before to “ttscommit”.

AVA_TaxEngine.GetTax(SalesTable, systemDateGet()); // @AVA +-

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

34 | P a g e

init

1. Add the following macro before variable declaration #AVA_Macro 2.Search the line “if (isUnrealizedVATEnabled) { this.updateDesignForUnrealizedVAT(); }” and insert the following code thereafter // @AVA + AVA_TaxOverrideDate.enabled(strscan(( AVA_Configuration::find().Services), #TaxService, 1, 100) && (AVA_Configuration::find().EnableTaxOverrideDate)?true : false); // @AVA -

Change this method as highlighted below: void clicked() { AVA_TaxEngine taxEngine = new AVA_TaxEngine(); taxEngine.GetTax(salesTable, systemDateGet()); // @AVA +- element.automaticTotalDiscount(); SalesTotals::showTaxLine(menuitemDisplayStr (TaxTmpWorkSalesOrder), salesTable,salesLine,element);

}

4. SalesTableListPage

Create a MenuItemButton as mentioned below:

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

35 | P a g e

5. LogisticsPostalAddress

Create a Button as mentioned below:

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

36 | P a g e

Add static text as like below fig:

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

37 | P a g e

Method: Code Changes ClassDeclaration

Add the following variable declaration as below: boolean validatedAddress; // @AVA+-

addressValidation

Create a new method with the following code: /// <summary> /// Method validates address instead of parameters /// </summary> // @AVA+- void addressValidation() { AVA_AddressValidation addressValidation = new ava_AddressValidation(); ; addressValidation.validateAddress ( LogisticsPostalAddress.Street, LogisticsPostalAddress.City, LogisticsPostalAddress.State, LogisticsPostalAddress.Zipcode, LogisticsPostalAddress.CountryRegionId); LogisticsPostalAddress.initFromAVA_AddressValidation(addressValidation); LogisticsPostalAddress.update(); if(!AVA_Configuration::find().DisableAddressValidation) { if (addressValidation.parmErrorMessage() != '') { errorMessage.visible(true); errorMessage.text("@SYS8500"+": "+addressValidation.parmErrorMessage()); } else { errorMessage.visible(true); errorMessage.text("@AVA550"); } } if ( addressValidation.parmResultCode() == 0 ) validatedAddress = true; else validatedAddress = false; LogisticsPostalAddress_ds.reread(); LogisticsPostalAddress_ds.refresh(); }

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

38 | P a g e

Init 1. Add the following macro before variable declaration #AVA_Macro 2. Search the line “deliveryTab.visible(false); }” and insert the following code thereafter // @AVA + AVA_ValidAddress.enabled(strscan(( AVA_Configuration::find().Services), #AddressService, 1, 100) ? true : false); validatedAddress = false; // @AVA +-

updateDesign Search the code “generalTabPageCtrl.visible(false);” and change the value to generalTabPageCtrl.visible(true); //AVA+-

DataSource Method: LogisticsPostalAddress -> ValidateWrite:

Search the line “ret = ret && postalAddressForm.validatePostalAddress(postalAddressOrig, logisticsPostalAddress);” and “return ret;” and insert the following code in between validatedAddress = false; // @AVA +-

Override this method with the following code: /// <summary> /// This method updates the records in Ava_ValidAddress table /// </summary> // @AVA +- void clicked() { AVA_AddressValidation addressValidation = new ava_AddressValidation(); if (validatedAddress) addressValidation.UpdateTables(logisticsPostalAddress); super(); }

Override the method with the following code: /// <summary> /// Address validation /// </summary> // @AVA+- void clicked() { super(); element.addressValidation(); }

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

39 | P a g e

Change property value as following

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

40 | P a g e

6. CUSTTABLE Create a buttonGroup as mentioned below:

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

41 | P a g e

Create a MenuItemButtons as mentioned below:

7. CUSTTABLELISTPAGE Create a buttonGroup as mentioned below:

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

42 | P a g e

Create a MenuItemButtons as mentioned below:

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

43 | P a g e

6. Number Sequence  

AvaTax created the following Number Sequence: Number Sequence Code

Path Change

Ava_Head Organization administration -> Common -> Number Sequences -> Number Sequences

Create a new number sequence with the following properties: Number Sequence code: Ava_Head Name: Header id Scope Parameters: Scope: Company Company: Name of the company Segments: Segment: Alphanumeric value: ######## length: 8 Format: ######## References: Area: Sales Reference: Header id Manual: false; Continuous: false; Smallest: 1 Largest: 99999999 Next: This value should be higher than the maximum value of the “TaxHeaderID” (field) of the “Ava_Header” (Table).

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

44 | P a g e

7. MENU 

Modifications

To Import the Avatax menu please follow the following steps :

1. Go to Import window 2. Select “SharedProject_AvalaraAX.xpo

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

45 | P a g e

3. Click on the Show Details check box 4. Deselect all the items by unchecked AOT 5. Select only the Menus check box 6. Click on Ok 7. One confirmation window will appear. Click on Yes.

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

46 | P a g e

AVATAX - AX PROJECT INTEGRATION

8. TABLES (Project Integration) 

AvaTax Changed the following list of Table:

S. No.  Object ID  Name 

1.  617  ProjProposalJour 

2.  550  TmpTaxWorkTrans 

1. ProjProposalJour Method Name Modifications 1. insert 1. Declare the following variable

DialogButton diagBut; 2. Search the line “if

(isConfigurationkeyEnabled(configurationkeynum(Project3)) && (this.InvoiceDate == dateNull()))” and “super();” and insert the following code in between

// @AVA + //BP Deviation Documented if ((!AVA_Configuration::find().DisableTaxCalculation) && ( (substr(this.TaxGroupId,1,6) != substr(AVA_Configuration::find().TaxGroupId,1,6)))) { diagBut = box::yesNo("@AVA398"+ this.TaxGroupId +"@AVA399" + AVA_Configuration::find().TaxGroupId + '\n'+ "@AVA400" + AVA_Configuration::find().TaxGroupId + "@AVA401", DialogButton::Yes); if (diagBut == DialogButton::Yes) { this.TaxGroupId = AVA_Configuration::find().TaxGroupId; } } // @AVA -

2. findAVA_RecId Create this new method with below code. /// <summary> /// Methods gets record from projProposalJour table based on recId /// </summary> /// <param name="recId"> /// RecId recId /// </param> /// <param name="update"> /// boolean update = false

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

47 | P a g e

/// </param> /// <returns> /// projProposalJour findAVA_RecId /// </returns> static projProposalJour findAVA_RecId( RecId recId, boolean update = false) { ProjProposalJour projProposalJour; ; projProposalJour.selectForUpdate(update); select firstonly projProposalJour index hint recid Where projProposalJour. RecId == recId; return projProposalJour; }

2. TmpTaxWorkTrans Method Name Modifications 1. showTaxValue 1. Declare the following:

// @AVA + TaxGroup taxGroup; Container conAmtNumber; Ava_taxEngine taxEngine = new Ava_taxEngine(); //BP Deviation Documented int detailNumber = 3; TaxCode prevTaxCode; SysGlobalCache globalCache = Infolog.globalCache(); // @AVA – Search the line “if (this.TaxCode && this.TransDate)” and prior to that insert the following lines // @AVA + #AVA_Macro //BP Deviation Documented if ((AVA_Configuration::find().TaxGroupId == this.TaxGroup ) || (substr(AVA_Configuration::find().TaxGroupId,1,6) == substr(this.TaxGroup,1,6))) { TaxGroup = this.TaxGroup; if (this.SourceTableId == tablename2id(tablestr(SalesLine))) {

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

48 | P a g e

ConAmtNumber = TaxEngine.SalesTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(CustInvoiceLine))) { ConAmtNumber = TaxEngine.CustInvoiceTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(MarkupTrans))) { ConAmtNumber = TaxEngine.MarkupTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(SalesQuotationLine))) { ConAmtNumber = TaxEngine.SalesQuotationTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalOnAcc))) { ConAmtNumber = TaxEngine.projProposalOnAccTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalItem))) { ConAmtNumber = TaxEngine.projProposalItemTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalEmpl))) { ConAmtNumber = TaxEngine.projProposalEmplTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalRevenue))) { ConAmtNumber = TaxEngine.projProposalRevenueTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } if (this.SourceTableId == tablename2id(tablestr(projProposalCost))) {

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

49 | P a g e

ConAmtNumber = TaxEngine.projProposalCostTaxDataUpdate(this.TaxCode, this.SourceRecId, DetailNumber, '', PrevTaxCode, True); } //BP Deviation Documented TaxValue = Conpeek(ConAmtNumber,1); //BP Deviation Documented DetailNumber = Conpeek(ConAmtNumber,2); //BP Deviation Documented PrevTaxCode = Conpeek(ConAmtNumber,3); //BP Deviation Documented globalCache.set(#TmpTaxWorkTrans, 0,PrevTaxCode); //BP Deviation Documented globalCache.set(#TmpTaxWorkTrans, 1,int2str(DetailNumber)); } else // @AVA -

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

50 | P a g e

9. CLASSES (Project Integration) 

AvaTax Changed the following list of Classes:

1. ProjInvoiceJournalCreate Method Name Modifications initJournalHeader

1. Declare the following variable and Macro declaration

// @AVA + AVA_TaxEngine ava_TaxEngine = New AVA_TaxEngine(); #AVA_Macro // @AVA - 2. Search the line “this.exchRateSet();” and insert the following code above to this. // @AVA + if (projInvoiceJour.isProforma()) ava_TaxEngine.GetTax(projProposalJour, projInvoiceParmTable.InvoiceDate, true, null); else ava_TaxEngine.GetTax(projProposalJour, projInvoiceParmTable.InvoiceDate, false, null ,ava_DocumentType::SalesInvoice, projInvoiceJour.ProjInvoiceId); // @AVA -

initTotals

1. Add the following variable AVA_TaxEngine AVA_TaxEngine = new AVA_TaxEngine(); // @AVA +-

2. Search the line “projProposalJour =

this.getProjProposalJour(projInvoiceParmTable, true);” and “if(isConfigurationkeyEnabled(configurationKeyNum(PSAARRetainage))” and insert the following code in between

S. No.  Object ID  Name 

1.  1017548  ProjInvoiceJournalCreate 

2.   1017549  ProjInvoiceJournalPost 

3.  1204  TaxProj 

4.  683  SalesQuotationEditLinesForm_Proj_Send 

5.  681  SalesQuotationEditLinesForm_Proj_Confir 

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

51 | P a g e

//AVA+ if (projInvoiceJour.isProforma()) ava_TaxEngine.GetTax(projProposalJour, projInvoiceParmTable.InvoiceDate, true, null); else ava_TaxEngine.GetTax(projProposalJour, projInvoiceParmTable.InvoiceDate, false, null ,ava_DocumentType::SalesInvoice, projInvoiceJour.ProjInvoiceId); // @AVA -

2. ProjInvoiceJournalPost

Method Name Modifications postJournalPost

Override this method and add the following code:

1. Add the following variable declaration:

AVA_TaxEngine ava_TaxEngine = new AVA_TaxEngine(); // @AVA +-

2. Insert the following code after the “Super()” call

// @AVA + if ((!projInvoiceJour.isProforma())) AVA_TaxEngine.CommitTax(projInvoiceJour.ProjInvoiceId, projProposalJour.TaxGroupId, projProposalJour.InvoiceAmount < 0 ? salesType::ReturnItem : salesType::Sales); // @AVA -

3. TaxProj

Method Name Modifications 1. markup

1. Declare the following macro as below: #AVA_Macro 2. Search the for the following code “this.insertIntersection(salesCalcTax.markupTaxGroup(), salesCalcTax.markupTaxItemGroup(), _transId, markupTrans.Txt, taxDate);”

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

52 | P a g e

and replace the following code above to this. //@AVA+ /* this.insertIntersection(salesCalcTax.markupTaxGroup(), salesCalcTax.markupTaxItemGroup(), _transId, markupTrans.Txt, taxDate); */ //BP Deviation Documented if ((substr(salesCalcTax.parmProjProposalJour().TaxGroupId,1,6) != substr(AVA_Configuration::find().TaxGroupId,1,6)) || (AVA_Configuration::find().DisableTaxCalculation)) { this.insertIntersection(salesCalcTax.markupTaxGroup(), salesCalcTax.markupTaxItemGroup(), _transId, markupTrans.Txt, taxDate); } else { if (salesCalcTax.markupTaxItemGroup()) { this.insertIntersection(Ava_configuration::find().TaxGroupId, salesCalcTax.markupTaxItemGroup(), _transId, markupTrans.Txt, taxDate); } else { this.insertIntersection(Ava_configuration::find().TaxGroupId, #All, _transId, markupTrans.Txt, taxDate); } } //@AVA-

2. new 1. Declare the following macro as below: #AVA_Macro 2. Search the for the following code “ this.insertIntersection(salesCalcTax.transTaxGroup(), ”

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

53 | P a g e

And replace below code with this. //@AVA+ /*this.insertIntersection(salesCalcTax.transTaxGroup(), salesCalcTax.transTaxItemGroup(), salesCalcTax.transTransId(), salesCalcTax.transItemId(), taxCalculationDate);*/ //BP Deviation Documented if ((substr(salesCalcTax.parmProjProposalJour().TaxGroupId,1,6) != substr(AVA_Configuration::find().TaxGroupId,1,6)) || (AVA_Configuration::find().DisableTaxCalculation)) { this.insertIntersection(salesCalcTax.transTaxGroup(), salesCalcTax.transTaxItemGroup(), salesCalcTax.transTransId(), salesCalcTax.transItemId(), taxCalculationDate); } else { if (salesCalcTax.markupTaxItemGroup()) { this.insertIntersection(Ava_configuration::find().TaxGroupId, salesCalcTax.transTaxItemGroup(), salesCalcTax.transTransId(), salesCalcTax.transItemId(), taxCalculationDate); } else { this.insertIntersection(Ava_configuration::find().TaxGroupId, #All, salesCalcTax.transTransId(), salesCalcTax.transItemId(), taxCalculationDate); } } //@AVA-

SalesQuotationEditLinesForm_Proj_Confir

Method Name Modifications 1. CreateJournal

1. Declare the following variable and macro as below: AVA_TaxEngine ava_TaxEngine = new AVA_TaxEngine(); // @AVA +- 2 Search for the following line of code “

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

54 | P a g e

salesQuotationTotals.prepareQuantitiesCalculation(); “ And insert the following code after that. taxEngine.GetTax(salesQuotationTable, systemDateGet()); // @AVA +-

SalesQuotationEditLinesForm_Proj_Send

Method Name Modifications 1. CreateJournal

1. Declare the following variable and macro as below: AVA_TaxEngine ava_TaxEngine = new AVA_TaxEngine(); // @AVA +-  

2 Search for the following line of code “ salesQuotationTotals.prepareQuantitiesCalculation(); “ And insert the following code after that. taxEngine.GetTax(salesQuotationTable, systemDateGet()); // @AVA +-

4. SalesQuotationEditLinesForm_Proj_Send Method Name Modifications createJournal 1. Declare the following variable

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

55 | P a g e

AVA_TaxEngine TaxEngine = New AVA_TaxEngine(); // @AVA +- 2. Search the line

“salesQuotationTotals.prepareQuantitiesCalculation();” and “this.tax(salesQuotationTotals.tax());”

and insert the following code in between // @AVA + taxEngine.GetTax(salesQuotationTable, systemDateGet()); // @AVA -

5. SalesQuotationEditLinesForm_Proj_Confir

Method Name Modifications createJournal 1. Declare the following variable

AVA_TaxEngine TaxEngine = New AVA_TaxEngine(); // @AVA +- ; 2. Search the line

“salesQuotationTotals.prepareQuantitiesCalculation();” and “this.tax(salesQuotationTotals.tax());”

and insert the following code in between // @AVA +- taxEngine.GetTax(salesQuotationTable, systemDateGet()); // @AVA -

 

   

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

56 | P a g e

10. FORMS (Project Integration) 

AvaTax Changes are at the following list of Form:

S. No.  Name 

1.  SalesQuotationProjTable 

2.  ProjInvoiceProposalDetail 

3.  ProjInvoiceProposalListPage 

4.  ProjInvoiceTotals 

1. SalesQuotationProjTable Method: Code Changes ClassDeclaration isCalcTax Datasource-> SalesQuotationTable -> Write Datasource-> SalesQuotationLine -> Write

1. Declare the following variable boolean isCalcTax; // @AVA +- 1. Create new method as follows public boolean isCalcTax(boolean _isCalcTax = isCalcTax) { isCalcTax = _isCalcTax; return isCalcTax; } 1. Search line “salesQuotationTable.update();}” and

“ttscommit” and insert the following in between element.isCalcTax(true); // @AVA +- 1. Add following at the end of method element.isCalcTax(true); // @AVA +-

1. Declare the following variable AVA_TaxEngine TaxEngine = New AVA_TaxEngine(); // @AVA +- 2. Search the lines “SalesQuotationTotals::showTax(menuitemDisplayStr(TaxTmpWorkSalesQuote), salesQuotationTable);” and insert the following code above this line. // @AVA +- if (element.isCalcTax()) { ttsbegin; TaxEngine.GetTax(salesQuotationTable, Today()); ttscommit; } // @AVA +

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

57 | P a g e

3. Search the lines “SalesQuotationTotals::showTax(menuitemDisplayStr(TaxTmpWorkSalesQuote), salesQuotationTable);” and insert the following code below this line.

element.isCalcTax(false); // @AVA +-

1. Override clicked method as follows void clicked() { // @AVA +- AVA_TaxEngine TaxEngine = New AVA_TaxEngine(); // if (element.isCalcTax()) { ttsbegin; TaxEngine.GetTax(salesQuotationTable, Today()); // Docdate needs to be calculate ttscommit; } // @AVA +-

super(); element.isCalcTax(false); // @AVA +- }

2. ProjInvoiceProposalDetail

Method / Properties Modification

1. Declare following variable. AVA_TaxEngine AVA_TaxEngine = New AVA_TaxEngine();// @AVA +- 2.Search the line “projProposalTotals = new ProjProposalTotals(projProposalJour);” and insert the following lines after this line. AVA_TaxEngine.GetTax(projProposalJour, projProposalJour.InvoiceDate); // @AVA +-

3. ProjInvoiceProposalListPage

Method / Properties Modification 1. Declare following variable.

Install Document AvaTax Connector for MS Dynamics AX 2012 R3 <MS Dynamics AX Connector Build AX 6.3.164.0.02.00>

58 | P a g e

AVA_TaxEngine AVA_TaxEngine = New AVA_TaxEngine();// @AVA +- 2.Search the line “projProposalTotals = new ProjProposalTotals(projProposalJour);” and insert the following lines after this line. AVA_TaxEngine.GetTax(projProposalJour, projProposalJour.InvoiceDate); // @AVA +-

4. ProjInvoiceTotals Method / Properties Modification

calcTotals

1.Declare following variable. AVA_TaxEngine AVA_TaxEngine = New AVA_TaxEngine();// @AVA +- 2.Search the line “displayFieldsProj = ProjProposalTotals::displayFieldsServer(projProposalJourLocal.RecId);” and insert the following lines before this line. AVA_TaxEngine.GetTax(projProposalJour, projProposalJour.InvoiceDate); // @AVA +-