Esempio n. 1
0
        public async Task <ActionResult> Edit(SupportRequestViewModel requestViewModel)
        {
            var started       = false;
            var itUserChanged = false;
            var login         = User.Identity.Name;
            var accountName   = login.Substring(5, login.Length - 5);
            var person        = await _db.Persons.FirstOrDefaultAsync(p => p.AccountName == accountName);

            if (person == null || !ModelState.IsValid)
            {
                // return view with error message
                if (person == null)
                {
                    ModelState.AddModelError(string.Empty, "Ошибка авторизации!");
                }
                return(View(requestViewModel.EditByIt ? "EditByIt" : "EditByUser", requestViewModel));
            }
            var supportRequest = await _db.SupportRequests.FindAsync(requestViewModel.Id);

            if (supportRequest == null)
            {
                return(HttpNotFound());
            }
            supportRequest.Category = requestViewModel.Category;

            //a file was attached
            if (requestViewModel.Upload != null && requestViewModel.Upload.ContentLength > 0)
            {
                if (requestViewModel.Upload.ContentLength > 10485760)
                {
                    ModelState.AddModelError(string.Empty, "Файл должен быть меньше 10 МБ!");
                    return(View(requestViewModel.EditByIt ? "EditByIt" : "EditByUser", requestViewModel));
                }
                var fileName = Path.GetFileName(requestViewModel.Upload.FileName);
                if (!string.IsNullOrEmpty(fileName))
                {
                    var dir      = Directory.CreateDirectory(Path.Combine(HostingEnvironment.MapPath(@"~/SupportFiles"), Guid.NewGuid().ToString()));
                    var filePath = Path.Combine(dir.FullName, fileName);
                    requestViewModel.Upload.SaveAs(filePath);
                    var requestFile = new SupportFile
                    {
                        Path = filePath
                    };
                    _db.SupportFiles.Add(requestFile);
                    supportRequest.File = requestFile;
                }
            }

            //edit by user
            if (!requestViewModel.EditByIt)
            {
                int mark;
                supportRequest.Text = requestViewModel.Text;
                supportRequest.Mark = int.TryParse(requestViewModel.Mark, out mark) ? mark : 0;
                if (supportRequest.State == 2 && supportRequest.Mark == 0)
                {
                    requestViewModel.State = 2;
                    ModelState.AddModelError(string.Empty, "Пожалуйста, выберите оценку");
                    return(View("EditByUser", requestViewModel));
                }
                supportRequest.FeedBack = requestViewModel.FeedBack;
                supportRequest.Urgency  = requestViewModel.Urgency;
            }

            //edit by IT-user
            else
            {
                if (requestViewModel.ToId != 0)
                {
                    var itUser = await _db.Persons.FindAsync(requestViewModel.ToId);

                    if (itUser != null)
                    {
                        //new request assigned to an IT-user - start it
                        if (supportRequest.State == 0)
                        {
                            supportRequest.State     = 1;
                            supportRequest.StartTime = DateTime.Now;
                            started = true;
                        }
                        else if (supportRequest.To != itUser)
                        {
                            itUserChanged = true;
                        }
                        supportRequest.To = itUser;
                    }
                }
                supportRequest.Comment           = requestViewModel.Comment;
                supportRequest.SoftwareInstalled = requestViewModel.SoftwareInstalled;
                supportRequest.SoftwareRemoved   = requestViewModel.SoftwareRemoved;
                supportRequest.SoftwareRepaired  = requestViewModel.SoftwareRepaired;
                supportRequest.SoftwareUpdated   = requestViewModel.SoftwareUpdated;
                //supportRequest.HardwareId = requestViewModel.HardwareId;
                //supportRequest.HardwareReplaced = requestViewModel.HardwareReplaced;
                supportRequest.OtherActions = requestViewModel.OtherActions;
            }

            _db.Entry(supportRequest).State = EntityState.Modified;
            await _db.SaveChangesAsync();

            using (var mailer = new EmailController())
            {
                EmailResult mail = null;
                //edit by IT-user
                if (requestViewModel.EditByIt)
                {
                    //job started right now, IT-user selected
                    if (started)
                    {
                        //mail for user (job started)
                        mail = await mailer.Accepted(requestViewModel.Id);

                        mail?.Deliver();
                        //mail for selected IT user (request assigned)
                        mail = await mailer.EditByIt(requestViewModel.Id, User.Identity.Name.GetUserName());

                        mail?.Deliver();
                    }
                    //job in progress, IT-user changed by another IT-user
                    else if (itUserChanged)
                    {
                        //mail for selected IT user (request assigned)
                        mail = await mailer.EditByIt(requestViewModel.Id, User.Identity.Name.GetUserName());

                        mail?.Deliver();
                    }
                }
                //edit by user
                else
                {
                    switch (supportRequest.State)
                    {
                    //job in progress
                    case 1:
                        //mail for selected IT user (request changed)
                        mail = await mailer.EditByUser(requestViewModel.Id);

                        break;

                    //job is done, user added mark and feedback
                    case 2:
                        //mail for IT managers
                        mail = await mailer.Feedback(requestViewModel.Id);

                        break;
                    }
                    mail?.Deliver();
                }
            }

            return(RedirectToAction("Index"));
        }
Esempio n. 2
0
 public static void Send(this EmailResult e)
 {
     e.Deliver();
 }