Primera versión

This commit is contained in:
2025-07-25 12:56:07 +02:00
parent 850f9ce69f
commit cea1fdaa34
151 changed files with 26033 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN
{
public class DocumentacionURBAN
{
public int iddocumentacion { get; set; } = 0;
public string Descripcion { get; set; } = "";
public bool Checkeada { get; set; } = false;
public double ValorNecesario { get; set; } = 0;
public double CoefHoras { get; set; } = 0;
public bool esCheckbox { get; set; } = false;
public int Orden { get; set; } = 0;
}
}
}

View File

@@ -0,0 +1,100 @@
using bdHerramientaCACOA.db;
using bdHerramientaCACOA.HerramientaUrban;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static bdHerramientaCACOA.CASA;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN {
public class EnumeradosURBAN
{
public List<FasesURBAN> FasesTrabajo { get; set; } = new List<FasesURBAN>();
public List<enumeracionesCASA> ListaInstrumentos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> Periodos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> TiposDeDocumentos { get; set; } = new List<enumeracionesCASA>();
public List<tipoproyectosURBAN> TiposProyecto { get; set; } = new List<tipoproyectosURBAN>();
public List<tipoproyecto_documentacionURBAN> TipoProy_Documentacion { get; set; } = new List<tipoproyecto_documentacionURBAN>();
public List<DocumentacionURBAN> documentacion { get; set; } = new List<DocumentacionURBAN>();
public List<tipoproyectosURBAN> ProyectosPorTipo(int idTipoDocumento)
{
return TiposProyecto.Where(x => x.idTipoDocumento == idTipoDocumento).ToList();
}
public List<enumeracionesCASA> ListaCostesVariables { get; set; } = new List<enumeracionesCASA>();
}
public List<DocumentacionURBAN> DocumentacionMinima(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esMinima == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
public List<DocumentacionURBAN> DocumentacionOpcional(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esOpcional == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
public List<DocumentacionURBAN> DatosNecesarios(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esNecesario == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
private List<DocumentacionURBAN> documentacionAUrban(List<documentacion> lista)
{
var listaDoc = new List<DocumentacionURBAN>();
foreach (var documentacion in lista)
{
var d = new DocumentacionURBAN();
d.iddocumentacion = documentacion.iddocumentacion;
d.Descripcion = documentacion.Descripcion.ToString();
if (documentacion.CoeficienteHoras.HasValue)
{
d.CoefHoras = (double)documentacion.CoeficienteHoras;
}
d.esCheckbox = documentacion.Checkeable;
listaDoc.Add(d);
}
return listaDoc;
}
}
}

View File

@@ -0,0 +1,321 @@
using bdHerramientaCACOA.db;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static bdHerramientaCACOA.CASA;
using bdHerramientaCACOA.extensiones;
using System.Text.Json;
using bdHerramientaCACOA.HerramientaUrban;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN
{
public string NombreSimulacion { get; set; } = "Simulación Urbanismo "+ DateTime.Now;
private CASADespachoProfesional _DespachoProfesional = new CASADespachoProfesional();
public CASADespachoProfesional DespachoProfesional
{
get { return _DespachoProfesional; }
set { _DespachoProfesional = value; }
}
private URBANTrabajoProfesional _TrabajoProfesional = new URBANTrabajoProfesional();
public URBANTrabajoProfesional TrabajoProfesional
{
get { return _TrabajoProfesional; }
set { _TrabajoProfesional = value; }
}
private URBANCostesProduccion _CostesProduccion = new URBANCostesProduccion();
public URBANCostesProduccion CostesProduccion
{
get { return _CostesProduccion; }
set
{
_CostesProduccion = value;
}
}
public EnumeradosURBAN Enumerados { get; set; } = new EnumeradosURBAN();
public VariablesCASA Variables { get; set; } = new VariablesCASA();
#region Carga de Datos
public void CargarVariables(bdHerramientaCACOA.dbcontext.tsHerramientasCACOA bd)
{
Variables.anyo = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.ANYO").ValorNumerico1;
Variables.ConvenioColectivo = (string)bd.enumeraciones.First(x => x.Codigo == "VARCASA.CONCOL").ValorAlfabetico2;
Variables.JornadaLaboralHoraSemana = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABHS").ValorNumerico1;
Variables.DiasLaborales = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.DIASLAB").ValorNumerico1;
Variables.JornadaLaboralEstTrabajadores = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABESTTRAB").ValorNumerico1;
Variables.JornadaLaboralAnual = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABANUAL").ValorNumerico1;
Variables.HorasProduccionMedia = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1;
Variables.CosteSegSocial = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.COSTESSEGSOCIAL").ValorNumerico1;
Variables.CostesVariables = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.COSTESVARIABLES").ValorNumerico1;
Variables.OtrosCostes = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.OTROSCOSTES").ValorNumerico1;
}
public void RellenarCamposExtra(dbcontext.tsHerramientasCACOA bd, bool esClonar)
{
CargarVariables(bd);
CargarEnumerados(bd, esClonar);
//por defecto periodoMensual
enumeraciones perMensual = bd.enumeraciones.First(x => x.Codigo == "PERIODOS.MENSUAL");
//Cargamos los costes indirectos
var grupoCostesIndirectos = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "CI");
var listaCosteIndirectos = Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoCostesIndirectos.idGrupoEnumeracion);
foreach (enumeraciones enu in listaCosteIndirectos)
{
if (!DespachoProfesional.CostesIndirectos.Any(x => x.Concepto == enu.ValorAlfabetico1))
{
CosteIndirecto ci = new CosteIndirecto();
ci.idCosteIndirecto = enu.idEnumeracion;
ci.Concepto = enu.ValorAlfabetico1;
ci.idPeriodicidad = perMensual.idEnumeracion;
ci.valorPeriodo = (double)perMensual.ValorNumerico1;
DespachoProfesional.CostesIndirectos.Add(ci);
}
}
checkListCostIndirectos(listaCosteIndirectos);
//Cargamos las Fases
var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB");
var listaFases = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoFases.idGrupoEnumeracion).ToList();
foreach (enumeraciones enu in listaFases)
{
if (!TrabajoProfesional.FasesTrabajoProfesional.Any(x => x.idFase == enu.idEnumeracion))
{
FasesURBAN ft = new FasesURBAN();
ft.idFase = enu.idEnumeracion;
ft.Codigo = enu.Codigo;
ft.Denominacion = enu.ValorAlfabetico1;
ft.Porcentaje = (double)enu.ValorNumerico1;
TrabajoProfesional.FasesTrabajoProfesional.Add(ft);
}
}
checkListFases(listaFases);
Enumerados.FasesTrabajo= JsonSerializer.Deserialize<List<FasesURBAN>>(JsonSerializer.Serialize(TrabajoProfesional.FasesTrabajoProfesional));
}
private void checkListCostIndirectos(List<enumeraciones> listaCostesIndirectos)
{
var itemsAEliminar = DespachoProfesional.CostesIndirectos
.Where(item => !listaCostesIndirectos.Any(x => x.ValorAlfabetico1 == item.Concepto))
.ToList();
foreach (var item in itemsAEliminar)
{
DespachoProfesional.CostesIndirectos.Remove(item);
}
}
private void checkListFases(List<enumeraciones> listaFasesUrban)
{
var itemsAEliminar = TrabajoProfesional.FasesTrabajoProfesional
.Where(item => !listaFasesUrban.Any(x => x.idEnumeracion == item.idFase))
.ToList();
foreach (var item in itemsAEliminar)
{
TrabajoProfesional.FasesTrabajoProfesional.Remove(item);
}
}
public void CargarEnumerados(dbcontext.tsHerramientasCACOA bd, bool esClonar) {
var grupoPeriodos = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "PERIODOS");
Enumerados.Periodos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoPeriodos.idGrupoEnumeracion).ToList());
var grupoTipDocumento = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "TIPODOCU");
Enumerados.TiposDeDocumentos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoTipDocumento.idGrupoEnumeracion).ToList());
if (!esClonar)
{
var grupoInstrumentos = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "INNINSTR");
Enumerados.ListaInstrumentos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoInstrumentos.idGrupoEnumeracion).ToList());
}
var grupoVariables = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "CVURB");
Enumerados.ListaCostesVariables = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoVariables.idGrupoEnumeracion).ToList());
List<tipoproyectos> lp= bd.tipoproyectos.ToList();
List<tipoproyectosURBAN> lpu = new List<tipoproyectosURBAN>();
foreach (tipoproyectos tp in lp) {
tipoproyectosURBAN tpu= new tipoproyectosURBAN();
tpu.idtipoproyectos = tp.idtipoproyectos;
tpu.idTipoDocumento = tp.idTipoDocumento;
tpu.Descripcion = tp.Descripcion;
tpu.Abreviatura = tp.Abreviatura;
lpu.Add(tpu);
}
Enumerados.TiposProyecto = lpu;
List<tipoproyecto_documentacion> ltpd= bd.tipoproyecto_documentacion.ToList();
List<tipoproyecto_documentacionURBAN> ltpdu = new List<tipoproyecto_documentacionURBAN>();
foreach (tipoproyecto_documentacion tpd in ltpd)
{
tipoproyecto_documentacionURBAN tpdu = new tipoproyecto_documentacionURBAN();
tpdu.idtipoproyecto_documentacion = tpd.idtipoproyecto_documentacion;
tpdu.idtipoproyecto = tpd.idtipoproyecto;
tpdu.iddocumentacion = tpd.iddocumentacion;
tpdu.esMinima = tpd.esMinima;
tpdu.esOpcional = tpd.esOpcional;
tpdu.esNecesario = tpd.esNecesario;
ltpdu.Add(tpdu);
}
Enumerados.TipoProy_Documentacion = ltpdu;
Enumerados.documentacion = documentacionAUrban(bd.documentacion.ToList());
}
#endregion
#region Funciones Despacho Profesional
//Funciones Despacho Profesional
public double CalcularHorasTotalesProduccion()
{
if (DespachoProfesional.Trabajadores.Count == 0)
{
return 0;
}
return DespachoProfesional.Trabajadores.Sum(x => x.HorasProduccion);
}
public double CalcularCostesDirectosAnuales()
{
return DespachoProfesional.Trabajadores.Sum(x => x.CosteAnualTotal);
}
public double CalcularTotalCostesIndirectos()
{
return DespachoProfesional.CostesIndirectos.Sum(x => x.coste);
}
public double CalcularCostesDirectos()
{
if (DespachoProfesional.HorasTotalesProduccion == 0 || DespachoProfesional.CostesDirectosAnuales == 0)
{
return 0;
}
return Math.Round((DespachoProfesional.CostesDirectosAnuales / DespachoProfesional.HorasTotalesProduccion), 2, MidpointRounding.AwayFromZero);
}
public double CalcularTasaCostesIndirectos()
{
if (DespachoProfesional.HorasTotalesProduccion == 0)
{
return 0;
}
else
{
return Math.Round((DespachoProfesional.TotalCostesIndirectos / DespachoProfesional.HorasTotalesProduccion), 2, MidpointRounding.AwayFromZero);
}
}
public double CalcularCosteHoraDespachoProfesional()
{
return Math.Round((DespachoProfesional.CostesDirectos + DespachoProfesional.TasaCostesIndirectos), 2, MidpointRounding.AwayFromZero);
}
public void CalcularCosteTotalAnual(Trabajador trab)
{
trab.CosteAnualTotal = (trab.NumTrabajadores * trab.CosteAnual).DosDecimales();
}
public void CalcularHorasProduccion(Trabajador trab)
{
trab.HorasProduccion = (Variables.JornadaLaboralAnual * trab.JornadaLaboral / Variables.JornadaLaboralHoraSemana * trab.NumTrabajadores * (trab.PorcentajeProduccion / 100)).DosDecimales();
}
public void InsertarTrabajador(Trabajador trab)
{
CalcularCosteTotalAnual(trab);
CalcularHorasProduccion(trab);
DespachoProfesional.Trabajadores.Add(trab);
CalcularFinales();
}
public void ActualizarTrabajador(Trabajador trab)
{
CalcularCosteTotalAnual(trab);
CalcularHorasProduccion(trab);
int indice = DespachoProfesional.Trabajadores.ToList().IndexOf(trab);
DespachoProfesional.Trabajadores[indice] = trab;
CalcularFinales();
}
public void EliminarTrabajador(Trabajador trab)
{
DespachoProfesional.Trabajadores.Remove(trab);
CalcularFinales();
}
public void ActualizarCosteIndirecto(CosteIndirecto ci)
{
var periodo = Enumerados.Periodos.First(x => x.idEnumeracion == ci.idPeriodicidad);
ci.idPeriodicidad = periodo.idEnumeracion;
ci.valorPeriodo = (double)periodo.ValorNumerico1;
ci.coste = ci.importe * ci.valorPeriodo;
int indice = DespachoProfesional.CostesIndirectos.ToList().IndexOf(ci);
DespachoProfesional.CostesIndirectos[indice] = ci;
CalcularFinales();
}
public void LimpiarCosteIndirecto(CosteIndirecto ci)
{
ci.importe = 0;
ci.coste = 0;
}
public void CalcularFinales()
{
DespachoProfesional.CostesDirectosAnuales = CalcularCostesDirectosAnuales();
DespachoProfesional.HorasTotalesProduccion = CalcularHorasTotalesProduccion();
DespachoProfesional.TotalCostesIndirectos = CalcularTotalCostesIndirectos();
DespachoProfesional.TasaCostesIndirectos = CalcularTasaCostesIndirectos();
DespachoProfesional.CostesDirectos = CalcularCostesDirectos();
DespachoProfesional.CosteHoraDespachoProfesional = CalcularCosteHoraDespachoProfesional();
CalcularCostesProduccion();
}
#endregion
#region parsearObjetos
public List<enumeracionesCASA> ListaEnumeracionCASA(List<enumeraciones> lista)
{
List<enumeracionesCASA> lu = new List<enumeracionesCASA>();
foreach (enumeraciones enu in lista)
{
lu.Add(EnumeracionACASA(enu));
}
return lu;
}
public enumeracionesCASA EnumeracionACASA(enumeraciones enu)
{
return new enumeracionesCASA()
{
idEnumeracion = enu.idEnumeracion,
idGrupoEnumeracion = enu.idGrupoEnumeracion,
Codigo = enu.Codigo,
Descripcion = enu.Descripcion,
ValorAlfabetico1 = enu.ValorAlfabetico1,
ValorAlfabetico2 = enu.ValorAlfabetico2,
ValorNumerico1 = enu.ValorNumerico1
};
}
#endregion
}
}

