OliviaAddInPro/Services/RecogidaServ.cs

205 lines
7.0 KiB
C#

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<string> DameVals(string capa, string campo)
{
ObservableCollection<string> 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
//Pone nombre al shape en función de los ámbitos, el tratamiento, y los polígonos + timestamp
//REVISAR PARA RECO
reco.NombreShpExp_PrefTto = nombFileAmbs + DameStrPoligs();
string msg = "";
//comienza ejecucion
if (!LanzaEjec(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] + "'";
}
}
}
}