diff --git a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs
index 0a09973e..75ce0345 100644
--- a/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs
+++ b/EgtBEAMWALL.DataLayer/Controllers/MagmanController.cs
@@ -42,9 +42,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// - upload + sync (cloud)
/// - download + sync (locale)
///
- /// Se "" --> tutti, altrimenti limitatamente al MatCode cercato
+ /// Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato
///
- public async Task MaterialsSync(string MatCode = "")
+ public bool MaterialsSyncro(string MatCode = "")
{
bool answ = false;
// verifico server ok
@@ -59,11 +59,60 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
List list2send = matListDb.Select(x => MaterialsController.ConvToDto(x)).ToList();
// preparo pacchetto invio...
- answ = await commLib.MaterialsSend(list2send);
+ answ = commLib.MaterialsSend(list2send);
// se inviato, scarico x merge locale
if (answ)
{
- List list2merge = await commLib.MaterialsGet();
+ List list2merge = commLib.MaterialsGet();
+ // se filtro x materiale processo solo quello...
+ if (!string.IsNullOrEmpty(MatCode))
+ {
+ list2merge = list2merge.Where(x => x.MatCode == MatCode).ToList();
+ }
+ // effettuo conversione DTO --> model + merge
+ List list2MergeDb = list2merge.Select(x => MaterialsController.ConvToModel(x)).ToList();
+ // ciclo...
+ if (list2MergeDb != null)
+ {
+ foreach (var item in list2MergeDb)
+ {
+ _ = dbContr.Insert(item);
+ }
+ }
+ }
+ }
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Esegue sync materiali in modalità asincrona:
+ /// - upload + sync (cloud)
+ /// - download + sync (locale)
+ ///
+ /// Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato
+ ///
+ public async Task MaterialsSyncroAsync(string MatCode = "")
+ {
+ bool answ = false;
+ // verifico server ok
+ bool servOk = commLib.CheckRemote();
+ if (servOk)
+ {
+ using (MaterialsController dbContr = new MaterialsController())
+ {
+ // in primis leggo l'elenco materiali dal DB locale
+ List matListDb = dbContr.GetFiltModel(MatCode);
+ if (matListDb != null)
+ {
+ List list2send = matListDb.Select(x => MaterialsController.ConvToDto(x)).ToList();
+ // preparo pacchetto invio...
+ answ = await commLib.MaterialsSendAsync(list2send);
+ // se inviato, scarico x merge locale
+ if (answ)
+ {
+ List list2merge = await commLib.MaterialsGetAsync();
// se filtro x materiale processo solo quello...
if (!string.IsNullOrEmpty(MatCode))
{
@@ -94,20 +143,47 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// Lista items e quantità consumate, se fossero positive vengono cambiate di segno...
///
///
- public async Task ResourceSendCons(int idxProjDbId, List rec2send)
+ public bool ResourceSendCons(int idxProjDbId, List rec2send)
{
bool answ = false;
// verifico server ok
bool servOk = commLib.CheckRemote();
if (servOk)
{
- answ = await ResourcesSync(rec2send);
+ answ = ResourcesSync(rec2send);
if (answ)
{
// in primis converto le risorse...
List list2send = rec2send.Select(x => RawItemsController.ConvToResDtoNeg(x)).ToList();
// effettuo invio...
- answ = await commLib.ResourceSend(idxProjDbId, ProjResState.Consumed, list2send);
+ answ = commLib.ResourceSend(idxProjDbId, ProjResState.Consumed, list2send);
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Esegue registrazione Risorse (RawItems) come CONSUMI effettivi, versione ASYNC:
+ ///
+ /// DB Id del progetto x cui si inviano i dati
+ ///
+ /// Lista items e quantità consumate, se fossero positive vengono cambiate di segno...
+ ///
+ ///
+ public async Task ResourceSendConsAsync(int idxProjDbId, List rec2send)
+ {
+ bool answ = false;
+ // verifico server ok
+ bool servOk = commLib.CheckRemote();
+ if (servOk)
+ {
+ answ = await ResourcesSyncAsync(rec2send);
+ if (answ)
+ {
+ // in primis converto le risorse...
+ List list2send = rec2send.Select(x => RawItemsController.ConvToResDtoNeg(x)).ToList();
+ // effettuo invio...
+ answ = await commLib.ResourceSendAsync(idxProjDbId, ProjResState.Consumed, list2send);
}
}
return answ;
@@ -119,20 +195,45 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// DB Id del progetto x cui si inviano i dati
/// Lista items con quantità prevista
///
- public async Task ResourceSendEstimate(int idxProjDbId, List rec2send)
+ public bool ResourceSendEstimate(int idxProjDbId, List rec2send)
{
bool answ = false;
// verifico server ok
bool servOk = commLib.CheckRemote();
if (servOk)
{
- answ = await ResourcesSync(rec2send);
+ answ = ResourcesSync(rec2send);
if (answ)
{
// in primis converto le risorse...
List list2send = rec2send.Select(x => RawItemsController.ConvToResDto(x)).ToList();
// effettuo invio...
- answ = await commLib.ResourceSend(idxProjDbId, ProjResState.Estimated, list2send);
+ answ = commLib.ResourceSend(idxProjDbId, ProjResState.Estimated, list2send);
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Esegue registrazione Risorse (RawItems) come stima, versione ASYNC:
+ ///
+ /// DB Id del progetto x cui si inviano i dati
+ /// Lista items con quantità prevista
+ ///
+ public async Task ResourceSendEstimateAsync(int idxProjDbId, List rec2send)
+ {
+ bool answ = false;
+ // verifico server ok
+ bool servOk = commLib.CheckRemote();
+ if (servOk)
+ {
+ answ = await ResourcesSyncAsync(rec2send);
+ if (answ)
+ {
+ // in primis converto le risorse...
+ List list2send = rec2send.Select(x => RawItemsController.ConvToResDto(x)).ToList();
+ // effettuo invio...
+ answ = await commLib.ResourceSendAsync(idxProjDbId, ProjResState.Estimated, list2send);
}
}
return answ;
@@ -144,11 +245,10 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// - download + sync (locale)
///
///
- /// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId
- /// == 0
+ /// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId==0
///
///
- public async Task ResourcesSync(List MatIdList)
+ public bool ResourcesSync(List MatIdList)
{
bool fatto = false;
// verifico server ok
@@ -163,7 +263,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// recupero elenco rawItem
var currList = rawItemDbContr.GetFiltModel(item);
// effettuo sync...
- bool callOk = await ResourcesSync(currList);
+ bool callOk = ResourcesSync(currList);
fatto = fatto && callOk;
}
}
@@ -177,11 +277,10 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// - download + sync (locale)
///
///
- /// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId
- /// == 0
+ /// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId==0
///
///
- public async Task ResourcesSync(List itemList)
+ public bool ResourcesSync(List itemList)
{
bool answ = false;
// verifico server ok
@@ -218,11 +317,118 @@ namespace EgtBEAMWALL.DataLayer.Controllers
foreach (var matKVP in dictMat)
{
// invio!
- answ = await commLib.InventorySend(matKVP.Value.ItemList);
+ answ = commLib.InventorySend(matKVP.Value.ItemList);
// ora rileggo dati...
if (answ)
{
- List list2merge = await commLib.InventoryGet(matKVP.Key);
+ List list2merge = commLib.InventoryGet(matKVP.Key);
+ // ciclo sui materiali...
+ if (list2merge != null)
+ {
+ foreach (var item in list2merge)
+ {
+ _ = matDbContr.Insert(MaterialsController.ConvToModel(item));
+ // ora processo 1:1 gli items...
+ foreach (var rawItem in item.ItemList)
+ {
+ rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return answ;
+ }
+
+ ///
+ /// Esegue sync risorse (Materiali + RawItem) dato elenco MatId, versione ASYNC:
+ /// - upload + sync (cloud)
+ /// - download + sync (locale)
+ ///
+ ///
+ /// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId
+ /// == 0
+ ///
+ ///
+ public async Task ResourcesSyncAsync(List MatIdList)
+ {
+ bool fatto = false;
+ // verifico server ok
+ bool servOk = commLib.CheckRemote();
+ if (servOk)
+ {
+ using (RawItemsController rawItemDbContr = new RawItemsController())
+ {
+ // ciclo per ogni materiale indicato
+ foreach (var item in MatIdList)
+ {
+ // recupero elenco rawItem
+ var currList = rawItemDbContr.GetFiltModel(item);
+ // effettuo sync...
+ bool callOk = await ResourcesSyncAsync(currList);
+ fatto = fatto && callOk;
+ }
+ }
+ }
+ return fatto;
+ }
+
+ ///
+ /// Esegue sync risorse (Materiali + RawItem):
+ /// - upload + sync (cloud)
+ /// - download + sync (locale)
+ ///
+ ///
+ /// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId
+ /// == 0
+ ///
+ ///
+ public async Task ResourcesSyncAsync(List itemList)
+ {
+ bool answ = false;
+ // verifico server ok
+ bool servOk = commLib.CheckRemote();
+ if (servOk)
+ {
+ using (MaterialsController matDbContr = new MaterialsController())
+ {
+ using (RawItemsController rawItemDbContr = new RawItemsController())
+ {
+ // per prima cosa invio dati
+ Dictionary dictMat = new Dictionary();
+ // costruisco elenco materiali da inviare in magazzino (se RawItemCloudId==
+ // 0) ...
+ var rec2sync = itemList.Where(x => x.RawItemCloudId == 0).ToList();
+ foreach (var item in rec2sync)
+ {
+ // verifico se mancasse il materiale nel caso lo aggiungo...
+ if (!dictMat.ContainsKey(item.MatId))
+ {
+ var rigaMat = matDbContr.FindByDbIdModel(item.MatId);
+ if (rigaMat != null)
+ {
+ var rigaMatDto = MaterialsController.ConvToDto(rigaMat);
+ dictMat.Add(item.MatId, rigaMatDto);
+ }
+ }
+ // a questo punto aggiungo item nel DTO del dictionary
+ dictMat[item.MatId].ItemList.Add(RawItemsController.ConvToItemDto(item));
+ }
+ // per ogni materiale faccio invio + rilettura/sync...
+ if (dictMat != null && dictMat.Count > 0)
+ {
+ foreach (var matKVP in dictMat)
+ {
+ // invio!
+ answ = await commLib.InventorySendAsync(matKVP.Value.ItemList);
+ // ora rileggo dati...
+ if (answ)
+ {
+ List list2merge = await commLib.InventoryGetAsync(matKVP.Key);
// ciclo sui materiali...
if (list2merge != null)
{
diff --git a/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj b/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj
index 974a9f7d..ac7fe5e6 100644
--- a/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj
+++ b/EgtBEAMWALL.DataLayer/EgtBEAMWALL.DataLayer.csproj
@@ -47,7 +47,7 @@
..\ExtLibs\EgtWPFLib5.dll
- ..\packages\EgwProxy.MagMan.1.0.2402.610\lib\EgwProxy.MagMan.dll
+ ..\packages\EgwProxy.MagMan.1.0.2402.614\lib\EgwProxy.MagMan.dll
..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll
diff --git a/EgtBEAMWALL.DataLayer/packages.config b/EgtBEAMWALL.DataLayer/packages.config
index 746c80aa..a212d61c 100644
--- a/EgtBEAMWALL.DataLayer/packages.config
+++ b/EgtBEAMWALL.DataLayer/packages.config
@@ -2,7 +2,7 @@
-
+