/// <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);
        }
Example #3
0
        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);
        }
Example #5
0
        /// <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);
     }
 }