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 ListaCostesVariables { get; set; } = new List(); 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(); }*/ CostesProduccion.HorasEnPlazo = (DespachoProfesional.HorasTotalesProduccion * CostesProduccion.PlazoPresentacionDocumentos / 12).DosDecimales(); if (CostesProduccion.HorasEnPlazo > TrabajoProfesional.horasTrabProfesional) { CostesProduccion.HorasEnPlazo = TrabajoProfesional.horasTrabProfesional; } CostesProduccion.NumHorasMinimoExt = (CostesProduccion.HorasEnPlazo >= TrabajoProfesional.horasTrabProfesional) ? 0 : Math.Round(TrabajoProfesional.horasTrabProfesional - CostesProduccion.HorasEnPlazo, 2, MidpointRounding.AwayFromZero); //€ 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(); } } }