namespace EgwCoreLib.Lux.Data.Repository.Sales
{
///
/// Interfaccia per la gestione degli ordini.
///
public interface IOrderRepository : IBaseRepository
{
///
/// Inserisce un nuovo ordine nel database.
///
/// L'ordine da inserire.
/// True se l'inserimento ha successo, false altrimenti.
Task AddAsync(OrderModel entity);
///
/// Esegue il cloning completo di un'Offerta e di tutte le relative righe.
///
/// L'offerta da clonare.
/// L'ordine creato, o null se l'offerta non esiste.
Task CloneOfferAsync(OfferModel rec2clone);
///
/// Elimina un ordine dal database.
///
/// L'ordine da eliminare.
/// True se l'eliminazione ha successo, false altrimenti.
Task DeleteAsync(OrderModel entity);
///
/// Recupera l'elenco di tutti gli ordini.
///
/// L'elenco di tutti gli ordini con clienti, rivenditori e righe associate.
Task> GetAllAsync();
///
/// Recupera l'elenco degli elementi BOM (Bill of Materials) utilizzati negli ordini.
///
/// L'elenco degli elementi BOM.
Task> GetBomItemsAsync();
///
/// Recupera un ordine per il suo identificatore.
///
/// L'identificatore dell'ordine.
/// L'ordine corrispondente, o null se non esiste.
Task GetByIdAsync(int recId);
///
/// Recupera gli ordini inseriti in un intervallo di date specifico.
///
/// La data di inizio del periodo.
/// La data di fine del periodo.
/// L'elenco degli ordini nell'intervallo specificato.
Task> GetFiltAsync(DateTime inizio, DateTime fine);
///
/// Recupera l'elenco dei gruppi di articoli.
///
/// L'elenco dei gruppi di articoli.
Task> GetItemGroupsAsync();
///
/// Recupera le righe dell'ordine per un ordine specifico.
///
/// L'identificatore dell'ordine.
/// L'elenco delle righe dell'ordine.
Task> GetRowsAsync(int recId);
///
/// Aggiorna in batch le righe di un ordine.
///
/// L'elenco delle righe da aggiornare.
/// True se l'aggiornamento ha successo, false altrimenti.
Task SaveRowsAsync(List rows);
///
/// Aggiorna un ordine esistente nel database.
///
/// L'ordine aggiornato.
/// True se l'aggiornamento ha successo, false altrimenti.
Task UpdateAsync(OrderModel entity);
}
}