using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EgtBEAMWALL.DataLayer.DatabaseModels;
namespace EgtBEAMWALL.DataLayer.Controllers
{
public class PartController : IDisposable
{
#region Private Fields
private DatabaseContext dbCtx;
#endregion Private Fields
#region Public Fields
public static PartController man = new PartController();
#endregion Public Fields
#region Public Constructors
public PartController()
{
// Initialize database context
dbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING);
}
#endregion Public Constructors
#region Protected Methods
///
/// Get BtlPartDBId by ProjId + PDN
///
///
///
///
protected int FindBtlPart(int ProjId, int PDN)
{
int BtlPartDbId = 0;
#if false
var currProj = dbCtx
.ProjList
.Where(x => x.ProjId == ProjId)
.FirstOrDefault();
if (currProj != null)
{
var btlPart = dbCtx
.BTLPartList
.Where(x => x.ProjDbId == currProj.ProjDbId && x.PDN == PDN)
.SingleOrDefault();
if (btlPart != null)
{
BtlPartDbId = btlPart.BTLPartDbId;
}
}
#endif
var btlPart = dbCtx
.BTLPartList
.Where(x => x.Project.ProjId == ProjId && x.PDN == PDN)
.SingleOrDefault();
if (btlPart != null)
{
BtlPartDbId = btlPart.BTLPartDbId;
}
return BtlPartDbId;
}
///
/// Get BtlPartDBId by ProjId + BtlPartId
///
///
///
///
protected int FindBtlPartByBPI(int ProjId, int BtlPartId)
{
int BtlPartDbId = 0;
var btlPart = dbCtx
.BTLPartList
.Where(x => x.Project.ProjId == ProjId && x.PartId == BtlPartId)
.SingleOrDefault();
if (btlPart != null)
{
BtlPartDbId = btlPart.BTLPartDbId;
}
return BtlPartDbId;
}
#endregion Protected Methods
#region Public Methods
///
/// Conversion of base class to DB model class
///
///
///
///
public static PartModel ConvertFromCore(Core.PartM corePart, int currMachGroupDbId)
{
PartModel answ = new PartModel();
if (corePart != null)
{
int BTLPartId = man.FindBtlPartByBPI(corePart.nProjId, corePart.nBTLPartId);
answ = new PartModel()
{
PartId = corePart.nPartId,
PDN = corePart.nPDN,
BTLPartDbId = BTLPartId,
MachGroupDbId = currMachGroupDbId,
State = Core.ItemState.Assigned,
NAM = corePart.sNAM,
W = corePart.dW,
L = corePart.dL,
H = corePart.dH,
Material = corePart.sMATERIAL,
DtStart = corePart.dtStartTime,
DtEnd = corePart.dtEndTime,
//DO = corePart.bDO,
//CNT = corePart.nCNT,
//TBP = corePart.nTBP,
//DON = corePart.nDON,
ROT = corePart.nCALC_ROT,
//GRP = corePart.sGRP,
//UNT = corePart.nUNT,
CALC_State = (int)corePart.nCALC_State
};
}
return answ;
}
///
/// Delete single Part
///
///
///
///
///
public bool Delete(int ProdId, int MachGroupId, int PartId)
{
bool done = false;
var item2del = dbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId)
.SingleOrDefault();
try
{
// Remove from database
dbCtx.PartList.Remove(item2del);
// Commit changes
dbCtx.SaveChanges();
ResetController();
done = true;
// aggiorno info sullo status
StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.MachGroupMod, "");
}
catch (Exception exc)
{
Console.WriteLine($"EXCEPTION on Delete: ProdId: {ProdId} | MachGroupId: {MachGroupId} | PartId: {PartId}{Environment.NewLine}{exc}");
}
return done;
}
///
/// Delete single Part
///
///
///
public bool Delete(int PartDbId)
{
bool done = false;
var item2del = dbCtx
.PartList
.Where(x => x.PartDbId == PartDbId)
.SingleOrDefault();
try
{
// Add to database
dbCtx.PartList.Remove(item2del);
// Commit changes
dbCtx.SaveChanges();
ResetController();
done = true;
}
catch (Exception exc)
{
Console.WriteLine($"EXCEPTION on Delete: {exc}");
}
return done;
}
///
/// Delete Part by project
///
///
///
public bool DeleteByMachGroup(int MachGroupDbId)
{
bool done = false;
var items2del = dbCtx
.PartList
.Where(x => x.MachGroupDbId == MachGroupDbId);
try
{
// Add to database
dbCtx.PartList.RemoveRange(items2del);
// Commit changes
dbCtx.SaveChanges();
ResetController();
done = true;
}
catch (Exception exc)
{
Console.WriteLine($"EXCEPTION on DeleteByMachGroup: {exc}");
}
return done;
}
public void Dispose()
{
// Clear database context
dbCtx.Dispose();
}
///
/// Get record by DBId
///
///
///
public PartModel FindByDbId(int PartDbId)
{
return dbCtx
.PartList
.Where(x => x.PartDbId == PartDbId)
.SingleOrDefault();
}
///
/// Get record by ExtId
///
///
///
public PartModel FindByPartId(int PartId)
{
return dbCtx
.PartList
.Where(x => x.PartId == PartId)
.SingleOrDefault();
}
///
/// Reinizializzaizone del controller
///
public void ResetController()
{
// Re-Initialize database context
dbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING);
}
///
/// Update single Part
///
///
///
public bool Update(PartModel updItem)
{
bool done = false;
var item2update = dbCtx
.PartList
.Where(x => x.PartDbId == updItem.PartDbId)
.SingleOrDefault();
try
{
// update, vers 1...
dbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
//// update, vers 2
//dbCtx.PartList.Remove(item2del);
//dbCtx.PartList.Add(updItem);
// Commit changes
dbCtx.SaveChanges();
ResetController();
done = true;
// aggiorno info sullo status
StatusMapController.man.UpdateAction("", updItem.MachGroup.Prod.ProdId, updItem.MachGroup.MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.MachGroupMod, "");
}
catch
{ }
return done;
}
///
/// Set EndDate for Part
///
///
///
///
public bool UpdateEnd(int ProdId, int MachGroupId, int PartId, DateTime DtEnd)
{
bool done = false;
try
{
// aggiorno
dbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId)
.FirstOrDefault()
.DtEnd = DtEnd;
// Commit changes
dbCtx.SaveChanges();
ResetController();
done = true;
// aggiorno info sullo status
StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.PartEnd, "");
}
catch (Exception exc)
{
Console.WriteLine($"EXCEPTION on UpdateStatus: {exc}");
}
return done;
}
///
/// Set StartDate for Part
///
///
///
///
public bool UpdateStart(int ProdId, int MachGroupId, int PartId, DateTime DtStart)
{
bool done = false;
try
{
// aggiorno
dbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId)
.FirstOrDefault()
.DtStart = DtStart;
// Commit changes
dbCtx.SaveChanges();
ResetController();
done = true;
// aggiorno info sullo status
StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.PartStart, "");
}
catch (Exception exc)
{
Console.WriteLine($"EXCEPTION on UpdateStatus: {exc}");
}
return done;
}
///
/// Set Status for Part
///
///
///
///
public bool UpdateStatus(int ProdId, int MachGroupId, int PartId, Core.ItemState newState)
{
bool done = false;
try
{
// aggiorno
dbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId)
.FirstOrDefault()
.State = newState;
// Commit changes
dbCtx.SaveChanges();
ResetController();
done = true;
// aggiorno info sullo status
StatusMapController.man.UpdateAction("", ProdId, MachGroupId, Core.StatusMapItemType.MachGroup, Core.StatusMapOpType.MachGroupMod, "");
}
catch (Exception exc)
{
Console.WriteLine($"EXCEPTION on UpdateStatus: {exc}");
}
return done;
}
#endregion Public Methods
}
}