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 double horasTrabProfesionalEstimacion { get; set; } = 0; public bool EsPorUsos { get; set; } = true; public List DocumentacionMinima { get; set; } = new List(); public List DocumentacionOpcional { get; set; } = new List(); public List DatosNecesarios { get; set; } = new List(); public List FasesTrabajoProfesional { get; set; } = new List(); } 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(); TrabajoProfesional.horasTrabProfesionalEstimacion = TrabajoProfesional.horasTrabProfesional; CalcularCostesProduccion(); } 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; } } }