/// <summary> /// 入库操作 /// </summary> /// <param name="entryInfo"></param> /// <param name="entryDetailInfos"></param> /// <param name="errorMsg"></param> /// <returns></returns> internal void DoEntry(I_Entry entryInfo, List <I_EntryDetail> entryDetailInfos, ref string errorMsg) { //1 先插入主表 I_Entry tempEntry = (from e in db.I_Entry where e.EntryCode == entryInfo.EntryCode select e).FirstOrDefault(); if (tempEntry == null) { dalContext.II_EntryDAL.Add(entryInfo); } foreach (I_EntryDetail info in entryDetailInfos) { I_EntryDetail tempEntryDetail = (from e in db.I_EntryDetail where e.EntryDetailCode == info.EntryDetailCode select e).FirstOrDefault(); if (tempEntryDetail != null) { info.EntryDetailCode = (Convert.ToInt32(info.EntryDetailCode) + 1).ToString(); } //2. 再插入从表信息 红充流程注意记录RedEntryDetailCode信息 dalContext.II_EntryDetailDAL.Add(info); //3. 保存剩余流水表 dalContext.II_SurplusDAL.SaveEntrySurplusInfo(info, entryInfo.EntryType, ref errorMsg); } }
/// <summary> /// 修改入库价格信息 /// </summary> /// <param name="entryInfo"></param> /// <returns></returns> public bool EditEntryDetail(I_EntryDetail info, ref string errorMsg) { //创建事务 using (var tran = db.Database.BeginTransaction()) { try { new I_EntryDetailDAL().Modify(info, "Remark", "TotalPrice"); I_InventoryRecord inInfo = new I_InventoryRecord(); inInfo.EntryDetailCode = info.EntryDetailCode; inInfo.SurplusPrice = info.TotalPrice; inInfo.ID = (from u in db.I_InventoryRecord where u.EntryDetailCode == info.EntryDetailCode select u.ID).First(); new I_InventoryRecordDAL().Modify(inInfo, "SurplusPrice"); tran.Commit(); //提交事务 return(true); } catch (Exception ex) { if (tran != null) { tran.Rollback(); //回滚事务 } errorMsg = "修改入库价格失败! 操作已取消!~~" + ex.Message; return(false); } } }
/// <summary> /// 红充操作 /// </summary> /// <param name="newEntryInfo">新入库单</param> /// <param name="orientryDetailInfo">原入单从表</param> /// <param name="newEntryDetailInfo">新入库单从表</param> /// <param name="errorMsg"></param> /// <returns></returns> public bool EntryRedOperate(I_Entry newEntryInfo, I_EntryDetail orientryDetailInfo, I_EntryDetail newEntryDetailInfo, ref string errorMsg) { //创建事务 using (var tran = db.Database.BeginTransaction()) { try { //修改红冲入库单号 orientryDetailInfo 不能被EF框架跟踪 dalContext.II_EntryDetailDAL.Modify(orientryDetailInfo, "RedEntryDetailCode"); //更新被红充编码 List <I_EntryDetail> entryDetailInfos = new List <I_EntryDetail>(); entryDetailInfos.Add(newEntryDetailInfo); this.DoEntry(newEntryInfo, entryDetailInfos, ref errorMsg); //做入库操作 tran.Commit(); //提交事务 return(true); } catch (Exception ex) { if (tran != null) { tran.Rollback(); //回滚事务 } errorMsg = "入库操作失败! 操作已取消!~~" + ex.Message; return(false); } } }
/// <summary> /// 保存入库结余信息 /// TODO: 1.先查询入库结余 2.如果有则更新结余 3.如没有则新增结余 4.插入出库入库流水 /// </summary> /// <param name="info">入库从表</param> public void SaveEntrySurplusInfo(I_EntryDetail info, string strEntryType, ref string errorMsg) { try { //查结余 注意查原剩余信息时候 要用非追踪查询 否则修改失败 I_Surplus surplusinfo = base.GetModelWithOutTrace(s => s.BatchNo == info.BatchNo && s.MaterialID == info.MaterialID && s.StorageCode == info.StorageCode && s.RealBatchNo == info.RealBatchNo); if (surplusinfo != null) //有结余数据 { surplusinfo.EntryCounts = surplusinfo.EntryCounts + info.EntryCounts; surplusinfo.Surplus = surplusinfo.Surplus + info.EntryCounts; surplusinfo.SurplusPrice = surplusinfo.SurplusPrice + info.TotalPrice; //更新结余信息 base.Modify(surplusinfo, "EntryCounts", "Surplus", "SurplusPrice"); } else { surplusinfo = new I_Surplus(); surplusinfo.BatchNo = info.BatchNo; //批次号 surplusinfo.RealBatchNo = info.RealBatchNo; //真实批次号 surplusinfo.EntryCounts = info.EntryCounts; //入库数量 surplusinfo.MaterialID = info.MaterialID; //物资ID surplusinfo.StorageCode = info.StorageCode; //仓储ID surplusinfo.Surplus = info.EntryCounts; // 剩余数量 = 入库数量 surplusinfo.SurplusPrice = info.TotalPrice; // 剩余金额 = 入库金额 surplusinfo.ValidityDate = info.ValidityDate; //有效期 base.Add(surplusinfo); //新增结余信息 } #region 2.记录入库信息 I_InventoryRecord record = new I_InventoryRecord(); record.BatchNo = info.BatchNo; //批次号 record.RealBatchNo = info.RealBatchNo; //真实批次号 record.DeliveryEntryType = strEntryType; //出入库类型 record.EntryDetailCode = info.EntryDetailCode; //入库详细编码 record.Is_Entry = true; //入库标识 record.MaterialID = info.MaterialID; //物资编码 record.OperatorDateTime = info.EntryDate; //入库日期 record.StorageCode = info.StorageCode; //仓储编码 record.OriginalSurplus = surplusinfo.Surplus - info.EntryCounts; // 原结余数量= 当前库存结余数量-入库数量 record.ChangeSurplus = info.EntryCounts; //改变数量=入库数量 record.Surplus = surplusinfo.Surplus; //当前库存结余数量 record.SurplusPrice = surplusinfo.SurplusPrice; //当前库存结余价格 record.OperatorCode = info.OperatorCode; //操作人员编码 //插入出入流水 dalContext.II_InventoryRecordDAL.Add(record); #endregion } catch (Exception e) { errorMsg = "结余操作失败!原因: " + e.Message; throw new Exception(errorMsg); } }
public ActionResult SaveEntry() { string sEntryDetailInfo = Request.Form["sEntryDetailInfo"].ToString(); List <EntryDetailInfo> relist = JsonHelper.GetJsonInfoBy <List <EntryDetailInfo> >(sEntryDetailInfo); I_Entry entryInfo = new I_Entry(); entryInfo.EntryCode = DateTime.Now.AddSeconds(1).ToString("yyyyMMddHHmmss") + entryInfo.OperatorCode; //生成入库编码 entryInfo.EntryDate = Convert.ToDateTime(Request.Form["EntryDate"]); entryInfo.EntryType = "MatertalInType-1"; entryInfo.OperationTime = DateTime.Now; entryInfo.OperatorCode = UserOperateContext.Current.Session_UsrInfo.ID; entryInfo.EntryStorageID = int.Parse(Request.Form["StorageCode"]); entryInfo.Remark = Request.Form["Remark"].ToString().Trim(); List <I_EntryDetail> list = new List <Model.I_EntryDetail>(); int ind = 0; foreach (EntryDetailInfo item in relist) { ind++; I_EntryDetail detailinfo = new I_EntryDetail(); detailinfo.EntryDetailCode = entryInfo.EntryCode + entryInfo.OperatorCode + ind.ToString(); detailinfo.BatchNo = item.BatchNo; detailinfo.RealBatchNo = item.RealBatchNo; detailinfo.EntryCode = entryInfo.EntryCode; detailinfo.EntryCounts = item.EntryCounts; detailinfo.EntryDate = item.EntryDate; detailinfo.MaterialID = item.MaterialID; detailinfo.OperatorCode = UserOperateContext.Current.Session_UsrInfo.ID; detailinfo.RedEntryDetailCode = ""; detailinfo.RelatedOrderNum = item.RelatedOrderNum; detailinfo.Remark = item.Remark.Trim(); detailinfo.Specification = item.Specification; detailinfo.StorageCode = item.StorageCode; detailinfo.TotalPrice = item.TotalPrice; detailinfo.Unit = item.Unit; if (item.ValidityDateStr == "无有效期") { detailinfo.ValidityDate = DateTime.MaxValue; } else { detailinfo.ValidityDate = Convert.ToDateTime(item.ValidityDateStr); } list.Add(detailinfo); } string errorMsg = ""; if (new I_EntryBLL().EntryOperate(entryInfo, list, ref errorMsg)) { return(this.JsonResult(Utility.E_JsonResult.OK, "入库信息成功!", null, null)); } else { return(this.JsonResult(Utility.E_JsonResult.Error, errorMsg, null, null)); } }
/// <summary> /// 红充入库操作 /// </summary> /// <param name="originalID">原入库ID</param> /// <param name="newID">新入库ID</param> /// <param name="newRemark">新备注</param> /// <param name="errorMsg">错误消息</param> /// <returns>返回值</returns> public bool EntryRedOperate(string oriEntryDetailCode, string newRemark, int StroageCode, ref string errorMsg) { I_Entry entryInfo = new I_Entry(); entryInfo.EntryCode = DateTime.Now.AddSeconds(1).ToString("yyyyMMddHHmmss") + UserOperateContext.Current.Session_UsrInfo.ID; //生成入库编码 entryInfo.EntryDate = DateTime.Now; //当前时间 entryInfo.EntryType = "MatertalInType-3"; //红冲入库 entryInfo.OperationTime = DateTime.Now; //当前时间 entryInfo.OperatorCode = UserOperateContext.Current.Session_UsrInfo.ID; entryInfo.EntryStorageID = StroageCode; entryInfo.Remark = "红冲入库"; I_EntryDetail orientryDetailInfo = base.DALContext.II_EntryDetailDAL.GetModelWithOutTrace(e => e.EntryDetailCode == oriEntryDetailCode); if (orientryDetailInfo != null) { orientryDetailInfo.RedEntryDetailCode = oriEntryDetailCode; //被红充入库编码 = 自己本身的入库编码 标识为“被红充单据” } else { errorMsg = "没有查到此入库单从表,操作失败!"; return(false); } I_EntryDetail newdetailinfo = new I_EntryDetail(); newdetailinfo.EntryDetailCode = entryInfo.EntryCode + entryInfo.OperatorCode + "1"; newdetailinfo.BatchNo = orientryDetailInfo.BatchNo; newdetailinfo.RealBatchNo = orientryDetailInfo.RealBatchNo; newdetailinfo.EntryCode = entryInfo.EntryCode; newdetailinfo.EntryCounts = -(orientryDetailInfo.EntryCounts); //入库数量为负数 newdetailinfo.EntryDate = DateTime.Now; newdetailinfo.MaterialID = orientryDetailInfo.MaterialID; newdetailinfo.OperatorCode = UserOperateContext.Current.Session_UsrInfo.ID; newdetailinfo.RedEntryDetailCode = oriEntryDetailCode; //红充入库编码 newdetailinfo.RelatedOrderNum = orientryDetailInfo.RelatedOrderNum; newdetailinfo.Remark = newRemark; //新备注 newdetailinfo.Specification = orientryDetailInfo.Specification; newdetailinfo.StorageCode = orientryDetailInfo.StorageCode; newdetailinfo.TotalPrice = -(orientryDetailInfo.TotalPrice); //钱为负数 newdetailinfo.Unit = orientryDetailInfo.Unit; newdetailinfo.ValidityDate = orientryDetailInfo.ValidityDate; return(dal.EntryRedOperate(entryInfo, orientryDetailInfo, newdetailinfo, ref errorMsg)); }
public ActionResult EditEntryTotalPriceDetiail() { string EntryDetailCode = Request.Form["EntryDetailCode"].ToString(); decimal TotalPrice = Convert.ToDecimal(Request.Form["TotalPrice"]); string EntryRemark = Request.Form["EntryRemark"].ToString(); string errorMsg = ""; Model.I_EntryDetail info = new I_EntryDetail(); info.EntryDetailCode = EntryDetailCode; info.Remark = EntryRemark; info.TotalPrice = TotalPrice; if (new I_EntryBLL().EditEntryDetail(info, ref errorMsg)) { return(this.JsonResult(Utility.E_JsonResult.OK, "修改价格成功!", null, null)); } else { return(this.JsonResult(Utility.E_JsonResult.Error, errorMsg, null, null)); } }
public bool EditEntryDetail(I_EntryDetail info, ref string errorMsg) { return(dal.EditEntryDetail(info, ref errorMsg)); }
/// <summary> /// 保存出库结余信息 /// TODO:1.先查询出库结余 2.如果有则更新结余 3.如没有则提示错误 4.插入出库入库流水 /// </summary> /// <param name="info"></param> /// <param name="strEntryType"></param> public void SaveDeliverySurplusInfo(I_DeliveryDetail info, string strDeliveryType, ref string errorMsg) { decimal price = 0; try { //查结余 I_Surplus surplusinfo = base.GetModelWithOutTrace(s => s.BatchNo == info.BatchNo && s.MaterialID == info.MaterialID && s.StorageCode == info.EntryStorageCode && s.RealBatchNo == info.RealBatchNo); if (surplusinfo != null) //有结余数据 { double surplus = surplusinfo.Surplus - info.DeliveryCounts; if (surplusinfo.Surplus > 0) //剩余必须大于 0 才能计算出平均单价 { price = surplusinfo.SurplusPrice / Convert.ToDecimal(surplusinfo.Surplus); } if (surplus >= 0) { surplusinfo.Surplus = surplusinfo.Surplus - info.DeliveryCounts; } else { errorMsg = "该批次号库存不足,出库失败!"; throw new Exception(errorMsg); } surplusinfo.SurplusPrice = surplusinfo.SurplusPrice - price * Convert.ToDecimal(info.DeliveryCounts); base.Modify(surplusinfo, "Surplus", "SurplusPrice"); //更新结余信息 } else { errorMsg = "未找到该批次号商品信息,出库失败!"; throw new Exception(errorMsg); } #region 2.记录出库信息 I_InventoryRecord record = new I_InventoryRecord(); record.BatchNo = info.BatchNo; //批次号 record.RealBatchNo = info.RealBatchNo; //真实批次号 record.DeliveryEntryType = strDeliveryType; //出入库类型 record.DeliveryDetailCode = info.DeliveryDetailCode; //出库详细编码 record.Is_Entry = false; //入库标识 record.MaterialID = info.MaterialID; //物资编码 record.OperatorDateTime = info.DeliveryTime; //出库日期 record.StorageCode = info.EntryStorageCode; //仓储编码 record.OriginalSurplus = surplusinfo.Surplus + info.DeliveryCounts; // 原结余数量= 当前库存结余数量+ 出库数量 record.ChangeSurplus = -info.DeliveryCounts; //改变数量=出库数量 record.Surplus = surplusinfo.Surplus; //当前库存结余数量 record.SurplusPrice = surplusinfo.SurplusPrice; //当前库存结余价格 record.OperatorCode = info.OperatorCode; //操作人员编码 //插入出入库流水 dalContext.II_InventoryRecordDAL.Add(record); #endregion #region 3.自动生成转库入库单 I_Entry entry = new I_Entry(); // 入库主表 entry.EntryCode = info.DeliveryCode; //出库编码 entry.EntryDate = info.DeliveryTime; // 出库时间 entry.EntryStorageID = info.TargetStorageCode; //入库仓库编码=出库目的编码 if (info.RedDeliveryDetailCode != null) { entry.EntryType = "MatertalInType-3"; //红充入库单 } else { entry.EntryType = "MatertalInType-2"; //转库入库单 } entry.OperationTime = DateTime.Now; // 操作时刻 entry.OperatorCode = info.OperatorCode; entry.Remark = ""; I_EntryDetail entryDetail = new I_EntryDetail(); //入库从表 entryDetail.BatchNo = info.BatchNo; entryDetail.RealBatchNo = info.RealBatchNo; //真实批次号 entryDetail.EntryCode = info.DeliveryCode; //入库编码=出库编码 entryDetail.EntryCounts = info.DeliveryCounts; //入库数量 = 出库数量 entryDetail.EntryDate = info.DeliveryTime; // 入库时间 = 出库时间 entryDetail.EntryDetailCode = info.DeliveryDetailCode; //出库子编码 entryDetail.MaterialID = info.MaterialID; entryDetail.OperatorCode = info.OperatorCode; entryDetail.StorageCode = info.TargetStorageCode; entryDetail.TotalPrice = price; //当前库存结余价格; entryDetail.ValidityDate = surplusinfo.ValidityDate; //有效期 //如果被红充的出库信息不为空 if (info.RedDeliveryDetailCode != null) { entryDetail.RedEntryDetailCode = info.RedDeliveryDetailCode; //被红充入库编码 = 被红充出库编码 } List <I_EntryDetail> list = new List <I_EntryDetail>(); list.Add(entryDetail); //入库操作 new I_EntryDAL().DoEntry(entry, list, ref errorMsg); //调用入库流程 #endregion } catch (Exception e) { errorMsg = "结余操作失败!原因: " + e.Message; throw new Exception(errorMsg); } }