public async Task <IActionResult> OnGet() { Guid?inquiryResultId = Session.Get(HttpContext.Session, Session.Key.InquiryResult); if (!inquiryResultId.HasValue) { return(BadRequest("InquiryResult couldn't be located.")); } DataModel dataInquiry = await Data.Inquiry.Item(inquiryResultId.Value); ClientModel clientModel = await Data.Client.Item(dataInquiry.ClientId, inquiryResultId); if (clientModel == null) { return(NotFound()); } InquiryItem = new Model { Name = clientModel.Name, EmailAddress = clientModel.EmailAddress, Message = dataInquiry.Message, SubjectMatter = dataInquiry.SubjectMatter, TranslationDirection = dataInquiry.TranslationDirection, TranslationType = dataInquiry.TranslationType, WordCount = dataInquiry.WordCount, Uploads = clientModel.Uploads.Select(x => x.OriginalFilename).ToList() }; if (InquiryItem == null) { return(BadRequest("InquiryItem couldn't be located.")); } Item = await new Base().Get(SiteSettings, Data.Area.Root, "InquiryResult"); return(Item == null?NotFound() : (IActionResult)Page()); }
private static Models.ProfessionalTranslator.Net.Log.Inquiry Item(Tables.Log.Inquiry inputItem) { if (inputItem == null) { return(null); } var output = new Models.ProfessionalTranslator.Net.Log.Inquiry { Id = inputItem.Id, ClientId = inputItem.ClientId, TranslationType = inputItem.TranslationType, TranslationDirection = inputItem.TranslationDirection, SubjectMatter = inputItem.SubjectMatter, WordCount = inputItem.WordCount, Message = inputItem.Message, DateCreated = inputItem.DateCreated }; return(output); }
private static Tables.Log.Inquiry Convert(Models.ProfessionalTranslator.Net.Log.Inquiry inputItem, Guid siteId) { if (inputItem == null) { return(null); } var output = new Tables.Log.Inquiry { Id = inputItem.Id, SiteId = siteId, ClientId = inputItem.ClientId, TranslationType = inputItem.TranslationType, TranslationDirection = inputItem.TranslationDirection, SubjectMatter = inputItem.SubjectMatter, WordCount = inputItem.WordCount, Message = inputItem.Message, DateCreated = inputItem.DateCreated ?? DateTime.Now }; return(output); }
public async Task <ActionResult> OnPostSend() { Result result; try { var stream = new MemoryStream(); await Request.Body.CopyToAsync(stream); stream.Position = 0; using var reader = new StreamReader(stream); string requestBody = await reader.ReadToEndAsync(); if (requestBody.Length <= 0) { throw new IndexOutOfRangeException("requestBody is empty."); } var obj = JsonConvert.DeserializeObject <Model>(requestBody); if (obj == null) { throw new NullReferenceException("Model could not be derived from JSON object."); } string messageHtml = obj.Message.Replace(Environment.NewLine, "<br/></br/>"); obj.Message = messageHtml; var dbClientModel = Session.Json.GetObject <ClientModel>(HttpContext.Session, Session.Key.ClientDataModel); dbClientModel.Name = obj.Name; result = await Client.Save(SiteSettings.Site, dbClientModel); if (result.Status == ResultStatus.Failed) { return(new JsonResult(result)); } var dataModel = new DataModel { ClientId = dbClientModel.Id, TranslationDirection = obj.TranslationDirection, TranslationType = obj.TranslationType, SubjectMatter = obj.SubjectMatter, WordCount = obj.WordCount, Message = messageHtml, ClientUploads = dbClientModel.Uploads, DateCreated = DateTime.Now, Id = Guid.NewGuid() }; result = await Data.Save(SiteSettings.Site, dataModel, dbClientModel); if (result.Status == ResultStatus.Succeeded) { result.Messages = new List <string> { "Message saved." }; } var body = new StringBuilder(); body.Append("<b>Name:</b> " + obj.Name); body.Append("<br/>"); body.Append("<b>Email Address:</b> " + obj.EmailAddress); body.Append("<br/>"); body.Append("<b>Subject Matter:</b> " + obj.SubjectMatter); body.Append("<br/>"); body.Append("<b>Translation Type:</b> " + obj.TranslationType); body.Append("<br/>"); body.Append("<b>Translation Direction:</b> " + obj.TranslationDirection); body.Append("<br/>"); body.Append("<b>Word Count:</b> " + $"{obj.WordCount:n0}"); body.Append("<br/>"); body.Append("<b>Message:</b>"); body.Append("<br/><br />"); body.Append(messageHtml); body.Append("<br/><br />"); if (dbClientModel.Uploads.Count > 0) { body.Append("The following files were uploaded:"); body.Append("<br />"); foreach (UploadModel uploadedFile in dbClientModel.Uploads) { body.Append(uploadedFile.OriginalFilename); body.Append("<br />"); } body.Append("<br/><br />"); } Session.Set <Guid>(HttpContext.Session, Session.Key.InquiryResult, result.ReturnId); var toList = new List <MailAddress> { new MailAddress(SiteSettings.DefaultTo, SiteSettings.DefaultToDisplayName), new MailAddress(obj.EmailAddress, obj.Name) }; var replyToList = new List <MailAddress> { new MailAddress(obj.EmailAddress, obj.Name) }; Smtp.SendMail(SiteSettings, replyToList, toList, new List <MailAddress>(), new List <MailAddress>(), "Translation Inquiry", body.ToString(), Smtp.BodyType.Html, Smtp.SslSetting.Off); } catch (Exception ex) { result = new Result(ResultStatus.Failed, ex.Message, Guid.Empty); } return(new JsonResult(result)); }
/// <summary> /// Saves inquiry and client. /// </summary> /// <instructions> /// Set inputItem.Id to null when creating a new object. /// </instructions> /// <param name="site">Name of site for image.</param> /// <param name="inputItem">Inquiry object.</param> /// /// <param name="clientItem">Client to be associated with this inquiry.</param> /// <returns>Returns save status and messages. If successful, returns an identifier via ReturnId.</returns> public static async Task <Result> Save(string site, Models.ProfessionalTranslator.Net.Log.Inquiry inputItem, models.Client clientItem) { var saveStatus = ResultStatus.Undetermined; var messages = new List <string>(); if (inputItem == null) { return(new Result(ResultStatus.Failed, "Inquiry cannot be null.")); } Tables.dbo.Site siteItem = await dboDbRead.Site.Item(site); if (siteItem == null) { return(new Result(ResultStatus.Failed, "No site was found with that name.")); } Rules.StringRequiredMaxLength(inputItem.TranslationType, "Translation Type", 25, ref messages); Rules.StringRequiredMaxLength(inputItem.TranslationDirection, "Translation Direction", 25, ref messages); Rules.StringRequiredMaxLength(inputItem.SubjectMatter, "SubjectMatter", 50, ref messages); Rules.MinIntValue(inputItem.WordCount, "Word Count", 1, ref messages); Rules.StringRequired(inputItem.Message, "Message", ref messages); if (messages.Any()) { return(new Result(ResultStatus.Failed, messages)); } Tables.Log.Inquiry convertedInquiry = Convert(inputItem, siteItem.Id); if (convertedInquiry == null) { return(new Result(ResultStatus.Failed, "Could not convert Inquiry model to table.")); } Guid returnId = convertedInquiry.Id; Result saveInquiryResult = await dbWrite.Item(site, convertedInquiry); if (saveInquiryResult.Status == ResultStatus.PartialSuccess || saveInquiryResult.Status == ResultStatus.Succeeded) { saveInquiryResult.ReturnId = returnId; } else { saveStatus = saveInquiryResult.Status; } if (saveStatus == ResultStatus.Undetermined) { foreach (Models.ProfessionalTranslator.Net.Upload.Client uploads in clientItem.Uploads) { Result uploadResult = await ClientInquiry.Item(uploads.Id, returnId); if (uploadResult.Status != ResultStatus.Failed) { continue; } saveStatus = ResultStatus.Failed; messages.AddRange(uploadResult.Messages); } } if (saveStatus == ResultStatus.Undetermined) { saveStatus = ResultStatus.Succeeded; } return(new Result(saveStatus, messages, returnId)); }