Mango.Nop.Plugins/Nop.Plugin.Misc.AIPlugin/Services/IOrderDraftService.cs

57 lines
2.4 KiB
C#

using FruitBank.Common.Entities;
using FruitBank.Common.Enums;
namespace Nop.Plugin.Misc.FruitBankPlugin.Services;
public interface IOrderDraftService
{
/// <summary>
/// Egy bejövő szöveges üzenet alapján létrehozza a rendelés tervezet(eke)t.
/// Ha az üzenetben több különböző szállítási dátum szerepel, minden dátumhoz külön draft jön létre.
/// </summary>
Task<List<OrderDraft>> CreateDraftsFromMessageAsync(string externalUsername, string rawMessageText);
/// <summary>Egy draft betöltése tételeivel együtt.</summary>
Task<OrderDraft?> GetByIdAsync(int id, bool loadRelations = true);
/// <summary>Pending draftek listája, opcionálisan szűrve partner szerint.</summary>
Task<List<OrderDraft>> GetPendingAsync(int? customerId = null);
/// <summary>Összes draft lapozhatóan (admin lista).</summary>
Task<(List<OrderDraft> Items, int TotalCount)> GetPagedAsync(
int pageIndex, int pageSize,
OrderDraftStatus? status = null,
int? customerId = null);
/// <summary>
/// Admin jóváhagyja a draftot: minden tétel SelectedProductId-ja be kell legyen állítva.
/// A dátumtól függően PreOrder vagy Order jön létre.
/// Menti a ProductTextMapping rekordokat a tanuláshoz.
/// </summary>
Task<OrderDraftApproveResult> ApproveAsync(int draftId, int adminId);
/// <summary>Admin elutasítja a draftot.</summary>
Task RejectAsync(int draftId, int adminId, string? adminNote = null);
/// <summary>Admin hozzárendeli a partnert egy mappingból még hiányzó drafthoz.</summary>
Task AssignCustomerAsync(int draftId, int customerId, int adminId);
/// <summary>Admin frissíti egy tétel kiválasztott termékét és/vagy mennyiségét.</summary>
Task UpdateDraftItemAsync(int draftItemId, int selectedProductId, int quantity);
/// <summary>14 napnál régebbi pending draftek automatikus lejáratása (background job hívja).</summary>
Task ExpireOldDraftsAsync();
}
public class OrderDraftApproveResult
{
public bool Success { get; set; }
public string? ErrorMessage { get; set; }
/// <summary>A létrehozott PreOrder ID-k (ha előrendelés lett).</summary>
public List<int> PreOrderIds { get; set; } = [];
/// <summary>A létrehozott Order ID-k (ha azonnali rendelés lett).</summary>
public List<int> OrderIds { get; set; } = [];
}