예제 #1
0
        public IActionResult Update(int id, long dt_log, int new_status, string Comment)
        {
            try
            {
                using (MUPContext db = new MUPContext())
                {
                    using (var transact = db.Database.BeginTransaction(IsolationLevel.RepeatableRead))
                    {
                        //получаем последнюю запись из лога
                        var rl = db.RequestLogs
                                 .Where(r => r.RequestId == id)
                                 .OrderByDescending(a => a.LogTime)
                                 .First();

                        ////проверяем последняя ли запись
                        if (rl.LogTime.Ticks != dt_log)
                        {
                            throw new Exception("Данные устарели, необходимо обновить!");
                        }

                        if (!StatusUtils.CheckNextStatus(rl.Status, new_status))
                        {
                            throw new Exception(string.Format("Недопустимое изменение статуса заявки '{0}'->'{1}'",
                                                              StatusUtils.GetStatusName(rl.Status), StatusUtils.GetStatusName(new_status)));
                        }

                        //добавление записи
                        db.RequestLogs.Add(new RequestLog
                        {
                            RequestId = id,
                            Status    = new_status,
                            Comment   = Comment,
                            LogTime   = DateTime.Now
                        });

                        db.SaveChanges();
                        transact.Commit();
                    }
                }

                return(Redirect((Url.Action("Update", new { id = id }))));
            }
            catch (Exception e)
            {
                return(View("ErrorUpdate", new ErrorUpdate {
                    message = e.Message, id = id
                }));
            }
        }