389 lines
11 KiB
C#
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
|
|
}
|
|
} |