예제 #1
0
 /// <summary>
 ///     创建【拣料单】
 /// </summary>
 /// <param name="db"></param>
 /// <param name="billPickFact">拣料单</param>
 /// <param name="details">拣料明细</param>
 /// <returns></returns>
 public static void AddMaterialOut(SpareEntities db, TB_BILL billPickFact, List <TB_OUT> details)
 {
     {
         //校验单据状态是否为新建
         if (billPickFact.State != (int)BillState.New)
         {
             throw new WmsException(ResultCode.DataStateError,
                                    billPickFact.BillNum, "状态错误,不应为:" + billPickFact.State);
         }
         if (string.IsNullOrEmpty(billPickFact.BillNum))
         {
             SetBillNum(billPickFact);                               //设置单据编号
             details.ForEach(p => p.BillNum = billPickFact.BillNum); //设置明细编号
             NotifyController.AddNotify(db, billPickFact.OperName, NotifyType.MaterialOut, billPickFact.BillNum, "");
         }
         else
         {
             var dbOutList = db.TB_OUT.Where(p => p.BillNum == billPickFact.BillNum).ToList();
             foreach (var det in dbOutList)
             {
                 if (details.FirstOrDefault(p => p.UID == det.UID) == null)
                 {
                     SpareOutController.RemaveDetail(db, det);
                 }
             }
             NotifyController.AddNotify(db, billPickFact.OperName, NotifyType.MaterialOutUpdate, billPickFact.BillNum, "");
         }
         BillController.AddOrUpdate(db, billPickFact);    //添加【原料拣料单】单据
         SpareOutController.AddOrUpdateList(db, details); //更新【实际拣料单】明细
         EntitiesFactory.SaveDb(db);
     }
 }
예제 #2
0
        /// <summary>
        ///     添加【其它出库单】
        /// </summary>
        /// <param name="db"></param>
        /// <param name="bill">其它出库单</param>
        /// <param name="details">其它出库明细</param>
        /// <returns></returns>
        public static void AddOtherOut(SpareEntities db, TB_BILL bill, List <TB_OTHER_OUT> details)
        {
            {
                SetBillNum(bill);                               //设置单据编号
                details.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号
                BillController.AddOrUpdate(db, bill);           //添加单据
                foreach (var detail in details)
                {
                    OtherOutController.AddOrUpdate(db, detail); //添加明细
                }

                var subBillType = (SubBillType)bill.SubBillType;
                switch (subBillType)
                {
                //出库
                case SubBillType.OtherOut:                               //其它出库
                //                    case SubBillType.ReturnToSupplier: //原料退货
                case SubBillType.InventoryLoss:                          //盘亏
                case SubBillType.ScrapDestroy:                           //报废销毁
                    var detailsOut = details.Select(detail => detail.ToStockDetailOut(bill)).ToList();
                    StockDetailController.ListOut(db, bill, detailsOut); //更新【库存主表】【库存明细】出库
                    break;

                default:
                    throw new WmsException(ResultCode.Exception, bill.BillNum, "单据二级类型错误");
                }
                NotifyController.AddNotify(db, bill.OperName, NotifyType.OtherOutApprove, bill.BillNum, "");
            }
        }
예제 #3
0
 private void btnCancel_Click(object sender, EventArgs e)
 {
     if (_bill == null || _bill.单据编号 == null)
     {
         MessageHelper.ShowInfo("请选择单据!");
         return;
     }
     if (_bill.状态 != (int)BillState.New)
     {
         MessageHelper.ShowError("非新建单据,禁止取消!");
         return;
     }
     if (MessageHelper.ShowQuestion("是否要取消盘点计划单?") == DialogResult.Yes)
     {
         BillController.UpdateState(_db, _bill.VWToBill(GlobalVar.Oper.DeptCode), BillState.Cancelled);
         NotifyController.AddNotify(_db, _bill.操作者, NotifyType.InventoryPlanCancel, _bill.单据编号, "");
         var InventoryLocs = InventoryController.GetLocList(_db, _bill.单据编号);
         foreach (var inventoryLoc in InventoryLocs)
         {
             InventoryController.LocCancel(_db, inventoryLoc);
         }
         EntitiesFactory.SaveDb(_db);
         MessageHelper.ShowInfo("取消盘点计划成功!");
         SetMasterDataSource(grid.PageSize);
     }
 }
