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());
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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));
        }
示例#5
0
        /// <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));
        }