I want to override ProductController, ProductDetailsModel and ProductTemplate.Simple.cshtml in a plugin.
The new model in the plugin is inherited from ProductDetailsModel and this is how it looks:
namespace Nop.Plugin.Misc.WarehouseStockAvailability.Models
{
public partial class ProductNewModel : ProductDetailsModel
{
public ProductNewModel()
{
ProductWarehouseInventoryModels = new List<ProductWarehouseInventoryModel>();
AvailableWarehouses = new List<SelectListItem>();
}
[NopResourceDisplayName("Admin.Catalog.Products.Fields.Warehouse")]
public int WarehouseId { get; set; }
public IList<SelectListItem> AvailableWarehouses { get; set; }
//multiple warehouses
[NopResourceDisplayName("Admin.Catalog.Products.ProductWarehouseInventory")]
public IList<ProductWarehouseInventoryModel> ProductWarehouseInventoryModels { get; set; }
#region Nested Classes
public partial class ProductWarehouseInventoryModel : BaseNopModel
{
[NopResourceDisplayName("Admin.Catalog.Products.ProductWarehouseInventory.Fields.Warehouse")]
public int WarehouseId { get; set; }
[NopResourceDisplayName("Admin.Catalog.Products.ProductWarehouseInventory.Fields.Warehouse")]
public string WarehouseName { get; set; }
[NopResourceDisplayName("Admin.Catalog.Products.ProductWarehouseInventory.Fields.WarehouseUsed")]
public bool WarehouseUsed { get; set; }
[NopResourceDisplayName("Admin.Catalog.Products.ProductWarehouseInventory.Fields.StockQuantity")]
public int StockQuantity { get; set; }
[NopResourceDisplayName("Admin.Catalog.Products.ProductWarehouseInventory.Fields.ReservedQuantity")]
public int ReservedQuantity { get; set; }
public int WarehouseStockQty;
}
#endregion
}
}
The controller in the plugin is inherited from ProductController and here I'm overriding PrepareProductDetailsPageModel.
protected override ProductDetailsModel PrepareProductDetailsPageModel(Product product,
ShoppingCartItem updatecartitem = null, bool isAssociatedProduct = false)
{
var model = new ProductNewModel
{
Id = product.Id,
Name = product.GetLocalized(x => x.Name),
ShortDescription = product.GetLocalized(x => x.ShortDescription),
FullDescription = product.GetLocalized(x => x.FullDescription),
MetaKeywords = product.GetLocalized(x => x.MetaKeywords),
MetaDescription = product.GetLocalized(x => x.MetaDescription),
MetaTitle = product.GetLocalized(x => x.MetaTitle),
SeName = product.GetSeName(),
ProductType = product.ProductType,
ShowSku = _catalogSettings.ShowProductSku,
Sku = product.Sku,
ShowManufacturerPartNumber = _catalogSettings.ShowManufacturerPartNumber,
FreeShippingNotificationEnabled = _catalogSettings.ShowFreeShippingNotification,
ManufacturerPartNumber = product.ManufacturerPartNumber,
ShowGtin = _catalogSettings.ShowGtin,
Gtin = product.Gtin,
StockAvailability = product.FormatStockMessage("", _localizationService, _productAttributeParser),
HasSampleDownload = product.IsDownload && product.HasSampleDownload,
DisplayDiscontinuedMessage = !product.Published && _catalogSettings.DisplayDiscontinuedMessageForUnpublishedProducts
};
........
........
return model;
}
In the ProductTemplate.Simple.cshtml view in the plugin I'm adding a new partial view with the new model.
@{
var newModel = new ProductNewModel()
}
@Html.Partial("_NewPartialView", newModel)
The problem is that I'm always geting 0 for "newModel.ProductWarehouseInventoryModels.Count"
If someone can help me to figure ou what I'm doing wrong would be great?