Налоговый модуль в Commerce Server 2007
Есть ли у нас какой-либо готовый компонент конвейера для расчета налога в Commerce Server 2007? Рекомендуется ли иметь собственную таблицу в базах данных, относящихся к транзакциям сервера торговли, для хранения налоговой информации?
1 ответ
Хранить налог в базе данных _transactionconfig или нет, решать только вам. Это зависит от уровня сложности ваших налоговых правил / законов для взаимосвязей, в которых вы ведете бизнес. Если вам приходится иметь дело с глобальными проблемами, когда переменные, которые входят в расчет налога, постоянно меняются, то я бы рекомендовал использовать службу расчета налогов от поставщика, Verisign, FirstDataCorporation и многих других поставщиков имеют API веб-сервисов, к которым вы можете обращаться для выполнения этих расчетов за вас, если вы настраиваете платную учетную запись продавца. Для простых налоговых расчетов вы можете даже просто сохранить их в своих файлах app.config или web.config, если их процент не изменяется.
В ответ на наличие или нет готового компонента конвейера для расчета налога ответ - нет. Commerce Server 2007 поставляется только с двумя конвейерными компонентами, связанными с налогами. Если вы откроете файл total.pcf, который находится в папке конвейеров на вашем сайте коммерческого сервера, вы заметите этап, называемый налогом. Вы увидите компонент DefaultTaxCy и компонент RequiredTaxCy.
Компонент DefaultTaxCy инициализирует _cy_tax_total (десятичное значение, представляющее общую сумму налога для текущей формы заказа) равным нулю и устанавливает _cy_tax_included (логическое значение, представляющее, включен ли налог в форму заказа) и имеет значение false.
Компонент RequiredTaxCy просто считывает значение _cy_Tax_total и значение dcy_tax_included и записывает ошибки в словарь _PurchaseErrors в случае возникновения ошибки.
Вам нужно будет создать пользовательский компонент конвейера для замены компонента DefaultTaxCy и установить значение свойства _cy_tax_total в форме заказа. Инструкции можно найти на MSDN здесь http://msdn.microsoft.com/en-US/library/ms916284(v=cs.70).aspx
Вот простой пример только метода Execute пользовательского компонента конвейера, выполняющего итерации по каждому элементу строки в порядке и затем увеличивающего сумму налога для формы заказа на основе гипотетического метода, который я назвал "CalculateTaxForLineItem, который принимает словарь LineItem в качестве аргумента, а затем позволит вам рассчитать этот налог, используя собственную бизнес-логику.
public int Execute(object pdispOrder, object pdispContext, int lFlags)
{
string basketErrorMessage = string.Empty;
int componentErrorLevel = 1;
IDictionary order = (IDictionary)pdispOrder;
ISimpleList lineItems = (ISimpleList)order["items"];
if (lineItems != null && lineItems.Count > 0)
{
decimal taxTotal = 0M;
int lineItemCount = lineItems.Count;
// Loop over the lineitems
for (int i = 0; i < lineItemCount; i++)
{
IDictionary lineItem = (IDictionary)lineItems[i];
decimal lineItemTaxTotal = 0M;
// TODO: peform some business logic to get calculate the lineItemTaxTotal
// per line here
lineItemTaxTotal = CalculateTaxForLineItem(lineItems[i]);
// add the lineitem tax total that was calculated to the total for the order
taxTotal += lineItemTaxTotal;
}
}
// Set the _cy_tax_total for the orderform
order["_cy_tax_total"] = taxTotal;
return componentErrorLevel;
}
public decimal CalculateTaxForLineItem(IDictionary currentLineItem){
// TODO: write your code to calculate your lineitem tax totals based on whatever
// custom business logic you want (could be a web service from a 3rd party tax service, could
// be custom sql reaching out to a database, your choice....
}