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; } /* * 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 Sectoriza(CancelableProgressorSource cps) { var res = new TareaRes() { Errores = false, data = null, msg = "" }; com = (TratamientoComun)reco; string nombFileAmbs = string.Empty; cps.Status = "Preparando filtro para la exportacion"; //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; } cps.Value = 10; //Prepara nombre string fechaHora = string.Empty; //se consigue el tiempo en este instante para añadirlo a los nombres de los archivos de salida (shapefiles) fechaHora = DateTime.Now.ToString("yyyyMMdd_Hmmss"); //Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp //reco.NombreShpExport = prefNameExport + "T" + reco.TipoTto.ToString("00") + nombFileAmbs + DameStrPoligs() + "_" + fechaHora + extShp; string msg = ""; //comienza ejecucion if (!ComienzaEjec(ModosEjec.Sectoriza, cps, 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 TareaRes Planifica(CancelableProgressorSource cps) { TareaRes res = new TareaRes() { Errores = false, msg = "", data = null };/* //se asegura que tiene todo para planif //ErrStr = string.Empty; if (!CompruebaPlanif()) { res.msg = "En la capa de ámbitos seleccionada no se encuentran columnas de SECTOR y/o SECUENCIA, necesarias para planificar"; res.Errores = true; return res; } //Prepara consulta string nombFileAmbs = string.Empty; //Prepara consulta if (!PreparaConsulta(out nombFileAmbs)) { res.msg = "No se ha seleccionado una consulta válida" + reco.ConsultaAmbs; res.Errores = true; return res; }*/ return res; } public string DameAmbsConsulta(out string ambs_file) { string consulta, orstr; consulta = string.Empty; ambs_file = ""; /*orstr = null; var n = reco.AmbitosSel.Length; for (int i = 0; i < n; i++) { if (limp.AmbitosSel[i]) { consulta = consulta + orstr + "(" + LimpiezaDef.filtro_str[i] + ")"; ambs_file = ambs_file + i.ToString("00"); if (orstr == null) orstr = " OR "; } } ambs_file = "_A" + ambs_file; if (consulta == "()") consulta = ""; */ return consulta; } /** * Comprueba lo necesario para ver si hay campos para la planificación */ public bool CompruebaPlanif() { //si ha importado no hace falta que compruebe, seguro que las tiene if (OliviaGlob.IsConfig2()) return true; //no ha importado, comprueba capa if (ComprCamposPlanif(reco.CapaElems)) return true; return false; } /** * 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] + "'"; } } } }