Primera versión
This commit is contained in:
375
bdHerramientaCACOA/HerramientaUrban/URBANTrabajoProfesional.cs
Normal file
375
bdHerramientaCACOA/HerramientaUrban/URBANTrabajoProfesional.cs
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user