diff --git a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs
index 89375376..55f4735d 100644
--- a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs
+++ b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs
@@ -15,20 +15,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers
///
public class MagmanController : IDisposable
{
- ///
- /// Enum del risultato della sincronizzazione
- /// 0: ALL_OK
- ///
- public enum SyncResult
- {
- ALL_OK = 0,
- ERR_ND,
- ERR_ServerKo,
- ERR_CloudMatNotSent,
- ERR_SrcMatNotFound,
- ERR_MergeMatEmpty
- }
-
#region Public Constructors
///
@@ -58,6 +44,28 @@ namespace EgtBEAMWALL.DataLayer.Controllers
#endregion Public Constructors
+ #region Public Enums
+
+ ///
+ /// Enum del risultato della sincronizzazione
+ /// 0: ALL_OK
+ ///
+ public enum SyncResult
+ {
+ ALL_OK = 0,
+ ERR_ND,
+ ERR_ServerKo,
+ ERR_CloudMatNotSent,
+ ERR_CloudResNotSent,
+ ERR_SrcMatNotFound,
+ ERR_MergeMatEmpty,
+ ERR_CloudMatEmpty,
+ ERR_Res2SendEmpty,
+ ERR_InvSendError
+ }
+
+ #endregion Public Enums
+
#region Public Methods
public void Dispose()
@@ -71,7 +79,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// - download + sync (locale)
///
/// Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato
- ///
+ /// Risultato sincronizzazione
public SyncResult MaterialsSyncro(string MatCode = "")
{
SyncResult answ = SyncResult.ERR_ND;
@@ -147,7 +155,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// - download + sync (locale)
///
/// Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato
- ///
+ /// Risultato sincronizzazione
public async Task MaterialsSyncroAsync(string MatCode = "")
{
SyncResult answ = SyncResult.ERR_ND;
@@ -225,20 +233,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// Lista items e quantità consumate, se fossero positive vengono cambiate di segno...
///
///
- public bool ResourceSendCons(int idxProjDbId, List rec2send)
+ public SyncResult ResourceSendCons(int idxProjDbId, List rec2send)
{
- bool answ = false;
+ SyncResult answ = SyncResult.ERR_ND;
// verifico server ok
bool servOk = commLib.CheckRemote();
- if (servOk)
+ if (!servOk)
+ {
+ answ = SyncResult.ERR_ServerKo;
+ }
+ else
{
answ = ResourcesSync(rec2send);
- if (answ)
+ if (answ == SyncResult.ALL_OK)
{
// in primis converto le risorse...
List list2send = rec2send.Select(x => RawItemsController.ConvToResDtoNeg(x)).ToList();
- // effettuo invio...
- answ = commLib.ResourceSend(idxProjDbId, ProjResState.Consumed, list2send);
+ if (list2send == null || list2send.Count == 0)
+ {
+ answ = SyncResult.ERR_Res2SendEmpty;
+ }
+ else
+ {
+ // effettuo invio...
+ bool resOk = commLib.ResourceSend(idxProjDbId, ProjResState.Consumed, list2send);
+ if (!resOk)
+ {
+ answ = SyncResult.ERR_CloudResNotSent;
+ }
+ else
+ {
+ answ = SyncResult.ALL_OK;
+ }
+ }
}
}
return answ;
@@ -252,20 +279,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// Lista items e quantità consumate, se fossero positive vengono cambiate di segno...
///
///
- public async Task ResourceSendConsAsync(int idxProjDbId, List rec2send)
+ public async Task ResourceSendConsAsync(int idxProjDbId, List rec2send)
{
- bool answ = false;
+ SyncResult answ = SyncResult.ERR_ND;
// verifico server ok
bool servOk = commLib.CheckRemote();
- if (servOk)
+ if (!servOk)
+ {
+ answ = SyncResult.ERR_ServerKo;
+ }
+ else
{
answ = await ResourcesSyncAsync(rec2send);
- if (answ)
+ if (answ == SyncResult.ALL_OK)
{
// in primis converto le risorse...
List list2send = rec2send.Select(x => RawItemsController.ConvToResDtoNeg(x)).ToList();
- // effettuo invio...
- answ = await commLib.ResourceSendAsync(idxProjDbId, ProjResState.Consumed, list2send);
+ if (list2send == null || list2send.Count == 0)
+ {
+ answ = SyncResult.ERR_Res2SendEmpty;
+ }
+ else
+ {
+ // effettuo invio...
+ bool resOk = await commLib.ResourceSendAsync(idxProjDbId, ProjResState.Consumed, list2send);
+ if (!resOk)
+ {
+ answ = SyncResult.ERR_CloudResNotSent;
+ }
+ else
+ {
+ answ = SyncResult.ALL_OK;
+ }
+ }
}
}
return answ;
@@ -277,20 +323,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// DB Id del progetto x cui si inviano i dati
/// Lista items con quantità prevista
///
- public bool ResourceSendEstimate(int idxProjDbId, List rec2send)
+ public SyncResult ResourceSendEstimate(int idxProjDbId, List rec2send)
{
- bool answ = false;
+ SyncResult answ = SyncResult.ERR_ND;
// verifico server ok
bool servOk = commLib.CheckRemote();
- if (servOk)
+ if (!servOk)
+ {
+ answ = SyncResult.ERR_ServerKo;
+ }
+ else
{
answ = ResourcesSync(rec2send);
- if (answ)
+ if (answ == SyncResult.ALL_OK)
{
// in primis converto le risorse...
List list2send = rec2send.Select(x => RawItemsController.ConvToResDto(x)).ToList();
- // effettuo invio...
- answ = commLib.ResourceSend(idxProjDbId, ProjResState.Estimated, list2send);
+ if (list2send == null || list2send.Count == 0)
+ {
+ answ = SyncResult.ERR_Res2SendEmpty;
+ }
+ else
+ {
+ // effettuo invio...
+ bool resOk = commLib.ResourceSend(idxProjDbId, ProjResState.Estimated, list2send);
+ if (!resOk)
+ {
+ answ = SyncResult.ERR_CloudResNotSent;
+ }
+ else
+ {
+ answ = SyncResult.ALL_OK;
+ }
+ }
}
}
return answ;
@@ -302,20 +367,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// DB Id del progetto x cui si inviano i dati
/// Lista items con quantità prevista
///
- public async Task ResourceSendEstimateAsync(int idxProjDbId, List rec2send)
+ public async Task ResourceSendEstimateAsync(int idxProjDbId, List rec2send)
{
- bool answ = false;
+ SyncResult answ = SyncResult.ERR_ND;
// verifico server ok
bool servOk = commLib.CheckRemote();
- if (servOk)
+ if (!servOk)
+ {
+ answ = SyncResult.ERR_ServerKo;
+ }
+ else
{
answ = await ResourcesSyncAsync(rec2send);
- if (answ)
+ if (answ == SyncResult.ALL_OK)
{
// in primis converto le risorse...
List list2send = rec2send.Select(x => RawItemsController.ConvToResDto(x)).ToList();
- // effettuo invio...
- answ = await commLib.ResourceSendAsync(idxProjDbId, ProjResState.Estimated, list2send);
+ if (list2send == null || list2send.Count == 0)
+ {
+ answ = SyncResult.ERR_Res2SendEmpty;
+ }
+ else
+ {
+ // effettuo invio...
+ bool resOk = await commLib.ResourceSendAsync(idxProjDbId, ProjResState.Estimated, list2send);
+ if (!resOk)
+ {
+ answ = SyncResult.ERR_CloudResNotSent;
+ }
+ else
+ {
+ answ = SyncResult.ALL_OK;
+ }
+ }
}
}
return answ;
@@ -326,12 +410,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// - download + sync (locale)
///
///
- public bool ResourcesForceSyncAll()
+ public SyncResult ResourcesForceSyncAll()
{
- 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 matDbContr = new MaterialsController())
{
@@ -339,23 +427,42 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
// elenco di tutti i materiali
var matListAll = commLib.MaterialsGet();
- // ciclo 1:1 materiali + inventario
- foreach (var mat in matListAll)
+ if (matListAll == null || matListAll.Count == 0)
{
- List list2merge = commLib.InventoryGet(mat.MatCloudId);
- // ciclo sui materiali...
- if (list2merge != null)
+ answ = SyncResult.ERR_CloudMatEmpty;
+ }
+ else
+ {
+ int numMatOk = 0;
+ int numMat2Write = 0;
+ // ciclo 1:1 materiali + inventario
+ foreach (var mat in matListAll)
{
- foreach (var item in list2merge)
+ List list2merge = commLib.InventoryGet(mat.MatCloudId);
+ // ciclo sui materiali...
+ if (list2merge != null)
{
- _ = matDbContr.Insert(MaterialsController.ConvToModel(item));
- // ora processo 1:1 gli items...
- foreach (var rawItem in item.ItemList)
+ numMat2Write += list2merge.Count();
+ foreach (var item in list2merge)
{
- rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true));
+ var newId = matDbContr.Insert(MaterialsController.ConvToModel(item));
+ if (newId > 0)
+ {
+ numMatOk++;
+ // ora processo 1:1 gli items...
+ foreach (var rawItem in item.ItemList)
+ {
+ rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true));
+ }
+ }
}
}
}
+ // solo se tutto andato bene esito ALL_OK
+ if (numMat2Write == numMatOk)
+ {
+ answ = SyncResult.ALL_OK;
+ }
}
}
}
@@ -373,12 +480,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// SOLO SE RawItemCloudId == 0
///
///
- public bool ResourcesSync(List MatIdList)
+ public SyncResult ResourcesSync(List MatIdList)
{
- bool fatto = false;
+ SyncResult answ = SyncResult.ERR_ND;
// verifico server ok
bool servOk = commLib.CheckRemote();
- if (servOk)
+ if (!servOk)
+ {
+ answ = SyncResult.ERR_ServerKo;
+ }
+ else
{
using (RawItemsController rawItemDbContr = new RawItemsController())
{
@@ -388,20 +499,28 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
// recupero elenco rawItem
List currList = rawItemDbContr.GetFiltModel(item);
- // verifico se e cosa aggiungere...
- foreach (var rawItem in currList)
+ if (currList == null || currList.Count == 0)
{
- if (!rawItemList.Contains(rawItem))
+ answ = SyncResult.ERR_Res2SendEmpty;
+ break;
+ }
+ else
+ {
+ // verifico se e cosa aggiungere...
+ foreach (var rawItem in currList)
{
- rawItemList.Add(rawItem);
+ if (!rawItemList.Contains(rawItem))
+ {
+ rawItemList.Add(rawItem);
+ }
}
}
}
// effettuo sync alla fine...
- fatto = ResourcesSync(rawItemList);
+ answ = ResourcesSync(rawItemList);
}
}
- return fatto;
+ return answ;
}
///
@@ -413,12 +532,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId==0
///
///
- public bool ResourcesSync(List itemList)
+ public SyncResult ResourcesSync(List itemList)
{
- 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 matDbContr = new MaterialsController())
{
@@ -446,29 +569,46 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// per ogni materiale faccio invio + rilettura/sync...
if (dictMat != null && dictMat.Count > 0)
{
+ int numMatOk = 0;
+ int numMat2Write = 0;
foreach (var matKVP in dictMat)
{
// invio!
- answ = commLib.InventorySend(matKVP.Value.ItemList);
+ bool invOk = commLib.InventorySend(matKVP.Value.ItemList);
// ora rileggo dati...
- if (answ)
+ if (!invOk)
+ {
+ answ = SyncResult.ERR_InvSendError;
+ break;
+ }
+ else
{
List list2merge = commLib.InventoryGet(matKVP.Key);
// ciclo sui materiali...
if (list2merge != null)
{
+ numMat2Write += list2merge.Count();
foreach (var item in list2merge)
{
- _ = matDbContr.Insert(MaterialsController.ConvToModel(item));
- // ora processo 1:1 gli items...
- foreach (var rawItem in item.ItemList)
+ var newId = matDbContr.Insert(MaterialsController.ConvToModel(item));
+ if (newId > 0)
{
- rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true));
+ numMatOk++;
+ // ora processo 1:1 gli items...
+ foreach (var rawItem in item.ItemList)
+ {
+ rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true));
+ }
}
}
}
}
}
+ // solo se tutto andato bene esito ALL_OK
+ if (numMat2Write == numMatOk)
+ {
+ answ = SyncResult.ALL_OK;
+ }
}
}
}
@@ -486,12 +626,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// SOLO SE RawItemCloudId == 0
///
///
- public async Task ResourcesSyncAsync(List MatIdList)
+ public async Task ResourcesSyncAsync(List MatIdList)
{
- bool fatto = true;
+ SyncResult answ = SyncResult.ERR_ND;
// verifico server ok
bool servOk = commLib.CheckRemote();
- if (servOk)
+ if (!servOk)
+ {
+ answ = SyncResult.ERR_ServerKo;
+ }
+ else
{
using (RawItemsController rawItemDbContr = new RawItemsController())
{
@@ -500,13 +644,20 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
// recupero elenco rawItem
var currList = rawItemDbContr.GetFiltModel(item);
- // effettuo sync...
- bool callOk = await ResourcesSyncAsync(currList);
- fatto = fatto && callOk;
+ if (currList == null || currList.Count == 0)
+ {
+ answ = SyncResult.ERR_Res2SendEmpty;
+ break;
+ }
+ else
+ {
+ // effettuo sync...
+ answ = await ResourcesSyncAsync(currList);
+ }
}
}
}
- return fatto;
+ return answ;
}
///
@@ -519,12 +670,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// RawItemCloudId == 0
///
///
- public async Task ResourcesSyncAsync(List itemList)
+ public async Task ResourcesSyncAsync(List itemList)
{
- 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 matDbContr = new MaterialsController())
{
@@ -553,29 +708,46 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// per ogni materiale faccio invio + rilettura/sync...
if (dictMat != null && dictMat.Count > 0)
{
+ int numMatOk = 0;
+ int numMat2Write = 0;
foreach (var matKVP in dictMat)
{
// invio!
- answ = await commLib.InventorySendAsync(matKVP.Value.ItemList);
+ bool invOk = await commLib.InventorySendAsync(matKVP.Value.ItemList);
// ora rileggo dati...
- if (answ)
+ if (!invOk)
+ {
+ answ = SyncResult.ERR_InvSendError;
+ break;
+ }
+ else
{
List list2merge = await commLib.InventoryGetAsync(matKVP.Key);
// ciclo sui materiali...
if (list2merge != null)
{
+ numMat2Write += list2merge.Count();
foreach (var item in list2merge)
{
- _ = matDbContr.Insert(MaterialsController.ConvToModel(item));
- // ora processo 1:1 gli items...
- foreach (var rawItem in item.ItemList)
+ var newId = matDbContr.Insert(MaterialsController.ConvToModel(item));
+ if (newId > 0)
{
- rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true));
+ numMatOk++;
+ // ora processo 1:1 gli items...
+ foreach (var rawItem in item.ItemList)
+ {
+ rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true));
+ }
}
}
}
}
}
+ // solo se tutto andato bene esito ALL_OK
+ if (numMat2Write == numMatOk)
+ {
+ answ = SyncResult.ALL_OK;
+ }
}
}
}