public static SaveFurtherControlMeasureTaskRequest Create(
            string title,
            string description, 
            string reference,
            string taskCompletionDueDate,
            int taskStatusId,
            long companyId,
            long riskAssessmentId,
            long riskAssessmentHazardId,
            Guid taskAssignedToId,
            int furtherControlMeasureTaskCategoryId,
            int taskReoccurringTypeId,
            string taskReoccurringFirstDueDate,
            DateTime? taskReoccurringEndDate,
            bool sendTaskNotification,
            bool sendTaskCompletedNotification,
            bool sendTaskOverdueNotification,
            bool sendTaskDueTomorrowNotification,
            Guid userId,
            List<CreateDocumentRequest> createDocumentRequests,
            Guid taskGuid
            )
        {
            var request = new SaveFurtherControlMeasureTaskRequest();

            request.Title = title;
            request.Description = description;
            request.Reference = reference;
            request.TaskStatus = (TaskStatus)taskStatusId;
            request.CompanyId = companyId;
            request.RiskAssessmentId = riskAssessmentId;
            request.RiskAssessmentHazardId = riskAssessmentHazardId;
            request.TaskAssignedToId = taskAssignedToId;
            request.FurtherControlMeasureTaskCategoryId = furtherControlMeasureTaskCategoryId;
            request.TaskReoccurringTypeId = taskReoccurringTypeId;
            request.TaskReoccurringEndDate = taskReoccurringEndDate;
            request.SendTaskNotification = sendTaskNotification;
            request.SendTaskCompletedNotification = sendTaskCompletedNotification;
            request.SendTaskOverdueNotification = sendTaskOverdueNotification;
            request.SendTaskDueTomorrowNotification = sendTaskDueTomorrowNotification;
            request.UserId = userId;

            if (request.IsReoccurringTask)
            {
                request.TaskCompletionDueDate = string.IsNullOrEmpty(taskReoccurringFirstDueDate)
                                        ? (DateTime?)null
                                        : DateTime.Parse(taskReoccurringFirstDueDate);
            }
            else
            {
                request.TaskCompletionDueDate = string.IsNullOrEmpty(taskCompletionDueDate)
                                            ? (DateTime?)null
                                            : DateTime.Parse(taskCompletionDueDate);
            }

            request.CreateDocumentRequests.AddRange(createDocumentRequests);
            request.TaskGuid = taskGuid;
            return request;
        }
 private Employee GetFurtherActionTaskAssignedTo(SaveFurtherControlMeasureTaskRequest request)
 {
     if (request.TaskAssignedToId == Guid.Empty) return null;
     return _employeeRepository.GetByIdAndCompanyId(request.TaskAssignedToId, request.CompanyId);
 }
 private TaskCategory GetFurtherControlMeasureTaskCategory(SaveFurtherControlMeasureTaskRequest request)
 {
     return _responsibilityTaskCategoryRepository.GetFutherControlMeasureTaskCategoryById(request.FurtherControlMeasureTaskCategoryId);
 }
        private MultiHazardRiskAssessmentFurtherControlMeasureTask CreateRiskAssessmentFurtherActionTask(SaveFurtherControlMeasureTaskRequest request, UserForAuditing user)
        {
            var assignedTo = GetFurtherActionTaskAssignedTo(request);
            var createDocumentParameterObjects = _documentParameterHelper.GetCreateDocumentParameters(request.CreateDocumentRequests, request.CompanyId);
            var furtherControlMeasureTaskCategory = GetFurtherControlMeasureTaskCategory(request);

            return MultiHazardRiskAssessmentFurtherControlMeasureTask.Create(
                request.Reference,
                request.Title,
                request.Description,
                request.TaskCompletionDueDate,
                request.TaskStatus,
                assignedTo,
                user,
                createDocumentParameterObjects,
                furtherControlMeasureTaskCategory,
                request.TaskReoccurringTypeId,
                request.TaskReoccurringEndDate,
                request.SendTaskNotification,
                request.SendTaskCompletedNotification,
                request.SendTaskOverdueNotification,
                request.SendTaskDueTomorrowNotification,
                request.TaskGuid);
        }
        public MultiHazardRiskAssessmentFurtherControlMeasureTaskDto AddFurtherControlMeasureTask(SaveFurtherControlMeasureTaskRequest request)
        {
            _log.Add(request);

            var user = _userForAuditingRepository.GetByIdAndCompanyId(request.UserId, request.CompanyId);
            var hazard = _multiHazardRiskAssessmentHazardRepository.GetById(request.RiskAssessmentHazardId);
            var furtherActionTask = CreateRiskAssessmentFurtherActionTask(request, user);
            hazard.AddFurtherActionTask(furtherActionTask, user);

            _multiHazardRiskAssessmentHazardRepository.SaveOrUpdate(hazard);
            _multiHazardRiskAssessmentHazardRepository.Flush();

            var furtherActionTaskDto = new MultiHazardRiskAssessmentFurtherControlMeasureTaskDtoMapper().MapWithAssignedToAndRiskAssessmentHazard(furtherActionTask);
            return furtherActionTaskDto;

        }
        private void CreateRiskAssessmentWithFurtherControlMeasureTasksDocuments(int amountOfFurtherControlMeasureDocumentsToAdd)
        {
            var newRiskAssementId = CreateRiskAssessment();

            var sessionManager = ObjectFactory.GetInstance<IBusinessSafeSessionManager>();
            var riskAssessmentAttachmentService = ObjectFactory.GetInstance<IMultiHazardRiskAssessmentAttachmentService>();
            var attachHazardRequest = new AttachHazardsToRiskAssessmentRequest()
                                          {
                                              CompanyId = companyId,
                                              RiskAssessmentId = newRiskAssementId,
                                              UserId = GetRandomUserId(),
                                              Hazards = new List<AttachHazardsToRiskAssessmentHazardDetail>()
                                              {
                                                  new AttachHazardsToRiskAssessmentHazardDetail(){Id =GetRandomHazardId(), OrderNumber = 1},
                                              } 

                                          };
            riskAssessmentAttachmentService.AttachHazardsToRiskAssessment(attachHazardRequest);
            sessionManager.Session.Flush();


            var riskAssessmentFurtherActionService = ObjectFactory.GetInstance<IFurtherControlMeasureTaskService>();

            var documentsToAttach = new List<CreateDocumentRequest>();
            for (int i = 0; i < amountOfFurtherControlMeasureDocumentsToAdd; i++)
            {
                var randomId = new Random().Next(2500);
                string titleDescription = "Test " + randomId;
                documentsToAttach.Add(new CreateDocumentRequest()
                {
                    Title = titleDescription,
                    Description = titleDescription,
                    DocumentLibraryId = i,
                    Filename = "Test File Name" + randomId,
                    DocumentType = DocumentTypeEnum.GRADocumentType,
                    DocumentOriginType = DocumentOriginType.TaskCompleted,
                    Extension = ".doc",

                });
            }

            var riskAssessmentRepository = ObjectFactory.GetInstance<IGeneralRiskAssessmentRepository>();
            var riskAssessment = riskAssessmentRepository.GetById(newRiskAssementId);
            var riskAssessmentHazardId = riskAssessment.Hazards.First().Id;

            var request = new SaveFurtherControlMeasureTaskRequest()
            {
                CompanyId = companyId,
                RiskAssessmentId = newRiskAssementId,
                UserId = GetRandomUserId(),
                CreateDocumentRequests = documentsToAttach,
                Title = "",
                RiskAssessmentHazardId = riskAssessmentHazardId,
                FurtherControlMeasureTaskCategoryId = 3
            };
            riskAssessmentFurtherActionService.AddFurtherControlMeasureTask(request);
            sessionManager.Session.Flush();
        }