2025-09-18 12:54:02 -04:00
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 WinterBestCustomerWebForm.AppState ;
using WinterBestCustomerWebForm.ClassObj ;
namespace WinterBestCustomerWebForm.Components.Pages ;
public partial class Home
{
[CascadingParameter]
public CascadingAppState appState { 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" : "Greeting Card" ;
var cardDesign = string . Empty ;
if ( designOne )
cardDesign = isGreetingCard ? "A" : "E" ;
else if ( designTwo )
cardDesign = isGreetingCard ? "B" : "F" ;
else if ( designThree )
cardDesign = isGreetingCard ? "C" : "G" ;
else if ( designFour )
cardDesign = isGreetingCard ? "D" : "H" ;
else if ( designCustom )
cardDesign = "CUSTOM" ;
// Customizations
var greetingChoice = string . Empty ;
var verseChoice = string . Empty ;
var sigChoice = string . Empty ;
if ( greetingOne )
greetingChoice = "Happy Holidays" ;
else if ( greetingTwo )
greetingChoice = "Merry Christmas" ;
else if ( greetingThree )
greetingChoice = "Season's Greetings" ;
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:<br />{0}<br />{1}" , locationInfo . LocationName , locationInfo . PhoneNumber ) ;
else if ( sigTwo )
sigChoice = string . Format ( "Option E - Name: {0}<br />Title: {1}<br />Phone: {2}" , customName , customTitle , customPhone ) ;
else if ( sigThree )
sigChoice = string . Format ( "Option F - {0}" , customSignature ) ;
// combine these into customizationInfo
var customizationInfo = string . Format ( "<tr><td>Greeting:</td><td>{0}</td></tr><tr><td>Verse:</td><td>{1}</td></tr><tr><td>Signature:</td><td>{2}</td></tr>" , greetingChoice , verseChoice , sigChoice ) ;
// Logo info
var logos = new List < string > ( ) ;
if ( logoOnCard )
logos . Add ( "Logo on Card" ) ;
if ( isGreetingCard & & logoOnEnvelope )
logos . Add ( "Logo on Envelope" ) ;
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 = "WBC Order Form Submission" ;
em . AddAddress ( enuAddressType . From , "support@keymotive.us" , "Winter Program Enrollment" ) ;
2025-09-18 12:55:46 -04:00
em . AddAddress ( enuAddressType . To , "support@keymotive.net" , "KeyMotive Support" ) ;
em . AddAddress ( enuAddressType . To , "jondeck@keymotive.net" , "Jon Deck" ) ;
em . AddAddress ( enuAddressType . To , "amijat@keymotive.net" , "Andrea Mijat" ) ;
2025-09-18 12:54:02 -04:00
var locInfoString = string . Format ( "<tr style='padding-top:14px'><td>Location Name:</td><td>{0}</td></tr>" +
"<tr><td>Manager:</td><td>{1}</td></tr>" +
"<tr><td>Address:</td><td>{2}</td></tr>" +
"<tr><td>City:</td><td>{3}</td></tr>" +
"<tr><td>State:</td><td>{4}</td></tr>" +
"<tr><td>Zip:</td><td>{5}</td></tr>" +
"<tr style='padding-top:14px'><td>Phone Number:</td><td>{6}</td></tr>" +
"<tr><td>Contact Name:</td><td>{7}</td></tr>" +
"<tr><td>Contact Phone:</td><td>{8}</td></tr>" +
"<tr><td>Contact Email:</td><td>{9}</td></tr>" ,
locationInfo . LocationName , locationInfo . Manager , locationInfo . Address , locationInfo . City , locationInfo . State ,
locationInfo . Zip , locationInfo . PhoneNumber , locationInfo . ContactName ,
locationInfo . ContactPhone , locationInfo . ContactEmail ) ;
var cardInfoString = string . Format ( "<tr><td>Card type:</td><td>{0}, Design {1}</td></tr>" +
"<tr style='padding-top:14px'><td colspan='2'>Customization Options:</td></tr>" +
"{2}" +
"<tr><td>Logos:</td><td>{3}</td></tr>" ,
cardType , cardDesign , customizationInfo , string . Join ( ", " , logos ) ) ;
if ( int . TryParse ( requestedQuantity , out _ ) )
requestedQuantity = string . Format ( "{0:#,##0}" , int . Parse ( requestedQuantity ) ) ;
var paymentString = string . Format ( "<tr><td>Payment Method:</td><td>{0}</td></tr>" +
"<tr style='padding-top:14px'><td>Requested Quantity:</td><td>{1}</td></tr>" +
"<tr><td>Additional Comments:</td><td>{2}</td></tr>" , paymentMethod , requestedQuantity , additionalComments ) ;
var ipString = string . Format ( "<tr style='padding-top:20px'><td>IP Address</td><td>{0}</td></tr>" ,
string . IsNullOrWhiteSpace ( IpAddressService . RemoteIpAddress . ToString ( ) ) ? "NONE" : IpAddressService . RemoteIpAddress . ToString ( ) ) ;
em . HtmlBody = "<div style='font-size:1.05em'><b>You have a new enrollment:</b><br /><br /><table style='font-size:1.05em;display:block;font-family: monospace;'>" +
locInfoString + cardInfoString + paymentString + ipString + "</table></div>" ;
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 ; } = true ;
public bool? IsCardChoiceValid { get ; set ; } = false ;
public bool? IsDesignChoiceValid { get ; set ; } = false ;
[CascadingParameter]
public DialogFactory Dialogs { get ; set ; } = default ! ;
public bool ProgramClosed { get ; set ; } = false ;
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 isGreetingCard { get ; set ; } = true ;
public bool isPostcard { get ; set ; } = false ;
public string audienceType { get ; set ; } = string . Empty ;
public List < AudienceType > audiences { get ; set ; } = new List < AudienceType >
{
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 designFour = 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 greetingOne = true ;
public bool greetingTwo = false ;
public bool greetingThree = false ;
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 logoOnCard = true ;
public bool logoOnEnvelope = true ;
public bool isLogoValid = true ;
// 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 ( )
{
isGreetingCard = ! isGreetingCard ;
isPostcard = ! isPostcard ;
}
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
}