示例#1
0
        public void RejectedReport_shouldCall_SendMail_WithCorrectParameters()
        {
            var delta = new Delta <DriveReport>(typeof(DriveReport));

            delta.TrySetPropertyValue("Status", ReportStatus.Rejected);
            delta.TrySetPropertyValue("Comment", "Afvist, du");

            repoList.Add(new DriveReport
            {
                Id     = 1,
                Status = ReportStatus.Pending,
                Person = new Person
                {
                    Mail     = "*****@*****.**",
                    FullName = "TestPerson"
                }
            });

            _uut.SendMailForRejectedReport(1, delta);
            _mailMock.Received().SendMail("*****@*****.**", "Afvist indberetning", "Din indberetning er blevet afvist med kommentaren: \n \n" + "Afvist, du");
        }
        public void RejectedReport_shouldCall_SendMail_WithCorrectParameters()
        {
            string comment = "Afvist, du";
            var    delta   = new Delta <DriveReport>(typeof(DriveReport));

            delta.TrySetPropertyValue("Status", ReportStatus.Rejected);
            delta.TrySetPropertyValue("Comment", comment);
            var datetimestampNow = Utilities.ToUnixTime(DateTime.Now);

            repoList.Add(new DriveReport
            {
                Id     = 1,
                Status = ReportStatus.Pending,
                CreatedDateTimestamp = datetimestampNow,
                Person = new Person
                {
                    Mail     = "*****@*****.**",
                    FullName = "TestPerson"
                }
            });

            _uut.SendMailForRejectedReport(1, delta);
            _mailServiceMock.Received().SendMail("*****@*****.**", "Afvist indberetning", "Din indberetning, oprettet den " + Utilities.FromUnixTime(datetimestampNow) + ", er blevet afvist med kommentaren: \n \n" + comment + "\n \n Du har mulighed for at redigere den afviste indberetning i OS2indberetning under Mine indberetninger / Afviste, hvorefter den vil lægge sig under Afventer godkendelse - fanen igen.");
        }
        public new IActionResult Patch([FromODataUri] int key, Delta <DriveReport> delta, string emailText)
        {
            var report = Repo.AsQueryable().SingleOrDefault(x => x.Id == key);

            if (report == null)
            {
                return(NotFound());
            }

            if (report.PersonReports.Count == 0)
            {
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            if (CurrentUser.IsAdmin && emailText != null && report.Status == ReportStatus.Accepted)
            {
                // An admin is trying to reject an approved report.
                report.Status              = ReportStatus.Rejected;
                report.Comment             = emailText;
                report.ClosedDateTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
                report.ApprovedBy          = CurrentUser;
                try
                {
                    Repo.Save();
                    if (report.FourKmRule)
                    {
                        _driveService.CalculateFourKmRuleForOtherReports(report);
                    }
                    _driveService.SendMailToUserAndApproverOfEditedReport(report, emailText, CurrentUser, "afvist");
                    return(Ok());
                }
                catch (Exception e)
                {
                    _logger.LogWarning($"Fejl under forsøg på at afvise en allerede godkendt indberetning fra {report.Person.FullName}. Rapportens status er ikke ændret.");
                }
            }


            // Cannot approve own reports.
            if (report.PersonId == CurrentUser.Id)
            {
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            // Cannot approve reports where you are not responsible leader
            if (!report.IsPersonResponsible(CurrentUser.Id))
            {
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            // Return Unauthorized if the status is not pending when trying to patch.
            // User should not be allowed to change a Report which has been accepted or rejected.
            if (report.Status != ReportStatus.Pending)
            {
                _logger.LogWarning("Forsøg på at redigere indberetning med anden status end afventende. Rapportens status er ikke ændret.");
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            var status = new object();

            if (delta.TryGetPropertyValue("Status", out status))
            {
                if (status.ToString().Equals("Rejected"))
                {
                    bool sendEmailResult = true;
                    try
                    {
                        base.Patch(key, delta);
                        _driveService.CalculateFourKmRuleForOtherReports(report);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, $"{GetType().Name}, Patch(), Error when trying to update report status for user {report.Person.FullName}");
                        return(StatusCode(StatusCodes.Status500InternalServerError));
                    }

                    try
                    {
                        _driveService.SendMailForRejectedReport(key, delta);
                    }
                    catch
                    {
                        _logger.LogWarning($"{report.Person.FullName} har fået en indberetning afvist af sin leder, men er ikke blevet notificeret via email");
                        sendEmailResult = false;
                    }
                    return(Ok(sendEmailResult));
                }
            }

            return(base.Patch(key, delta));
        }