/// <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); }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); } }
/// <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 } }
/// <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); }
/// <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 + ");"); } }
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 }
/// <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); }
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); } } } }
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 } }
/// <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); }
/// <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(""); }