Skip to content

Commit 7741f60

Browse files
committed
Product bundle: Much more details
1 parent df530ab commit 7741f60

32 files changed

Lines changed: 472 additions & 244 deletions

src/Libraries/SmartStore.Core/Domain/Catalog/CatalogSettings.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,11 @@ public CatalogSettings()
217217
/// </summary>
218218
public bool EnableDynamicPriceUpdate { get; set; }
219219

220+
/// <summary>
221+
/// Gets or sets a value indicating whether base price should be rendered for bundle items
222+
/// </summary>
223+
public bool BundleItemShowBasePrice { get; set; }
224+
220225
/// <summary>
221226
/// Gets or sets a number of product tags that appear in the tag cloud
222227
/// </summary>

src/Libraries/SmartStore.Services/Catalog/IProductAttributeService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@ public partial interface IProductAttributeService
211211
/// <param name="attributeValueId">Attribute value identifier</param>
212212
void DeleteProductBundleItemAttributeFilter(int attributeId, int attributeValueId);
213213

214+
/// <summary>
215+
/// Deletes product bundle item attribute filters
216+
/// </summary>
217+
/// <param name="attributeId">Attribute identifier</param>
218+
void DeleteProductBundleItemAttributeFilter(int attributeId);
219+
214220
#endregion
215221
}
216222
}

src/Libraries/SmartStore.Services/Catalog/PriceCalculationService.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,16 +298,20 @@ public virtual decimal GetFinalPrice(Product product, IList<ProductBundleItem> b
298298
if (!(product.ProductType == ProductType.BundledProduct && product.BundlePerItemPricing))
299299
return GetFinalPrice(product, customer, additionalCharge, includeDiscounts, quantity, bundleItem);
300300

301-
decimal result = additionalCharge;
301+
decimal result = decimal.Zero;
302302

303303
if (bundleItems != null)
304304
{
305305
foreach (var item in bundleItems)
306306
{
307-
var bundleItemPrice = GetFinalPrice(item.Product, customer, decimal.Zero, includeDiscounts, 1, item);
307+
var bundleItemPrice = GetFinalPrice(item.Product, customer, additionalCharge, includeDiscounts, 1, item);
308308
result = result + decimal.Multiply(bundleItemPrice, item.Quantity);
309309
}
310310
}
311+
else
312+
{
313+
result = result + additionalCharge;
314+
}
311315

312316
return (result < decimal.Zero ? decimal.Zero : result);
313317
}

src/Libraries/SmartStore.Services/Catalog/ProductAttributeService.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -676,6 +676,20 @@ from x in _productBundleItemAttributeFilterRepository.Table
676676
attributeFilterQuery.ToList().Each(x => DeleteProductBundleItemAttributeFilter(x));
677677
}
678678

679+
/// <summary>
680+
/// Deletes product bundle item attribute filters
681+
/// </summary>
682+
/// <param name="attributeId">Attribute identifier</param>
683+
public virtual void DeleteProductBundleItemAttributeFilter(int attributeId)
684+
{
685+
var attributeFilterQuery =
686+
from x in _productBundleItemAttributeFilterRepository.Table
687+
where x.AttributeId == attributeId
688+
select x;
689+
690+
attributeFilterQuery.ToList().Each(x => DeleteProductBundleItemAttributeFilter(x));
691+
}
692+
679693
#endregion
680694

681695
#endregion

src/Libraries/SmartStore.Services/Catalog/ProductExtensions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,11 @@ public static string GetProductTypeLabel(this Product product, ILocalizationServ
397397
return "";
398398
}
399399

