Files
egtbeamwall/EgtBEAMWALL.DataLayer/Controllers/BTLPartController.cs
T
2021-03-05 13:14:27 +01:00

293 lines
8.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EgtBEAMWALL.DataLayer.DatabaseModels;
namespace EgtBEAMWALL.DataLayer.Controllers
{
public class BTLPartController : IDisposable
{
private DatabaseContext dbCtx;
public BTLPartController()
{
// Initialize database context
dbCtx = new DatabaseContext();
}
public void Dispose()
{
// Clear database context
dbCtx.Dispose();
}
/// <summary>
/// Get record by DBId
/// </summary>
/// <param name="PartDbId"></param>
/// <returns></returns>
public BTLPartModel FindByDbId(int PartDbId)
{
return dbCtx
.BTLPartList
.Where(x => x.PartDbId == PartDbId)
.SingleOrDefault();
}
/// <summary>
/// Get record by ExtId
/// </summary>
/// <param name="PartId"></param>
/// <returns></returns>
public BTLPartModel FindByPartId(int PartId)
{
return dbCtx
.BTLPartList
.Where(x => x.PartId == PartId)
.SingleOrDefault();
}
/// <summary>
/// Get paginated data from DB (ASC ordered)
/// </summary>
/// <param name="PartDbIdStart"></param>
/// <param name="numRecord"></param>
/// <returns></returns>
public List<BTLPartModel> GetPaginatedAsc(int PartDbIdStart, int numRecord)
{
int numEnd = PartDbIdStart - numRecord;
// check numEnd
if (numEnd < 0)
numEnd = 0;
// retrieve
return dbCtx
.BTLPartList
.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<BTLPartModel> GetPaginatedDesc(int PartDbIdStart, int numRecord)
{
int numEnd = PartDbIdStart - numRecord;
// check numEnd
if (numEnd < 0)
numEnd = 0;
// retrieve
return dbCtx
.BTLPartList
.Where(x => x.PartDbId <= PartDbIdStart)
.OrderByDescending(x => x.PartDbId)
.Take(numRecord)
.ToList();
}
/// <summary>
/// Get filtered data by ProjectId (ASC ordered)
/// </summary>
/// <param name="ProjDbId"></param>
/// <returns></returns>
public List<BTLPartModel> GetByProjectAsc(int ProjDbId)
{
// retrieve
return dbCtx
.BTLPartList
.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<BTLPartModel> GetByProjectDesc(int ProjDbId)
{
// retrieve
return dbCtx
.BTLPartList
.Where(x => x.ProjDbId == ProjDbId)
.OrderByDescending(x => x.PartDbId)
.ToList();
}
/// <summary>
/// Create multiple (empty) BTLPart record associated to Project
/// </summary>
/// <param name="ProjDbId"></param>
/// <param name="rawListData"></param>
/// <returns></returns>
public List<BTLPartModel> CreateBaseObj(int ProjDbId, List<int> rawListData)
{
List<BTLPartModel> partData = new List<BTLPartModel>();
foreach (var item in rawListData)
{
BTLPartModel newItem = new BTLPartModel() { ProjDbId = ProjDbId, PartId = item };
partData.Add(newItem);
}
try
{
// Add to database
dbCtx.BTLPartList.AddRange(partData);
// Commit changes
dbCtx.SaveChanges();
}
catch
{ }
return partData;
}
/// <summary>
/// Create multiple BTLPart record associated to Project
/// </summary>
/// <param name="ProjID"></param>
/// <param name="partData"></param>
/// <returns></returns>
public List<BTLPartModel> Create(int ProjID, List<BTLPartModel> partData)
{
// se è adv mode --> uso TUTTI i dati
if (DbManager.AdvDataModel)
{
try
{
// Add to database
dbCtx.BTLPartList.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(ProjID, partIdList);
}
}
/// <summary>
/// Update single BTLPart
/// </summary>
/// <param name="updItem"></param>
/// <returns></returns>
public bool Update(BTLPartModel updItem)
{
bool done = false;
var item2update = dbCtx
.BTLPartList
.Where(x => x.PartDbId == updItem.PartDbId)
.SingleOrDefault();
try
{
// update, vers 1...
dbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
//// update, vers 2
//dbCtx.BTLPartList.Remove(item2del);
//dbCtx.BTLPartList.Add(updItem);
// Commit changes
dbCtx.SaveChanges();
done = true;
}
catch
{ }
return done;
}
/// <summary>
/// Delete single BTLPart
/// </summary>
/// <param name="PartDbId"></param>
/// <returns></returns>
public bool Delete(int PartDbId)
{
bool done = false;
var item2del = dbCtx
.BTLPartList
.Where(x => x.PartDbId == PartDbId)
.SingleOrDefault();
try
{
// Add to database
dbCtx.BTLPartList.Remove(item2del);
// Commit changes
dbCtx.SaveChanges();
done = true;
}
catch
{ }
return done;
}
/// <summary>
/// Delete BTLPart by project
/// </summary>
/// <param name="ProjDbId"></param>
/// <returns></returns>
public bool DeleteByProject(int ProjDbId)
{
bool done = false;
var items2del = dbCtx
.BTLPartList
.Where(x => x.ProjDbId == ProjDbId);
try
{
// Add to database
dbCtx.BTLPartList.RemoveRange(items2del);
// Commit changes
dbCtx.SaveChanges();
done = true;
}
catch
{ }
return done;
}
/// <summary>
/// Conversion of base class to DB model class
/// </summary>
/// <param name="corePart"></param>
/// <returns></returns>
public BTLPartModel Convert(Core.BTLPart corePart)
{
BTLPartModel answ = new BTLPartModel();
if (corePart != null)
{
answ = new BTLPartModel()
{
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;
}
}
}