OliviaAddInPro/Services/RecogidaServ.cs

151 lines
5.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 = 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<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 Respuesta<bool> Ejecuta(ModosEjec modo)
{
var res = new Respuesta<bool>()
{
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;
}
//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;
}
//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;
}
}
}