View File

@@ -0,0 +1,116 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bdHerramientaCACOA.extensiones;
using static bdHerramientaCACOA.CASA;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN
{
public class URBANCostesProduccion
{
public bool EsCalculado { get; set; } = true;
public double porcentaje { get; set; } = 2.5;
public List<CosteVariable> ListaCostesVariables { get; set; } = new List<CosteVariable>();
public double CostesVariables { get; set; } = 0;
public double TotalCostesVariables { get; set; } = 0;
public double TotalCostes { get; set; } = 0;
public double CoeficienteCostesExternalizacion { get; set; } = 15;
public double CosteHoraExternalizacion { get; set; } = 0;
//h
public double HorasTrabajoProfesional { get; set; } = 0;
public double PlazoPresentacionDocumentos { get; set; } = 6;
public double HorasEnPlazo { get; set; } = 0;
public double NumHorasMinimoExt { get; set; } = 0;
//€
public double CostesProduccionTrabProf { get; set; } = 0;
public double Beneficio { get; set; } = 0;
public double PrecioTrabajoProfesional { get; set; } = 0;
}
//Funciones Costes Produccion
public void InsertarCostesVariables(CosteVariable cv)
{
CostesProduccion.ListaCostesVariables.Add(cv);
CalcularCostesProduccion();
}
public void ActualizarCostesVariables(CosteVariable cv)
{
int indice = CostesProduccion.ListaCostesVariables.ToList().IndexOf(cv);
CostesProduccion.ListaCostesVariables[indice] = cv;
CalcularCostesProduccion();
}
public void EliminarCostesVariables(CosteVariable cv)
{
CostesProduccion.ListaCostesVariables.Remove(cv);
CalcularCostesProduccion();
}
public double CalcularCostesTotales()
{
return CostesProduccion.ListaCostesVariables.Sum(x => x.Coste);
}
public void CalcularCostesProduccion()
{
if (CostesProduccion.EsCalculado)
{
double chtp = CalcularHorasTotalesProduccion();
if (chtp == 0)
{
CostesProduccion.CostesVariables = 0;
}
else
{
CostesProduccion.CostesVariables = Math.Round(CalcularCostesTotales() / CalcularHorasTotalesProduccion(), 2);
}
}
else
{
CostesProduccion.CostesVariables = ((DespachoProfesional.CostesDirectos + DespachoProfesional.TasaCostesIndirectos) * (CostesProduccion.porcentaje / 100)).DosDecimales();
}
CostesProduccion.TotalCostesVariables = CalcularCostesTotales();
CostesProduccion.TotalCostes = (DespachoProfesional.CostesDirectos + DespachoProfesional.TasaCostesIndirectos + CostesProduccion.CostesVariables).DosDecimales();
CostesProduccion.CosteHoraExternalizacion = Math.Round(CostesProduccion.TotalCostes * (1 + CostesProduccion.CoeficienteCostesExternalizacion / 100), 2, MidpointRounding.AwayFromZero);
//H
if (TrabajoProfesional.horasTrabProfesional<40) {
CostesProduccion.HorasTrabajoProfesional = 40;
}
else
{
double totalEncargo = TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
CostesProduccion.HorasTrabajoProfesional = (TrabajoProfesional.horasTrabProfesional * (totalEncargo / 100)).DosDecimales();
}
CostesProduccion.HorasEnPlazo = (DespachoProfesional.HorasTotalesProduccion * CostesProduccion.PlazoPresentacionDocumentos / 12).DosDecimales();
if (CostesProduccion.HorasEnPlazo >= CostesProduccion.HorasTrabajoProfesional)
{
CostesProduccion.NumHorasMinimoExt = 0;
}
else
{
CostesProduccion.NumHorasMinimoExt = (CostesProduccion.HorasTrabajoProfesional - CostesProduccion.HorasEnPlazo).DosDecimales();
}
//€
if (CostesProduccion.NumHorasMinimoExt == 0)
{
CostesProduccion.CostesProduccionTrabProf = (CostesProduccion.HorasTrabajoProfesional * CostesProduccion.TotalCostes).DosDecimales();
}
else
{
CostesProduccion.CostesProduccionTrabProf = ((CostesProduccion.HorasEnPlazo * CostesProduccion.TotalCostes) + (CostesProduccion.NumHorasMinimoExt * CostesProduccion.CosteHoraExternalizacion)).DosDecimales();
}
CostesProduccion.PrecioTrabajoProfesional = (CostesProduccion.CostesProduccionTrabProf * (1+(CostesProduccion.Beneficio/100))).DosDecimales();
}
}
}

