====== C# concise sample using TBIC ====== Please see [[taxengine:install:getting_started|Getting Started]] for help with using the KampData TaxEngine. using System; using System.Runtime.InteropServices; using System.Collections; //Add the KDTaxEngine.dll as a reference. using KampData.TaxEngine.API; using KampData.TaxEngine.API.Enums; namespace TaxEngineConsoleApp { /// /// This sample uses hardcoded values to illustrate what is required /// to retrieve the tax schedule and tax option for a line item /// using the DynamicZip Tax by Item Category settings. /// /// To use the KampData TaxEngine in this sample, or in any other /// project, you must first setup the SOP module from the KDControlCenter.exe's /// Transaction Source Module Setup window. Please see "Getting Started"in the /// KDTaxEngine.chm help file for more information. class CSharpClient { [STAThread] static void Main(string[] args) { bool abort = false; ArrayList cities = new ArrayList(); ArrayList counties = new ArrayList(); ArrayList states = new ArrayList(); string server = @"Microsoft SQL Server"; string userId = "User"; string password = "p@ssw0rd"; string companyDatabase = "TWO"; string systemDatabase = "DYNAMICS"; Int16 timeOutSeconds = 60; bool displayProgessBar = true; string loginMessage = ""; string message = ""; /// KampData.Portal object must be instantiated. Portal txEngn = new Portal(); try { try { /// The Portal.Login method makes the connection to SQL Server and /// prepares the TaxEngine for use. loginMessage = txEngn.Login(server, userId, password, systemDatabase, companyDatabase, timeOutSeconds, displayProgessBar); } catch (Exception e) { loginMessage = e.Message; } if (loginMessage != "") { abort = true; Console.WriteLine(loginMessage); Console.WriteLine("Press enter to continue"); Console.ReadLine(); // to hold window open displaying error message } if (!abort) { /// Set the docType and module using the values you have setup /// in the KDWindowClient.exe's Transaction Source Module Setup /// and Document Type Setup windows. In the SOP module, invoices are /// docType 3. /// (The SOP module can be setup automatically using /// File > Create SOP in the TE Transaction Source Modules window.) Int16 docType = 3; string module = "SOP"; /// You must assign a document number at this point. You can use a /// document number generated by your order entry software /// that will call the TaxEngine, or you can use the following code /// to generate a document number. string docNumber = txEngn.NextDocumentNumber(module); /// Initialize the document. txEngn.Document(docNumber, docType, module); /// DocSaleOrPurchase defaults to Sales, so the following line /// is unnecessary. However, you can set it to Purchases if desired. txEngn.DocSaleOrPurchase = SalesOrPurchases.Sales; /// A customer ID is required to check customer taxable status /// to see if the customer is taxable or exempt. If no /// customer ID is provided, the customer is assumed taxable. txEngn.DocCustomerID = "ADAMPARK0001"; /// We now add a line to the order. The addressing and taxation /// features occur on the line level. This step is required to /// instantiate a line object to work with. int lineNumber = 1; txEngn.LineAdd(lineNumber); // Set the values necessary to retrieve the item category taxability. string itemCategory = "FREIGHT"; txEngn.LineItemCategory = itemCategory; string zip = "84101"; txEngn.LineZip = zip; string state = "UT"; txEngn.LineState = state; string city = "Salt Lake City"; txEngn.LineCity = city; string county = "Salt Lake"; // leave blank if unknown. if (county != "") txEngn.LineCounty = county; txEngn.LineTaxScheduleSelect(); // The item tax schedule and item tax option should now be available. Console.WriteLine("Line-item or document tax schedule [{0}] {1}", txEngn.LineTaxScheduleID, txEngn.LineTaxScheduleDescription); Console.WriteLine("Tax Option: {0}", txEngn.LineItemTaxOption); if (txEngn.LineItemTaxScheduleID != "") Console.WriteLine("Item tax schedule [{0}]", txEngn.LineItemTaxScheduleID); // The following is informational only - to show more results. txEngn.LineItemUnitPrice = 100; txEngn.LineItemQuantity = 1; txEngn.DocCalculateTax(); Console.WriteLine(); message = "ID"; message = message.PadRight(80); message = message.Insert(17, "Description"); message = message.Insert(48, "Total"); message = message.Insert(58, "Taxable"); message = message.Insert(68, "Tax"); message = message.Trim(); Console.WriteLine(message); // This code displays the Microsoft Dynamics GP tax details // that were used. foreach (TrxTaxDetail trxDtl in txEngn.DocTaxDetails(TaxDetails.Transaction)) { message = trxDtl.ID; message = message.PadRight(80); message = message.Insert(17, trxDtl.Description); message = message.Insert(48, trxDtl.TotalAmount.ToString()); message = message.Insert(58, trxDtl.TaxedAmount.ToString()); message = message.Insert(68, trxDtl.TaxAmount.ToString()); message = message.Trim(); Console.WriteLine(message); } Console.WriteLine(); } } catch (Exception exc) { Console.WriteLine(exc.Message); Console.WriteLine("Press enter to continue"); Console.ReadLine(); // to hold window open displaying error message } } } }