예제 #4
0
        /// <summary>
        ///     【盘点单】调整库存
        /// </summary>
        /// <param name="db"></param>
        /// <param name="bill"></param>
        /// <param name="details"></param>
        /// <returns></returns>
        public static void AdjustStockByInventoryLoc(SpareEntities db, TB_BILL bill)
        {
            var details = db.TB_INVENTORY_DETAIL.Where(p => p.BillNum == bill.BillNum).ToList();

            InventoryController.AdjustStockByInventory(db, bill, details);
            BillController.UpdateState(db, bill, BillState.Finished);
            NotifyController.AddNotify(db, bill.OperName, NotifyType.InventoryPlanApprove, bill.BillNum, "");
        }
예제 #5
0
 /// <summary>
 ///     【盘点单】更新盘点明细表
 /// </summary>
 /// <param name="db"></param>
 /// <param name="bill"></param>
 /// <param name="details"></param>
 /// <returns></returns>
 public static void AddOrUpdateInventoryDetail(SpareEntities db, TB_BILL bill, List <TB_INVENTORY_DETAIL> details)
 {
     foreach (var detail in details)
     {
         InventoryController.AddOrUpdate(db, detail);
     }
     BillController.UpdateState(db, bill, BillState.Handling);
     NotifyController.AddNotify(db, bill.OperName, NotifyType.InventoryPlanUpdate, bill.BillNum, "");
 }
예제 #6
0
 /// <summary>
 ///     添加移库单,原料入库,成品入库,原料发货,成品出库,其它移库等等都当做移库处理,以SubBillType进行区分
 /// </summary>
 /// <param name="db"></param>
 /// <param name="bill"></param>
 /// <param name="details"></param>
 /// <returns></returns>
 public static void AddStockMove(SpareEntities db, TB_BILL bill, List <TB_STOCK_MOVE> details)
 {
     SetBillNum(bill);                                  //设置单据编号
     details.ForEach(p => p.BillNum = bill.BillNum);    //设置明细编号
     BillController.AddOrUpdate(db, bill);              //添加【移库单】单据
     StockMoveController.AddList(db, details);          //添加【移库单】明细
     StockDetailController.ListMove(db, bill, details); //更新【库存主表】【库存明细】
     NotifyController.AddNotify(db, bill.OperName, NotifyType.StockMoveApprove, bill.BillNum, "");
 }
예제 #7
0
 private void ItemBtnApprove_Click(object sender, EventArgs e)
 {
     if (_bill == null || _bill.单据编号 == null)
     {
         MessageHelper.ShowInfo("请选择单据!");
         return;
     }
     BillController.UpdateState(_db, _bill.VWToBill(GlobalVar.Oper.DeptCode), BillState.Approve);
     EntitiesFactory.SaveDb(_db);
     NotifyController.AddNotify(_db, _bill.操作者, NotifyType.MaterialAskApprove, _bill.单据编号, "");
     MessageHelper.ShowInfo("审核通过!");
     SetMasterDataSource(1, grid.PageSize);
 }
예제 #8
0
파일: FormOut.cs 프로젝트: 0000duck/MES-3
 private void btnCancel_Click(object sender, EventArgs e)
 {
     try
     {
         BillHandler.CancelMaterialAsk(_db, _bill.VWToBill(GlobalVar.Oper.DeptCode));
         NotifyController.AddNotify(_db, _bill.操作者, NotifyType.MaterialOutCancel, _bill.单据编号, "");
         EntitiesFactory.SaveDb(_db);
         SetMasterDataSource(grid.PageIndex, grid.PageSize);
     }
     catch (Exception ex)
     {
         MessageHelper.ShowError(ex.ToString());
     }
 }
