/// <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> /// 保存入库结余信息 /// 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); } }
/// <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); } }