316 lines
11 KiB
C#
316 lines
11 KiB
C#
using EgtBEAMWALL.DataLayer.DatabaseModels;
|
|
using EgwProxy.MagMan.DTO;
|
|
using NLog;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace EgtBEAMWALL.DataLayer.Controllers
|
|
{
|
|
/// <summary>
|
|
/// Gestione Materiali su DB (= magazzino locale)
|
|
/// </summary>
|
|
public class MaterialsController : IDisposable
|
|
{
|
|
#region Public Constructors
|
|
|
|
public MaterialsController()
|
|
{
|
|
}
|
|
|
|
#endregion Public Constructors
|
|
|
|
#region Public Methods
|
|
|
|
/// <summary>
|
|
/// Conversion of DB model class to base class
|
|
/// </summary>
|
|
/// <param name="coreMat"></param>
|
|
/// <returns></returns>
|
|
public static Core.MaterialM ConvToCore(MaterialModel dbRec)
|
|
{
|
|
Core.MaterialM answ = new Core.MaterialM(dbRec.MatId, (double)dbRec.WMm, (double)dbRec.HMm, (double)dbRec.LMm, dbRec.MatCode);
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Helper conversione a DTO
|
|
/// </summary>
|
|
/// <param name="currRec"></param>
|
|
/// <returns></returns>
|
|
public static MaterialDTO ConvToDto(MaterialModel currRec)
|
|
{
|
|
MaterialDTO answ = new MaterialDTO()
|
|
{
|
|
MatCloudId = currRec.MatCloudId,
|
|
MatLocalId = currRec.MatId,
|
|
MatCode = currRec.MatCode,
|
|
MatDesc = currRec.MatDesc,
|
|
HMm = currRec.HMm,
|
|
LMm = currRec.LMm,
|
|
WMm = currRec.WMm
|
|
};
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Helper conversione da DTO
|
|
/// </summary>
|
|
/// <param name="currRec"></param>
|
|
/// <returns></returns>
|
|
public static MaterialModel ConvToModel(MaterialDTO currRec)
|
|
{
|
|
MaterialModel answ = new MaterialModel()
|
|
{
|
|
MatCloudId = currRec.MatCloudId,
|
|
MatId = currRec.MatLocalId,
|
|
MatCode = currRec.MatCode,
|
|
MatDesc = currRec.MatDesc,
|
|
HMm = currRec.HMm,
|
|
LMm = currRec.LMm,
|
|
WMm = currRec.WMm
|
|
};
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Conversion of base class to DB model class
|
|
/// </summary>
|
|
/// <param name="coreRec"></param>
|
|
/// <returns></returns>
|
|
public static MaterialModel ConvToModel(Core.MaterialM coreRec)
|
|
{
|
|
MaterialModel answ = new MaterialModel();
|
|
if (coreRec != null)
|
|
{
|
|
answ = new MaterialModel()
|
|
{
|
|
MatId = coreRec.nId,
|
|
MatCode = coreRec.sMaterial,
|
|
HMm = (decimal)coreRec.dH,
|
|
LMm = (decimal)coreRec.dL,
|
|
WMm = (decimal)coreRec.dW,
|
|
};
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Delete by key
|
|
/// </summary>
|
|
/// <param name="MatId"></param>
|
|
/// <returns></returns>
|
|
public bool DeleteByKey(int MatId)
|
|
{
|
|
bool done = false;
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
var items2del = localDbCtx
|
|
.MaterialsList
|
|
.Where(x => x.MatId == MatId);
|
|
try
|
|
{
|
|
// Add to database
|
|
localDbCtx.MaterialsList.RemoveRange(items2del);
|
|
// Commit changes
|
|
localDbCtx.SaveChanges();
|
|
done = true;
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
Log.Error($"EXCEPTION on Materials.DeleteByKey: {Environment.NewLine}{exc}");
|
|
}
|
|
}
|
|
return done;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get record by Key
|
|
/// </summary>
|
|
/// <param name="MatId"></param>
|
|
/// <returns></returns>
|
|
public Core.MaterialM FindByDbId(int MatId)
|
|
{
|
|
Core.MaterialM result = new Core.MaterialM(0, 0, 0, "NONE");
|
|
var rawData = FindByDbIdModel(MatId);
|
|
if (rawData != null)
|
|
{
|
|
result = ConvToCore(rawData);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get record by Key in formato Model
|
|
/// </summary>
|
|
/// <param name="MatId"></param>
|
|
/// <returns></returns>
|
|
public MaterialModel FindByDbIdModel(int MatId)
|
|
{
|
|
MaterialModel result = new MaterialModel();
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
result = localDbCtx
|
|
.MaterialsList
|
|
.Where(x => x.MatId == MatId)
|
|
.SingleOrDefault();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get Material (filtro x MatCode) in formato Core
|
|
/// </summary>
|
|
/// <param name="MatCode">se "" restituisce tutti</param>
|
|
/// <returns></returns>
|
|
public List<Core.MaterialM> GetFilt(string MatCode)
|
|
{
|
|
// recupero e converto
|
|
List<Core.MaterialM> result = new List<Core.MaterialM>();
|
|
var rawData = GetFiltModel(MatCode);
|
|
if (rawData != null)
|
|
{
|
|
result = rawData.Select(x => ConvToCore(x)).ToList();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get Material (filtro x MatCode) in formato Model
|
|
/// </summary>
|
|
/// <param name="MatCode">se "" restituisce tutti</param>
|
|
/// <returns></returns>
|
|
public List<MaterialModel> GetFiltModel(string MatCode)
|
|
{
|
|
List<MaterialModel> result = new List<MaterialModel>();
|
|
// retrieve
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
result = localDbCtx
|
|
.MaterialsList
|
|
.Where(x => string.IsNullOrEmpty(MatCode) || x.MatCode == MatCode)
|
|
.OrderBy(x => x.MatDesc)
|
|
.ToList();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Update Material record from CoreM
|
|
/// </summary>
|
|
/// <param name="coreItem"></param>
|
|
/// <returns>Returns 0 if not found</returns>
|
|
public int Update(Core.MaterialM coreItem)
|
|
{
|
|
int newIdx = 0;
|
|
// converto
|
|
MaterialModel updItem = ConvToModel(coreItem);
|
|
newIdx = Update(updItem);
|
|
return newIdx;
|
|
}
|
|
/// <summary>
|
|
/// Insert Material record from CoreM if missing or return existing (for Id)
|
|
/// </summary>
|
|
/// <param name="coreItem"></param>
|
|
/// <returns>MatId (existing or new)</returns>
|
|
public int Insert(Core.MaterialM coreItem)
|
|
{
|
|
int newIdx = 0;
|
|
// converto
|
|
MaterialModel updItem = ConvToModel(coreItem);
|
|
newIdx = Insert(updItem);
|
|
return newIdx;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Update Material record
|
|
/// </summary>
|
|
/// <param name="updItem"></param>
|
|
/// <returns>Returns 0 if not found</returns>
|
|
public int Update(MaterialModel updItem)
|
|
{
|
|
int newIdx = 0;
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
try
|
|
{
|
|
var item2update = localDbCtx
|
|
.MaterialsList
|
|
.Where(x => (updItem.MatId > 0 && x.MatId == updItem.MatId)
|
|
|| (updItem.MatCloudId > 0 && x.MatCloudId == updItem.MatCloudId)
|
|
|| (x.MatCode == updItem.MatCode && x.WMm == updItem.WMm && x.HMm == updItem.HMm && x.LMm == updItem.LMm))
|
|
.SingleOrDefault();
|
|
|
|
if (item2update != null)
|
|
{
|
|
// update, vers 1...
|
|
localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
|
|
// Commit changes
|
|
localDbCtx.SaveChanges();
|
|
newIdx = item2update.MatId;
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
Log.Error($"EXCEPTION on Materials.Update: {Environment.NewLine}{exc}");
|
|
}
|
|
}
|
|
return newIdx;
|
|
}
|
|
/// <summary>
|
|
/// Insert Material record
|
|
/// </summary>
|
|
/// <param name="updItem"></param>
|
|
/// <returns>MatId (existing or new)</returns>
|
|
public int Insert(MaterialModel updItem)
|
|
{
|
|
int newIdx = 0;
|
|
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
|
|
{
|
|
try
|
|
{
|
|
var item2update = localDbCtx
|
|
.MaterialsList
|
|
.Where(x => (updItem.MatId > 0 && x.MatId == updItem.MatId)
|
|
|| (updItem.MatCloudId > 0 && x.MatCloudId == updItem.MatCloudId)
|
|
|| (x.MatCode == updItem.MatCode && x.WMm == updItem.WMm && x.HMm == updItem.HMm && x.LMm == updItem.LMm))
|
|
.SingleOrDefault();
|
|
|
|
if (item2update != null)
|
|
{
|
|
//// update, vers 1...
|
|
//localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
|
|
newIdx = item2update.MatId;
|
|
}
|
|
else
|
|
{
|
|
localDbCtx.MaterialsList.Add(updItem);
|
|
// Commit changes
|
|
localDbCtx.SaveChanges();
|
|
newIdx = updItem.MatId;
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
Log.Error($"EXCEPTION on Materials.Insert: {Environment.NewLine}{exc}");
|
|
}
|
|
}
|
|
return newIdx;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
|
|
#region Private Fields
|
|
|
|
/// <summary>
|
|
/// Istanza logger
|
|
/// </summary>
|
|
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
|
|
|
#endregion Private Fields
|
|
}
|
|
} |