using Microsoft.AspNetCore.Components; using System.ComponentModel.DataAnnotations; using Telerik.Blazor; using Telerik.Blazor.Components; using Telerik.SvgIcons; using kmCommonLibsCore; using System.Net.Http; using System.Text.Json; using Microsoft.Extensions.Options; using SummerBestWebForm2.AppState; using SummerBestWebForm2.ClassObj; namespace SummerBestWebForm2.Components.Pages; public partial class Home { [CascadingParameter] public CascadingAppState appState { get; set; } = default!; //[Inject] IPAddressService IpAddressService { get; set; } = default!; async Task OnFinishHandler() //private void SaveIt() { using (var em = new kmCommonLibsCore.Emails() { HandleOptOuts = false, SendMethod = enuSendMethod.OnsiteServer }) { // Parsing the submitted form to pull the relevant information var cardType = isPostcard ? "Postcard" : "Plastic Card"; var cardDesign = string.Empty; if (designOne) cardDesign = "A"; else if (designTwo) cardDesign = "B"; else if (designThree) cardDesign = "C"; else if (designCustom) cardDesign = "CUSTOM"; // Postcard or Plastic specific options var customizationInfo = string.Empty; if (isPostcard) { var verseChoice = string.Empty; var sigChoice = string.Empty; if (verseOne) verseChoice = "1"; else if (verseTwo) verseChoice = "2"; else if (verseThree) verseChoice = "3"; if (sigOne) sigChoice = string.Format("Option D - From Your Friends At:
{0}
{1}", locationInfo.LocationName, locationInfo.PhoneNumber); else if (sigTwo) sigChoice = string.Format("Option E - Name: {0}
Title: {1}
Phone: {2}", customName, customTitle, customPhone); else if (sigThree) sigChoice = string.Format("Option F - {0}", customSignature); // combine these into customizationInfo customizationInfo = string.Format("Verse:{0}Signature:{1}", verseChoice, sigChoice); } else // isPlasticCard { var smallOfferList = new List(); var bigOfferList = new List(); for (int index = 0; index < smallOffers.Length; index++) { if (smallOffers[index]) smallOfferList.Add(string.Format("B{0}", index)); } for (int index = 0; index < bigOffers.Length; index++) { if (bigOffers[index]) bigOfferList.Add(string.Format("A{0}", index + 1)); } customizationInfo = string.Format("BIG Offers:{0}SMALL Offers:{1}", string.Join(", ", bigOfferList), string.Join(", ", smallOfferList)); } // Logo info var logos = new List(); if (goodyear) logos.Add("Goodyear"); if (michelin) logos.Add("Michelin"); if (custom) logos.Add("Custom"); if (logos.Count == 0) logos.Add("NONE"); // Payment info string paymentMethod = string.Empty; if (ccOnFile) paymentMethod = "Credit Card on File"; else if (callWithInfo) paymentMethod = "Call With Payment Info"; else if (check) paymentMethod = "Check"; // Formulating the email to send em.Subject = "SBC Order Form Submission"; em.AddAddress(enuAddressType.From, "support@keymotive.us", "Summer Growth Enrollment"); em.AddAddress(enuAddressType.To, "support@keymotive.us", "KeyMotive Support"); var targetAudience = string.Format("Audience:{0}", string.IsNullOrWhiteSpace(audienceType) ? "NOTHING!" : audienceType); var locInfoString = string.Format("Location Name:{0}" + "Manager:{1}" + "Address:{2}" + "City:{3}" + "State:{4}" + "Zip:{5}" + "Phone Number:{6}" + "Contact Name:{7}" + "Contact Phone:{8}" + "Contact Email:{9}", locationInfo.LocationName, locationInfo.Manager, locationInfo.Address, locationInfo.City, locationInfo.State, locationInfo.Zip, locationInfo.PhoneNumber, locationInfo.ContactName, locationInfo.ContactPhone, locationInfo.ContactEmail); var cardInfoString = string.Format("Card type:{0}, Design {1}" + "Customization Options:" + "{2}" + "Logos:{3}", cardType, cardDesign, customizationInfo, string.Join(", ", logos)); if (int.TryParse(requestedQuantity, out _)) requestedQuantity = string.Format("{0:#,##0}", int.Parse(requestedQuantity)); var paymentString = string.Format("Payment Method:{0}" + "Requested Quantity:{1}" + "Additional Comments:{2}", paymentMethod, requestedQuantity, additionalComments); var ipString = string.Format("IP Address{0}", string.IsNullOrWhiteSpace(IpAddressService.RemoteIpAddress.ToString()) ? "NONE" : IpAddressService.RemoteIpAddress.ToString()); em.HtmlBody = "
You have a new enrollment:

" + targetAudience + locInfoString + cardInfoString + paymentString + ipString + "
"; try { em.Send(); await Console.Out.WriteLineAsync("Done sending"); } catch (Exception e) { await Console.Out.WriteLineAsync("ERROR: " + e.Message); } ShowWizard = false; await Dialogs.AlertAsync("The Registration was submitted successfully", "Done"); } } #region "User Selections - Model" public bool? IsAudienceChoiceValid { get; set; } = false; public bool? IsCardChoiceValid { get; set; } = false; public bool? IsDesignChoiceValid { get; set; } = false; [CascadingParameter] public DialogFactory Dialogs { get; set; } = default!; public bool ShowWizard { get; set; } = true; public int Value { get; set; } = 0; //public TelerikForm RegisterForm { get; set; } public User UserModel { get; set; } = new User(); public TelerikForm IntroForm { get; set; } = new(); // Variables for selecting between plastic and post public TelerikForm cardTypeForm { get; set; } = new(); public CardType cardType { get; set; } = new CardType(); public bool isPlasticCard { get; set; } = true; public bool isPostcard { get; set; } = false; public string audienceType { get; set; } = string.Empty; public List audiences { get; set; } = new List { new AudienceType() {AudienceDescription="Send to my BEST CUSTOMERS"}, new AudienceType() {AudienceDescription="Send to Great Prospects as well as Customers who haven't been in during the past 8 months"} }; // Variables for selecting specific design public TelerikForm customizationForm { get; set; } = new(); public CustomizationOptions custOptions { get; set; } = new CustomizationOptions(); public bool designOne = true; public bool designTwo = false; public bool designThree = false; public bool designCustom = false; // Variables for selecting messaging (postcards only) public TelerikForm messagingForm { get; set; } = new(); public MessagingOptions messagingOptions { get; set; } = new MessagingOptions(); public bool verseOne = true; public bool verseTwo = false; public bool verseThree = false; public bool sigOne = true; public bool sigTwo = false; public bool sigThree = false; public string customName = string.Empty; // For sig two public string customTitle = string.Empty; public string customPhone = string.Empty; public string customSignature = string.Empty; // For sig three public bool isMessagingValid = false; // Variables for logo selection public TelerikForm logoForm { get; set; } = new(); public LogoOptions logoOptions { get; set; } = new LogoOptions(); public bool goodyear = false; public bool michelin = false; public bool custom = false; public bool isLogoValid = false; // Variables for offer selection (plastic cards only) public TelerikForm offerForm { get; set; } = new(); public OfferOptions offerOptions { get; set; } = new OfferOptions(); public bool[] bigOffers = new bool[6]; public bool[] smallOffers = new bool[12]; public bool isOfferSelectionValid = false; // Location information public TelerikForm locationForm { get; set; } = new(); public LocationInfo locationInfo { get; set; } = new LocationInfo(); public string locationName { get; set; } = string.Empty; public string manager { get; set; } = string.Empty; public string address { get; set; } = string.Empty; public string city { get; set; } = string.Empty; public string state { get; set; } = string.Empty; public string zip { get; set; } = string.Empty; public string phoneNumber { get; set; } = string.Empty; public string contactName { get; set; } = string.Empty; public string contactPhone { get; set; } = string.Empty; public string contactEmail { get; set; } = string.Empty; public bool isLocationInfoValid { get; set; } = false; // Payment information public TelerikForm paymentForm { get; set; } = new(); public PaymentInfo paymentInfo { get; set; } = new PaymentInfo(); public string requestedQuantity = string.Empty; public string additionalComments = string.Empty; public bool ccOnFile = true; public bool callWithInfo = false; public bool check = false; #endregion public void ToggleCardType() { isPlasticCard = !isPlasticCard; isPostcard = !isPostcard; } public void OnAudienceChoiceStepChange(WizardStepChangeEventArgs args) { IsAudienceChoiceValid = !string.IsNullOrWhiteSpace(audienceType); } public void OnCardChoiceStepChange(WizardStepChangeEventArgs args) { IsCardChoiceValid = true; // This is forced to be true but required nonetheless } public void OnDesignStepChange(WizardStepChangeEventArgs args) { IsDesignChoiceValid = true; // Same as card choice } public void OnMessagingStepChange(WizardStepChangeEventArgs args) { isMessagingValid = true; } public void OnLogoStepChange(WizardStepChangeEventArgs arg) { isLogoValid = true; } public async void OnOfferStepChange(WizardStepChangeEventArgs args) { if (isPostcard) { isOfferSelectionValid = true; } else { int bigOfferCount = 0; foreach (bool selection in bigOffers) { if (selection) bigOfferCount++; } int smallOfferCount = 0; foreach (bool selection in smallOffers) { if (selection) smallOfferCount++; } if (smallOfferCount == 4 && bigOfferCount == 2) isOfferSelectionValid = true; else isOfferSelectionValid = false; if (!isOfferSelectionValid) { args.IsCancelled = true; await Dialogs.AlertAsync("Please select the proper amount of offers.", "You cannot proceed"); } } } public async void OnLocationStepChange(WizardStepChangeEventArgs args) { isLocationInfoValid = !string.IsNullOrWhiteSpace(locationInfo.ContactEmail) && !string.IsNullOrWhiteSpace(locationInfo.ContactPhone) && !string.IsNullOrWhiteSpace(locationInfo.ContactName) && !string.IsNullOrWhiteSpace(locationInfo.City) && !string.IsNullOrWhiteSpace(locationInfo.State) && !string.IsNullOrWhiteSpace(locationInfo.Zip) && !string.IsNullOrWhiteSpace(locationInfo.PhoneNumber) && !string.IsNullOrWhiteSpace(locationInfo.LocationName) && !string.IsNullOrWhiteSpace(locationInfo.Address) && !string.IsNullOrWhiteSpace(locationInfo.Manager); if (!isLocationInfoValid) { args.IsCancelled = true; await Dialogs.AlertAsync("Please fill out all required fields.", "You cannot proceed"); } } #region "Models and Such" public class CardType { [Required] public string cardChoice { get; set; } = string.Empty; } public class CustomizationOptions { [Required] public string custOption { get; set; } = string.Empty; } public class MessagingOptions { public string verse { get; set; } = string.Empty; public string signature { get; set; } = string.Empty; } public class LogoOptions { public string option { get; set; } = string.Empty; } public class OfferOptions { public string option { get; set; } = string.Empty; } public class LocationInfo { [Required, Display(Name = "Location Name")] public string LocationName { get; set; } = string.Empty; [Required, Display(Name = "Store Manager")] public string Manager { get; set; } = string.Empty; [Required] public string Address { get; set; } = string.Empty; [Required] public string City { get; set; } = string.Empty; [Required] public string State { get; set; } = string.Empty; [Required] public string Zip { get; set; } = string.Empty; [Required, Display(Name = "Phone Number")] public string PhoneNumber { get; set; } = string.Empty; [Required, Display(Name = "Contact Name")] public string ContactName { get; set; } = string.Empty; [Required, Display(Name = "Contact Phone")] public string ContactPhone { get; set; } = string.Empty; [Required, Display(Name = "Your Email Address")] public string ContactEmail { get; set; } = string.Empty; } public class PaymentInfo { public string info { get; set; } = string.Empty; } public class AudienceType { public string AudienceDescription { get; set; } = string.Empty; } #endregion }