Files
egtbeamwall/EgtBEAMWALL.DataLayer/Controllers/PartController .cs
T
2021-03-06 10:49:08 +01:00

389 lines
11 KiB
C#

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();
}
#endregion Public Constructors
#region Protected Methods
/// <summary>
/// Get BtlPartDBId by ProjId + PDN
/// </summary>
/// <param name="ProjId"></param>
/// <param name="PDN"></param>
/// <returns></returns>
protected int FindBtlPart(int ProjId, int PDN)
{
int BtlPartDbId = 0;
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;
}
}
return BtlPartDbId;
}
#endregion Protected Methods
#region Public Methods
/// <summary>
/// Conversion of base class to DB model class
/// </summary>
/// <param name="corePart"></param>
/// <param name="currMachGroupDbId"></param>
/// <returns></returns>
public static PartModel ConvertFromCore(Core.Part corePart, int currMachGroupDbId)
{
PartModel answ = new PartModel();
if (corePart != null)
{
answ = new PartModel()
{
PartId = corePart.nPartId,
PDN = corePart.nPDN,
BTLPartDbId = man.FindBtlPart(corePart.nProjId, corePart.nPDN),
MachGroupDbId = currMachGroupDbId,
State = ItemState.Assigned,
NAM = corePart.sNAM,
W = corePart.dW,
L = corePart.dL,
H = corePart.dH,
MAT = corePart.sMATERIAL,
//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.nState
};
}
return answ;
}
#if false
/// <summary>
/// Conversion of base class to DB model class
/// </summary>
/// <param name="corePart"></param>
/// <returns></returns>
public PartModel Convert(Core.Part corePart)
{
PartModel answ = new PartModel();
if (corePart != null)
{
answ = new PartModel()
{
PartId = corePart.nPartId,
PDN = corePart.nPDN,
DO = corePart.bDO,
NAM = corePart.sNAM,
W = corePart.dW,
L = corePart.dL,
H = corePart.dH,
MAT = corePart.sMATERIAL,
CNT = corePart.nCNT,
TBP = corePart.nTBP,
DON = corePart.nDON,
ROT = corePart.nROT,
GRP = corePart.sGRP,
UNT = corePart.nUNT,
CALC_State = (int)corePart.nState
};
}
return answ;
}
/// <summary>
/// Create multiple Part record associated to MachGroup
/// </summary>
/// <param name="MachGroupID"></param>
/// <param name="partData"></param>
/// <returns></returns>
public List<PartModel> Create(int MachGroupID, List<PartModel> partData)
{
// se è adv mode --> uso TUTTI i dati
if (DbManager.AdvDataModel)
{
try
{
// Add to database
dbCtx.PartList.AddRange(partData);
// Commit changes
dbCtx.SaveChanges();
}
catch
{ }
return partData;
}
// se non adv --> faccio solo copia degli id...
else
{
List<int> partIdList = new List<int>();
foreach (var item in partData)
{
partIdList.Add(item.PartId);
}
return CreateBaseObj(MachGroupID, partIdList);
}
}
/// <summary>
/// Create multiple (empty) Part record associated to Project
/// </summary>
/// <param name="ProjDbId"></param>
/// <param name="rawListData"></param>
/// <returns></returns>
public List<PartModel> CreateBaseObj(int ProjDbId, List<int> rawListData)
{
List<PartModel> partData = new List<PartModel>();
foreach (var item in rawListData)
{
PartModel newItem = new PartModel() { ProjDbId = ProjDbId, PartId = item };
partData.Add(newItem);
}
try
{
// Add to database
dbCtx.PartList.AddRange(partData);
// Commit changes
dbCtx.SaveChanges();
}
catch
{ }
return partData;
}
/// <summary>
/// Get filtered data by ProjectId (ASC ordered)
/// </summary>
/// <param name="ProjDbId"></param>
/// <returns></returns>
public List<PartModel> GetByProjectAsc(int ProjDbId)
{
// retrieve
return dbCtx
.PartList
.Where(x => x.ProjDbId == ProjDbId)
.OrderBy(x => x.PartDbId)
.ToList();
}
/// <summary>
/// Get filtered data by ProjectId (DESC ordered)
/// </summary>
/// <param name="ProjDbId"></param>
/// <returns></returns>
public List<PartModel> GetByProjectDesc(int ProjDbId)
{
// retrieve
return dbCtx
.PartList
.Where(x => x.ProjDbId == ProjDbId)
.OrderByDescending(x => x.PartDbId)
.ToList();
}
/// <summary>
/// Get paginated data from DB (ASC ordered)
/// </summary>
/// <param name="PartDbIdStart"></param>
/// <param name="numRecord"></param>
/// <returns></returns>
public List<PartModel> GetPaginatedAsc(int PartDbIdStart, int numRecord)
{
int numEnd = PartDbIdStart - numRecord;
// check numEnd
if (numEnd < 0)
numEnd = 0;
// retrieve
return dbCtx
.PartList
.Where(x => x.PartDbId <= PartDbIdStart)
.OrderBy(x => x.PartDbId)
.Take(numRecord)
.ToList();
}
/// <summary>
/// Get paginated data from DB (DESC ordered)
/// </summary>
/// <param name="PartDbIdStart"></param>
/// <param name="numRecord"></param>
/// <returns></returns>
public List<PartModel> GetPaginatedDesc(int PartDbIdStart, int numRecord)
{
int numEnd = PartDbIdStart - numRecord;
// check numEnd
if (numEnd < 0)
numEnd = 0;
// retrieve
return dbCtx
.PartList
.Where(x => x.PartDbId <= PartDbIdStart)
.OrderByDescending(x => x.PartDbId)
.Take(numRecord)
.ToList();
}
/// <summary>
/// Update single Part
/// </summary>
/// <param name="updItem"></param>
/// <returns></returns>
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();
done = true;
}
catch
{ }
return done;
}
#endif
/// <summary>
/// Delete single Part
/// </summary>
/// <param name="PartDbId"></param>
/// <returns></returns>
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();
done = true;
}
catch
{ }
return done;
}
/// <summary>
/// Delete Part by project
/// </summary>
/// <param name="MachGroupDbId"></param>
/// <returns></returns>
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();
done = true;
}
catch
{ }
return done;
}
public void Dispose()
{
// Clear database context
dbCtx.Dispose();
}
/// <summary>
/// Get record by DBId
/// </summary>
/// <param name="PartDbId"></param>
/// <returns></returns>
public PartModel FindByDbId(int PartDbId)
{
return dbCtx
.PartList
.Where(x => x.PartDbId == PartDbId)
.SingleOrDefault();
}
/// <summary>
/// Get record by ExtId
/// </summary>
/// <param name="PartId"></param>
/// <returns></returns>
public PartModel FindByPartId(int PartId)
{
return dbCtx
.PartList
.Where(x => x.PartId == PartId)
.SingleOrDefault();
}
#endregion Public Methods
}
}