namespace EgwCoreLib.Lux.Data.Repository.Sales
{
///
/// Interfaccia per la gestione delle offerte.
///
public interface IOfferRepository : IBaseRepository
{
///
/// Inserisce una nuova offerta nel database.
///
/// L'offerta da inserire.
/// True se l'inserimento ha successo, false altrimenti.
Task AddAsync(OfferModel entity);
///
/// Segna come scadute le offerte la cui data di validità è passata e che sono ancora aperte.
///
/// True se almeno un'offerta è stata aggiornata, false altrimenti.
Task CheckExpiredAsync();
///
/// Esegue il cloning completo di un'Offerta e di tutte le relative righe.
///
/// L'offerta da clonare.
/// True se il cloning ha successo, false altrimenti.
Task CloneAsync(OfferModel rec2clone);
///
/// Elimina un'offerta dal database.
///
/// L'offerta da eliminare.
/// True se l'eliminazione ha successo, false altrimenti.
Task DeleteAsync(OfferModel entity);
///
/// Recupera l'elenco di tutte le offerte.
///
/// L'elenco di tutte le offerte con clienti, rivenditori e righe associate.
Task> GetAllAsync();
///
/// Recupera l'elenco degli elementi BOM (Bill of Materials) utilizzati nelle offerte.
///
/// L'elenco degli elementi BOM.
Task> GetBomItemsAsync();
///
/// Recupera un'offerta per il suo identificatore.
///
/// L'identificatore dell'offerta.
/// L'offerta corrispondente, o null se non esiste.
Task GetByIdAsync(int recId);
///
/// Recupera le offerte inserite in un intervallo di date specifico.
///
/// La data di inizio del periodo.
/// La data di fine del periodo.
/// L'elenco delle offerte 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'offerta per un'offerta specifica.
///
/// L'identificatore dell'offerta.
/// L'elenco delle righe dell'offerta.
Task> GetRowsAsync(int recId);
///
/// Aggiorna in batch le righe di un'offerta.
///
/// L'elenco delle righe da aggiornare.
/// True se l'aggiornamento ha successo, false altrimenti.
Task SaveRowsAsync(List rows);
///
/// Aggiorna un'offerta esistente nel database.
///
/// L'offerta aggiornata.
/// True se l'aggiornamento ha successo, false altrimenti.
Task UpdateAsync(OfferModel entity);
}
}