Compare commits
No commits in common. "16dbfb18e23ec407661b2b120b9783f632eb524f" and "705d43061d01851f6f815ca6bdbd839ec7dbf824" have entirely different histories.
16dbfb18e2
...
705d43061d
|
|
@ -9,7 +9,6 @@ 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;
|
||||
|
|
@ -50,13 +49,11 @@ 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, IStoreContext storeContext, IWorkContext workContext)
|
||||
public CustomOrderController(FruitBankDbContext fruitBankDbContext, IOrderService orderService, IOrderModelFactory orderModelFactory, ICustomOrderSignalREndpointServer customOrderSignalREndpoint, IPermissionService permissionService, IGenericAttributeService genericAttributeService, INotificationService notificationService, ICustomerService customerService, IProductService productService, IEnumerable<IAcLogWriterBase> logWriters)
|
||||
{
|
||||
_logger = new Logger<CustomOrderController>(logWriters.ToArray());
|
||||
|
||||
|
|
@ -69,8 +66,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
_notificationService = notificationService;
|
||||
_customerService = customerService;
|
||||
_productService = productService;
|
||||
_storeContext = storeContext;
|
||||
_workContext = workContext;
|
||||
// ... initialize other deps
|
||||
}
|
||||
|
||||
|
|
@ -157,8 +152,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, _storeContext.GetCurrentStore().Id);
|
||||
await _genericAttributeService.SaveAttributeAsync(order, nameof(IOrderDto.DateOfReceipt), model.DateOfReceipt, _storeContext.GetCurrentStore().Id);
|
||||
await _genericAttributeService.SaveAttributeAsync(order, nameof(IMeasurable.IsMeasurable), model.IsMeasurable);
|
||||
await _genericAttributeService.SaveAttributeAsync(order, nameof(IOrderDto.DateOfReceipt), model.DateOfReceipt);
|
||||
|
||||
_notificationService.SuccessNotification("Custom attributes saved successfully.");
|
||||
|
||||
|
|
@ -176,29 +171,6 @@ 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);
|
||||
|
||||
|
|
@ -216,9 +188,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
ShippingStatus = ShippingStatus.ShippingNotRequired,
|
||||
CreatedOnUtc = DateTime.UtcNow,
|
||||
BillingAddressId = customer.BillingAddressId ?? 0,
|
||||
ShippingAddressId = customer.ShippingAddressId,
|
||||
PaymentMethodSystemName = "Payments.CheckMoneyOrder", // Default payment method
|
||||
CustomerCurrencyCode = "HUF", // TODO: GET Default currency - A.
|
||||
ShippingAddressId = customer.ShippingAddressId
|
||||
};
|
||||
|
||||
var productDtosById = await _dbContext.ProductDtos.GetAllByIds(orderProducts.Select(op => op.Id)).ToDictionaryAsync(p => p.Id, prodDto => prodDto);
|
||||
|
|
@ -380,16 +350,10 @@ 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();
|
||||
|
|
@ -398,22 +362,13 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
foreach (var customer in allCustomers)
|
||||
{
|
||||
var fullName = await _customerService.GetCustomerFullNameAsync(customer);
|
||||
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;
|
||||
var displayText = !string.IsNullOrEmpty(customer.Email)
|
||||
? $"{customer.Email} ({fullName})"
|
||||
: fullName;
|
||||
|
||||
result.Add(new
|
||||
{
|
||||
label = fullText,
|
||||
label = displayText,
|
||||
value = customer.Id
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Nop.Core;
|
||||
using Nop.Core.Domain.Orders;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer;
|
||||
using Nop.Plugin.Misc.FruitBankPlugin.Services;
|
||||
using Nop.Services.Catalog;
|
||||
using Nop.Services.Common;
|
||||
|
|
@ -31,7 +29,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
private readonly IProductService _productService;
|
||||
private readonly InnVoiceOrderService _innVoiceOrderService;
|
||||
private readonly IGenericAttributeService _genericAttributeService;
|
||||
private readonly FruitBankDbContext _dbContext;
|
||||
|
||||
public InnVoiceOrderController(
|
||||
IOrderService orderService,
|
||||
|
|
@ -41,8 +38,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
ICountryService countryService,
|
||||
IProductService productService,
|
||||
InnVoiceOrderService innVoiceOrderService,
|
||||
IGenericAttributeService genericAttributeService,
|
||||
FruitBankDbContext dbContext)
|
||||
IGenericAttributeService genericAttributeService)
|
||||
{
|
||||
_orderService = orderService;
|
||||
_workContext = workContext;
|
||||
|
|
@ -52,7 +48,6 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
_productService = productService;
|
||||
_innVoiceOrderService = innVoiceOrderService;
|
||||
_genericAttributeService = genericAttributeService;
|
||||
_dbContext = dbContext;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -80,16 +75,10 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
|
||||
// Get shipping address
|
||||
var shippingAddress = await _customerService.GetCustomerShippingAddressAsync(customer);
|
||||
|
||||
if (shippingAddress == null)
|
||||
{
|
||||
shippingAddress = billingAddress;
|
||||
}
|
||||
|
||||
var shippingCountry = shippingAddress != null
|
||||
? await _countryService.GetCountryByAddressAsync(shippingAddress)
|
||||
: null;
|
||||
var shippingCountryCode = shippingCountry?.TwoLetterIsoCode ?? billingCountryCode;
|
||||
var shippingCountryCode = shippingCountry?.TwoLetterIsoCode ?? billingCountryCode;
|
||||
|
||||
// Create order request
|
||||
var orderRequest = new OrderCreateRequest
|
||||
|
|
@ -103,8 +92,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
MegrendelestombID = 1, // Configure this based on your setup
|
||||
MegrendelesKelte = order.CreatedOnUtc.ToLocalTime(),
|
||||
Hatarido = DateTime.Now.AddDays(7), // 7 days delivery time
|
||||
Devizanem = "HUF", //TODO get real deault - A.
|
||||
FizetesiMod = order.PaymentMethodSystemName ?? "átutalás",
|
||||
Devizanem = order.CustomerCurrencyCode,
|
||||
FizetesiMod = order.PaymentMethodSystemName,
|
||||
Email = billingAddress.Email,
|
||||
Telefon = billingAddress.PhoneNumber,
|
||||
MegrendelesSzamStr = order.Id.ToString()
|
||||
|
|
@ -124,10 +113,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
var orderItems = await _orderService.GetOrderItemsAsync(order.Id);
|
||||
foreach (var item in orderItems)
|
||||
{
|
||||
//var productDTO = await _productService.GetProductByIdAsync(item.ProductId);
|
||||
var product = _dbContext.ProductDtos.GetById(item.ProductId);
|
||||
//string unit = product != null && product.IsMeasurable ? "kg" : "kt";
|
||||
|
||||
var product = await _productService.GetProductByIdAsync(item.ProductId);
|
||||
|
||||
orderRequest.AddItem(new InnVoiceOrderItem
|
||||
{
|
||||
TetelNev = product?.Name ?? "Product",
|
||||
|
|
@ -135,8 +122,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
|
|||
Brutto = true,
|
||||
EgysegAr = item.UnitPriceInclTax,
|
||||
Mennyiseg = item.Quantity,
|
||||
MennyisegEgyseg = "kt",
|
||||
CikkSzam = ""
|
||||
MennyisegEgyseg = "db",
|
||||
CikkSzam = product?.Sku
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -379,7 +379,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 partner information from this document, and return them as JSON: name, taxId, certificationNumber, postalCode, country, state, county, city, street. " +
|
||||
string partnerAnalysisPrompt = "Extract the sender 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,6 +9,8 @@
|
|||
</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>
|
||||
|
|
@ -60,33 +62,31 @@
|
|||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 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 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="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 class="col-md-9">
|
||||
<nop-editor asp-for="IsMeasurable" />
|
||||
<span asp-validation-for="IsMeasurable"></span>
|
||||
</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>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -94,6 +94,9 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
var createOrderUrl = '/Admin/InnVoiceOrder/CreateOrder';
|
||||
|
|
@ -104,19 +107,8 @@
|
|||
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 (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
$("#saveAttributesBtn").click(function () {
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: "@Url.Action("SaveOrderAttributes", "CustomOrder")",
|
||||
|
|
@ -133,8 +125,6 @@
|
|||
alert("Error saving attributes");
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
// ========== ORDER MANAGEMENT ==========
|
||||
|
|
@ -407,4 +397,4 @@
|
|||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public class PluginNopStartup : INopStartup
|
|||
feature.AddPolicy(
|
||||
"AllowBlazorClient",
|
||||
apiPolicy => apiPolicy
|
||||
.WithOrigins(["https://localhost:7144", "measuringtest.fruitbank.hu", "https://localhost:60589"])
|
||||
.WithOrigins("https://localhost:7144")
|
||||
.AllowAnyHeader()
|
||||
.AllowAnyMethod()
|
||||
.AllowCredentials()
|
||||
|
|
|
|||
Loading…
Reference in New Issue