예제 #9
0
 /// <summary>
 ///     确认【拣料单】
 /// </summary>
 /// <param name="db"></param>
 /// <param name="bill"></param>
 /// <param name="details"></param>
 /// <returns></returns>
 public static void FinishMaterialOut(SpareEntities db, TB_BILL bill, List <TB_OUT> details)
 {
     //校验单据状态是否为执行中
     if (bill.State != (int)BillState.New)
     {
         throw new WmsException(ResultCode.DataStateError, bill.BillNum, "状态错误,不应为:" + bill.State);
     }
     foreach (var detail in details)
     {
         var detailOut = detail.ToStockDetailOut();
         StockDetailController.Out(db, bill, detailOut);
     }
     BillController.UpdateState(db, bill, BillState.Finished); //更新【拣料单】状态为:完成
     NotifyController.AddNotify(db, bill.OperName, NotifyType.MaterialOutApprove, bill.BillNum, "");
 }
예제 #10
0
        /// <summary>
        ///     添加【其它出入库单】
        /// </summary>
        /// <param name="db"></param>
        /// <param name="bill">其它出入库单</param>
        /// <param name="details">其它出入库明细</param>
        /// <returns></returns>
        public static void AddOtherIn(SpareEntities db, TB_BILL bill, List <TB_OTHER_IN> details)
        {
            {
                SetBillNum(bill);                               //设置单据编号
                details.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号
                BillController.AddOrUpdate(db, bill);           //添加单据
                foreach (var detail in details)
                {
                    OtherInController.AddOrUpdate(db, detail); //添加明细
                }

                var subBillType = (SubBillType)bill.SubBillType;
                switch (subBillType)
                {
                //出库
                case SubBillType.OtherOut:      //其它出库
//                    case SubBillType.ReturnToSupplier: //原料退货
                case SubBillType.InventoryLoss: //盘亏
                case SubBillType.ScrapDestroy:  //报废销毁
//                        var detailsOut = details.Select(detail => detail.ToStockDetailOut(bill)).ToList();
//                         StockDetailController.ListOut(db, bill, detailsOut); //更新【库存主表】【库存明细】出库
//
                    break;

                //入库
                case SubBillType.OtherIn:                              //其它入库
//                    case SubBillType.ProductReturn: //成品退货
                case SubBillType.InventoryProfit:                      //盘盈
                    var detailsIn = details.Select(detail => detail.ToStockDetailIn(bill)).ToList();
                    StockDetailController.ListIn(db, bill, detailsIn); //更新【库存主表】【库存明细】入库

                    break;

                case SubBillType.ProductUndecide:  //隔离
                case SubBillType.ProductScrap:     //报废
//                        var detailsMove = details.Select(p => p.ToStockMove()).ToList();
//                         StockDetailController.ListMove(db, bill, detailsMove); //更新【库存主表】【库存明细】

                    break;

                default:
                    throw new WmsException(ResultCode.Exception, bill.BillNum, "单据二级类型错误");
                }
                NotifyController.AddNotify(db, bill.OperName, NotifyType.OtherInApprove, bill.BillNum, "");
            }
        }
