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) { reco = _reco; RellenaFiltrosReco(); } /* * 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 = 6; string[] camps; camps = new string[NCAMPS]; camps[0] = RecogidaDef.campos_def.cons_id; camps[1] = RecogidaDef.campos_def.cons_fracc; camps[2] = RecogidaDef.campos_def.cons_nomrec; camps[3] = RecogidaDef.campos_def.cons_lateral; camps[4] = RecogidaDef.campos_def.cons_uds; camps[5] = RecogidaDef.campos_def.cons_kgrec; int compCamp = CompruebaCampos(pathCapa, camps); if (compCamp == 0) return 0; else if (compCamp == 1 && ErrStr.Contains(RecogidaDef.campos_def.cons_kgrec)) return 1; else return 2; } /* * 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 TareaRes Ejecuta(ModosEjec modo) { var res = new TareaRes() { Errores = false, data = null, msg = "" }; com = (TratamientoComun)reco; string nombFileAmbs = string.Empty; //Prepara consulta ErrStr = string.Empty; if (!PreparaConsulta(out nombFileAmbs)) { res.msg = "No se ha seleccionado una consulta válida" + reco.ConsultaAmbs; res.Errores = true; 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 (!LanzaEjec(modo, out msg)) { res.Errores = true; res.msg = msg; return res; } 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; } /** * Rellena el array de filtros en base a la config */ public void RellenaFiltrosReco() { //se rellena el array de filtros RecogidaDef.filtro_str = new string[RecogidaDef.tipos_fracc_str.Length + RecogidaDef.tipos_carg_str.Length]; for (int i = 0; i < RecogidaDef.tipos_fracc_str.Length; i++) { //se comprueba que tipo de fracción se ha seleccionado. Si se ha seleccionado una fracción sin nombre (el campo en la capa es NULL, y en el comboBox de fracciiones aparece como "-") hay que modificar el filtro if (RecogidaDef.tipos_fracc_str[i] == "-") RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_fracc + " IS NULL"; else RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_fracc + "= '" + RecogidaDef.tipos_fracc_str[i] + "'"; } for (int i = RecogidaDef.tipos_fracc_str.Length; i < RecogidaDef.filtro_str.Length; i++) { RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_nomrec + "= '" + RecogidaDef.tipos_carg_str[i - RecogidaDef.tipos_fracc_str.Length] + "'"; } } } }