Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse
This commit is contained in:
@@ -44,6 +44,28 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Enums
|
||||
|
||||
/// <summary>
|
||||
/// Enum del risultato della sincronizzazione
|
||||
/// 0: ALL_OK
|
||||
/// </summary>
|
||||
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()
|
||||
@@ -57,25 +79,37 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// - download + sync (locale)
|
||||
/// </summary>
|
||||
/// <param name="MatCode">Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato</param>
|
||||
/// <returns></returns>
|
||||
public bool MaterialsSyncro(string MatCode = "")
|
||||
/// <returns>Risultato sincronizzazione</returns>
|
||||
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 +120,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -106,25 +155,37 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// - download + sync (locale)
|
||||
/// </summary>
|
||||
/// <param name="MatCode">Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato</param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> MaterialsSyncroAsync(string MatCode = "")
|
||||
/// <returns>Risultato sincronizzazione</returns>
|
||||
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 +196,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -157,20 +233,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// Lista items e quantità consumate, se fossero positive vengono cambiate di segno...
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public bool ResourceSendCons(int idxProjDbId, List<RawItemModel> rec2send)
|
||||
public SyncResult ResourceSendCons(int idxProjDbId, List<RawItemModel> 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<ResourceDTO> 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;
|
||||
@@ -184,20 +279,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// Lista items e quantità consumate, se fossero positive vengono cambiate di segno...
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> ResourceSendConsAsync(int idxProjDbId, List<RawItemModel> rec2send)
|
||||
public async Task<SyncResult> ResourceSendConsAsync(int idxProjDbId, List<RawItemModel> 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<ResourceDTO> 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;
|
||||
@@ -209,20 +323,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// <param name="idxProjDbId">DB Id del progetto x cui si inviano i dati</param>
|
||||
/// <param name="rec2send">Lista items con quantità prevista</param>
|
||||
/// <returns></returns>
|
||||
public bool ResourceSendEstimate(int idxProjDbId, List<RawItemModel> rec2send)
|
||||
public SyncResult ResourceSendEstimate(int idxProjDbId, List<RawItemModel> 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<ResourceDTO> 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;
|
||||
@@ -234,20 +367,39 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// <param name="idxProjDbId">DB Id del progetto x cui si inviano i dati</param>
|
||||
/// <param name="rec2send">Lista items con quantità prevista</param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> ResourceSendEstimateAsync(int idxProjDbId, List<RawItemModel> rec2send)
|
||||
public async Task<SyncResult> ResourceSendEstimateAsync(int idxProjDbId, List<RawItemModel> 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<ResourceDTO> 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;
|
||||
@@ -258,12 +410,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// - download + sync (locale)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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())
|
||||
{
|
||||
@@ -271,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<MaterialDTO> 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<MaterialDTO> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -305,12 +480,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// SOLO SE RawItemCloudId == 0
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public bool ResourcesSync(List<int> MatIdList)
|
||||
public SyncResult ResourcesSync(List<int> 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())
|
||||
{
|
||||
@@ -320,20 +499,28 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
{
|
||||
// recupero elenco rawItem
|
||||
List<RawItemModel> 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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -345,12 +532,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId==0
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public bool ResourcesSync(List<RawItemModel> itemList)
|
||||
public SyncResult ResourcesSync(List<RawItemModel> 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())
|
||||
{
|
||||
@@ -378,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<MaterialDTO> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -418,12 +626,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// SOLO SE RawItemCloudId == 0
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> ResourcesSyncAsync(List<int> MatIdList)
|
||||
public async Task<SyncResult> ResourcesSyncAsync(List<int> 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())
|
||||
{
|
||||
@@ -432,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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -451,12 +670,16 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// RawItemCloudId == 0
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> ResourcesSyncAsync(List<RawItemModel> itemList)
|
||||
public async Task<SyncResult> ResourcesSyncAsync(List<RawItemModel> 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())
|
||||
{
|
||||
@@ -485,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<MaterialDTO> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user