예제 #11
0
 /// <summary>
 ///     执行【领用申请单】,生成【领用单】
 /// </summary>
 /// <param name="db"></param>
 /// <param name="billAsk">申请单</param>
 /// <param name="details">申请明细</param>
 /// <returns></returns>
 public static string HandleMaterialAsk(SpareEntities db, TB_BILL billAsk, List <TB_ASK> details)
 {
     try
     {
         //校验【领用单】状态是否为批准
         if (billAsk.State != (int)BillState.Approve)
         {
             return("申请单状态错误,不应为:" + billAsk.State);
         }
         var partPickList = new List <TB_OUT>();
         foreach (var detail in details)
         {
             var pList = SpareOutController.GetList(db, detail);
             if (pList.Count == 0 || pList.Sum(p => p.OutQty) < detail.Qty)
             {
                 return("库存不足,生成领用单失败!");
             }
             partPickList.AddRange(pList);
         }
         var billPick = new TB_BILL
         {
             BillNum       = "",
             SourceBillNum = billAsk.BillNum,
             BillType      = (int)BillType.MaterialDeliver,
             SubBillType   = (int)billAsk.SubBillType,
             BillTime      = DateTime.Now,
             OperName      = billAsk.OperName,
             SplyId        = billAsk.SplyId,
             State         = (int)BillState.New,
             Remark        = "",
         };
         SetBillNum(billPick);
         partPickList.ForEach(p => p.BillNum = billPick.BillNum);
         BillController.AddOrUpdate(db, billPick);
         SpareOutController.AddList(db, partPickList);
         BillController.UpdateState(db, billAsk, BillState.Handling); //更新【叫料单】状态为:执行中
         NotifyController.AddNotify(db, billPick.OperName, NotifyType.MaterialOut, billAsk.BillNum, "");
         return("OK");
     }
     catch (Exception ex)
     {
         BillController.UpdateState(db, billAsk, BillState.Failed);
         billAsk.Remark = ex.ToString();
         return(ex.ToString());
     }
 }
예제 #12
0
 public static void AddMaterialReturn(SpareEntities db, TB_BILL bill, List <TB_RETURN> details)
 {
     BillController.AddOrUpdate(db, bill); //添加单据
     foreach (var detail in details)
     {
         var dbReturns = SpareReturnController.GetList(db, bill.BillNum).ToList();
         foreach (var sparereturn in dbReturns)
         {
             if (details.FirstOrDefault(p => p.UID == sparereturn.UID) == null)
             {
                 SpareReturnController.RemaveDetail(db, sparereturn);
             }
         }
         SpareReturnController.AddOrUpdate(db, detail);//添加或修改【领用归还单】明细
     }
     NotifyController.AddNotify(db, bill.OperName, NotifyType.SpareReturnUpdate, bill.BillNum, "");
 }
예제 #13
0
 /// <summary>
 ///     根据【领用出库单】,生成【领用还回单】
 /// </summary>
 /// <param name="db"></param>
 /// <param name="billAsk">申请单</param>
 /// <param name="details">申请明细</param>
 /// <returns></returns>
 public static string HandleMaterialReturn(SpareEntities db, TB_BILL billOut, List <TB_OUT> details)
 {
     try
     {
         //校验【领用单】状态是否为批准
         if (billOut.State != (int)BillState.Finished)
         {
             return("申请单状态错误,不应为:" + billOut.State);
         }
         if (billOut.SubBillType != (int)SubBillType.SpareLoan)
         {
             return("非借出单,不能进行还回操作!");
         }
         var partPickList = new List <TB_RETURN>();
         foreach (var detail in details)
         {
             var pList = SpareReturnController.OutToReturnList(detail);
             partPickList.Add(pList);
         }
         var billPick = new TB_BILL
         {
             BillNum       = "",
             SourceBillNum = billOut.BillNum,
             BillType      = (int)BillType.SpareReturn,
             SubBillType   = (int)SubBillType.SpareReturn,
             BillTime      = DateTime.Now,
             OperName      = billOut.OperName,
             SplyId        = billOut.SplyId,
             State         = (int)BillState.New,
             Remark        = "",
         };
         SetBillNum(billPick);
         partPickList.ForEach(p => p.BillNum = billPick.BillNum);
         BillController.AddOrUpdate(db, billPick);
         SpareReturnController.AddList(db, partPickList);
         NotifyController.AddNotify(db, billPick.OperName, NotifyType.SpareReturn, billPick.BillNum, "");
         return("OK");
     }
     catch (Exception ex)
     {
         BillController.UpdateState(db, billOut, BillState.Failed);
         billOut.Remark = ex.ToString();
         return(ex.ToString());
     }
 }
