// File: Plugins/YourCompany.ProductAttributes/Components/ProductAttributesViewComponent.cs using FruitBank.Common.Interfaces; using Microsoft.AspNetCore.Mvc; using Nop.Core; using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Orders; using Nop.Plugin.Misc.FruitBankPlugin.Models; using Nop.Plugin.Misc.FruitBankPlugin.Services; using Nop.Services.Common; using Nop.Web.Areas.Admin.Models.Catalog; using Nop.Web.Areas.Admin.Models.Orders; using Nop.Web.Framework.Components; namespace Nop.Plugin.Misc.FruitBankPlugin.Components { [ViewComponent(Name = "OrderAttributes")] public class OrderAttributesViewComponent : NopViewComponent { private readonly FruitBankAttributeService _fruitBankAttributeService; private readonly IWorkContext _workContext; private readonly IStoreContext _storeContext; public OrderAttributesViewComponent(FruitBankAttributeService fruitBankAttributeService, IWorkContext workContext, IStoreContext storeContext) { _workContext = workContext; _storeContext = storeContext; _fruitBankAttributeService = fruitBankAttributeService; } public async Task InvokeAsync(string widgetZone, object additionalData) { if (additionalData is not OrderModel orderModel) return Content(""); var model = new OrderAttributesModel { OrderId = orderModel.Id }; if (model.OrderId > 0) { var orderPickupAttributeValue = await _fruitBankAttributeService.GetGenericAttributeValueAsync(model.OrderId, nameof(IOrderDto.DateOfReceipt)); var orderMeasurableAttributeValue = await _fruitBankAttributeService.GetGenericAttributeValueAsync(model.OrderId, nameof(OrderModelExtended.IsMeasurable)); model.IsMeasurable = orderMeasurableAttributeValue; if(orderPickupAttributeValue.HasValue && orderPickupAttributeValue.Value != DateTime.MinValue) { model.DateOfReceipt = orderPickupAttributeValue; } else { model.DateOfReceipt = null; } } return View("~/Plugins/Misc.FruitBankPlugin/Views/OrderAttributes.cshtml", model); } } }