/// <summary> /// 订单材料出库处理 /// </summary> /// <param name="whID">出库仓库ID</param> /// <param name="orderInfo">发货单信息</param> private void OrderStockOutPress(int whID, ContractOrderInfo orderInfo) { //获取销售仓库信息 WareHouse houseInfo = Core.Container.Instance.Resolve <IServiceWareHouse>().GetEntity(whID); // 生成出库单信息 WHOutBoundOrder storageOrder = new WHOutBoundOrder(); storageOrder.BOrderNO = OrderNO; storageOrder.Operator = User.Identity.Name; storageOrder.OrderAmount = 0; storageOrder.OrderNumber = 0; storageOrder.OrderDate = DateTime.Now; storageOrder.OrderNO = string.Format("CK{0}", DateTime.Now.ToString("yyyyMMddHHmmss")); storageOrder.OrderType = 1; //storageOrder.SuplierID = orderInfo.ContractInfo.CustomerID; storageOrder.WareHouseID = houseInfo.ID; storageOrder.OutOrderNO = ""; storageOrder.Remark = "发货出库"; #region 出库商品出库明细处理 /*---- 主材出库明细处理 ----*/ //获取订单商品主材明细,生成出库商品明细信息 IList <ICriterion> qryListDetail = new List <ICriterion>(); qryListDetail.Add(Expression.Eq("OrderNO", OrderNO)); qryListDetail.Add(Expression.Eq("WareHouseID", whID)); IList <ContractOrderDetail> list = Core.Container.Instance.Resolve <IServiceContractOrderDetail>().GetAllByKeys(qryListDetail); //写入出库商品明细 foreach (ContractOrderDetail detail in list) { //出库单出库明细处理 CreateStockOutOrder(whID, detail.GoodsNumber, detail.GoodsID, detail.GoodsUnit, ref storageOrder); } /*---- 辅材出库明细处理 ----*/ //获取订单商品辅材明细,生成出库商品明细信息 string sql = string.Format(@"select GoodsID,GoodsUnit,sum(GoodsNumber) as GoodsNumber from ContractOrderSecondaryDetail where OrderNO ='{0}' and WareHouseID ={1} group by GoodsID,GoodsUnit " , OrderNO, whID); DataSet ds = DbHelperSQL.Query(sql); if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { //写入出库商品明细 foreach (DataRow detail in ds.Tables[0].Rows) { //出库单出库明细处理 CreateStockOutOrder(whID, decimal.Parse(detail["GoodsNumber"].ToString()) , int.Parse(detail["GoodsID"].ToString()) , detail["GoodsUnit"].ToString() , ref storageOrder); } } #endregion 出库商品出库明细处理 //创建出库单信息 Core.Container.Instance.Resolve <IServiceWHOutBoundOrder>().Create(storageOrder); }
private void GetOrderInfo() { WHOutBoundOrder orderInfo = Core.Container.Instance.Resolve <IServiceWHOutBoundOrder>().GetEntity(OrderID); lblAmount.Text = orderInfo.OrderAmount.ToString(); lblBussinessOrder.Text = orderInfo.BOrderNO; lblCount.Text = orderInfo.OrderNumber.ToString(); lblTypeName.Text = orderInfo.Remark; lblOrderNo.Text = orderInfo.OrderNO; lblStartDate.Text = orderInfo.OrderDate.ToString(); //ddlPay.SelectedValue = orderInfo.OrderType.ToString(); ddlWH.SelectedValue = orderInfo.WareHouseID.ToString(); //绑定商品明细 BindGrid(orderInfo.OrderNO); }
private void SaveItem(int isTemp) { bool IsStock = bool.Parse(ConfigurationManager.AppSettings["IsStock"]); //更新订单状态为正式订单 IList <ICriterion> qryList = new List <ICriterion>(); qryList.Add(Expression.Eq("OrderNO", OrderNO)); ReceiveOrder orderInfo = Core.Container.Instance.Resolve <IServiceReceiveOrder>().GetEntityByFields(qryList); orderInfo.OrderDate = DateTime.Parse(dpStartDate.Text); orderInfo.OrderAmount = decimal.Parse(lblAmount.Text); orderInfo.IsTemp = isTemp; orderInfo.OrderNumber = decimal.Parse(lblCount.Text); orderInfo.UserID = int.Parse(ddlSuplier.SelectedValue); orderInfo.UserName = ddlSuplier.SelectedText; orderInfo.WareHouseID = int.Parse(ddlWH.SelectedValue); orderInfo.Operator = User.Identity.Name; Core.Container.Instance.Resolve <IServiceReceiveOrder>().Update(orderInfo); //正式订单,更新入库信息及流水信息等 if (isTemp == 0) { #region 出库单信息 if (IsStock) { // 出库单信息 WHOutBoundOrder storageOrder = new WHOutBoundOrder(); storageOrder.BOrderNO = OrderNO; storageOrder.Operator = User.Identity.Name; storageOrder.OrderAmount = orderInfo.OrderAmount; storageOrder.OrderNumber = orderInfo.OrderNumber; storageOrder.OrderDate = orderInfo.OrderDate; storageOrder.OrderNO = string.Format("CK{0}", DateTime.Now.ToString("yyyyMMddHHmmss")); storageOrder.OrderType = 2; storageOrder.OutOrderNO = ""; storageOrder.Remark = "领用出库"; storageOrder.SuplierID = orderInfo.UserID; storageOrder.WareHouseID = orderInfo.WareHouseID; // 出库商品明细信息 IList <ICriterion> qryListDetail = new List <ICriterion>(); qryListDetail.Add(Expression.Eq("OrderNO", OrderNO)); Order[] orderList = new Order[1]; Order orderli = new Order("ID", true); orderList[0] = orderli; IList <ReceiveOrderDetail> list = Core.Container.Instance.Resolve <IServiceReceiveOrderDetail>().GetAllByKeys(qryList, orderList); //写入出库商品明细 foreach (ReceiveOrderDetail detail in list) { decimal amount = detail.GoodsNumber; decimal goodsAmount = 0; IList <ICriterion> qryWHList = new List <ICriterion>(); qryWHList.Add(Expression.Eq("GoodsID", detail.GoodsID)); qryWHList.Add(Expression.Eq("WareHouseID", storageOrder.WareHouseID)); WHGoodsDetail whGoodsDetail = Core.Container.Instance.Resolve <IServiceWHGoodsDetail>().GetEntityByFields(qryWHList); WHOrderGoodsDetail orderDetail = new WHOrderGoodsDetail(); orderDetail.GoodsID = detail.GoodsID; orderDetail.GoodsUnit = detail.GoodsUnit; orderDetail.OrderDate = storageOrder.OrderDate; orderDetail.OrderNO = storageOrder.OrderNO; orderDetail.GoodsNumber = amount; //获取出库单价和金额 orderDetail.GoodsUnitPrice = whGoodsDetail.InventoryUnitPrice; orderDetail.GoodTotalPrice = Math.Round(orderDetail.GoodsNumber * orderDetail.GoodsUnitPrice, 2); orderDetail.TaxAmount = 0; orderDetail.TaxPoint = 0; orderDetail.TotalPriceNoTax = 0; orderDetail.UnitPriceNoTax = 0; //保存出库明细信息 Core.Container.Instance.Resolve <IServiceWHOrderGoodsDetail>().Create(orderDetail); //更新商品变动明细信息(出库) new InventoryHelper().UpdateGoodsJournal(storageOrder.WareHouseID, detail.GoodsID, OrderNO, "LY", 2 , -orderDetail.GoodsNumber, orderDetail.GoodsUnitPrice , -orderDetail.GoodTotalPrice, "" , orderInfo.OrderDate); //累计计算订单成本金额 goodsAmount += orderDetail.GoodTotalPrice; //更新商品库存信息 new InventoryHelper().UpdateWareHouseStock(storageOrder.WareHouseID, detail.GoodsID, -detail.GoodsNumber, 0, -goodsAmount, 0); } //创建出库单信息 Core.Container.Instance.Resolve <IServiceWHOutBoundOrder>().Create(storageOrder); } #endregion 入库单信息 } }
/// <summary> /// 商品出库处理 /// </summary> /// <param name="whID">库房编号</param> /// <returns></returns> private bool SaveItem(int whID, int TabieUsingID) { //获取消费订单信息 tm_TabieUsingInfo tabieUsingInfo = Core.Container.Instance.Resolve <IServiceTabieUsingInfo>().GetEntity(TabieUsingID); //检查系统设置是否做库存处理 bool IsStock = bool.Parse(ConfigurationManager.AppSettings["IsStock"]); if (IsStock) { //获取销售仓库信息 WareHouse houseInfo = Core.Container.Instance.Resolve <IServiceWareHouse>().GetEntity(whID); //如果仓库存在 if (houseInfo != null) { #region 出库单信息 // 出库单信息 WHOutBoundOrder storageOrder = new WHOutBoundOrder(); storageOrder.BOrderNO = tabieUsingInfo.OrderNO; storageOrder.Operator = User.Identity.Name; storageOrder.OrderAmount = 0; storageOrder.OrderNumber = 0; storageOrder.OrderDate = (DateTime)tabieUsingInfo.ClearTime; storageOrder.OrderNO = string.Format("CK{0}", tabieUsingInfo.OpenTime.ToString("yyyyMMddHHmmss")); storageOrder.OrderType = 6; storageOrder.WareHouseID = houseInfo.ID; storageOrder.OutOrderNO = ""; storageOrder.Remark = "消费出库"; //获取订单商品明细,生成出库商品明细信息 string sql = string.Format("SELECT GoodsID,sum(UsedCount) as UsedCount FROM tm_dinnerTemp WHERE TabieUsingID={0} and WHID={1} GROUP BY TabieUsingID,WHID,GoodsID HAVING sum(UsedCount)>0 " , TabieUsingID, whID); DataSet dsGoods = DbHelperSQL.Query(sql); if (dsGoods.Tables[0] != null) { //写入出库商品明细 foreach (DataRow detail in dsGoods.Tables[0].Rows) { decimal goodsAmount = 0; decimal goodsCount = 0; int goodsID = int.Parse(detail["GoodsID"].ToString()); //获取商品信息 tm_Goods goodsInfo = Core.Container.Instance.Resolve <IServiceGoods>().GetEntity(goodsID); //计算消耗转换标准的数量 decimal amount = Math.Round(decimal.Parse(detail["UsedCount"].ToString()) / goodsInfo.ConsumeNum, 2); goodsCount = amount; storageOrder.OrderNumber += amount; ////根据批次号获取出库商品信息 //List<tm_whgoodsorderbatch> batchList = new InventoryHelper().GetGoodsByBatchInfo(houseInfo.ID, goodsID); ////按照批次依次出库 //foreach (tm_whgoodsorderbatch batchInfo in batchList) //{ // tm_WHOrderGoodsDetail orderDetail = new tm_WHOrderGoodsDetail(); // orderDetail.GoodsID = goodsID; // orderDetail.GoodsUnit = goodsInfo.GoodsUnit; // orderDetail.OrderDate = storageOrder.OrderDate; // orderDetail.OrderNO = storageOrder.OrderNO; // orderDetail.TaxAmount = 0; // orderDetail.TaxPoint = goodsInfo.TaxPoint; // orderDetail.TotalPriceNoTax = 0; // orderDetail.UnitPriceNoTax = 0; // //如果当前批次剩余库存大于等于销售商品的销售数量 // if (batchInfo.CurrentNumber >= amount) // { // orderDetail.GoodsNumber = amount; // amount = 0; // } // else // { // orderDetail.GoodsNumber = batchInfo.CurrentNumber; // amount -= batchInfo.CurrentNumber; // } // //获取出库单价和金额 // orderDetail.GoodsUnitPrice = batchInfo.OrderUnitPrice; // orderDetail.GoodTotalPrice = Math.Round(orderDetail.GoodsNumber * orderDetail.GoodsUnitPrice, 2); // //保存出库明细信息 // Core.Container.Instance.Resolve<IServiceWHOrderGoodsDetail>().Create(orderDetail); // //更新进货批次库存信息 // new InventoryHelper().UpdateGoodsBatchInfo(houseInfo.ID, goodsID, batchInfo.BatchNO, orderDetail.GoodsNumber); // //更新商品变动明细信息(出库) // new InventoryHelper().UpdateGoodsJournal(houseInfo.ID, goodsID, storageOrder.OrderNO, "XF", 2 // , -orderDetail.GoodsNumber, batchInfo.OrderUnitPrice // , -orderDetail.GoodTotalPrice, batchInfo.BatchNO // , tabieUsingInfo.OpenTime); // //累计计算订单成本金额 // goodsAmount += orderDetail.GoodTotalPrice; // storageOrder.OrderAmount += orderDetail.GoodTotalPrice; // //判断该商品是否完成订单数量的出库 // if (amount <= 0) // { // break; // } //} //更新商品库存信息 new InventoryHelper().UpdateWareHouseStock(houseInfo.ID, goodsID, -goodsCount, 0, -goodsAmount, 0); } //创建出库单信息 Core.Container.Instance.Resolve <IServiceWHOutBoundOrder>().Create(storageOrder); } #endregion } else { return(false); } } return(true); }
/// <summary> /// 调拨出库处理 /// </summary> /// <param name="WHOutBoundOrderNO">出库单号</param> /// <param name="WHStorageOrderNO">入库单号</param> /// <param name="orderInfo">调拨单信息</param> /// <returns></returns> private bool WHOutBound(string WHOutBoundOrderNO, string WHStorageOrderNO, tm_GoodsAllocationBill orderInfo, out decimal costAmount) { costAmount = 0; //获取出库仓库信息 WareHouse houseInfo = Core.Container.Instance.Resolve <IServiceWareHouse>().GetEntity(orderInfo.CKWareHouseID); //如果出库仓库存在 if (houseInfo != null) { //出库单信息 WHOutBoundOrder outBoundOrder = new WHOutBoundOrder(); outBoundOrder.BOrderNO = OrderNO; outBoundOrder.Operator = User.Identity.Name; outBoundOrder.OrderAmount = 0; outBoundOrder.OrderNumber = orderInfo.AllotCount; outBoundOrder.OrderDate = orderInfo.OrderDate; outBoundOrder.OrderNO = WHOutBoundOrderNO; outBoundOrder.OrderType = 2; //2:调拨出库 outBoundOrder.OutOrderNO = WHStorageOrderNO; outBoundOrder.Remark = "调拨出库"; outBoundOrder.SuplierID = 0; outBoundOrder.WareHouseID = orderInfo.CKWareHouseID; Core.Container.Instance.Resolve <IServiceWHOutBoundOrder>().Create(outBoundOrder); //获取调拨商品明细,生成出库商品明细信息 IList <ICriterion> qryListDetail = new List <ICriterion>(); qryListDetail.Add(Expression.Eq("OrderNO", OrderNO)); Order[] orderList = new Order[1]; Order orderli = new Order("ID", true); orderList[0] = orderli; IList <tm_GoodsAllocationBillDetail> list = Core.Container.Instance.Resolve <IServiceGoodsAllocationBillDetail>().GetAllByKeys(qryListDetail, orderList); //写入出库商品明细 foreach (tm_GoodsAllocationBillDetail detail in list) { decimal amount = detail.GoodsNumber; decimal goodsAmount = 0; //根据批次号获取出库商品信息 //List<tm_whgoodsorderbatch> batchList = new InventoryHelper().GetGoodsByBatchInfo(houseInfo.ID, detail.GoodsID); ////按照批次依次出库 //foreach (tm_whgoodsorderbatch batchInfo in batchList) //{ // tm_WHOrderGoodsDetail orderDetail = new tm_WHOrderGoodsDetail(); // orderDetail.GoodsID = detail.GoodsID; // orderDetail.OrderDate = outBoundOrder.OrderDate; // orderDetail.OrderNO = WHOutBoundOrderNO; // //获取商品信息 // tm_Goods goosInfo = Core.Container.Instance.Resolve<IServiceGoods>().GetEntity(detail.GoodsID); // orderDetail.GoodsUnit = goosInfo.GoodsUnit; // orderDetail.ChangeUnit = goosInfo.PurchaseUnit; // orderDetail.ChangeNumber = goosInfo.PurchaseNum; // orderDetail.TaxAmount = 0; // orderDetail.TaxPoint = goosInfo.TaxPoint; // orderDetail.TotalPriceNoTax = 0; // orderDetail.UnitPriceNoTax = 0; // //如果当前批次剩余库存大于等于销售商品的销售数量 // if (batchInfo.CurrentNumber >= amount) // { // orderDetail.GoodsNumber = amount; // amount = 0; // } // else // { // orderDetail.GoodsNumber = batchInfo.CurrentNumber; // amount -= batchInfo.CurrentNumber; // } // //获取出库单价和金额 // orderDetail.GoodsUnitPrice = batchInfo.OrderUnitPrice; // orderDetail.GoodTotalPrice = Math.Round(orderDetail.GoodsNumber * orderDetail.GoodsUnitPrice, 2); // //保存出库明细信息 // Core.Container.Instance.Resolve<IServiceWHOrderGoodsDetail>().Create(orderDetail); // //更新进货批次库存信息 // new InventoryHelper().UpdateGoodsBatchInfo(houseInfo.ID, detail.GoodsID, batchInfo.BatchNO, orderDetail.GoodsNumber); // //更新商品变动明细信息(出库) // new InventoryHelper().UpdateGoodsJournal(houseInfo.ID, detail.GoodsID, OrderNO, "DC", 2 // , -orderDetail.GoodsNumber, batchInfo.OrderUnitPrice // , -orderDetail.GoodTotalPrice, batchInfo.BatchNO // , outBoundOrder.OrderDate); // //累计计算订单成本金额 // goodsAmount += orderDetail.GoodTotalPrice; // outBoundOrder.OrderAmount += orderDetail.GoodTotalPrice; // //判断该商品是否完成订单数量的出库 // if (amount <= 0) // { // break; // } //} //更新商品库存信息 new InventoryHelper().UpdateWareHouseStock(houseInfo.ID, detail.GoodsID, -detail.GoodsNumber, 0, -goodsAmount, 0); //更新调拨出库商品成本信息 detail.GoodsAmount = goodsAmount; Core.Container.Instance.Resolve <IServiceGoodsAllocationBillDetail>().Update(detail); } //返回出库单成本金额 costAmount = outBoundOrder.OrderAmount; //创建出库单信息 Core.Container.Instance.Resolve <IServiceWHOutBoundOrder>().Create(outBoundOrder); } else { return(false); } return(true); }
/// <summary> /// 出库单出库明细处理 /// </summary> /// <param name="WHID">出库仓库ID</param> /// <param name="goodsNumber">出库商品数量</param> /// <param name="goodsID">商品ID</param> /// <param name="goodsUnit">商品单位</param> /// <param name="storageOrder">出库单信息</param> private void CreateStockOutOrder(int WHID, decimal goodsNumber, int goodsID, string goodsUnit, ref WHOutBoundOrder storageOrder) { //如果商品出库数量大于0 if (goodsNumber > 0) { //根据发货商品ID和出库仓库ID获取库存物品信息 IList <ICriterion> qryWHList = new List <ICriterion>(); qryWHList.Add(Expression.Eq("GoodsID", goodsID)); qryWHList.Add(Expression.Eq("WareHouseID", WHID)); WHGoodsDetail whGoodsDetail = Core.Container.Instance.Resolve <IServiceWHGoodsDetail>().GetEntityByFields(qryWHList); //生成出库单商品出库明细 WHOrderGoodsDetail orderDetail = new WHOrderGoodsDetail(); orderDetail.GoodsID = goodsID; orderDetail.GoodsUnit = goodsUnit; orderDetail.OrderDate = storageOrder.OrderDate; orderDetail.OrderNO = storageOrder.OrderNO; orderDetail.GoodsNumber = goodsNumber; //获取出库单价和金额 orderDetail.GoodsUnitPrice = whGoodsDetail.InventoryUnitPrice; orderDetail.GoodTotalPrice = Math.Round(orderDetail.GoodsNumber * orderDetail.GoodsUnitPrice, 2); //含税价格(暂时不用) orderDetail.TaxAmount = 0; orderDetail.TaxPoint = 0; orderDetail.TotalPriceNoTax = 0; orderDetail.UnitPriceNoTax = 0; //保存出库明细信息 Core.Container.Instance.Resolve <IServiceWHOrderGoodsDetail>().Create(orderDetail); //更新商品变动明细信息(出库) new InventoryHelper().UpdateGoodsJournal(WHID, goodsID, OrderNO, "FH", 2 , -orderDetail.GoodsNumber, orderDetail.GoodsUnitPrice , -orderDetail.GoodTotalPrice, "" , orderDetail.OrderDate); //累计计算订单成本金额 storageOrder.OrderAmount += orderDetail.GoodTotalPrice; storageOrder.OrderNumber += orderDetail.GoodsNumber; //更新商品库存信息 new InventoryHelper().UpdateWareHouseStock(WHID, goodsID, -goodsNumber, 0, -orderDetail.GoodTotalPrice, 0); } }