예제 #14
0
 /// <summary>
 ///     添加【叫料单】
 /// </summary>
 /// <param name="db"></param>
 /// <param name="bill">叫料单</param>
 /// <param name="details">叫料明细</param>
 /// <returns></returns>
 public static void AddMaterialAsk(SpareEntities db, TB_BILL bill, List <TB_ASK> details)
 {
     if (bill.BillNum == null)
     {
         SetBillNum(bill);                                                                              //设置单据编号
         details.ForEach(p => p.BillNum = bill.BillNum);                                                //设置明细编号
         NotifyController.AddNotify(db, bill.OperName, NotifyType.MaterialAskUpdate, bill.BillNum, ""); //添加【叫料提醒单】
     }
     else
     {
         NotifyController.AddNotify(db, bill.OperName, NotifyType.MaterialAsk, bill.BillNum, ""); //添加【叫料提醒单】
     }
     BillController.AddOrUpdate(db, bill);                                                        //添加【生产叫料单】单据
     foreach (var detail in details)
     {
         SpareAskController.AddOrUpdate(db, detail);//添加或修改【生产叫料单】明细
     }
 }
예제 #15
0
        /// <summary>
        ///     添加【盘点计划】
        /// </summary>
        /// <param name="db"></param>
        /// <param name="bill">盘点计划</param>
        /// <param name="locList">盘点库位明细</param>
        /// <returns></returns>
        public static void AddInventoryLoc(SpareEntities db, TB_BILL bill, List <TB_INVENTORY_LOC> locList)
        {
            {
                //新单据,增加盘点的三张表
                if (string.IsNullOrEmpty(bill.BillNum))
                {
                    SetBillNum(bill);                               //设置单据编号
                    locList.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号
                    InventoryController.AddLocList(db, locList);    //添加盘点库位列表
                    foreach (var locBill in locList)
                    {
                        var stockDetailList     = StockDetailController.GetTListByLocCode(db, locBill.LocCode);
                        var inventoryDetailList = (stockDetailList.Select(p => p.ToInventoryDetail(locBill))).ToList();
                        InventoryController.AddDetailList(db, inventoryDetailList);                            //添加盘点明细
                    }
                    NotifyController.AddNotify(db, bill.OperName, NotifyType.InventoryPlan, bill.BillNum, ""); //添加【叫料提醒单】
                }
                else
                {
                    //修改单据,对第二、三张表的增加或删除
                    foreach (var locBill in locList)
                    {
                        if (db.TB_INVENTORY_LOC.FirstOrDefault(p => p.BillNum == bill.BillNum && p.LocCode == locBill.LocCode) == null)
                        {
                            InventoryController.AddLocList(db, locList); //添加盘点库位列表
                            var stockDetailList     = StockDetailController.GetTListByLocCode(db, locBill.LocCode);
                            var inventoryDetailList = (stockDetailList.Select(p => p.ToInventoryDetail(locBill))).ToList();
                            InventoryController.AddDetailList(db, inventoryDetailList); //添加盘点明细
                        }
                    }

                    var DBLocList = db.TB_INVENTORY_LOC.Where(p => p.BillNum == bill.BillNum).ToList();
                    foreach (var loc in DBLocList)
                    {
                        if (locList.SingleOrDefault(p => p.LocCode == loc.LocCode) == null)
                        {
                            InventoryController.DeleteInventory(db, loc);
                        }
                    }
                    NotifyController.AddNotify(db, bill.OperName, NotifyType.InventoryPlanUpdate, bill.BillNum, ""); //添加【叫料提醒单】
                }
                InventoryController.AddOrUpdate(db, bill);                                                           //添加盘点单据
            }
        }
예제 #16
0
 private void btnCancel_Click(object sender, EventArgs e)
 {
     try
     {
         if (_bill == null || _bill.单据编号 == null)
         {
             MessageHelper.ShowInfo("请选择单据!");
             return;
         }
         BillController.UpdateState(_db, _bill.VWToBill(GlobalVar.Oper.DeptCode), BillState.Cancelled);
         NotifyController.AddNotify(_db, _bill.操作者, NotifyType.MaterialAskCancel, _bill.单据编号, ""); //添加【叫料提醒单】
         EntitiesFactory.SaveDb(_db);
         SetMasterDataSource(grid.PageIndex, grid.PageSize);
     }
     catch (Exception ex)
     {
         MessageHelper.ShowError(ex.ToString());
     }
 }
