public void Given_employee_is_assignee_then__dont_return__task_due_in_2days()
        {
            //GIVEN

            var employee = new Employee() { Id = Guid.NewGuid(), NotificationType = NotificationType.Daily };
            var furthcontrolmersuretasks = new FireRiskAssessmentFurtherControlMeasureTask() { TaskAssignedTo = employee, TaskStatus = TaskStatus.Outstanding, TaskCompletionDueDate = DateTime.Now.AddDays(2) };
            var significantFinding = new SignificantFinding() { };
            significantFinding.FurtherControlMeasureTasks.Add(furthcontrolmersuretasks);
            furthcontrolmersuretasks.SignificantFinding = significantFinding;
            var riskAssessement = FireRiskAssessment.Create("this is the title", "the ref", 1312, null, new UserForAuditing { Id = Guid.NewGuid() });

            var user = new UserForAuditing();
            var fireRiskAssessmentChecklist = riskAssessement.FireRiskAssessmentChecklists[0];
            var question = new Question();

            var fireAnswer = FireAnswer.Create(fireRiskAssessmentChecklist, question, YesNoNotApplicableEnum.No, "Additional Info", user);
            fireAnswer.SignificantFinding = significantFinding;
            significantFinding.FireAnswer = fireAnswer;

            riskAssessement.FireRiskAssessmentChecklists[0].Answers = new List<FireAnswer>() { fireAnswer };

            _fireRiskAssessments.Add(riskAssessement);

            var target =
                new GetDueFireRiskAssessmentFurtherControlMeasureTasksForEmployeeQuery(
                    _queryableWrapper.Object);

            //WHEN
            var result = target.Execute(employee.Id, null);

            //THEN
            Assert.That(result.Count, Is.EqualTo(0));

        }
 private static bool IsTaskDue(FireRiskAssessmentFurtherControlMeasureTask task)
 {
     return (
        (task.TaskAssignedTo.NotificationType == NotificationType.Daily && task.TaskCompletionDueDate.HasValue && QueriesHelper.SimplifyDate(task.TaskCompletionDueDate.Value) == QueriesHelper.SimplifyDate(DateTime.Now.AddDays(1))) ||
        (task.TaskAssignedTo.NotificationType == NotificationType.Weekly && task.TaskCompletionDueDate.HasValue && task.TaskCompletionDueDate.Value < DateTime.Now.AddDays(7)) ||
        (task.TaskAssignedTo.NotificationType == NotificationType.Monthly && task.TaskCompletionDueDate.HasValue && task.TaskCompletionDueDate.Value < DateTime.Now.AddDays(30))
        );
 }
        public FireRiskAssessmentFurtherControlMeasureTaskDto MapWithAssignedToAndSignificantFinding(FireRiskAssessmentFurtherControlMeasureTask entity)
        {
            var dto = new TaskDtoMapper().MapWithAssignedTo(entity) as FireRiskAssessmentFurtherControlMeasureTaskDto;

            dto.SignificantFinding =
                    new SignificantFindingDtoMapper().Map(entity.SignificantFinding);

            return dto;
        }
        public void Given_a_FireFCMTask_when_DefaultDocumentType_returns_FRA_DocumentType()
        {
            //given
            var fcmTask = new FireRiskAssessmentFurtherControlMeasureTask();

            //when
            var result = fcmTask.DefaultDocumentType;

            //then
            Assert.AreEqual(DocumentTypeEnum.FRADocumentType, result);
        }
        private static bool DoesTaskNeedToBeNotified(FireRiskAssessmentFurtherControlMeasureTask task)
        {
            var notificationType = task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor.Employee.NotificationType;
            var notificationFrequency = task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor.Employee.NotificationFrequecy;

            return (notificationType == NotificationType.Daily) ||
                   (notificationType == NotificationType.Weekly && task.TaskCompletedDate.HasValue &&  task.TaskCompletedDate.Value > DateTime.Now.AddDays(-7))
                   || (notificationType == NotificationType.Monthly && notificationFrequency.HasValue && task.TaskCompletedDate.HasValue &&
                       task.TaskCompletedDate.Value > QueriesHelper.GetPreviousMonthsDate(notificationFrequency.Value));

        }
        public void When_adding_Then_should_set_correct_properties()
        {
            // Given
            var finding = new SignificantFinding();
            var user = new UserForAuditing();

            // When
            var task = new FireRiskAssessmentFurtherControlMeasureTask();
            finding.AddFurtherControlMeasureTask(task, user);

            // Then
            Assert.That(finding.FurtherControlMeasureTasks.Count, Is.EqualTo(1));
            Assert.That(finding.LastModifiedBy, Is.EqualTo(user));
            Assert.That(finding.LastModifiedOn.Value.ToShortDateString(), Is.EqualTo(DateTime.Now.ToShortDateString()));
        }
        private static FireRiskAssessmentFurtherControlMeasureTask CreateFireRiskAssessmentFurtherControlMeasureTask()
        {
            var fireRiskAssessment = new FireRiskAssessment();
            var fireRiskAssessmentChecklist = new FireRiskAssessmentChecklist();
            fireRiskAssessmentChecklist.FireRiskAssessment = fireRiskAssessment;

            var fireAnswer = new FireAnswer();
            fireAnswer.FireRiskAssessmentChecklist = fireRiskAssessmentChecklist;
            fireRiskAssessmentChecklist.Answers.Add(fireAnswer);

            var significantFinding = SignificantFinding.Create(fireAnswer, null);
            var fraTask = new FireRiskAssessmentFurtherControlMeasureTask();
            fraTask.SignificantFinding = significantFinding;
            return fraTask;
        }
        public static FireRiskAssessmentFurtherControlMeasureTask Create(
            string reference, 
            string title, 
            string description, 
            DateTime? taskCompletionDueDate, 
            TaskStatus taskStatus, 
            Employee assignedTo,
            UserForAuditing user, 
            IEnumerable<CreateDocumentParameters> createDocumentParameterObjects, 
            TaskCategory furtherControlMeasureTaskCategory, 
            int taskReoccurringTypeId, 
            DateTime? taskReoccurringEndDate, 
            SignificantFinding significantFinding,
            bool sendTaskNotification,
            bool sendTaskCompletedNotification,
            bool sendTaskOverdueNotification,
            bool sendTaskDueTomorrowNotification,
            Guid taskGuid)
        {
            var furtherControlMeasureTask = new FireRiskAssessmentFurtherControlMeasureTask();
            furtherControlMeasureTask.SignificantFinding = significantFinding;
            furtherControlMeasureTask.SetValuesForCreate(
                reference,
                title,
                description,
                taskCompletionDueDate,
                taskStatus,
                assignedTo,
                user,
                createDocumentParameterObjects,
                furtherControlMeasureTaskCategory,
                taskReoccurringTypeId,
                taskReoccurringEndDate,
                sendTaskNotification,
                sendTaskCompletedNotification,
                sendTaskOverdueNotification,
                sendTaskDueTomorrowNotification,
                taskGuid,
                null);

            return furtherControlMeasureTask;
        }
        public void Given_employee_is_risk_assesor_then_return_completed_task()
        {
            //GIVEN
            var employee = new Employee() { Id = Guid.NewGuid(), NotificationType = NotificationType.Daily};
            
            var riskAssessor = new RiskAssessor() { Id = 5596870, Employee = employee };
            var furthcontrolmersuretasks = new FireRiskAssessmentFurtherControlMeasureTask() { TaskStatus = TaskStatus.Completed, TaskCompletedDate = DateTime.Now.AddDays(-1)};
            
            var significantFinding = new SignificantFinding(){};
            significantFinding.FurtherControlMeasureTasks.Add(furthcontrolmersuretasks);
            furthcontrolmersuretasks.SignificantFinding = significantFinding;


            var riskAssessement = FireRiskAssessment.Create("this is the title", "the ref", 1312, null, new UserForAuditing { Id = Guid.NewGuid() });
            riskAssessement.FireRiskAssessmentChecklists[0].FireRiskAssessment.RiskAssessor = riskAssessor;
            
            var user = new UserForAuditing();
            var fireRiskAssessmentChecklist = riskAssessement.FireRiskAssessmentChecklists[0];
            var question = new Question();
            
            var fireAnswer = FireAnswer.Create(fireRiskAssessmentChecklist, question, YesNoNotApplicableEnum.No, "Additional Info", user);
            fireAnswer.SignificantFinding = significantFinding;
            fireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor = riskAssessor;

            significantFinding.FireAnswer = fireAnswer;
          
            riskAssessement.FireRiskAssessmentChecklists[0].Answers = new List<FireAnswer>() {fireAnswer};

            _fireRiskAssessments.Add(riskAssessement);

            var target =
                new GetCompletedFireRiskAssessmentFurtherControlMeasureTasksForEmployeeQuery(null);

            //WHEN
            var result = target.Execute(employee.Id, null);

            //THEN
            Assert.That(result.Count, Is.EqualTo(1));

        }
        private static bool DoesTaskNeedToBeNotified(FireRiskAssessmentFurtherControlMeasureTask task, Guid employeeId)
        {
            // Risk Assessor
            if (task.SignificantFinding != null &&
                task.SignificantFinding.FireAnswer != null &&
                task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist != null &&
                task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment != null &&
                task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor != null &&
                task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor.Employee != null &&
                task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor.Employee.Id == employeeId)
            {
                var notificationType = task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor.Employee.NotificationType;
                var notificationFrequency = task.SignificantFinding.FireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor.Employee.NotificationFrequecy;

                return (
                            (notificationType == NotificationType.Daily) ||
                            (notificationType == NotificationType.Weekly && task.TaskCompletionDueDate.HasValue && 
                            QueriesHelper.SimplifyDate(task.TaskCompletionDueDate.Value) >=  QueriesHelper.SimplifyDate(DateTime.Now.AddDays(-7))) ||
                            (notificationType == NotificationType.Monthly && notificationFrequency.HasValue && task.TaskCompletionDueDate.HasValue && 
                            QueriesHelper.SimplifyDate(task.TaskCompletionDueDate.Value) >= QueriesHelper.GetPreviousMonthsDate(notificationFrequency.Value))
                        );
            }
            else if (task.TaskAssignedTo != null && task.TaskAssignedTo.Id == employeeId)
            {
                var notificationType = task.TaskAssignedTo.NotificationType;
                var notificationFrequency = task.TaskAssignedTo.NotificationFrequecy;

                return (
                           (notificationType == NotificationType.Daily) ||
                           (notificationType == NotificationType.Weekly && task.TaskCompletionDueDate.HasValue && 
                           QueriesHelper.SimplifyDate(task.TaskCompletionDueDate.Value) >= QueriesHelper.SimplifyDate(DateTime.Now.AddDays(-7))) ||
                           (notificationType == NotificationType.Monthly && notificationFrequency.HasValue && task.TaskCompletionDueDate.HasValue &&
                           QueriesHelper.SimplifyDate(task.TaskCompletionDueDate.Value) >= QueriesHelper.GetPreviousMonthsDate(notificationFrequency.Value))
                       );
            }
            else
            {
                return false;
            }
        }
        public void Given_employee_is_risk_assessor_and_notification_frequency_is_set_to_weekly_then_return_tasks_since_previous_week()
        {
            //GIVEN
            var employee = new Employee() { Id = Guid.NewGuid(), NotificationType = NotificationType.Weekly, NotificationFrequecy = (int)System.DayOfWeek.Wednesday };

            var riskAssessor = new RiskAssessor() { Id = 5596870, Employee = employee };
            
            var furthcontrolmersuretasks1 = new FireRiskAssessmentFurtherControlMeasureTask()
            {
                TaskStatus = TaskStatus.Completed,
                TaskCompletedDate = DateTime.Now,
                Title = "one"
            };

            var furthcontrolmersuretasks2 = new FireRiskAssessmentFurtherControlMeasureTask()
            {
                TaskStatus = TaskStatus.Completed,
                TaskCompletedDate = DateTime.Now.AddDays(-5),
                Title = "two"
            };

            var furthcontrolmersuretasks3 = new FireRiskAssessmentFurtherControlMeasureTask()
            {
                TaskStatus = TaskStatus.Completed,
                TaskCompletedDate = DateTime.Now.AddDays(-10),
                Title = "three"
            };

            var significantFinding = new SignificantFinding() { };

            significantFinding.FurtherControlMeasureTasks.Add(furthcontrolmersuretasks1);
            significantFinding.FurtherControlMeasureTasks.Add(furthcontrolmersuretasks2);
            significantFinding.FurtherControlMeasureTasks.Add(furthcontrolmersuretasks3);

            furthcontrolmersuretasks1.SignificantFinding = significantFinding;
            furthcontrolmersuretasks2.SignificantFinding = significantFinding;
            furthcontrolmersuretasks3.SignificantFinding = significantFinding;


            var riskAssessement = FireRiskAssessment.Create("this is the title", "the ref", 1312, null, new UserForAuditing { Id = Guid.NewGuid() });
            riskAssessement.FireRiskAssessmentChecklists[0].FireRiskAssessment.RiskAssessor = riskAssessor;

            var user = new UserForAuditing();
            var fireRiskAssessmentChecklist = riskAssessement.FireRiskAssessmentChecklists[0];
            var question = new Question();

            var fireAnswer = FireAnswer.Create(fireRiskAssessmentChecklist, question, YesNoNotApplicableEnum.No, "Additional Info", user);
            fireAnswer.SignificantFinding = significantFinding;
            fireAnswer.FireRiskAssessmentChecklist.FireRiskAssessment.RiskAssessor = riskAssessor;

            significantFinding.FireAnswer = fireAnswer;

            riskAssessement.FireRiskAssessmentChecklists[0].Answers = new List<FireAnswer>() { fireAnswer };

            _fireRiskAssessments.Add(riskAssessement);

            var target =
                new GetCompletedFireRiskAssessmentFurtherControlMeasureTasksForEmployeeQuery(
                    null);

            //WHEN
            var result = target.Execute(employee.Id, null);

            //THEN
            Assert.That(result.Count, Is.EqualTo(2));
            Assert.That(result[0].Title, Is.EqualTo("one"));
            Assert.That(result[1].Title, Is.EqualTo("two"));
        }