400+
public static bool CanBeBundleItem(this Product product)
401+
{
402+
return (product != null && product.ProductType == ProductType.SimpleProduct && !product.IsRecurring && !product.IsDownload);
403+
}
404+
400405
public static bool FilterOut(this ProductBundleItem bundleItem, ProductVariantAttributeValue value, out ProductBundleItemAttributeFilter filter)
401406
{
402407
if (bundleItem != null && value != null && bundleItem.FilterAttributes)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using SmartStore.Core.Data.Hooks;
2+
using SmartStore.Core.Domain.Catalog;
3+
4+
namespace SmartStore.Services.Catalog
5+
{
6+
public class ProductVariantAttributePostDeleteHook : PostDeleteHook<ProductVariantAttribute>
7+
{
8+
private readonly IProductAttributeService _productAttributeService;
9+
10+
public ProductVariantAttributePostDeleteHook(IProductAttributeService productAttributeService)
11+
{
12+
_productAttributeService = productAttributeService;
13+
}
14+
15+
public override void Hook(ProductVariantAttribute entity, HookEntityMetadata metadata)
16+
{
17+
if (entity != null)
18+
{
19+
_productAttributeService.DeleteProductBundleItemAttributeFilter(entity.Id);
20+
}
21+
}
22+
}
23+
}

src/Libraries/SmartStore.Services/Installation/InvariantInstallationData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4432,7 +4432,7 @@ public IList<ISettings> Settings()
44324432
ProductDetailsPictureSize = 300,
44334433
ProductThumbPictureSizeOnProductDetailsPage = 70,
44344434
AssociatedProductPictureSize = 125,
4435-
BundledProductPictureSize = 125,
4435+
BundledProductPictureSize = 70,
44364436
CategoryThumbPictureSize = 125,
44374437
ManufacturerThumbPictureSize = 125,
44384438
CartThumbPictureSize = 80,

src/Libraries/SmartStore.Services/SmartStore.Services.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@
162162
<Compile Include="Catalog\IProductTagService.cs" />
163163
<Compile Include="Catalog\ProductTagService.cs" />
164164
<Compile Include="Catalog\IRecentlyViewedProductsService.cs" />
165+
<Compile Include="Catalog\ProductVariantAttributePostDeleteHook.cs" />
165166
<Compile Include="Catalog\ProductVariantAttributeValuePostDeleteHook.cs" />
166167
<Compile Include="Catalog\RecentlyViewedProductsService.cs" />
167168
<Compile Include="Catalog\TierPriceExtensions.cs" />

src/Presentation/SmartStore.Web.Framework/DependencyRegistrar.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder)
125125

126126
// register DB Hooks (codehint: sm-add)
127127
builder.RegisterType<LocalizedEntityPostDeleteHook>().As<IHook>();
128+
builder.RegisterType<ProductVariantAttributePostDeleteHook>().As<IHook>();
128129
builder.RegisterType<ProductVariantAttributeValuePostDeleteHook>().As<IHook>();
129130

130131
//plugins

src/Presentation/SmartStore.Web.Framework/HtmlExtensions.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ public static string FieldIdFor<T, TResult>(this HtmlHelper<T> html, Expression<
262262
public static MvcHtmlString DatePickerDropDowns(this HtmlHelper html,
263263
string dayName, string monthName, string yearName,
264264
int? beginYear = null, int? endYear = null,
265-
int? selectedDay = null, int? selectedMonth = null, int? selectedYear = null, bool localizeLabels = true)
265+
int? selectedDay = null, int? selectedMonth = null, int? selectedYear = null, bool localizeLabels = true, bool disabled = false)
266266
{
267267
var daysList = new TagBuilder("select");
268268
//daysList.MergeAttribute("placeholder", "TAGE");
@@ -278,6 +278,13 @@ public static MvcHtmlString DatePickerDropDowns(this HtmlHelper html,
278278
monthsList.Attributes.Add("class", "date-part");
279279
yearsList.Attributes.Add("class", "date-part");
280280

281+
if (disabled)
282+
{
283+
daysList.Attributes.Add("disabled", "disabled");
284+
monthsList.Attributes.Add("disabled", "disabled");
285+
yearsList.Attributes.Add("disabled", "disabled");
286+
}
287+
281288
var days = new StringBuilder();
282289
var months = new StringBuilder();
283290
var years = new StringBuilder();

0 commit comments

Comments
 (0)