public IActionResult DeskClose(int DeskId)
        {
            try
            {
                DbContext = new BotMngmntDbContext();

                var desk = DbContext.HelpDesk.Find(DeskId);

                if (desk != null && !desk.Closed)
                {
                    HelpDeskAnswer deskAnswer = new HelpDeskAnswer
                    {
                        Closed          = true,
                        ClosedTimestamp = DateTime.Now,
                        FollowerId      = 1,
                        HelpDeskId      = DeskId,
                        Text            = "Заявка закрыта",
                        Timestamp       = DateTime.Now
                    };

                    desk.Closed = true;

                    DbContext.HelpDeskAnswer.Add(deskAnswer);

                    DbContext.SaveChanges();

                    return(Json("Сохранено"));
                }

                if (desk != null && desk.Closed)
                {
                    return(Json("Заявка уже закрыта"));
                }

                else
                {
                    return(Json("Ошибка"));
                }
            }

            catch (Exception e)
            {
                return(Json(e.Message));
            }

            finally
            {
                DbContext.Dispose();
            }
        }
        /// <summary>
        /// Закрыть заявку
        /// </summary>
        /// <param name="HelpDeskId"></param>
        /// <param name="FollowerId"></param>
        /// <returns></returns>
        public static HelpDesk HelpDeskClosed(int HelpDeskId, int FollowerId)
        {
            MarketBotDbContext db = new MarketBotDbContext();

            try
            {
                var Help = db.HelpDesk.Where(h => h.Id == HelpDeskId).Include(h => h.Follower).Include(h => h.HelpDeskAttachment)
                           .Include(h => h.HelpDeskInWork)
                           .FirstOrDefault();

                var AnswerList = db.HelpDeskAnswer.Where(a => a.HelpDeskId == HelpDeskId).Include(a => a.Follower).ToList();


                HelpDeskAnswer helpDeskAnswer = new HelpDeskAnswer
                {
                    Closed          = true,
                    ClosedTimestamp = DateTime.Now,
                    FollowerId      = FollowerId,
                    HelpDeskId      = HelpDeskId,
                    Timestamp       = DateTime.Now,
                    Text            = "Заявка закрыта",
                };

                db.HelpDeskAnswer.Add(helpDeskAnswer);

                Help.Closed = true;

                db.Update <HelpDesk>(Help);

                db.SaveChanges();

                Help.HelpDeskAnswer = AnswerList;

                helpDeskAnswer.Follower = db.Follower.Find(FollowerId);

                Help.HelpDeskAnswer.Add(helpDeskAnswer);

                return(Help);
            }

            catch
            {
                return(null);
            }

            finally
            {
                db.Dispose();
            }
        }
        public IActionResult AddAnswer(int DeskId, string Text)
        {
            DbContext = new BotMngmntDbContext();

            try
            {
                var Desk = DbContext.HelpDesk.Find(DeskId);

                if (Text != null && Text != "" && Desk != null && !Desk.Closed)
                {
                    HelpDeskAnswer deskAnswer = new HelpDeskAnswer
                    {
                        HelpDeskId = DeskId,
                        Closed     = false,
                        FollowerId = 1,
                        Text       = Text,
                        Timestamp  = DateTime.Now
                    };

                    DbContext.HelpDeskAnswer.Add(deskAnswer);

                    DbContext.SaveChanges();


                    return(Json("Добавлено"));
                }

                if (Desk != null && Desk.Closed)
                {
                    return(Json("Заявка уже закрыта"));
                }

                else
                {
                    return(Json("Ошибка"));
                }
            }

            catch (Exception e)
            {
                return(Json(e.Message));
            }

            finally
            {
                DbContext.Dispose();
            }
        }
        private async Task <IActionResult> AddHelpDeskAnswer()
        {
            try
            {
                int number = Convert.ToInt32(OriginalMessage.Substring(AddCommentForceReply.Length));
                using (MarketBotDbContext db = new MarketBotDbContext())
                {
                    var Help = db.HelpDesk.Where(h => h.Number == number).Include(h => h.HelpDeskInWork)
                               .Include(h => h.HelpDeskAnswer).FirstOrDefault();

                    //Проверяем находится ли заявка в обработке у этого пользователя и не является ли она закрытой
                    if (Help != null && await Processing.CheckInWork(Help) && !await Processing.CheckIsDone(Help))
                    {
                        HelpDeskAnswer deskAnswer = new HelpDeskAnswer {
                            HelpDeskId = Help.Id, FollowerId = FollowerId, Timestamp = DateTime.Now, Text = ReplyToMessageText
                        };
                        db.HelpDeskAnswer.Add(deskAnswer);
                        if (db.SaveChanges() > 0)
                        {
                            Help.HelpDeskAnswer.Add(deskAnswer);
                            AdminHelpDeskMsg = new AdminHelpDeskMessage(Help, FollowerId);
                            await SendMessage(await AdminHelpDeskMsg.BuldMessage());

                            await Processing.NotifyChanges("К заявке №" + Help.Number.ToString() + " добавлен комментарий.Пользователь: " + GeneralFunction.FollowerFullName(FollowerId), Help.Id);
                        }
                        return(OkResult);
                    }

                    else
                    {
                        return(NotFoundResult);
                    }
                }
            }

            catch
            {
                return(NotFoundResult);
            }
        }
        /// <summary>
        /// Добавить ответ на заявку
        /// </summary>
        /// <param name="HelpDeskId"></param>
        /// <param name="FollowerId"></param>
        /// <param name="Text"></param>
        /// <returns></returns>
        public static HelpDesk AddAnswerComment(int HelpDeskId, int FollowerId, string Text)
        {
            MarketBotDbContext db = new MarketBotDbContext();

            try
            {
                var Help = db.HelpDesk.Where(h => h.Id == HelpDeskId)
                           .Include(h => h.Follower)
                           .Include(h => h.HelpDeskAnswer)
                           .Include(h => h.HelpDeskAttachment)
                           .Include(h => h.HelpDeskInWork).FirstOrDefault();


                HelpDeskAnswer helpDeskAnswer = new HelpDeskAnswer
                {
                    Timestamp  = DateTime.Now,
                    Closed     = false,
                    FollowerId = FollowerId,
                    Text       = Text,
                    HelpDeskId = HelpDeskId
                };

                db.HelpDeskAnswer.Add(helpDeskAnswer);
                db.SaveChanges();
                helpDeskAnswer.Follower = db.Follower.Find(FollowerId);
                Help.HelpDeskAnswer.Add(helpDeskAnswer);
                return(Help);
            }

            catch
            {
                return(null);
            }

            finally
            {
                db.Dispose();
            }
        }
 public HelpDeskActionNotifiMessage(HelpDesk helpDesk, HelpDeskAnswer deskAnswer)
 {
     this.HelpDesk       = helpDesk;
     this.HelpDeskAnswer = deskAnswer;
 }
        private async Task <IActionResult> CloseHelpDesk()
        {
            try
            {
                using (MarketBotDbContext db = new MarketBotDbContext())
                {
                    var Help = db.HelpDesk.Where(h => h.Id == HelpDeskId).Include(h => h.HelpDeskInWork)
                               .Include(h => h.HelpDeskAnswer).FirstOrDefault();

                    var in_work = Help.HelpDeskInWork.OrderByDescending(h => h.Id).FirstOrDefault();

                    //Проверяем находится ли заявка в обработке у этого пользователя и не является ли она закрытой
                    if (Help != null && await Processing.CheckInWork(Help) && !await Processing.CheckIsDone(Help))
                    {
                        int Save = 0; // 1- данные сохранены.  0-нет

                        //ищем последний комментарий пользователя где поле Closed равно НУЛЛ.
                        //Т.е мы хотим к изменить этот коммент добавив инф. о том что пользователь заявку закрывает
                        var answer = Help.HelpDeskAnswer.Where(h => h.FollowerId == FollowerId && h.Closed == null).OrderByDescending(h => h.Id).FirstOrDefault();

                        if (answer != null)
                        {
                            Help.Closed            = true;
                            answer.Closed          = true;
                            answer.ClosedTimestamp = DateTime.Now;
                            Save = db.SaveChanges();
                            FreeHelpDeskDb(Help, in_work);
                        }

                        /// ситуация когда Добавлял комментарии один сотурдник, А потом этоу заявку "Отжал" и Взял себе другой,
                        /// что бы просто закрыть ее без добавления комментариеВ
                        else
                        {
                            answer = new HelpDeskAnswer {
                                Text = String.Empty, FollowerId = FollowerId, HelpDeskId = Help.Id, Timestamp = DateTime.Now, ClosedTimestamp = DateTime.Now, Closed = true
                            };
                            db.HelpDeskAnswer.Add(answer);
                            Help.Closed = true;
                            Save        = db.SaveChanges();
                            // освобождаем заявку
                            FreeHelpDeskDb(Help, in_work);


                            if (Save > 0)
                            {
                                Help.HelpDeskAnswer.Add(answer);
                            }
                        }

                        if (Save > 0) // Если новые данные сохранилсь в БД то создаем сообещние и отправляем
                        {
                            AdminHelpDeskMsg = new AdminHelpDeskMessage(Help, FollowerId);
                            await EditMessage(await AdminHelpDeskMsg.BuldMessage());

                            await Processing.NotifyChanges("Заявка №" + Help.Number.ToString() + " закрыта. Пользователь: " + GeneralFunction.FollowerFullName(FollowerId), Help.Id);

                            //Отправляем сообщение пользователю о том что его заявка закрыта
                            long   ChatId = db.Follower.Where(f => f.Id == Help.FollowerId).FirstOrDefault().ChatId;
                            string text   = "Заявка №" + Help.Number.ToString() + " Закрыта" + Bot.BotMessage.NewLine() + "Комментарий:" + answer.Text;
                            await SendMessage(ChatId, new BotMessage { TextMessage = text });
                        }

                        return(OkResult);
                    }


                    else
                    {
                        return(NotFoundResult);
                    }
                }
            }

            catch
            {
                return(NotFoundResult);
            }
        }