172 lines
6.1 KiB
C#
172 lines
6.1 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;
|
|
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 = HelperGdb.CheckFileds(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 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 (!ExportaEjec(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] + "'";
|
|
}
|
|
}
|
|
}
|
|
}
|