Add attribute to button eg disable
@Sana.SubmitButton("Submit", "btn btn-big btnCreateNewAcc", htmlAttributes: new { @disabled = "disabled" })
Checkbox must true
[MustBeTrue(ErrorMessage = "Register_IsAgreedMessage")]
[Display(Name = "Register_IsConfirm")]
[Required]
[UIHint("Register_IsConfirm")]
public virtual bool IsAgreed { get; set; }
[Display(Name = "Register_IsConfirm")]
[Required]
[UIHint("Register_IsConfirm")]
public virtual bool IsAgreed { get; set; }
How to Create New Mail Template
1. Issue :Ravensburger [49417] 3.5. ORDER FAILURE – E-MAIL
2. Issue: Versalert 3.7. PRODUCT LIST/DETAIL PAGE – REQUEST TO ADD/DELETE ITEM FROM FIXED ORDER LIST
Ravensburger [49417] 3.5. ORDER FAILURE – E-MAIL
1. create a Template Name
public virtual string GetOrderFailedMailTemplateName() { return "OrderFail"; }
2.Get Email Address and Create Order Mail Method on ExtendedCheckoutApi.
/// <summary> /// [49417] 3.5. ORDER FAILURE – E-MAIL /// This method will send the Order Failed Mail /// </summary> /// <param name="order">order</param> /// <param name="basket">basket</param> /// <param name="errorMessage">error message</param> private void SendFailedOrderMail(IOrder order,IBasket basket, string errorMessage) { //Set Order Total values from Basket Values. SetOrderTotalPrice(order, basket); //Get Admin Setting Order Failed Email address var settings = (CommerceFrameworkBase.ShopSettings.GetSettings(SettingsKeys.General)); var ws = ObjectFactory.Create<Sana.Commerce.Shop.IWebsiteSettings>(); ws.Initialize(settings); var list = ((ExtendedWebsiteSettings)ws).OrderFailedEmailAddress.Split(';'); if (list != null) { List<MailAddress> addressList = new List<MailAddress>(); foreach (var item in list) { if (!string.IsNullOrEmpty(item)) { addressList.Add(new MailAddress(item)); } } ((Sana.Commerce.Order.Order)order).OrderFailedErrorMessage = errorMessage; var templateName = GetOrderFailedMailTemplateName(); var mail = ServiceManager.GetInstance<ExtendedOrderConfirmationHelper>().GetOrderFailureMail(templateName, order, null, addressList); ShopApi.Mail.Send(mail); } }
3.
ExtendedOrderConfirmationHelper > GetOrderFailureMail
Email creation has done from here.(set order template, Replace tags,BCC,CC, receipts )
public virtual MailMessage GetOrderFailureMail(string templateName, IOrder order, NameValueCollection additionalReplaceTags = null, IList<MailAddress> recipients = null) { var shopContext = ShopContext.GetCurrent(); var settings = shopContext.Settings; var fromAddress = new MailAddress(settings.FromEmailAddress); var replaceTags = GetFailOrderReplaceTags(shopContext, order); if (additionalReplaceTags != null) { additionalReplaceTags.AllKeys.Each(tagName => replaceTags.Add(tagName, additionalReplaceTags[tagName])); } var additionalData = new Dictionary<string, object>(); additionalData.Add("OrderDetails", CreateOrderDetailsModel(shopContext, order)); if (recipients == null) { recipients = GetEmailAddresses(shopContext, order); } var mail = ShopApi.Mail.Render(fromAddress, recipients, templateName, replaceTags, additionalData); if (settings.BccEmailAddresses != null) { settings.BccEmailAddresses.Each(bcc => mail.Bcc.Add(new MailAddress(bcc))); } return mail; }
4.
ExtendedOrderConfirmationHelper > GetReplaceTags()
protected virtual NameValueCollection GetFailOrderReplaceTags(ShopContext shopContext, IOrder order) { var currentUserAccount = CommerceFramework.ShopAccounts.GetShopAccount(shopContext.ShopAccount.Id, true); var customer = CommerceFrameworkBase.Customers.GetCustomer(shopContext.CommerceContext.AccountId); var replaceTags = base.GetReplaceTags(shopContext, order); replaceTags.Add("CUSTOMER_NAME_LABEL", CommerceFrameworkBase.SanaTexts.GetSanaText("CustomerNameLabel", "Customer Name")); replaceTags.Add("CUSTOMER_ID_LABEL", CommerceFrameworkBase.SanaTexts.GetSanaText("CustomerIdLabel", "Customer Id")); replaceTags.Add("SHOPACCOUNT_EMAIL_LABEL", CommerceFrameworkBase.SanaTexts.GetSanaText("ShopAccountEmailLabel", "Shop Account Email")); replaceTags.Add("SHOPACCOUNT_NAME_LABEL", CommerceFrameworkBase.SanaTexts.GetSanaText("ShopAccountNameLabel", "Shop Account")); replaceTags.Add("CUSTOMER_NAME", customer.Name); replaceTags.Add("CUSTOMER_ID", customer.Id); replaceTags.Add("SHOPACCOUNT_EMAIL", shopContext.ShopAccount.Email); replaceTags.Add("ORDER_ERROR_MESSAGE", ((Sana.Commerce.Order.Order)order).OrderFailedErrorMessage); return replaceTags; }
5. Add new email Template
~/Views/Default/MailTemplates/OrderFail.cshtml
6.Update Language packs Mail templates
\Ravensburger\@data\packages\LanguagePack_de-DE.9.3.5.0\MailTemplates
2. Versalert 3.7. PRODUCT LIST/DETAIL PAGE – REQUEST TO ADD/DELETE ITEM FROM FIXED ORDER LIST
ExtendedProductListController > SendRequestToAddToFixedOrderList
3.Bachofen : QuoteEmailAddress
If Need to Create Admin setting also :- search :
Add Admin Setting , Add new Email Section to Admin
add field to ExtendedStoreInfoModel ,ExtendedWebsiteSettings
Get Data to View without using passing through model , Pass Data to View
You can access get
Value to view from Managers
Eg : Order Manager
Project : Divercy :-
page :- _MonthlyBuddgetAllowance.cshtml , _FinancialOverview.cshtml.
//53103 [Functional] [Diversey] 3.5. CURRENT MONTH BUDGET SPEND DETAILS ON THE CHILD ACCOUNT MANAGEMENT PAGE
expenditureInfo =
CommerceFramework.Orders.GetExpenditureInfoValues(Shop.ShopAccount.ReferenceId);
Or
expenditureInfo =
((ExtendedOrderManager)CommerceFrameworkBase.Orders).GetExpenditureInfoValues(Shop.ShopAccount.ReferenceId);
Do not call
Controller directly. From the view.
Add Admin Setting , Add new Email Section to Admin
issue : https://sanacommerce.visualstudio.com/Sana%20Projects/_workitems/edit/49417/?triage=true
Ravensburger AG
Ticket 49417: 3.5. ORDER FAILURE – E-MAIL
create ExtendedStoreInfoModel model
Add property to Web settings
public class ExtendedWebsiteSettings : WebsiteSettings
{
/// <summary>
/// [49417] 3.5. ORDER FAILURE – E-MAIL
/// Gets or sets the 'Orde rFailed Email Address' email address.
/// </summary>
[DataMember]
public virtual string OrderFailedEmailAddress
{
get { return Values.GetValue<string>(Sana.Commerce.Customization.Constants.OrderFailedEmailAddress, "scdemo@sana-commerce.com"); }
set { Values[Sana.Commerce.Customization.Constants.OrderFailedEmailAddress] = value; }
}
}
Sana Text ,Rich Text, Simple Text
use Sana Text in C# code:
CommerceFrameworkBase.SanaTexts.GetSanaText("ShopAccountNameLabel", "Shop Account"));
use Static class
Sana Text in Html
@Sana.SimpleText("ViewOrderDetails")
Rich Text
@Sana.RichText("YouAreCurrentlyEditingOrder")
CommerceFrameworkBase.SanaTexts.GetSanaText("ShopAccountNameLabel", "Shop Account"));
use Static class
ExtendedSanaTextKeys.CutOffTimePassed public static class ExtendedSanaTextKeys { public const string CutOffTimePassed = "Validation_CutOff"; }
and Add text to SanaText.resx
<data name="Validation_CutOff" xml:space="preserve"> <value>Requested delivery date is invalid or the cut off time has been missed.</value> </data>
Sana Text in Html
@Sana.SimpleText("ViewOrderDetails")
Rich Text
@Sana.RichText("YouAreCurrentlyEditingOrder")
use with replace tags.
@Sana.SimpleText("YourFirstPossibleDeliveryDate", "Your first possible delivery date is [FirstPossibleDeliveryDate]").iReplace("[FirstPossibleDeliveryDate]", nextDeleverydate.AsHtml(encode: true))
string message = CommerceFrameworkBase.SanaTexts.GetSanaText("CustomerSwitchMessage").Replace("[SubAccountEmailAddress]", currentShopAccount.Email)
.Replace("[CustomerAccountIDorigin]", currentShopAccount.ReferenceId)
.Replace("[CustomerAccountNameOrigin]", currentCustomer.Name)
.Replace("[CustomerAccountIDNew]", newCustomerId)
.Replace("[CustomerAccountNameNew]", newCustomerName);
One Page checkout , normal checkout
One Page Checkout :- Checkout control > index()
Normal Checkout : Checkout control > OrderOverview()
Normal Checkout : Checkout control > OrderOverview()
Subscribe to:
Posts (Atom)