public void Given_Exisiting_Checklist_When_Completed_Status_Then_Correct_Properties_Are_Set()
        {
            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                SiteId = 11,
                ClientId = 22,
                CoveringLetterContent = "coveringLetterContent",
                Status = null
            };

            var checklist = Checklist.Create(parameters);

            var parametersNew = new CreateUpdateChecklistParameters()
            {
                SiteId = 111,
                ClientId = 222,
                CoveringLetterContent = "Content1",
                Status = "Completed",
                CompletedBy = "fullname",
                CompletedOn = DateTime.Now
            };

            // When
            checklist.UpdateChecklistDetails(parametersNew);

            Assert.That(checklist.Status, Is.EqualTo(parametersNew.Status));
            Assert.That(checklist.ChecklistCompletedBy, Is.EqualTo(parametersNew.CompletedBy));
            Assert.That(checklist.ChecklistCompletedOn, Is.EqualTo(parametersNew.CompletedOn));
        }
        public void Given_valid_checklist_When_Crete_called_Then_correct_action_plan_returned()
        {
            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                Id = Guid.NewGuid(),
                ClientId = 111,
                SiteAddress1 = "1 purple street",
                SiteAddressPostcode = "M1 1AA",
                VisitDate = "13/01/2000",
                Submit = true,
                Site = new Site() { Id = 11L}
            };

           var checklist = Checklist.Create(parameters); 
            
            // When
           // var actionPlan = ActionPlan.Create(checklist);

            // Then
            Assert.That(checklist.ActionPlan.Checklist , Is.EqualTo(checklist));
            Assert.That(checklist.ActionPlan.CompanyId, Is.EqualTo(checklist.ClientId));
            //Assert.That(actionPlan.Title, Is.EqualTo(checklist.));

            //todo: need to load site into checklist
            //Assert.That(actionPlan.Site.SiteId, Is.EqualTo(checklist.SiteId));

            Assert.That(checklist.ActionPlan.DateOfVisit, Is.EqualTo(checklist.VisitDate));
            Assert.That(checklist.ActionPlan.VisitBy, Is.EqualTo(checklist.VisitBy));
            Assert.That(checklist.ActionPlan.SubmittedOn, Is.Not.EqualTo(default(DateTime)));
            Assert.That(checklist.ActionPlan.AreasVisited, Is.EqualTo(checklist.AreasVisited));
            Assert.That(checklist.ActionPlan.AreasNotVisited, Is.EqualTo(checklist.AreasNotVisited));
            Assert.That(checklist.ActionPlan.Title, Is.EqualTo("Visit Report - 1 purple street - M1 1AA - 13/01/2000"));
            Assert.That(checklist.ActionPlan.Site, Is.EqualTo(parameters.Site));
        }
        public void Update_Checklist_Details()
        {
            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                SiteId = 11,
                ClientId = 22,
                CoveringLetterContent = "coveringLetterContent",
                Status = "status"
            };

            var checklist = Checklist.Create(parameters);

            var parametersNew = new CreateUpdateChecklistParameters()
            {
                SiteId = 111,
                ClientId = 222,
                CoveringLetterContent = "Content1",
                Status = "Status1"
            };

            // When
            checklist.UpdateChecklistDetails(parametersNew);

            Assert.That(checklist.SiteId, Is.EqualTo(111));
            Assert.That(checklist.ClientId, Is.EqualTo(222));
            Assert.That(checklist.CoveringLetterContent, Is.EqualTo("Content1"));
            Assert.That(checklist.Status, Is.EqualTo("Status1"));
        }
        public void Given_valid_checklist_When_Create_called_when_not_submitted_Then_action_plan_is_null()
        {

            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                Id = Guid.NewGuid(),
                ClientId = 111,
                SiteAddress1 = "1 purple street",
                SiteAddressPostcode = "M1 1AA",
                VisitDate = "13/01/2000"
            };

            var checklist = Checklist.Create(parameters);
            
            // Then
            Assert.That(checklist.ActionPlan, Is.Null);
        }
        public void When_Create_Then_Return_Checklist()
        {
            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                SiteId = 11,
                ClientId = 22,
                CoveringLetterContent = "coveringLetterContent",
                Status = "status",
                Jurisdiction = "UK"
            };


            // When
            var result = Checklist.Create(parameters);

            // Then
            Assert.That(result, Is.InstanceOf<Checklist>());
            Assert.That(result.SiteId, Is.EqualTo(11));
            Assert.That(result.ClientId, Is.EqualTo(22));
            Assert.That(result.CoveringLetterContent, Is.EqualTo("coveringLetterContent"));
            Assert.That(result.Status, Is.EqualTo("status"));
            Assert.That(result.Jurisdiction, Is.EqualTo("UK"));
        }
        public void Given_a_checklist_is_assigned_and_a_consultant_completes_checklist_then_status_stays_assigned()
        {
            var Id = Guid.NewGuid();

            // Given
            var checklist = new Checklist();
            checklist.Status = "Assigned";

            var parameters = new CreateUpdateChecklistParameters()
            {
                Id = Id,
                ClientId = 11,
                SiteId = 22,
                CoveringLetterContent = "Letter content",
                Status = "Completed",
                VisitBy = "VisitBy",
                VisitDate = "10/10/2013",
                VisitType = "Visit Type",
                MainPersonSeenName = "Person Seen Name",
                AreasVisited = "Areas Visited",
                AreasNotVisited = "Areas Not Visited",
                EmailAddress = "email",
                ImpressionType = new ImpressionType() { Comments = "comments" },
                ImmediateRiskNotifications = new List<AddImmediateRiskNotificationParameters>(),
                SubmittedBy = "username",
                SubmittedOn = DateTime.Now,
                Submit = true
            };
          
            checklist.UpdateChecklistDetails(parameters);

            Assert.That(checklist.Status,Is.EqualTo("Assigned"));
        }
        public void Given_A_Checklist_is_submitted_then_submitted_properties_are_set()
        {
            var Id = Guid.NewGuid();

            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                Id = Id,
                ClientId = 11,
                SiteId = 22,
                CoveringLetterContent = "Letter content",
                Status = "Status",
                VisitBy = "VisitBy",
                VisitDate = "10/10/2013",
                VisitType = "Visit Type",
                MainPersonSeenName = "Person Seen Name",
                AreasVisited = "Areas Visited",
                AreasNotVisited = "Areas Not Visited",
                EmailAddress = "email",
                ImpressionType = new ImpressionType() { Comments = "comments" },
                ImmediateRiskNotifications = new List<AddImmediateRiskNotificationParameters>(),
                SubmittedBy = "username",
                SubmittedOn = DateTime.Now,
                Submit = true
            };

            // When
            var checklist = Checklist.Create(parameters);

            Assert.That(checklist.ChecklistSubmittedBy, Is.EqualTo(parameters.SubmittedBy));
            Assert.That(checklist.ChecklistSubmittedOn, Is.EqualTo(parameters.SubmittedOn));
        }
        public void Given_A_Checklist_is_submitted_then_exception_thrown_if_submitted_again()
        {
            var Id = Guid.NewGuid();

            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                Id = Id,
                ClientId = 11,
                SiteId = 22,
                CoveringLetterContent = "Letter content",
                Status = "Status",
                VisitBy = "VisitBy",
                VisitDate = "10/10/2013",
                VisitType = "Visit Type",
                MainPersonSeenName = "Person Seen Name",
                AreasVisited = "Areas Visited",
                AreasNotVisited = "Areas Not Visited",
                EmailAddress = "email",
                ImpressionType = new ImpressionType() { Comments = "comments" },
                ImmediateRiskNotifications = new List<AddImmediateRiskNotificationParameters>(),
                Submit = true
            };

            var checklist = Checklist.Create(parameters);
            
            var ex = Assert.Throws<SafeCheckChecklistAlreadySubmittedException>(() => checklist.UpdateChecklistDetails(parameters));
        }
        public void Given_A_Checklist_is_submitted_then_action_plan_is_created()
        {
            var Id = Guid.NewGuid();

            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                Id = Id,
                ClientId = 11,
                SiteId = 22,
                CoveringLetterContent = "Letter content",
                Status = "Status",
                VisitBy = "VisitBy",
                VisitDate = "10/10/2013",
                VisitType = "Visit Type",
                MainPersonSeenName = "Person Seen Name",
                AreasVisited = "Areas Visited",
                AreasNotVisited = "Areas Not Visited",
                EmailAddress = "email",
                ImpressionType = new ImpressionType() { Comments = "comments" },
                ImmediateRiskNotifications = new List<AddImmediateRiskNotificationParameters>(),
                Submit = true
            };

            // When
            var checklist = Checklist.Create(parameters);

            Assert.That(checklist.ActionPlan, Is.Not.Null);
        }
        private CreateUpdateChecklistParameters CreateUpdateChecklistParameters(ChecklistViewModel model,
            UserForAuditing user)
        {
            var createUpdateChecklistParameters = new CreateUpdateChecklistParameters();
            createUpdateChecklistParameters.Id = model.Id;
            createUpdateChecklistParameters.ClientId = model.ClientId;
            createUpdateChecklistParameters.SiteId = model.SiteId;
            createUpdateChecklistParameters.CoveringLetterContent = model.CoveringLetterContent;
            createUpdateChecklistParameters.Status = model.Status;
            createUpdateChecklistParameters.Submit = model.Submit;
            createUpdateChecklistParameters.User = user;
            createUpdateChecklistParameters.Site = _siteRepository.GetByPeninsulaSiteId((long) model.SiteId);

            createUpdateChecklistParameters.CreatedOn = model.CreatedOn;
            createUpdateChecklistParameters.CreatedBy = model.CreatedBy;
            createUpdateChecklistParameters.CompletedOn = model.CompletedOn;
            createUpdateChecklistParameters.CompletedBy = model.CompletedBy;
            createUpdateChecklistParameters.SubmittedOn = model.SubmittedOn;
            createUpdateChecklistParameters.SubmittedBy = model.SubmittedBy;
            createUpdateChecklistParameters.PostedBy = model.PostedBy;
            createUpdateChecklistParameters.Industry = model.IndustryId.HasValue ? _industryRepository.LoadById(model.IndustryId.Value): null;
		    createUpdateChecklistParameters.QAComments = model.QAComments;
		    createUpdateChecklistParameters.LastModifiedOn = model.LastModifiedOn;
            createUpdateChecklistParameters.EmailReportToPerson = model.EmailReportToPerson.HasValue && model.EmailReportToPerson.Value;
            createUpdateChecklistParameters.EmailReportToOthers = model.EmailReportToOthers.HasValue && model.EmailReportToOthers.Value;
            createUpdateChecklistParameters.PostReport = model.PostReport.HasValue && model.PostReport.Value;
		    createUpdateChecklistParameters.OtherEmailAddresses = model.OtherEmailAddresses;

            if (model.SiteVisit != null)
            {
                createUpdateChecklistParameters.VisitDate = model.SiteVisit.VisitDate;
                createUpdateChecklistParameters.VisitBy = model.SiteVisit.VisitBy;
                createUpdateChecklistParameters.VisitType = model.SiteVisit.VisitType;

                if (model.SiteVisit.PersonSeen != null)
                {
                    createUpdateChecklistParameters.PersonSeenJobTitle = model.SiteVisit.PersonSeen.JobTitle;
                    createUpdateChecklistParameters.PersonSeenName = model.SiteVisit.PersonSeen.Name;
                    createUpdateChecklistParameters.PersonSeenSalutation = model.SiteVisit.PersonSeen.Salutation;
                    createUpdateChecklistParameters.PersonSeenId = model.SiteVisit.PersonSeen.Id;
                }

                createUpdateChecklistParameters.AreasNotVisited = model.SiteVisit.AreasNotVisited;
                createUpdateChecklistParameters.AreasVisited = model.SiteVisit.AreasVisited;
                createUpdateChecklistParameters.EmailAddress = model.SiteVisit.EmailAddress;


                createUpdateChecklistParameters.ImpressionType = (model.SiteVisit.SelectedImpressionType == null ||
                                                                  model.SiteVisit.SelectedImpressionType.Id ==
                                                                  Guid.Empty)
                    ? null
                    : _impressionRespository.GetById(
                        model.SiteVisit.SelectedImpressionType.Id);

                createUpdateChecklistParameters.SiteAddress1 = model.Site == null ? String.Empty : model.Site.Address1;
                createUpdateChecklistParameters.SiteAddressPostcode = model.Site == null
                    ? String.Empty
                    : model.Site.Postcode;
            }

            foreach (var immediateRiskNotificationViewModel in model.ImmediateRiskNotifications)
            {
                // This part updates the IRN's for storage on the checklist, retrieved in SafeCheck when not submitted
                createUpdateChecklistParameters.ImmediateRiskNotifications.Add(new AddImmediateRiskNotificationParameters
                {
                    Id = immediateRiskNotificationViewModel.Id,
                    Reference = immediateRiskNotificationViewModel.Reference,
                    Title = immediateRiskNotificationViewModel.Title,
                    SignificantHazardIdentified = immediateRiskNotificationViewModel.SignificantHazard,
                    RecommendedImmediateAction = immediateRiskNotificationViewModel.RecommendedImmediate
                });
            }
            return createUpdateChecklistParameters;
        }
        public void Given_valid_checklist_When_CreateImmediateRiskNotifications_called_when_submitted_Then_Actions_Populated()
        {
            // Given
            var parameters = new CreateUpdateChecklistParameters()
            {
                Id = Guid.NewGuid(),
                ClientId = 111,
                SiteAddress1 = "1 purple street",
                SiteAddressPostcode = "M1 1AA",
                VisitDate = "13/01/2000",
                ImmediateRiskNotifications = new List<AddImmediateRiskNotificationParameters>(),
                CompletedBy = "CompletedBy",
                CompletedOn = DateTime.Now,
                Submit = true,
                MainPersonSeen = new Employee {Id = Guid.NewGuid()}
            };

            parameters.ImmediateRiskNotifications.Add(new AddImmediateRiskNotificationParameters()
            {
                Id = Guid.NewGuid(), 
                RecommendedImmediateAction = "Action 1",
                Reference = "Ref 1", 
                SignificantHazardIdentified = "Hazard 1", 
                Title = "Title 1",
            });

            parameters.ImmediateRiskNotifications.Add(new AddImmediateRiskNotificationParameters()
            {
                Id = Guid.NewGuid(),
                RecommendedImmediateAction = "Action 2",
                Reference = "Ref 2",
                SignificantHazardIdentified = "Hazard 2",
                Title = "Title 2"
            });

            var checklist = Checklist.Create(parameters);
            checklist.ActionPlan.CreateImmediateRiskNotifications();

            // Then
            Assert.That(checklist.ActionPlan, Is.Not.Null);
            Assert.That(checklist.ActionPlan.Actions.Count(), Is.EqualTo(2));
            Assert.That(checklist.ActionPlan.Actions.ElementAt(0).Title, Is.EqualTo(parameters.ImmediateRiskNotifications.ElementAt(0).Title));
            Assert.That(checklist.ActionPlan.Actions.ElementAt(1).Title, Is.EqualTo(parameters.ImmediateRiskNotifications.ElementAt(1).Title));
            Assert.That(checklist.ActionPlan.Actions.ElementAt(1).Reference, Is.EqualTo(parameters.ImmediateRiskNotifications.ElementAt(1).Reference));

            Assert.That(checklist.ActionPlan.Actions.ElementAt(0).AssignedTo.Id, Is.EqualTo(parameters.MainPersonSeen.Id));
            Assert.That(checklist.ActionPlan.Actions.ElementAt(1).AssignedTo.Id, Is.EqualTo(parameters.MainPersonSeen.Id));
        }
        private CreateUpdateChecklistParameters CreateUpdateChecklistParameters(ChecklistViewModel model,
            UserForAuditing user)
        {
            var parameters = new CreateUpdateChecklistParameters();

            parameters.Id = model.Id;
            parameters.ClientId = model.ClientId;
            parameters.SiteId = model.SiteId;
            parameters.CoveringLetterContent = model.CoveringLetterContent;
            parameters.Status = model.Status;
            parameters.Submit = model.Submit;
            parameters.User = user;
            parameters.Site = _siteRepository.GetByPeninsulaSiteId((long) model.SiteId);

            parameters.CreatedOn = model.CreatedOn;
            parameters.CreatedBy = model.CreatedBy;
            parameters.CompletedOn = model.CompletedOn.ToLocalTime();
            parameters.CompletedBy = model.CompletedBy;
            parameters.SubmittedOn = model.SubmittedOn.ToLocalTime();
            parameters.SubmittedBy = model.SubmittedBy;
            parameters.PostedBy = model.PostedBy;
            parameters.ChecklistTemplate = model.IndustryId.HasValue
                ? _industryRepository.LoadById(model.IndustryId.Value)
                : null;
            parameters.QAComments = model.QAComments;
            parameters.LastModifiedOn = model.LastModifiedOn.ToLocalTime();
            parameters.EmailReportToPerson = model.EmailReportToPerson.HasValue && model.EmailReportToPerson.Value;
            parameters.EmailReportToOthers = model.EmailReportToOthers.HasValue && model.EmailReportToOthers.Value;
            parameters.PostReport = model.PostReport.HasValue && model.PostReport.Value;
            parameters.OtherEmailAddresses = model.OtherEmailAddresses;
            parameters.ReportHeader = string.IsNullOrEmpty(model.ReportHeaderType)
                ? SummaryReportHeaderType.None
                : (SummaryReportHeaderType)
                    Enum.Parse(typeof (SummaryReportHeaderType), model.ReportHeaderType);

            // SGG: Comment out until we support the functionality
            //parameters.IncludeActionPlan = model.IncludeActionPlan;
            //parameters.IncludeComplianceReview = model.IncludeComplianceReview;

            parameters.IncludeActionPlan = true;
            parameters.IncludeComplianceReview = true;

            //parameters.Deleted = model.Deleted;
            //parameters.DeletedBy = model.DeletedBy;
            //parameters.DeletedOn = model.DeletedOn;

            parameters.ExecutiveSummaryUpdateRequired = model.ExecutiveSummaryUpdateRequired;
            parameters.ExecutiveSummaryQACommentsResolved = model.ExecutiveSummaryQACommentsResolved;
            parameters.ExecutiveSummaryQACommentsSignedOffBy = model.ExecutiveSummaryQASignedOffBy;
            parameters.ExecutiveSummaryQACommentsSignedOffDate = model.ExecutiveSummaryQASignedOffDate.ToLocalTime();

            parameters.ClientLogoFilename = model.ClientLogoFilename;
            parameters.ClientSiteGeneralNotes = model.ClientSiteGeneralNotes;
            parameters.SpecialReport = model.SpecialReport;

            if (model.SiteVisit != null)
            {
                parameters.VisitDate = model.SiteVisit.VisitDate.HasValue
                    ? model.SiteVisit.VisitDate.Value.ToLocalTime().ToString("dd/MM/yyyy")
                    : null;
                parameters.VisitBy = model.SiteVisit.VisitBy;
                parameters.VisitType = model.SiteVisit.VisitType;

                if (model.SiteVisit.PersonSeen != null)
                {
                    if (model.SiteVisit.PersonSeen.Id == null)
                    {
                        parameters.MainPersonSeen = null;
                        parameters.MainPersonSeenName = null;
                    }
                    else if (model.SiteVisit.PersonSeen.Id == Guid.Empty)
                    {
                        parameters.MainPersonSeen = null;
                        parameters.MainPersonSeenName = model.SiteVisit.PersonSeen.Name;
                    }
                    else
                    {
                        var employee = _employeeRespository.GetById(model.SiteVisit.PersonSeen.Id.Value);
                        parameters.MainPersonSeen = employee ?? null;
                        parameters.MainPersonSeenName = model.SiteVisit.PersonSeen.Name;
                    }
                }

                parameters.AreasNotVisited = model.SiteVisit.AreasNotVisited;
                parameters.AreasVisited = model.SiteVisit.AreasVisited;
                parameters.EmailAddress = model.SiteVisit.EmailAddress;
                parameters.Jurisdiction = model.Jurisdiction;

                parameters.ImpressionType = (model.SiteVisit.SelectedImpressionType == null ||
                                             model.SiteVisit.SelectedImpressionType.Id ==
                                             Guid.Empty)
                    ? null
                    : _impressionRespository.GetById(
                        model.SiteVisit.SelectedImpressionType.Id);

                parameters.SiteAddress1 = model.Site == null ? String.Empty : model.Site.Address1;
                parameters.SiteAddressPostcode = model.Site == null
                    ? String.Empty
                    : model.Site.Postcode;
            }

            foreach (var immediateRiskNotificationViewModel in model.ImmediateRiskNotifications)
            {
                // This part updates the IRN's for storage on the checklist, retrieved in SafeCheck when not submitted
                parameters.ImmediateRiskNotifications.Add(new AddImmediateRiskNotificationParameters
                {
                    Id = immediateRiskNotificationViewModel.Id,
                    Reference = immediateRiskNotificationViewModel.Reference,
                    Title = immediateRiskNotificationViewModel.Title,
                    SignificantHazardIdentified = immediateRiskNotificationViewModel.SignificantHazard,
                    RecommendedImmediateAction = immediateRiskNotificationViewModel.RecommendedImmediate
                });
            }
            return parameters;
        }