Пример #1
0
 decimal quoteCompute(QuoteMain quoteMain, WaybillGoods goods)
 {
     decimal result = 0;
     List<QuoteExpression> lstQuoteExpression = FrequentlyUsedData.GetQuoteExpressionList(false).Where(obj => obj.SrcID == quoteMain.Guid).ToList();
     if (goods.RealWeight != 0 && lstQuoteExpression.Count > 0)
     {
         result = CommonHelper.ComputeQuoteByExpression(goods.RealWeight, lstQuoteExpression);
     }
     return result;
 }
Пример #2
0
        //计算费用
        decimal ComputeFee(string feeType, WaybillGoods goods)
        {
            CoSite srcSite = FrequentlyUsedData.GetSiteList(false).FirstOrDefault(obj => obj.ID == Identity.CurrentEmployee.SiteID);
            CoDestination dest = (btneDestination.Tag as CoDestination);
            CoCustomers customers = (btneConsignor.Tag as CoCustomers);
            if (dest != null && customers != null)
            {
                //验证一下~~~~~~~~~~~
                List<QuoteExpression> lstQuoteExpression = FrequentlyUsedData.GetQuoteExpressionList(false).ToList();
                List<QuoteMainRelation> lstQuoteMainRelation = FrequentlyUsedData.GetQuoteMainRelationList(false).ToList();
                //该站点相关站点
                List<string> lstSite = CommonHelper.GetSiteRelation(srcSite.ID).ConvertAll(obj => obj.ID);
                List<string> lstQuoteMainSite = lstQuoteMainRelation.Where(obj => obj.Type == "寄件站点" && lstSite.Contains(obj.Code)).ToList().ConvertAll(obj => obj.SrcID);
                //目的地一致的报价单ID
                List<string> lstQuoteMainDest = lstQuoteMainRelation.Where(obj => obj.Type == "派件区域" && obj.Code == dest.ID.ToString()).ToList().ConvertAll(obj => obj.SrcID);
                //客户一致的报价单ID
                List<string> lstQuoteMainCustomers = lstQuoteMainRelation.Where(obj => obj.Type == "报价客户" && obj.Code == customers.ID.ToString()).ToList().ConvertAll(obj => obj.SrcID);
                //取出 订单类型、派送类别、费用类型 ,在该目的地内的报价单
                List<QuoteMain> lstQuoteMain = FrequentlyUsedData.GetQuoteMainList(false).
                    Where(obj => obj.FeeType == feeType && obj.LogisticsType == lueLogisticsType.EditValue.ToString() &&
                        obj.DispatchType == lueDispatchType.EditValue.ToString() && lstQuoteMainDest.Contains(obj.Guid)).ToList();

                //如果有针对该客户的报价单、优先处理
                if (lstQuoteMain.Count(obj => lstQuoteMainCustomers.Contains(obj.Guid) && lstQuoteMainSite.Contains(obj.Guid)) > 0)
                {
                    //客户与站点对应的报价单交集
                    List<string> lstQuoteMainIntersect = lstQuoteMainSite.Intersect(lstQuoteMainCustomers).ToList();
                    foreach (string siteCode in lstSite)    //按站点顺序从低到高
                    {
                        QuoteMainRelation r = lstQuoteMainRelation.FirstOrDefault(obj => obj.Type == "寄件站点" && obj.Code == siteCode && lstQuoteMainIntersect.Contains(obj.SrcID));
                        if (r != null)
                        {
                            QuoteMain q = lstQuoteMain.FirstOrDefault(obj => obj.Guid == r.SrcID);
                            //开始计算
                            return quoteCompute(q, goods);
                        }
                    }
                }
                //没有针对该客户的报价单,查找那些客户为空的报价单
                else
                {
                    foreach (string siteID in lstSite)    //按站点顺序从低到高
                    {
                        List<string> lstQuoteMainCurrentSite = lstQuoteMainRelation.Where(obj => obj.Type == "寄件站点" && obj.Code == siteID).ToList().ConvertAll(obj => obj.SrcID);
                        foreach (string s in lstQuoteMainCurrentSite)
                        {
                            //当前报价单存在并且不含客户资料
                            QuoteMain q = lstQuoteMain.FirstOrDefault(obj => obj.Guid == s);
                            if (q != null && lstQuoteMainRelation.Count(obj => obj.Type == "报价客户" && obj.SrcID == q.Guid) == 0)
                            {
                                //开始计算
                                return quoteCompute(q, goods);
                            }
                        }

                    }
                }
            }
            return 0;
        }