376 lines
15 KiB
C#
376 lines
15 KiB
C#
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;
|
|
}
|
|
|
|
|
|
}
|
|
}
|