コード例 #1
0
 public void AddMiscOrderDetail(MiscOrderDetail miscOrderDetail)
 {
     if (this.MiscOrderDetails == null)
     {
         this.MiscOrderDetails = new List<MiscOrderDetail>();
     }
     this.MiscOrderDetails.Add(miscOrderDetail);
 }
コード例 #2
0
        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
        }
コード例 #3
0
        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
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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));
        }
コード例 #8
0
 public IList<InventoryTransaction> InventoryOtherInOut(MiscOrderMaster miscOrderMaster, MiscOrderDetail miscOrderDetail)
 {
     return InventoryOtherInOut(miscOrderMaster, miscOrderDetail, DateTime.Now);
 }
コード例 #9
0
 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();
 }
コード例 #10
0
        /// <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
        }
コード例 #11
0
        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
        }
コード例 #12
0
        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
        }
コード例 #13
0
        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);
                }
            }
        }
コード例 #14
0
        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;
        }
コード例 #15
0
        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
        }
コード例 #16
0
        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);
            }
        }
コード例 #17
0
ファイル: InspectMgrImpl.cs プロジェクト: Novthirteen/sih-les
 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;
 
 }
コード例 #18
0
        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);
            }
        }