Example #1
0
        /// <summary>
        /// 根据商品ID,供应商ID,仓库ID获取是否有该商品的采购记录 价格为-1是未定价,0为赠品
        /// </summary>
        /// <param name="goodsID"></param>
        /// <param name="companyID"></param>
        /// <param name="warehouseID"></param>
        /// <param name="ptype"></param>
        /// <param name="pstate"></param>
        /// <returns></returns>
        public IList <PurchasingDetailInfo> GetPurchasingDetail(Guid goodsID, Guid companyID, Guid warehouseID, PurchasingType ptype, PurchasingState pstate)
        {
            var parms = new[] {
                new SqlParameter(PARM_GOODS_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_COMPANY_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_WAREHOUSEID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_PURCHASING_STATE, SqlDbType.Int),
                new SqlParameter(PARM_PURCHASING_TYPE, SqlDbType.Int)
            };

            parms[0].Value = goodsID;
            parms[1].Value = companyID;
            parms[2].Value = warehouseID;
            parms[3].Value = (int)pstate;
            parms[4].Value = (int)ptype;
            var pList = new List <PurchasingDetailInfo>();

            using (var rdr = SqlHelper.ExecuteReader(GlobalConfig.ERP_DB_NAME, true, SQL_SELECT_BY_COMPANYID_WAREHOUSEID_GOODSID, parms))
            {
                while (rdr.Read())
                {
                    var pinfo = new PurchasingDetailInfo(rdr.GetGuid(0), rdr.GetGuid(1), rdr.GetString(2), rdr[3] == DBNull.Value ? "" :
                                                         rdr.GetString(3), rdr.GetString(4), rdr.GetString(5), rdr.GetGuid(6), rdr[7] == DBNull.Value ? -1 : rdr.GetDecimal(7),
                                                         rdr.GetDouble(8), rdr[9] == DBNull.Value ? 0 : rdr.GetDouble(9), rdr.GetInt32(10), rdr[11] == DBNull.Value ? null :
                                                         rdr.GetString(11), rdr.GetGuid(12), rdr.IsDBNull(13) ? 0 : rdr.GetInt32(13), rdr.IsDBNull(14) ? 0 :
                                                         Convert.ToDouble(rdr[14]), rdr.IsDBNull(15) ? 0 : Convert.ToInt32(rdr[15]), rdr.IsDBNull(16) ? 0 : Convert.ToInt32(rdr[16]))
                    {
                        CPrice = rdr[17] == DBNull.Value ? 0 : rdr.GetDecimal(17)
                    };

                    pList.Add(pinfo);
                }
            }
            return(pList);
        }
Example #2
0
        /// <summary>
        /// 修改指定商品价格和计划数量
        /// </summary>
        /// <param name="info"></param>
        /// <param name="purchasingGoodsID"></param>
        public void Update(PurchasingDetailInfo info, Guid purchasingGoodsID)
        {
            var parms = new[]
            {
                new SqlParameter(PARM_PURCHASING_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_GOODS_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_PRICE, SqlDbType.Decimal),
                new SqlParameter(PARM_PLAN_QUANTITY, SqlDbType.Float),
                new SqlParameter(PARM_PURCHASING_GOODS_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_CPRICE, SqlDbType.Decimal)
            };

            parms[0].Value = info.PurchasingID;
            parms[1].Value = info.GoodsID;
            parms[2].Value = info.Price;
            parms[3].Value = info.PlanQuantity;
            parms[4].Value = purchasingGoodsID;
            parms[5].Value = info.CPrice;
            try
            {
                SqlHelper.ExecuteNonQuery(GlobalConfig.ERP_DB_NAME, false, SQL_UPDATE, parms);
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message);
            }
        }
Example #3
0
 /// <summary>
 /// 插入
 /// </summary>
 /// <param name="info"></param>
 public void Insert(PurchasingDetailInfo info)
 {
     SqlParameter[] parms = GetParameters();
     parms[0].Value  = info.PurchasingID;
     parms[1].Value  = info.GoodsID;
     parms[2].Value  = info.GoodsName;
     parms[3].Value  = string.IsNullOrEmpty(info.Units) ? "" : info.Units;
     parms[4].Value  = info.GoodsCode;
     parms[5].Value  = info.Specification;
     parms[6].Value  = info.CompanyID;
     parms[7].Value  = info.Price;
     parms[8].Value  = info.PlanQuantity;
     parms[9].Value  = info.RealityQuantity;
     parms[10].Value = info.State;
     parms[11].Value = info.Description;
     parms[12].Value = info.PurchasingGoodsType;
     parms[13].Value = info.SixtyDaySales;
     parms[14].Value = info.ThirtyDaySales;
     parms[15].Value = info.ElevenDaySales;
     parms[16].Value = info.CPrice;
     try
     {
         SqlHelper.ExecuteNonQuery(GlobalConfig.ERP_DB_NAME, false, SQL_INSERT, parms);
     }
     catch (Exception ex)
     {
         throw new ApplicationException(ex.Message);
     }
 }
Example #4
0
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="purchasingID"></param>
        /// <returns></returns>
        public List <PurchasingDetailInfo> SelectByGoodsDayAvgSales(Guid purchasingID)
        {
            var parm = new SqlParameter(PARM_PURCHASING_ID, SqlDbType.UniqueIdentifier)
            {
                Value = purchasingID
            };

            var pList = new List <PurchasingDetailInfo>();

            using (var rdr = SqlHelper.ExecuteReader(GlobalConfig.ERP_DB_NAME, true, SQL_SELECT_BY_60_DAY_30_DAY_11_DAY_AVG, parm))
            {
                while (rdr.Read())
                {
                    var pinfo = new PurchasingDetailInfo(rdr.GetGuid(0), rdr.GetGuid(1), rdr.GetString(2), rdr[3] == DBNull.Value ? "" :
                                                         rdr.GetString(3), rdr.GetString(4), rdr.GetString(5), rdr.GetGuid(6), rdr[7] == DBNull.Value ? -1 : rdr.GetDecimal(7),
                                                         rdr.GetDouble(8), rdr[9] == DBNull.Value ? 0 : rdr.GetDouble(9), rdr.GetInt32(10), rdr[11] == DBNull.Value ? null :
                                                         rdr.GetString(11), rdr.GetGuid(12), rdr.IsDBNull(13) ? 0 : rdr.GetInt32(13), rdr.IsDBNull(14) ? 0 : Convert.ToDouble(rdr[14]), rdr.IsDBNull(15) ? 0 : Convert.ToDouble(rdr[15]), rdr.IsDBNull(16) ? 0 : Convert.ToInt32(rdr[16]), rdr.IsDBNull(17) ? 0 : Convert.ToInt32(rdr[17]))
                    {
                        SixtyDaySales    = Convert.ToInt32(rdr[18]),
                        ThirtyDaySales   = Convert.ToInt32(rdr[19]),
                        ElevenDaySales   = Convert.ToInt32(rdr[20]),
                        PurchasingToDate = rdr.IsDBNull(21) ? "" : rdr.GetDateTime(21).ToString("yyyy-MM-dd"),
                        IsException      = !rdr.IsDBNull(22) && rdr.GetBoolean(22),
                        CPrice           = rdr[23] == DBNull.Value ? 0 : rdr.GetDecimal(23)
                    };
                    pList.Add(pinfo);
                }
            }
            return(pList);
        }
Example #5
0
        /// <summary>
        /// 获取子商品的60、30、11天销量
        /// </summary>
        /// <param name="realGoodsId"></param>
        /// <param name="warehouseId"></param>
        /// <param name="endTime"></param>
        /// <param name="hostingFilialeId"></param>
        /// <returns></returns>
        public PurchasingDetailInfo GetChildGoodsSale(Guid realGoodsId, Guid warehouseId, DateTime endTime, Guid hostingFilialeId)
        {
            const string SQL   = @"
SELECT 
    RealGoodsId,
    DeliverWarehouseId, 
    isnull([60],0) AS SixtyDaySales, 
    isnull([30],0) AS ThirtyDaySales, 
    isnull([11],0) AS ElevenDaySales
FROM 
(
	select RealGoodsId,DeliverWarehouseId,goodsSales,60 as t from lmshop_GoodsDaySalesStatistics as t1
	where DayTime between dateadd(day,-60,convert(varchar(10),@EndTime,120)) and dateadd(day,-30,convert(varchar(10),@EndTime,120)) 
	and DeliverWarehouseId=@WarehouseID and RealGoodsId=@GoodsId and HostingFilialeId=@HostingFilialeId
	union all
	select RealGoodsId,DeliverWarehouseId,goodsSales, 30 as t from lmshop_GoodsDaySalesStatistics as t2
	where DayTime between dateadd(day,-30,convert(varchar(10),@EndTime,120)) and @EndTime 
	and  DeliverWarehouseId=@WarehouseID and RealGoodsId=@GoodsId and HostingFilialeId=@HostingFilialeId
	union all
	select RealGoodsId,DeliverWarehouseId,goodsSales ,11 as t from lmshop_GoodsDaySalesStatistics as t3
	where DayTime between dateadd(day,-11,convert(varchar(10),@EndTime,120)) and @EndTime 
	and  DeliverWarehouseId=@WarehouseID and RealGoodsId=@GoodsId and HostingFilialeId=@HostingFilialeId
)kkk
PIVOT
(
	sum (goodssales)
	FOR t IN( [11], [30], [60] )
) AS pvt
";
            var          parms = new[] {
                new SqlParameter(PARM_GOODS_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_WAREHOUSEID, SqlDbType.UniqueIdentifier),
                new SqlParameter("@EndTime", SqlDbType.DateTime),
                new SqlParameter("@HostingFilialeId", SqlDbType.UniqueIdentifier),
            };

            parms[0].Value = realGoodsId;
            parms[1].Value = warehouseId;
            parms[2].Value = endTime;
            parms[3].Value = hostingFilialeId;

            PurchasingDetailInfo info = null;

            using (var dr = SqlHelper.ExecuteReader(GlobalConfig.ERP_DB_NAME, true, SQL, parms))
            {
                if (dr.Read())
                {
                    info                = new PurchasingDetailInfo();
                    info.GoodsID        = dr["RealGoodsId"] == DBNull.Value ? Guid.Empty : new Guid(dr["RealGoodsId"].ToString());
                    info.SixtyDaySales  = dr["SixtyDaySales"] == DBNull.Value ? 0 : int.Parse(dr["SixtyDaySales"].ToString());
                    info.ThirtyDaySales = dr["ThirtyDaySales"] == DBNull.Value ? 0 : int.Parse(dr["ThirtyDaySales"].ToString());
                    info.ElevenDaySales = dr["ElevenDaySales"] == DBNull.Value ? 0 : int.Parse(dr["ElevenDaySales"].ToString());
                }
            }
            return(info);
        }
