public void AddMiscOrderDetail(MiscOrderDetail miscOrderDetail) { if (this.MiscOrderDetails == null) { this.MiscOrderDetails = new List<MiscOrderDetail>(); } this.MiscOrderDetails.Add(miscOrderDetail); }
public void BatchUpdateMiscOrderDetails(MiscOrderMaster miscOrderMaster, IList<string> addHuIdList, IList<string> deleteHuIdList) { if (miscOrderMaster.Status != CodeMaster.MiscOrderStatus.Create) { if (miscOrderMaster.Type == CodeMaster.MiscOrderType.GI) { throw new BusinessException("计划外出库单{0}的状态为{1}不能修改明细。", miscOrderMaster.MiscOrderNo, systemMgr.GetCodeDetailDescription(com.Sconit.CodeMaster.CodeMaster.MiscOrderStatus, ((int)miscOrderMaster.Status).ToString())); } else { throw new BusinessException("计划外入库单{0}的状态为{1}不能修改明细。", miscOrderMaster.MiscOrderNo, systemMgr.GetCodeDetailDescription(com.Sconit.CodeMaster.CodeMaster.MiscOrderStatus, ((int)miscOrderMaster.Status).ToString())); } } TryLoadMiscOrderDetails(miscOrderMaster); IList<MiscOrderLocationDetail> miscOrderLocationDetailList = TryLoadMiscOrderLocationDetails(miscOrderMaster); #region 新增计划外出入库明细 if (addHuIdList != null && addHuIdList.Count > 0) { #region 获取最大订单明细序号 string hql = "select max(Sequence) as seq from MiscOrderDetail where MiscOrderNo = ?"; IList maxSeqList = genericMgr.FindAll(hql, miscOrderMaster.MiscOrderNo); int maxSeq = maxSeqList != null && maxSeqList.Count > 0 && maxSeqList[0] != null ? (int)maxSeqList[0] : 0; #endregion #region 条码处理 #region 明细重复输入校验 #region 合并新增的HuId和原有的HuId IList<string> huIdList = new List<string>(); ((List<string>)huIdList).AddRange(addHuIdList); if (miscOrderLocationDetailList != null && miscOrderLocationDetailList.Count > 0) { ((List<string>)huIdList).AddRange(miscOrderLocationDetailList.Select(det => det.HuId).ToList()); } #endregion #region 检查是否重复 BusinessException businessException = new BusinessException(); var groupedHuIds = from huId in huIdList group huId by huId into result select new { HuId = result.Key, Count = result.Count() }; foreach (var groupedHuId in groupedHuIds.Where(g => g.Count > 1)) { businessException = new BusinessException(string.Format("重复扫描条码{0}。", groupedHuId.HuId)); } if (businessException.HasMessage) { throw businessException; } #endregion #endregion if (miscOrderMaster.Type == CodeMaster.MiscOrderType.GI) { #region 计划外出库 #region 库存占用 IList<InventoryOccupy> inventoryOccupyList = (from huId in addHuIdList select new InventoryOccupy { HuId = huId, //Location = miscOrderMaster.Location, 不指定库位 QualityType = miscOrderMaster.QualityType, OccupyType = CodeMaster.OccupyType.MiscOrder, OccupyReferenceNo = miscOrderMaster.MiscOrderNo }).ToList(); IList<LocationLotDetail> locationLotDetailList = this.locationDetailMgr.InventoryOccupy(inventoryOccupyList); #endregion #region 新增明细 foreach (LocationLotDetail locationLotDetail in locationLotDetailList) { MiscOrderDetail matchedMiscOrderDetail = null; #region 明细处理 if (miscOrderMaster.MiscOrderDetails != null && miscOrderMaster.MiscOrderDetails.Count > 0) { //查找匹配的明细行 matchedMiscOrderDetail = miscOrderMaster.MiscOrderDetails.Where(det => det.Item == locationLotDetail.Item && det.Uom == locationLotDetail.HuUom && det.UnitCount == locationLotDetail.UnitCount && det.Location == locationLotDetail.Location).SingleOrDefault(); } if (matchedMiscOrderDetail == null) { //没有找到明细行,新增明细 Item item = this.genericMgr.FindById<Item>(locationLotDetail.Item); //没有找到匹配的明细行,新增一行 matchedMiscOrderDetail = new MiscOrderDetail(); matchedMiscOrderDetail.MiscOrderNo = miscOrderMaster.MiscOrderNo; matchedMiscOrderDetail.Sequence = ++maxSeq; matchedMiscOrderDetail.Item = locationLotDetail.Item; matchedMiscOrderDetail.ItemDescription = item.Description; matchedMiscOrderDetail.ReferenceItemCode = item.ReferenceCode; matchedMiscOrderDetail.Uom = locationLotDetail.HuUom; matchedMiscOrderDetail.BaseUom = locationLotDetail.BaseUom; matchedMiscOrderDetail.UnitCount = locationLotDetail.UnitCount; matchedMiscOrderDetail.UnitQty = locationLotDetail.UnitQty; matchedMiscOrderDetail.Location = locationLotDetail.Location; //matchedMiscOrderDetail.ReserveNo = addMiscOrderDetail.ReserveNo; //matchedMiscOrderDetail.ReserveLine = addMiscOrderDetail.ReserveLine; matchedMiscOrderDetail.Qty = locationLotDetail.Qty; this.genericMgr.Create(matchedMiscOrderDetail); miscOrderMaster.MiscOrderDetails.Add(matchedMiscOrderDetail); } else { //找到明细行,更新数量 matchedMiscOrderDetail.Qty += locationLotDetail.Qty; this.genericMgr.Update(matchedMiscOrderDetail); } #endregion #region 库存明细新增 MiscOrderLocationDetail miscOrderLocationDetail = new MiscOrderLocationDetail(); miscOrderLocationDetail.MiscOrderNo = miscOrderMaster.MiscOrderNo; miscOrderLocationDetail.MiscOrderDetailId = matchedMiscOrderDetail.Id; miscOrderLocationDetail.MiscOrderDetailSequence = matchedMiscOrderDetail.Sequence; miscOrderLocationDetail.Item = locationLotDetail.Item; miscOrderLocationDetail.Uom = locationLotDetail.HuUom; miscOrderLocationDetail.HuId = locationLotDetail.HuId; miscOrderLocationDetail.LotNo = locationLotDetail.LotNo; miscOrderLocationDetail.IsCreatePlanBill = false; miscOrderLocationDetail.IsConsignment = locationLotDetail.IsConsignment; miscOrderLocationDetail.PlanBill = locationLotDetail.PlanBill; #region 查找寄售供应商 if (locationLotDetail.IsConsignment && locationLotDetail.PlanBill.HasValue) { miscOrderLocationDetail.ConsignmentSupplier = this.genericMgr.FindAll<string>("select Party from PlanBill where Id = ?", locationLotDetail.PlanBill.Value)[0]; } #endregion miscOrderLocationDetail.ActingBill = null; miscOrderLocationDetail.QualityType = locationLotDetail.QualityType; miscOrderLocationDetail.IsFreeze = locationLotDetail.IsFreeze; miscOrderLocationDetail.IsATP = locationLotDetail.IsATP; miscOrderLocationDetail.OccupyType = locationLotDetail.OccupyType; miscOrderLocationDetail.OccupyReferenceNo = locationLotDetail.OccupyReferenceNo; miscOrderLocationDetail.Qty = locationLotDetail.Qty; if (addHuIdList.Contains(miscOrderLocationDetail.HuId)) { this.genericMgr.Create(miscOrderLocationDetail); } #endregion } #endregion #endregion } else { #region 计划外入库 #region 检查条码状态 IList<HuStatus> huStatusList = this.huMgr.GetHuStatus(addHuIdList); foreach (string huId in addHuIdList) { HuStatus huStatus = huStatusList.Where(h => h.HuId == huId).SingleOrDefault(); if (huStatus == null) { businessException = new BusinessException(string.Format("条码{0}不存在。", huId)); } else if (huStatus.Status == CodeMaster.HuStatus.Location) { businessException = new BusinessException(string.Format("条码{0}在库位{1}中,不能计划外入库。", huStatus.HuId, huStatus.Location)); } else if (huStatus.Status == CodeMaster.HuStatus.Ip) { businessException = new BusinessException(string.Format("条码{0}为库位{1}至库位{2}的在途库存,不能计划外入库。", huStatus.HuId, huStatus.LocationFrom, huStatus.LocationTo)); } } if (businessException.HasMessage) { throw businessException; } #endregion #region 新增明细 foreach (HuStatus huStatus in huStatusList) { MiscOrderDetail matchedMiscOrderDetail = null; #region 明细处理 if (miscOrderMaster.MiscOrderDetails != null && miscOrderMaster.MiscOrderDetails.Count > 0) { //查找匹配的明细行 matchedMiscOrderDetail = miscOrderMaster.MiscOrderDetails .Where(det => det.Item == huStatus.Item && det.Uom == huStatus.Uom && det.UnitCount == huStatus.UnitCount) .SingleOrDefault(); } if (matchedMiscOrderDetail == null) { //没有找到明细行,新增明细//没有找到匹配的明细行,新增一行 Item item = this.genericMgr.FindById<Item>(huStatus.Item); matchedMiscOrderDetail = new MiscOrderDetail(); matchedMiscOrderDetail.MiscOrderNo = miscOrderMaster.MiscOrderNo; matchedMiscOrderDetail.Sequence = ++maxSeq; matchedMiscOrderDetail.Item = huStatus.Item; matchedMiscOrderDetail.ItemDescription = item.Description; matchedMiscOrderDetail.ReferenceItemCode = item.ReferenceCode; matchedMiscOrderDetail.Uom = huStatus.Uom; matchedMiscOrderDetail.BaseUom = huStatus.BaseUom; matchedMiscOrderDetail.UnitCount = huStatus.UnitCount; matchedMiscOrderDetail.UnitQty = huStatus.UnitQty; matchedMiscOrderDetail.ManufactureParty = huStatus.ManufactureParty; //matchedMiscOrderDetail.Location = //matchedMiscOrderDetail.ReserveNo = addMiscOrderDetail.ReserveNo; //matchedMiscOrderDetail.ReserveLine = addMiscOrderDetail.ReserveLine; matchedMiscOrderDetail.Qty = huStatus.Qty; this.genericMgr.Create(matchedMiscOrderDetail); miscOrderMaster.MiscOrderDetails.Add(matchedMiscOrderDetail); } else { //找到明细行,更新数量 matchedMiscOrderDetail.Qty += huStatus.Qty; this.genericMgr.Update(matchedMiscOrderDetail); } #endregion #region 库存明细新增 MiscOrderLocationDetail miscOrderLocationDetail = new MiscOrderLocationDetail(); miscOrderLocationDetail.MiscOrderNo = miscOrderMaster.MiscOrderNo; miscOrderLocationDetail.MiscOrderDetailId = matchedMiscOrderDetail.Id; miscOrderLocationDetail.MiscOrderDetailSequence = matchedMiscOrderDetail.Sequence; miscOrderLocationDetail.Item = huStatus.Item; miscOrderLocationDetail.Uom = huStatus.Uom; miscOrderLocationDetail.HuId = huStatus.HuId; miscOrderLocationDetail.LotNo = huStatus.LotNo; miscOrderLocationDetail.IsCreatePlanBill = false; miscOrderLocationDetail.IsConsignment = false; miscOrderLocationDetail.PlanBill = null; miscOrderLocationDetail.ConsignmentSupplier = null; miscOrderLocationDetail.ActingBill = null; miscOrderLocationDetail.QualityType = huStatus.QualityType; miscOrderLocationDetail.IsFreeze = false; miscOrderLocationDetail.IsATP = true; miscOrderLocationDetail.OccupyType = CodeMaster.OccupyType.None; miscOrderLocationDetail.OccupyReferenceNo = null; miscOrderLocationDetail.Qty = huStatus.Qty * huStatus.UnitQty; this.genericMgr.Create(miscOrderLocationDetail); #endregion } #endregion #endregion } #endregion } #endregion #region 删除计划外出入库明细 if (deleteHuIdList != null && deleteHuIdList.Count > 0) { #region 条码处理 #region 条码是否在计划外出入库单中存在检查 BusinessException businessException = new BusinessException(); foreach (string huId in deleteHuIdList) { if (miscOrderLocationDetailList == null || miscOrderLocationDetailList.Where(m => m.HuId == huId).Count() == 0) { if (miscOrderMaster.Type == CodeMaster.MiscOrderType.GI) { businessException.AddMessage("条码{0}在计划外出库单{1}中不存在。", huId, miscOrderMaster.MiscOrderNo); } else { businessException.AddMessage("条码{0}在计划外入库单{1}中不存在。", huId, miscOrderMaster.MiscOrderNo); } } } if (businessException.HasMessage) { throw businessException; } #endregion #region 循环删除 #region 取消占用 if (miscOrderMaster.Type == CodeMaster.MiscOrderType.GI) { this.locationDetailMgr.CancelInventoryOccupy(CodeMaster.OccupyType.MiscOrder, miscOrderMaster.MiscOrderNo, deleteHuIdList); } #endregion foreach (string huId in deleteHuIdList) { #region 扣减明细数量,删除库存明细 MiscOrderLocationDetail miscOrderLocationDetail = miscOrderLocationDetailList.Where(det => det.HuId == huId).Single(); MiscOrderDetail miscOrderDetail = miscOrderMaster.MiscOrderDetails.Where(det => det.Id == miscOrderLocationDetail.MiscOrderDetailId).Single(); miscOrderDetail.Qty -= miscOrderLocationDetail.Qty / miscOrderDetail.UnitQty; this.genericMgr.Update(miscOrderDetail); this.genericMgr.Delete(miscOrderLocationDetail); #endregion } #endregion #endregion } #endregion }
public void CreateMiscOrderDetailFromXls(Stream inputStream, string miscOrderNo) { //导入的话以导入的为准,之前的全部干掉 #region 清空明细 string hql = @"from MiscOrderDetail as m where m.MiscOrderNo = ?"; genericMgr.Delete(hql, new object[] { miscOrderNo }, new IType[] { NHibernateUtil.String }); #endregion MiscOrderMaster miscOrder = genericMgr.FindById<MiscOrderMaster>(miscOrderNo); #region 导入数据 if (inputStream.Length == 0) { throw new BusinessException("Import.Stream.Empty"); } HSSFWorkbook workbook = new HSSFWorkbook(inputStream); ISheet sheet = workbook.GetSheetAt(0); IEnumerator rows = sheet.GetRowEnumerator(); ImportHelper.JumpRows(rows, 11); #region 列定义 int colItem = 1;//物料代码 //int colUom = 3;//单位 int colLocation = 2;//库位 int colQty = 3;//数量 int colReverseLine = 4;//预留行 int colReverseNo = 5;//预留号 #endregion DateTime dateTimeNow = DateTime.Now; IList<MiscOrderDetail> miscOrderDetailList = new List<MiscOrderDetail>(); while (rows.MoveNext()) { HSSFRow row = (HSSFRow)rows.Current; if (!ImportHelper.CheckValidDataRow(row, 1, 9)) { break;//边界 } string itemCode = string.Empty; decimal qty = 0; string uomCode = string.Empty; string locationCode = string.Empty; string reverseLine = string.Empty; string reverseNo = string.Empty; #region 读取数据 #region 读取物料代码 itemCode = ImportHelper.GetCellStringValue(row.GetCell(colItem)); if (itemCode == null || itemCode.Trim() == string.Empty) { ImportHelper.ThrowCommonError(row.RowNum, colItem, row.GetCell(colItem)); } #endregion //#region 读取单位 //uomCode = row.GetCell(colUom) != null ? row.GetCell(colUom).StringCellValue : string.Empty; //if (uomCode == null || uomCode.Trim() == string.Empty) //{ // throw new BusinessException("Import.Read.Error.Empty", (row.RowNum + 1).ToString(), colUom.ToString()); //} //#endregion #endregion #region 读取库位 locationCode = row.GetCell(colLocation) != null ? row.GetCell(colLocation).StringCellValue : string.Empty; if (string.IsNullOrEmpty(locationCode)) { throw new BusinessException("Import.Read.Error.Empty", (row.RowNum + 1).ToString(), locationCode.ToString()); } Location location = genericMgr.FindById<Location>(locationCode); //if (location.Region != miscOrder.Region) //{ // throw new BusinessException("指定区域不存在此库位" + location, (row.RowNum + 1).ToString(), colLocation.ToString()); //} #endregion #region 读取数量 try { qty = decimal.Parse(ImportHelper.GetCellStringValue(row.GetCell(colQty))); } catch { ImportHelper.ThrowCommonError(row.RowNum, colQty, row.GetCell(colQty)); } #endregion #region MiscOrderMoveType miscOrderMoveType = genericMgr.FindAll<MiscOrderMoveType>("from MiscOrderMoveType as m where m.MoveType=? and m.IOType=?", new object[] { miscOrder.MoveType, miscOrder.Type })[0]; if (miscOrderMoveType.CheckReserveLine) { reverseLine = row.GetCell(colReverseLine) != null ? row.GetCell(colReverseLine).StringCellValue : string.Empty; //if (reverseLine == null || reverseLine.Trim() == string.Empty) //{ // throw new BusinessException("Import.Read.Error.Empty", (row.RowNum + 1).ToString(), colUom.ToString()); //} } if (miscOrderMoveType.CheckReserveNo) { reverseNo = row.GetCell(colReverseNo) != null ? row.GetCell(colReverseNo).StringCellValue : string.Empty; //if (reverseNo == null || reverseNo.Trim() == string.Empty) //{ // throw new BusinessException("Import.Read.Error.Empty", (row.RowNum + 1).ToString(), colUom.ToString()); //} } #endregion #region 填充数据 MiscOrderDetail mod = new MiscOrderDetail(); Item item = genericMgr.FindById<Item>(itemCode); mod.Location = locationCode; mod.Item = itemCode; mod.Uom = item.Uom; mod.ItemDescription = item.Description; mod.BaseUom = item.Uom; mod.Qty = qty; mod.ReserveLine = reverseLine; mod.ReserveNo = reverseNo; miscOrderDetailList.Add(mod); #endregion } #endregion #region 新增明细 CreateMiscOrderDetail(miscOrderDetailList, miscOrder.MiscOrderNo); #endregion }
public PlanBill CreatePlanBill(MiscOrderMaster miscOrderMaster, MiscOrderDetail miscOrderDetail, MiscOrderLocationDetail miscOrderLocationDetail, DateTime effectiveDate) { PlanBill planBill = new PlanBill(); planBill.OrderNo = miscOrderMaster.MiscOrderNo; planBill.ReceiptNo = miscOrderMaster.MiscOrderNo; planBill.ExternalReceiptNo = miscOrderMaster.ReferenceNo; planBill.Type = com.Sconit.CodeMaster.BillType.Procurement; planBill.Party = miscOrderDetail.ManufactureParty; planBill.Item = miscOrderDetail.Item; planBill.ItemDescription = miscOrderDetail.ItemDescription; planBill.Uom = miscOrderDetail.Uom; planBill.UnitCount = miscOrderDetail.UnitCount; planBill.BillTerm = CodeMaster.OrderBillTerm.OnlineBilling; PartyAddress partyAddress = this.genericMgr.FindAll<PartyAddress>( "from PartyAddress as pa where pa.Party = ? and pa.Type = ? order by IsPrimary desc,Sequence asc ", new object[] { planBill.Party, CodeMaster.AddressType.BillAddress }, 0, 1).FirstOrDefault(); if (partyAddress == null) { throw new BusinessException(Resources.EXT.ServiceLan.TheBillAddressNotSpecialSupplier, planBill.Party); } planBill.BillAddress = partyAddress.Address.Code; planBill.PlanAmount = 0; int refId = 0; if (miscOrderMaster.IsScanHu) { planBill.PlanQty = miscOrderLocationDetail.Qty; planBill.UnitQty = miscOrderDetail.UnitQty; planBill.HuId = miscOrderLocationDetail.HuId; refId = miscOrderLocationDetail.Id; } else { planBill.PlanQty = miscOrderDetail.Qty; planBill.UnitQty = miscOrderDetail.UnitQty; refId = miscOrderDetail.Id; } planBill.LocationFrom = string.IsNullOrWhiteSpace(miscOrderDetail.Location) ? miscOrderMaster.Location : miscOrderDetail.Location; planBill.EffectiveDate = effectiveDate; this.genericMgr.Create(planBill); this.RecordPlanBillTransaction(planBill, effectiveDate, refId, false); return planBill; }
private bool CheckMiscOrderDetail(MiscOrderMaster miscOrderMaster, MiscOrderDetail miscOrderDetail) { if (string.IsNullOrEmpty(miscOrderDetail.Item)) { throw new BusinessException(Resources.EXT.ControllerLan.Con_DetailRowItemCanNotBeEmpty); } if (miscOrderDetail.Qty == 0) { throw new BusinessException(Resources.EXT.ControllerLan.Con_DetailRowGapQuantityCanNotBeEmpty); } if (miscOrderDetail.Qty < 0) { //throw new BusinessException("明细行差异数量不能小于0的数字"); } return true; }
public ActionResult EditMiscOrder(MiscOrderMaster miscOrderMaster, string sequences, string items, string qtys) { try { #region master 只能改备注字段 MiscOrderMaster oldMiscOrderMaster = this.genericMgr.FindById<MiscOrderMaster>(miscOrderMaster.MiscOrderNo); oldMiscOrderMaster.Note = miscOrderMaster.Note; oldMiscOrderMaster.EffectiveDate = miscOrderMaster.EffectiveDate; oldMiscOrderMaster.QualityType = miscOrderMaster.QualityType; #endregion #region Detail IList<MiscOrderDetail> oldMiscOrderDetailList = this.genericMgr.FindAll<MiscOrderDetail> ("select d from MiscOrderDetail as d where d.MiscOrderNo=? ", miscOrderMaster.MiscOrderNo); IList<MiscOrderDetail> newMiscOrderDetailList = new List<MiscOrderDetail>(); IList<MiscOrderDetail> updateMiscOrderDetailList = new List<MiscOrderDetail>(); IList<MiscOrderDetail> deletedMiscOrderDetails = new List<MiscOrderDetail>(); IList<MiscOrderDetail> miscOrderDetails = new List<MiscOrderDetail>(); string[] SequencesArray = sequences.Split(','); string[] ItemsArray = items.Split(','); string[] OrderedQtysArray = qtys.Split(','); for (int i = 0; i < ItemsArray.Length; i++) { var item = this.genericMgr.FindById<Item>(ItemsArray[i]); MiscOrderDetail od = new MiscOrderDetail(); od.Sequence = Convert.ToInt32(SequencesArray[i]); od.Item = item.Code; od.ItemDescription = item.Description; od.ReferenceItemCode = item.ReferenceCode; od.Uom = item.Uom; od.BaseUom = item.Uom; od.UnitCount = item.UnitCount; od.UnitQty = 1; od.Qty = Convert.ToDecimal(OrderedQtysArray[i]); miscOrderDetails.Add(od); } var groupMiscOrderDetails = from p in miscOrderDetails group p by new { p.Item, p.ItemDescription, p.ReferenceItemCode, p.Uom, p.BaseUom, p.UnitCount, } into g select new MiscOrderDetail { Sequence = g.Max(p => p.Sequence), Item = g.Key.Item, ItemDescription = g.Key.ItemDescription, ReferenceItemCode = g.Key.ReferenceItemCode, Uom = g.Key.Uom, BaseUom = g.Key.BaseUom, UnitCount = g.Key.UnitCount, UnitQty = 1, Qty = g.Sum(p => p.Qty), }; foreach (var detail in groupMiscOrderDetails) { var oldDetail = oldMiscOrderDetailList.FirstOrDefault(p => p.Item == detail.Item); if (oldDetail == null) { newMiscOrderDetailList.Add(detail); } else if (oldDetail.Qty != detail.Qty) { oldDetail.Qty = detail.Qty; updateMiscOrderDetailList.Add(oldDetail); } } foreach (var oldDetail in oldMiscOrderDetailList) { var detail = groupMiscOrderDetails.FirstOrDefault(p => p.Item == oldDetail.Item); if (detail == null) { deletedMiscOrderDetails.Add(oldDetail); } } #endregion genericMgr.Update(oldMiscOrderMaster); miscOrderMgr.BatchUpdateMiscOrderDetails(oldMiscOrderMaster, newMiscOrderDetailList, updateMiscOrderDetailList, deletedMiscOrderDetails); SaveSuccessMessage(Resources.EXT.ControllerLan.Con_SavedSuccessfully); ViewBag.Flow = oldMiscOrderMaster.Flow; return View("Edit", oldMiscOrderMaster); } catch (Exception ex) { SaveErrorMessage(ex); return Json(null); } }
public ActionResult _SelectMiscOrderDetail(string miscOrderNo, string flow) { IList<MiscOrderDetail> miscOrderDetailList = new List<MiscOrderDetail>(); var multiRows = systemMgr.GetEntityPreferenceValue(Entity.SYS.EntityPreference.CodeEnum.GridDefaultMultiRowsCount); int v; int.TryParse(multiRows, out v); if (!string.IsNullOrEmpty(miscOrderNo)) { v = -1; miscOrderDetailList = genericMgr.FindAll<MiscOrderDetail>("from MiscOrderDetail as m where m.MiscOrderNo=? ", miscOrderNo); } int seq = miscOrderDetailList.Count > 0 ? miscOrderDetailList.Max(p => p.Sequence) : 10; if (v > 0) { for (int i = 0; i < v; i++) { var order = new MiscOrderDetail(); order.Sequence = seq + i * 10; miscOrderDetailList.Add(order); } } ViewBag.Flow = flow; return PartialView(new GridModel(miscOrderDetailList)); }
public IList<InventoryTransaction> InventoryOtherInOut(MiscOrderMaster miscOrderMaster, MiscOrderDetail miscOrderDetail) { return InventoryOtherInOut(miscOrderMaster, miscOrderDetail, DateTime.Now); }
private IList<MiscOrderDetail> TransferToMiscOrderDetail (string[] reserveLines, string[] reserveNos, string[] sequences, string[] items, string[] workHours, string[] qtys) { IList<MiscOrderDetail> miscOrderDetails = new List<MiscOrderDetail>(); for (int i = 0; i < items.Length; i++) { decimal workHour = 0; if (workHours != null && workHours.Length == items.Length) { decimal.TryParse(workHours[i], out workHour); } var item = this.genericMgr.FindById<Item>(items[i]); MiscOrderDetail od = new MiscOrderDetail(); od.Sequence = Convert.ToInt32(sequences[i]); if (reserveLines != null && reserveLines.Length == items.Length) { od.ReserveLine = reserveLines[i]; } if (reserveNos != null && reserveNos.Length == items.Length) { od.ReserveNo = reserveNos[i]; } od.Item = item.Code; od.ItemDescription = item.Description; od.ReferenceItemCode = item.ReferenceCode; od.Uom = item.Uom; od.BaseUom = item.Uom; od.UnitCount = item.UnitCount; od.UnitQty = 1; od.WorkHour = workHour; od.Qty = Convert.ToDecimal(qtys[i]); miscOrderDetails.Add(od); } return (from p in miscOrderDetails group p by new { p.Item, p.ReserveLine, p.ReserveNo, p.ItemDescription, p.ReferenceItemCode, p.Uom, p.BaseUom, p.UnitCount } into g select new MiscOrderDetail { Sequence = g.Max(p => p.Sequence), Item = g.Key.Item, ReserveLine = g.Key.ReserveLine, ReserveNo = g.Key.ReserveNo, ItemDescription = g.Key.ItemDescription, ReferenceItemCode = g.Key.ReferenceItemCode, Uom = g.Key.Uom, BaseUom = g.Key.BaseUom, UnitCount = g.Key.UnitCount, UnitQty = 1, Qty = g.Sum(p => p.Qty), WorkHour = g.Sum(p => p.WorkHour) }).ToList(); }
/// <summary> /// 库存初始化 /// </summary> /// <param name="inputStream"></param> /// <param name="miscOrderNo"></param> /// <param name="checkRegionContainsLocation"></param> public void CreateMiscInvInitDetailFromXls(Stream inputStream, string miscOrderNo) { //导入的话以导入的为准,之前的全部干掉 #region 清空明细 var dets = this.genericMgr.FindAll<MiscOrderDetail>(" from MiscOrderDetail as m where m.MiscOrderNo = ?", miscOrderNo); if (dets != null && dets.Count > 0) { genericMgr.Delete("from MiscOrderLocationDetail as d where d.MiscOrderNo =?", miscOrderNo, NHibernate.NHibernateUtil.String); } string hql = @"from MiscOrderDetail as m where m.MiscOrderNo = ?"; genericMgr.Delete(hql, new object[] { miscOrderNo }, new IType[] { NHibernateUtil.String }); #endregion MiscOrderMaster miscOrder = genericMgr.FindById<MiscOrderMaster>(miscOrderNo); #region 导入数据 if (inputStream.Length == 0) { throw new BusinessException("Import.Stream.Empty"); } BusinessException businessException = new BusinessException(); HSSFWorkbook workbook = new HSSFWorkbook(inputStream); ISheet sheet = workbook.GetSheetAt(0); IEnumerator rows = sheet.GetRowEnumerator(); ImportHelper.JumpRows(rows, 10); #region 列定义 int colItem = 1;//物料代码 int colLocation = 2;//库位 int colSupplier = 3;//寄售供应商 int colQty = 4;//数量 int rowCount = 10; #endregion DateTime dateTimeNow = DateTime.Now; IList<MiscOrderDetail> miscOrderDetailList = new List<MiscOrderDetail>(); while (rows.MoveNext()) { try { rowCount++; HSSFRow row = (HSSFRow)rows.Current; if (!ImportHelper.CheckValidDataRow(row, 1, 9)) { break;//边界 } string itemCode = string.Empty; decimal qty = 0; string manufactureParty = string.Empty; string locationCode = string.Empty; Item item = new Item(); try { #region 读取数据 #region 读取物料代码 itemCode = ImportHelper.GetCellStringValue(row.GetCell(colItem)); if (string.IsNullOrWhiteSpace(itemCode)) { businessException.AddMessage(string.Format("第{0}行:物料编号不能为空。", rowCount)); } else { var items = this.genericMgr.FindAll<Item>(" select i from Item as i where i.Code=? ", itemCode); if (items == null || items.Count == 0) { businessException.AddMessage(string.Format("第{0}行:物料编号{1}不存在。", rowCount, itemCode)); continue; } item = items.First(); } #endregion #region 读取库位,如果没填则取MiscOrderMaster上的库位 locationCode = ImportHelper.GetCellStringValue(row.GetCell(colLocation)); if (!string.IsNullOrEmpty(locationCode)) { var locs = this.genericMgr.FindAll<Location>(" select l from Location as l where l.Code=? ", locationCode); if (locs == null || locs.Count == 0) { businessException.AddMessage(string.Format("第{0}行:库位{1}不存在。", rowCount, locationCode)); } else { //if (locs.First().Region != miscOrder.Region) //{ // businessException.AddMessage(string.Format("第{0}行:指定区域{1}不存在此库位{2}", rowCount, miscOrder.Region, locationCode)); //} } } #endregion #region 寄售供应商 manufactureParty = ImportHelper.GetCellStringValue(row.GetCell(colSupplier)); if (!string.IsNullOrWhiteSpace(manufactureParty)) { var manufacturePartys = this.genericMgr.FindAll<Supplier>(" select i from Supplier as i where i.Code=? ", manufactureParty); if (manufacturePartys == null || manufacturePartys.Count == 0) { businessException.AddMessage(string.Format("第{0}行:寄售供应商{1}不存在。", rowCount, manufacturePartys)); } } #endregion #region 读取数量 try { qty = Convert.ToDecimal(row.GetCell(colQty).NumericCellValue); if (qty <= 0) { businessException.AddMessage(string.Format("第{0}行:数量填写有误。", rowCount)); } } catch { businessException.AddMessage(string.Format("第{0}行:数量填写有误。")); } #endregion #endregion #region 填充数据 MiscOrderDetail mod = new MiscOrderDetail(); mod.Location = !string.IsNullOrWhiteSpace(locationCode) ? locationCode : miscOrder.Location; mod.Item = itemCode; mod.Uom = item.Uom; mod.ItemDescription = item.Description; mod.BaseUom = item.Uom; mod.Qty = qty; mod.ManufactureParty = string.IsNullOrWhiteSpace(manufactureParty) ? null : manufactureParty; miscOrderDetailList.Add(mod); #endregion } catch (Exception ex) { throw ex; } } catch (Exception ex) { throw ex; } } if (businessException.HasMessage) { throw businessException; } #region 新增明细 CreateMiscOrderDetail(miscOrderDetailList, miscOrder.MiscOrderNo); #endregion #endregion }
public void CreateMiscOrderDetailFromXls(Stream inputStream, string miscOrderNo) { //导入的话以导入的为准,之前的全部干掉 #region 清空明细 var dets = this.genericMgr.FindAll<MiscOrderDetail>(" from MiscOrderDetail as m where m.MiscOrderNo = ?", miscOrderNo); if (dets != null && dets.Count > 0) { genericMgr.Delete(string.Format("from MiscOrderLocationDetail as d where d.MiscOrderDetailId in ({0})", string.Join(",", dets.Select(c => c.Id)))); } string hql = @"from MiscOrderDetail as m where m.MiscOrderNo = ?"; genericMgr.Delete(hql, new object[] { miscOrderNo }, new IType[] { NHibernateUtil.String }); #endregion MiscOrderMaster miscOrder = genericMgr.FindById<MiscOrderMaster>(miscOrderNo); #region 导入数据 if (inputStream.Length == 0) { throw new BusinessException("Import.Stream.Empty"); } HSSFWorkbook workbook = new HSSFWorkbook(inputStream); ISheet sheet = workbook.GetSheetAt(0); IEnumerator rows = sheet.GetRowEnumerator(); ImportHelper.JumpRows(rows, 10); int rowCount = 10; BusinessException businessException = new BusinessException(); #region 列定义 int colItem = 1;//物料代码 int colLocation = 2;//库位 int colQty = 3;//数量 int colReverseLine = 4;//预留行 int colReverseNo = 5;//预留号 int colWBS = 6;// int colCostCenter = 7;// #endregion DateTime dateTimeNow = DateTime.Now; IList<MiscOrderDetail> miscOrderDetailList = new List<MiscOrderDetail>(); while (rows.MoveNext()) { rowCount++; HSSFRow row = (HSSFRow)rows.Current; if (!ImportHelper.CheckValidDataRow(row, 1, 9)) { break;//边界 } string itemCode = string.Empty; string locationCode = string.Empty; decimal qty = 0; string reverseLine = string.Empty; string reverseNo = string.Empty; string wbs = string.Empty; string costCenter = string.Empty; Item item = new Item(); #region 读取数据 #region 读取物料代码 itemCode = ImportHelper.GetCellStringValue(row.GetCell(colItem)); if (string.IsNullOrWhiteSpace(itemCode)) { businessException.AddMessage(string.Format("第{0}行:物料代码不能为空。", rowCount)); } else { try { item = this.genericMgr.FindById<Item>(itemCode); } catch (Exception ex) { businessException.AddMessage(string.Format("第{0}行:物料代码{1}不存在。", rowCount, itemCode)); } } #endregion #endregion #region 读取库位,如果没填则取MiscOrderMaster上的库位 locationCode = ImportHelper.GetCellStringValue(row.GetCell(colLocation)); if (!string.IsNullOrEmpty(locationCode)) { try { Location location = genericMgr.FindById<Location>(locationCode); if (location.Region != miscOrder.Region) { businessException.AddMessage(string.Format("第{0}行:指定区域{1}不存在此库位{2}。", rowCount, miscOrder.Region, locationCode)); } } catch (Exception ex) { businessException.AddMessage(string.Format("第{0}行:库位{1}不存在。", rowCount, locationCode)); } } #endregion #region 读取数量 string ReadQty = ImportHelper.GetCellStringValue(row.GetCell(colQty)); if (string.IsNullOrEmpty(ReadQty)) { businessException.AddMessage(string.Format("第{0}行:数量不能为空。", rowCount)); } decimal.TryParse(ReadQty, out qty); if (qty <= 0) { businessException.AddMessage(string.Format("第{0}行:数量{1}填写有误。", rowCount, ReadQty)); } #endregion reverseLine = ImportHelper.GetCellStringValue(row.GetCell(colReverseLine)); reverseNo = ImportHelper.GetCellStringValue(row.GetCell(colReverseNo)); wbs = ImportHelper.GetCellStringValue(row.GetCell(colWBS)); costCenter = ImportHelper.GetCellStringValue(row.GetCell(colCostCenter)); #region 填充数据 MiscOrderDetail mod = new MiscOrderDetail(); mod.Location = !string.IsNullOrWhiteSpace(locationCode) ? locationCode : miscOrder.Location; mod.Item = itemCode; mod.Uom = item.Uom; mod.UnitCount = item.UnitCount; mod.ItemDescription = item.Description; mod.ReferenceItemCode = item.ReferenceCode; mod.BaseUom = item.Uom; mod.Qty = qty; MiscOrderMoveType miscOrderMoveType = genericMgr.FindAll<MiscOrderMoveType>("from MiscOrderMoveType as m where m.MoveType=? and m.IOType=?", new object[] { miscOrder.MoveType, miscOrder.Type })[0]; if (miscOrderMoveType.MoveType == "Z03" || miscOrderMoveType.MoveType == "Z04") { var reserveHasValues = false; var wbsHasValues = false; if (!string.IsNullOrWhiteSpace(reverseLine) && !string.IsNullOrWhiteSpace(reverseNo)) { reserveHasValues = true; } if (!string.IsNullOrWhiteSpace(wbs) && !string.IsNullOrWhiteSpace(costCenter)) { wbsHasValues = true; } if (!reserveHasValues && !wbsHasValues) { businessException.AddMessage(string.Format("第{0}行:【WBS+成本中心】跟【计划协议行号+计划协议号】必须有一组填写完整。。", rowCount)); } } if (miscOrderMoveType.CheckReserveLine && string.IsNullOrWhiteSpace(reverseLine) && miscOrderMoveType.MoveType != "Z03" && miscOrderMoveType.MoveType != "Z04") { businessException.AddMessage(string.Format("第{0}行:预留行号不能为空。", rowCount)); } else { mod.ReserveLine = reverseLine; } if (miscOrderMoveType.CheckReserveNo && string.IsNullOrWhiteSpace(reverseNo) && miscOrderMoveType.MoveType != "Z03" && miscOrderMoveType.MoveType != "Z04") { businessException.AddMessage(string.Format("第{0}行:预留行号不能为空。。", rowCount)); } else { mod.ReserveNo = reverseNo; } if (miscOrderMoveType.CheckWBS && string.IsNullOrWhiteSpace(wbs) && miscOrderMoveType.MoveType != "Z03" && miscOrderMoveType.MoveType != "Z04") { businessException.AddMessage(string.Format("第{0}行:WBS元素不能为空。", rowCount)); } else { mod.WBS = wbs; } if (miscOrderMoveType.CheckCostCenter && string.IsNullOrWhiteSpace(costCenter) && miscOrderMoveType.MoveType != "Z03" && miscOrderMoveType.MoveType != "Z04") { businessException.AddMessage(string.Format("第{0}行:成本中心不能为空。", rowCount)); } else { mod.CostCenter = costCenter; } //如果是寄售,则需要将供应商填充到明细的manufactureparty if (miscOrder.Consignment) { if (string.IsNullOrWhiteSpace(mod.ManufactureParty)) { mod.ManufactureParty = miscOrder.ManufactureParty; } } miscOrderDetailList.Add(mod); #endregion } #endregion if (businessException.HasMessage) { throw businessException; } #region 新增明细 CreateMiscOrderDetail(miscOrderDetailList, miscOrder.MiscOrderNo); #endregion }
public void Import261262MiscOrder(Stream inputStream, string wMSNo) { #region 导入数据 if (inputStream.Length == 0) { throw new BusinessException("Import.Stream.Empty"); } HSSFWorkbook workbook = new HSSFWorkbook(inputStream); ISheet sheet = workbook.GetSheetAt(0); IEnumerator rows = sheet.GetRowEnumerator(); ImportHelper.JumpRows(rows, 10); #region 列定义 int colMoveType = 1;//移动类型 int colEffectiveDate = 2;//生效日期 int colRegion = 3;//区域 int colLocation = 4;//库位 int colReferenceNo = 5;//Sap订单号 int colItem = 6;//物料编号 int colQty = 7;//数量 DateTime? prevEffeDate = null; string prevRegion = string.Empty; #endregion BusinessException businessException = new BusinessException(); int rowCount = 10; IList<MiscOrderDetail> activeDetailList = new List<MiscOrderDetail>(); IList<MiscOrderMaster> activeMasterList = new List<MiscOrderMaster>(); IList<Region> regionList = this.genericMgr.FindAll<Region>(); IList<Item> itemList = this.genericMgr.FindAll<Item>(); IList<Location> locationList = this.genericMgr.FindAll<Location>(); while (rows.MoveNext()) { rowCount++; HSSFRow row = (HSSFRow)rows.Current; if (!ImportHelper.CheckValidDataRow(row, 1, 9)) { break;//边界 } string moveType = string.Empty; DateTime effectiveDate = System.DateTime.Now; string regionCode = string.Empty; string locationCode = string.Empty; string referenceNo = string.Empty; string itemCode = string.Empty; decimal qty = 0; Item item = new Item(); #region 读取数据 #region 移动类型 moveType = ImportHelper.GetCellStringValue(row.GetCell(colMoveType)); if (string.IsNullOrWhiteSpace(moveType)) { businessException.AddMessage(string.Format("第{0}行:移动类型不能为空。", rowCount)); } else { if (moveType != "261" && moveType != "262") { businessException.AddMessage(string.Format("第{0}行:移动类型{1}填写有误,只能填261、262。", rowCount, moveType)); } } #endregion #region 生效日期 string readEffectiveDate = ImportHelper.GetCellStringValue(row.GetCell(colEffectiveDate)); if (string.IsNullOrWhiteSpace(readEffectiveDate)) { businessException.AddMessage(string.Format("第{0}行:生效日期不能为空。", rowCount)); } else { if (!DateTime.TryParse(readEffectiveDate, out effectiveDate)) { businessException.AddMessage(string.Format("第{0}行:生效日期{1}填写有误.", rowCount, moveType)); continue; } if (prevEffeDate != null) { if (prevEffeDate.Value != effectiveDate) { businessException.AddMessage(string.Format("第{0}行:生效日期{1}与前一行生效日期{2}不同。", rowCount, effectiveDate, prevEffeDate.Value)); continue; } } prevEffeDate = effectiveDate; } #endregion #region 区域 regionCode = ImportHelper.GetCellStringValue(row.GetCell(colRegion)); if (string.IsNullOrWhiteSpace(regionCode)) { businessException.AddMessage(string.Format("第{0}行:区域不能为空。", rowCount)); } else { if (string.IsNullOrWhiteSpace(prevRegion)) { var regions = regionList.Where(l => l.Code == regionCode).ToList(); if (regions == null || regions.Count == 0) { businessException.AddMessage(string.Format("第{0}行:区域{1}填写有误.", rowCount, regionCode)); } } else { if (regionCode != prevRegion) { businessException.AddMessage(string.Format("第{0}行:区域{1}与前一行区域{2}不同。", rowCount, regionCode, prevRegion)); continue; } } prevRegion = regionCode; } #endregion #region 读取库位 locationCode = ImportHelper.GetCellStringValue(row.GetCell(colLocation)); if (!string.IsNullOrEmpty(locationCode)) { var locations = locationList.Where(l => l.Code == locationCode).ToList(); if (locations == null || locations.Count == 0) { businessException.AddMessage(string.Format("第{0}行:库位{1}不存在。", rowCount, locationCode)); } else if (locations.First().Region != regionCode) { businessException.AddMessage(string.Format("第{0}行:区域{1}不存在库位{2}。", rowCount, regionCode, locationCode)); } } else { businessException.AddMessage(string.Format("第{0}行:区域不能为空。", rowCount)); } #endregion #region Sap订单号 referenceNo = ImportHelper.GetCellStringValue(row.GetCell(colReferenceNo)); if (string.IsNullOrEmpty(referenceNo)) { businessException.AddMessage(string.Format("第{0}行:Sap订单号不能为空。", rowCount)); } else { //if (this.genericMgr.FindAllWithNativeSql<int>("select count(*) from SAP_ProdBomDet where AUFNR=? ", referenceNo.PadLeft(12, '0'))[0] == 0) //{ // businessException.AddMessage(string.Format("第{0}行:Sap订单号不存在ORD_OrderMstr_4表中。", rowCount)); //} } #endregion #region 物料编号 itemCode = ImportHelper.GetCellStringValue(row.GetCell(colItem)); if (string.IsNullOrWhiteSpace(itemCode)) { businessException.AddMessage(string.Format("第{0}行:物料编号不能为空。", rowCount)); } else { var items = itemList.Where(l => l.Code == itemCode).ToList(); if (items == null || items.Count == 0) { businessException.AddMessage(string.Format("第{0}行:物料编号{1}不存在.", rowCount, itemCode)); } else { item = items.First(); } } #endregion #region 数量 string readQty = ImportHelper.GetCellStringValue(row.GetCell(colQty)); if (string.IsNullOrEmpty(readQty)) { businessException.AddMessage(string.Format("第{0}行:数量不能为空。", rowCount)); } else { decimal.TryParse(readQty, out qty); if (qty <= 0) { businessException.AddMessage(string.Format("第{0}行:数量{1}只能为大于等于0的数字。", rowCount, readQty)); } } #endregion #endregion #region 填充数据 if (!businessException.HasMessage) { MiscOrderDetail miscOrderDetail = new MiscOrderDetail(); miscOrderDetail.MoveType = moveType; miscOrderDetail.EffectiveDate = effectiveDate; miscOrderDetail.Region = regionCode; miscOrderDetail.Location = locationCode; miscOrderDetail.SapOrderNo = string.IsNullOrWhiteSpace(referenceNo) ? null : referenceNo.PadLeft(12, '0'); miscOrderDetail.Item = item.Code; miscOrderDetail.ItemDescription = item.Description; miscOrderDetail.ReferenceItemCode = item.ReferenceCode; miscOrderDetail.Uom = item.Uom; miscOrderDetail.BaseUom = item.Uom; miscOrderDetail.UnitCount = item.UnitCount; miscOrderDetail.Qty = qty; activeDetailList.Add(miscOrderDetail); } #endregion } if (businessException.HasMessage) { throw businessException; } if (activeDetailList.Count == 0) { throw new BusinessException("导入的有效数据为0,请确实。"); } //261一张单 var outDetail = activeDetailList.Where(a => a.MoveType == "261").ToList(); if (outDetail != null && outDetail.Count > 0) { MiscOrderDetail fisrDet = outDetail.First(); MiscOrderMoveType miscOrderMoveType = genericMgr.FindAll<MiscOrderMoveType>("from MiscOrderMoveType as m where m.MoveType='261'")[0]; MiscOrderMaster miscMaster = new MiscOrderMaster(); miscMaster.Type = miscOrderMoveType.IOType; miscMaster.MoveType = miscOrderMoveType.MoveType; miscMaster.CancelMoveType = miscOrderMoveType.CancelMoveType; miscMaster.Region = fisrDet.Region; miscMaster.Location = fisrDet.Location; miscMaster.EffectiveDate = fisrDet.EffectiveDate; miscMaster.Consignment = false; miscMaster.ManufactureParty = null; miscMaster.IsScanHu = false; miscMaster.ReferenceNo = null; miscMaster.MiscOrderDetails = outDetail; miscMaster.WMSNo = wMSNo; //备注 activeMasterList.Add(miscMaster); } //262 一张单 var inDetail = activeDetailList.Where(a => a.MoveType == "262").ToList(); if (inDetail != null && inDetail.Count > 0) { MiscOrderDetail fisrInDet = inDetail.First(); MiscOrderMoveType miscOrderInMoveType = genericMgr.FindAll<MiscOrderMoveType>("from MiscOrderMoveType as m where m.MoveType='262'")[0]; var inMiscOrder = new MiscOrderMaster(); inMiscOrder.Type = miscOrderInMoveType.IOType; inMiscOrder.MoveType = miscOrderInMoveType.MoveType; inMiscOrder.CancelMoveType = miscOrderInMoveType.CancelMoveType; inMiscOrder.Region = fisrInDet.Region; inMiscOrder.Location = fisrInDet.Location; inMiscOrder.EffectiveDate = fisrInDet.EffectiveDate; inMiscOrder.Consignment = false; inMiscOrder.ManufactureParty = null; inMiscOrder.IsScanHu = false; inMiscOrder.ReferenceNo = null; inMiscOrder.MiscOrderDetails = inDetail; inMiscOrder.WMSNo = wMSNo; //备注 activeMasterList.Add(inMiscOrder); } if (businessException.HasMessage) { throw businessException; } string message = "生成单号"; foreach (var master in activeMasterList) { master.QualityType = com.Sconit.CodeMaster.QualityType.Qualified; activeDetailList = master.MiscOrderDetails; master.MiscOrderDetails = new List<MiscOrderDetail>(); this.CreateMiscOrder(master); BatchUpdateMiscOrderDetails(master, activeDetailList, null, null); this.genericMgr.FlushSession(); CloseMiscOrder(master, master.EffectiveDate); message += " " + master.MiscOrderNo + ";"; } MessageHolder.AddMessage(new Message(CodeMaster.MessageType.Info, message)); #endregion }
private void RecordLocationTransaction(MiscOrderMaster miscOrderMaster, MiscOrderDetail miscOrderDetail, DateTime effectiveDate, IList<InventoryTransaction> inventoryTransactionList, bool isVoid) { DateTime dateTimeNow = DateTime.Now; if (miscOrderMaster.IsScanHu) { //按条码出入库只可能有一条 InventoryTransaction inventoryTransaction = inventoryTransactionList[0]; LocationTransaction locationTransaction = new LocationTransaction(); locationTransaction.OrderNo = miscOrderMaster.MiscOrderNo; //locationTransaction.OrderType = ipDetail.OrderType; //locationTransaction.OrderSubType = ipDetail.OrderSubType; locationTransaction.OrderDetailSequence = miscOrderDetail.Sequence; locationTransaction.OrderDetailId = miscOrderDetail.Id; //locationTransaction.OrderBomDetId = //locationTransaction.IpNo = ipDetail.IpNo; //locationTransaction.IpDetailId = ipDetail.Id; //locationTransaction.IpDetailSequence = ipDetail.Sequence; //locationTransaction.ReceiptNo = string.Empty; //locationTransaction.RecDetSeq = //locationTransaction.SequenceNo = ipDetailInput.SequenceNo; //locationTransaction.TraceCode = locationTransaction.Item = miscOrderDetail.Item; locationTransaction.Uom = miscOrderDetail.Uom; locationTransaction.BaseUom = miscOrderDetail.BaseUom; locationTransaction.Qty = inventoryTransaction.Qty / miscOrderDetail.UnitQty; //转为订单单位 locationTransaction.UnitQty = miscOrderDetail.UnitQty; locationTransaction.IsConsignment = inventoryTransaction.IsConsignment; if (inventoryTransaction.PlanBill.HasValue) { locationTransaction.PlanBill = inventoryTransaction.PlanBill.Value; } locationTransaction.PlanBillQty = inventoryTransaction.PlanBillQty / miscOrderDetail.UnitQty; //转为订单单位 if (inventoryTransaction.ActingBill.HasValue) { locationTransaction.ActingBill = inventoryTransaction.ActingBill.Value; } locationTransaction.ActingBillQty = inventoryTransaction.ActingBillQty / miscOrderDetail.UnitQty; //转为订单单位 locationTransaction.QualityType = inventoryTransaction.QualityType; locationTransaction.HuId = inventoryTransaction.HuId; locationTransaction.LotNo = inventoryTransaction.LotNo; if (!isVoid) { locationTransaction.TransactionType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionType.ISS_UNP : CodeMaster.TransactionType.RCT_UNP; } else { locationTransaction.TransactionType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionType.ISS_UNP_VOID : CodeMaster.TransactionType.RCT_UNP_VOID; } locationTransaction.IOType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionIOType.Out : CodeMaster.TransactionIOType.In; locationTransaction.PartyFrom = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? miscOrderMaster.Region : null; locationTransaction.PartyTo = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? null : miscOrderMaster.Region; locationTransaction.LocationFrom = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? (!string.IsNullOrWhiteSpace(miscOrderDetail.Location) ? miscOrderDetail.Location : miscOrderMaster.Location) : null; locationTransaction.LocationTo = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? null : (!string.IsNullOrWhiteSpace(miscOrderDetail.Location) ? miscOrderDetail.Location : miscOrderMaster.Location); locationTransaction.LocationIOReason = miscOrderMaster.MoveType; locationTransaction.EffectiveDate = effectiveDate; locationTransaction.CreateUserId = SecurityContextHolder.Get().Id; locationTransaction.CreateDate = dateTimeNow; this.genericMgr.Create(locationTransaction); RecordLocationTransactionDetail(locationTransaction, inventoryTransactionList); } else { //根据PlanBill和ActingBill分组,为了不同供应商的库存事务分开 var groupedInventoryTransactionList = from trans in inventoryTransactionList group trans by new { IsConsignment = trans.IsConsignment, PlanBill = trans.PlanBill, ActingBill = trans.ActingBill } into result select new { IsConsignment = result.Key.IsConsignment, PlanBill = result.Key.PlanBill, ActingBill = result.Key.ActingBill, Qty = result.Sum(trans => trans.Qty), PlanBillQty = result.Sum(trans => trans.PlanBillQty), ActingBillQty = result.Sum(trans => trans.ActingBillQty), InventoryTransactionList = result.ToList() }; foreach (var groupedInventoryTransaction in groupedInventoryTransactionList) { LocationTransaction locationTransaction = new LocationTransaction(); locationTransaction.OrderNo = miscOrderMaster.MiscOrderNo; //locationTransaction.OrderType = ipDetail.OrderType; //locationTransaction.OrderSubType = ipDetail.OrderSubType; locationTransaction.OrderDetailSequence = miscOrderDetail.Sequence; locationTransaction.OrderDetailId = miscOrderDetail.Id; //locationTransaction.OrderBomDetId = //locationTransaction.IpNo = ipDetail.IpNo; //locationTransaction.IpDetailId = ipDetail.Id; //locationTransaction.IpDetailSequence = ipDetail.Sequence; //locationTransaction.ReceiptNo = string.Empty; //locationTransaction.RecDetSeq = //locationTransaction.SequenceNo = ipDetailInput.SequenceNo; //locationTransaction.TraceCode = locationTransaction.Item = miscOrderDetail.Item; locationTransaction.Uom = miscOrderDetail.Uom; locationTransaction.BaseUom = miscOrderDetail.BaseUom; locationTransaction.Qty = groupedInventoryTransaction.Qty / miscOrderDetail.UnitQty; //转为订单单位 locationTransaction.UnitQty = miscOrderDetail.UnitQty; locationTransaction.IsConsignment = groupedInventoryTransaction.IsConsignment; if (groupedInventoryTransaction.IsConsignment && groupedInventoryTransaction.PlanBill.HasValue) { locationTransaction.PlanBill = groupedInventoryTransaction.PlanBill.Value; } locationTransaction.PlanBillQty = groupedInventoryTransaction.PlanBillQty / miscOrderDetail.UnitQty; //转为订单单位 if (groupedInventoryTransaction.ActingBill.HasValue) { locationTransaction.ActingBill = groupedInventoryTransaction.ActingBill.Value; } locationTransaction.ActingBillQty = groupedInventoryTransaction.ActingBillQty / miscOrderDetail.UnitQty; //转为订单单位 locationTransaction.QualityType = miscOrderMaster.QualityType; //locationTransaction.HuId = ipDetailInput.HuId; //locationTransaction.LotNo = ipDetailInput.LotNo; if (!isVoid) { locationTransaction.TransactionType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionType.ISS_UNP : CodeMaster.TransactionType.RCT_UNP; } else { locationTransaction.TransactionType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionType.ISS_UNP_VOID : CodeMaster.TransactionType.RCT_UNP_VOID; } locationTransaction.IOType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionIOType.Out : CodeMaster.TransactionIOType.In; locationTransaction.PartyFrom = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? miscOrderMaster.Region : null; locationTransaction.PartyTo = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? null : miscOrderMaster.Region; locationTransaction.LocationFrom = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? (!string.IsNullOrWhiteSpace(miscOrderDetail.Location) ? miscOrderDetail.Location : miscOrderMaster.Location) : null; locationTransaction.LocationTo = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? null : !string.IsNullOrWhiteSpace(miscOrderDetail.Location) ? miscOrderDetail.Location : miscOrderMaster.Location; locationTransaction.LocationIOReason = miscOrderMaster.MoveType; locationTransaction.EffectiveDate = effectiveDate; locationTransaction.CreateUserId = SecurityContextHolder.Get().Id; locationTransaction.CreateDate = dateTimeNow; this.genericMgr.Create(locationTransaction); RecordLocationTransactionDetail(locationTransaction, groupedInventoryTransaction.InventoryTransactionList); } } }
public IList<InventoryTransaction> InventoryOtherInOut(MiscOrderMaster miscOrderMaster, MiscOrderDetail miscOrderDetail, DateTime effectiveDate) { List<InventoryTransaction> inventoryTransactionList = new List<InventoryTransaction>(); #region 出库 if (miscOrderMaster.IsScanHu) { #region 条码 foreach (MiscOrderLocationDetail miscOrderLocationDetail in miscOrderDetail.MiscOrderLocationDetails) { if (miscOrderMaster.Type == CodeMaster.MiscOrderType.GR && miscOrderMaster.IsCs && !string.IsNullOrWhiteSpace(miscOrderDetail.ManufactureParty)) { PlanBill planBill = this.billMgr.CreatePlanBill(miscOrderMaster, miscOrderDetail, miscOrderLocationDetail, effectiveDate); miscOrderLocationDetail.IsCreatePlanBill = true; miscOrderLocationDetail.IsConsignment = true; miscOrderLocationDetail.PlanBill = planBill.Id; } InventoryIO inventoryIO = new InventoryIO(); inventoryIO.Location = !string.IsNullOrWhiteSpace(miscOrderDetail.Location) ? miscOrderDetail.Location : miscOrderMaster.Location; inventoryIO.Item = miscOrderLocationDetail.Item; inventoryIO.HuId = miscOrderLocationDetail.HuId; inventoryIO.Qty = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? -miscOrderLocationDetail.Qty : miscOrderLocationDetail.Qty; //出库为负数 inventoryIO.LotNo = miscOrderLocationDetail.LotNo; inventoryIO.QualityType = miscOrderLocationDetail.QualityType; inventoryIO.IsATP = miscOrderLocationDetail.QualityType == com.Sconit.CodeMaster.QualityType.Qualified; inventoryIO.IsFreeze = miscOrderLocationDetail.IsFreeze; inventoryIO.IsCreatePlanBill = miscOrderLocationDetail.IsCreatePlanBill; inventoryIO.IsConsignment = miscOrderLocationDetail.IsConsignment; inventoryIO.PlanBill = miscOrderLocationDetail.PlanBill; inventoryIO.ActingBill = miscOrderLocationDetail.ActingBill; inventoryIO.TransactionType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionType.ISS_UNP : CodeMaster.TransactionType.RCT_UNP; inventoryIO.OccupyType = miscOrderLocationDetail.OccupyType; inventoryIO.OccupyReferenceNo = miscOrderLocationDetail.OccupyReferenceNo; inventoryIO.IsVoid = false; inventoryIO.EffectiveDate = effectiveDate; //inventoryIO.ManufactureParty = ; IList<InventoryTransaction> currentInventoryTransactionList = RecordInventory(inventoryIO); RecordLocationTransaction(miscOrderMaster, miscOrderDetail, effectiveDate, currentInventoryTransactionList, false); inventoryTransactionList.AddRange(currentInventoryTransactionList); } #endregion } else { #region 数量 PlanBill planBill = null; if (miscOrderMaster.Type == CodeMaster.MiscOrderType.GR && !string.IsNullOrWhiteSpace(miscOrderDetail.ManufactureParty)) { planBill = this.billMgr.CreatePlanBill(miscOrderMaster, miscOrderDetail, null, effectiveDate); } InventoryIO inventoryIO = new InventoryIO(); inventoryIO.Location = !string.IsNullOrWhiteSpace(miscOrderDetail.Location) ? miscOrderDetail.Location : miscOrderMaster.Location; inventoryIO.Item = miscOrderDetail.Item; //inventoryIO.HuId = miscOrderDetail.HuId; inventoryIO.Qty = (miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? -miscOrderDetail.Qty : miscOrderDetail.Qty) * miscOrderDetail.UnitQty; //出库为负数,同时转为库存单位 //inventoryIO.LotNo = miscOrderLocationDetail.LotNo; inventoryIO.QualityType = miscOrderMaster.QualityType; inventoryIO.IsATP = miscOrderMaster.QualityType == com.Sconit.CodeMaster.QualityType.Qualified; inventoryIO.IsFreeze = false; inventoryIO.IsCreatePlanBill = planBill != null; inventoryIO.IsConsignment = planBill != null; inventoryIO.PlanBill = planBill != null ? (int?)planBill.Id : null; //inventoryIO.ActingBill = miscOrderLocationDetail.ActingBill; inventoryIO.TransactionType = miscOrderMaster.Type == CodeMaster.MiscOrderType.GI ? CodeMaster.TransactionType.ISS_UNP : CodeMaster.TransactionType.RCT_UNP; //inventoryIO.OccupyType = miscOrderLocationDetail.OccupyType; //inventoryIO.OccupyReferenceNo = miscOrderLocationDetail.OccupyReferenceNo; inventoryIO.IsVoid = false; inventoryIO.EffectiveDate = effectiveDate; inventoryIO.ManufactureParty = miscOrderDetail.ManufactureParty; IList<InventoryTransaction> currentInventoryTransactionList = RecordInventory(inventoryIO); RecordLocationTransaction(miscOrderMaster, miscOrderDetail, effectiveDate, currentInventoryTransactionList, false); inventoryTransactionList.AddRange(currentInventoryTransactionList); #endregion } #endregion return inventoryTransactionList; }
public void Import201202MiscOrder(Stream inputStream, string wMSNo, string moveTypeSet, string cancelMoveTypeSet,string miscType) { #region 导入数据 if (inputStream.Length == 0) { throw new BusinessException("Import.Stream.Empty"); } HSSFWorkbook workbook = new HSSFWorkbook(inputStream); ISheet sheet = workbook.GetSheetAt(0); IEnumerator rows = sheet.GetRowEnumerator(); ImportHelper.JumpRows(rows, 10); #region 列定义 int colMoveType = 1;//移动类型 //int colEffectiveDate = 2;//生效日期 //int colRegion = 3;//区域 int colLocation = 2;//库位 //int colReferenceNo = 5;//Sap订单号 int colItem = 3;//物料编号 int colQty = 4;//数量 int colCostCenter = 5;//成本中心 DateTime? prevEffeDate = null; string prevRegion = string.Empty; #endregion BusinessException businessException = new BusinessException(); int rowCount = 10; IList<MiscOrderDetail> activeDetailList = new List<MiscOrderDetail>(); IList<MiscOrderMaster> activeMasterList = new List<MiscOrderMaster>(); IList<Region> regionList = this.genericMgr.FindAll<Region>(); IList<Item> itemList = this.genericMgr.FindAll<Item>(); IList<Location> locationList = this.genericMgr.FindAll<Location>(); IList<Location> adjustocationList = this.genericMgr.FindAll<Location>(); IList<CostCenter> costCenterList = this.genericMgr.FindAll<CostCenter>(); //调整单Check库位权限 User user = SecurityContextHolder.Get(); string sql = @"select * from MD_Location as l where Code in(select distinct(LocFrom) from SCM_FlowMstr where type=4) and l.IsActive = ?"; IList<object> paramList = new List<object>(); paramList.Add(true); sql += " order by LEN(Code),Code "; adjustocationList = genericMgr.FindEntityWithNativeSql<Location>(sql, paramList.ToArray()) .Where(p => user.RegionPermissions.Contains(p.Region)).ToList(); // while (rows.MoveNext()) { rowCount++; HSSFRow row = (HSSFRow)rows.Current; if (!ImportHelper.CheckValidDataRow(row, 1, 9)) { break;//边界 } string moveType = string.Empty; DateTime effectiveDate = System.DateTime.Now; string regionCode = string.Empty; string locationCode = string.Empty; string costCenterCode = string.Empty; string referenceNo = string.Empty; string itemCode = string.Empty; decimal qty = 0; Item item = new Item(); #region 读取数据 #region 移动类型 moveType = ImportHelper.GetCellStringValue(row.GetCell(colMoveType)); if (string.IsNullOrWhiteSpace(moveType)) { businessException.AddMessage(string.Format("第{0}行:移动类型不能为空。", rowCount)); } else { if (moveType != moveTypeSet && moveType != cancelMoveTypeSet) { businessException.AddMessage(string.Format("第{0}行:移动类型{1}填写有误,只能填{2}、{3}。", rowCount, moveType, moveTypeSet, cancelMoveTypeSet)); } } #endregion //#region 生效日期 //string readEffectiveDate = ImportHelper.GetCellStringValue(row.GetCell(colEffectiveDate)); //if (string.IsNullOrWhiteSpace(readEffectiveDate)) //{ // businessException.AddMessage(string.Format("第{0}行:生效日期不能为空。", rowCount)); //} //else //{ // if (!DateTime.TryParse(readEffectiveDate, out effectiveDate)) // { // businessException.AddMessage(string.Format("第{0}行:生效日期{1}填写有误.", rowCount, moveType)); // continue; // } // if (prevEffeDate != null) // { // if (prevEffeDate.Value != effectiveDate) // { // businessException.AddMessage(string.Format("第{0}行:生效日期{1}与前一行生效日期{2}不同。", rowCount, effectiveDate, prevEffeDate.Value)); // continue; // } // } // prevEffeDate = effectiveDate; //} //#endregion //#region 区域 //regionCode = ImportHelper.GetCellStringValue(row.GetCell(colRegion)); //if (string.IsNullOrWhiteSpace(regionCode)) //{ // businessException.AddMessage(string.Format("第{0}行:区域不能为空。", rowCount)); //} //else //{ // if (string.IsNullOrWhiteSpace(prevRegion)) // { // var regions = regionList.Where(l => l.Code == regionCode).ToList(); // if (regions == null || regions.Count == 0) // { // businessException.AddMessage(string.Format("第{0}行:区域{1}填写有误.", rowCount, regionCode)); // } // } // else // { // if (regionCode != prevRegion) // { // businessException.AddMessage(string.Format("第{0}行:区域{1}与前一行区域{2}不同。", rowCount, regionCode, prevRegion)); // continue; // } // } // prevRegion = regionCode; //} //#endregion #region 读取库位 locationCode = ImportHelper.GetCellStringValue(row.GetCell(colLocation)); if (!string.IsNullOrEmpty(locationCode)) { var locations = locationList.Where(l => l.Code == locationCode).ToList(); if (locations == null || locations.Count == 0) { businessException.AddMessage(string.Format("第{0}行:库位{1}不存在。", rowCount, locationCode)); } //else if (locations.First().Region != regionCode) //{ // businessException.AddMessage(string.Format("第{0}行:区域{1}不存在库位{2}。", rowCount, regionCode, locationCode)); //} else { regionCode = locations[0].Region; } if (miscType == "AdjustOrder") { var adjustlocations = adjustocationList.Where(l => l.Code == locationCode).ToList(); if (adjustlocations == null || adjustlocations.Count == 0) { businessException.AddMessage(string.Format("第{0}行:用户没有调整库位{1}的权限。", rowCount, locationCode)); } } } else { //businessException.AddMessage(string.Format("第{0}行:区域不能为空。", rowCount)); } #endregion #region 成本中心 costCenterCode = ImportHelper.GetCellStringValue(row.GetCell(colCostCenter)); if (!string.IsNullOrEmpty(costCenterCode)) { var costCenters = costCenterList.Where(l => l.Code == costCenterCode).ToList(); if (costCenters == null || costCenters.Count == 0) { businessException.AddMessage(string.Format("第{0}行:成本中心{1}不存在。", rowCount, costCenterCode)); } else { costCenterCode = costCenters.ToList().FirstOrDefault().Code; } //else if (locations.First().Region != regionCode) //{ // businessException.AddMessage(string.Format("第{0}行:区域{1}不存在库位{2}。", rowCount, regionCode, locationCode)); //} } else if (moveTypeSet=="201") { businessException.AddMessage(string.Format("第{0}行:成本中心不能为空。", rowCount)); } #endregion //#region Sap订单号 //referenceNo = ImportHelper.GetCellStringValue(row.GetCell(colReferenceNo)); //if (string.IsNullOrEmpty(referenceNo)) //{ // businessException.AddMessage(string.Format("第{0}行:Sap订单号不能为空。", rowCount)); //} //else //{ // //if (this.genericMgr.FindAllWithNativeSql<int>("select count(*) from SAP_ProdBomDet where AUFNR=? ", referenceNo.PadLeft(12, '0'))[0] == 0) // //{ // // businessException.AddMessage(string.Format("第{0}行:Sap订单号不存在ORD_OrderMstr_4表中。", rowCount)); // //} //} //#endregion #region 物料编号 itemCode = ImportHelper.GetCellStringValue(row.GetCell(colItem)); if (string.IsNullOrWhiteSpace(itemCode)) { businessException.AddMessage(string.Format("第{0}行:物料编号不能为空。", rowCount)); } else { var items = itemList.Where(l => l.Code == itemCode).ToList(); if (items == null || items.Count == 0) { businessException.AddMessage(string.Format("第{0}行:物料编号{1}不存在.", rowCount, itemCode)); } else { item = items.First(); } } #endregion #region 数量 string readQty = ImportHelper.GetCellStringValue(row.GetCell(colQty)); if (string.IsNullOrEmpty(readQty)) { businessException.AddMessage(string.Format("第{0}行:数量不能为空。", rowCount)); } else { decimal.TryParse(readQty, out qty); if (qty <= 0) { businessException.AddMessage(string.Format("第{0}行:数量{1}只能为大于等于0的数字。", rowCount, readQty)); } } #endregion #endregion #region 填充数据 if (!businessException.HasMessage) { MiscOrderDetail miscOrderDetail = new MiscOrderDetail(); miscOrderDetail.MoveType = moveType; miscOrderDetail.EffectiveDate = effectiveDate; miscOrderDetail.Location = locationCode; miscOrderDetail.Region= regionCode; miscOrderDetail.Item = item.Code; miscOrderDetail.ItemDescription = item.Description; miscOrderDetail.ReferenceItemCode = item.ReferenceCode; miscOrderDetail.Uom = item.Uom; miscOrderDetail.BaseUom = item.Uom; miscOrderDetail.UnitCount = item.UnitCount; miscOrderDetail.Qty = qty; miscOrderDetail.CostCenter = costCenterCode; activeDetailList.Add(miscOrderDetail); } #endregion } if (businessException.HasMessage) { throw businessException; } if (activeDetailList.Count == 0) { throw new BusinessException("导入的有效数据为0,请确实。"); } //Merge details //201一张单 var allLocation = activeDetailList.Select(p => p.Location).Distinct(); foreach (var location in allLocation) { var outDetail = activeDetailList.Where(a => a.MoveType == moveTypeSet && a.Location==(string)location).ToList(); if (outDetail != null && outDetail.Count > 0) { MiscOrderDetail fisrDet = outDetail.First(); MiscOrderMoveType miscOrderMoveType = genericMgr.FindAll<MiscOrderMoveType>("from MiscOrderMoveType as m where m.MoveType =? ", moveTypeSet)[0]; MiscOrderMaster miscMaster = new MiscOrderMaster(); miscMaster.Type = miscOrderMoveType.IOType; miscMaster.MoveType = miscOrderMoveType.MoveType; miscMaster.CancelMoveType = miscOrderMoveType.CancelMoveType; miscMaster.Location = fisrDet.Location; miscMaster.Region = fisrDet.Region; miscMaster.EffectiveDate = fisrDet.EffectiveDate; miscMaster.IsScanHu = false; miscMaster.ReferenceNo = null; miscMaster.MiscOrderDetails = outDetail; miscMaster.WMSNo = wMSNo; //备注 miscMaster.CostCenter = fisrDet.CostCenter; miscMaster.SubType = miscType == "AdjustOrder" ? CodeMaster.MiscOrderSubType.SY05 : CodeMaster.MiscOrderSubType.COST; activeMasterList.Add(miscMaster); } //202 一张单 var inDetail = activeDetailList.Where(a => a.MoveType == cancelMoveTypeSet && a.Location == (string)location).ToList(); if (inDetail != null && inDetail.Count > 0) { MiscOrderDetail fisrInDet = inDetail.First(); MiscOrderMoveType miscOrderInMoveType = genericMgr.FindAll<MiscOrderMoveType>("from MiscOrderMoveType as m where m.MoveType =? ", cancelMoveTypeSet)[0]; var inMiscOrder = new MiscOrderMaster(); inMiscOrder.Type = miscOrderInMoveType.IOType; inMiscOrder.MoveType = miscOrderInMoveType.MoveType; inMiscOrder.CancelMoveType = miscOrderInMoveType.CancelMoveType; inMiscOrder.Location = fisrInDet.Location; inMiscOrder.Region = fisrInDet.Region; inMiscOrder.EffectiveDate = fisrInDet.EffectiveDate; inMiscOrder.IsScanHu = false; inMiscOrder.ReferenceNo = null; inMiscOrder.MiscOrderDetails = inDetail; inMiscOrder.WMSNo = wMSNo; //备注 inMiscOrder.CostCenter = fisrInDet.CostCenter; inMiscOrder.SubType = miscType == "AdjustOrder" ? CodeMaster.MiscOrderSubType.SY05 : CodeMaster.MiscOrderSubType.COST; activeMasterList.Add(inMiscOrder); } } if (businessException.HasMessage) { throw businessException; } string message = "生成单号"; foreach (var master in activeMasterList) { master.QualityType = com.Sconit.CodeMaster.QualityType.Qualified; activeDetailList = (from p in master.MiscOrderDetails group p by new { p.Item, p.ItemDescription, p.ReferenceItemCode, p.Uom, p.BaseUom, p.UnitCount, p.Location } into g select new MiscOrderDetail { Sequence = g.Max(p => p.Sequence), Item = g.Key.Item, ItemDescription = g.Key.ItemDescription, ReferenceItemCode = g.Key.ReferenceItemCode, Uom = g.Key.Uom, BaseUom = g.Key.BaseUom, UnitCount = g.Key.UnitCount, UnitQty = 1, Location = g.Key.Location, Qty = g.Sum(p => p.Qty), }).ToList(); master.MiscOrderDetails = new List<MiscOrderDetail>(); this.CreateMiscOrder(master); BatchUpdateMiscOrderDetails(master, activeDetailList, null, null); this.genericMgr.FlushSession(); master.MiscOrderDetails = null; //CloseMiscOrder(master, master.EffectiveDate); message += " " + master.MiscOrderNo + ";"; } MessageHolder.AddMessage(new Message(CodeMaster.MessageType.Info, message)); #endregion }
public ActionResult CreateMiscOrder(MiscOrderMaster miscOrderMaster, string sequences, string items, string qtys) { try { if (items == string.Empty) { throw new BusinessException(Resources.EXT.ControllerLan.Con_DetailBeEmptyCanNotCreate); } MiscOrderMoveType miscOrderMoveType = genericMgr.FindAll<MiscOrderMoveType>( "from MiscOrderMoveType as m where m.MoveType=? and m.SubType=? ", new object[] { miscOrderMaster.MoveType, com.Sconit.CodeMaster.MiscOrderSubType.SY05 })[0]; //页面不加生效日期 //miscOrderMaster.EffectiveDate = DateTime.Now; miscOrderMaster.Type = miscOrderMoveType.IOType; miscOrderMaster.SubType = miscOrderMoveType.SubType; miscOrderMaster.MoveType = miscOrderMoveType.MoveType; miscOrderMaster.CancelMoveType = miscOrderMoveType.CancelMoveType; miscOrderMaster.Status = CodeMaster.MiscOrderStatus.Create; miscOrderMaster.Region = this.genericMgr.FindById<Location>(miscOrderMaster.Location).Region; string[] SequencesArray = sequences.Split(','); string[] ItemsArray = items.Split(','); string[] OrderedQtysArray = qtys.Split(','); IList<MiscOrderDetail> miscOrderDetails = new List<MiscOrderDetail>(); for (int i = 0; i < ItemsArray.Length; i++) { var item = this.genericMgr.FindById<Item>(ItemsArray[i]); MiscOrderDetail od = new MiscOrderDetail(); od.Sequence = Convert.ToInt32(SequencesArray[i]); od.Item = item.Code; od.ItemDescription = item.Description; od.ReferenceItemCode = item.ReferenceCode; od.Uom = item.Uom; od.BaseUom = item.Uom; od.UnitCount = item.UnitCount; od.UnitQty = 1; od.Qty = Convert.ToDecimal(OrderedQtysArray[i]); miscOrderDetails.Add(od); } miscOrderMaster.MiscOrderDetails = (from p in miscOrderDetails group p by new { p.Item, p.ItemDescription, p.ReferenceItemCode, p.Uom, p.BaseUom, p.UnitCount, } into g select new MiscOrderDetail { Sequence = g.Max(p => p.Sequence), Item = g.Key.Item, ItemDescription = g.Key.ItemDescription, ReferenceItemCode = g.Key.ReferenceItemCode, Uom = g.Key.Uom, BaseUom = g.Key.BaseUom, UnitCount = g.Key.UnitCount, UnitQty = 1, Qty = g.Sum(p => p.Qty), }).ToList(); miscOrderMgr.CreateMiscOrder(miscOrderMaster); SaveSuccessMessage(Resources.EXT.ControllerLan.Con_CreateSuccessfully); ViewBag.miscOrderNo = miscOrderMaster.MiscOrderNo; ViewBag.Flow = miscOrderMaster.Flow; return View("Edit", miscOrderMaster); } catch (Exception ex) { SaveErrorMessage(ex); return Json(null); } }
private IList<MiscOrderDetail> getNewMiscOrderDetailList(MiscOrderMaster miscOrderMaster,IList<InspectResult> inspectResultList) { IList<MiscOrderDetail> newMiscOrderDetailList = new List<MiscOrderDetail>(); foreach (InspectResult inspectResult in inspectResultList) { Item item = this.genericMgr.FindById<Item>(inspectResult.Item); MiscOrderDetail misc = new MiscOrderDetail(); misc.Item = item.Code; misc.ReferenceItemCode = item.ReferenceCode; misc.ItemDescription = item.Description; misc.UnitCount = item.UnitCount; misc.Uom = item.Uom; misc.BaseUom = item.Uom; misc.MiscOrderNo = miscOrderMaster.MiscOrderNo; misc.Location = inspectResult.CurrentLocation; misc.ReserveLine = inspectResult.ReserveLine; misc.ReserveNo = inspectResult.ReserveNo; misc.EBELN = inspectResult.IpNo; misc.EBELP = inspectResult.EBELP; misc.Qty = inspectResult.CurrentHandleQty; misc.ManufactureParty = inspectResult.ManufactureParty; // ReceiptDetail receiptDet = this.genericMgr.FindById<ReceiptDetail>(this.genericMgr.FindById<InspectDetail>(inspectResult.InspectDetailId).re); newMiscOrderDetailList.Add(misc); } return newMiscOrderDetailList; }
public ActionResult CreateMiscOrder(MiscOrderMaster miscOrderMaster, string[] sequences, string[] items, string[] qtys, string[] locations) { try { if (items == null || items.Length == 0) { throw new BusinessException(Resources.EXT.ControllerLan.Con_DetailBeEmptyCanNotCreate); } MiscOrderMoveType miscOrderMoveType = genericMgr.FindAll<MiscOrderMoveType>( "from MiscOrderMoveType as m where m.MoveType=? and m.SubType=? ", new object[] { miscOrderMaster.MoveType, com.Sconit.CodeMaster.MiscOrderSubType.SY04 })[0]; miscOrderMaster.Type = miscOrderMoveType.IOType; miscOrderMaster.SubType = miscOrderMoveType.SubType; miscOrderMaster.MoveType = miscOrderMoveType.MoveType; miscOrderMaster.CancelMoveType = miscOrderMoveType.CancelMoveType; miscOrderMaster.Status = CodeMaster.MiscOrderStatus.Create; miscOrderMaster.QualityType = miscOrderMaster.QualityType; var flow = this.genericMgr.FindById<FlowMaster>(miscOrderMaster.Flow); miscOrderMaster.Region = flow.PartyTo; miscOrderMaster.Location = flow.LocationTo; //if (miscOrderMaster.MoveType == "261" || miscOrderMaster.MoveType == "262") //{ // miscOrderMaster.Region = flow.PartyFrom; // miscOrderMaster.Location = flow.LocationFrom; //} //else //{ // miscOrderMaster.Region = flow.PartyTo; // miscOrderMaster.Location = flow.LocationTo; //} IList<MiscOrderDetail> miscOrderDetails = new List<MiscOrderDetail>(); for (int i = 0; i < items.Length; i++) { var item = this.genericMgr.FindById<Item>(items[i]); MiscOrderDetail od = new MiscOrderDetail(); od.Sequence = Convert.ToInt32(sequences[i]); od.Item = item.Code; od.ItemDescription = item.Description; od.ReferenceItemCode = item.ReferenceCode; od.Uom = item.Uom; od.BaseUom = item.Uom; od.UnitCount = item.UnitCount; od.UnitQty = 1; od.Qty = Convert.ToDecimal(qtys[i]); if (!string.IsNullOrWhiteSpace(locations[i])) { od.Location = locations[i]; } miscOrderDetails.Add(od); } miscOrderMaster.MiscOrderDetails = (from p in miscOrderDetails group p by new { p.Item, p.ItemDescription, p.ReferenceItemCode, p.Uom, p.BaseUom, p.UnitCount, } into g select new MiscOrderDetail { Sequence = g.Max(p => p.Sequence), Item = g.Key.Item, ItemDescription = g.Key.ItemDescription, ReferenceItemCode = g.Key.ReferenceItemCode, Uom = g.Key.Uom, BaseUom = g.Key.BaseUom, UnitCount = g.Key.UnitCount, UnitQty = 1, Qty = g.Sum(p => p.Qty), }).ToList(); SaveSuccessMessage(Resources.EXT.ControllerLan.Con_CreateSuccessfully); miscOrderMgr.CreateMiscOrder(miscOrderMaster); ViewBag.miscOrderNo = miscOrderMaster.MiscOrderNo; ViewBag.Flow = miscOrderMaster.Flow; return View("Edit", miscOrderMaster); } catch (Exception ex) { SaveErrorMessage(ex); return Json(null); } }