View File

@@ -0,0 +1,375 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bdHerramientaCACOA.db;
using bdHerramientaCACOA.extensiones;
using static bdHerramientaCACOA.CASA;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN
{
public class URBANTrabajoProfesional
{
public int idTipoDocumentacion { get; set; } = 0;
public int idTipoProyecto { get; set; } = 0;
public int idInstrumento { get; set; } = 0;
public double valorInstrumentos { get; set; } = 0;
public double horasTrabProfesional { get; set; } = 0;
public List<DocumentacionURBAN> DocumentacionMinima { get; set; } = new List<DocumentacionURBAN>();
public List<DocumentacionURBAN> DocumentacionOpcional { get; set; } = new List<DocumentacionURBAN>();
public List<DocumentacionURBAN> DatosNecesarios { get; set; } = new List<DocumentacionURBAN>();
public List<FasesURBAN> FasesTrabajoProfesional { get; set; } = new List<FasesURBAN>();
}
public void ActualizarFase(FasesURBAN ft)
{
int indice = TrabajoProfesional.FasesTrabajoProfesional.ToList().IndexOf(ft);
TrabajoProfesional.FasesTrabajoProfesional[indice] = ft;
CalcularHorasTrabajoProfesional();
}
public void ActualizarDocumentacionOpcional(DocumentacionURBAN doc)
{
int indice = TrabajoProfesional.DocumentacionOpcional.ToList().IndexOf(doc);
TrabajoProfesional.DocumentacionOpcional[indice] = doc;
CalcularHorasTrabajoProfesional();
}
public void ActualizarDatoNecesario(DocumentacionURBAN doc) {
int indice = TrabajoProfesional.DatosNecesarios.ToList().IndexOf(doc);
TrabajoProfesional.DatosNecesarios[indice] = doc;
CalcularHorasTrabajoProfesional();
}
public void CalcularHorasTrabajoProfesional() {
double valorhoras = ObtenerHoraTipoDocumento();
double totalEncargo = TrabajoProfesional.FasesTrabajoProfesional.Sum(x => x.Porcentaje);
double porcentajeInnovacion = TrabajoProfesional.valorInstrumentos;
TrabajoProfesional.horasTrabProfesional = (valorhoras * (totalEncargo / 100) * (porcentajeInnovacion / 100)).DosDecimales();
}
public double ObtenerHoraTipoDocumento()
{
int datos = TrabajoProfesional.DatosNecesarios.Count;
var colcoef = "?";
var formHP = "?";
double TPCOEF1 = obtenerTPCOEF1();
double TPCOEF2 = 0;
if (TrabajoProfesional.DatosNecesarios.Count >= 2) {
if (TrabajoProfesional.DatosNecesarios[1].esCheckbox)
{
if (TrabajoProfesional.DatosNecesarios[1].Checkeada)
{
TPCOEF2 = TrabajoProfesional.DatosNecesarios[1].CoefHoras;
}
}
else {
double TPdato2 = TrabajoProfesional.DatosNecesarios[1].ValorNecesario;
TPCOEF2 = TrabajoProfesional.DatosNecesarios[1].CoefHoras * TPdato2;
}
}
double TPCOEF3 = 0;
if (TrabajoProfesional.DatosNecesarios.Count >= 3)
{
if (TrabajoProfesional.DatosNecesarios[2].Checkeada) {
TPCOEF3 = TrabajoProfesional.DatosNecesarios[2].CoefHoras;
}
}
return ((TPCOEF1+TPCOEF2)*(1+TPCOEF3)).DosDecimales();
}
public double obtenerTPCOEF1()
{
if(TrabajoProfesional.idTipoProyecto != 0)
{
int minimo = TrabajoProfesional.DocumentacionMinima.Count;
int opciones = TrabajoProfesional.DocumentacionOpcional.Count;
int opcSel = TrabajoProfesional.DocumentacionOpcional.Where(x => x.Checkeada == true).Count();
string abreviatura = Enumerados.TiposProyecto.First(x => x.idtipoproyectos == TrabajoProfesional.idTipoProyecto).Abreviatura;
double TPdato1 = TrabajoProfesional.DatosNecesarios[0].ValorNecesario;
double formDato1 = 0;
if (TPdato1 != 0)
{
switch (abreviatura)
{
case "PGOM":
if (TPdato1 < 1)
{
formDato1 = 0.7 * 77.14;
}
else
{
formDato1 = 0.7 * (95.413 * Math.Pow(TPdato1, -0.328));
}
break;
case "POI":
if (TPdato1 > 50)
{
formDato1 = 70.6;
}
else
{
formDato1 = 56.703 * Math.Pow(TPdato1, 0.0554);
}
break;
case "PBOM":
if (TPdato1 < 1)
{
formDato1 = 0.7 * 77.14;
}
else
{
formDato1 = (95.413 * Math.Pow(TPdato1, -0.328));
}
break;
case "POU":
if (TPdato1 < 1)
{
formDato1 = 0.3 * 77.14;
}
else
{
formDato1 = 0.3 * (95.413 * Math.Pow(TPdato1, -0.328));
}
break;
case "PPO":
if (TPdato1 <= 5)
{
formDato1 = 9.44;
}
else
{
if (TPdato1 > 100)
{
formDato1 = 2.3;
}
else
{
formDato1 = 24.911 * Math.Pow(TPdato1, -0.473);
}
}
break;
case "PRI":
if (TPdato1 <= 5)
{
formDato1 = 17.08;
}
else
{
if (TPdato1 > 100)
{
formDato1 = 3.67;
}
else
{
formDato1 = 50.413 * Math.Pow(TPdato1, -0.524);
}
}
break;
case "EO":
if (TPdato1 <= 5)
{
formDato1 = 12.2;
}
else
{
if (TPdato1 > 100)
{
formDato1 = 3.17;
}
else
{
formDato1 = 31.953 * Math.Pow(TPdato1, -0.475);
}
}
break;
case "PE":
if (TPdato1 <= 5)
{
formDato1 = 6.8;
}
else
{
if (TPdato1 > 100)
{
formDato1 = 1.81;
}
else
{
formDato1 = 17.536 * Math.Pow(TPdato1, -0.468);
}
}
break;
case "PEP":
if (TPdato1 <= 5)
{
formDato1 = 22.65;
}
else
{
if (TPdato1 > 100)
{
formDato1 = 6;
}
else
{
formDato1 = 58.555 * Math.Pow(TPdato1, -0.468);
}
}
break;
case "ED":
if (TPdato1 < 10)
{
formDato1 = 10.085 * Math.Pow(TPdato1, -0.4);
}
else
{
formDato1 = 4.2;
}
break;
case "CAT":
formDato1 = TrabajoProfesional.DatosNecesarios.First().CoefHoras;
break;
case "PPAR":
if (TPdato1 > 50)
{
formDato1 = 0.88;
}
else
{
formDato1 = 4.7193 * Math.Pow(TPdato1, -0.34);
}
break;
case "UE":
if (TPdato1 >= 100)
{
formDato1 = 0.26;
}
else
{
formDato1 = 2.1598 * Math.Pow(TPdato1, -0.468);
}
break;
case "PREP":
if (TPdato1 >= 100)
{
formDato1 = 0.94;
}
else
{
formDato1 = 4.9615 * Math.Pow(TPdato1, -0.328);
}
break;
case "PNF":
if (TPdato1 >= 100)
{
formDato1 = 0.94;
}
else
{
formDato1 = 4.9615 * Math.Pow(TPdato1, -0.328);
}
break;
case "PDCU":
if (TPdato1 >= 100)
{
formDato1 = 0.94;
}
else
{
formDato1 = 4.9615 * Math.Pow(TPdato1, -0.328);
}
break;
case "PETC":
if (TPdato1 >= 100)
{
formDato1 = 1.85;
}
else
{
formDato1 = 8.97 * Math.Pow(TPdato1, -0.322);
}
break;
case "PU":
if (TPdato1 >= 100)
{
formDato1 = 50;
}
else
{
formDato1 = -27.14 * Math.Log(TPdato1) + 189.88;
}
break;
case "POOU":
if (TPdato1 >= 100)
{
formDato1 = 50;
}
else
{
formDato1 = -27.14 * Math.Log(TPdato1) + 189.88;
}
break;
case "PDATU":
if (TPdato1 <= 100)
{
formDato1 = 1.65;
}
else
{
formDato1 = 25.451 * Math.Pow(TPdato1, -0.328);
}
break;
case "PEAAT":
if (TPdato1 <= 1)
{
formDato1 = 10.14;
}
else
{
formDato1 = 13.898 * Math.Pow(TPdato1, -0.383);
}
break;
case "PA":
if (TPdato1 <= 1)
{
formDato1 = 10.14;
}
else
{
formDato1 = 13.898 * Math.Pow(TPdato1, -0.383);
}
break;
}
}
double TPdatoXformula = (TPdato1 * formDato1).DosDecimales();
return ((minimo + (0.5 * opcSel)) * TPdatoXformula).DosDecimales();
}
else
{
return 0;
}
}
public class FasesURBAN
{
public int idFase { get; set; } = 0;
public string Codigo { get; set; } = "";
public string Denominacion { get; set; } = "";
public double Porcentaje { get; set; } = 0;
}
}
}

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bdHerramientaCACOA.db;
namespace bdHerramientaCACOA.HerramientaUrban
{
public partial class tipoproyecto_documentacionURBAN
{
public int idtipoproyecto_documentacion { get; set; }
public int? idtipoproyecto { get; set; }
public int? iddocumentacion { get; set; }
public bool? esMinima { get; set; }
public bool? esOpcional { get; set; }
public bool? esNecesario { get; set; }
public int orden { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bdHerramientaCACOA.HerramientaUrban
{
public partial class tipoproyectosURBAN
{
public int idtipoproyectos { get; set; }
public int idTipoDocumento { get; set; }
public string? Descripcion { get; set; }
public string? Abreviatura { get; set; }
}
}