Exemplo n.º 1
0
        /// <summary>
        /// Prepare Email options for material requests
        /// </summary>
        /// <param name="requestViewModel"></param>
        /// <returns></returns>
        private EmailOptions PrepareEmailOptions(MaterialRequestViewModel requestViewModel)
        {
            var emailOptions = new EmailOptions
            {
                Template    = MailTemplate.Material,
                PlainBody   = string.Empty,
                Attachments = new List <Attachment>()
            };
            var msgBody = SendGridMailHelper.MailBody(_hostingEnvironment, emailOptions.Template);

            if (!string.IsNullOrEmpty(msgBody))
            {
                emailOptions.Subject = "Request for Material/Part Received - SubQuip";
                emailOptions.CcMail  = new MailUser {
                    Name = "SubQuip", Email = _configuration["requestEmail"]
                };
                emailOptions.ToMailsList = requestViewModel.MailUsers;
                emailOptions.HtmlBody    = msgBody.Replace("{MaterialNumber}", requestViewModel.MaterialNumber).Replace("{FromDate}", requestViewModel.FromDate.ToString("dd-MM-yyyy")).Replace("{ToDate}", requestViewModel.ToDate.ToString("dd-MM-yyyy"));
            }
            return(emailOptions);
        }
        /// <summary>
        /// Insert Material Request
        /// </summary>
        /// <param name="materialRequestViewModel"></param>
        /// <returns></returns>
        public IResult InsertMaterialRequest(List <FileDetails> fileList, MaterialRequestViewModel materialRequestViewModel)
        {
            materialRequestViewModel.RequestId = null;
            var result = new Result
            {
                Operation = Operation.Create,
                Status    = Status.Success
            };

            try
            {
                var materialRequest = new Request();
                materialRequest.MapFromViewModel(materialRequestViewModel, (ClaimsIdentity)_principal.Identity);

                materialRequest.MailUsers = new List <MailUserDetails>();
                if (materialRequestViewModel.MailUsers != null && materialRequestViewModel.MailUsers.Any())
                {
                    materialRequest.MailUsers = materialRequestViewModel.MailUsers.Select(user =>
                    {
                        var mailUser = new MailUserDetails();
                        mailUser.MapFromViewModel(user);
                        return(mailUser);
                    }).ToList();
                }

                if (!string.IsNullOrEmpty(materialRequestViewModel.RegardingId))
                {
                    materialRequest.RegardingId = ObjectId.Parse(materialRequestViewModel.RegardingId);
                }
                _requestRepository.InsertOne(materialRequest);

                if (fileList != null && fileList.Any())
                {
                    materialRequest.Files = fileList.Select(fileViewModel =>
                    {
                        var file = new File();
                        file.MapFromViewModel(fileViewModel, (ClaimsIdentity)_principal.Identity);
                        _fileRepository.InsertOne(file);
                        return(file.FileId);
                    }).ToList();
                }

                var updateDefinition = Builders <Request> .Update.Set(t => t.Files, materialRequest.Files);

                _requestRepository.UpdateOne(t => t.RequestId.Equals(materialRequest.RequestId), updateDefinition);

                if (materialRequest.Files != null && materialRequest.Files.Any())
                {
                    materialRequestViewModel.Files = new List <string>();
                    materialRequest.Files.ForEach(x => materialRequestViewModel.Files.Add(x.ToString()));
                }
                result.Body    = materialRequestViewModel.MapFromModel(materialRequest);
                result.Message = RequestNotification.Created;
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                result.Status  = Status.Fail;
            }
            return(result);
        }