Aggiunta metodo CloudSyncro
This commit is contained in:
@@ -182,6 +182,96 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue sync dei CloudId x Materiali e RawItems:
|
||||
/// - upload + sync (cloud)
|
||||
/// - download + sync (locale)
|
||||
/// </summary>
|
||||
/// <param name="ForceAll">
|
||||
/// true = Indica di forzare il sync di tutto, false = SOLAMENTE per i nuovi materiali (MatCloudId==0)
|
||||
/// </param>
|
||||
/// <param name="SyncQty">True: sincronizza quantità, False = NON sincronizza quantità</param>
|
||||
/// <returns></returns>
|
||||
public SyncResult CloudSyncro(bool ForceAll, bool SyncQty)
|
||||
{
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
List<int> MatIdList = new List<int>();
|
||||
// verifico server ok
|
||||
bool servOk = commLib.CheckRemote();
|
||||
if (!servOk)
|
||||
{
|
||||
answ = SyncResult.ERR_ServerKo;
|
||||
}
|
||||
else
|
||||
{
|
||||
using (MaterialsController matDbContr = new MaterialsController())
|
||||
{
|
||||
// elenco materiali (completo)
|
||||
var matListDb = matDbContr.GetFiltModel("");
|
||||
if (matListDb == null)
|
||||
{
|
||||
answ = SyncResult.ERR_SrcMatNotFound;
|
||||
}
|
||||
else
|
||||
{
|
||||
// se non è forzato a tutti --> filtro solo quelli nuovi
|
||||
if (!ForceAll)
|
||||
{
|
||||
matListDb = matListDb.Where(x => x.MatCloudId == 0).ToList();
|
||||
}
|
||||
// eseguo il sync!
|
||||
List<MaterialDTO> list2send = matListDb.Select(x => MaterialsController.ConvToDto(x)).ToList();
|
||||
// preparo pacchetto invio...
|
||||
bool okMat = commLib.MaterialsSend(list2send);
|
||||
// se inviato, scarico x merge locale
|
||||
if (!okMat)
|
||||
{
|
||||
answ = SyncResult.ERR_CloudMatNotSent;
|
||||
}
|
||||
else
|
||||
{
|
||||
// recupero elenco materiali (ALL)
|
||||
List<MaterialDTO> list2merge = commLib.MaterialsGet();
|
||||
// effettuo conversione DTO --> model + merge
|
||||
List<MaterialModel> list2MergeDb = list2merge.Select(x => MaterialsController.ConvToModel(x)).ToList();
|
||||
// ciclo...
|
||||
if (list2MergeDb == null)
|
||||
{
|
||||
answ = SyncResult.ERR_MergeMatEmpty;
|
||||
}
|
||||
else
|
||||
{
|
||||
int numOk = 0;
|
||||
int num2Write = list2MergeDb.Count();
|
||||
foreach (var item in list2MergeDb)
|
||||
{
|
||||
var newId = matDbContr.Upsert(item);
|
||||
if (newId > 0)
|
||||
{
|
||||
numOk++;
|
||||
// aggiungo ID x successivo sync dei RawItems del materiale...
|
||||
MatIdList.Add(newId);
|
||||
}
|
||||
}
|
||||
// se non fosse tutto ok --> loggo
|
||||
if (num2Write != numOk)
|
||||
{
|
||||
Log.Error($"Errore sync Materiali | num2Write: {num2Write} | numOk: {numOk}");
|
||||
}
|
||||
else
|
||||
{
|
||||
answ = SyncResult.ALL_OK;
|
||||
}
|
||||
// eseguo sync dell'elenco RawItems
|
||||
answ = ResourcesSync(MatIdList, SyncQty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
commLib = null;
|
||||
@@ -192,7 +282,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// - upload + sync (cloud)
|
||||
/// - download + sync (locale)
|
||||
/// </summary>
|
||||
/// <param name="MatId">Id LOCALTE del materiale da sincronizzare</param>
|
||||
/// <param name="MatId">Id LOCALE del materiale da sincronizzare</param>
|
||||
/// <returns></returns>
|
||||
public SyncResult MaterialsSyncro(int MatId)
|
||||
{
|
||||
@@ -267,6 +357,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// </summary>
|
||||
/// <param name="onlyNew">Indica di forzare il sync SOLAMENTE per i nuovi materiali (MatCloudId==0)</param>
|
||||
/// <returns></returns>
|
||||
[Obsolete("MaterialsSyncro is deprecated, please use CloudSyncro", true)]
|
||||
public SyncResult MaterialsSyncro(bool onlyNew)
|
||||
{
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
@@ -345,6 +436,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// </summary>
|
||||
/// <param name="MatCode">Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato</param>
|
||||
/// <returns>Risultato sincronizzazione</returns>
|
||||
[Obsolete("MaterialsSyncro is deprecated, please use CloudSyncro", true)]
|
||||
public SyncResult MaterialsSyncro(string MatCode = "")
|
||||
{
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
@@ -421,6 +513,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// </summary>
|
||||
/// <param name="MatCode">Se "" esegue per tutti, altrimenti limitatamente al MatCode cercato</param>
|
||||
/// <returns>Risultato sincronizzazione</returns>
|
||||
[Obsolete("MaterialsSyncro is deprecated, please use CloudSyncro", true)]
|
||||
public async Task<SyncResult> MaterialsSyncroAsync(string MatCode = "")
|
||||
{
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
@@ -504,14 +597,15 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
return answ;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Esegue sync di un SINGOLO PROD (cloud proj):
|
||||
/// - legge il progetto locale + upload x sync (verso cloud)
|
||||
/// - riceve ID cloud e aggiorna in locale...
|
||||
/// </summary>
|
||||
/// <param name="ProdId">Id del Prod da sincronizzare (invio dati con eventuale fix ProjCloudId)</param>
|
||||
/// <param name="ProjCloudId">Id del Prod in rete (eventualmente creato) che verrà RESTITUITO x reference</param>
|
||||
/// <param name="ProjCloudId">
|
||||
/// Id del Prod in rete (eventualmente creato) che verrà RESTITUITO x reference
|
||||
/// </param>
|
||||
/// <returns>Risultato sincronizzazione</returns>
|
||||
public SyncResult ProjSyncro(int ProdId, ref int ProjCloudId)
|
||||
{
|
||||
@@ -672,7 +766,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue sync risorse (Materiali + RawItem) dato elenco MatId:
|
||||
/// Esegue sync risorse RawItem dato elenco MatId:
|
||||
/// - upload + sync (cloud)
|
||||
/// - download + sync (locale)
|
||||
/// </summary>
|
||||
@@ -680,8 +774,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// Elenco Id dei materiali (DB LOCALE): saranno inviati x sync (con quantità sovrascritta)
|
||||
/// SOLO SE RawItemCloudId == 0
|
||||
/// </param>
|
||||
/// <param name="SyncQty">True: sincronizza quantità, False = NON sincronizza quantità</param>
|
||||
/// <returns></returns>
|
||||
public SyncResult ResourcesSync(List<int> MatIdList)
|
||||
public SyncResult ResourcesSync(List<int> MatIdList, bool SyncQty)
|
||||
{
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
// verifico server ok
|
||||
@@ -703,8 +798,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
if (currList == null || currList.Count == 0)
|
||||
{
|
||||
answ = SyncResult.ERR_Res2SendEmpty;
|
||||
// tolto x concludere comunque sync
|
||||
//break;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -719,7 +812,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
}
|
||||
}
|
||||
// effettuo sync alla fine...
|
||||
answ = ResourcesSync(rawItemList);
|
||||
answ = ResourcesSync(rawItemList, SyncQty);
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
@@ -733,8 +826,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
/// <param name="itemList">
|
||||
/// Elenco item, saranno inviati x sync (con quantità sovrascritta) SOLO SE RawItemCloudId==0
|
||||
/// </param>
|
||||
/// <param name="SyncQty">True: sincronizza quantità, False = NON sincronizza quantità</param>
|
||||
/// <returns></returns>
|
||||
public SyncResult ResourcesSync(List<RawItemModel> itemList)
|
||||
public SyncResult ResourcesSync(List<RawItemModel> itemList, bool SyncQty)
|
||||
{
|
||||
SyncResult answ = SyncResult.ERR_ND;
|
||||
// verifico server ok
|
||||
@@ -805,7 +899,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
|
||||
{
|
||||
// sovrascrivo materaile anche x ogni RawItem
|
||||
rawItem.MatLocalId = matLocalId;
|
||||
rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true), false);
|
||||
rawItemDbContr.Upsert(RawItemsController.ConvToModel(rawItem, true), SyncQty);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user