inizio modifiche x restituire esito sync con enum
This commit is contained in:
@@ -15,6 +15,20 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// </summary>
|
||||
public class MagmanController : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Enum del risultato della sincronizzazione
|
||||
/// 0: ALL_OK
|
||||
/// </summary>
|
||||
public enum SyncResult
|
||||
{
|
||||
ALL_OK = 0,
|
||||
ERR_ND,
|
||||
ERR_ServerKo,
|
||||
ERR_CloudMatNotSent,
|
||||
ERR_SrcMatNotFound,
|
||||
ERR_MergeMatEmpty
|
||||
}
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
/// <summary>
|
||||
@@ -58,24 +72,36 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// </summary>
|
||||
/// <param name="MatCode">Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato</param>
|
||||
/// <returns></returns>
|
||||
public bool MaterialsSyncro(string MatCode = "")
|
||||
public SyncResult MaterialsSyncro(string MatCode = "")
|
||||
{
|
||||
bool answ = false;
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
// verifico server ok
|
||||
bool servOk = commLib.CheckRemote();
|
||||
if (servOk)
|
||||
if (!servOk)
|
||||
{
|
||||
answ = SyncResult.ERR_ServerKo;
|
||||
}
|
||||
else
|
||||
{
|
||||
using (MaterialsController dbContr = new MaterialsController())
|
||||
{
|
||||
// in primis leggo l'elenco materiali dal DB locale
|
||||
List<MaterialModel> matListDb = dbContr.GetFiltModel(MatCode);
|
||||
if (matListDb != null)
|
||||
if (matListDb == null)
|
||||
{
|
||||
answ = SyncResult.ERR_SrcMatNotFound;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<MaterialDTO> list2send = matListDb.Select(x => MaterialsController.ConvToDto(x)).ToList();
|
||||
// preparo pacchetto invio...
|
||||
answ = commLib.MaterialsSend(list2send);
|
||||
bool okMat = commLib.MaterialsSend(list2send);
|
||||
// se inviato, scarico x merge locale
|
||||
if (answ)
|
||||
if (!okMat)
|
||||
{
|
||||
answ = SyncResult.ERR_CloudMatNotSent;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<MaterialDTO> list2merge = commLib.MaterialsGet();
|
||||
// se filtro x materiale processo solo quello...
|
||||
@@ -86,11 +112,26 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
// effettuo conversione DTO --> model + merge
|
||||
List<MaterialModel> list2MergeDb = list2merge.Select(x => MaterialsController.ConvToModel(x)).ToList();
|
||||
// ciclo...
|
||||
if (list2MergeDb != null)
|
||||
if (list2MergeDb == null)
|
||||
{
|
||||
answ = SyncResult.ERR_MergeMatEmpty;
|
||||
}
|
||||
else
|
||||
{
|
||||
int numOk = 0;
|
||||
int num2Write = list2MergeDb.Count();
|
||||
foreach (var item in list2MergeDb)
|
||||
{
|
||||
_ = dbContr.Upsert(item);
|
||||
var newId = dbContr.Upsert(item);
|
||||
if (newId > 0)
|
||||
{
|
||||
numOk++;
|
||||
}
|
||||
}
|
||||
// solo se tutto andato bene esito ALL_OK
|
||||
if (num2Write == numOk)
|
||||
{
|
||||
answ = SyncResult.ALL_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -107,24 +148,36 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// </summary>
|
||||
/// <param name="MatCode">Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato</param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> MaterialsSyncroAsync(string MatCode = "")
|
||||
public async Task<SyncResult> MaterialsSyncroAsync(string MatCode = "")
|
||||
{
|
||||
bool answ = false;
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
// verifico server ok
|
||||
bool servOk = commLib.CheckRemote();
|
||||
if (servOk)
|
||||
if (!servOk)
|
||||
{
|
||||
answ = SyncResult.ERR_ServerKo;
|
||||
}
|
||||
else
|
||||
{
|
||||
using (MaterialsController dbContr = new MaterialsController())
|
||||
{
|
||||
// in primis leggo l'elenco materiali dal DB locale
|
||||
List<MaterialModel> matListDb = dbContr.GetFiltModel(MatCode);
|
||||
if (matListDb != null)
|
||||
if (matListDb == null)
|
||||
{
|
||||
answ = SyncResult.ERR_SrcMatNotFound;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<MaterialDTO> list2send = matListDb.Select(x => MaterialsController.ConvToDto(x)).ToList();
|
||||
// preparo pacchetto invio...
|
||||
answ = await commLib.MaterialsSendAsync(list2send);
|
||||
bool okMat = await commLib.MaterialsSendAsync(list2send);
|
||||
// se inviato, scarico x merge locale
|
||||
if (answ)
|
||||
if (!okMat)
|
||||
{
|
||||
answ = SyncResult.ERR_CloudMatNotSent;
|
||||
}
|
||||
else
|
||||
{
|
||||
List<MaterialDTO> list2merge = await commLib.MaterialsGetAsync();
|
||||
// se filtro x materiale processo solo quello...
|
||||
@@ -135,11 +188,26 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
// effettuo conversione DTO --> model + merge
|
||||
List<MaterialModel> list2MergeDb = list2merge.Select(x => MaterialsController.ConvToModel(x)).ToList();
|
||||
// ciclo...
|
||||
if (list2MergeDb != null)
|
||||
if (list2MergeDb == null)
|
||||
{
|
||||
answ = SyncResult.ERR_MergeMatEmpty;
|
||||
}
|
||||
else
|
||||
{
|
||||
int numOk = 0;
|
||||
int num2Write = list2MergeDb.Count();
|
||||
foreach (var item in list2MergeDb)
|
||||
{
|
||||
_ = dbContr.Upsert(item);
|
||||
var newId = dbContr.Upsert(item);
|
||||
if (newId > 0)
|
||||
{
|
||||
numOk++;
|
||||
}
|
||||
}
|
||||
// solo se tutto andato bene esito ALL_OK
|
||||
if (num2Write == numOk)
|
||||
{
|
||||
answ = SyncResult.ALL_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user