/// <summary> /// Insert BOM Request /// </summary> /// <param name="requestViewModel"></param> /// <returns></returns> public IResult InsertBOMRequest(List <FileDetails> fileList, BomRequestViewModel bomRequestViewModel) { bomRequestViewModel.RequestId = null; var result = new Result { Operation = Operation.Create, Status = Status.Success }; try { var bomRequest = new Request(); bomRequest.MapFromViewModel(bomRequestViewModel, (ClaimsIdentity)_principal.Identity); bomRequest.MailUsers = new List <MailUserDetails>(); if (bomRequestViewModel.MailUsers != null && bomRequestViewModel.MailUsers.Any()) { bomRequest.MailUsers = bomRequestViewModel.MailUsers.Select(user => { var mailUser = new MailUserDetails(); mailUser.MapFromViewModel(user); return(mailUser); }).ToList(); } if (bomRequestViewModel.BomRequestNodes != null && bomRequestViewModel.BomRequestNodes.Any()) { bomRequest.BomRequestNodes = bomRequestViewModel.BomRequestNodes.Select(t => { var bomNode = new BomRequestNode(); bomNode.MapFromViewModel(t); return(bomNode); }).ToList(); } if (!string.IsNullOrEmpty(bomRequestViewModel.RegardingId)) { bomRequest.RegardingId = ObjectId.Parse(bomRequestViewModel.RegardingId); } _requestRepository.InsertOne(bomRequest); if (fileList != null && fileList.Any()) { bomRequest.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, bomRequest.Files); _requestRepository.UpdateOne(t => t.RequestId.Equals(bomRequest.RequestId), updateDefinition); if (bomRequest.Files != null && bomRequest.Files.Any()) { bomRequestViewModel.Files = new List <string>(); bomRequest.Files.ForEach(x => bomRequestViewModel.Files.Add(x.ToString())); } result.Body = bomRequestViewModel.MapFromModel(bomRequest); result.Message = RequestNotification.Created; } catch (Exception e) { result.Message = e.Message; result.Status = Status.Fail; } return(result); }