351 lines
9.6 KiB
C#
351 lines
9.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using EgtBEAMWALL.DataLayer.DatabaseModels;
|
|
|
|
namespace EgtBEAMWALL.DataLayer.Controllers
|
|
{
|
|
public class ProjController : IDisposable
|
|
{
|
|
#region Private Fields
|
|
|
|
private DatabaseContext dbCtx;
|
|
|
|
#endregion Private Fields
|
|
|
|
#region Public Constructors
|
|
|
|
public ProjController()
|
|
{
|
|
// Initialize database context
|
|
dbCtx = new DatabaseContext();
|
|
}
|
|
|
|
#endregion Public Constructors
|
|
|
|
#region Protected Methods
|
|
|
|
/// <summary>
|
|
/// Get LAST paginated data from DB (DESC ordered)
|
|
/// </summary>
|
|
/// <param name="PartDbIdStart"></param>
|
|
/// <param name="numRecord"></param>
|
|
/// <returns></returns>
|
|
protected List<ProjModel> GetLastDbModelDesc(int numRecord)
|
|
{
|
|
// se numRecord = 0 --> passo tutti
|
|
if (numRecord == 0)
|
|
{
|
|
numRecord = dbCtx.ProjList.Count();
|
|
}
|
|
// retrieve
|
|
return dbCtx
|
|
.ProjList
|
|
.OrderByDescending(x => x.ProjDbId)
|
|
.Take(numRecord)
|
|
.ToList();
|
|
}
|
|
|
|
#endregion Protected Methods
|
|
|
|
#region Public Methods
|
|
|
|
public bool DeleteProj(int ProjId)
|
|
{
|
|
bool done = false;
|
|
|
|
var currProj = FindByProjId(ProjId);
|
|
|
|
// sel delle BTLParts da proj
|
|
var parts2del = dbCtx
|
|
.BTLPartList
|
|
.Where(x => x.ProjDbId == currProj.ProjDbId);
|
|
|
|
try
|
|
{
|
|
// remove from database
|
|
dbCtx.BTLPartList.RemoveRange(parts2del);
|
|
dbCtx.ProjList.Remove(currProj);
|
|
// Commit changes
|
|
dbCtx.SaveChanges();
|
|
done = true;
|
|
}
|
|
catch
|
|
{ }
|
|
return done;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
// Clear database context
|
|
dbCtx.Dispose();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get record by ProjDbId
|
|
/// </summary>
|
|
/// <param name="ProjDbId"></param>
|
|
/// <returns></returns>
|
|
public ProjModel FindByProjDbId(int ProjDbId)
|
|
{
|
|
return dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProjDbId == ProjDbId)
|
|
.SingleOrDefault();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get record by ProjId
|
|
/// </summary>
|
|
/// <param name="ProjId"></param>
|
|
/// <returns></returns>
|
|
public ProjModel FindByProjId(int ProjId)
|
|
{
|
|
return dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProjId == ProjId)
|
|
.SingleOrDefault();
|
|
}
|
|
|
|
#if false
|
|
/// <summary>
|
|
/// Get paginated data from DB (ASC ordered)
|
|
/// </summary>
|
|
/// <param name="ProjDbIdStart"></param>
|
|
/// <param name="numRecord"></param>
|
|
/// <returns></returns>
|
|
public List<ProjModel> GetPaginatedAsc(int ProjDbIdStart, int numRecord)
|
|
{
|
|
int numEnd = ProjDbIdStart - numRecord;
|
|
// check numEnd
|
|
if (numEnd < 0)
|
|
numEnd = 0;
|
|
// retrieve
|
|
return dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProjDbId <= ProjDbIdStart)
|
|
.OrderBy(x => x.ProjDbId)
|
|
.Take(numRecord)
|
|
.ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get paginated data from DB (DESC ordered)
|
|
/// </summary>
|
|
/// <param name="PartDbIdStart"></param>
|
|
/// <param name="numRecord"></param>
|
|
/// <returns></returns>
|
|
public List<ProjModel> GetPaginatedDesc(int PartDbIdStart, int numRecord)
|
|
{
|
|
int numEnd = PartDbIdStart - numRecord;
|
|
// check numEnd
|
|
if (numEnd < 0)
|
|
numEnd = 0;
|
|
// retrieve
|
|
return dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProjDbId <= PartDbIdStart)
|
|
.OrderByDescending(x => x.ProjDbId)
|
|
.Take(numRecord)
|
|
.ToList();
|
|
}
|
|
|
|
#endif
|
|
|
|
/// <summary>
|
|
/// Get filtered data by ProjectId (ASC ordered)
|
|
/// </summary>
|
|
/// <param name="ProdDbId"></param>
|
|
/// <returns></returns>
|
|
public List<ProjModel> GetByProdAsc(int ProdDbId)
|
|
{
|
|
// retrieve
|
|
return dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProdDbId == ProdDbId)
|
|
.OrderBy(x => x.ProdDbId)
|
|
.ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get filtered data by ProjectId (DESC ordered)
|
|
/// </summary>
|
|
/// <param name="ProdDbId"></param>
|
|
/// <returns></returns>
|
|
public List<ProjModel> GetByProdDesc(int ProdDbId)
|
|
{
|
|
// retrieve
|
|
return dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProdDbId == ProdDbId)
|
|
.OrderByDescending(x => x.ProdDbId)
|
|
.ToList();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Elenco progetti
|
|
/// </summary>
|
|
/// <param name="numRecord"></param>
|
|
/// <returns></returns>
|
|
public List<Core.ProjectFile> GetLastDesc(int numRecord)
|
|
{
|
|
List<Core.ProjectFile> result = new List<Core.ProjectFile>();
|
|
|
|
var dbResult = GetLastDbModelDesc(numRecord);
|
|
|
|
// conversione
|
|
result = dbResult.Select(x => new Core.ProjectFile(Core.ConstBeam.ProjectType.PROJ, x.ProjId, x.ProdDbId == null ? 0 : (int)x.ProdDbId, x.BTLFileName)).ToList();
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Fornisce nuovo indice VUOTO da usare
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public int GetNextIndex()
|
|
{
|
|
int nextId = 0;
|
|
|
|
// cerco se ne ho ALMENO 1....
|
|
var numRec = dbCtx.ProdList.Count();
|
|
if (numRec == 0)
|
|
{
|
|
nextId = 1;
|
|
}
|
|
else
|
|
{
|
|
// retrieve ultimo...
|
|
var maxRecord = dbCtx
|
|
.ProjList
|
|
.OrderByDescending(x => x.ProjId)
|
|
.Take(1)
|
|
.FirstOrDefault();
|
|
// incremento
|
|
nextId = maxRecord.ProjId + 1;
|
|
}
|
|
|
|
// creo nuovo...
|
|
var newRec = dbCtx
|
|
.ProjList
|
|
.Add(new ProjModel() { ProjId = nextId, BTLFileName = "", Locked = false });
|
|
|
|
// Commit changes
|
|
dbCtx.SaveChanges();
|
|
|
|
return nextId;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lock records by ProjDbId (proj & prod)
|
|
/// </summary>
|
|
/// <param name="ProjDbId"></param>
|
|
/// <returns></returns>
|
|
public ProjModel LockByProjDbId(int ProjDbId)
|
|
{
|
|
var currProj = dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProjDbId == ProjDbId)
|
|
.SingleOrDefault();
|
|
|
|
// aggiorno stato
|
|
currProj.Locked = true;
|
|
|
|
// seleziono il prod...
|
|
var currProd = dbCtx
|
|
.ProdList
|
|
.Where(x => x.ProdDbId == currProj.ProdDbId)
|
|
.SingleOrDefault();
|
|
currProd.Locked = true;
|
|
|
|
dbCtx.SaveChanges();
|
|
|
|
return currProj;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lock records by ProjId (proj & prod)
|
|
/// </summary>
|
|
/// <param name="ProjId"></param>
|
|
/// <returns></returns>
|
|
public ProjModel LockByProjId(int ProjId)
|
|
{
|
|
var currProj = dbCtx
|
|
.ProjList
|
|
.Where(x => x.ProjId == ProjId)
|
|
.SingleOrDefault();
|
|
|
|
// aggiorno stato
|
|
currProj.Locked = true;
|
|
|
|
// seleziono il prod...
|
|
var currProd = dbCtx
|
|
.ProdList
|
|
.Where(x => x.ProdDbId == currProj.ProdDbId)
|
|
.SingleOrDefault();
|
|
currProd.Locked = true;
|
|
|
|
dbCtx.SaveChanges();
|
|
|
|
return currProj;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Update record su DB x elenco BTLParts
|
|
/// </summary>
|
|
/// <param name="ProjId"></param>
|
|
/// <param name="newBTLFileName"></param>
|
|
/// <returns></returns>
|
|
public ProjModel UpdateBtlParts(int ProjId, List<Core.BTLPart> BtlPartList)
|
|
{
|
|
var currData = FindByProjDbId(ProjId);
|
|
|
|
// sel delle BTLParts da proj
|
|
var items2del = dbCtx
|
|
.BTLPartList
|
|
.Where(x => x.ProjDbId == currData.ProjDbId);
|
|
|
|
// converto le BtlParts
|
|
var items2add = BtlPartList.Select(x => BTLPartController.ConvertFromCore(x, ProjId)).ToList();
|
|
|
|
try
|
|
{
|
|
// elimino dal DB
|
|
dbCtx.BTLPartList.RemoveRange(items2del);
|
|
// aggiungo le nuove
|
|
dbCtx.BTLPartList.AddRange(items2add);
|
|
}
|
|
catch
|
|
{ }
|
|
|
|
// aggiorno valore isNew a false
|
|
currData.IsNew = false;
|
|
|
|
// Commit changes
|
|
dbCtx.SaveChanges();
|
|
|
|
return currData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Update record su DB x nome
|
|
/// </summary>
|
|
/// <param name="ProjId"></param>
|
|
/// <param name="newBTLFileName"></param>
|
|
/// <returns></returns>
|
|
public ProjModel UpdateName(int ProjId, string newBTLFileName)
|
|
{
|
|
var currData = FindByProjId(ProjId);
|
|
// aggiorno valore BTL
|
|
currData.BTLFileName = newBTLFileName;
|
|
|
|
// Commit changes
|
|
dbCtx.SaveChanges();
|
|
|
|
return currData;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
}
|
|
} |