Налоговый модуль в 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....
}
Другие вопросы по тегам