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,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;
}
}
}