taxengine:integration:code_samples:c_sample_code
Sample Console App in C#
Please see 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
{
/// <summary>
/// The CSharpClient object is a simple example of how the KampData
/// TaxEngine can be utilized from a 3rd party application. This sample
/// is not intended to be comprehensive. It simply illustrates the access
/// methods.
/// </summary>
/// <remarks>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.</remarks>
class CSharpClient
{
[STAThread]
static void Main(string[] args)
{
string zip;
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";
string itemCategory = "FREIGHT";
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;
/// You would normally set your customer ID at this point along with
/// any other document defaults. For purposes of this demonstration,
/// we will skip that step.
//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. We recommend using the lineNumber
/// as it exists in your order entry system. Doing so ensures that
/// the TaxEngine line and the order entry line can be matched and
/// verified.
int lineNumber = 1;
txEngn.LineAdd(lineNumber);
do
{
Console.WriteLine("Enter an item category. Press enter for {0}", itemCategory);
string ic = Console.ReadLine();
if (ic != "")
itemCategory = ic;
if (itemCategory != "")
{
try
{
txEngn.LineItemCategory = itemCategory;
Console.WriteLine("Item category has been set to {0}", txEngn.LineItemCategory);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
if (txEngn.LineItemCategory == "")
Console.WriteLine("Item category is blank");
else
Console.WriteLine("Item category is {0}", txEngn.LineItemCategory);
Console.WriteLine("");
}
}
/// Select a ZIP code.
Console.WriteLine("Enter a ZIP code");
zip = Console.ReadLine();
if (zip == "" || zip.ToUpper() == "EXIT")
break;
try
{
txEngn.LineZip = zip;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine("");
continue;
}
// Fetch the default tax schedule for this zip.
txEngn.LineTaxScheduleSelect();
/*
* At this point, the Portal object will have identified and made
* available the default city, county and state for the ZIP provided.
* Also, the default tax schedule will be identified, and made available.
* The following call prints these defaults:
*/
Console.WriteLine("Count found: {0} Default: {1}, [{2}] {3} {4}",
txEngn.LineAddressesInZip(), txEngn.LineCity, txEngn.LineCounty, txEngn.LineState, txEngn.LineZip);
/*
* Some ZIP codes are valid for more than one city, county and or state.
* The Portal object can provide ArrayLists of the available choices.
* The ArrayLists include:
* All States in the current ZIP.
* All Cities in the current state and ZIP.
* All Counties in the current city, state and ZIP.
*
* For example, if you change the city, then the list of possible counties
* may changes.
*
* You select the state, city and county in the same manner that you select
* the ZIP. (ie txEngn.LineCity = "New Orleans";)
*/
if (txEngn.LineAddressesInZip() > 1)
{
states = txEngn.LineStatesInZip();
Console.WriteLine("States in ZIP:");
foreach (string state in states)
{
Console.WriteLine(" State of {0}", state);
}
if (states.Count > 1)
{
Console.WriteLine("Enter a state. Press enter for {0}", txEngn.LineState);
string state = Console.ReadLine();
if (state != "")
txEngn.LineState = state;
}
// Fetch the default tax schedule for this state and zip.
txEngn.LineTaxScheduleSelect();
cities = txEngn.LineCitiesInStateAndZip();
Console.WriteLine("Cities in {0} state and {1} ZIP:",
txEngn.LineState, txEngn.LineZip);
foreach (string city in cities)
{
Console.WriteLine(" City of: {0}", city);
}
if (cities.Count > 1)
{
bool cityChosen = false;
while (!cityChosen)
{
Console.WriteLine("Enter a city. Press enter for {0}", txEngn.LineCity);
string city = Console.ReadLine();
if (city == "")
{
cityChosen = true; //Accepting the current value
}
else
{
try
{
txEngn.LineCity = city;
cityChosen = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
// Fetch the default tax schedule for this city state and zip.
txEngn.LineTaxScheduleSelect();
counties = txEngn.LineCountiesInState();
Console.WriteLine("Counties in {0}:", txEngn.LineState);
foreach (string county in counties)
{
Console.WriteLine(" County of {0}", county);
}
if (counties.Count > 1)
{
bool countyChosen = false;
while (!countyChosen)
{
Console.WriteLine("Enter a county. Press enter for {0}", txEngn.LineCounty);
string county = Console.ReadLine();
if (county == "")
{
countyChosen = true; //Accepting the current value
}
else
{
try
{
txEngn.LineCounty = county;
countyChosen = true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
}
/// In city limits is assumed. This line exists here only to
/// illustrate that this option can be set after the city has
/// been specified.
txEngn.LineInCityLimits = true;
txEngn.LineTaxScheduleSelect();
Console.WriteLine("Tax schedule [{0}] {1} Rate: {2}",
txEngn.LineTaxScheduleID, txEngn.LineTaxScheduleDescription,
txEngn.LineInitialTaxPercent);
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();
}
while (zip != "" && zip.ToUpper() != "EXIT");
}
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
Console.WriteLine("Press enter to continue");
Console.ReadLine(); // to hold window open displaying error message
}
}
}
}
taxengine/integration/code_samples/c_sample_code.txt · Last modified: 2015/08/06 20:00 by chuck