From b4bdeed8564edcd37fae62162b656befabdc133d Mon Sep 17 00:00:00 2001 From: Gerardo Date: Thu, 9 Jun 2022 00:35:13 +0200 Subject: [PATCH] Cambios flag por ventana Problemas sincro al importar --- Button/ButtonConfig.cs | 4 +- Button/ButtonLimp.cs | 8 +- Button/ButtonRec.cs | 8 +- Helper/HelperGdb.cs | 24 ++- Model/OliviaGlob.cs | 48 +++++- Services/FinProcServ.cs | 153 +++++++++++++++++- .../Configuracion/DockpaneConfigViewModel.cs | 2 +- .../Limpieza/DockpaneLimpiezaViewModel.cs | 2 +- .../Recogida/DockpaneRecogidaViewModel.cs | 4 +- 9 files changed, 225 insertions(+), 28 deletions(-) diff --git a/Button/ButtonConfig.cs b/Button/ButtonConfig.cs index 113febf..15fe141 100644 --- a/Button/ButtonConfig.cs +++ b/Button/ButtonConfig.cs @@ -25,9 +25,11 @@ namespace OliviaAddInPro { protected override void OnClick() { - if (OliviaGlob.TipoEjec == TiposEjecucion.Ninguno) + if (OliviaGlob.TipoView == TiposEjecucion.Ninguno) { OliviaGlob.SetFlagTipEjec(TiposEjecucion.Props); + OliviaGlob.ViewSetFlagTipEjec(TiposEjecucion.Props); + DockpaneConfigViewModel.Reset(); DockpaneConfigViewModel.Show(); } diff --git a/Button/ButtonLimp.cs b/Button/ButtonLimp.cs index 96e4373..48f2c19 100644 --- a/Button/ButtonLimp.cs +++ b/Button/ButtonLimp.cs @@ -27,7 +27,7 @@ namespace OliviaAddInPro { ///////////////////////////////////////////////////// - if (OliviaGlob.TipoEjec == TiposEjecucion.Ninguno) + if (OliviaGlob.TipoView == TiposEjecucion.Ninguno) { ///Comprueba que existe la red navegable configurada @@ -39,13 +39,15 @@ namespace OliviaAddInPro else { OliviaGlob.SetFlagTipEjec(TiposEjecucion.Limp); - if(OliviaGlob.Limp==null) + OliviaGlob.ViewSetFlagTipEjec(TiposEjecucion.Limp); + + if (OliviaGlob.Limp==null) OliviaGlob.Limp = new Limpieza(); DockpaneLimpiezaViewModel.Reset(); DockpaneLimpiezaViewModel.Show(); } } - else if(OliviaGlob.IsProps()) + else if(OliviaGlob.ViewIsProps()) { HelperGlobal.ponMsg(Resource1.String_estaenprops, System.Windows.MessageBoxImage.Warning); } diff --git a/Button/ButtonRec.cs b/Button/ButtonRec.cs index d038386..df82527 100644 --- a/Button/ButtonRec.cs +++ b/Button/ButtonRec.cs @@ -25,7 +25,7 @@ namespace OliviaAddInPro { protected override void OnClick() { - if (OliviaGlob.TipoEjec==TiposEjecucion.Ninguno) + if (OliviaGlob.TipoView == TiposEjecucion.Ninguno) { ///Comprueba que existe la red navegable configurada if (!OliviaGlob.CompruebaNwYCampos()) @@ -36,13 +36,15 @@ namespace OliviaAddInPro else { OliviaGlob.SetFlagTipEjec(TiposEjecucion.Reco); - if(OliviaGlob.Reco==null) + OliviaGlob.ViewSetFlagTipEjec(TiposEjecucion.Reco); + + if (OliviaGlob.Reco==null) OliviaGlob.Reco = new Recogida(); DockpaneRecogidaViewModel.Reset(); DockpaneRecogidaViewModel.Show(); } } - else if (OliviaGlob.IsProps()) + else if (OliviaGlob.ViewIsProps()) { HelperGlobal.ponMsg(Resource1.String_estaenprops, System.Windows.MessageBoxImage.Warning); } diff --git a/Helper/HelperGdb.cs b/Helper/HelperGdb.cs index 1eb2f84..e76b531 100644 --- a/Helper/HelperGdb.cs +++ b/Helper/HelperGdb.cs @@ -2108,9 +2108,10 @@ namespace OliviaAddInPro.Helper { ArcGIS.Core.Geometry.SpatialReference spatref = GetSpatRef(nom_shp); var environments = Geoprocessing.MakeEnvironmentArray(outputCoordinateSystem: spatref); - CancelableProgressorSource cps = new CancelableProgressorSource(); + //CancelableProgressorSource cps = new CancelableProgressorSource(); + var _cts = new System.Threading.CancellationTokenSource(); var completa = false; - var gpres = Geoprocessing.ExecuteToolAsync("FeatureClassToFeatureClass_conversion", args, environments,cps.CancellationTokenSource.Token, + var gpres = Geoprocessing.ExecuteToolAsync("FeatureClassToFeatureClass_conversion", args, environments, _cts.Token, (event_name, o) => // implement delegate and handle events { switch (event_name) @@ -2134,9 +2135,9 @@ namespace OliviaAddInPro.Helper var av = (int)o; if ((int)o < 0) { - completa = true; + //completa = true; //System.Windows.MessageBox.Show(msg2); - //cps.CancellationTokenSource.Cancel(); + // _cts.Cancel(); } break; @@ -2144,7 +2145,7 @@ namespace OliviaAddInPro.Helper } }); - while (!gpres.IsCompleted && gpres.IsCanceled && gpres.IsFaulted && !completa) + while (!gpres.IsCompleted && !gpres.IsCanceled && !gpres.IsFaulted) Thread.Sleep(10); if (gpres.IsCanceled) @@ -2162,15 +2163,24 @@ namespace OliviaAddInPro.Helper res.Error.Add("Error: " + msg); return res; } + /* + _cts.Cancel(); + for (int ii = 0; ii < 1000; ii++) + { + if (gpres.IsCompleted && gpres.IsCanceled && gpres.IsFaulted) + break; + Thread.Sleep(10); + } try { - gpres.Dispose(); + if (!gpres.IsCompleted && !gpres.IsCanceled && !gpres.IsFaulted) + gpres.Dispose(); } catch (Exception e) { string msg = ""; msg = e.Message; - } + }*/ res.Value = true; //actualiza la gdb Refresh(System.IO.Path.GetDirectoryName(Gdb_dataset)); diff --git a/Model/OliviaGlob.cs b/Model/OliviaGlob.cs index 6a1b25e..a78aa57 100644 --- a/Model/OliviaGlob.cs +++ b/Model/OliviaGlob.cs @@ -90,6 +90,10 @@ namespace OliviaAddInPro.Model get { return tipoEjec; } set { tipoEjec = value; } } + + public static TiposEjecucion TipoView + { get; set; } + public static Limpieza Limp { get { return limp; } @@ -107,6 +111,7 @@ namespace OliviaAddInPro.Model public static void Inicia() { tipoEjec = TiposEjecucion.Ninguno; + TipoView= TiposEjecucion.Ninguno; IniDefault(); LimpiezaDef.iniciaLimpDef(); RecogidaDef.iniciaRecoDef(); @@ -162,6 +167,39 @@ namespace OliviaAddInPro.Model //quita el flag al tipo de ejecución OliviaGlob.TipoEjec = OliviaGlob.TipoEjec & ~flag; } + + + public static bool ViewIsLimp() + { + return ViewIsHasFlagTipEjec(TiposEjecucion.Limp); + } + public static bool ViewIsReco() + { + return ViewIsHasFlagTipEjec(TiposEjecucion.Reco); + } + public static bool ViewIsProps() + { + return ViewIsHasFlagTipEjec(TiposEjecucion.Props); + } + public static bool ViewIsHasFlagTipEjec(TiposEjecucion flag) + { + return (OliviaGlob.TipoView & flag) == flag; + } + public static void ViewSetFlagTipEjec(TiposEjecucion flag) + { + //pone el tipo de ejecución igual al flag + OliviaGlob.TipoView = flag; + } + public static void ViewAddFlagTipEjec(TiposEjecucion flag) + { + //añade el flag al tipo de ejecución + OliviaGlob.TipoView = OliviaGlob.TipoEjec | flag; + } + public static void ViewRemoveFlagTipEjec(TiposEjecucion flag) + { + //quita el flag al tipo de ejecución + OliviaGlob.TipoView = OliviaGlob.TipoEjec & ~flag; + } /** * Habilita Sh=true * o Deshabilita sh=false @@ -175,6 +213,7 @@ namespace OliviaAddInPro.Model { DockpaneLimpiezaViewModel.Show(); SetFlagTipEjec(TiposEjecucion.Limp); + ViewSetFlagTipEjec(TiposEjecucion.Limp); } else { @@ -188,6 +227,8 @@ namespace OliviaAddInPro.Model { DockpaneRecogidaViewModel.Show(); SetFlagTipEjec(TiposEjecucion.Reco); + ViewSetFlagTipEjec(TiposEjecucion.Reco); + } else @@ -201,6 +242,8 @@ namespace OliviaAddInPro.Model { DockpaneConfigViewModel.Show(); SetFlagTipEjec(TiposEjecucion.Props); + ViewSetFlagTipEjec(TiposEjecucion.Props); + } else @@ -210,10 +253,11 @@ namespace OliviaAddInPro.Model } else { - SetFlagTipEjec(TiposEjecucion.Ninguno); + //SetFlagTipEjec(TiposEjecucion.Ninguno); + ViewSetFlagTipEjec(TiposEjecucion.Ninguno); } if (!sh) - SetFlagTipEjec(TiposEjecucion.Ninguno); + ViewSetFlagTipEjec(TiposEjecucion.Ninguno); } /** diff --git a/Services/FinProcServ.cs b/Services/FinProcServ.cs index c5ecd6d..4050831 100644 --- a/Services/FinProcServ.cs +++ b/Services/FinProcServ.cs @@ -66,8 +66,7 @@ namespace OliviaAddInPro.Services //borra los archivos que le toca borrar //BorraFiles(); } - - public void finEjecuta2(Respuesta res, TratamientoComun inst) + public void finEjecuta2_old(Respuesta res, TratamientoComun inst) { String msg = string.Empty; String msg_err = "Errores en el proceso de importación de resultados"; @@ -119,7 +118,7 @@ namespace OliviaAddInPro.Services { if (resp2.HasError) { - msg = resp2.Error.First(); + msg = resp2.Error.First(); } else msg = msg_err; @@ -131,22 +130,22 @@ namespace OliviaAddInPro.Services //pone modo config2 OliviaGlob.AddFlagTipEjec(TiposEjecucion.Config2); //actualiza la capa de la que tiene que leer ahora para planificar - inst.CapaElems = resp.Value; + inst.CapaElems = resp.Value; } } } } - catch(Exception ex) + catch (Exception ex) { - msg = msg_err + ": "+msg+": "+ex.Message; + msg = msg_err + ": " + msg + ": " + ex.Message; mal = true; } if (mal) { //reinicia flags - if(OliviaGlob.IsLimp()) + if (OliviaGlob.IsLimp()) OliviaGlob.SetFlagTipEjec(TiposEjecucion.Limp); - else if(OliviaGlob.IsReco()) + else if (OliviaGlob.IsReco()) OliviaGlob.SetFlagTipEjec(TiposEjecucion.Reco); } @@ -163,7 +162,145 @@ namespace OliviaAddInPro.Services //borra los archivos que le toca borrar //BorraFiles(); } + public void finEjecuta2(Respuesta res, TratamientoComun inst) + { + String msg = string.Empty; + String msg_err = "Errores en el proceso de importación de resultados"; + var resp2 = new Respuesta { Value = string.Empty }; + var resp = new Respuesta { Value = string.Empty }; + bool mal = false; + try + { + + + //gestiona los flags, el estado de finok o finnok va en res.Vale + if (res.HasError) + { + msg = res.Error.First(); + //actualiza los flags + OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.FinEjecNOk); + } + else + { + //actualiza los flags + OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.FinEjecOk); + //importa resultados + resp = IniImport(); + if (resp.HasError) + { + msg = resp.Error.First(); + mal = true; + } + else + { + ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run((Func)(() => + { + string GdbFileName = resp.Value; + + if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.EjecSecto)) //Ha terminado bien la sectorización + { + //actualiza los flags + OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.EjecSecto); + //acciones de importación + resp2 = inst.ServCom.ImportSecto(GdbFileName); + } + else if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.EjecPlanif)) //Ha terminado bien la planificación + { + //actualiza los flags + OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.EjecPlanif); + //guarda csv + GuardaCsv(inst); + //acciones de importación + resp2 = inst.ServCom.ImportPlanif(GdbFileName); + + } + Application.Current.Dispatcher.BeginInvoke(new Action, Respuesta, bool, string, TratamientoComun>((p, v, x, u, w) => finEjecuta3(p, v, x, u, w)), resp, resp2, mal, msg, inst); + return true; + })); + + } + } + } + catch(Exception ex) + { + msg = msg_err + ": "+msg+": "+ex.Message; + mal = true; + } + if (mal) + { + //reinicia flags + if (OliviaGlob.IsLimp()) + OliviaGlob.SetFlagTipEjec(TiposEjecucion.Limp); + else if (OliviaGlob.IsReco()) + OliviaGlob.SetFlagTipEjec(TiposEjecucion.Reco); + + HelperGlobal.ponMsg(msg); + OliviaGlob.progrDialog.Hide(); + //muestra la ventana + OliviaGlob.ShowHidePane(true); + var task = ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() => + { + //borra los archivos que le toca borrar + BorraFiles(); + }); + } + } + public void finEjecuta3(Respuesta resp, Respuesta resp2,bool mal, string msg, TratamientoComun inst) + { + + String msg_err = "Errores en el proceso de importación de resultados"; + if (!mal) + { + try + { + if (string.IsNullOrEmpty(resp2.Value)) + { + if (resp2.HasError) + { + msg = resp2.Error.First(); + } + else + msg = msg_err; + mal = true; + } + else + { + msg = Resource1.String_exito; + //pone modo config2 + OliviaGlob.AddFlagTipEjec(TiposEjecucion.Config2); + //actualiza la capa de la que tiene que leer ahora para planificar + inst.CapaElems = resp.Value; + } + } + catch (Exception ex) + { + msg = msg_err + ": " + msg + ": " + ex.Message; + mal = true; + } + } + if (mal) + { + //reinicia flags + if (OliviaGlob.IsLimp()) + OliviaGlob.SetFlagTipEjec(TiposEjecucion.Limp); + else if (OliviaGlob.IsReco()) + OliviaGlob.SetFlagTipEjec(TiposEjecucion.Reco); + + } + HelperGlobal.ponMsg(msg); + OliviaGlob.progrDialog.Hide(); + //muestra la ventana + OliviaGlob.ShowHidePane(true); + var task = ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() => + { + //borra los archivos que le toca borrar + BorraFiles(); + }); + //task.Wait(); + //borra los archivos que le toca borrar + //BorraFiles(); + } /** * Borra los archivos exportados para el proceso */ diff --git a/ViewModel/Configuracion/DockpaneConfigViewModel.cs b/ViewModel/Configuracion/DockpaneConfigViewModel.cs index c724f39..93c8654 100644 --- a/ViewModel/Configuracion/DockpaneConfigViewModel.cs +++ b/ViewModel/Configuracion/DockpaneConfigViewModel.cs @@ -45,7 +45,7 @@ namespace OliviaAddInPro } protected override void OnHidden() { - OliviaGlob.SetFlagTipEjec(TiposEjecucion.Ninguno); + OliviaGlob.ViewSetFlagTipEjec(TiposEjecucion.Ninguno); } internal static void Hide_() { diff --git a/ViewModel/Limpieza/DockpaneLimpiezaViewModel.cs b/ViewModel/Limpieza/DockpaneLimpiezaViewModel.cs index 31aa533..66e5a57 100644 --- a/ViewModel/Limpieza/DockpaneLimpiezaViewModel.cs +++ b/ViewModel/Limpieza/DockpaneLimpiezaViewModel.cs @@ -68,7 +68,7 @@ namespace OliviaAddInPro } protected override void OnHidden() { - OliviaGlob.SetFlagTipEjec(TiposEjecucion.Ninguno); + OliviaGlob.ViewSetFlagTipEjec(TiposEjecucion.Ninguno); } /// /// Text shown near the top of the DockPane. diff --git a/ViewModel/Recogida/DockpaneRecogidaViewModel.cs b/ViewModel/Recogida/DockpaneRecogidaViewModel.cs index 25e59c8..4523234 100644 --- a/ViewModel/Recogida/DockpaneRecogidaViewModel.cs +++ b/ViewModel/Recogida/DockpaneRecogidaViewModel.cs @@ -45,7 +45,7 @@ namespace OliviaAddInPro } protected override void OnHidden() { - OliviaGlob.SetFlagTipEjec(TiposEjecucion.Ninguno); + OliviaGlob.ViewSetFlagTipEjec(TiposEjecucion.Ninguno); } internal static void Hide_() { @@ -67,7 +67,7 @@ namespace OliviaAddInPro if (isVisible == false && !firstTimeShow && !hideTemp) { //avisa de cerrar la ventana - OliviaGlob.SetFlagTipEjec(TiposEjecucion.Ninguno); + OliviaGlob.ViewSetFlagTipEjec(TiposEjecucion.Ninguno); } if (firstTimeShow) firstTimeShow = false;