Merge branch '4.80' of https://git.aycode.com/Adam/Mango.Nop.Plugins into 4.80
This commit is contained in:
commit
1d19bd0e37
|
|
@ -7,6 +7,7 @@ using FruitBank.Common.Server.Interfaces;
|
|||
using FruitBank.Common.SignalRs;
|
||||
using Mango.Nop.Core.Extensions;
|
||||
using Mango.Nop.Core.Loggers;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using Nop.Core;
|
||||
|
|
@ -22,6 +23,8 @@ using Nop.Plugin.Misc.FruitBankPlugin.Models.Orders;
|
|||
using Nop.Services.Catalog;
|
||||
using Nop.Services.Common;
|
||||
using Nop.Services.Customers;
|
||||
using Nop.Services.ExportImport;
|
||||
using Nop.Services.Helpers;
|
||||
using Nop.Services.Localization;
|
||||
using Nop.Services.Logging;
|
||||
using Nop.Services.Messages;
|
||||
|
|
@ -35,6 +38,7 @@ using Nop.Web.Areas.Admin.Models.Orders;
|
|||
using Nop.Web.Framework;
|
||||
using Nop.Web.Framework.Controllers;
|
||||
using Nop.Web.Framework.Mvc.Filters;
|
||||
using System.Text;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Xml;
|
||||
using System.Xml.Serialization;
|
||||
|
|
@ -61,10 +65,36 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
protected readonly IEventPublisher _eventPublisher;
|
||||
protected readonly ILocalizationService _localizationService;
|
||||
protected readonly ICustomerActivityService _customerActivityService;
|
||||
protected readonly IExportManager _exportManager;
|
||||
protected readonly IGiftCardService _giftCardService;
|
||||
protected readonly IImportManager _importManager;
|
||||
protected readonly IDateTimeHelper _dateTimeHelper;
|
||||
private static readonly char[] _separator = [','];
|
||||
// ... other dependencies
|
||||
|
||||
private readonly Mango.Nop.Core.Loggers.ILogger _logger;
|
||||
|
||||
protected virtual async ValueTask<bool> HasAccessToOrderAsync(Order order)
|
||||
{
|
||||
return order != null && await HasAccessToOrderAsync(order.Id);
|
||||
}
|
||||
|
||||
protected virtual async Task<bool> HasAccessToOrderAsync(int orderId)
|
||||
{
|
||||
if (orderId == 0)
|
||||
return false;
|
||||
|
||||
var currentVendor = await _workContext.GetCurrentVendorAsync();
|
||||
if (currentVendor == null)
|
||||
//not a vendor; has access
|
||||
return true;
|
||||
|
||||
var vendorId = currentVendor.Id;
|
||||
var hasVendorProducts = (await _orderService.GetOrderItemsAsync(orderId, vendorId: vendorId)).Any();
|
||||
|
||||
return hasVendorProducts;
|
||||
}
|
||||
|
||||
public CustomOrderController(FruitBankDbContext fruitBankDbContext,
|
||||
IOrderService orderService,
|
||||
IPriceCalculationService priceCalculationService,
|
||||
|
|
@ -80,7 +110,11 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
IWorkContext workContext,
|
||||
IEventPublisher eventPublisher,
|
||||
ILocalizationService localizationService,
|
||||
ICustomerActivityService customerActivityService)
|
||||
ICustomerActivityService customerActivityService,
|
||||
IExportManager exportManager,
|
||||
IGiftCardService giftCardService,
|
||||
IImportManager importManager,
|
||||
IDateTimeHelper dateTimeHelper)
|
||||
{
|
||||
_logger = new Logger<CustomOrderController>(logWriters.ToArray());
|
||||
|
||||
|
|
@ -99,6 +133,12 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
_eventPublisher = eventPublisher;
|
||||
_localizationService = localizationService;
|
||||
_customerActivityService = customerActivityService;
|
||||
|
||||
_exportManager = exportManager;
|
||||
_giftCardService = giftCardService;
|
||||
_importManager = importManager;
|
||||
_dateTimeHelper = dateTimeHelper;
|
||||
|
||||
// ... initialize other deps
|
||||
}
|
||||
|
||||
|
|
@ -688,6 +728,235 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
// }
|
||||
//}
|
||||
|
||||
|
||||
//THE REST
|
||||
|
||||
#region Export / Import
|
||||
|
||||
[HttpPost, ActionName("ExportXml")]
|
||||
[FormValueRequired("exportxml-all")]
|
||||
[CheckPermission(StandardPermission.Orders.ORDERS_IMPORT_EXPORT)]
|
||||
public virtual async Task<IActionResult> ExportXmlAll(OrderSearchModel model)
|
||||
{
|
||||
var startDateValue = model.StartDate == null ? null
|
||||
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.StartDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync());
|
||||
|
||||
var endDateValue = model.EndDate == null ? null
|
||||
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.EndDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync()).AddDays(1);
|
||||
|
||||
//a vendor should have access only to his products
|
||||
var currentVendor = await _workContext.GetCurrentVendorAsync();
|
||||
if (currentVendor != null)
|
||||
{
|
||||
model.VendorId = currentVendor.Id;
|
||||
}
|
||||
|
||||
var orderStatusIds = model.OrderStatusIds != null && !model.OrderStatusIds.Contains(0)
|
||||
? model.OrderStatusIds.ToList()
|
||||
: null;
|
||||
var paymentStatusIds = model.PaymentStatusIds != null && !model.PaymentStatusIds.Contains(0)
|
||||
? model.PaymentStatusIds.ToList()
|
||||
: null;
|
||||
var shippingStatusIds = model.ShippingStatusIds != null && !model.ShippingStatusIds.Contains(0)
|
||||
? model.ShippingStatusIds.ToList()
|
||||
: null;
|
||||
|
||||
var filterByProductId = 0;
|
||||
var product = await _productService.GetProductByIdAsync(model.ProductId);
|
||||
if (product != null && (currentVendor == null || product.VendorId == currentVendor.Id))
|
||||
filterByProductId = model.ProductId;
|
||||
|
||||
//load orders
|
||||
var orders = await _orderService.SearchOrdersAsync(storeId: model.StoreId,
|
||||
vendorId: model.VendorId,
|
||||
productId: filterByProductId,
|
||||
warehouseId: model.WarehouseId,
|
||||
paymentMethodSystemName: model.PaymentMethodSystemName,
|
||||
createdFromUtc: startDateValue,
|
||||
createdToUtc: endDateValue,
|
||||
osIds: orderStatusIds,
|
||||
psIds: paymentStatusIds,
|
||||
ssIds: shippingStatusIds,
|
||||
billingPhone: model.BillingPhone,
|
||||
billingEmail: model.BillingEmail,
|
||||
billingLastName: model.BillingLastName,
|
||||
billingCountryId: model.BillingCountryId,
|
||||
orderNotes: model.OrderNotes);
|
||||
|
||||
//ensure that we at least one order selected
|
||||
if (!orders.Any())
|
||||
{
|
||||
_notificationService.ErrorNotification(await _localizationService.GetResourceAsync("Admin.Orders.NoOrders"));
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var xml = await _exportManager.ExportOrdersToXmlAsync(orders);
|
||||
return File(Encoding.UTF8.GetBytes(xml), MimeTypes.ApplicationXml, "orders.xml");
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
await _notificationService.ErrorNotificationAsync(exc);
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[CheckPermission(StandardPermission.Orders.ORDERS_IMPORT_EXPORT)]
|
||||
public virtual async Task<IActionResult> ExportXmlSelected(string selectedIds)
|
||||
{
|
||||
var orders = new List<Order>();
|
||||
if (selectedIds != null)
|
||||
{
|
||||
var ids = selectedIds
|
||||
.Split(_separator, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(x => Convert.ToInt32(x))
|
||||
.ToArray();
|
||||
orders.AddRange(await (await _orderService.GetOrdersByIdsAsync(ids))
|
||||
.WhereAwait(HasAccessToOrderAsync).ToListAsync());
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var xml = await _exportManager.ExportOrdersToXmlAsync(orders);
|
||||
return File(Encoding.UTF8.GetBytes(xml), MimeTypes.ApplicationXml, "orders.xml");
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
await _notificationService.ErrorNotificationAsync(exc);
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost, ActionName("ExportExcel")]
|
||||
[FormValueRequired("exportexcel-all")]
|
||||
[CheckPermission(StandardPermission.Orders.ORDERS_IMPORT_EXPORT)]
|
||||
public virtual async Task<IActionResult> ExportExcelAll(OrderSearchModel model)
|
||||
{
|
||||
var startDateValue = model.StartDate == null ? null
|
||||
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.StartDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync());
|
||||
|
||||
var endDateValue = model.EndDate == null ? null
|
||||
: (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.EndDate.Value, await _dateTimeHelper.GetCurrentTimeZoneAsync()).AddDays(1);
|
||||
|
||||
//a vendor should have access only to his products
|
||||
var currentVendor = await _workContext.GetCurrentVendorAsync();
|
||||
if (currentVendor != null)
|
||||
{
|
||||
model.VendorId = currentVendor.Id;
|
||||
}
|
||||
|
||||
var orderStatusIds = model.OrderStatusIds != null && !model.OrderStatusIds.Contains(0)
|
||||
? model.OrderStatusIds.ToList()
|
||||
: null;
|
||||
var paymentStatusIds = model.PaymentStatusIds != null && !model.PaymentStatusIds.Contains(0)
|
||||
? model.PaymentStatusIds.ToList()
|
||||
: null;
|
||||
var shippingStatusIds = model.ShippingStatusIds != null && !model.ShippingStatusIds.Contains(0)
|
||||
? model.ShippingStatusIds.ToList()
|
||||
: null;
|
||||
|
||||
var filterByProductId = 0;
|
||||
var product = await _productService.GetProductByIdAsync(model.ProductId);
|
||||
if (product != null && (currentVendor == null || product.VendorId == currentVendor.Id))
|
||||
filterByProductId = model.ProductId;
|
||||
|
||||
//load orders
|
||||
var orders = await _orderService.SearchOrdersAsync(storeId: model.StoreId,
|
||||
vendorId: model.VendorId,
|
||||
productId: filterByProductId,
|
||||
warehouseId: model.WarehouseId,
|
||||
paymentMethodSystemName: model.PaymentMethodSystemName,
|
||||
createdFromUtc: startDateValue,
|
||||
createdToUtc: endDateValue,
|
||||
osIds: orderStatusIds,
|
||||
psIds: paymentStatusIds,
|
||||
ssIds: shippingStatusIds,
|
||||
billingPhone: model.BillingPhone,
|
||||
billingEmail: model.BillingEmail,
|
||||
billingLastName: model.BillingLastName,
|
||||
billingCountryId: model.BillingCountryId,
|
||||
orderNotes: model.OrderNotes);
|
||||
|
||||
//ensure that we at least one order selected
|
||||
if (!orders.Any())
|
||||
{
|
||||
_notificationService.ErrorNotification(await _localizationService.GetResourceAsync("Admin.Orders.NoOrders"));
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var bytes = await _exportManager.ExportOrdersToXlsxAsync(orders);
|
||||
return File(bytes, MimeTypes.TextXlsx, "orders.xlsx");
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
await _notificationService.ErrorNotificationAsync(exc);
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[CheckPermission(StandardPermission.Orders.ORDERS_IMPORT_EXPORT)]
|
||||
public virtual async Task<IActionResult> ExportExcelSelected(string selectedIds)
|
||||
{
|
||||
var orders = new List<Order>();
|
||||
if (selectedIds != null)
|
||||
{
|
||||
var ids = selectedIds
|
||||
.Split(_separator, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(x => Convert.ToInt32(x))
|
||||
.ToArray();
|
||||
orders.AddRange(await (await _orderService.GetOrdersByIdsAsync(ids)).WhereAwait(HasAccessToOrderAsync).ToListAsync());
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var bytes = await _exportManager.ExportOrdersToXlsxAsync(orders);
|
||||
return File(bytes, MimeTypes.TextXlsx, "orders.xlsx");
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
await _notificationService.ErrorNotificationAsync(exc);
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[CheckPermission(StandardPermission.Orders.ORDERS_IMPORT_EXPORT)]
|
||||
public virtual async Task<IActionResult> ImportFromXlsx(IFormFile importexcelfile)
|
||||
{
|
||||
//a vendor cannot import orders
|
||||
if (await _workContext.GetCurrentVendorAsync() != null)
|
||||
return AccessDeniedView();
|
||||
|
||||
try
|
||||
{
|
||||
if (importexcelfile != null && importexcelfile.Length > 0)
|
||||
{
|
||||
await _importManager.ImportOrdersFromXlsxAsync(importexcelfile.OpenReadStream());
|
||||
}
|
||||
else
|
||||
{
|
||||
_notificationService.ErrorNotification(await _localizationService.GetResourceAsync("Admin.Common.UploadFile"));
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
|
||||
_notificationService.SuccessNotification(await _localizationService.GetResourceAsync("Admin.Orders.Imported"));
|
||||
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
await _notificationService.ErrorNotificationAsync(exc);
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
|
|||
private readonly string _password;
|
||||
private readonly string _baseUrl;
|
||||
|
||||
public InnVoiceOrderService(string companyName = "apiteszt", string username = "apiteszt", string password = "dsjfluio4324hjhjfdhkjskjh213kjgsd", string baseUrl = "https://api.innvoice.hu")
|
||||
public InnVoiceOrderService(string companyName = "fruitbank", string username = "fruitbank", string password = "YkKzM1dwJax0HTIPWIMABSqdSA", string baseUrl = "https://api.innvoice.hu")
|
||||
{
|
||||
_companyName = companyName ?? throw new ArgumentNullException(nameof(companyName));
|
||||
_username = username ?? throw new ArgumentNullException(nameof(username));
|
||||
|
|
@ -54,6 +54,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
|
|||
try
|
||||
{
|
||||
var response = await _httpClient.PostAsync(url, content);
|
||||
Console.WriteLine($"InnVoice API CreateOrdersAsync response status: {response.StatusCode}");
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var responseContent = await response.Content.ReadAsStringAsync();
|
||||
|
|
|
|||
Loading…
Reference in New Issue