using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using OliviaAddInPro.Helper; using OliviaAddInPro.Model; using System.Collections.ObjectModel; using static OliviaAddInPro.Model.ComunDef; using ArcGIS.Desktop.Framework.Threading.Tasks; namespace OliviaAddInPro.Services { class RecogidaServ : EjecServ { private Recogida reco; public RecogidaServ(Recogida _reco) { if (_reco == null) _reco = OliviaGlob.Reco; reco = _reco; } /* * Lee la capa que se ha seleccionzdo de recogida y se comprueba que contiene los campos necesarios * Devuelve 0 si va todo bien, 1 si le falta el campo de kgreco, y 2 si le faltan más u otro */ public int CompruebaCamposReco(string pathCapa) { int NCAMPS = 5; string[] camps; camps = new string[NCAMPS]; camps[0] = RecogidaDef.campos_def.cons_fracc; camps[1] = RecogidaDef.campos_def.cons_nomrec; camps[2] = RecogidaDef.campos_def.cons_lateral; camps[3] = RecogidaDef.campos_def.cons_uds; camps[4] = RecogidaDef.campos_def.cons_kgrec; //camps[5] = RecogidaDef.campos_def.cons_id; int compCamp = HelperGdb.CheckFileds(pathCapa, camps); ErrStr = HelperGdb.OutStr; if (compCamp == 0) return 0; else if (compCamp == 1 && HelperGdb.OutStr.Contains(RecogidaDef.campos_def.cons_kgrec)) //le falta el de kg recogida, que igual no le hace falta return 1; else return 2; //error o le falta 1 que no es el de kg reco o más } /* * A partir de los datos leidos de la capa de recogida se rellena el desplegable de fracción a partir de los datos existentes en la capa. */ public ObservableCollection DameVals(string capa, string campo) { ObservableCollection valores; ErrStr = string.Empty; valores = HelperGdb.GetFieldVals(capa,campo,true).Result; return valores; } /** * Acciones para comenzar ejecución * Modo 0, sectorizar * Modo 1, planificar */ public Respuesta Ejecuta(ModosEjec modo) { var res = new Respuesta() { Value = false }; com = (TratamientoComun)reco; string nombFileAmbs = string.Empty; //Prepara consulta ErrStr = string.Empty; if (!PreparaConsulta(out nombFileAmbs)) { res.Error.Add("No se ha seleccionado una consulta válida" + reco.ConsultaAmbs); return res; } if (com.ProgrSrc._ProgrSrc.Getcancelled()) { res.Error.Add(Resource1.String_cancel_progreso); return res; } //Prepara nombre //Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp reco.NombreShpExp_PrefTto = nombFileAmbs + DameStrPoligs(); string msg = ""; //comienza ejecucion if (!ExportaEjec(modo, out msg)) { res.Error.Add(msg); return res; } if (com.ProgrSrc._ProgrSrc.Getcancelled()) { res.Error.Add(Resource1.String_cancel_progreso); return res; } //cierra las capas que se han abierto durante la exportación CierraCapas(); res.Value = true; return res; } public bool PreparaConsulta(out string nombFileAmbs) { nombFileAmbs = string.Empty; reco.ConsultaAmbs = DameAmbsConsulta(out nombFileAmbs); if (string.IsNullOrEmpty(reco.ConsultaAmbs)) { return false; } return true; } public string DameAmbsConsulta(out string cap_abrev) { string consulta, orstr, aux; consulta = null; cap_abrev = ""; aux = ""; orstr = null; if (reco.TipoFrac != -1) { consulta = consulta + orstr + "(" + RecogidaDef.filtro_str[reco.TipoFrac] + ")"; cap_abrev = reco.TipoFrac.ToString("00"); cap_abrev = "F" + cap_abrev + "_"; if (consulta == "()") consulta = ""; } if (orstr == null) orstr = " AND "; if (reco.TipoCarg != -1) { consulta = consulta + orstr + "(" + RecogidaDef.filtro_str[RecogidaDef.tipos_fracc_str.Length + reco.TipoCarg] + ")"; aux = reco.TipoCarg.ToString("00"); cap_abrev = cap_abrev + "C" + aux; if (consulta == "()") consulta = ""; } if (reco.TipoLate > 0) { consulta = consulta + orstr + "(" + RecogidaDef.campos_def.cons_lateral + " = '" + RecogidaDef.tipos_lateralidad[reco.TipoLate] + "'" + ")"; if (consulta == "()") consulta = ""; } return consulta; } } }