Try your search with a different keyword or use * as a wildcard.
@using Nop.Core
@model CustomerInfoModel
@inject Nop.Core.IWebHelper webHelper
@{
Layout = "_ColumnsTwo";
//title
NopHtml.AddTitleParts(T("PageTitle.Account").Text);
//page class
NopHtml.AppendPageCssClassParts("html-account-page");
NopHtml.AppendPageCssClassParts("html-customer-info-page");
}
@section left
{
@await Component.InvokeAsync(typeof(CustomerNavigationViewComponent), new { selectedTabId = CustomerNavigationEnum.Info })
}
<div class="page account-page customer-info-page">
<div class="page-title">
<h1>@T("Account.MyAccount") - @T("Account.CustomerInfo")</h1>
</div>
<div class="page-body">
@await Component.InvokeAsync(typeof(WidgetViewComponent), new { widgetZone = PublicWidgetZones.CustomerInfoTop, additionalData = Model })
<form asp-route="@NopRouteNames.General.CUSTOMER_INFO" method="post">
<div asp-validation-summary="ModelOnly" class="message-error"></div>
<section class="fieldset">
<h2 class="title">
@T("Account.YourPersonalDetails")
</h2>
<div class="form-fields">
@if (Model.GenderEnabled)
{
<div class="inputs">
<label>@T("Account.Fields.Gender"):</label>
<div class="gender">
<span class="male">
<input type="radio" asp-for="Gender" value="M" checked="@(Model.Gender == "M")" id="gender-male" />
<label class="forcheckbox" for="gender-male">@T("Account.Fields.Gender.Male")</label>
</span>
<span class="female">
<input type="radio" asp-for="Gender" value="F" checked="@(Model.Gender == "F")" id="gender-female" />
<label class="forcheckbox" for="gender-female">@T("Account.Fields.Gender.Female")</label>
</span>
@if (Model.NeutralGenderEnabled)
{
<span class="Neutral">
<input type="radio" asp-for="Gender" value="N" checked="@(Model.Gender == "N")" id="gender-neutral" />
<label class="forcheckbox" for="gender-neutral">@T("Account.Fields.Gender.Neutral")</label>
</span>
}
</div>
</div>
}
@if (Model.FirstNameEnabled)
{
<div class="inputs">
<label asp-for="FirstName" asp-postfix=":"></label>
<input asp-for="FirstName" />
@if (Model.FirstNameRequired)
{
<nop-required />
}
<span asp-validation-for="FirstName"></span>
</div>
}
@if (Model.LastNameEnabled)
{
<div class="inputs">
<label asp-for="LastName" asp-postfix=":"></label>
<input asp-for="LastName" />
@if (Model.LastNameRequired)
{
<nop-required />
}
<span asp-validation-for="LastName"></span>
</div>
}
@if (Model.DateOfBirthEnabled)
{
<div class="inputs date-of-birth">
<label>@T("Account.Fields.DateOfBirth"):</label>
<nop-date-picker asp-day-name="@Html.NameFor(x => x.DateOfBirthDay)"
asp-month-name="@Html.NameFor(x => x.DateOfBirthMonth)"
asp-year-name="@Html.NameFor(x => x.DateOfBirthYear)"
asp-begin-year="@(DateTime.Now.AddYears(-110))"
asp-end-year="@(DateTime.UtcNow)"
asp-selected-date="@Model.ParseDateOfBirth()" />
@if (Model.DateOfBirthRequired)
{
<nop-required />
}
<span asp-validation-for="DateOfBirthDay"></span>
<span asp-validation-for="DateOfBirthMonth"></span>
<span asp-validation-for="DateOfBirthYear"></span>
</div>
}
<div class="inputs">
<label asp-for="Email" asp-postfix=":"></label>
<input asp-for="Email" />
<nop-required />
<span asp-validation-for="Email"></span>
</div>
@if (!string.IsNullOrEmpty(Model.EmailToRevalidate))
{
<div class="inputs">
<label asp-for="EmailToRevalidate"></label>
<span class="email-to-revalidate">@Model.EmailToRevalidate</span>
<span class="email-to-revalidate-note">
<em>@T("Account.Fields.EmailToRevalidate.Note")</em>
</span>
</div>
}
@if (Model.UsernamesEnabled)
{
if (Model.AllowUsersToChangeUsernames)
{
<div class="inputs">
<label asp-for="Username" asp-postfix=":"></label>
<input asp-for="Username" />
<nop-required />
<span asp-validation-for="Username"></span>
@if (Model.CheckUsernameAvailabilityEnabled)
{
@await Html.PartialAsync("_CheckUsernameAvailability")
}
</div>
}
else
{
<div class="inputs">
<label asp-for="Username" asp-postfix=":"></label>
<span class="readonly-username">@Model.Username</span>
</div>
}
}
</div>
</section>
@if (Model.CompanyEnabled || Model.DisplayVatNumber)
{
<section class="fieldset">
<h2 class="title">
@T("Account.CompanyDetails")
</h2>
<div class="form-fields">
@if (Model.CompanyEnabled)
{
<div class="inputs">
<label asp-for="Company" asp-postfix=":"></label>
<input asp-for="Company" />
@if (Model.CompanyRequired)
{
<nop-required />
}
<span asp-validation-for="Company"></span>
</div>
}
@if (Model.DisplayVatNumber)
{
<div class="inputs">
<label asp-for="VatNumber" asp-postfix=":"></label>
<input asp-for="VatNumber" />
@if (Model.VatNumberRequired)
{
<nop-required />
}
<span asp-validation-for="VatNumber"></span>
<span class="vat-status">@Model.VatNumberStatusNote</span>
<span class="vat-note">
<em>@T("Account.Fields.VatNumber.Note")</em>
</span>
</div>
}
</div>
</section>
}
@if (Model.StreetAddressEnabled ||
Model.StreetAddress2Enabled ||
Model.ZipPostalCodeEnabled ||
Model.CityEnabled ||
Model.CountyEnabled ||
Model.CountryEnabled)
{
<section class="fieldset">
<h2 class="title">
@T("Account.YourAddress")
</h2>
<div class="form-fields">
@if (Model.StreetAddressEnabled)
{
<div class="inputs">
<label asp-for="StreetAddress" asp-postfix=":"></label>
<input asp-for="StreetAddress" />
@if (Model.StreetAddressRequired)
{
<nop-required />
}
<span asp-validation-for="StreetAddress"></span>
</div>
}
@if (Model.StreetAddress2Enabled)
{
<div class="inputs">
<label asp-for="StreetAddress2" asp-postfix=":"></label>
<input asp-for="StreetAddress2" />
@if (Model.StreetAddress2Required)
{
<nop-required />
}
<span asp-validation-for="StreetAddress2"></span>
</div>
}
@if (Model.ZipPostalCodeEnabled)
{
<div class="inputs">
<label asp-for="ZipPostalCode" asp-postfix=":"></label>
<input asp-for="ZipPostalCode" />
@if (Model.ZipPostalCodeRequired)
{
<nop-required />
}
<span asp-validation-for="ZipPostalCode"></span>
</div>
}
@if (Model.CityEnabled)
{
<div class="inputs">
<label asp-for="City" asp-postfix=":"></label>
<input asp-for="City" />
@if (Model.CityRequired)
{
<nop-required />
}
<span asp-validation-for="City"></span>
</div>
}
@if (Model.CountyEnabled)
{
<div class="inputs">
<label asp-for="County" asp-postfix=":"></label>
<input asp-for="County" />
@if (Model.CountyRequired)
{
<nop-required />
}
<span asp-validation-for="County"></span>
</div>
}
@if (Model.CountryEnabled)
{
<div class="inputs">
<label asp-for="CountryId" asp-postfix=":"></label>
<select asp-for="CountryId" asp-items="Model.AvailableCountries"
data-trigger="country-select"
data-url="@(Url.RouteUrl(NopRouteNames.Ajax.GET_STATES_BY_COUNTRY_ID))"
data-stateprovince="#@Html.IdFor(model => model.StateProvinceId)"
data-loading="#states-loading-progress"></select>
@if (Model.CountryRequired)
{
<nop-required />
}
<span asp-validation-for="CountryId"></span>
</div>
}
@if (Model.CountryEnabled && Model.StateProvinceEnabled)
{
<div class="inputs">
<label asp-for="StateProvinceId" asp-postfix=":"></label>
<select asp-for="StateProvinceId" asp-items="Model.AvailableStates"></select>
@if (Model.StateProvinceRequired)
{
<nop-required />
}
<span id="states-loading-progress" style="display: none;" class="please-wait">@T("Common.Wait")</span>
<span asp-validation-for="StateProvinceId"></span>
</div>
}
</div>
</section>
}
@if (Model.PhoneEnabled || Model.FaxEnabled)
{
<section class="fieldset">
<h2 class="title">
@T("Account.YourContactInformation")
</h2>
<div class="form-fields">
@if (Model.PhoneEnabled)
{
<div class="inputs">
<label asp-for="Phone" asp-postfix=":"></label>
<input asp-for="Phone" />
@if (Model.PhoneRequired)
{
<nop-required />
}
<span asp-validation-for="Phone"></span>
</div>
}
@if (Model.FaxEnabled)
{
<div class="inputs">
<label asp-for="Fax" asp-postfix=":"></label>
<input asp-for="Fax" />
@if (Model.FaxRequired)
{
<nop-required />
}
<span asp-validation-for="Fax"></span>
</div>
}
</div>
</section>
}
@if (Model.NewsletterEnabled && Model.NewsLetterSubscriptions.Count > 0)
{
<section class="fieldset">
<h2 class="title">
@T("Account.SubscribeToNewsletter")
</h2>
<div class="form-fields">
<div class="inputs">
<div class="attributes">
<ul>
@for (int i = 0; i < Model.NewsLetterSubscriptions.Count; i++)
{
<li>
<label for="@Html.IdFor(m => m.NewsLetterSubscriptions[i].IsActive)">@Model.NewsLetterSubscriptions[i].Name</label>
<input type="hidden" asp-for="NewsLetterSubscriptions[i].TypeId" />
<input class="form-check-input" type="checkbox" asp-for="NewsLetterSubscriptions[i].IsActive" />
</li>
}
</ul>
</div>
</div>
</div>
</section>
}
@if (Model.CustomerAttributes.Count > 0)
{
<section class="fieldset">
<h2 class="title">
@T("Account.Options")
</h2>
<div class="form-fields">
@await Html.PartialAsync("_CustomerAttributes", Model.CustomerAttributes)
</div>
</section>
}
@if (Model.AllowCustomersToSetTimeZone || Model.SignatureEnabled)
{
<section class="fieldset">
<h2 class="title">
@T("Account.Preferences")
</h2>
<div class="form-fields">
@if (Model.AllowCustomersToSetTimeZone)
{
<div class="inputs">
<label asp-for="TimeZoneId" asp-postfix=":"></label>
<select asp-for="TimeZoneId" asp-items="Model.AvailableTimeZones"></select>
<span asp-validation-for="TimeZoneId"></span>
</div>
}
@if (Model.SignatureEnabled)
{
<div class="inputs">
<label asp-for="Signature" asp-postfix=":"></label>
<textarea asp-for="Signature" class="account-signature-text"></textarea>
</div>
}
</div>
</section>
}
@if (Model.NumberOfExternalAuthenticationProviders > 0)
{
<section class="fieldset">
<h2 class="title">
@T("Account.AssociatedExternalAuth")
</h2>
@if (Model.AssociatedExternalAuthRecords.Count > 0)
{
//existing associated external records
<div class="table-wrapper">
<table class="data-table">
<colgroup>
<col />
<col />
<col />
</colgroup>
<thead>
<tr>
<th class="auth-method-name">
@T("Account.AssociatedExternalAuth.AuthMethodName")
</th>
<th class="email">
@T("Account.AssociatedExternalAuth.Email")
</th>
<th class="external-id">
@T("Account.AssociatedExternalAuth.ExternalIdentifier")
</th>
@if (Model.AllowCustomersToRemoveAssociations)
{
<th class="remove">
@T("Account.AssociatedExternalAuth.Remove")
</th>
}
</tr>
</thead>
<tbody>
@foreach (var item in Model.AssociatedExternalAuthRecords)
{
<tr>
<td class="auth-method-name">
@item.AuthMethodName
</td>
<td class="email">
@item.Email
</td>
<td class="external-id">
@CommonHelper.EnsureMaximumLength(item.ExternalIdentifier, 40, "...")
</td>
@if (Model.AllowCustomersToRemoveAssociations)
{
<td class="remove">
<a href="#" onclick="return removeexternalassociation(@item.Id)">@T("Account.AssociatedExternalAuth.Remove")</a>
</td>
}
</tr>
}
</tbody>
</table>
</div>
}
@if (Model.NumberOfExternalAuthenticationProviders > Model.AssociatedExternalAuthRecords.Count)
{
//we can add more external records
var loginUrl = Url.RouteUrl(NopRouteNames.General.LOGIN, null, webHelper.GetCurrentRequestProtocol());
<div class="form-fields add-more-external-records">
@T("Account.AssociatedExternalAuth.AddMoreRecords")
<a href="@loginUrl">@loginUrl</a>
</div>
}
</section>
}
@if (Model.GdprConsents.Count > 0)
{
<section class="fieldset">
<h2 class="title">
@T("Account.UserAgreement")
</h2>
<div class="form-fields">
@foreach (var consent in Model.GdprConsents)
{
if (consent.IsRequired)
{
<script asp-location="Footer">
$(function() {
$('#save-info-button').on('click', function() {
if ($('#consent@(consent.Id)').is(':checked')) {
//do some stuff
return true;
} else {
//just show validation errors, don't post
alert('@Html.Raw(JavaScriptEncoder.Default.Encode(consent.RequiredMessage))');
return false;
}
});
});
</script>
}
<div class="inputs accept-consent">
<input id="consent@(consent.Id)" type="checkbox" name="consent@(consent.Id)" checked="@consent.Accepted" />
<label for="consent@(consent.Id)">@consent.Message</label>
</div>
}
</div>
</section>
}
<section class="buttons">
<button type="submit" id="save-info-button" name="save-info-button" class="button-1 save-customer-info-button">@T("Common.Save")</button>
</section>
</form>
@await Component.InvokeAsync(typeof(WidgetViewComponent), new { widgetZone = PublicWidgetZones.CustomerInfoBottom, additionalData = Model })
</div>
</div>
<script asp-location="Footer">
function removeexternalassociation(itemId) {
if (confirm('@T("Common.AreYouSure")')) {
var postData = {
id: itemId
};
addAntiForgeryToken(postData);
$.ajax({
cache: false,
type: "POST",
url: "@Url.RouteUrl(NopRouteNames.Ajax.CUSTOMER_REMOVE_EXTERNAL_ASSOCIATION)",
data: postData,
dataType: "json",
success: function (data, textStatus, jqXHR) {
location.href = data.redirect;
},
error: function (jqXHR, textStatus, errorThrown) {
alert('Failed to delete');
}
});
}
return false;
}
</script>