Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ public static IEnumerable<DefaultPermission> DefaultPermissions()
StandardPermission.ManagePaymentTransactions,
StandardPermission.ManageShipments,
StandardPermission.ManageMerchandiseReturns,
StandardPermission.ManageCheckoutAttribute,
StandardPermission.ManageReports
]
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Grand.Web.AdminShared.Interfaces;

public interface ICheckoutAttributeViewModelService
{
Task<IEnumerable<CheckoutAttributeModel>> PrepareCheckoutAttributeListModel();
Task<IEnumerable<CheckoutAttributeModel>> PrepareCheckoutAttributeListModel(string storeId = "");
Task<IEnumerable<CheckoutAttributeValueModel>> PrepareCheckoutAttributeValuesModel(string checkoutAttributeId);
Task<CheckoutAttributeModel> PrepareCheckoutAttributeModel();
Task<CheckoutAttributeValueModel> PrepareCheckoutAttributeValueModel(string checkoutAttributeId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ public class CheckoutAttributeViewModelService(
IEnumTranslationService enumTranslationService)
: ICheckoutAttributeViewModelService
{
public virtual async Task<IEnumerable<CheckoutAttributeModel>> PrepareCheckoutAttributeListModel()
public virtual async Task<IEnumerable<CheckoutAttributeModel>> PrepareCheckoutAttributeListModel(string storeId = "")
{
var checkoutAttributes = await checkoutAttributeService.GetAllCheckoutAttributes(ignoreAcl: true);
var checkoutAttributes = await checkoutAttributeService.GetAllCheckoutAttributes(storeId: storeId, ignoreAcl: true);
return checkoutAttributes.Select((Func<CheckoutAttribute, CheckoutAttributeModel>)(x =>
{
var attributeModel = x.ToModel();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
@model CheckoutAttributeModel
@{
//page title
ViewBag.Title = Loc["Admin.Orders.CheckoutAttributes.AddNew"];
}
<form asp-area="@Constants.AreaStore" asp-controller="CheckoutAttribute" asp-action="Create" method="post" id="checkoutattribute-form">

<div class="row">
<div class="col-md-12">
<div class="x_panel light form-fit">
<div class="x_title">
<div class="caption">
<i class="fa fa-list-alt"></i>
@Loc["Admin.Orders.CheckoutAttributes.AddNew"]
<small>
<i class="fa fa-arrow-circle-left"></i>@Html.ActionLink(Loc["Admin.Orders.CheckoutAttributes.BackToList"], "List")
</small>
</div>
<div class="actions">
<div class="btn-group btn-group-devided">
<button class="btn btn-success" type="submit" name="save">
<i class="fa fa-check"></i> @Loc["Admin.Common.Save"]
</button>
<button class="btn btn-success" type="submit" name="save-continue">
<i class="fa fa-check-circle"></i> @Loc["Admin.Common.SaveContinue"]
</button>
<vc:admin-widget widget-zone="checkout_attribute_details_buttons" additional-data="null"/>
</div>
</div>
</div>
<div class="x_content form">
<partial name="Partials/CreateOrUpdate" model="Model"/>
</div>
</div>
</div>
</div>
</form>
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
@model CheckoutAttributeModel

@{
//page title
ViewBag.Title = Loc["Admin.Orders.CheckoutAttributes.EditAttributeDetails"];
}
<form asp-area="@Constants.AreaStore" asp-controller="CheckoutAttribute" asp-action="Edit" method="post" id="checkoutattribute-form">

<div class="row">
<div class="col-md-12">
<div class="x_panel light form-fit">
<div class="x_title">
<div class="caption">
<i class="fa fa-list-alt"></i>
@Loc["Admin.Orders.CheckoutAttributes.EditAttributeDetails"] - @Model.Name
<small>
<i class="fa fa-arrow-circle-left"></i>@Html.ActionLink(Loc["Admin.Orders.CheckoutAttributes.BackToList"], "List")
</small>
</div>
<div class="actions">
<div class="btn-group btn-group-devided util-btn-margin-bottom-5">
<button class="btn btn-success" type="submit" name="save">
<i class="fa fa-check"></i> @Loc["Admin.Common.Save"]
</button>
<button class="btn btn-success" type="submit" name="save-continue">
<i class="fa fa-check-circle"></i> @Loc["Admin.Common.SaveContinue"]
</button>
<span id="checkoutattribute-delete" class="btn red">
<i class="fa fa-trash-o"></i> @Loc["Admin.Common.Delete"]
</span>
<vc:admin-widget widget-zone="checkout_attribute_details_buttons" additional-data="Model"/>
</div>
</div>
</div>
<div class="x_content form">
<partial name="Partials/CreateOrUpdate" model="Model"/>
</div>
</div>
</div>
</div>
</form>
<admin-delete-confirmation button-id="checkoutattribute-delete"/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
@{
//page title
ViewBag.Title = Loc["Admin.Orders.CheckoutAttributes"];
}

<div class="row">
<div class="col-md-12">
<div class="x_panel light form-fit">
<div class="x_title">
<div class="caption">
<i class="fa fa-list-alt"></i>
@Loc["Admin.Orders.CheckoutAttributes"]
</div>
<div class="actions btn-group btn-group-devided">
<a href="@Url.Action("Create", new { area = Constants.AreaStore })" class="btn green">
<i class="fa fa-plus"></i><span class="d-none d-sm-inline"> @Loc["Admin.Common.AddNew"] </span>
</a>
<vc:admin-widget widget-zone="checkout_attribute_list_buttons" additional-data="null"/>
</div>

</div>
<div class="x_content form">
<div class="form-horizontal">
<div class="form-body">
<div class="x_content">
<div id="checkoutattributes-grid"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

<script>
$(document).ready(function () {
$("#checkoutattributes-grid").kendoGrid({
dataSource: {
transport: {
read: {
url: "@Html.Raw(Url.Action("List", "CheckoutAttribute", new { area = Constants.AreaStore }))",
type: "POST",
dataType: "json",
data: addAntiForgeryToken
}
},
schema: {
data: "Data",
total: "Total",
errors: "Errors"
},
error: function(e) {
display_kendoui_grid_error(e);
// Cancel the changes
this.cancelChanges();
},
serverPaging: true,
serverFiltering: true,
serverSorting: true
},
pageable: {
refresh: true,
numeric: false,
previousNext: false,
info: false
},
editable: {
confirmation: false,
mode: "inline"
},
scrollable: false,
columns: [{
field: "Name",
title: "@Loc["Admin.Orders.CheckoutAttributes.Fields.Name"]",
template: '<a class="k-link" href="@Url.Action("Edit", "CheckoutAttribute", new { area = Constants.AreaStore })/#=Id#">#=kendo.htmlEncode(Name)#</a>',
}, {
field: "AttributeControlTypeName",
title: "@Loc["Admin.Orders.CheckoutAttributes.Fields.AttributeControlType"]",
headerAttributes: { style: "text-align:center" },
attributes: { style: "text-align:center" },
width: 200,
minScreenWidth: 750,
},{
field: "IsRequired",
title: "@Loc["Admin.Orders.CheckoutAttributes.Fields.IsRequired"]",
width: 100,
headerAttributes: { style: "text-align:center" },
attributes: { style: "text-align:center" },
template: '# if(IsRequired) {# <i class="fa fa-check" aria-hidden="true" style="color:green"></i> #} else {# <i class="fa fa-times" aria-hidden="true" style="color:red"></i> #} #'
}, {
field: "DisplayOrder",
title: "@Loc["Admin.Orders.CheckoutAttributes.Fields.DisplayOrder"]",
width: 100,
minScreenWidth: 750,
}]
});
});
</script>
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
@model CheckoutAttributeModel
<vc:admin-widget widget-zone="checkout_attribute_details_condition_top" additional-data="Model"/>
@{
if (!string.IsNullOrEmpty(Model.Id))
{
<script>
$(document).ready(function () {
$("#@Html.IdFor(model => model.ConditionModel.EnableCondition)").click(toggleEnableCondition);
toggleEnableCondition();
});

function toggleEnableCondition() {
if ($('#@Html.IdFor(model => model.ConditionModel.EnableCondition)').is(':checked')) {
$('#pnlAttributes').show();
} else {
$('#pnlAttributes').hide();
}
}
</script>

<div class="form-horizontal">
<div class="form-body">
<div class="form-group">
<admin-label asp-for="ConditionModel.EnableCondition"/>
<div class="col-md-9 col-sm-9">
<label class="mt-checkbox mt-checkbox-outline control control-checkbox">
<admin-input asp-for="ConditionModel.EnableCondition"/>
<div class="control__indicator"></div>
</label>
<span asp-validation-for="ConditionModel.EnableCondition"></span>
</div>
</div>
</div>
</div>
<div id="pnlAttributes">
@if (Model.ConditionModel.ConditionAttributes.Count > 0)
{
<div class="form-horizontal">
<div class="form-body">
<div class="form-group">
<admin-label asp-for="ConditionModel.SelectedAttributeId"/>
<div class="col-md-9 col-sm-9">
<admin-select asp-for="ConditionModel.SelectedAttributeId" asp-items="Model.ConditionModel.ConditionAttributes.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() })"/>
<script>
$(document).ready(function() {
$("#@Html.IdFor(model => model.ConditionModel.SelectedAttributeId)").change(toggleConditionAttributes);
toggleConditionAttributes();
});
function toggleConditionAttributes() {
var selectedCheckoutAttributeId = $("#@Html.IdFor(model => model.ConditionModel.SelectedAttributeId)").val();
$('[id^="pnl_attribute_values_"]').hide();
$('#pnl_attribute_values_' + selectedCheckoutAttributeId).show();
}
</script>
</div>
</div>
<div class="form-group">
<label class="control-label col-md-3"></label>
<div class="col-md-9 col-sm-9">
@for (var i = 0; i < Model.ConditionModel.ConditionAttributes.Count; i++)
{
<input type="hidden" asp-for="@Model.ConditionModel.ConditionAttributes[i].Id"/>
<div id="@($"pnl_attribute_values_{Model.ConditionModel.ConditionAttributes[i].Id}")">
@switch (Model.ConditionModel.ConditionAttributes[i].AttributeControlType)
{
case AttributeControlType.DropdownList:
<admin-select asp-for="@Model.ConditionModel.ConditionAttributes[i].SelectedValueId" asp-items="Model.ConditionModel.ConditionAttributes[i].Values"/>
break;
case AttributeControlType.RadioList:
case AttributeControlType.ColorSquares:
case AttributeControlType.ImageSquares:
foreach (var value in Model.ConditionModel.ConditionAttributes[i].Values)
{
<div>
<input type="radio" asp-for="@Model.ConditionModel.ConditionAttributes[i].SelectedValueId" value="@value.Value" checked="@value.Selected"/>
<label class="control-label">@value.Text</label>
</div>
}

break;
case AttributeControlType.Checkboxes:
for (var j = 0; j < Model.ConditionModel.ConditionAttributes[i].Values.Count; j++)
{
<div>
<label class="mt-checkbox mt-checkbox-outline control control-checkbox">
<input type="hidden" asp-for="@Model.ConditionModel.ConditionAttributes[i].Values[j].Value"/>
<admin-input asp-for="@Model.ConditionModel.ConditionAttributes[i].Values[j].Selected"/>
@Model.ConditionModel.ConditionAttributes[i].Values[j].Text
<div class="control__indicator"></div>
</label>
</div>
}

break;
case AttributeControlType.ReadonlyCheckboxes:
case AttributeControlType.TextBox:
case AttributeControlType.MultilineTextbox:
case AttributeControlType.Datepicker:
case AttributeControlType.FileUpload:
default:
//not supported as conditions
break;
}
</div>
}
</div>
</div>
</div>
</div>
}
else
{
<div class="note note-info">
@Loc["Admin.Orders.CheckoutAttributes.Condition.NoAttributeExists"]
</div>
}
</div>
}
else
{
<div class="note note-info">
@Loc["Admin.Orders.CheckoutAttributes.Condition.SaveBeforeEdit"]
</div>
}
}
<vc:admin-widget widget-zone="checkout_attribute_details_condition_bottom" additional-data="Model"/>
Loading