/// <summary>
 /// Adds the request technology.
 /// </summary>
 /// <param name="model">The model.</param>
 public void AddRequestTechnology(ManpowerRequestTechnology model)
 {
     _dbContext.Add(model);
     _dbContext.SaveChanges();
 }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        public ServiceResponseDTO <RequestDTO> SaveRequest(RequestDTO dto)
        {
            try
            {
                var request   = _mapper.Map <ManpowerRequest>(dto);
                var requestId = _requestCtxRepository.SaveRequest(request);
                dto.Id = requestId;

                var taggbleApplicants = _taggableApplicantsReposity.GetTaggableApplicants(request.PrimarySkillId);
                var applicantLevel    = _applicantLevelRepository.GetApplicantLevelList().ToArray();
                for (var i = 0; i < dto.NumberOfHires.Count; i++)
                {
                    for (int j = 0; j < dto.NumberOfHires[i]; j++)
                    {
                        //TODO: Create enum of statuses
                        var refNoId = _referenceNumberRepository.CreateReferenceNumber(requestId, 1, applicantLevel[i].Id);

                        foreach (var taggbleApplicant in taggbleApplicants)
                        {
                            var taggedApplicant = new TaggedApplicant()
                            {
                                ReferenceNoId = refNoId,
                                ApplicantId   = taggbleApplicant.Id,
                                TagDate       = DateTime.Now
                            };
                            _taggedApplicantRepository.Add(taggedApplicant);
                        }
                    }
                }

                for (var i = 0; i < dto.Technologies.Count; i++)
                {
                    var model = new ManpowerRequestTechnology()
                    {
                        ManpowerRequestId = requestId,
                        TechnologyId      = dto.Technologies[i]
                    };
                    _requestTechnologyRepository.AddRequestTechnology(model);
                }

                #region Send Email

                UserDTO       requestor       = new UserDTO();
                List <string> recipientEmails = new List <string>();
                // get user list
                var usersDto = _userService.GetUserList();
                if (usersDto.Success)
                {
                    requestor = usersDto.ResponseData.FirstOrDefault(a => a.Id == dto.RequestedBy);
                    // get roles with 'Tag Applicant' permission
                    var roles = _roleService.GetRoles();
                    if (roles.Success)
                    {
                        var rolesWithTagApplicant = roles.ResponseData.SelectMany(a => a.Permissions).Where(b => b.Name == "Tag Applicants").Select(c => c.RoleId).Distinct();
                        recipientEmails = usersDto.ResponseData.Where(a => rolesWithTagApplicant.Contains(a.RoleId)).Select(a => a.Email).ToList();
                    }
                }
                // get project details
                var projectDto = _projectService.GetProject(dto.ProjectId);
                // build email reference
                TagApplicant emailReference = new TagApplicant();
                emailReference.ProjectName    = projectDto.Success ? projectDto.ResponseData.Name : string.Join(String.Empty, projectDto.Errors);
                emailReference.EstimateHires  = dto.NumberOfHires.Sum();
                emailReference.Requestor      = requestor != null ? requestor.Firstname + " " + requestor.Lastname : "";
                emailReference.ManpowerAppUrl = _emailSettings.ManpowerAppUrl;
                _emailService.BuildEmailMessage(requestor != null ? requestor.Email : "", recipientEmails, emailReference);
                #endregion

                return(new ServiceResponseDTO <RequestDTO>()
                {
                    ResponseData = dto, Success = true
                });
            }
            catch (Exception ex)
            {
                return(new ServiceResponseDTO <RequestDTO>()
                {
                    Errors = new List <string>()
                    {
                        ex.Message
                    }, Success = false
                });
            }
        }