/// <summary>
        /// Добавить новый статус заказа
        /// </summary>
        /// <param name="NewStatusId"></param>
        /// <returns></returns>
        private async Task <IActionResult> InsertOrderStatus(int NewStatusId)
        {
            var Order = OrderFunction.GetOrder(OrderId);

            if (Order != null)
            {
                var orderStatus = OrderFunction.InsertOrderStarus(OrderId, NewStatusId, FollowerId, false);

                BotMessage = new OrderStatusConfirmMessage(Order, orderStatus);

                await EditMessage(BotMessage.BuildMsg());
            }

            return(OkResult);
        }
        private async Task <IActionResult> TakeOrder()
        {
            var Order = OrderFunction.GetOrder(OrderId);


            //Заказ ни кем не обрабатывается
            if (Order != null && Order.OrdersInWork.Count == 0 ||
                Order != null && Order.OrdersInWork.Count > 0 && Order.OrdersInWork.LastOrDefault().InWork == false)
            {
                Order.OrdersInWork.Add(OrderFunction.InsertOrderInWork(OrderId, FollowerId));
                BotMessage = new AdminOrderMessage(Order, FollowerId);
                await EditMessage(BotMessage.BuildMsg());

                //уведомляем всех о том что кто-то взял заказ работу
                BotMessage = new OrderActionNotifiMessage(Order, Order.OrdersInWork.LastOrDefault());

                await SendMessageAllBotEmployeess(BotMessage.BuildMsg());

                return(OkResult);
            }

            //заявка в обработке у тек. пользователя
            if (Order != null && Order.OrdersInWork.Count > 0 && Order.OrdersInWork.LastOrDefault().InWork == true &&
                Order.OrdersInWork.LastOrDefault().FollowerId == FollowerId)
            {
                BotMessage = new AdminOrderMessage(Order, FollowerId);
                await EditMessage(BotMessage.BuildMsg());

                return(OkResult);
            }

            //заказ в обработке у кого то другого. Отправляем сообщение с вопрос о переназначении исполнителя
            if (Order != null && Order.OrdersInWork.Count > 0 && Order.OrdersInWork.LastOrDefault().InWork == true &&
                Order.OrdersInWork.LastOrDefault().FollowerId != FollowerId)
            {
                BotMessage = new OverridePerformerConfirmMessage(Order, Order.OrdersInWork.LastOrDefault());
                var mess = BotMessage.BuildMsg();
                await EditMessage(mess);

                return(OkResult);
            }

            else
            {
                return(OkResult);
            }
        }
        /// <summary>
        /// Отправить сообщения с кнопками статусов заказа (1. Согласован 2. Отменен 3. Удален и тд)
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> SendStatusEditor()
        {
            var Order = OrderFunction.GetOrder(OrderId);

            if (Order != null)
            {
                BotMessage = new OrderStatusEditorMessage(Order);
                await EditMessage(BotMessage.BuildMsg());

                return(OkResult);
            }

            else
            {
                return(OkResult);
            }
        }
        /// <summary>
        /// Сохраняем новый статус заказа и уведомляем пользователей
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> ConfirmNewStatus()
        {
            try
            {
                if (Argumetns != null && Argumetns.Count == 2)
                {
                    var status = OrderFunction.ConfirmOrderStatus(Argumetns[1]);

                    //меняем текущее сообщение на сообщение с описание заказа
                    await GetOrderAdmin(base.MessageId);

                    var Order = OrderFunction.GetOrder(OrderId);

                    //уведомляем всех о новом статусе заказа
                    BotMessage = new OrderActionNotifiMessage(Order, status);
                    await SendMessageAllBotEmployeess(BotMessage.BuildMsg());

                    ///Если поставили статус "Выполено" то пользователю оформившему данные заказ приходил сообщение с просьбой
                    ///оставить отзыв. Остатки на скалде пересчитываются и операторам приходит уведомление об изменениях в остатках
                    if (status != null && status.StatusId == Core.ConstantVariable.OrderStatusVariable.Completed)
                    {
                        var stock = Order.UpdateStock();

                        BotMessage = new FeedBackOfferMessage(Order);

                        await SendMessage(Order.Follower.ChatId, BotMessage.BuildMsg());

                        BotMessage = new StockChangesMessage(stock, Order.Id);

                        await SendMessageAllBotEmployeess(BotMessage.BuildMsg());
                    }

                    return(OkResult);
                }

                else
                {
                    return(OkResult);
                }
            }
            catch
            {
                return(OkResult);
            }
        }
        /// <summary>
        /// Освободить заказ.
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> FreeOrder()
        {
            if (OrderId > 0)
            {
                var Inwork = OrderFunction.InsertOrderInWork(OrderId, FollowerId, false);

                var Order = OrderFunction.GetOrder(OrderId);

                BotMessage = new AdminOrderMessage(Order, FollowerId);
                await base.EditMessage(BotMessage.BuildMsg());

                string notify = "Пользователь " + GeneralFunction.FollowerFullName(FollowerId) + " освободил заказ №" + Order.Number.ToString();

                BotMessage = new OrderMiniViewMessage(notify, Order.Id);
                await SendMessageAllBotEmployeess(BotMessage.BuildMsg());
            }

            return(OkResult);
        }
        /// <summary>
        /// Подтверждение того что пользователь назначает исполнителем себя вместо кого-то
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> ConfirmOverridePerformer()
        {
            var Order = OrderFunction.GetOrder(OrderId);

            var Inwork = OrderFunction.InsertOrderInWork(OrderId, FollowerId);

            Order.OrdersInWork.Add(Inwork);

            BotMessage = new AdminOrderMessage(Order, FollowerId);

            await EditMessage(BotMessage.BuildMsg());

            //уведомляем всех о том что кто то взял заказ в обработку
            string notify = "Заказ №" + Order.Number.ToString() + " взят в работу. Пользователь " + GeneralFunction.FollowerFullName(base.FollowerId);

            BotMessage = new OrderMiniViewMessage(notify, Order.Id);
            await SendMessageAllBotEmployeess(BotMessage.BuildMsg());

            return(OkResult);
        }
        /// <summary>
        /// Добавить комментраий к новому статусу
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> AddCommentToStatus()
        {
            int OrderStatusId = 0;

            try
            {
                OrderStatusId = Convert.ToInt32(base.OriginalMessage.Substring(ForceReplyAddCommentToStatus.Length));

                var orderStatus = OrderFunction.AddCommentToStatus(OrderStatusId, ReplyToMessageText);

                var Order = OrderFunction.GetOrder(Convert.ToInt32(orderStatus.OrderId));

                BotMessage = new OrderStatusConfirmMessage(Order, orderStatus);

                await SendMessage(BotMessage.BuildMsg());

                return(OkResult);
            }
            catch
            {
                return(OkResult);
            }
        }
        /// <summary>
        /// Показать номер телефона покупателя
        /// </summary>
        /// <returns></returns>
        private async Task <IActionResult> SendContactUser()
        {
            var order = OrderFunction.GetOrder(OrderId);

            if (order != null && order.Follower != null && order.Follower.Telephone != null && order.Follower.Telephone != "")
            {
                Contact contact = new Contact
                {
                    FirstName   = order.Follower.FirstName,
                    PhoneNumber = order.Follower.Telephone,
                    UserId      = order.Follower.ChatId
                };

                await SendContact(contact);
            }

            if (order != null && order.Follower != null && order.Follower.UserName != null && order.Follower.UserName != "")
            {
                await SendUrl("https://t.me/" + order.Follower.UserName);
            }


            return(OkResult);
        }