Invoice fixes

This commit is contained in:
Loretta 2025-10-23 12:32:15 +02:00
parent 16dbfb18e2
commit 41422340c8
4 changed files with 63 additions and 54 deletions

View File

@ -1,5 +1,4 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Nop.Core;
using Nop.Core.Domain.Orders;
using Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer;
@ -103,7 +102,7 @@ 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.
Devizanem = "Ft", //TODO get real deault - A.
FizetesiMod = order.PaymentMethodSystemName ?? "átutalás",
Email = billingAddress.Email,
Telefon = billingAddress.PhoneNumber,
@ -315,7 +314,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
MegrendelestombID = 1,
MegrendelesKelte = order.CreatedOnUtc.ToLocalTime(),
Hatarido = DateTime.Now.AddDays(7),
Devizanem = order.CustomerCurrencyCode,
Devizanem = "Ft",
FizetesiMod = order.PaymentMethodSystemName,
Email = billingAddress.Email,
Telefon = billingAddress.PhoneNumber,
@ -349,53 +348,60 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
// Create orders via API
var responses = await _innVoiceOrderService.CreateOrdersAsync(orderRequests);
var successCount = responses.Count(r => r.IsSuccess);
var failureCount = responses.Count - successCount;
// Save TechIds for successful orders
var storeId = (await _storeContext.GetCurrentStoreAsync()).Id;
for (int i = 0; i < responses.Count && i < orderIds.Length; i++)
if (responses != null)
{
if (responses[i].IsSuccess)
{
var order = await _orderService.GetOrderByIdAsync(orderIds[i]);
if (order != null)
{
await _genericAttributeService.SaveAttributeAsync(
order,
"InnVoiceOrderTechId",
responses[i].TechId,
storeId
);
var successCount = responses.Count(r => r.IsSuccess);
var failureCount = responses.Count - successCount;
await _genericAttributeService.SaveAttributeAsync(
order,
"InnVoiceOrderTableId",
responses[i].TableId?.ToString(),
storeId
);
// Save TechIds for successful orders
var storeId = (await _storeContext.GetCurrentStoreAsync()).Id;
for (int i = 0; i < responses.Count && i < orderIds.Length; i++)
{
if (responses[i].IsSuccess)
{
var order = await _orderService.GetOrderByIdAsync(orderIds[i]);
if (order != null)
{
await _genericAttributeService.SaveAttributeAsync(
order,
"InnVoiceOrderTechId",
responses[i].TechId,
storeId
);
await _genericAttributeService.SaveAttributeAsync(
order,
"InnVoiceOrderTableId",
responses[i].TableId?.ToString(),
storeId
);
}
}
}
}
return Json(new
{
success = successCount > 0,
message = $"Created {successCount} orders successfully. {failureCount} failed.",
data = new
return Json(new
{
successCount,
failureCount,
responses = responses.Select(r => new
success = successCount > 0,
message = $"Created {successCount} orders successfully. {failureCount} failed.",
data = new
{
success = r.IsSuccess,
tableId = r.TableId,
techId = r.TechId,
message = r.Message,
printUrl = r.PrintUrl
})
}
});
successCount,
failureCount,
responses = responses.Select(r => new
{
success = r.IsSuccess,
tableId = r.TableId,
techId = r.TechId,
message = r.Message,
printUrl = r.PrintUrl
})
}
});
}
else
{
throw new Exception($"InvoiceOrderAPi invalid response");
}
}
catch (Exception ex)
{

View File

@ -1,4 +1,5 @@

using AyCode.Utils.Extensions;
using Microsoft.AspNetCore.Mvc;
using Nop.Core;
using Nop.Core.Domain.Orders;
@ -82,8 +83,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Areas.Admin.Controllers
SzamlaKelte = DateTime.Now,
TeljesitesKelte = DateTime.Now,
Hatarido = DateTime.Now.AddDays(15), // 15 days payment term
Devizanem = order.CustomerCurrencyCode,
FizetesiMod = order.PaymentMethodSystemName,
Devizanem = "Ft",
FizetesiMod = order.PaymentMethodSystemName.IsNullOrWhiteSpace() ? "Átutalás" : order.PaymentMethodSystemName,
Felretett = false,
Proforma = true,
Email = billingAddress.Email,

View File

@ -41,7 +41,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
/// <summary>
/// Create one or more orders
/// </summary>
public async Task<List<OrderCreateResponse>> CreateOrdersAsync(List<OrderCreateRequest> orders)
public async Task<List<OrderCreateResponse>?> CreateOrdersAsync(List<OrderCreateRequest> orders)
{
var url = $"{_baseUrl}/{_companyName}/order";
@ -55,7 +55,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
{
var response = await _httpClient.PostAsync(url, content);
response.EnsureSuccessStatusCode();
var responseContent = await response.Content.ReadAsStringAsync();
return ParseOrderResponses(responseContent);
}
@ -71,7 +71,9 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
public async Task<OrderCreateResponse> CreateOrderAsync(OrderCreateRequest order)
{
var responses = await CreateOrdersAsync(new List<OrderCreateRequest> { order });
return responses.FirstOrDefault();
if (responses != null && responses.Count != 1) throw new Exception($"InvoiceOrderApi responses.Count != 1!");
return responses?.FirstOrDefault() ?? new OrderCreateResponse();
}
private string BuildOrdersXml(List<OrderCreateRequest> orders)
@ -143,7 +145,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
return new XDeclaration("1.0", "UTF-8", null).ToString() + "\n" + ordersElement.ToString();
}
private List<OrderCreateResponse> ParseOrderResponses(string xml)
private List<OrderCreateResponse>? ParseOrderResponses(string xml)
{
var responses = new List<OrderCreateResponse>();
@ -171,7 +173,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
throw new InnVoiceApiException($"Error parsing order response XML: {ex.Message}", ex);
}
return responses;
return responses.Count == 0 ? null : responses;
}
/// <summary>

View File

@ -65,12 +65,12 @@
<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 class="form-group row">
<div class="col-md-3 text-right">
<strong>Mérés információ</strong>
</div>
<div class="col-md-9">
<nop-editor asp-for="IsMeasurable" asp-template="" />
@(Model.IsMeasurable ? "Mérendő" : "Nem mérendő")
</div>
</div>
<div class="form-group row">