Example #6
0
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="purchasingID"></param>
        /// <returns></returns>
        public List <PurchasingDetailInfo> SelectDetail(Guid purchasingID)
        {
            //SQL_SELECT_DETAIL
            const string SQL = @"
select 
	pd.[PurchasingID],pd.[GoodsId],pd.[GoodsName],pd.[Units],pd.[GoodsCode],[Specification],pd.[CompanyID],[Price],[PlanQuantity],
	[RealityQuantity],pd.[State],pd.[Description],[PurchasingGoodsID],PurchasingGoodsType,PlanStocking,DayAvgStocking,SixtyDays,p.WarehouseID,pd.CPrice
from lmShop_PurchasingDetail as pd
left join lmShop_Purchasing as p on p.PurchasingID=pd.PurchasingID
where pd.PurchasingID=@PurchasingID 
Order By pd.[GoodsCode],Specification";

            var parm = new SqlParameter(PARM_PURCHASING_ID, SqlDbType.UniqueIdentifier)
            {
                Value = purchasingID
            };

            var pList = new List <PurchasingDetailInfo>();

            using (var rdr = SqlHelper.ExecuteReader(GlobalConfig.ERP_DB_NAME, true, SQL, parm))
            {
                while (rdr.Read())
                {
                    var pinfo = new PurchasingDetailInfo
                    {
                        PurchasingID        = rdr["PurchasingID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["PurchasingID"].ToString()),
                        GoodsID             = rdr["GoodsId"] == DBNull.Value ? Guid.Empty : new Guid(rdr["GoodsId"].ToString()),
                        GoodsName           = rdr["GoodsName"] == DBNull.Value ? string.Empty : rdr["GoodsName"].ToString(),
                        Units               = rdr["Units"] == DBNull.Value ? string.Empty : rdr["Units"].ToString(),
                        GoodsCode           = rdr["GoodsCode"] == DBNull.Value ? string.Empty : rdr["GoodsCode"].ToString(),
                        Specification       = rdr["Specification"] == DBNull.Value ? string.Empty : rdr["Specification"].ToString(),
                        CompanyID           = rdr["CompanyID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["CompanyID"].ToString()),
                        Price               = rdr["Price"] == DBNull.Value ? 0 : decimal.Parse(rdr["Price"].ToString()),
                        PlanQuantity        = rdr["PlanQuantity"] == DBNull.Value ? 0 : double.Parse(rdr["PlanQuantity"].ToString()),
                        RealityQuantity     = rdr["RealityQuantity"] == DBNull.Value ? 0 : double.Parse(rdr["RealityQuantity"].ToString()),
                        State               = rdr["State"] == DBNull.Value ? 0 : int.Parse(rdr["State"].ToString()),
                        Description         = rdr["Description"] == DBNull.Value ? string.Empty : rdr["Description"].ToString(),
                        PurchasingGoodsID   = rdr["PurchasingGoodsID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["PurchasingGoodsID"].ToString()),
                        PurchasingGoodsType = rdr["PurchasingGoodsType"] == DBNull.Value ? 0 : int.Parse(rdr["PurchasingGoodsType"].ToString()),
                        PlanStocking        = rdr["PlanStocking"] == DBNull.Value ? 0 : double.Parse(rdr["PlanStocking"].ToString()),
                        DayAvgStocking      = rdr["DayAvgStocking"] == DBNull.Value ? 0 : double.Parse(rdr["DayAvgStocking"].ToString()),
                        SixtyDays           = rdr["SixtyDays"] == DBNull.Value ? 0 : int.Parse(rdr["SixtyDays"].ToString()),
                        WarehouseID         = rdr["WarehouseID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["WarehouseID"].ToString()),
                        CPrice              = rdr["CPrice"] == DBNull.Value ? 0 : decimal.Parse(rdr["CPrice"].ToString())
                    };

                    pList.Add(pinfo);
                }
            }
            return(pList);
        }
Example #7
0
        /// <summary>
        /// 修改实际来货数量、状态、价格
        /// </summary>
        /// <param name="info"></param>
        /// <param name="purchasingGoodsId"></param>
        public bool UpdatePurchasingDetail(PurchasingDetailInfo info, Guid purchasingGoodsId)
        {
            const string SQL   = @"UPDATE lmShop_PurchasingDetail SET RealityQuantity=@RealityQuantity,Price=@Price,PlanQuantity=@PlanQuantity,CPrice=@CPrice,State=@State 
WHERE PurchasingGoodsID=@PurchasingGoodsID";
            var          parms = new[]
            {
                new SqlParameter(PARM_REALITY_QUANTITY, SqlDbType.Int)
                {
                    Value = info.RealityQuantity
                },
                new SqlParameter(PARM_PURCHASING_GOODS_ID, SqlDbType.UniqueIdentifier)
                {
                    Value = info.PurchasingGoodsID
                },
                new SqlParameter(PARM_PRICE, SqlDbType.Decimal)
                {
                    Value = info.Price
                },
                new SqlParameter(PARM_PLAN_QUANTITY, SqlDbType.Int)
                {
                    Value = info.PlanQuantity
                },
                new SqlParameter(PARM_CPRICE, SqlDbType.Decimal)
                {
                    Value = info.CPrice
                },
                new SqlParameter(PARM_STATE, SqlDbType.Int)
                {
                    Value = info.State
                }
            };

            try
            {
                return(SqlHelper.ExecuteNonQuery(GlobalConfig.ERP_DB_NAME, false, SQL, parms) > 0);
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message);
            }
        }
Example #8
0
 /// <summary>
 /// 插入
 /// </summary>
 /// <param name="info"></param>
 public void Insert(PurchasingDetailInfo info)
 {
     if ((int)PurchasingGoodsType.Gift == info.PurchasingGoodsType)
     {
         info.Price = 0;
         #region -- 赠品
         IList <PurchasingDetailInfo> ilist = _purchasingDetailDao.Select(info.PurchasingID).Where(p => p.GoodsID == info.GoodsID).Where(p => p.PurchasingGoodsType == (int)PurchasingGoodsType.Gift).ToList();
         if (ilist.Count == 0)
         {
             //为赠品并且数据库采购明细表里面不存在赠品的商品
             _purchasingDetailDao.Insert(info);
         }
         else
         {
             //存在数据库里面采购明细表里面存在赠品
             PurchasingDetailInfo pdInfo = ilist[0];
             pdInfo.PlanQuantity = pdInfo.PlanQuantity + info.PlanQuantity;
             _purchasingDetailDao.Update(pdInfo, pdInfo.PurchasingGoodsID);
         }
         #endregion
     }
     else
     {
         #region -- 非赠品
         IList <PurchasingDetailInfo> ilist = _purchasingDetailDao.Select(info.PurchasingID).Where(p => p.GoodsID == info.GoodsID).Where(p => p.PurchasingGoodsType != (int)PurchasingGoodsType.Gift).ToList();
         if (ilist.Count == 0)
         {
             //采购明细里面不存在非赠品,直接插入
             _purchasingDetailDao.Insert(info);
         }
         else
         {
             //采购明细里面存在非赠品,直接修改采购计划数量
             PurchasingDetailInfo pdInfo = ilist[0];
             pdInfo.PlanQuantity = pdInfo.PlanQuantity + info.PlanQuantity;
             _purchasingDetailDao.Update(pdInfo, pdInfo.PurchasingGoodsID);//修改数量
         }
         #endregion
     }
 }
Example #9
0
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="purchasingID"></param>
        /// <param name="purchGoodsId"></param>
        /// <returns></returns>
        public PurchasingDetailInfo GetPurchGoodsId(Guid purchasingID, Guid purchGoodsId)
        {
            var parms = new[] { new SqlParameter(PARM_PURCHASING_ID, SqlDbType.UniqueIdentifier),
                                new SqlParameter(PARM_PURCHASING_GOODS_ID, SqlDbType.UniqueIdentifier) };

            parms[0].Value = purchasingID;
            parms[1].Value = purchGoodsId;
            const string SQL   = @"SELECT [PurchasingID]
                                          ,[GoodsID]
                                          ,[GoodsName]
                                          ,[Units]
                                          ,[GoodsCode]
                                          ,[Specification]
                                          ,[CompanyID]
                                          ,[Price]
                                          ,[PlanQuantity]
                                          ,[RealityQuantity]
                                          ,[State]
                                          ,[Description],[PurchasingGoodsID],PurchasingGoodsType,PlanStocking,DayAvgStocking,SixtyDays,CPrice
                                      FROM [lmShop_PurchasingDetail] Where  PurchasingID=@PurchasingID And PurchasingGoodsID=@PurchasingGoodsID Order By GoodsName,Specification ";
            var          pinfo = new PurchasingDetailInfo();

            using (var rdr = SqlHelper.ExecuteReader(GlobalConfig.ERP_DB_NAME, true, SQL, parms))
            {
                while (rdr.Read())
                {
                    pinfo = new PurchasingDetailInfo(rdr.GetGuid(0), rdr.GetGuid(1), rdr.GetString(2), rdr[3] == DBNull.Value ? "" : rdr.GetString(3), rdr.GetString(4), rdr.GetString(5), rdr.GetGuid(6),
                                                     rdr[7] == DBNull.Value ? -1 : rdr.GetDecimal(7), rdr.GetDouble(8), rdr[9] == DBNull.Value ? 0 : rdr.GetDouble(9),
                                                     rdr.GetInt32(10), rdr[11] == DBNull.Value ? null : rdr.GetString(11), rdr.GetGuid(12),
                                                     rdr.IsDBNull(13) ? 0 : rdr.GetInt32(13), rdr.IsDBNull(14) ? 0 : Convert.ToDouble(rdr[14]), rdr.IsDBNull(15) ? 0 : Convert.ToDouble(rdr[15]), rdr.IsDBNull(16) ? 0 : Convert.ToInt32(rdr[16]))
                    {
                        CPrice = rdr[17] == DBNull.Value ? 0 : rdr.GetDecimal(17)
                    };
                    break;
                }
            }
            return(pinfo);
        }
Example #10
0
        /// <summary>
        /// 修改实际来货数量
        /// </summary>
        /// <param name="info"></param>
        /// <param name="purchasingGoodsID"></param>
        public void UpdateRealQuantity(PurchasingDetailInfo info, Guid purchasingGoodsID)
        {
            var parms = new[]
            {
                new SqlParameter(PARM_PURCHASING_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_GOODS_ID, SqlDbType.UniqueIdentifier),
                new SqlParameter(PARM_REALITY_QUANTITY, SqlDbType.Int),
                new SqlParameter(PARM_PURCHASING_GOODS_ID, SqlDbType.UniqueIdentifier)
            };

            parms[0].Value = info.PurchasingID;
            parms[1].Value = info.GoodsID;
            parms[2].Value = info.RealityQuantity;
            parms[3].Value = purchasingGoodsID;
            try
            {
                SqlHelper.ExecuteNonQuery(GlobalConfig.ERP_DB_NAME, false, SQL_UPDATE_REALITY_QUANTITY, parms);
            }
            catch (Exception ex)
            {
                throw new ApplicationException(ex.Message);
            }
        }
        // 采购中
        protected void IbnPurchasing_Click(object sender, EventArgs eventArgs)
        {
            bool isHave      = false;
            var  codeManager = new CodeManager();

            foreach (GridDataItem dataItem in RG_DebitNote.Items)
            {
                var purchasingId      = new Guid(dataItem.GetDataKeyValue("PurchasingId").ToString());
                var personResponsible = new Guid(dataItem.GetDataKeyValue("PersonResponsible").ToString());
                var cbCheck           = (CheckBox)dataItem.FindControl("CB_Check");
                if (cbCheck.Checked)
                {
                    using (var ts = new TransactionScope(TransactionScopeOption.Required))
                    {
                        isHave = true;
                        _debitNoteDao.UpdateDebitNoteStateByPurchasingId(purchasingId, (int)DebitNoteState.Purchasing);
                        //生成采购单
                        DebitNoteInfo debitNoteInfo = _debitNoteDao.GetDebitNoteInfo(purchasingId) ?? new DebitNoteInfo();
                        IList <DebitNoteDetailInfo> debitNoteDetailList = _debitNoteDao.GetDebitNoteDetailList(purchasingId);
                        CompanyCussentInfo          companyCussentInfo  = CompanyCussentList.FirstOrDefault(w => w.CompanyId == debitNoteInfo.CompanyId);
                        //var warehouseInfo = WarehouseManager.Get(debitNoteInfo.WarehouseId);
                        PersonnelInfo  personnelInfo     = PersonnelList.FirstOrDefault(w => w.PersonnelId == debitNoteInfo.PersonResponsible) ?? new PersonnelInfo(null);
                        PurchasingInfo oldPurchasingInfo = _purchasing.GetPurchasingById(purchasingId);
                        var            realName          = CurrentSession.Personnel.Get().RealName;
                        var            filialeId         = string.IsNullOrWhiteSpace(debitNoteInfo.PurchasingNo) || debitNoteInfo.PurchasingNo == "-"?FilialeManager.GetHeadList().First(ent => ent.Name.Contains("可得")).ID
                            : _purchasing.GetPurchasingList(debitNoteInfo.PurchasingNo).FilialeID;
                        var pInfo = new PurchasingInfo
                        {
                            PurchasingID    = Guid.NewGuid(),
                            PurchasingNo    = codeManager.GetCode(CodeType.PH),
                            CompanyID       = debitNoteInfo.CompanyId,
                            CompanyName     = companyCussentInfo == null ? "" : companyCussentInfo.CompanyName,
                            FilialeID       = filialeId,
                            WarehouseID     = debitNoteInfo.WarehouseId,
                            PurchasingState = (int)PurchasingState.Purchasing,
                            PurchasingType  = (int)PurchasingType.Custom,
                            StartTime       = DateTime.Now,
                            EndTime         = DateTime.MaxValue,
                            //Description = "[采购类别:{0}赠品借记单][对应采购单号" + debitNoteInfo.PurchasingNo + "]" + CurrentSession.Personnel.Get().RealName,
                            Description         = string.Format("[采购类别:{0},赠品借记单对应采购单号{1};采购人:{2}]", EnumAttribute.GetKeyName(PurchasingType.Custom), debitNoteInfo.PurchasingNo, realName),
                            PmId                = personnelInfo.PersonnelId,
                            PmName              = personnelInfo.RealName,
                            ArrivalTime         = oldPurchasingInfo.ArrivalTime,
                            PersonResponsible   = personResponsible,
                            PurchasingFilialeId = filialeId
                        };
                        IList <PurchasingDetailInfo> purchasingDetailList = new List <PurchasingDetailInfo>();
                        if (debitNoteDetailList.Count > 0)
                        {
                            List <Guid> goodsIdOrRealGoodsIdList  = debitNoteDetailList.Select(w => w.GoodsId).Distinct().ToList();
                            Dictionary <Guid, GoodsInfo> dicGoods = _goodsCenterSao.GetGoodsBaseListByGoodsIdOrRealGoodsIdList(goodsIdOrRealGoodsIdList);
                            if (dicGoods != null && dicGoods.Count > 0)
                            {
                                foreach (var debitNoteDetailInfo in debitNoteDetailList)
                                {
                                    bool hasKey = dicGoods.ContainsKey(debitNoteDetailInfo.GoodsId);
                                    if (hasKey)
                                    {
                                        GoodsInfo goodsBaseInfo = dicGoods.FirstOrDefault(w => w.Key == debitNoteDetailInfo.GoodsId).Value;
                                        // 获取商品的60、30、11天销量
                                        var purchasingDetailInfo = _purchasingDetail.GetChildGoodsSale(debitNoteDetailInfo.GoodsId, debitNoteInfo.WarehouseId, DateTime.Now, pInfo.PurchasingFilialeId) ?? new PurchasingDetailInfo();
                                        var durchasingDetailInfo = new PurchasingDetailInfo
                                        {
                                            PurchasingID        = pInfo.PurchasingID,
                                            PurchasingGoodsID   = Guid.NewGuid(),
                                            GoodsID             = debitNoteDetailInfo.GoodsId,
                                            GoodsName           = debitNoteDetailInfo.GoodsName,
                                            GoodsCode           = goodsBaseInfo.GoodsCode,
                                            Specification       = debitNoteDetailInfo.Specification,
                                            CompanyID           = pInfo.CompanyID,
                                            Price               = debitNoteDetailInfo.Price,
                                            PlanQuantity        = debitNoteDetailInfo.GivingCount,
                                            RealityQuantity     = 0,
                                            State               = 0,
                                            Description         = "",
                                            Units               = goodsBaseInfo.Units,
                                            PurchasingGoodsType = (int)PurchasingGoodsType.Gift,
                                            SixtyDaySales       = purchasingDetailInfo.SixtyDaySales,
                                            ThirtyDaySales      = purchasingDetailInfo.ThirtyDaySales,
                                            ElevenDaySales      = purchasingDetailInfo.ElevenDaySales == 0 ? 0 : purchasingDetailInfo.ElevenDaySales, // 11 //日均销量(11天)
                                            CPrice              = debitNoteDetailInfo.Price
                                        };
                                        purchasingDetailList.Add(durchasingDetailInfo);
                                    }
                                }
                            }
                        }
                        if (purchasingDetailList.Count > 0)
                        {
                            _debitNoteDao.UpdateDebitNoteNewPurchasingIdByPurchasingId(purchasingId, pInfo.PurchasingID);
                            _purchasing.PurchasingInsert(pInfo);
                            _purchasing.PurchasingUpdateIsOut(pInfo.PurchasingID);
                            //报备管理生成采购单操作记录添加
                            WebControl.AddOperationLog(personnelInfo.PersonnelId, personnelInfo.RealName, pInfo.PurchasingID, pInfo.PurchasingNo,
                                                       OperationPoint.ReportManage.DebitToAddPurchasingList.GetBusinessInfo(), string.Empty);
                            var purchasingDetailManager = new PurchasingDetailManager(_purchasingDetail, _purchasing);
                            purchasingDetailManager.Save(purchasingDetailList);
                        }
                        ts.Complete();
                    }
                }
            }
            if (isHave == false)
            {
                RAM.Alert("未勾选借记单!");
            }
            else
            {
                RAM.ResponseScripts.Add("setTimeout(function(){ refreshGrid(); }, " + GlobalConfig.PageAutoRefreshDelayTime + ");");
            }
        }
Example #12
0
        public void BuilderPurchasing(List <PurchaseDeclarationDTO> stockDeclareDtos, IList <PurchaseSetInfo> purchaseSetList, Guid warehouseId, DateTime?arrivalTime, string operationer, ref StringBuilder failMessage)
        {
            var goodsIdList    = stockDeclareDtos.Select(w => w.GoodsId).Distinct().ToList();
            var goodsBaseInfos = _goodsCenterSao.GetGoodsListByGoodsIds(goodsIdList);

            if (goodsBaseInfos == null || goodsBaseInfos.Count == 0 || goodsIdList.Count != goodsBaseInfos.Count)
            {
                failMessage = new StringBuilder("获取商品信息失败!");
                return;
            }
            var goodsBaseDics = goodsBaseInfos.ToDictionary(k => k.GoodsId, v => v);

            if (purchaseSetList == null)
            {
                purchaseSetList = _purchaseSet.GetPurchaseSetList(goodsIdList, warehouseId);
            }
            var purDics         = new Dictionary <PurchasingInfo, IList <PurchasingDetailInfo> >();
            var purchasingLists = new List <PurchasingInfo>();
            var goodsDics       = new Dictionary <string, Guid>();

            foreach (var gdiInfoGroup in stockDeclareDtos.GroupBy(ent => new { ent.FilialeId, ent.CompanyId, ent.PersonResponsible }))
            {
                var dataList = _purchasing.GetPurchasingList(DateTime.MinValue, DateTime.MinValue, gdiInfoGroup.Key.CompanyId, warehouseId, gdiInfoGroup.Key.FilialeId, PurchasingState.NoSubmit,
                                                             PurchasingType.StockDeclare, string.Empty, Guid.Empty, gdiInfoGroup.Key.PersonResponsible);
                if (dataList != null && dataList.Count > 0)
                {
                    purchasingLists.AddRange(dataList);
                }

                foreach (var item in gdiInfoGroup.Where(ent => goodsBaseDics.ContainsKey(ent.GoodsId)))
                {
                    if (!goodsDics.ContainsKey(item.GoodsName))
                    {
                        goodsDics.Add(item.GoodsName, item.GoodsId);
                    }
                    var  goodsBaseInfo      = goodsBaseDics[item.GoodsId];
                    Guid pGuid              = Guid.NewGuid();
                    var  existPurchsingInfo = purchasingLists.FirstOrDefault(ent => ent.CompanyID == gdiInfoGroup.Key.CompanyId && ent.PurchasingFilialeId == gdiInfoGroup.Key.FilialeId && ent.PersonResponsible == gdiInfoGroup.Key.PersonResponsible);
                    var  tempPurchasingInfo = purDics.Keys.FirstOrDefault(ent => ent.CompanyID == gdiInfoGroup.Key.CompanyId && ent.PurchasingFilialeId == gdiInfoGroup.Key.FilialeId && ent.PersonResponsible == gdiInfoGroup.Key.PersonResponsible);
                    var  flag = tempPurchasingInfo == null || tempPurchasingInfo.PurchasingID == Guid.Empty;

                    if (existPurchsingInfo == null)
                    {
                        IList <PurchasingDetailInfo> pdList;
                        if (flag)
                        {
                            tempPurchasingInfo = new PurchasingInfo(pGuid, new CodeManager().GetCode(CodeType.PH),
                                                                    item.CompanyId, item.CompanyName, item.FilialeId,
                                                                    warehouseId, (int)PurchasingState.NoSubmit
                                                                    , (int)PurchasingType.StockDeclare, DateTime.Now,
                                                                    DateTime.MaxValue
                                                                    , string.Format("[采购类别:{0};采购人:{1}]", Enum.Attribute.EnumAttribute.GetKeyName(PurchasingType.StockDeclare), operationer),
                                                                    Guid.Empty, string.Empty, operationer)
                            {
                                Director            = item.PersonResponsibleName,
                                PersonResponsible   = item.PersonResponsible,
                                PurchasingFilialeId = item.FilialeId
                            };
                            pdList = new List <PurchasingDetailInfo>();
                        }
                        else
                        {
                            pGuid  = tempPurchasingInfo.PurchasingID;
                            pdList = purDics[tempPurchasingInfo];
                        }
                        if (arrivalTime != null)
                        {
                            tempPurchasingInfo.ArrivalTime = (DateTime)arrivalTime;
                        }

                        var detailInfo = new PurchasingDetailInfo(pGuid, item.RealGoodsId,
                                                                  item.GoodsName,
                                                                  goodsBaseInfo.Units,
                                                                  goodsBaseInfo.GoodsCode,
                                                                  item.Sku, item.CompanyId
                                                                  , item.PurchasePrice <= 0?-1: item.PurchasePrice, item.Quantity, 0,
                                                                  0, string.Empty, Guid.NewGuid(),
                                                                  (int)PurchasingGoodsType.NoGift)
                        {
                            CPrice = item.PurchasePrice == 0 ? -1 : item.PurchasePrice
                        };
                        //获取商品的60、30、11天销量
                        var pdInfo = _purchasingDetailManager.GetChildGoodsSale(detailInfo.GoodsID, warehouseId, DateTime.Now, item.FilialeId);
                        if (pdInfo != null)
                        {
                            detailInfo.SixtyDaySales  = pdInfo.SixtyDaySales;
                            detailInfo.ThirtyDaySales = pdInfo.ThirtyDaySales;
                            detailInfo.ElevenDaySales = pdInfo.ElevenDaySales / 11;//日均销量(11天)
                        }
                        else
                        {
                            detailInfo.SixtyDaySales  = 0;
                            detailInfo.ThirtyDaySales = 0;
                            detailInfo.ElevenDaySales = 0;
                        }
                        if (flag)
                        {
                            pdList.Add(detailInfo);
                            purDics.Add(tempPurchasingInfo, pdList);
                        }
                        else
                        {
                            var tempDetailInfo = pdList.FirstOrDefault(act => act.GoodsID == item.RealGoodsId && act.PurchasingGoodsType == (int)PurchasingGoodsType.NoGift);
                            if (tempDetailInfo == null)
                            {
                                pdList.Add(detailInfo);
                            }
                            else
                            {
                                tempDetailInfo.PlanQuantity += item.PurchaseQuantity;
                            }
                            purDics[tempPurchasingInfo] = pdList;
                        }
                        purchasingLists.Add(tempPurchasingInfo);
                    }
                    else
                    {
                        IList <PurchasingDetailInfo> pdList = new List <PurchasingDetailInfo>();
                        var detailInfo = new PurchasingDetailInfo(existPurchsingInfo.PurchasingID,
                                                                  item.RealGoodsId, item.GoodsName,
                                                                  goodsBaseInfo.Units,
                                                                  goodsBaseInfo.GoodsCode,
                                                                  item.Sku, item.CompanyId
                                                                  , item.PurchasePrice <= 0 ? -1 : item.PurchasePrice, item.Quantity, 0,
                                                                  0, "", Guid.NewGuid(),
                                                                  (int)PurchasingGoodsType.NoGift)
                        {
                            CPrice = item.PurchasePrice == 0 ? -1 : item.PurchasePrice
                        };

                        // 获取商品的60、30、11天销量
                        var purchasingDetailInfo = _purchasingDetailManager.GetChildGoodsSale(detailInfo.GoodsID, warehouseId, DateTime.Now, item.FilialeId);
                        if (purchasingDetailInfo != null)
                        {
                            detailInfo.SixtyDaySales  = purchasingDetailInfo.SixtyDaySales;
                            detailInfo.ThirtyDaySales = purchasingDetailInfo.ThirtyDaySales;
                            detailInfo.ElevenDaySales = purchasingDetailInfo.ElevenDaySales / 11;//日均销量(11天)
                        }
                        else
                        {
                            detailInfo.SixtyDaySales  = 0;
                            detailInfo.ThirtyDaySales = 0;
                            detailInfo.ElevenDaySales = 0;
                        }
                        if (!flag) //已经添加采购单
                        {
                            pdList = purDics[tempPurchasingInfo];
                        }
                        else
                        {
                            tempPurchasingInfo = existPurchsingInfo;
                            purDics.Add(tempPurchasingInfo, pdList);
                        }
                        var tempDetailInfo = pdList.FirstOrDefault(act => act.GoodsID == detailInfo.GoodsID &&
                                                                   act.PurchasingGoodsType == (int)PurchasingGoodsType.NoGift);
                        if (tempDetailInfo == null)
                        {
                            pdList.Add(detailInfo);
                        }
                        else
                        {
                            tempDetailInfo.PlanQuantity += detailInfo.PlanQuantity;
                        }
                        purDics[tempPurchasingInfo] = pdList;
                    }
                }
            }

            #region  采购单重新分配

            string msg;
            var    result = CreatePurchasing(purDics, goodsDics, purchaseSetList, out msg);
            if (!result)
            {
                failMessage = new StringBuilder(msg);
            }

            #endregion
        }
Example #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="purDics"></param>
        /// <param name="dicGoods"></param>
        /// <param name="purchaseSetList"></param>
        /// <param name="msg"></param>
        public bool CreatePurchasing(Dictionary <PurchasingInfo, IList <PurchasingDetailInfo> > purDics, Dictionary <string, Guid> dicGoods,
                                     IList <PurchaseSetInfo> purchaseSetList, out string msg)
        {
            if (dicGoods == null || dicGoods.Count == 0)
            {
                msg = string.Empty;
                return(true);
            }

            using (var ts = new TransactionScope(TransactionScopeOption.Required))
            {
                foreach (KeyValuePair <PurchasingInfo, IList <PurchasingDetailInfo> > keyValue in purDics)
                {
                    var pInfo = keyValue.Key;
                    IList <PurchasingDetailInfo> plist = keyValue.Value;

                    IList <PurchasingDetailInfo> plist2 = plist.Where(w => w.PurchasingGoodsType != (int)PurchasingGoodsType.Gift).ToList();
                    //如果赠送方式为总数量赠送时使用  key 主商品ID  value 额外赠送
                    var dics           = new Dictionary <string, int>();    //需赠送
                    var sendDics       = new Dictionary <string, int>();    //现返已赠送
                    var debitExtraDics = new Dictionary <string, int>();    //借计单已送
                    var addDetailsList = new List <PurchasingDetailInfo>(); //添加赠品
                    #region [现返]
                    //处理原理:
                    //赠品数量=原采购数量/(买几个+送几个)*送几个
                    //购买数量=原采购数量-赠品数量
                    foreach (var pdInfo in plist2)
                    {
                        if (!dicGoods.ContainsKey(pdInfo.GoodsName))
                        {
                            continue;
                        }
                        var             goodsBaseInfo   = dicGoods[pdInfo.GoodsName];
                        PurchaseSetInfo purchaseSetInfo = purchaseSetList.FirstOrDefault(w => w.GoodsId == goodsBaseInfo && pInfo.WarehouseID == w.WarehouseId && pInfo.PurchasingFilialeId == w.HostingFilialeId);
                        if (purchaseSetInfo == null)
                        {
                            continue;
                        }
                        IList <PurchasePromotionInfo> ppList = _purchasePromotionManager.GetPurchasePromotionList(purchaseSetInfo.PromotionId, purchaseSetInfo.GoodsId, purchaseSetInfo.WarehouseId, purchaseSetInfo.HostingFilialeId,
                                                                                                                  (int)PurchasePromotionType.Back);
                        PurchasePromotionInfo ppInfo = ppList.FirstOrDefault(w => w.GivingCount > 0 && w.StartDate <= DateTime.Now && w.EndDate >= DateTime.Now);
                        if (ppInfo != null)
                        {
                            #region  新增
                            if (!ppInfo.IsSingle)  //按商品总数量进行赠送
                            {
                                if (!dics.ContainsKey(pdInfo.GoodsName))
                                {
                                    var dataList = plist2.Where(act => act.GoodsName == pdInfo.GoodsName).OrderByDescending(act => act.PlanQuantity).ToList();
                                    //余数
                                    var extra = dataList.Sum(act => Convert.ToInt32(act.PlanQuantity)) % (ppInfo.BuyCount + ppInfo.GivingCount);
                                    if (extra == ppInfo.BuyCount)
                                    {
                                        dataList[0].PlanQuantity += ppInfo.GivingCount;
                                    }
                                    else
                                    {
                                        //应赠送次数
                                        int actquantity = extra % (ppInfo.BuyCount + ppInfo.GivingCount);
                                        if (actquantity >= ((ppInfo.BuyCount + ppInfo.GivingCount) / float.Parse("2.0")))
                                        {
                                            dataList[0].PlanQuantity = dataList[0].PlanQuantity + (ppInfo.BuyCount + ppInfo.GivingCount) - actquantity;
                                        }
                                    }
                                    //总商品赠送商品总数
                                    var sumTotal = dataList.Sum(act => Convert.ToInt32(act.PlanQuantity)) * ppInfo.GivingCount / (ppInfo.BuyCount + ppInfo.GivingCount);
                                    dics.Add(pdInfo.GoodsName, sumTotal);
                                    if (dics[pdInfo.GoodsName] > 0)
                                    {
                                        foreach (var item in dataList.OrderByDescending(act => act.PlanQuantity))
                                        {
                                            if (dics[item.GoodsName] == 0)
                                            {
                                                continue;
                                            }
                                            var count = dics[item.GoodsName] - Convert.ToInt32(item.PlanQuantity);
                                            if (count > 0)  //赠品数>购买数
                                            {
                                                item.Price = 0;
                                                item.PurchasingGoodsType = (int)PurchasingGoodsType.Gift;
                                                item.RealityQuantity     = 0;
                                                dics[item.GoodsName]     = count;
                                            }
                                            else if (count < 0)  //赠送数小于采购数
                                            {
                                                addDetailsList.Add(new PurchasingDetailInfo
                                                {
                                                    PurchasingGoodsID   = Guid.NewGuid(),
                                                    PurchasingID        = item.PurchasingID,
                                                    GoodsID             = item.GoodsID,
                                                    GoodsName           = item.GoodsName,
                                                    GoodsCode           = item.GoodsCode,
                                                    Specification       = item.Specification,
                                                    CompanyID           = item.CompanyID,
                                                    Price               = 0,
                                                    PlanQuantity        = dics[item.GoodsName],
                                                    PurchasingGoodsType = (int)PurchasingGoodsType.Gift,
                                                    RealityQuantity     = 0,
                                                    State               = item.State,
                                                    Description         = "",
                                                    Units               = item.Units,
                                                    SixtyDaySales       = item.SixtyDaySales,
                                                    ThirtyDaySales      = item.ThirtyDaySales,
                                                    ElevenDaySales      = item.ElevenDaySales,
                                                    CPrice              = 0
                                                });
                                                item.RealityQuantity = 0;
                                                item.PlanQuantity    = Math.Abs(count);
                                                dics[item.GoodsName] = 0;
                                            }
                                            else   //赠送数=采购数
                                            {
                                                item.Price = 0;
                                                item.PurchasingGoodsType = (int)PurchasingGoodsType.Gift;
                                                item.RealityQuantity     = 0;
                                                item.CPrice          = 0;
                                                dics[item.GoodsName] = 0;
                                            }
                                        }
                                    }
                                }
                            }
                            else  //按单光度
                            {
                                //应赠余数
                                var actquantity = pdInfo.PlanQuantity % (ppInfo.BuyCount + ppInfo.GivingCount);
                                if (actquantity > 0)
                                {
                                    if (actquantity >= ((ppInfo.BuyCount + ppInfo.GivingCount) / float.Parse("2.0")))
                                    {
                                        pdInfo.PlanQuantity = pdInfo.PlanQuantity + (ppInfo.BuyCount + ppInfo.GivingCount) - actquantity;
                                    }
                                }
                                int pQuantity = int.Parse(pdInfo.PlanQuantity.ToString(CultureInfo.InvariantCulture));
                                //赠品数量=原采购数量/(买几个+送几个)*送几个
                                int quantity = pQuantity / (ppInfo.BuyCount + ppInfo.GivingCount) * ppInfo.GivingCount;
                                if (quantity > 0)
                                {
                                    var oldPurchasingDetailInfo = plist.FirstOrDefault(w => w.PurchasingGoodsID == pdInfo.PurchasingGoodsID);
                                    if (oldPurchasingDetailInfo != null)
                                    {
                                        //购买数量=原采购数量-赠品数量
                                        oldPurchasingDetailInfo.PlanQuantity -= (quantity);
                                    }

                                    var purchasingDetailInfo = plist.FirstOrDefault(w => w.GoodsID == pdInfo.GoodsID && w.PurchasingGoodsType == (int)PurchasingGoodsType.Gift);
                                    if (purchasingDetailInfo != null)
                                    {
                                        //在原赠品数量累加
                                        purchasingDetailInfo.PlanQuantity += (quantity);
                                    }
                                    else
                                    {
                                        purchasingDetailInfo = new PurchasingDetailInfo
                                        {
                                            PurchasingGoodsID   = Guid.NewGuid(),
                                            PurchasingID        = pInfo.PurchasingID,
                                            GoodsID             = pdInfo.GoodsID,
                                            GoodsName           = pdInfo.GoodsName,
                                            GoodsCode           = pdInfo.GoodsCode,
                                            Specification       = pdInfo.Specification,
                                            CompanyID           = pdInfo.CompanyID,
                                            Price               = 0,
                                            PlanQuantity        = (quantity),
                                            PurchasingGoodsType = (int)PurchasingGoodsType.Gift,
                                            RealityQuantity     = 0,
                                            State               = 0,
                                            Description         = "",
                                            Units               = pdInfo.Units,
                                            SixtyDaySales       = pdInfo.SixtyDaySales,
                                            ThirtyDaySales      = pdInfo.ThirtyDaySales,
                                            ElevenDaySales      = pdInfo.ElevenDaySales
                                        };
                                        addDetailsList.Add(purchasingDetailInfo);
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                    if (addDetailsList.Count > 0)
                    {
                        foreach (var purchasingDetailInfo in addDetailsList)
                        {
                            purchasingDetailInfo.Price = 0;
                            plist.Add(purchasingDetailInfo);
                        }
                    }

                    #endregion

                    #region [非现返生成借记单]
                    var debitNoteDetailList = new List <DebitNoteDetailInfo>();
                    foreach (var pdInfo in plist2)
                    {
                        if (!dicGoods.ContainsKey(pdInfo.GoodsName))
                        {
                            continue;
                        }
                        var             goodsBaseInfo   = dicGoods[pdInfo.GoodsName];
                        PurchaseSetInfo purchaseSetInfo = purchaseSetList.FirstOrDefault(w => w.GoodsId == goodsBaseInfo && w.HostingFilialeId == pInfo.PurchasingFilialeId);
                        if (purchaseSetInfo != null)
                        {
                            IList <PurchasePromotionInfo> ppList = _purchasePromotionManager.GetPurchasePromotionList(purchaseSetInfo.PromotionId, purchaseSetInfo.GoodsId, purchaseSetInfo.WarehouseId, purchaseSetInfo.HostingFilialeId,
                                                                                                                      (int)PurchasePromotionType.NoBack);
                            PurchasePromotionInfo ppInfo = ppList.FirstOrDefault(w => w.GivingCount > 0 && w.StartDate <= DateTime.Now && w.EndDate >= DateTime.Now);
                            if (ppInfo != null)
                            {
                                int pQuantity = Convert.ToInt32(pdInfo.PlanQuantity);
                                //赠品数量=原采购数量/买几个*送几个
                                int quantity = pQuantity / ppInfo.BuyCount * ppInfo.GivingCount;
                                #region  新增
                                //按商品总数量进行赠送
                                if (!ppInfo.IsSingle)
                                {
                                    if (!dics.ContainsKey(pdInfo.GoodsName))
                                    {
                                        var dataList = plist2.Where(act => act.GoodsName == pdInfo.GoodsName).ToList();
                                        //单光度赠送商品总数
                                        var total = dataList.Sum(act => (Convert.ToInt32(act.PlanQuantity) / (ppInfo.BuyCount + ppInfo.GivingCount)));
                                        //总商品赠送商品总数
                                        var sumTotal = dataList.Sum(act => Convert.ToInt32(act.PlanQuantity)) / (ppInfo.BuyCount + ppInfo.GivingCount);
                                        if (sumTotal > total)
                                        {
                                            dics.Add(pdInfo.GoodsName, sumTotal);
                                        }
                                    }
                                }
                                #endregion
                                if (quantity > 0)
                                {
                                    var debitNoteDetailInfo = new DebitNoteDetailInfo
                                    {
                                        PurchasingId  = pInfo.PurchasingID,
                                        GoodsId       = pdInfo.GoodsID,
                                        GoodsName     = pdInfo.GoodsName,
                                        Specification = pdInfo.Specification,
                                        GivingCount   = quantity,
                                        ArrivalCount  = 0,
                                        Price         = pdInfo.Price,
                                        State         = 0,
                                        Amount        = quantity * pdInfo.Price,
                                        Memo          = "",
                                        Id            = Guid.NewGuid()
                                    };
                                    if (debitExtraDics.ContainsKey(pdInfo.GoodsName))
                                    {
                                        debitExtraDics[pdInfo.GoodsName] = debitExtraDics[pdInfo.GoodsName] + quantity;
                                    }
                                    else
                                    {
                                        debitExtraDics.Add(pdInfo.GoodsName, quantity);
                                    }
                                    debitNoteDetailList.Add(debitNoteDetailInfo);
                                }
                            }
                        }
                    }

                    #endregion

                    #region 处理额外赠送商品
                    foreach (var dic in dics)
                    {
                        KeyValuePair <string, int> dic1 = dic;
                        if (sendDics.ContainsKey(dic.Key))
                        {
                            var total = dic1.Value - sendDics[dic.Key];
                            if (total > 0)
                            {
                                var data = plist.Where(act => act.GoodsName == dic1.Key && act.PurchasingGoodsType != (int)PurchasingGoodsType.Gift)
                                           .OrderByDescending(act => act.PlanQuantity).ToList();
                                var data2 = plist.Where(act => act.GoodsName == dic1.Key && act.PurchasingGoodsType == (int)PurchasingGoodsType.Gift)
                                            .OrderByDescending(act => act.PlanQuantity);
                                for (int i = 0; i < total; i++)
                                {
                                    var purchasingDetailInfo = data2.FirstOrDefault(w => w.GoodsID == plist[i].GoodsID);
                                    if (purchasingDetailInfo != null)
                                    {
                                        data[i].PlanQuantity -= 1;
                                        purchasingDetailInfo.PlanQuantity += 1;
                                    }
                                }
                            }
                        }
                        if (debitExtraDics.ContainsKey(dic.Key))
                        {
                            var total = dic1.Value - debitExtraDics[dic.Key];
                            if (total > 0)
                            {
                                var data = debitNoteDetailList.Where(act => act.GoodsName == dic1.Key).OrderByDescending(act => act.GivingCount).ToList();
                                for (int i = 0; i < total; i++)
                                {
                                    data[i].GivingCount += 1;
                                    data[i].Amount       = data[i].Price * data[i].GivingCount;
                                }
                            }
                        }
                    }
                    #endregion

                    var originalDetails = _purchasingDetailManager.Select(pInfo.PurchasingID);

                    _purchasingDetailManager.Delete(pInfo.PurchasingID);
                    _purchasing.DeleteById(pInfo.PurchasingID);

                    //pInfo.IsOut = true;
                    //插入采购单
                    _purchasing.PurchasingInsert(pInfo);
                    //保存采购单明细
                    foreach (var item in plist.Where(act => act.Price == 0 && act.PurchasingGoodsType != (int)PurchasingGoodsType.Gift))
                    {
                        var info = plist.FirstOrDefault(act => act.GoodsName == item.GoodsName && act.Price > 0);
                        item.Price = info != null?info.Price:0;
                    }

                    var ids = new List <Guid>();
                    if (originalDetails.Count > 0)
                    {
                        foreach (var purchasingDetailInfo in originalDetails)
                        {
                            var info = plist.FirstOrDefault(act =>
                                                            act.GoodsID == purchasingDetailInfo.GoodsID &&
                                                            act.PurchasingGoodsType == purchasingDetailInfo.PurchasingGoodsType);
                            if (info != null)
                            {
                                purchasingDetailInfo.PlanQuantity += info.PlanQuantity;
                                ids.Add(info.PurchasingGoodsID);
                            }
                            _purchasingDetailManager.Insert(purchasingDetailInfo);
                        }
                    }
                    foreach (var item in plist.Where(act => !ids.Contains(act.PurchasingGoodsID)))
                    {
                        _purchasingDetailManager.Insert(item);
                    }

                    //添加借记单
                    if (debitNoteDetailList.Count > 0)
                    {
                        IDebitNote debitNoteManager = new DebitNote(Environment.GlobalConfig.DB.FromType.Write);
                        var        debitNoteInfo    = new DebitNoteInfo
                        {
                            PurchasingId      = pInfo.PurchasingID,
                            PurchasingNo      = pInfo.PurchasingNo,
                            CompanyId         = pInfo.CompanyID,
                            PresentAmount     = debitNoteDetailList.Sum(w => w.Amount),
                            CreateDate        = DateTime.Now,
                            FinishDate        = DateTime.MinValue,
                            State             = (int)DebitNoteState.ToPurchase,
                            WarehouseId       = pInfo.WarehouseID,
                            Memo              = "",
                            PersonResponsible = pInfo.PersonResponsible,
                            NewPurchasingId   = Guid.Empty
                        };
                        debitNoteManager.AddPurchaseSetAndDetail(debitNoteInfo, debitNoteDetailList);
                    }
                }
                ts.Complete();
            }
            msg = string.Empty;
            return(true);
        }
Example #14
0
        private static void PurchasingPromotion(Dictionary <PurchasingInfo, List <PurchasingDetailInfo> > dictPurchase, Dictionary <Guid, GoodsInfo> dicGoods, IList <PurchasingGoods> pg)
        {
            if (dictPurchase.Count > 0)
            {
                //IList<PurchaseSetInfo> purchaseSetList = _purchaseSetBll.GetPurchaseSetList();
                foreach (KeyValuePair <PurchasingInfo, List <PurchasingDetailInfo> > keyValuePair in dictPurchase)
                {
                    keyValuePair.Key.PurchasingNo = DataAccessor.GetCode(BaseInfo.CodeType.PH);
                    var pInfo = keyValuePair.Key;
                    IList <PurchasingDetailInfo> plist = keyValuePair.Value;
                    //pInfo.IsOut = true;
                    _purchasing.PurchasingInsert(pInfo);

                    //非赠品采购商品
                    IList <PurchasingDetailInfo> plist2 = plist.Where(w => w.PurchasingGoodsType != (int)PurchasingGoodsType.Gift).ToList();

                    #region [现返]
                    //如果赠送方式为总数量赠送时使用  key 主商品ID  value 额外赠送
                    var dics           = new Dictionary <string, int>();    //需赠送
                    var debitExtraDics = new Dictionary <string, int>();    //借计单已送
                    var addDetailsList = new List <PurchasingDetailInfo>(); //添加赠品
                                                                            //处理原理:
                                                                            //赠品数量=原采购数量/(买几个+送几个)*送几个
                                                                            //购买数量=原采购数量-赠品数量
                    foreach (var pdInfo in plist2)
                    {
                        var goodsBaseInfo = new GoodsInfo();
                        if (dicGoods != null)
                        {
                            bool hasKey = dicGoods.ContainsKey(pdInfo.GoodsID);
                            if (hasKey)
                            {
                                goodsBaseInfo = dicGoods.FirstOrDefault(w => w.Key == pdInfo.GoodsID).Value;
                            }
                        }
                        PurchasingGoods purchaseSetInfo = pg.FirstOrDefault(w => w.GoodsId == goodsBaseInfo.GoodsId && w.WarehouseId == pInfo.WarehouseID);
                        if (purchaseSetInfo == null)
                        {
                            continue;
                        }
                        IList <PurchasePromotionInfo> ppList = _purchasePromotionBll.GetPurchasePromotionList(purchaseSetInfo.PromotionId, purchaseSetInfo.GoodsId, purchaseSetInfo.WarehouseId, pInfo.PurchasingFilialeId, (int)PurchasePromotionType.Back);
                        PurchasePromotionInfo         ppInfo = ppList.FirstOrDefault(w => w.GivingCount > 0 && w.StartDate <= DateTime.Now && w.EndDate >= DateTime.Now);
                        if (ppInfo != null)
                        {
                            #region  新增
                            if (!ppInfo.IsSingle)  //按商品总数量进行赠送
                            {
                                if (!dics.ContainsKey(goodsBaseInfo.GoodsName))
                                {
                                    var dataList = plist2.Where(act => act.GoodsName == goodsBaseInfo.GoodsName).OrderByDescending(act => act.PlanQuantity).ToList();
                                    //余数
                                    var extra = dataList.Sum(act => Convert.ToInt32(act.PlanQuantity)) % (ppInfo.BuyCount + ppInfo.GivingCount);
                                    if (extra == ppInfo.BuyCount)
                                    {
                                        dataList[0].PlanQuantity += ppInfo.GivingCount;
                                    }
                                    else
                                    {
                                        //应赠送次数
                                        int actquantity = extra % (ppInfo.BuyCount + ppInfo.GivingCount);
                                        if (actquantity >= (ppInfo.BuyCount / float.Parse("2.0")))
                                        {
                                            dataList[0].PlanQuantity = dataList[0].PlanQuantity + (ppInfo.BuyCount + ppInfo.GivingCount) - actquantity;
                                        }
                                    }
                                    //总商品赠送商品总数
                                    var sumTotal = dataList.Sum(act => Convert.ToInt32(act.PlanQuantity)) / (ppInfo.BuyCount + ppInfo.GivingCount);
                                    dics.Add(goodsBaseInfo.GoodsName, sumTotal);
                                    if (dics[goodsBaseInfo.GoodsName] > 0)
                                    {
                                        foreach (var item in dataList.OrderByDescending(act => act.PlanQuantity))
                                        {
                                            var count = dics[item.GoodsName] - Convert.ToInt32(item.PlanQuantity);
                                            if (count > 0)  //赠品数>购买数
                                            {
                                                item.Price = 0;
                                                item.PurchasingGoodsType = (int)PurchasingGoodsType.Gift;
                                                item.RealityQuantity     = 0;
                                                dics[item.GoodsName]     = count;
                                            }
                                            else if (count < 0)
                                            {
                                                addDetailsList.Add(new PurchasingDetailInfo
                                                {
                                                    PurchasingGoodsID   = Guid.NewGuid(),
                                                    PurchasingID        = item.PurchasingID,
                                                    GoodsID             = item.GoodsID,
                                                    GoodsName           = item.GoodsName,
                                                    GoodsCode           = item.GoodsCode,
                                                    Specification       = item.Specification,
                                                    CompanyID           = item.CompanyID,
                                                    Price               = 0,
                                                    PlanQuantity        = dics[item.GoodsName],
                                                    PurchasingGoodsType = (int)PurchasingGoodsType.Gift,
                                                    RealityQuantity     = 0,
                                                    State               = item.State,
                                                    Description         = "",
                                                    Units               = item.Units,
                                                    SixtyDaySales       = item.SixtyDaySales,
                                                    ThirtyDaySales      = item.ThirtyDaySales,
                                                    ElevenDaySales      = item.ElevenDaySales,
                                                    CPrice              = 0
                                                });
                                                item.RealityQuantity = 0;
                                                item.PlanQuantity    = Math.Abs(count);
                                                dics[item.GoodsName] = 0;
                                            }
                                            else
                                            {
                                                item.Price = 0;
                                                item.PurchasingGoodsType = (int)PurchasingGoodsType.Gift;
                                                item.RealityQuantity     = 0;
                                                item.CPrice          = 0;
                                                dics[item.GoodsName] = 0;
                                            }
                                            if (dics[item.GoodsName] == 0)
                                            {
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                            else  //按单光度
                            {
                                //应赠余数
                                var actquantity = pdInfo.PlanQuantity % (ppInfo.BuyCount + ppInfo.GivingCount);
                                if (actquantity > 0)
                                {
                                    if (actquantity >= ((ppInfo.BuyCount + ppInfo.GivingCount) / float.Parse("2.0")))
                                    {
                                        pdInfo.PlanQuantity = pdInfo.PlanQuantity + (ppInfo.BuyCount + ppInfo.GivingCount) - actquantity;
                                    }
                                }
                                int pQuantity = int.Parse(pdInfo.PlanQuantity.ToString(CultureInfo.InvariantCulture));
                                //赠品数量=原采购数量/(买几个+送几个)*送几个
                                int quantity = pQuantity / (ppInfo.BuyCount + ppInfo.GivingCount) * ppInfo.GivingCount;
                                if (quantity > 0)
                                {
                                    var oldPurchasingDetailInfo = plist.FirstOrDefault(w => w.PurchasingGoodsID == pdInfo.PurchasingGoodsID);
                                    if (oldPurchasingDetailInfo != null)
                                    {
                                        //购买数量=原采购数量-赠品数量
                                        oldPurchasingDetailInfo.PlanQuantity -= (quantity);
                                    }

                                    var purchasingDetailInfo = plist.FirstOrDefault(w => w.GoodsID == pdInfo.GoodsID && w.PurchasingGoodsType == (int)PurchasingGoodsType.Gift);
                                    if (purchasingDetailInfo != null)
                                    {
                                        //在原赠品数量累加
                                        purchasingDetailInfo.PlanQuantity += (quantity);
                                    }
                                    else
                                    {
                                        purchasingDetailInfo = new PurchasingDetailInfo
                                        {
                                            PurchasingGoodsID   = Guid.NewGuid(),
                                            PurchasingID        = pInfo.PurchasingID,
                                            GoodsID             = pdInfo.GoodsID,
                                            GoodsName           = pdInfo.GoodsName,
                                            GoodsCode           = pdInfo.GoodsCode,
                                            Specification       = pdInfo.Specification,
                                            CompanyID           = pdInfo.CompanyID,
                                            Price               = 0,
                                            PlanQuantity        = (quantity),
                                            PurchasingGoodsType = (int)PurchasingGoodsType.Gift,
                                            RealityQuantity     = 0,
                                            State               = 0,
                                            Description         = "",
                                            Units               = pdInfo.Units,
                                            SixtyDaySales       = pdInfo.SixtyDaySales,
                                            ThirtyDaySales      = pdInfo.ThirtyDaySales,
                                            ElevenDaySales      = pdInfo.ElevenDaySales
                                        };
                                        addDetailsList.Add(purchasingDetailInfo);
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                    #endregion

                    #region [非现返生成借记单]

                    var debitNoteDetailList = new List <DebitNoteDetailInfo>();
                    foreach (var pdInfo in plist2)
                    {
                        var goodsBaseInfo = new GoodsInfo();
                        if (dicGoods != null)
                        {
                            bool hasKey = dicGoods.ContainsKey(pdInfo.GoodsID);
                            if (hasKey)
                            {
                                goodsBaseInfo = dicGoods.FirstOrDefault(w => w.Key == pdInfo.GoodsID).Value;
                            }
                        }
                        PurchasingGoods purchaseSetInfo = pg.FirstOrDefault(w => w.GoodsId == goodsBaseInfo.GoodsId && w.WarehouseId == pInfo.WarehouseID);
                        if (purchaseSetInfo != null)
                        {
                            IList <PurchasePromotionInfo> ppList = _purchasePromotionBll.GetPurchasePromotionList(purchaseSetInfo.PromotionId, purchaseSetInfo.GoodsId, purchaseSetInfo.WarehouseId, pInfo.PurchasingFilialeId, (int)PurchasePromotionType.NoBack);
                            PurchasePromotionInfo         ppInfo = ppList.FirstOrDefault(w => w.GivingCount > 0 && w.StartDate <= DateTime.Now && w.EndDate >= DateTime.Now);
                            if (ppInfo != null)
                            {
                                int pQuantity = Convert.ToInt32(pdInfo.PlanQuantity);
                                //赠品数量=原采购数量/买几个*送几个
                                #region  新增
                                //按商品总数量进行赠送
                                if (!ppInfo.IsSingle && dicGoods != null)
                                {
                                    if (!dics.ContainsKey(goodsBaseInfo.GoodsName))
                                    {
                                        var dataList = plist2.Where(act => act.GoodsName == goodsBaseInfo.GoodsName).ToList();
                                        //单光度赠送商品总数
                                        var total = dataList.Sum(act => (Convert.ToInt32(act.PlanQuantity) / (ppInfo.BuyCount + ppInfo.GivingCount)));
                                        //总商品赠送商品总数
                                        var sumTotal = dataList.Sum(act => Convert.ToInt32(act.PlanQuantity)) / (ppInfo.BuyCount + ppInfo.GivingCount);
                                        if (sumTotal > total)
                                        {
                                            dics.Add(goodsBaseInfo.GoodsName, sumTotal);
                                        }
                                    }
                                }
                                #endregion
                                int quantity = pQuantity / ppInfo.BuyCount * ppInfo.GivingCount;
                                if (quantity > 0)
                                {
                                    var debitNoteDetailInfo = new DebitNoteDetailInfo
                                    {
                                        PurchasingId  = pInfo.PurchasingID,
                                        GoodsId       = pdInfo.GoodsID,
                                        GoodsName     = pdInfo.GoodsName,
                                        Specification = pdInfo.Specification,
                                        GivingCount   = quantity,
                                        ArrivalCount  = 0,
                                        Price         = pdInfo.Price,
                                        State         = 0,
                                        Amount        = quantity * pdInfo.Price,
                                        Memo          = "",
                                        Id            = Guid.NewGuid()
                                    };
                                    debitNoteDetailList.Add(debitNoteDetailInfo);
                                }
                            }
                        }
                    }

                    if (addDetailsList.Count > 0)
                    {
                        foreach (var purchasingDetailInfo in addDetailsList)
                        {
                            purchasingDetailInfo.Price = 0;
                            plist.Add(purchasingDetailInfo);
                        }
                    }
                    #endregion

                    #region 处理额外赠送商品
                    foreach (var dic in dics)
                    {
                        KeyValuePair <string, int> dic1 = dic;
                        if (debitExtraDics.ContainsKey(dic.Key))
                        {
                            var total = dic1.Value - debitExtraDics[dic.Key];
                            if (total > 0)
                            {
                                var data = debitNoteDetailList.Where(act => act.GoodsName == dic1.Key).OrderByDescending(act => act.GivingCount).ToList();
                                for (int i = 0; i < total; i++)
                                {
                                    data[i].GivingCount += 1;
                                    data[i].Amount       = data[i].Price * data[i].GivingCount;
                                }
                            }
                        }
                    }
                    #endregion

                    foreach (var item in plist.Where(act => act.Price == 0 && act.PurchasingGoodsType != (int)PurchasingGoodsType.Gift))
                    {
                        var info = plist.FirstOrDefault(act => act.GoodsName == item.GoodsName && act.Price > 0);
                        item.Price = info != null ? info.Price : 0;
                    }
                    //保存采购单明细
                    _purchasingDetailBll.Save(plist);

                    //添加借记单
                    if (debitNoteDetailList.Count > 0)
                    {
                        var debitNoteInfo = new DebitNoteInfo
                        {
                            PurchasingId      = pInfo.PurchasingID,
                            PurchaseGroupId   = pInfo.PurchaseGroupId,
                            PurchasingNo      = pInfo.PurchasingNo,
                            CompanyId         = pInfo.CompanyID,
                            PresentAmount     = debitNoteDetailList.Sum(w => w.Amount),
                            CreateDate        = DateTime.Now,
                            FinishDate        = DateTime.MinValue,
                            State             = (int)DebitNoteState.ToPurchase,
                            WarehouseId       = pInfo.WarehouseID,
                            Memo              = "",
                            PersonResponsible = pInfo.PersonResponsible,
                            NewPurchasingId   = Guid.Empty
                        };
                        _debitNoteBll.AddPurchaseSetAndDetail(debitNoteInfo, debitNoteDetailList);
                    }
                }

                if (dicGoods != null && dicGoods.Count > 0)
                {
                    var completeGoodsIds = dicGoods.Select(keyValuePair => keyValuePair.Value.GoodsId).ToList();
                    foreach (var item in pg.Where(ent => completeGoodsIds.Contains(ent.GoodsId)))
                    {
                        DataAccessor.UpdateLastPurchasingDate(item.WarehouseId, item.HostingFilialeId, item.GoodsId, DateTime.Now);
                    }
                }
            }
        }
Example #15
0
        public static void RunTask()
        {
            var now  = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
            int week = GetWeek(now);

            if (week == 1 || week == 3)
            {
                #region --> 今天周一或周三
                var pg                      = DataAccessor.GetPurchasingGoodsList(TaskType.All);
                var goodsIdList             = pg.Select(w => w.GoodsId).Distinct().ToList();
                IList <GoodsInfo> goodsList = _goodsCenterSao.GetGoodsListByGoodsIds(goodsIdList).ToList();
                if (goodsList.Count == 0)
                {
                    return;
                }

                var dictPurchase   = new Dictionary <PurchasingInfo, List <PurchasingDetailInfo> >();
                var purchasingSets = new List <PurchasingGoods>();
                pg = pg.Where(w => w.StockUpDay == week && w.HostingFilialeId != Guid.Empty).ToList();
                var goodsDics     = goodsList.ToDictionary(k => k.GoodsId, v => v);
                var realGoodsDics = new Dictionary <Guid, GoodsInfo>();

                Dictionary <Guid, List <Guid> > goodsWithRealGoods = new Dictionary <Guid, List <Guid> >();
                foreach (var warehouseIdGroup in pg.GroupBy(act => new { act.WarehouseId, act.HostingFilialeId }))
                {
                    var warehouseId          = warehouseIdGroup.Key.WarehouseId;
                    var hostingFilialeId     = warehouseIdGroup.Key.HostingFilialeId;
                    var stockStatistics      = WMSSao.GetStockStatisticsDtosForAuto(warehouseId, hostingFilialeId);
                    var planPurchasingGoods1 = DataAccessor.GetAllSumPurchasingQuantity(warehouseId, hostingFilialeId).ToDictionary(k => k.GoodsID, v => v.PurchasingQuantity);
                    foreach (var companyIdGroup in warehouseIdGroup.GroupBy(act => act.CompanyId))
                    {
                        var purchaseGroupIds = companyIdGroup.Select(w => w.PurchaseGroupId).Distinct().ToList();
                        foreach (var purchaseGroupId in purchaseGroupIds)
                        {
                            //采购分组
                            var pgList             = companyIdGroup.Where(w => w.PurchaseGroupId == purchaseGroupId).ToList();
                            var personResponsibles = pgList.Select(w => w.PersonResponsible).Distinct().ToList();
                            foreach (var personResponsible in personResponsibles)
                            {
                                var prList = pgList.Where(w => w.PersonResponsible == personResponsible).ToList();
                                if (prList.Count > 0)
                                {
                                    foreach (var prInfo in prList.Where(ent => goodsDics.ContainsKey(ent.GoodsId)))
                                    {
                                        GoodsInfo goodsInfo = goodsDics[prInfo.GoodsId];
                                        if (goodsInfo == null)
                                        {
                                            continue;
                                        }
                                        prInfo.GoodsName = goodsInfo.GoodsName;
                                        prInfo.GoodsCode = goodsInfo.GoodsCode;
                                        prInfo.Units     = goodsInfo.Units;
                                        if (goodsInfo.ExpandInfo != null)
                                        {
                                            prInfo.PackQuantity = goodsInfo.ExpandInfo.PackCount;
                                        }
                                        List <Guid> realGoodsIdList;
                                        if (goodsWithRealGoods.ContainsKey(prInfo.GoodsId))
                                        {
                                            realGoodsIdList = goodsWithRealGoods[prInfo.GoodsId];
                                        }
                                        else
                                        {
                                            realGoodsIdList = _goodsCenterSao.GetRealGoodsIdsByGoodsId(prInfo.GoodsId).ToList();
                                            if (realGoodsIdList.Count == 0)
                                            {
                                                realGoodsIdList.Add(prInfo.GoodsId);
                                            }
                                            goodsWithRealGoods.Add(prInfo.GoodsId, realGoodsIdList);
                                        }

                                        int stockUpDays = prInfo.FilingForm == 1 ? GetStockUpDays(prInfo) : prInfo.FilingTrigger;
                                        if (stockUpDays == 0)
                                        {
                                            continue;
                                        }
                                        var childGoodsSaleAll = GetChildGoodsSaleTotalByDays(realGoodsIdList, new List <Guid> {
                                            prInfo.WarehouseId
                                        }, stockUpDays, now);

                                        if (childGoodsSaleAll.Count > 0)
                                        {
                                            foreach (var sale in childGoodsSaleAll)
                                            {
                                                sale.PlanPurchasingquantity = sale.WeightedAverageSaleQuantity * stockUpDays;
                                                if (sale.PlanPurchasingquantity > 0)
                                                {
                                                    //个位数0<x<=5向上取为5,个位数为6<x<=9向上取整为10
                                                    char[] temp       = sale.PlanPurchasingquantity.ToString(CultureInfo.InvariantCulture).ToArray();
                                                    int    unitsDigit = Convert.ToInt32(temp[temp.Length - 1]);
                                                    if (unitsDigit > 0 && unitsDigit < 5)
                                                    {
                                                        sale.PlanPurchasingquantity += 5 - unitsDigit;
                                                    }
                                                    else if (unitsDigit > 5)
                                                    {
                                                        sale.PlanPurchasingquantity += 10 - unitsDigit;
                                                    }
                                                }

                                                //计算当前的采购商品数量,包含扣除的已经采购完成和部分采购完成和赠品类型
                                                sale.SubtractPurchasingQuantity = planPurchasingGoods1.ContainsKey(sale.GoodsId)? planPurchasingGoods1[sale.GoodsId] : 0;

                                                //计算当前仓库存货数量
                                                sale.NonceWarehouseStockQuantity = stockStatistics.Where(ent => ent.RealGoodsId == sale.GoodsId).Sum(info => info.CurrentStock + info.UppingQuantity - info.RequireQuantity - info.SubtotalQuantity);
                                                if (prInfo.FilingForm == 2)
                                                {
                                                    //2触发报备
                                                    //计算是否满足不足数量
                                                    double planQuantity    = sale.WeightedAverageSaleQuantity * prInfo.Insufficient;
                                                    double realityQuantity = Math.Ceiling(planQuantity - sale.SubtractPurchasingQuantity - sale.NonceWarehouseStockQuantity);
                                                    if (realityQuantity <= 0)
                                                    {
                                                        //无需报备
                                                        continue;
                                                    }
                                                }
                                                if (sale.RealityNeedPurchasingQuantity > 0)
                                                {
                                                    var            salesinfo = DataAccessor.GetChildGoodsSale(sale.GoodsId, warehouseId, sale.HostingFilialeId, DateTime.Now);
                                                    PurchasingInfo existingPurchasingInfo = null;
                                                    bool           isExist = false;
                                                    if (dictPurchase.Keys.Count > 0)
                                                    {
                                                        existingPurchasingInfo = dictPurchase.Keys.FirstOrDefault(act => act.PersonResponsible == personResponsible && act.PurchasingFilialeId == hostingFilialeId && act.WarehouseID == warehouseId && companyIdGroup.Key == act.CompanyID);
                                                    }
                                                    var detailList = new List <PurchasingDetailInfo>();
                                                    if (existingPurchasingInfo == null)
                                                    {
                                                        existingPurchasingInfo = new PurchasingInfo
                                                        {
                                                            PurchasingID        = Guid.NewGuid(),
                                                            CompanyID           = companyIdGroup.Key,
                                                            CompanyName         = prList[0].CompanyName,
                                                            WarehouseID         = warehouseId,
                                                            PurchasingState     = (int)PurchasingState.NoSubmit,
                                                            PurchasingType      = (int)PurchasingType.AutoStock,
                                                            PersonResponsible   = personResponsible,
                                                            PurchaseGroupId     = purchaseGroupId,
                                                            StartTime           = DateTime.Now,
                                                            EndTime             = DateTime.MaxValue,
                                                            Description         = string.Format("[采购类别:{0};系统自动报备]", EnumAttribute.GetKeyName(PurchasingType.Custom)),
                                                            FilialeID           = hostingFilialeId,
                                                            PurchasingFilialeId = hostingFilialeId
                                                        };
                                                    }
                                                    else
                                                    {
                                                        isExist    = true;
                                                        detailList = dictPurchase[existingPurchasingInfo];
                                                    }
                                                    var purchasingDetailInfo = new PurchasingDetailInfo
                                                    {
                                                        PurchasingID      = existingPurchasingInfo.PurchasingID,
                                                        GoodsID           = sale.GoodsId,
                                                        GoodsName         = prInfo.GoodsName,
                                                        GoodsCode         = prInfo.GoodsCode,
                                                        Specification     = sale.Specification,
                                                        CompanyID         = companyIdGroup.Key,
                                                        Price             = prInfo.Price,
                                                        PlanQuantity      = sale.RealityNeedPurchasingQuantity,
                                                        RealityQuantity   = 0,
                                                        State             = 0,
                                                        Units             = prInfo.Units,
                                                        PurchasingGoodsID = Guid.NewGuid(),
                                                        SixtyDaySales     = salesinfo.SixtyDaySales,
                                                        ThirtyDaySales    = salesinfo.ThirtyDaySales,
                                                        ElevenDaySales    = salesinfo.ElevenDaySales,
                                                        CPrice            = prInfo.Price
                                                    };
                                                    detailList.Add(purchasingDetailInfo);

                                                    if (!realGoodsDics.ContainsKey(sale.GoodsId))
                                                    {
                                                        realGoodsDics.Add(sale.GoodsId, goodsInfo);
                                                    }
                                                    if (detailList.Count > 0 && !isExist)
                                                    {
                                                        dictPurchase.Add(existingPurchasingInfo, detailList);
                                                    }
                                                }
                                            }
                                            if (!purchasingSets.Any(act => act.WarehouseId == warehouseId && act.HostingFilialeId == hostingFilialeId && act.GoodsId == prInfo.GoodsId))
                                            {
                                                purchasingSets.Add(prInfo);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                PurchasingPromotion(dictPurchase, realGoodsDics, purchasingSets);
                #endregion
            }
        }
Example #16
0
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="purchasingID"></param>
        /// <returns></returns>
        public List <PurchasingDetailInfo> Select(Guid purchasingID)
        {
            var strSql = new StringBuilder(@"
SELECT 
	[PurchasingID]
	,[GoodsID]
	,[GoodsName]
	,[GoodsCode]
	,[Specification]
	,[CompanyID]
	,[Price]
	,[PlanQuantity]
	,[RealityQuantity]
	,[State]
	,[Description]
	,[Units]
	,[PurchasingGoodsID]
	,[PurchasingGoodsType]
	,[DayAvgStocking]
	,[PlanStocking]
	,[SixtyDays]
	,[IsException]
	,[SixtyDaySales]
	,[ThirtyDaySales]
	,[ElevenDaySales]
FROM [lmShop_PurchasingDetail]");

            strSql.Append(" WHERE [PurchasingID]='").Append(purchasingID).Append("'");

            var pList = new List <PurchasingDetailInfo>();

            using (var rdr = SqlHelper.ExecuteReader(GlobalConfig.ERP_DB_NAME, true, strSql.ToString()))
            {
                if (rdr != null)
                {
                    while (rdr.Read())
                    {
                        var pinfo = new PurchasingDetailInfo
                        {
                            PurchasingID        = rdr["PurchasingID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["PurchasingID"].ToString()),
                            GoodsID             = rdr["GoodsID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["GoodsID"].ToString()),
                            GoodsName           = rdr["GoodsName"] == DBNull.Value ? string.Empty : rdr["GoodsName"].ToString(),
                            GoodsCode           = rdr["GoodsCode"] == DBNull.Value ? string.Empty : rdr["GoodsCode"].ToString(),
                            Specification       = rdr["Specification"] == DBNull.Value ? string.Empty : rdr["Specification"].ToString(),
                            CompanyID           = rdr["CompanyID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["CompanyID"].ToString()),
                            Price               = rdr["Price"] == DBNull.Value ? -1 : decimal.Parse(rdr["Price"].ToString()),
                            PlanQuantity        = rdr["PlanQuantity"] == DBNull.Value ? 0 : double.Parse(rdr["PlanQuantity"].ToString()),
                            RealityQuantity     = rdr["RealityQuantity"] == DBNull.Value ? 0 : double.Parse(rdr["RealityQuantity"].ToString()),
                            State               = rdr["State"] == DBNull.Value ? 0 : int.Parse(rdr["State"].ToString()),
                            Description         = rdr["Description"] == DBNull.Value ? string.Empty : rdr["Description"].ToString(),
                            Units               = rdr["Units"] == DBNull.Value ? string.Empty : rdr["Units"].ToString(),
                            PurchasingGoodsID   = rdr["PurchasingGoodsID"] == DBNull.Value ? Guid.Empty : new Guid(rdr["PurchasingGoodsID"].ToString()),
                            PurchasingGoodsType = rdr["PurchasingGoodsType"] == DBNull.Value ? 0 : int.Parse(rdr["PurchasingGoodsType"].ToString()),
                            DayAvgStocking      = rdr["DayAvgStocking"] == DBNull.Value ? 0 : double.Parse(rdr["DayAvgStocking"].ToString()),
                            PlanStocking        = rdr["PlanStocking"] == DBNull.Value ? 0 : double.Parse(rdr["PlanStocking"].ToString()),
                            SixtyDays           = rdr["SixtyDays"] == DBNull.Value ? 0 : int.Parse(rdr["SixtyDays"].ToString()),
                            IsException         = rdr["IsException"] != DBNull.Value && bool.Parse(rdr["IsException"].ToString()),
                            SixtyDaySales       = rdr["SixtyDaySales"] == DBNull.Value ? 0 : int.Parse(rdr["SixtyDaySales"].ToString()),
                            ThirtyDaySales      = rdr["ThirtyDaySales"] == DBNull.Value ? 0 : int.Parse(rdr["ThirtyDaySales"].ToString()),
                            ElevenDaySales      = rdr["ElevenDaySales"] == DBNull.Value ? 0 : int.Parse(rdr["ElevenDaySales"].ToString()),
                        };
                        pList.Add(pinfo);
                    }
                }
            }
            return(pList);
        }
Example #17
0
        /// <summary>
        /// 更改供应商的操作
        /// </summary>
        /// <param name="purasingId"></param>
        /// <param name="purasingGoodsId"></param>
        /// <param name="companyId"></param>
        /// <param name="companyName"></param>
        /// <param name="personnelInfo">当前操作人信息</param>
        /// <returns></returns>
        public string UpdatePurchsingCompany(Guid purasingId, Guid purasingGoodsId, Guid companyId, string companyName, PersonnelInfo personnelInfo)
        {
            PurchasingInfo       pInfo = _purchasingDao.GetPurchasingById(purasingId);
            PurchasingDetailInfo dInfo = _purchasingDetailDao.GetPurchGoodsId(purasingId, purasingGoodsId);
            //查出未提交下的该仓库下的类别下的未提交订单下的供应商
            IList <PurchasingInfo> dlist = _purchasingDao.GetPurchasingList(DateTime.MinValue, DateTime.MinValue, companyId, pInfo.WarehouseID, pInfo.PurchasingFilialeId,
                                                                            PurchasingState.NoSubmit, (PurchasingType)System.Enum.Parse(typeof(PurchasingType), string.Format("{0}", pInfo.PurchasingType)), "", Guid.Empty, Guid.Empty).Where(act => act.FilialeID == pInfo.FilialeID).ToList();

            if (dlist.Count >= 1)//如果存在改供应商的采购单就往改采购单里面添加商品
            {
                //如果存在多个默认取第一个
                PurchasingInfo oldPinfo             = dlist[0];
                IList <PurchasingDetailInfo> pdList = _purchasingDetailDao.Select(oldPinfo.PurchasingID);//获取该采购单下面的商品集合
                bool flag = false;
                foreach (PurchasingDetailInfo detailInfo in pdList)
                {
                    try
                    {
                        //如果该采购单下存在同商品id同价格同规格的商品那就累加数量
                        if (dInfo.GoodsID == detailInfo.GoodsID && dInfo.GoodsCode == detailInfo.GoodsCode && dInfo.Specification == detailInfo.Specification && dInfo.Price == detailInfo.Price)
                        {
                            detailInfo.PlanQuantity = detailInfo.PlanQuantity + dInfo.PlanQuantity - dInfo.RealityQuantity;
                            _purchasingDetailDao.UpdateRealQuantity(detailInfo, detailInfo.PurchasingGoodsID);
                            flag = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        SAL.LogCenter.LogService.LogError(string.Format("采购单更新供应商异常!purasingId={0}, purasingGoodsId={1}, companyId={2}, companyName={3}", purasingId, purasingGoodsId, companyId, companyName), "采购管理", ex);
                    }
                }
                if (flag == false)
                {
                    _purchasingDetailDao.DeleteByGoodsId(dInfo.PurchasingID, dInfo.GoodsID, dInfo.PurchasingGoodsID);
                    dInfo.PurchasingID = oldPinfo.PurchasingID;
                    dInfo.CompanyID    = companyId;
                    //没有改商品直接插入改商品
                    Insert(dInfo);
                }
            }
            else
            {
                Guid pid   = Guid.NewGuid();
                var  sInfo = new PurchasingInfo(pid, new CodeManager().GetCode(CodeType.PH), companyId, companyName, pInfo.FilialeID, pInfo.WarehouseID, (int)PurchasingState.NoSubmit
                                                , pInfo.PurchasingType, DateTime.Now, DateTime.MaxValue, "[更改供应商,操作人:" + personnelInfo.RealName + "]")
                {
                    PmId                = pInfo.PmId,
                    ArrivalTime         = pInfo.ArrivalTime,
                    Director            = pInfo.Director,
                    PersonResponsible   = personnelInfo.PersonnelId,
                    PurchasingFilialeId = pInfo.PurchasingFilialeId,
                    //IsOut = true
                };
                _purchasingDao.PurchasingInsert(sInfo);
                _purchasingDetailDao.DeleteByGoodsId(dInfo.PurchasingID, dInfo.GoodsID, dInfo.PurchasingGoodsID);
                dInfo.PurchasingID = pid;
                dInfo.CompanyID    = companyId;
                Insert(dInfo);
            }
            return("");
        }