Files
Mapo-IOB-WIN/EgwProxy.Icoel.DataLayer/Controllers/DbController.cs
T
2022-05-28 12:27:00 +02:00

252 lines
9.2 KiB
C#

using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*------------------------------------------------
* Aggiunto fix come da link seguente:
*
* https://stackoverflow.com/questions/14033193/entity-framework-provider-type-could-not-be-loaded
*
* I solved this by adding an using stament on top of my DBContext class, like so:
* using SqlProviderServices= System.Data.Entity.SqlServer.SqlProviderServices;
*
*/
namespace EgwProxy.Icoel.DataLayer.Controllers
{
/// <summary>
/// Controller accesso dati DB vari x ICOEL
/// </summary>
public class DbController : IDisposable
{
#if false
private static EntrataDbContext dbEntrataCtx;
private static ExportDbContext dbExportCtx;
private static TrackerDbContext dbTrackerCtx;
#endif
private static SyncStateDbContext dbSyncStateCtx;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#if false
/// <summary>
/// Avvio dell'oggetto gestione DB con le 3 stringhe di connessione specifiche
/// </summary>
/// <param name="connEntrata">Connesisone Db frontiera Entrata Merce</param>
/// <param name="connTracker">Connessione DB Tracker</param>
/// <param name="connExport">Connessione DB IcoelExport</param>
/// <param name="connSyncState">Connessione DB locale di SYNC</param>
public DbController(string connEntrata, string connTracker, string connExport, string connSyncState)
{
dbEntrataCtx = new EntrataDbContext(connEntrata);
Log.Info("Avviata classe EntrataDbContext");
dbExportCtx = new ExportDbContext(connExport);
Log.Info("Avviata classe ExportDbContext");
dbTrackerCtx = new TrackerDbContext(connTracker);
Log.Info("Avviata classe dbTrackerCtx");
dbSyncStateCtx = new SyncStateDbContext(connSyncState);
Log.Info("Avviata classe dbSyncStateCtx");
}
#endif
/// <summary>
/// Avvio dell'oggetto gestione DB con stringa di connessione specifica
/// </summary>
/// <param name="connSyncState">Connessione DB locale di SYNC</param>
public DbController(string connSyncState)
{
dbSyncStateCtx = new SyncStateDbContext(connSyncState);
Log.Info("Avviata classe dbSyncStateCtx");
}
/// <summary>
/// Dispose classe
/// </summary>
public void Dispose()
{
// Clear database context
#if false
dbEntrataCtx.Dispose();
dbExportCtx.Dispose();
dbTrackerCtx.Dispose();
#endif
dbSyncStateCtx.Dispose();
}
#if false
/// <summary>
/// Elenco record Entrata Merce (Frontiera)
/// </summary>
/// <param name="minIdx">idx da cui partire a recuperare</param>
/// <returns></returns>
public List<DatabaseModels.EntrataModel> EntrateGetFromIdx(int minIdx = 0)
{
List<DatabaseModels.EntrataModel> dbResult = new List<DatabaseModels.EntrataModel>();
dbResult = dbEntrataCtx
.DbSetEntrataMerce
.Where(x => (x.ID_CHIAVE >= minIdx))
.OrderBy(x => x.ID_CHIAVE)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco ultimi record Entrata Merce (Frontiera)
/// </summary>
/// <param name="numRec">numero records da recuperare</param>
/// <returns></returns>
public List<DatabaseModels.EntrataModel> EntrateGetLast(int numRec = 100)
{
List<DatabaseModels.EntrataModel> dbResult = new List<DatabaseModels.EntrataModel>();
dbResult = dbEntrataCtx
.DbSetEntrataMerce
.OrderByDescending(x => x.ID_CHIAVE)
.Take(numRec)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco record ProductsTotal (da Icoel Export Products)
/// </summary>
/// <param name="minIdx">idx da cui partire a recuperare</param>
/// <returns></returns>
public List<DatabaseModels.ProductsTotalsModel> ExportProductsGetFromIdx(int minIdx = 0)
{
List<DatabaseModels.ProductsTotalsModel> dbResult = new List<DatabaseModels.ProductsTotalsModel>();
dbResult = dbExportCtx
.DbSetProductsTotals
.Where(x => (x.SizerBatchId >= minIdx))
.OrderBy(x => x.SizerBatchId)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco ultimi record ProductsTotal (da Icoel Export Products)
/// </summary>
/// <param name="numRec">numero records da recuperare</param>
/// <returns></returns>
public List<DatabaseModels.ProductsTotalsModel> ExportProductsGetLast(int numRec = 0)
{
List<DatabaseModels.ProductsTotalsModel> dbResult = new List<DatabaseModels.ProductsTotalsModel>();
dbResult = dbExportCtx
.DbSetProductsTotals
.OrderByDescending(x => x.SizerBatchId)
.ThenByDescending(x => x.Index)
.Take(numRec)
.ToList();
return dbResult;
}
#endif
/// <summary>
/// Esegue una volta la stored di ImportAll (x recupero dati da DB esterni) e poi
/// restitusice in output la tab di SyncState x verificare lo stato
/// </summary>
/// <returns></returns>
public List<DatabaseModels.SyncStateModel> SyncStateDoImportAll()
{
List<DatabaseModels.SyncStateModel> dbResult = new List<DatabaseModels.SyncStateModel>();
dbResult = dbSyncStateCtx
.Database
.SqlQuery<DatabaseModels.SyncStateModel>("EXEC stp_ImportAll")
.ToList();
return dbResult;
}
/// <summary>
/// Esegue una volta la stored di ImportAll (x recupero dati da DB esterni) e poi
/// restitusice in output la tab di SyncState x verificare lo stato
/// </summary>
/// <returns></returns>
public List<DatabaseModels.SyncStateModel> SyncStateDoExportAll()
{
List<DatabaseModels.SyncStateModel> dbResult = new List<DatabaseModels.SyncStateModel>();
dbResult = dbSyncStateCtx
.Database
.SqlQuery<DatabaseModels.SyncStateModel>("EXEC stp_ExportAll")
.ToList();
return dbResult;
}
/// <summary>
/// recupera la tab di SyncState corrente
/// </summary>
/// <returns></returns>
public List<DatabaseModels.SyncStateModel> SyncStateGetAll()
{
List<DatabaseModels.SyncStateModel> dbResult = new List<DatabaseModels.SyncStateModel>();
dbResult = dbSyncStateCtx
.DbSetSyncState
.ToList();
return dbResult;
}
#if false
/// <summary>
/// Elenco record DettConfezioni (da Icoel TrackerLotti)
/// </summary>
/// <param name="minIdx">idx da cui partire a recuperare</param>
/// <returns></returns>
public List<DatabaseModels.DettConfezioniModel> TrackConfezioniGetFromIdx(int minIdx = 0)
{
List<DatabaseModels.DettConfezioniModel> dbResult = new List<DatabaseModels.DettConfezioniModel>();
dbResult = dbTrackerCtx
.DbSetConfezioni
.Where(x => (x.Pack_Id >= minIdx))
.OrderBy(x => x.Pack_Id)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco ultimi record DettaglioConfezioni (da Icoel TrackerLotti)
/// </summary>
/// <param name="numRec">numero records da recuperare</param>
/// <returns></returns>
public List<DatabaseModels.DettConfezioniModel> TrackConfezioniGetLast(int numRec = 0)
{
List<DatabaseModels.DettConfezioniModel> dbResult = new List<DatabaseModels.DettConfezioniModel>();
dbResult = dbTrackerCtx
.DbSetConfezioni
.OrderByDescending(x => x.Pack_Id)
.Take(numRec)
.ToList();
return dbResult;
}
/// <summary>
/// Elenco dettaglio conferimento x PackId (da Icoel TrackerLotti)
/// ATTENZIONE: in caso di mancata associazione lotto ingresso con lavorazione corrente la
/// vista restituisce nuovo (possibile lavorare senza lotto ingresso e senza tracking)
/// </summary>
/// <param name="packId">idx da cui partire a recuperare</param>
/// <returns></returns>
public List<DatabaseModels.DettConferimentoModel> TrackPackConfDetailByIdx(long packId = 0)
{
List<DatabaseModels.DettConferimentoModel> dbResult = new List<DatabaseModels.DettConferimentoModel>();
dbResult = dbTrackerCtx
.DbSetConferimento
.Where(x => (x.PackId == packId))
.OrderBy(x => x.NUMERO_LOTTO)
.ThenByDescending(x => x.QUANTITA_ENTRATA)
.ToList();
return dbResult;
}
#endif
}
}