Example #1
0
        /// <summary>
        /// 根据成本状态更改销售订单状态
        /// </summary>
        /// <param name="cost_id"></param>
        /// <param name="isDoneOrder">是否将销售订单完成</param>
        /// <returns></returns>
        public bool ChangeSaleOrderStatus(long cost_id, long user_id, out bool isDoneOrder)
        {
            isDoneOrder = false;
            var thisOrder = _dal.GetOrderByCostId(cost_id);
            var thisCost  = new ctt_contract_cost_dal().FindNoDeleteById(cost_id);

            if (thisOrder != null && thisCost != null)
            {
                var proList        = new ctt_contract_cost_product_dal().GetListBySale(thisOrder.id);
                var costList       = new ctt_contract_cost_dal().GetListBySaleOrderId(thisOrder.id);
                var oldOrderStatus = thisOrder.status_id;
                if (proList != null && proList.Count > 0 && costList != null && costList.Count > 0)
                {
                    if (costList.Any(_ => _.status_id == (int)DicEnum.COST_STATUS.PENDING_DELIVERY) && oldOrderStatus == (int)SALES_ORDER_STATUS.OPEN)
                    {
                        thisOrder.status_id = (int)SALES_ORDER_STATUS.IN_PROGRESS;
                    }
                    if (costList.Any(_ => _.status_id == (int)DicEnum.COST_STATUS.ALREADY_DELIVERED) && (oldOrderStatus == (int)SALES_ORDER_STATUS.OPEN || oldOrderStatus == (int)SALES_ORDER_STATUS.IN_PROGRESS))
                    {
                        thisOrder.status_id = (int)SALES_ORDER_STATUS.PARTIALLY_FULFILLED;
                    }

                    // 获取销售订单下的所有成本,所有成本下的所有成本产品 已配送的时候,进行提示 isDoneOrder = true


                    if (!proList.Any(_ => _.status_id != (int)CONTRACT_COST_PRODUCT_STATUS.DISTRIBUTION))
                    {
                        isDoneOrder = true;
                    }
                }
                // 如果销售订单下的产品部分已配送,且销售订单状态为“进行中”/“新建”,则将其状态置为“部分发货”
                if (oldOrderStatus != thisOrder.status_id)
                {
                    var oldOrder = _dal.FindNoDeleteById(thisOrder.id);
                    thisOrder.update_user_id = user_id;
                    thisOrder.update_time    = Tools.Date.DateHelper.ToUniversalTimeStamp(DateTime.Now);
                    _dal.Update(thisOrder);
                    OperLogBLL.OperLogUpdate <crm_sales_order>(thisOrder, oldOrder, thisOrder.id, user_id, OPER_LOG_OBJ_CATE.SALE_ORDER, "修改销售订单状态");
                }
                return(true);
            }
            return(false);
        }