/// <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); } }
/// <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, ""); } }
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); } }
/// <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, ""); }
/// <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, ""); }
/// <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, ""); }
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); }
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()); } }
/// <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, ""); }
/// <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, ""); } }
/// <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()); } }
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, ""); }
/// <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()); } }
/// <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);//添加或修改【生产叫料单】明细 } }
/// <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); //添加盘点单据 } }
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()); } }
/// <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); } }
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, "", ""); } }