예제 #17
0
 /// <summary>
 ///     执行【领用还回单】
 /// </summary>
 /// <param name="db"></param>
 /// <param name="billList">领用还回单列表</param>
 /// <param name="detailList">领用还回明细列表</param>
 /// <returns></returns>
 public static void ExecuteSpareReturn(SpareEntities db, TB_BILL bill,
                                       List <TB_RETURN> detailList)
 {
     {
         foreach (var detail in detailList)
         {
             var stockDetail = new TS_STOCK_DETAIL()
             {
                 LocCode   = detail.ToLocCode,
                 PartCode  = detail.PartCode,
                 Batch     = detail.Batch,
                 Qty       = (decimal)detail.InQty,
                 UnitPrice = detail.UnitPrice,
                 UpdateQty = (decimal)detail.InQty
             };
             var stockDetails = new List <TS_STOCK_DETAIL>();
             stockDetails.Add(stockDetail);
             StockDetailController.ListIn(db, bill, stockDetails); //更新【库存主表】【库存明细】
             NotifyController.AddNotify(db, bill.OperName, NotifyType.SpareReturnApprove, bill.BillNum, "");
         }
         EntitiesFactory.SaveDb(db);
     }
 }
예제 #18
0
        private static void GetOAData(InterfaceEntities OAdb, SpareEntities db)
        {
            var SparePartlist = new List <TA_PART>();
            var SpareBillList = new List <TB_BILL>();
            var SparePOList   = new List <TB_PO>();
            //同步零件号
            var partlist = OAdb.OA_PART.Where(p => p.IsSyn == 0).ToList();

            if (partlist.Count > 0)
            {
                foreach (var part in partlist)
                {
                    var SparePart = PartController.GetPartByPartCode(db, part.code);
                    if (SparePart == null)
                    {
                        SparePart = new TA_PART();
                    }
                    SparePart.PartCode    = part.code;
                    SparePart.ErpPartCode = part.code;
                    SparePart.PartDesc1   = part.engname;
                    SparePart.PartDesc2   = part.name;
                    SparePart.Unit        = part.unit;
                    SparePart.BM          = "B";
                    SparePartlist.Add(SparePart);
                }
                PartController.AddOrUpdate(db, SparePartlist);
                NotifyController.AddNotify(db, GlobalVar.OperName, NotifyType.OAInterfaceBase, "", "");
            }

            //同步采购订单
            var OAPOBill = OAdb.OA_PO_MAIN.FirstOrDefault(p => p.IsSyn == 0);

            if (OAPOBill != null)
            {
                var _bill = new TB_BILL()
                {
                    BillNum  = OAPOBill.orderno,
                    BillType = (int)BillType.PuchaseOrder,
                    BillTime = DateTime.Now,
                    OperName = OAPOBill.@operator,
                    SplyId   = OAPOBill.suppliername,
                    Remark   = OAPOBill.remark
                };
                SpareBillList.Add(_bill);
                OAPOBill.IsSyn = 1;
                OAdb.OA_PO_MAIN.AddOrUpdate(OAPOBill);
                var OAPOList = OAdb.OA_PO_SUB.Where(p => p.OAMainID == OAPOBill.OAID);
                foreach (var oaPoSub in OAPOList)
                {
                    var SparePo = new TB_PO()
                    {
                        BillNum  = _bill.BillNum,
                        Line     = Convert.ToInt32(oaPoSub.prln),
                        PartCode = oaPoSub.itemnumber,
                        BillQty  = (decimal)oaPoSub.qty
                    };
                    SparePOList.Add(SparePo);
                }

                BillHandler.AddPO(db, SpareBillList, SparePOList);
                NotifyController.AddNotify(db, GlobalVar.OperName, NotifyType.OAInterfacePO, "", "");
            }
        }