CustomOrders in progress....
This commit is contained in:
parent
2b6e022f8b
commit
35378d9b0d
|
|
@ -1,29 +1,64 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using Nop.Services.Orders;
|
||||
using Nop.Web.Areas.Admin.Controllers;
|
||||
using Nop.Web.Framework.Mvc.Filters;
|
||||
using Nop.Web.Framework;
|
||||
using Nop.Web.Areas.Admin.Models.Orders;
|
||||
using Nop.Services.Security;
|
||||
using AyCode.Services.SignalRs;
|
||||
using FruitBank.Common.Server.Interfaces;
|
||||
using FruitBank.Common.SignalRs;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Factories;
|
||||
using Nop.Web.Areas.Admin.Factories;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Models;
|
||||
using Nop.Services.Orders;
|
||||
using Nop.Services.Security;
|
||||
using Nop.Web.Areas.Admin.Controllers;
|
||||
using Nop.Web.Areas.Admin.Factories;
|
||||
using Nop.Web.Areas.Admin.Models.Orders;
|
||||
using Nop.Web.Framework;
|
||||
using Nop.Web.Framework.Mvc.Filters;
|
||||
|
||||
namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
||||
{
|
||||
public class CustomOrderService(IOrderService orderService, IOrderModelFactory orderModelFactory) : ICustomOrderControllerServer
|
||||
{
|
||||
private readonly IOrderService _orderService = orderService;
|
||||
private readonly CustomOrderModelFactory _orderModelFactory = orderModelFactory as CustomOrderModelFactory;
|
||||
|
||||
public async Task<OrderListModelExtended> GetOrderModelsByFilter(OrderSearchModel searchModel)
|
||||
{
|
||||
var orderListModel = await _orderModelFactory.PrepareOrderListModelExtendedAsync(searchModel);
|
||||
|
||||
Console.WriteLine($"Total: {orderListModel.RecordsTotal}, Data Count: {orderListModel.Data.Count()}");
|
||||
foreach (var item in orderListModel.Data.Take(3))
|
||||
{
|
||||
Console.WriteLine($"Order: {item.Id}, {item.CustomOrderNumber}");
|
||||
}
|
||||
|
||||
return orderListModel;
|
||||
}
|
||||
|
||||
[SignalR(SignalRTags.GetPendingOrderModels)]
|
||||
public async Task<OrderListModelExtended> GetPendingOrderModels()
|
||||
{
|
||||
var orderSearchModel = new OrderSearchModel
|
||||
{
|
||||
OrderStatusIds = new List<int> { 1 }
|
||||
};
|
||||
|
||||
return await GetOrderModelsByFilter(orderSearchModel);
|
||||
}
|
||||
}
|
||||
|
||||
[Area(AreaNames.ADMIN)]
|
||||
[AuthorizeAdmin]
|
||||
public class CustomOrderController : BaseAdminController
|
||||
public class CustomOrderController : BaseAdminController, ICustomOrderControllerServer
|
||||
{
|
||||
private readonly IOrderService _orderService;
|
||||
private readonly IOrderModelFactory _orderModelFactory;
|
||||
private readonly CustomOrderModelFactory _orderModelFactory;
|
||||
private readonly ICustomOrderControllerServer _customOrderService;
|
||||
private readonly IPermissionService _permissionService;
|
||||
// ... other dependencies
|
||||
|
||||
public CustomOrderController(IOrderService orderService, IOrderModelFactory orderModelFactory, IPermissionService permissionService)
|
||||
public CustomOrderController(IOrderService orderService, IOrderModelFactory orderModelFactory, ICustomOrderControllerServer customOrderService, IPermissionService permissionService)
|
||||
{
|
||||
_orderService = orderService;
|
||||
_orderModelFactory = orderModelFactory;
|
||||
_orderModelFactory = orderModelFactory as CustomOrderModelFactory;
|
||||
_customOrderService = customOrderService;
|
||||
_permissionService = permissionService;
|
||||
// ... initialize other deps
|
||||
}
|
||||
|
|
@ -44,21 +79,40 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
|
||||
[HttpPost]
|
||||
[CheckPermission(StandardPermission.Orders.ORDERS_VIEW)]
|
||||
public virtual async Task<IActionResult> OrderList(OrderSearchModel searchModel)
|
||||
public async Task<IActionResult> OrderList(OrderSearchModel searchModel)
|
||||
{
|
||||
//prepare model
|
||||
var model = await _orderModelFactory.PrepareOrderListModelAsync(searchModel);
|
||||
var orderListModel = await GetOrderModelsByFilter(searchModel);
|
||||
|
||||
var valami = Json(orderListModel);
|
||||
Console.WriteLine(valami);
|
||||
return valami;
|
||||
}
|
||||
|
||||
|
||||
Console.WriteLine($"Total: {model.RecordsTotal}, Data Count: {model.Data.Count()}");
|
||||
foreach (var item in model.Data.Take(3))
|
||||
public async Task<OrderListModelExtended> GetOrderModelsByFilter(OrderSearchModel searchModel)
|
||||
{
|
||||
//return _customOrderService.
|
||||
var orderListModel = await _orderModelFactory.PrepareOrderListModelExtendedAsync(searchModel);
|
||||
|
||||
Console.WriteLine($"Total: {orderListModel.RecordsTotal}, Data Count: {orderListModel.Data.Count()}");
|
||||
foreach (var item in orderListModel.Data.Take(3))
|
||||
{
|
||||
Console.WriteLine($"Order: {item.Id}, {item.CustomOrderNumber}");
|
||||
}
|
||||
var valami = Json(model);
|
||||
Console.WriteLine(valami);
|
||||
return valami;
|
||||
}
|
||||
|
||||
return orderListModel;
|
||||
}
|
||||
|
||||
[SignalR(SignalRTags.GetPendingOrderModels)]
|
||||
public async Task<OrderListModelExtended> GetPendingOrderModels()
|
||||
{
|
||||
var orderSearchModel = new OrderSearchModel
|
||||
{
|
||||
OrderStatusIds = new List<int> { 1 }
|
||||
};
|
||||
|
||||
return await GetOrderModelsByFilter(orderSearchModel);
|
||||
}
|
||||
|
||||
public virtual IActionResult Test()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using FruitBank.Common.Interfaces;
|
|||
using FruitBank.Common.Loggers;
|
||||
using FruitBank.Common.Models;
|
||||
using FruitBank.Common.Server;
|
||||
using FruitBank.Common.Server.Interfaces;
|
||||
using FruitBank.Common.SignalRs;
|
||||
using LinqToDB;
|
||||
using Mango.Nop.Core.Dtos;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,15 @@
|
|||
using Microsoft.AspNetCore.Mvc.Infrastructure;
|
||||
using Microsoft.AspNetCore.Mvc.Routing;
|
||||
using Microsoft.AspNetCore.Mvc.TagHelpers;
|
||||
using Nop.Core;
|
||||
using Nop.Core.Domain.Catalog;
|
||||
using Nop.Core.Domain.Common;
|
||||
using Nop.Core.Domain.Directory;
|
||||
using Nop.Core.Domain.Orders;
|
||||
using Nop.Core.Domain.Shipping;
|
||||
using Nop.Core.Domain.Tax;
|
||||
using Nop.Core;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Helpers;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Models;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Services;
|
||||
using Nop.Services.Affiliates;
|
||||
using Nop.Services.Catalog;
|
||||
|
|
@ -28,10 +31,7 @@ using Nop.Services.Tax;
|
|||
using Nop.Services.Vendors;
|
||||
using Nop.Web.Areas.Admin.Factories;
|
||||
using Nop.Web.Areas.Admin.Models.Orders;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Models;
|
||||
using System.Reflection;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Helpers;
|
||||
using Microsoft.AspNetCore.Mvc.TagHelpers;
|
||||
|
||||
namespace Nop.Plugin.Misc.FruitBankPlugin.Factories
|
||||
{
|
||||
|
|
@ -166,32 +166,30 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Factories
|
|||
}
|
||||
|
||||
public override async Task<OrderListModel> PrepareOrderListModelAsync(OrderSearchModel searchModel)
|
||||
=>await base.PrepareOrderListModelAsync(searchModel);
|
||||
|
||||
public async Task<OrderListModelExtended> PrepareOrderListModelExtendedAsync(OrderSearchModel searchModel)
|
||||
{
|
||||
// get the default model first
|
||||
var baseModel = await base.PrepareOrderListModelAsync(searchModel);
|
||||
var orderListModel = await PrepareOrderListModelAsync(searchModel);
|
||||
|
||||
var orderListModelExtended = new OrderListModelExtended();
|
||||
var extendedRows = new List<OrderModelExtended>(orderListModel.RecordsFiltered);
|
||||
|
||||
var extendedRows = new List<OrderModelExtended>();
|
||||
CopyModelHelper.CopyPublicProperties(orderListModel, orderListModelExtended);
|
||||
|
||||
foreach (var order in baseModel.Data)
|
||||
foreach (var orderModel in orderListModel.Data)
|
||||
{
|
||||
var extendedOrder = new OrderModelExtended();
|
||||
CopyModelHelper.CopyPublicProperties(order, extendedOrder);
|
||||
extendedOrder.NeedsMeasurement = await ShouldMarkAsNeedsMeasurementAsync(order);
|
||||
Console.WriteLine(extendedOrder.Id);
|
||||
extendedRows.Add(extendedOrder);
|
||||
var orderModelExtended = new OrderModelExtended();
|
||||
CopyModelHelper.CopyPublicProperties(orderModel, orderModelExtended);
|
||||
|
||||
orderModelExtended.NeedsMeasurement = await ShouldMarkAsNeedsMeasurementAsync(orderModel);
|
||||
|
||||
Console.WriteLine(orderModelExtended.Id);
|
||||
extendedRows.Add(orderModelExtended);
|
||||
}
|
||||
|
||||
//var model = new OrderListModel
|
||||
//{
|
||||
// Data = extendedRows.Cast<OrderModel>().ToList(),
|
||||
// RecordsTotal = baseModel.RecordsTotal
|
||||
//};
|
||||
|
||||
var model = new OrderListModel();
|
||||
CopyModelHelper.CopyPublicProperties(baseModel, model);
|
||||
model.Data = extendedRows.ToList<OrderModel>(); // Different cast approach
|
||||
|
||||
return model;
|
||||
|
||||
orderListModelExtended.Data = extendedRows; // Different cast approach
|
||||
return orderListModelExtended;
|
||||
}
|
||||
|
||||
// example async custom logic
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Helpers
|
|||
{
|
||||
public static class CopyModelHelper
|
||||
{
|
||||
public static void CopyPublicProperties<TSource, TDestination>(TSource src, TDestination dest)
|
||||
public static TDestination CopyPublicProperties<TSource, TDestination>(TSource src, TDestination dest)
|
||||
{
|
||||
if (src == null || dest == null) return;
|
||||
if (src == null || dest == null) return dest;
|
||||
|
||||
var srcProps = typeof(TSource)
|
||||
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
|
||||
|
|
@ -23,6 +23,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Helpers
|
|||
if (dp == null || !dp.CanWrite) continue;
|
||||
dp.SetValue(dest, sp.GetValue(src));
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ using Nop.Services.Events;
|
|||
using Nop.Web.Areas.Admin.Factories;
|
||||
using Nop.Web.Areas.Admin.Models.Catalog;
|
||||
using Nop.Web.Areas.Admin.Models.Orders;
|
||||
using FruitBankDataController = Nop.Plugin.Misc.FruitBankPlugin.Controllers.FruitBankDataController;
|
||||
using FruitBank.Common.Server.Interfaces;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Controllers;
|
||||
|
||||
namespace Nop.Plugin.Misc.FruitBankPlugin.Infrastructure;
|
||||
|
||||
|
|
@ -73,9 +74,11 @@ public class PluginNopStartup : INopStartup
|
|||
services.AddScoped<IConsumer<OrderPlacedEvent>, EventConsumer>();
|
||||
services.AddScoped<IOrderMeasurementService, OrderMeasurementService>();
|
||||
services.AddScoped<PendingMeasurementCheckoutFilter>();
|
||||
services.AddScoped<OrderListModel, OrderListModelExtended>();
|
||||
services.AddScoped<OrderModel, OrderModelExtended>();
|
||||
services.AddScoped<OrderSearchModel, OrderSearchModelExtended>();
|
||||
|
||||
//services.AddScoped<OrderListModel, OrderListModelExtended>();
|
||||
//services.AddScoped<OrderModel, OrderModelExtended>();
|
||||
//services.AddScoped<OrderSearchModel, OrderSearchModelExtended>();
|
||||
|
||||
services.AddScoped<IOrderModelFactory, CustomOrderModelFactory>();
|
||||
services.AddScoped<IGenericAttributeService, GenericAttributeService>();
|
||||
services.AddScoped<CerebrasAPIService>();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
using Nop.Web.Framework.Models;
|
||||
|
||||
namespace Nop.Plugin.Misc.FruitBankPlugin.Models;
|
||||
|
||||
public interface IOrderListModelExtended<T>: IPagedModel<T> where T : BaseNopModel
|
||||
{
|
||||
public bool? NeedsMeasurement { get; set; }
|
||||
}
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
using Nop.Web.Areas.Admin.Models.Orders;
|
||||
using Nop.Web.Framework.Models;
|
||||
|
||||
namespace Nop.Plugin.Misc.FruitBankPlugin.Models
|
||||
{
|
||||
public partial record OrderListModelExtended : OrderListModel
|
||||
public partial record OrderListModelExtended : BasePagedListModel<OrderModelExtended>, IOrderListModelExtended<OrderModelExtended>
|
||||
{
|
||||
public bool? NeedsMeasurement { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue