예제 #1
0
        public void Calculate(ref OrderInfo order)
        {
            GetAllSaleGift(ref order);

            #region 给赠品赋税率,运输方式等
            List <int> giftSysNoList = order.GiftItemList.Select(x => x.ProductSysNo).Distinct().ToList <int>();
            List <ProductEntryInfo> allProductEntryInfoList = PipelineDA.GetProductEntryInfo(giftSysNoList);
            foreach (OrderGiftItem giftItem in order.GiftItemList)
            {
                ProductEntryInfo entryInfo = allProductEntryInfoList.Find(f => f.ProductSysNo == giftItem.ProductSysNo);
                if (entryInfo != null)
                {
                    giftItem["ProductStoreType"] = (int)entryInfo.ProductStoreType;
                    //giftItem["TariffRate"] = entryInfo.TariffRate;
                }
                else
                {
                    giftItem["ProductStoreType"] = (int)ProductStoreType.Narmal;
                    // giftItem["TariffRate"] = 0;
                }
            }
            #endregion

            //加价购和赠品都属于赠品,都按赠品获取,之后按销售价格区分拆开
            order.PlusPriceItemList = order.GiftItemList.FindAll(m => m.UnitSalePrice > 0m);
            order.GiftItemList      = order.GiftItemList.FindAll(m => m.UnitSalePrice == 0m);

            PrcessorCustomerSelectGift(ref order);
            PrcessorCustomerSelectPlusPrice(ref order);
        }
예제 #2
0
        /// <summary>
        /// 计算关税
        /// </summary>
        /// <param name="order"></param>
        private void CalculateTrariffAmount(OrderInfo order, Dictionary <string, List <OrderItem> > dicSubOrderItem)
        {
            OrderInfo subOrderInfo;
            List <ProductEntryInfo> allProductEntryInfoList = null;

            List <int> allItemSysNoList = dicSubOrderItem.SelectMany(kvs => kvs.Value.Select(item => item.ProductSysNo))
                                          .Distinct()
                                          .ToList();

            if (allItemSysNoList.Count > 0)
            {
                allProductEntryInfoList = PipelineDA.GetProductEntryInfo(allItemSysNoList);
            }

            decimal totalTrariffAmountSum    = 0m;
            decimal subOrderTrariffAmountSum = 0m;

            if (allProductEntryInfoList != null && allProductEntryInfoList.Count > 0)
            {
                foreach (var kvs in order.SubOrderList)
                {
                    subOrderInfo             = kvs.Value;
                    subOrderTrariffAmountSum = 0m;

                    //循环计算子单中每个item的关税
                    foreach (var item in dicSubOrderItem[kvs.Key])
                    {
                        CalculateOrderItemTrariffAmount(item, order, subOrderInfo, allProductEntryInfoList);

                        subOrderTrariffAmountSum += item.UnitTaxFee * item.UnitQuantity;
                    }

                    //单笔订单关税金额小于50元的免征关税
                    if (subOrderTrariffAmountSum <= 50m)
                    {
                        subOrderTrariffAmountSum = 0m;
                        dicSubOrderItem[kvs.Key].ForEach(item =>
                        {
                            //满足关税免征条件,给出免征提示,并记录下原始关税计算金额
                            item["Tariff-Free-Flag"] = "1";
                            item.UnitTaxFee          = 0m;
                        });
                    }
                    kvs.Value.TaxAmount    = subOrderTrariffAmountSum;
                    totalTrariffAmountSum += subOrderTrariffAmountSum;
                }
            }

            order.TaxAmount = totalTrariffAmountSum;
        }