Ejemplo n.º 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);
     }
 }
Ejemplo n.º 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, "");
            }
        }
Ejemplo n.º 3
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, "");
 }
Ejemplo n.º 4
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, "");
            }
        }
Ejemplo n.º 5
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());
     }
 }
Ejemplo n.º 6
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, "");
 }
Ejemplo n.º 7
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());
     }
 }
Ejemplo n.º 8
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);//添加或修改【生产叫料单】明细
     }
 }
Ejemplo n.º 9
0
        /// <summary>
        ///     添加【原料收货单】
        /// </summary>
        /// <param name="db"></param>
        /// <param name="billList">原料收货单列表</param>
        /// <param name="detailList">原料收货明细列表</param>
        /// <returns></returns>
        public static void AddMaterialIn(SpareEntities db, List <TB_BILL> billList,
                                         List <TB_IN> detailList)
        {
            {
                foreach (var bill in billList)
                {
                    SetBillNum(bill);                                  //设置单据编号
                    detailList.ForEach(p => p.BillNum = bill.BillNum); //设置明细编号

                    BillController.AddOrUpdate(db, bill);              //添加【原料收货单】单据
                    SpareInController.AddList(db, detailList);         //添加【原料收货单】明细

                    var stockDetails = detailList.Select(detail => detail.ToStockDetailIn(bill)).ToList();
                    StockDetailController.ListIn(db, bill, stockDetails);  //更新【库存主表】【库存明细】
                }
                EntitiesFactory.SaveDb(db);
            }
        }