merge + small fixes
This commit is contained in:
parent
9cb032db3d
commit
2de0ec7fb0
|
|
@ -9,6 +9,7 @@ using Mango.Nop.Core.Extensions;
|
|||
using Mango.Nop.Core.Loggers;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Newtonsoft.Json;
|
||||
using Nop.Core;
|
||||
using Nop.Core.Domain.Customers;
|
||||
using Nop.Core.Domain.Orders;
|
||||
using Nop.Core.Domain.Payments;
|
||||
|
|
@ -49,11 +50,13 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
private readonly INotificationService _notificationService;
|
||||
private readonly ICustomerService _customerService;
|
||||
private readonly IProductService _productService;
|
||||
private readonly IStoreContext _storeContext;
|
||||
private readonly IWorkContext _workContext;
|
||||
// ... other dependencies
|
||||
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public CustomOrderController(FruitBankDbContext fruitBankDbContext, IOrderService orderService, IOrderModelFactory orderModelFactory, ICustomOrderSignalREndpointServer customOrderSignalREndpoint, IPermissionService permissionService, IGenericAttributeService genericAttributeService, INotificationService notificationService, ICustomerService customerService, IProductService productService, IEnumerable<IAcLogWriterBase> logWriters)
|
||||
public CustomOrderController(FruitBankDbContext fruitBankDbContext, IOrderService orderService, IOrderModelFactory orderModelFactory, ICustomOrderSignalREndpointServer customOrderSignalREndpoint, IPermissionService permissionService, IGenericAttributeService genericAttributeService, INotificationService notificationService, ICustomerService customerService, IProductService productService, IEnumerable<IAcLogWriterBase> logWriters, IStoreContext storeContext, IWorkContext workContext)
|
||||
{
|
||||
_logger = new Logger<CustomOrderController>(logWriters.ToArray());
|
||||
|
||||
|
|
@ -66,6 +69,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
_notificationService = notificationService;
|
||||
_customerService = customerService;
|
||||
_productService = productService;
|
||||
_storeContext = storeContext;
|
||||
_workContext = workContext;
|
||||
// ... initialize other deps
|
||||
}
|
||||
|
||||
|
|
@ -152,8 +157,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
return RedirectToAction("List", "Order");
|
||||
|
||||
// store attributes in GenericAttribute table
|
||||
await _genericAttributeService.SaveAttributeAsync(order, nameof(IMeasurable.IsMeasurable), model.IsMeasurable);
|
||||
await _genericAttributeService.SaveAttributeAsync(order, nameof(IOrderDto.DateOfReceipt), model.DateOfReceipt);
|
||||
await _genericAttributeService.SaveAttributeAsync(order, nameof(IMeasurable.IsMeasurable), model.IsMeasurable, _storeContext.GetCurrentStore().Id);
|
||||
await _genericAttributeService.SaveAttributeAsync(order, nameof(IOrderDto.DateOfReceipt), model.DateOfReceipt, _storeContext.GetCurrentStore().Id);
|
||||
|
||||
_notificationService.SuccessNotification("Custom attributes saved successfully.");
|
||||
|
||||
|
|
@ -171,6 +176,29 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
var customer = await _customerService.GetCustomerByIdAsync(customerId);
|
||||
if (customer == null) return RedirectToAction("List");
|
||||
|
||||
var billingAddress = await _customerService.GetCustomerBillingAddressAsync(customer);
|
||||
if(billingAddress == null)
|
||||
{
|
||||
//let's see if he has any address at all
|
||||
var addresses = await _customerService.GetAddressesByCustomerIdAsync(customer.Id);
|
||||
if(addresses != null && addresses.Count > 0)
|
||||
{
|
||||
//set the first one as billing
|
||||
billingAddress = addresses[0];
|
||||
customer.BillingAddressId = billingAddress.Id;
|
||||
await _customerService.UpdateCustomerAsync(customer);
|
||||
}
|
||||
else
|
||||
{
|
||||
//no address at all, cannot create order
|
||||
_logger.Error($"Cannot create order for customer {customer.Id}, no billing address found.");
|
||||
return RedirectToAction("List");
|
||||
}
|
||||
}
|
||||
|
||||
//var currency = await _workContext.GetWorkingCurrencyAsync();
|
||||
//customer.CurrencyId = currency.Id;
|
||||
|
||||
// Parse products
|
||||
var orderProducts = string.IsNullOrEmpty(orderProductsJson) ? [] : JsonConvert.DeserializeObject<List<OrderProductItem>>(orderProductsJson);
|
||||
|
||||
|
|
@ -188,7 +216,9 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
ShippingStatus = ShippingStatus.ShippingNotRequired,
|
||||
CreatedOnUtc = DateTime.UtcNow,
|
||||
BillingAddressId = customer.BillingAddressId ?? 0,
|
||||
ShippingAddressId = customer.ShippingAddressId
|
||||
ShippingAddressId = customer.ShippingAddressId,
|
||||
PaymentMethodSystemName = "Payments.CheckMoneyOrder", // Default payment method
|
||||
CustomerCurrencyCode = "HUF", // TODO: GET Default currency - A.
|
||||
};
|
||||
|
||||
var productDtosById = await _dbContext.ProductDtos.GetAllByIds(orderProducts.Select(op => op.Id)).ToDictionaryAsync(p => p.Id, prodDto => prodDto);
|
||||
|
|
@ -350,10 +380,16 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
pageIndex: 0,
|
||||
pageSize: maxResults);
|
||||
|
||||
var customersByCompanyName = await _customerService.GetAllCustomersAsync(
|
||||
company: term,
|
||||
pageIndex: 0,
|
||||
pageSize: maxResults);
|
||||
|
||||
// Combine and deduplicate results
|
||||
var allCustomers = customersByEmail
|
||||
.Union(customersByFirstName)
|
||||
.Union(customersByLastName)
|
||||
.Union(customersByCompanyName)
|
||||
.DistinctBy(c => c.Id)
|
||||
.Take(maxResults)
|
||||
.ToList();
|
||||
|
|
@ -362,13 +398,22 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
foreach (var customer in allCustomers)
|
||||
{
|
||||
var fullName = await _customerService.GetCustomerFullNameAsync(customer);
|
||||
var displayText = !string.IsNullOrEmpty(customer.Email)
|
||||
? $"{customer.Email} ({fullName})"
|
||||
: fullName;
|
||||
var company = customer.Company;
|
||||
|
||||
if (string.IsNullOrEmpty(fullName))
|
||||
fullName = "[No name]";
|
||||
if(string.IsNullOrEmpty(company))
|
||||
company = "[No company]";
|
||||
|
||||
string fullText = $"{company} ({fullName}), {customer.Email}";
|
||||
|
||||
//var displayText = !string.IsNullOrEmpty(customer.Email)
|
||||
// ? $"{customer.Email}, {customer.Company} ({fullName})"
|
||||
// : fullName;
|
||||
|
||||
result.Add(new
|
||||
{
|
||||
label = displayText,
|
||||
label = fullText,
|
||||
value = customer.Id
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -381,7 +381,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
// save partner information to partners table { Id, Name, TaxId, CertificationNumber, PostalCode, Country, State, County, City, Street }
|
||||
if (partnerId != null)
|
||||
{
|
||||
string partnerAnalysisPrompt = "Extract the sender information from this document, and return them as JSON: name, taxId, certificationNumber, postalCode, country, state, county, city, street. " +
|
||||
string partnerAnalysisPrompt = "Extract the partner information from this document, and return them as JSON: name, taxId, certificationNumber, postalCode, country, state, county, city, street. " +
|
||||
"If you can't find information of any of these, return null value for that field.";
|
||||
|
||||
//here I can start preparing the file entity
|
||||
|
|
|
|||
|
|
@ -9,8 +9,6 @@
|
|||
</div>
|
||||
<div class="card-body">
|
||||
<!-- Order Subsection -->
|
||||
|
||||
|
||||
<div class="form-group row">
|
||||
<div class="col-12 col-md-3">
|
||||
<h5><i class="fas fa-shopping-cart"></i> Order</h5>
|
||||
|
|
@ -62,31 +60,33 @@
|
|||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-12">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="IsMeasurable" />
|
||||
|
||||
<!-- Attributes Section (NO FORM TAG - just a div) -->
|
||||
<div id="orderAttributesSection">
|
||||
<div class="form-group row">
|
||||
<div class="col-12">
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="IsMeasurable" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="IsMeasurable" asp-template="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="IsMeasurable" />
|
||||
<span asp-validation-for="IsMeasurable"></span>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="DateOfReceipt" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="DateOfReceipt" asp-template="" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-3">
|
||||
<nop-label asp-for="DateOfReceipt" />
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<nop-editor asp-for="DateOfReceipt" />
|
||||
<span asp-validation-for="DateOfReceipt"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="button" id="saveAttributesBtn" class="btn btn-primary">
|
||||
<i class="fa fa-save"></i> Save Attributes
|
||||
</button>
|
||||
<div class="form-group row">
|
||||
<div class="col-md-12 text-right">
|
||||
<button type="button" id="saveAttributesBtn" class="btn btn-primary">
|
||||
<i class="fa fa-save"></i> Save Attributes
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -94,9 +94,6 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
var createOrderUrl = '/Admin/InnVoiceOrder/CreateOrder';
|
||||
|
|
@ -107,8 +104,19 @@
|
|||
var orderExists = false;
|
||||
var invoiceExists = false;
|
||||
|
||||
// Remove validation from these specific fields
|
||||
$('#@Html.IdFor(m => m.IsMeasurable)').rules('remove');
|
||||
$('#@Html.IdFor(m => m.DateOfReceipt)').rules('remove');
|
||||
|
||||
// Also set data-val to false
|
||||
$('#@Html.IdFor(m => m.IsMeasurable)').attr('data-val', 'false');
|
||||
$('#@Html.IdFor(m => m.DateOfReceipt)').attr('data-val', 'false');
|
||||
|
||||
// Save Order Attributes
|
||||
$("#saveAttributesBtn").click(function () {
|
||||
$("#saveAttributesBtn").click(function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "@Url.Action("SaveOrderAttributes", "CustomOrder")",
|
||||
|
|
@ -125,6 +133,8 @@
|
|||
alert("Error saving attributes");
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
// ========== ORDER MANAGEMENT ==========
|
||||
|
|
@ -397,4 +407,4 @@
|
|||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
|
@ -24,7 +24,7 @@ public class PluginNopStartup : INopStartup
|
|||
feature.AddPolicy(
|
||||
"AllowBlazorClient",
|
||||
apiPolicy => apiPolicy
|
||||
.WithOrigins("https://localhost:7144")
|
||||
.WithOrigins(["https://localhost:7144", "measuringtest.fruitbank.hu", "https://localhost:60589"])
|
||||
.AllowAnyHeader()
|
||||
.AllowAnyMethod()
|
||||
.AllowCredentials()
|
||||
|
|
|
|||
Loading…
Reference in New Issue