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

256
bdHerramientaCACOA/BAJA.cs Normal file
View File

@@ -0,0 +1,256 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bdHerramientaCACOA.db;
using bdHerramientaCACOA.extensiones;
using Microsoft.AspNetCore.Http;
using Mysqlx.Crud;
using Org.BouncyCastle.Bcpg;
using static bdHerramientaCACOA.CASA;
using static bdHerramientaCACOA.LICITACIONES;
namespace bdHerramientaCACOA
{
public class BAJA
{
public class VariablesBAJA
{
public double CostesVariables { get; set; } = 0.035;
public int JornadaLaboral { get; set; } = 1800;
public int HorasProduccionMedia { get; set; } = 80;
public double IPCCosteIndirecto { get; set; } = 1;
}
public VariablesBAJA Variables { get; set; } = new VariablesBAJA();
public double AnyoOferta { get; set; } = DateTime.Now.Year;
double _ofertaEconomica = 0;
public double OfertaEconomica {
get {
return _ofertaEconomica;
}
set {
_ofertaEconomica = value;
CalcularBaja();
}
}
double _tasaProduccion = 80;
public double TasaProduccion {
get
{
return _tasaProduccion;
}
set
{
_tasaProduccion = value;
CalcularBaja();
}
}
public List<ConvenioColectivoConcurso> ListaConvenioColectivo { get; set; } = new List<ConvenioColectivoConcurso>();
public List<CosteDirectoIndirecto> ListaCDCI { get; set; } = new List<CosteDirectoIndirecto>();
public string idProvincia { get; set; } = "";
public int idGradSup { get; set; } = 0;
public int idGradMed { get; set; } = 0;
public int idDelin { get; set; } = 0;
public List<DatosGrupoTrabajo> ListaDespachoProfesional { get; set; } = new List<DatosGrupoTrabajo>();
public string Descripcion { get; set; } = "Baja "+DateTime.Now;
public double TotalCostesPersonales { get; set; } = 0;
public double HorasDespacho { get; set; } = 0;
public double CosteDirectoHP { get; set; } = 0;
public double CosteIndirecto { get; set; } = 0;
public double CosteVariable { get; set; } = 0;
public double TotalCosteHP { get; set; } = 0;
public double TiempoEjecucionTrabProf { get; set; } = 0;
public double SemanasProduccion { get; set; } = 0;
public void Inicializar(bdHerramientaCACOA.dbcontext.tsHerramientasCACOA bd)
{
var grupoPuestoTrabajo = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "PUESTOTRABAJO");
var puestos = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoPuestoTrabajo.idGrupoEnumeracion).ToList();
var convColectivo = bd.conveniocolectivo.Where(x => x.idProvincia == "41").ToList();
Variables.CostesVariables= (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.COSTESVARIABLES").ValorNumerico1;
Variables.JornadaLaboral = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABANUAL").ValorNumerico1;
Variables.HorasProduccionMedia = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1;
Variables.IPCCosteIndirecto = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.IPCCD").ValorNumerico1;
idGradSup = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.TECGRADSUP").idEnumeracion;
idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion;
idDelin = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.DELINPROY").idEnumeracion;
foreach (enumeraciones enu in puestos) {
DatosGrupoTrabajo dgt = new DatosGrupoTrabajo();
dgt.idGrupoTrabajo = enu.idEnumeracion;
dgt.Descripcion = enu.ValorAlfabetico1;
dgt.CosteAnualTrabajador = convColectivo.First(x => x.idEnumeracion == enu.idEnumeracion).CosteAnualTrabajador;
dgt.HorasSemanales = 40;
ListaDespachoProfesional.Add(dgt);
}
//ListaCostesDespacho=bd.costedespachoprofesional.ToList();
var lisConvCol = bd.conveniocolectivo.ToList();
ListaConvenioColectivo = ListaConvenioColectivoCASA(lisConvCol);
ListaCDCI = CalcularTabla("");
}
public void ActualizarDatosGrupoTrabajo(DatosGrupoTrabajo dgt)
{
int indice = ListaDespachoProfesional.ToList().IndexOf(dgt);
ListaDespachoProfesional[indice] = dgt;
CalcularBaja();
}
public void CalcularBaja() {
TotalCostesPersonales = CalcularCostesPersonales();
HorasDespacho = CalcularHorasDespacho();
CosteDirectoHP = CalcularCosteDirectoHP();
CosteIndirecto = CalcularCostesIndirectos();
CosteVariable = CalcularCostesVariables();
TotalCosteHP = CalcularTotalCosteHP();
TiempoEjecucionTrabProf = Math.Round(CalcularTiempoEjecTrabajo(),2,MidpointRounding.AwayFromZero);
SemanasProduccion = Math.Round(CalcularSemanasProduccion(), 2, MidpointRounding.AwayFromZero);
}
private double CalcularCostesPersonales()
{
double suma = 0;
foreach (DatosGrupoTrabajo dgt in ListaDespachoProfesional) {
suma += dgt.NumTrabajadores * dgt.CosteAnualTrabajador * dgt.HorasSemanales / 40;
}
return suma.DosDecimales();
}
private double CalcularHorasDespacho()
{
double suma = 0;
foreach (DatosGrupoTrabajo dgt in ListaDespachoProfesional)
{
if (dgt.NumTrabajadores > 0)
{
suma += dgt.NumTrabajadores * dgt.HorasSemanales / 40;
}
}
return (suma*Variables.JornadaLaboral).DosDecimales();
}
private double CalcularCosteDirectoHP()
{
if((HorasDespacho * TasaProduccion) == 0)
{
return 0;
}
return (TotalCostesPersonales / (HorasDespacho * (TasaProduccion/100))).DosDecimales();
}
private double CalcularCostesIndirectos()
{
var horasProducidas = HorasDespacho * (TasaProduccion/100);
if (horasProducidas < 2880)
{
return 12.7;
}
return ObtenerCITabla(horasProducidas);
}
private double ObtenerCITabla(double horas) {
double valor = 0;
var a = ListaCDCI.OrderByDescending(x => x.NumeroTrabajadores);
foreach (CosteDirectoIndirecto cdp in a)
{
if (horas <= cdp.HorasProduccionAnuales)
{
valor = cdp.CostesIndirectos;
}
}
return valor;
//double valor = 0;
//foreach (costedespachoprofesional cdp in ListaCostesDespacho) {
// //if (horas >= cdp.HorasProduccionAnuales) {
// if (horas <= cdp.HorasProduccionAnuales) {
// valor = cdp.CostesIndirectos;
// }
//}
//return valor;
}
private double CalcularCostesVariables()
{
return ((CosteDirectoHP+CosteIndirecto) * Variables.CostesVariables).DosDecimales();
}
private double CalcularTotalCosteHP()
{
return (CosteDirectoHP + CosteIndirecto + CosteVariable).DosDecimales();
}
private double CalcularTiempoEjecTrabajo()
{
return (OfertaEconomica / TotalCosteHP).DosDecimales();
}
private double CalcularSemanasProduccion()
{
double horasSemanales = CalcularHorasSemanales();
if (horasSemanales == 0) return 0;
return (TiempoEjecucionTrabProf / CalcularHorasSemanales()).DosDecimales();
}
private double CalcularHorasSemanales() {
double suma = 0;
foreach (DatosGrupoTrabajo dgt in ListaDespachoProfesional) {
suma+= dgt.NumTrabajadores * dgt.HorasSemanales;
}
return (suma).DosDecimales();
}
public List<ConvenioColectivoConcurso> ListaConvenioColectivoCASA(List<conveniocolectivo> lista)
{
List<ConvenioColectivoConcurso> lcc = new List<ConvenioColectivoConcurso>();
foreach (conveniocolectivo enu in lista)
{
lcc.Add(convenioColectivoACASA(enu));
}
return lcc;
}
public ConvenioColectivoConcurso convenioColectivoACASA(conveniocolectivo cc)
{
return new ConvenioColectivoConcurso()
{
idConvenioColectivo = cc.idConvenioColectivo,
idEnumeracion = cc.idEnumeracion,
idProvincia = cc.idProvincia,
SalarioBase = cc.SalarioBase,
OtrosCostes = cc.OtrosCostes,
CosteAnualTrabajador = cc.CosteAnualTrabajador
};
}
public List<CosteDirectoIndirecto> CalcularTabla(string idProvincia)
{
List<CosteDirectoIndirecto> listaCDCI = new List<CosteDirectoIndirecto>();
//Obtenemos variables a utilizar
if (idProvincia == "") { idProvincia = null; }
double ValorTecSuperior = ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradSup) != null ? ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradSup).CosteAnualTrabajador : 0;
double ValorTecMedio = ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradMed) != null ? ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradMed).CosteAnualTrabajador : 0;
double ValorDelineante = ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idDelin) != null ? ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idDelin).CosteAnualTrabajador : 0; ;
double masCaro = Math.Max(ValorTecSuperior, Math.Max(ValorTecMedio, ValorDelineante));
double masBarato = Math.Min(ValorTecSuperior, Math.Min(ValorTecMedio, ValorDelineante));
//Se calcula
//listaCDCI.Add(new CosteDirectoIndirecto(1, 1 * ValorTecSuperior, 1 * ValorTecSuperior, jornadaLaboralAnual, horasProdMedia, porcentajeCostesVariables));
for (int i = 2; i <= 20; i++)
{
double costeMinimo = ValorTecSuperior + (masBarato * (i - 1));
double costeMaximo = ValorTecSuperior + (masCaro * (i - 1));
CosteDirectoIndirecto cdci = new CosteDirectoIndirecto(i, costeMinimo, costeMaximo, Variables.JornadaLaboral, Variables.HorasProduccionMedia, Variables.CostesVariables, Variables.IPCCosteIndirecto);
listaCDCI.Add(cdci);
}
return listaCDCI;
}
}
public class DatosGrupoTrabajo {
public int idGrupoTrabajo { get; set; } = 0;
public string Descripcion { get; set; } = "";
public double NumTrabajadores { get; set; } = 0;
public double HorasSemanales { get; set; } = 0;
public double CosteAnualTrabajador { get;set; } = 0;
}
}

1026
bdHerramientaCACOA/CASA.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,353 @@
<#@ template hostSpecific="true" #>
<#@ assembly name="Microsoft.EntityFrameworkCore" #>
<#@ assembly name="Microsoft.EntityFrameworkCore.Design" #>
<#@ assembly name="Microsoft.EntityFrameworkCore.Relational" #>
<#@ assembly name="Microsoft.Extensions.DependencyInjection.Abstractions" #>
<#@ parameter name="Model" type="Microsoft.EntityFrameworkCore.Metadata.IModel" #>
<#@ parameter name="Options" type="Microsoft.EntityFrameworkCore.Scaffolding.ModelCodeGenerationOptions" #>
<#@ parameter name="NamespaceHint" type="System.String" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.EntityFrameworkCore" #>
<#@ import namespace="Microsoft.EntityFrameworkCore.Design" #>
<#@ import namespace="Microsoft.EntityFrameworkCore.Infrastructure" #>
<#@ import namespace="Microsoft.EntityFrameworkCore.Scaffolding" #>
<#@ import namespace="Microsoft.Extensions.DependencyInjection" #>
<#
// Template version: 800 - please do NOT remove this line
if (!ProductInfo.GetVersion().StartsWith("8.0"))
{
Warning("Your templates were created using an older version of Entity Framework. Additional features and bug fixes may be available. See https://aka.ms/efcore-docs-updating-templates for more information.");
}
var services = (IServiceProvider)Host;
var providerCode = services.GetRequiredService<IProviderConfigurationCodeGenerator>();
var annotationCodeGenerator = services.GetRequiredService<IAnnotationCodeGenerator>();
var code = services.GetRequiredService<ICSharpHelper>();
var usings = new List<string>
{
"System",
"System.Collections.Generic",
"Microsoft.EntityFrameworkCore"
};
if (NamespaceHint != Options.ModelNamespace
&& !string.IsNullOrEmpty(Options.ModelNamespace))
{
usings.Add(Options.ModelNamespace);
}
if (!string.IsNullOrEmpty(NamespaceHint))
{
#>
namespace <#= NamespaceHint #>;
<#
}
#>
public partial class <#= Options.ContextName #> : DbContext
{
<#
if (!Options.SuppressOnConfiguring)
{
#>
public <#= Options.ContextName #>()
{
}
<#
}
#>
public <#= Options.ContextName #>(DbContextOptions<<#= Options.ContextName #>> options)
: base(options)
{
}
<#
foreach (var entityType in Model.GetEntityTypes().Where(e => !e.IsSimpleManyToManyJoinEntityType()))
{
#>
public virtual DbSet<<#= entityType.Name #>> <#= entityType.GetDbSetName() #> { get; set; }
<#
}
if (!Options.SuppressOnConfiguring)
{
#>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
<#
if (!Options.SuppressConnectionStringWarning)
{
#>
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.
<#
}
#>
=> optionsBuilder<#= code.Fragment(providerCode.GenerateUseProvider(Options.ConnectionString), indent: 3) #>;
<#
}
#>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
<#
var anyConfiguration = false;
var modelFluentApiCalls = Model.GetFluentApiCalls(annotationCodeGenerator);
if (modelFluentApiCalls != null)
{
usings.AddRange(modelFluentApiCalls.GetRequiredUsings());
#>
modelBuilder<#= code.Fragment(modelFluentApiCalls, indent: 3) #>;
<#
anyConfiguration = true;
}
StringBuilder mainEnvironment;
foreach (var entityType in Model.GetEntityTypes().Where(e => !e.IsSimpleManyToManyJoinEntityType()))
{
// Save all previously generated code, and start generating into a new temporary environment
mainEnvironment = GenerationEnvironment;
GenerationEnvironment = new StringBuilder();
if (anyConfiguration)
{
WriteLine("");
}
var anyEntityTypeConfiguration = false;
#>
modelBuilder.Entity<<#= entityType.Name #>>(entity =>
{
<#
var key = entityType.FindPrimaryKey();
if (key != null)
{
var keyFluentApiCalls = key.GetFluentApiCalls(annotationCodeGenerator);
if (keyFluentApiCalls != null
|| (!key.IsHandledByConvention() && !Options.UseDataAnnotations))
{
if (keyFluentApiCalls != null)
{
usings.AddRange(keyFluentApiCalls.GetRequiredUsings());
}
#>
entity.HasKey(<#= code.Lambda(key.Properties, "e") #>)<#= code.Fragment(keyFluentApiCalls, indent: 4) #>;
<#
anyEntityTypeConfiguration = true;
}
}
var entityTypeFluentApiCalls = entityType.GetFluentApiCalls(annotationCodeGenerator)
?.FilterChain(c => !(Options.UseDataAnnotations && c.IsHandledByDataAnnotations));
if (entityTypeFluentApiCalls != null)
{
usings.AddRange(entityTypeFluentApiCalls.GetRequiredUsings());
if (anyEntityTypeConfiguration)
{
WriteLine("");
}
#>
entity<#= code.Fragment(entityTypeFluentApiCalls, indent: 4) #>;
<#
anyEntityTypeConfiguration = true;
}
foreach (var index in entityType.GetIndexes()
.Where(i => !(Options.UseDataAnnotations && i.IsHandledByDataAnnotations(annotationCodeGenerator))))
{
if (anyEntityTypeConfiguration)
{
WriteLine("");
}
var indexFluentApiCalls = index.GetFluentApiCalls(annotationCodeGenerator);
if (indexFluentApiCalls != null)
{
usings.AddRange(indexFluentApiCalls.GetRequiredUsings());
}
#>
entity.HasIndex(<#= code.Lambda(index.Properties, "e") #>, <#= code.Literal(index.GetDatabaseName()) #>)<#= code.Fragment(indexFluentApiCalls, indent: 4) #>;
<#
anyEntityTypeConfiguration = true;
}
var firstProperty = true;
foreach (var property in entityType.GetProperties())
{
var propertyFluentApiCalls = property.GetFluentApiCalls(annotationCodeGenerator)
?.FilterChain(c => !(Options.UseDataAnnotations && c.IsHandledByDataAnnotations)
&& !(c.Method == "IsRequired" && Options.UseNullableReferenceTypes && !property.ClrType.IsValueType));
if (propertyFluentApiCalls == null)
{
continue;
}
usings.AddRange(propertyFluentApiCalls.GetRequiredUsings());
if (anyEntityTypeConfiguration && firstProperty)
{
WriteLine("");
}
#>
entity.Property(e => e.<#= property.Name #>)<#= code.Fragment(propertyFluentApiCalls, indent: 4) #>;
<#
anyEntityTypeConfiguration = true;
firstProperty = false;
}
foreach (var foreignKey in entityType.GetForeignKeys())
{
var foreignKeyFluentApiCalls = foreignKey.GetFluentApiCalls(annotationCodeGenerator)
?.FilterChain(c => !(Options.UseDataAnnotations && c.IsHandledByDataAnnotations));
if (foreignKeyFluentApiCalls == null)
{
continue;
}
usings.AddRange(foreignKeyFluentApiCalls.GetRequiredUsings());
if (anyEntityTypeConfiguration)
{
WriteLine("");
}
#>
entity.HasOne(d => d.<#= foreignKey.DependentToPrincipal.Name #>).<#= foreignKey.IsUnique ? "WithOne" : "WithMany" #>(<#= foreignKey.PrincipalToDependent != null ? $"p => p.{foreignKey.PrincipalToDependent.Name}" : "" #>)<#= code.Fragment(foreignKeyFluentApiCalls, indent: 4) #>;
<#
anyEntityTypeConfiguration = true;
}
foreach (var skipNavigation in entityType.GetSkipNavigations().Where(n => n.IsLeftNavigation()))
{
if (anyEntityTypeConfiguration)
{
WriteLine("");
}
var left = skipNavigation.ForeignKey;
var leftFluentApiCalls = left.GetFluentApiCalls(annotationCodeGenerator, useStrings: true);
var right = skipNavigation.Inverse.ForeignKey;
var rightFluentApiCalls = right.GetFluentApiCalls(annotationCodeGenerator, useStrings: true);
var joinEntityType = skipNavigation.JoinEntityType;
if (leftFluentApiCalls != null)
{
usings.AddRange(leftFluentApiCalls.GetRequiredUsings());
}
if (rightFluentApiCalls != null)
{
usings.AddRange(rightFluentApiCalls.GetRequiredUsings());
}
#>
entity.HasMany(d => d.<#= skipNavigation.Name #>).WithMany(p => p.<#= skipNavigation.Inverse.Name #>)
.UsingEntity<Dictionary<string, object>>(
<#= code.Literal(joinEntityType.Name) #>,
r => r.HasOne<<#= right.PrincipalEntityType.Name #>>().WithMany()<#= code.Fragment(rightFluentApiCalls, indent: 6) #>,
l => l.HasOne<<#= left.PrincipalEntityType.Name #>>().WithMany()<#= code.Fragment(leftFluentApiCalls, indent: 6) #>,
j =>
{
<#
var joinKey = joinEntityType.FindPrimaryKey();
var joinKeyFluentApiCalls = joinKey.GetFluentApiCalls(annotationCodeGenerator);
if (joinKeyFluentApiCalls != null)
{
usings.AddRange(joinKeyFluentApiCalls.GetRequiredUsings());
}
#>
j.HasKey(<#= code.Arguments(joinKey.Properties.Select(e => e.Name)) #>)<#= code.Fragment(joinKeyFluentApiCalls, indent: 7) #>;
<#
var joinEntityTypeFluentApiCalls = joinEntityType.GetFluentApiCalls(annotationCodeGenerator);
if (joinEntityTypeFluentApiCalls != null)
{
usings.AddRange(joinEntityTypeFluentApiCalls.GetRequiredUsings());
#>
j<#= code.Fragment(joinEntityTypeFluentApiCalls, indent: 7) #>;
<#
}
foreach (var index in joinEntityType.GetIndexes())
{
var indexFluentApiCalls = index.GetFluentApiCalls(annotationCodeGenerator);
if (indexFluentApiCalls != null)
{
usings.AddRange(indexFluentApiCalls.GetRequiredUsings());
}
#>
j.HasIndex(<#= code.Literal(index.Properties.Select(e => e.Name).ToArray()) #>, <#= code.Literal(index.GetDatabaseName()) #>)<#= code.Fragment(indexFluentApiCalls, indent: 7) #>;
<#
}
foreach (var property in joinEntityType.GetProperties())
{
var propertyFluentApiCalls = property.GetFluentApiCalls(annotationCodeGenerator);
if (propertyFluentApiCalls == null)
{
continue;
}
usings.AddRange(propertyFluentApiCalls.GetRequiredUsings());
#>
j.IndexerProperty<<#= code.Reference(property.ClrType) #>>(<#= code.Literal(property.Name) #>)<#= code.Fragment(propertyFluentApiCalls, indent: 7) #>;
<#
}
#>
});
<#
anyEntityTypeConfiguration = true;
}
#>
});
<#
// If any signicant code was generated, append it to the main environment
if (anyEntityTypeConfiguration)
{
mainEnvironment.Append(GenerationEnvironment);
anyConfiguration = true;
}
// Resume generating code into the main environment
GenerationEnvironment = mainEnvironment;
}
foreach (var sequence in Model.GetSequences())
{
var needsType = sequence.Type != typeof(long);
var needsSchema = !string.IsNullOrEmpty(sequence.Schema) && sequence.Schema != sequence.Model.GetDefaultSchema();
var sequenceFluentApiCalls = sequence.GetFluentApiCalls(annotationCodeGenerator);
#>
modelBuilder.HasSequence<#= needsType ? $"<{code.Reference(sequence.Type)}>" : "" #>(<#= code.Literal(sequence.Name) #><#= needsSchema ? $", {code.Literal(sequence.Schema)}" : "" #>)<#= code.Fragment(sequenceFluentApiCalls, indent: 3) #>;
<#
}
if (anyConfiguration)
{
WriteLine("");
}
#>
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
<#
mainEnvironment = GenerationEnvironment;
GenerationEnvironment = new StringBuilder();
foreach (var ns in usings.Distinct().OrderBy(x => x, new NamespaceComparer()))
{
#>
using <#= ns #>;
<#
}
WriteLine("");
GenerationEnvironment.Append(mainEnvironment);
#>

View File

@@ -0,0 +1,174 @@
<#@ template hostSpecific="true" #>
<#@ assembly name="Microsoft.EntityFrameworkCore" #>
<#@ assembly name="Microsoft.EntityFrameworkCore.Design" #>
<#@ assembly name="Microsoft.EntityFrameworkCore.Relational" #>
<#@ assembly name="Microsoft.Extensions.DependencyInjection.Abstractions" #>
<#@ parameter name="EntityType" type="Microsoft.EntityFrameworkCore.Metadata.IEntityType" #>
<#@ parameter name="Options" type="Microsoft.EntityFrameworkCore.Scaffolding.ModelCodeGenerationOptions" #>
<#@ parameter name="NamespaceHint" type="System.String" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.ComponentModel.DataAnnotations" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.EntityFrameworkCore" #>
<#@ import namespace="Microsoft.EntityFrameworkCore.Design" #>
<#@ import namespace="Microsoft.Extensions.DependencyInjection" #>
<#
// Template version: 800 - please do NOT remove this line
if (EntityType.IsSimpleManyToManyJoinEntityType())
{
// Don't scaffold these
return "";
}
var services = (IServiceProvider)Host;
var annotationCodeGenerator = services.GetRequiredService<IAnnotationCodeGenerator>();
var code = services.GetRequiredService<ICSharpHelper>();
var usings = new List<string>
{
"System",
"System.Collections.Generic"
};
if (Options.UseDataAnnotations)
{
usings.Add("System.ComponentModel.DataAnnotations");
usings.Add("System.ComponentModel.DataAnnotations.Schema");
usings.Add("Microsoft.EntityFrameworkCore");
}
if (!string.IsNullOrEmpty(NamespaceHint))
{
#>
namespace <#= NamespaceHint #>;
<#
}
if (!string.IsNullOrEmpty(EntityType.GetComment()))
{
#>
/// <summary>
/// <#= code.XmlComment(EntityType.GetComment()) #>
/// </summary>
<#
}
if (Options.UseDataAnnotations)
{
foreach (var dataAnnotation in EntityType.GetDataAnnotations(annotationCodeGenerator))
{
#>
<#= code.Fragment(dataAnnotation) #>
<#
}
}
#>
public partial class <#= EntityType.Name #>
{
<#
var firstProperty = true;
foreach (var property in EntityType.GetProperties().OrderBy(p => p.GetColumnOrder() ?? -1))
{
if (!firstProperty)
{
WriteLine("");
}
if (!string.IsNullOrEmpty(property.GetComment()))
{
#>
/// <summary>
/// <#= code.XmlComment(property.GetComment(), indent: 1) #>
/// </summary>
<#
}
if (Options.UseDataAnnotations)
{
var dataAnnotations = property.GetDataAnnotations(annotationCodeGenerator)
.Where(a => !(a.Type == typeof(RequiredAttribute) && Options.UseNullableReferenceTypes && !property.ClrType.IsValueType));
foreach (var dataAnnotation in dataAnnotations)
{
#>
<#= code.Fragment(dataAnnotation) #>
<#
}
}
usings.AddRange(code.GetRequiredUsings(property.ClrType));
var needsNullable = Options.UseNullableReferenceTypes && property.IsNullable && !property.ClrType.IsValueType;
var needsInitializer = Options.UseNullableReferenceTypes && !property.IsNullable && !property.ClrType.IsValueType;
#>
public <#= code.Reference(property.ClrType) #><#= needsNullable ? "?" : "" #> <#= property.Name #> { get; set; }<#= needsInitializer ? " = null!;" : "" #>
<#
firstProperty = false;
}
foreach (var navigation in EntityType.GetNavigations())
{
WriteLine("");
if (Options.UseDataAnnotations)
{
foreach (var dataAnnotation in navigation.GetDataAnnotations(annotationCodeGenerator))
{
#>
<#= code.Fragment(dataAnnotation) #>
<#
}
}
var targetType = navigation.TargetEntityType.Name;
if (navigation.IsCollection)
{
#>
public virtual ICollection<<#= targetType #>> <#= navigation.Name #> { get; set; } = new List<<#= targetType #>>();
<#
}
else
{
var needsNullable = Options.UseNullableReferenceTypes && !(navigation.ForeignKey.IsRequired && navigation.IsOnDependent);
var needsInitializer = Options.UseNullableReferenceTypes && navigation.ForeignKey.IsRequired && navigation.IsOnDependent;
#>
public virtual <#= targetType #><#= needsNullable ? "?" : "" #> <#= navigation.Name #> { get; set; }<#= needsInitializer ? " = null!;" : "" #>
<#
}
}
foreach (var skipNavigation in EntityType.GetSkipNavigations())
{
WriteLine("");
if (Options.UseDataAnnotations)
{
foreach (var dataAnnotation in skipNavigation.GetDataAnnotations(annotationCodeGenerator))
{
#>
<#= code.Fragment(dataAnnotation) #>
<#
}
}
#>
public virtual ICollection<<#= skipNavigation.TargetEntityType.Name #>> <#= skipNavigation.Name #> { get; set; } = new List<<#= skipNavigation.TargetEntityType.Name #>>();
<#
}
#>
}
<#
var previousOutput = GenerationEnvironment;
GenerationEnvironment = new StringBuilder();
foreach (var ns in usings.Distinct().OrderBy(x => x, new NamespaceComparer()))
{
#>
using <#= ns #>;
<#
}
WriteLine("");
GenerationEnvironment.Append(previousOutput);
#>

View File

@@ -0,0 +1,112 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using bdHerramientaCACOA.db;
using Mysqlx.Expr;
using static bdHerramientaCACOA.CASA;
namespace bdHerramientaCACOA
{
public class CosteDirectoIndirecto
{
public CosteDirectoIndirecto() {
CalcularDatos();
}
public CosteDirectoIndirecto(int NumeroTrabajadores,double CosteMinimo,double CosteMaximo, int JornadaLaboral, double HorasProduccionMedia,double porcentajeCostesVariables,double IPCCosteIndirecto) {
this._porcentajeCostesVariables = porcentajeCostesVariables;
this._JornadaLaboral = JornadaLaboral;
this._HorasProdMedia = Math.Round(HorasProduccionMedia / 100,2, MidpointRounding.AwayFromZero);
this._NumeroTrabajadores = NumeroTrabajadores;
this._CosteMinimoPersonal= Math.Round(CosteMinimo, 2, MidpointRounding.AwayFromZero);
this._CosteMaximoPersonal = Math.Round(CosteMaximo, 2, MidpointRounding.AwayFromZero);
this._IPCCosteIndirecto = IPCCosteIndirecto;
CalcularDatos();
}
private double _IPCCosteIndirecto = 0;
public double IPCCosteIndirecto
{
get { return _IPCCosteIndirecto; }
set
{
_IPCCosteIndirecto = value;
}
}
private int _JornadaLaboral = 0;
public int JornadaLaboral
{
get { return _JornadaLaboral; }
set
{
_JornadaLaboral = value;
CalcularDatos();
}
}
private double _HorasProdMedia = 0;
public double HorasProdMedia
{
get { return _HorasProdMedia; }
set
{
_HorasProdMedia = value;
CalcularDatos();
}
}
private double _porcentajeCostesVariables = 0;
public double PorcentajeCostesVariables
{
get { return _porcentajeCostesVariables; }
set
{
_porcentajeCostesVariables = value;
CalcularDatos();
}
}
private int _NumeroTrabajadores = 0;
public int NumeroTrabajadores {
get { return _NumeroTrabajadores; }
set {
_NumeroTrabajadores = value;
CalcularDatos();
} }
private double _CosteMinimoPersonal = 0;
public double CosteMinimoPersonal
{
get { return _CosteMinimoPersonal; }
set
{
_CosteMinimoPersonal = value;
CalcularDatos();
}
}
private double _CosteMaximoPersonal = 0;
public double CosteMaximoPersonal
{
get { return _CosteMaximoPersonal; }
set
{
_CosteMaximoPersonal = value;
CalcularDatos();
}
}
public double HorasProduccionAnuales { get; set; } = 0;
public double CosteMedioPersonal { get; set; } = 0;
public double CostesDirectos { get; set; } = 0;
public double CostesIndirectos { get; set; } = 0;
public double CostesVariables { get; set; } = 0;
public double TotalDespachoProfesional { get; set; } = 0;
public void CalcularDatos() {
HorasProduccionAnuales = Math.Round(NumeroTrabajadores * JornadaLaboral * HorasProdMedia, 0, MidpointRounding.AwayFromZero);
CosteMedioPersonal= Math.Round((CosteMaximoPersonal + CosteMinimoPersonal)/2, 2, MidpointRounding.AwayFromZero);
CostesDirectos = Math.Round((CosteMedioPersonal/HorasProduccionAnuales), 2, MidpointRounding.AwayFromZero);
CostesIndirectos = Math.Round((-2.535 * Math.Log(NumeroTrabajadores) + 10.753)* IPCCosteIndirecto, 2, MidpointRounding.AwayFromZero);
CostesVariables= Math.Round((CostesDirectos+CostesIndirectos)*PorcentajeCostesVariables, 2, MidpointRounding.AwayFromZero);
TotalDespachoProfesional = Math.Round(CostesDirectos + CostesIndirectos+CostesVariables, 2, MidpointRounding.AwayFromZero);
}
}
}

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN
{
public class DocumentacionURBAN
{
public int iddocumentacion { get; set; } = 0;
public string Descripcion { get; set; } = "";
public bool Checkeada { get; set; } = false;
public double ValorNecesario { get; set; } = 0;
public double CoefHoras { get; set; } = 0;
public bool esCheckbox { get; set; } = false;
public int Orden { get; set; } = 0;
}
}
}

View File

@@ -0,0 +1,100 @@
using bdHerramientaCACOA.db;
using bdHerramientaCACOA.HerramientaUrban;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static bdHerramientaCACOA.CASA;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN {
public class EnumeradosURBAN
{
public List<FasesURBAN> FasesTrabajo { get; set; } = new List<FasesURBAN>();
public List<enumeracionesCASA> ListaInstrumentos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> Periodos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> TiposDeDocumentos { get; set; } = new List<enumeracionesCASA>();
public List<tipoproyectosURBAN> TiposProyecto { get; set; } = new List<tipoproyectosURBAN>();
public List<tipoproyecto_documentacionURBAN> TipoProy_Documentacion { get; set; } = new List<tipoproyecto_documentacionURBAN>();
public List<DocumentacionURBAN> documentacion { get; set; } = new List<DocumentacionURBAN>();
public List<tipoproyectosURBAN> ProyectosPorTipo(int idTipoDocumento)
{
return TiposProyecto.Where(x => x.idTipoDocumento == idTipoDocumento).ToList();
}
public List<enumeracionesCASA> ListaCostesVariables { get; set; } = new List<enumeracionesCASA>();
}
public List<DocumentacionURBAN> DocumentacionMinima(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esMinima == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
public List<DocumentacionURBAN> DocumentacionOpcional(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esOpcional == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
public List<DocumentacionURBAN> DatosNecesarios(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esNecesario == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
private List<DocumentacionURBAN> documentacionAUrban(List<documentacion> lista)
{
var listaDoc = new List<DocumentacionURBAN>();
foreach (var documentacion in lista)
{
var d = new DocumentacionURBAN();
d.iddocumentacion = documentacion.iddocumentacion;
d.Descripcion = documentacion.Descripcion.ToString();
if (documentacion.CoeficienteHoras.HasValue)
{
d.CoefHoras = (double)documentacion.CoeficienteHoras;
}
d.esCheckbox = documentacion.Checkeable;
listaDoc.Add(d);
}
return listaDoc;
}
}
}

View File

@@ -0,0 +1,321 @@
using bdHerramientaCACOA.db;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static bdHerramientaCACOA.CASA;
using bdHerramientaCACOA.extensiones;
using System.Text.Json;
using bdHerramientaCACOA.HerramientaUrban;
namespace bdHerramientaCACOA.HerramientaURBAN
{
public partial class URBAN
{
public string NombreSimulacion { get; set; } = "Simulación Urbanismo "+ DateTime.Now;
private CASADespachoProfesional _DespachoProfesional = new CASADespachoProfesional();
public CASADespachoProfesional DespachoProfesional
{
get { return _DespachoProfesional; }
set { _DespachoProfesional = value; }
}
private URBANTrabajoProfesional _TrabajoProfesional = new URBANTrabajoProfesional();
public URBANTrabajoProfesional TrabajoProfesional
{
get { return _TrabajoProfesional; }
set { _TrabajoProfesional = value; }
}
private URBANCostesProduccion _CostesProduccion = new URBANCostesProduccion();
public URBANCostesProduccion CostesProduccion
{
get { return _CostesProduccion; }
set
{
_CostesProduccion = value;
}
}
public EnumeradosURBAN Enumerados { get; set; } = new EnumeradosURBAN();
public VariablesCASA Variables { get; set; } = new VariablesCASA();
#region Carga de Datos
public void CargarVariables(bdHerramientaCACOA.dbcontext.tsHerramientasCACOA bd)
{
Variables.anyo = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.ANYO").ValorNumerico1;
Variables.ConvenioColectivo = (string)bd.enumeraciones.First(x => x.Codigo == "VARCASA.CONCOL").ValorAlfabetico2;
Variables.JornadaLaboralHoraSemana = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABHS").ValorNumerico1;
Variables.DiasLaborales = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.DIASLAB").ValorNumerico1;
Variables.JornadaLaboralEstTrabajadores = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABESTTRAB").ValorNumerico1;
Variables.JornadaLaboralAnual = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABANUAL").ValorNumerico1;
Variables.HorasProduccionMedia = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1;
Variables.CosteSegSocial = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.COSTESSEGSOCIAL").ValorNumerico1;
Variables.CostesVariables = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.COSTESVARIABLES").ValorNumerico1;
Variables.OtrosCostes = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.OTROSCOSTES").ValorNumerico1;
}
public void RellenarCamposExtra(dbcontext.tsHerramientasCACOA bd, bool esClonar)
{
CargarVariables(bd);
CargarEnumerados(bd, esClonar);
//por defecto periodoMensual
enumeraciones perMensual = bd.enumeraciones.First(x => x.Codigo == "PERIODOS.MENSUAL");
//Cargamos los costes indirectos
var grupoCostesIndirectos = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "CI");
var listaCosteIndirectos = Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoCostesIndirectos.idGrupoEnumeracion);
foreach (enumeraciones enu in listaCosteIndirectos)
{
if (!DespachoProfesional.CostesIndirectos.Any(x => x.Concepto == enu.ValorAlfabetico1))
{
CosteIndirecto ci = new CosteIndirecto();
ci.idCosteIndirecto = enu.idEnumeracion;
ci.Concepto = enu.ValorAlfabetico1;
ci.idPeriodicidad = perMensual.idEnumeracion;
ci.valorPeriodo = (double)perMensual.ValorNumerico1;
DespachoProfesional.CostesIndirectos.Add(ci);
}
}
checkListCostIndirectos(listaCosteIndirectos);
//Cargamos las Fases
var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB");
var listaFases = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoFases.idGrupoEnumeracion).ToList();
foreach (enumeraciones enu in listaFases)
{
if (!TrabajoProfesional.FasesTrabajoProfesional.Any(x => x.idFase == enu.idEnumeracion))
{
FasesURBAN ft = new FasesURBAN();
ft.idFase = enu.idEnumeracion;
ft.Codigo = enu.Codigo;
ft.Denominacion = enu.ValorAlfabetico1;
ft.Porcentaje = (double)enu.ValorNumerico1;
TrabajoProfesional.FasesTrabajoProfesional.Add(ft);
}
}
checkListFases(listaFases);
Enumerados.FasesTrabajo= JsonSerializer.Deserialize<List<FasesURBAN>>(JsonSerializer.Serialize(TrabajoProfesional.FasesTrabajoProfesional));
}
private void checkListCostIndirectos(List<enumeraciones> listaCostesIndirectos)
{
var itemsAEliminar = DespachoProfesional.CostesIndirectos
.Where(item => !listaCostesIndirectos.Any(x => x.ValorAlfabetico1 == item.Concepto))
.ToList();
foreach (var item in itemsAEliminar)
{
DespachoProfesional.CostesIndirectos.Remove(item);
}
}
private void checkListFases(List<enumeraciones> listaFasesUrban)
{
var itemsAEliminar = TrabajoProfesional.FasesTrabajoProfesional
.Where(item => !listaFasesUrban.Any(x => x.idEnumeracion == item.idFase))
.ToList();
foreach (var item in itemsAEliminar)
{
TrabajoProfesional.FasesTrabajoProfesional.Remove(item);
}
}
public void CargarEnumerados(dbcontext.tsHerramientasCACOA bd, bool esClonar) {
var grupoPeriodos = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "PERIODOS");
Enumerados.Periodos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoPeriodos.idGrupoEnumeracion).ToList());
var grupoTipDocumento = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "TIPODOCU");
Enumerados.TiposDeDocumentos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoTipDocumento.idGrupoEnumeracion).ToList());
if (!esClonar)
{
var grupoInstrumentos = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "INNINSTR");
Enumerados.ListaInstrumentos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoInstrumentos.idGrupoEnumeracion).ToList());
}
var grupoVariables = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "CVURB");
Enumerados.ListaCostesVariables = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoVariables.idGrupoEnumeracion).ToList());
List<tipoproyectos> lp= bd.tipoproyectos.ToList();
List<tipoproyectosURBAN> lpu = new List<tipoproyectosURBAN>();
foreach (tipoproyectos tp in lp) {
tipoproyectosURBAN tpu= new tipoproyectosURBAN();
tpu.idtipoproyectos = tp.idtipoproyectos;
tpu.idTipoDocumento = tp.idTipoDocumento;
tpu.Descripcion = tp.Descripcion;
tpu.Abreviatura = tp.Abreviatura;
lpu.Add(tpu);
}
Enumerados.TiposProyecto = lpu;
List<tipoproyecto_documentacion> ltpd= bd.tipoproyecto_documentacion.ToList();
List<tipoproyecto_documentacionURBAN> ltpdu = new List<tipoproyecto_documentacionURBAN>();
foreach (tipoproyecto_documentacion tpd in ltpd)
{
tipoproyecto_documentacionURBAN tpdu = new tipoproyecto_documentacionURBAN();
tpdu.idtipoproyecto_documentacion = tpd.idtipoproyecto_documentacion;
tpdu.idtipoproyecto = tpd.idtipoproyecto;
tpdu.iddocumentacion = tpd.iddocumentacion;
tpdu.esMinima = tpd.esMinima;
tpdu.esOpcional = tpd.esOpcional;
tpdu.esNecesario = tpd.esNecesario;
ltpdu.Add(tpdu);
}
Enumerados.TipoProy_Documentacion = ltpdu;
Enumerados.documentacion = documentacionAUrban(bd.documentacion.ToList());
}
#endregion
#region Funciones Despacho Profesional
//Funciones Despacho Profesional
public double CalcularHorasTotalesProduccion()
{
if (DespachoProfesional.Trabajadores.Count == 0)
{
return 0;
}
return DespachoProfesional.Trabajadores.Sum(x => x.HorasProduccion);
}
public double CalcularCostesDirectosAnuales()
{
return DespachoProfesional.Trabajadores.Sum(x => x.CosteAnualTotal);
}
public double CalcularTotalCostesIndirectos()
{
return DespachoProfesional.CostesIndirectos.Sum(x => x.coste);
}
public double CalcularCostesDirectos()
{
if (DespachoProfesional.HorasTotalesProduccion == 0 || DespachoProfesional.CostesDirectosAnuales == 0)
{
return 0;
}
return Math.Round((DespachoProfesional.CostesDirectosAnuales / DespachoProfesional.HorasTotalesProduccion), 2, MidpointRounding.AwayFromZero);
}
public double CalcularTasaCostesIndirectos()
{
if (DespachoProfesional.HorasTotalesProduccion == 0)
{
return 0;
}
else
{
return Math.Round((DespachoProfesional.TotalCostesIndirectos / DespachoProfesional.HorasTotalesProduccion), 2, MidpointRounding.AwayFromZero);
}
}
public double CalcularCosteHoraDespachoProfesional()
{
return Math.Round((DespachoProfesional.CostesDirectos + DespachoProfesional.TasaCostesIndirectos), 2, MidpointRounding.AwayFromZero);
}
public void CalcularCosteTotalAnual(Trabajador trab)
{
trab.CosteAnualTotal = (trab.NumTrabajadores * trab.CosteAnual).DosDecimales();
}
public void CalcularHorasProduccion(Trabajador trab)
{
trab.HorasProduccion = (Variables.JornadaLaboralAnual * trab.JornadaLaboral / Variables.JornadaLaboralHoraSemana * trab.NumTrabajadores * (trab.PorcentajeProduccion / 100)).DosDecimales();
}
public void InsertarTrabajador(Trabajador trab)
{
CalcularCosteTotalAnual(trab);
CalcularHorasProduccion(trab);
DespachoProfesional.Trabajadores.Add(trab);
CalcularFinales();
}
public void ActualizarTrabajador(Trabajador trab)
{
CalcularCosteTotalAnual(trab);
CalcularHorasProduccion(trab);
int indice = DespachoProfesional.Trabajadores.ToList().IndexOf(trab);
DespachoProfesional.Trabajadores[indice] = trab;
CalcularFinales();
}
public void EliminarTrabajador(Trabajador trab)
{
DespachoProfesional.Trabajadores.Remove(trab);
CalcularFinales();
}
public void ActualizarCosteIndirecto(CosteIndirecto ci)
{
var periodo = Enumerados.Periodos.First(x => x.idEnumeracion == ci.idPeriodicidad);
ci.idPeriodicidad = periodo.idEnumeracion;
ci.valorPeriodo = (double)periodo.ValorNumerico1;
ci.coste = ci.importe * ci.valorPeriodo;
int indice = DespachoProfesional.CostesIndirectos.ToList().IndexOf(ci);
DespachoProfesional.CostesIndirectos[indice] = ci;
CalcularFinales();
}
public void LimpiarCosteIndirecto(CosteIndirecto ci)
{
ci.importe = 0;
ci.coste = 0;
}
public void CalcularFinales()
{
DespachoProfesional.CostesDirectosAnuales = CalcularCostesDirectosAnuales();
DespachoProfesional.HorasTotalesProduccion = CalcularHorasTotalesProduccion();
DespachoProfesional.TotalCostesIndirectos = CalcularTotalCostesIndirectos();
DespachoProfesional.TasaCostesIndirectos = CalcularTasaCostesIndirectos();
DespachoProfesional.CostesDirectos = CalcularCostesDirectos();
DespachoProfesional.CosteHoraDespachoProfesional = CalcularCosteHoraDespachoProfesional();
CalcularCostesProduccion();
}
#endregion
#region parsearObjetos
public List<enumeracionesCASA> ListaEnumeracionCASA(List<enumeraciones> lista)
{
List<enumeracionesCASA> lu = new List<enumeracionesCASA>();
foreach (enumeraciones enu in lista)
{
lu.Add(EnumeracionACASA(enu));
}
return lu;
}
public enumeracionesCASA EnumeracionACASA(enumeraciones enu)
{
return new enumeracionesCASA()
{
idEnumeracion = enu.idEnumeracion,
idGrupoEnumeracion = enu.idGrupoEnumeracion,
Codigo = enu.Codigo,
Descripcion = enu.Descripcion,
ValorAlfabetico1 = enu.ValorAlfabetico1,
ValorAlfabetico2 = enu.ValorAlfabetico2,
ValorNumerico1 = enu.ValorNumerico1
};
}
#endregion
}
}

View File

@@ -0,0 +1,116 @@
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<CosteVariable> ListaCostesVariables { get; set; } = new List<CosteVariable>();
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();
}
//€
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();
}
}
}

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

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bdHerramientaCACOA.db;
namespace bdHerramientaCACOA.HerramientaUrban
{
public partial class tipoproyecto_documentacionURBAN
{
public int idtipoproyecto_documentacion { get; set; }
public int? idtipoproyecto { get; set; }
public int? iddocumentacion { get; set; }
public bool? esMinima { get; set; }
public bool? esOpcional { get; set; }
public bool? esNecesario { get; set; }
public int orden { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bdHerramientaCACOA.HerramientaUrban
{
public partial class tipoproyectosURBAN
{
public int idtipoproyectos { get; set; }
public int idTipoDocumento { get; set; }
public string? Descripcion { get; set; }
public string? Abreviatura { get; set; }
}
}

View File

@@ -0,0 +1,479 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using bdHerramientaCACOA.db;
using bdHerramientaCACOA.dbcontext;
using bdHerramientaCACOA.extensiones;
using Google.Protobuf.WellKnownTypes;
using static bdHerramientaCACOA.CASA;
namespace bdHerramientaCACOA
{
public class LICITACIONES
{
public class VariablesLICITACIONES
{
public double CostesVariables { get; set; } = 0.035;
public int JornadaLaboral { get; set; } = 1800;
public int HorasProduccionMedia { get; set; } = 80;
public double IPCCosteIndirecto { get; set; } = 1;
}
public VariablesLICITACIONES Variables { get; set; } = new VariablesLICITACIONES();
public string Descripcion { get; set; } = "Licitación Edificación "+ DateTime.Now;
public class EnumeradosLICITACIONES
{
public List<enumeracionesCASA> GruposTipologias { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> Intervenciones { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> ListaOtrosTrabajos { get; set; } = new List<enumeracionesCASA>();
public List<tipologiasCASA> Tipologias { get; set; } = new List<tipologiasCASA>();
//public List<costedespachoprofesional> ListaCostesDespacho { get; set; } = new List<costedespachoprofesional>();
public List<ConvenioColectivoConcurso> ListaConvenioColectivo { get; set; } = new List<ConvenioColectivoConcurso>();
public List<CosteDirectoIndirecto> ListaCDCI { get; set; } = new List<CosteDirectoIndirecto>();
public List<tipologiasCASA> TipologiasPorGrupo(int idgrupo)
{
return Tipologias.Where(x => x.idGrupoTip == idgrupo).ToList();
}
}
public EnumeradosLICITACIONES Enumerados { get; set; } = new EnumeradosLICITACIONES();
public List<UsosTipologia> Usos { get; set; } = new List<UsosTipologia>();
public List<FasesTrabajo> FasesTrabajo { get; set; } = new List<FasesTrabajo>();
//Para el calculo de tabla
public string idProvincia { get; set; } = "";
public int idGradSup { get; set; } = 0;
public int idGradMed { get; set; } = 0;
public int idDelin { get; set; } = 0;
public double PlazoPresentacionDocumentos { get; set; } = 0;
public double CostesProduccionTrabProf { get; set; } = 0;
double _beneficio = 19;
public double Beneficio
{
get
{
return _beneficio;
}
//set
//{
// _beneficio = value;
// CalcularHorasSuperficie();
//}
}
public double PrecioTrabProf { get; set; } = 0;
public List<OtrosTrabajos> OtrosTrabajos { get; set; } = new List<OtrosTrabajos>();
public double TotalOtrosTrabajos { get; set; } = 0;
public double PrecioDelEncargo { get; set; } = 0;
public void Inicializar(bdHerramientaCACOA.dbcontext.tsHerramientasCACOA bd)
{
Variables.CostesVariables = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.COSTESVARIABLES").ValorNumerico1;
Variables.JornadaLaboral = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABANUAL").ValorNumerico1;
Variables.HorasProduccionMedia = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1;
Variables.IPCCosteIndirecto = (double) bd.enumeraciones.First(x => x.Codigo == "VARCASA.IPCCD").ValorNumerico1;
idGradSup = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.TECGRADSUP").idEnumeracion;
idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion;
idDelin = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.DELINPROY").idEnumeracion;
//Cargamos las Fases
var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASES");
var listaFases = Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoFases.idGrupoEnumeracion).ToList();
foreach (enumeraciones enu in listaFases)
{
if (!FasesTrabajo.Any(x => x.Denominacion == enu.ValorAlfabetico1))
{
FasesTrabajo ft = new FasesTrabajo();
ft.idFase = enu.idEnumeracion;
ft.Codigo = enu.Codigo;
ft.Denominacion = enu.ValorAlfabetico1;
ft.Porcentaje = (double)enu.ValorNumerico1;
FasesTrabajo.Add(ft);
}
}
checkListCostIndirectos(listaFases);
//Cargamos la lista de otros costes de trabajo
var grupoOtrosTrab = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "OTROSTRAB");
Enumerados.ListaOtrosTrabajos = ListaEnumeracionCASA(Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoOtrosTrab.idGrupoEnumeracion).ToList());
//foreach (enumeraciones enu in listaOtrosTrab)
//{
// OtrosTrabajos ot = new OtrosTrabajos();
// ot.idTrabajo = enu.idEnumeracion;
// ot.Denominacion = enu.ValorAlfabetico1;
// OtrosTrabajos.Add(ot);
//}
var grupoTipologias = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "GRUPTIP");
Enumerados.GruposTipologias = ListaEnumeracionCASA(Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoTipologias.idGrupoEnumeracion).ToList());
Enumerados.Tipologias = ListaTipologiasCASA(bd.tipologias.ToList());
var grupoIntervencion = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "INTERVENCION");
Enumerados.Intervenciones= ListaEnumeracionCASA(Utilidades.devolverListadoOrdenadoEnumeracion(bd, grupoIntervencion.idGrupoEnumeracion).ToList());
//Esto es para la tabla de CDCI matematica, en configuracion puede verse como "calculo CD+CI"
var lisConvCol = bd.conveniocolectivo.ToList();
Enumerados.ListaConvenioColectivo = ListaConvenioColectivoCASA(lisConvCol);
Enumerados.ListaCDCI = CalcularTabla("");
}
private void checkListCostIndirectos(List<enumeraciones> listaFases)
{
var itemsAEliminar = FasesTrabajo
.Where(item => !listaFases.Any(x => x.ValorAlfabetico1 == item.Denominacion))
.ToList();
foreach (var item in itemsAEliminar)
{
FasesTrabajo.Remove(item);
}
}
//Funciones Trabajo Profesional
public void InsertarUso(UsosTipologia uso)
{
RellenarDatosUsoExtra(uso);
Usos.Add(uso);
CalcularHorasSuperficie();
}
public void ActualizarUso(UsosTipologia uso)
{
RellenarDatosUsoExtra(uso);
int indice = Usos.ToList().IndexOf(uso);
Usos[indice] = uso;
CalcularHorasSuperficie();
}
public void EliminarUso(UsosTipologia uso)
{
Usos.Remove(uso);
CalcularHorasSuperficie();
}
public void ActualizarFase(FasesTrabajo ft)
{
int indice = FasesTrabajo.ToList().IndexOf(ft);
FasesTrabajo[indice] = ft;
CalcularHorasSuperficie();
//Comprobar si esta va aqui, porque sino no modifca el precio licitación/concurso
CalcularCostesProduccion();
}
public void RellenarDatosUsoExtra(UsosTipologia uso)
{
tipologiasCASA tipologia = Enumerados.Tipologias.First(x => x.idTipologia == uso.idTipologia);
enumeracionesCASA intervencion = Enumerados.Intervenciones.First(x => x.idEnumeracion == uso.idTipoIntervencion);
uso.CoefTipologia = tipologia.CoeficienteUso;
uso.CoefIntervencion = (double)intervencion.ValorNumerico1;
}
public double superficie { get; set; }=0;
public double coefSupTotal { get; set; } = 0;
public double coefsinredondeo { get; set; } = 0;
public double coefTipoTotal { get; set; }=0;
public double totalCoefiTipologia { get; set; } = 0;
public double totalCoefIntervencion { get; set; } = 0;
public double coefIntervencionTotal { get; set; } = 0;
public double fasesEncargadas { get; set; } = 0;
public double horasProduccion { get; set; } = 0;
public double horasPorcentaje { get; set; } = 0;
public double horasDocumentacion { get; set; } = 0;
public double plazoMedio { get; set; } = 0;
public double coefPlazos { get; set; } = 0;
public double horasAnualesMinimas { get; set; } = 0;
public double CD { get; set; } = 0;
public double CI { get; set; } = 0;
public double CosteCDCI { get; set; } = 0;
public double tasaCostesVariables { get; set; } = 0;
public double costeHoraProduccion { get; set; } = 0;
public void CalcularHorasSuperficie() {
// calcular superficie total
superficie = Usos.Sum(x => x.superficie);
if (superficie > 0) {
// calcular coef superficie total
coefsinredondeo = -0.1375 * Math.Log(superficie) + 2.4;
coefSupTotal = Math.Round( coefsinredondeo,2, MidpointRounding.AwayFromZero);
totalCoefiTipologia = 0;
totalCoefIntervencion = 0;
// calcular coef tipologia total
foreach (UsosTipologia uso in Usos) {
totalCoefiTipologia += uso.superficie * uso.CoefTipologia;
totalCoefIntervencion += uso.superficie * uso.CoefIntervencion;
}
//totalCoefiTipologia = Usos.Sum(x => x.superficie) * Usos.Sum(x => x.CoefTipologia);
coefTipoTotal = Math.Round(totalCoefiTipologia / superficie, 2, MidpointRounding.AwayFromZero);
// calcular coef intervencion total
// totalCoefIntervencion = Usos.Sum(x => x.superficie) * Usos.Sum(x => x.CoefIntervencion);
coefIntervencionTotal = Math.Round(totalCoefIntervencion / superficie,2, MidpointRounding.AwayFromZero);
// calcular fases encargadas
fasesEncargadas = FasesTrabajo.Where(x=>x.Seleccionado).Sum(x=> x.Porcentaje);
// calcular horas produccion trabajo profesional
horasProduccion = Math.Round((superficie*coefSupTotal*coefTipoTotal*coefIntervencionTotal*(fasesEncargadas/100)), 2, MidpointRounding.AwayFromZero); ;
// calcular horas elaboracion documentacion
horasPorcentaje = FasesTrabajo.Where(x=> x.Codigo.Contains("ESTPREVIO") || x.Codigo.Contains("ANTEPROYECTO") || x.Codigo.Contains("PROYBASICO") || x.Codigo.Contains("PROYEJEC")).Sum(x=>x.Porcentaje) ;
horasDocumentacion = Math.Round(superficie * coefSupTotal * coefTipoTotal * coefIntervencionTotal*(horasPorcentaje/100), 2, MidpointRounding.AwayFromZero);
// calcular plazo medio(meses) esto hay que preguntarlo
plazoMedio = 3;
var plazoElegido = plazoMedio;
if (PlazoPresentacionDocumentos > plazoMedio) {
plazoElegido = PlazoPresentacionDocumentos;
}
// calcular coef plazos menores de 6 meses
coefPlazos =0;
double restaPlazos = plazoElegido -plazoMedio ;
if (restaPlazos > 0)
{
coefPlazos= 1+ restaPlazos*2* 0.01666;
}else if (restaPlazos == 0)
{
coefPlazos = 1;
}
else
{
coefPlazos = 1;
}
coefPlazos = coefPlazos.DosDecimales();
// calcular horasAnualesMinimas
horasAnualesMinimas = ((horasDocumentacion * 12) / plazoElegido).DosDecimales();
// calcular CD
//var numTrab3 = Enumerados.ListaCDCI.First(x => x.NumeroTrabajadores == 3);
CD = 0;
//if (horasAnualesMinimas < numTrab3.HorasProduccionAnuales)
//{
// CD = numTrab3.CostesDirectos;
//}
//else {
CD = ObtenerCDTabla(horasAnualesMinimas)*coefPlazos;
//}
CD = CD.DosDecimales();
// calcular CI
CI = 0;
//if (horasAnualesMinimas < numTrab3.HorasProduccionAnuales)
//{
// CI = numTrab3.CostesIndirectos;
//}
//else
//{
CI = ObtenerCITabla(horasAnualesMinimas) * coefPlazos;
//}
CI = CI.DosDecimales();
// calcular Coste hora CD+CI
CosteCDCI = CD + CI;
// calcular Tasa costes variables
tasaCostesVariables = Variables.CostesVariables;
// calcular coste hora de produccion
costeHoraProduccion = CosteCDCI * (1 + tasaCostesVariables);
if (PlazoPresentacionDocumentos == 0)
{
CostesProduccionTrabProf = 0;
}
else {
CostesProduccionTrabProf = (horasProduccion * coefPlazos * costeHoraProduccion).DosDecimales();
}
PrecioTrabProf = (CostesProduccionTrabProf * (1 + (Beneficio / 100))).DosDecimales();
CostesProduccionTrabProf = Math.Round(CostesProduccionTrabProf, 2, MidpointRounding.AwayFromZero);
PrecioTrabProf = Math.Round(PrecioTrabProf, 2, MidpointRounding.AwayFromZero);
PrecioDelEncargo = PrecioTrabProf;
}
}
//// OTROS TRABAJOS GESTION
public void InsertarOtrosTrabajos(OtrosTrabajos ot)
{
OtrosTrabajos.Add(ot);
CalcularCostesProduccion();
}
public void EliminarOtrosTrabajos(OtrosTrabajos ot)
{
OtrosTrabajos.Remove(ot);
CalcularCostesProduccion();
}
public void ActualizarOtrosTrabajos(OtrosTrabajos ot)
{
int indice = OtrosTrabajos.ToList().IndexOf(ot);
OtrosTrabajos[indice] = ot;
CalcularCostesProduccion();
}
public void CalcularCostesProduccion()
{
TotalOtrosTrabajos = CalcularTotalOtrosTrabajos();
PrecioDelEncargo = PrecioTrabProf + TotalOtrosTrabajos;
}
public double CalcularTotalOtrosTrabajos()
{
return OtrosTrabajos.Sum(x => x.Coste);
}
public List<enumeracionesCASA> ListaEnumeracionCASA(List<enumeraciones> lista)
{
List<enumeracionesCASA> lu = new List<enumeracionesCASA>();
foreach (enumeraciones enu in lista)
{
lu.Add(EnumeracionACASA(enu));
}
return lu;
}
public enumeracionesCASA EnumeracionACASA(enumeraciones enu)
{
return new enumeracionesCASA()
{
idEnumeracion = enu.idEnumeracion,
idGrupoEnumeracion = enu.idGrupoEnumeracion,
Codigo = enu.Codigo,
Descripcion = enu.Descripcion,
ValorAlfabetico1 = enu.ValorAlfabetico1,
ValorAlfabetico2 = enu.ValorAlfabetico2,
ValorNumerico1 = enu.ValorNumerico1
};
}
private double ObtenerCDTabla(double horas)
{
double valor = 0;
var a = Enumerados.ListaCDCI.OrderByDescending(x => x.NumeroTrabajadores);
valor= a.First().CostesDirectos;
if (a.Count() > 0)
{
foreach (CosteDirectoIndirecto cdp in a)
{
if (horas <= cdp.HorasProduccionAnuales)
{
valor = cdp.CostesDirectos;
}
}
}
return valor;
}
private double ObtenerCITabla(double horas)
{
double valor = 0;
var a = Enumerados.ListaCDCI.OrderByDescending(x => x.NumeroTrabajadores);
if (a.Count() > 0) {
valor = a.First().CostesIndirectos;
foreach (CosteDirectoIndirecto cdp in a)
{
if (horas <= cdp.HorasProduccionAnuales)
{
valor = cdp.CostesIndirectos;
}
}
}
return valor;
}
public List<tipologiasCASA> ListaTipologiasCASA(List<tipologias> lista)
{
List<tipologiasCASA> lu = new List<tipologiasCASA>();
foreach (tipologias enu in lista)
{
lu.Add(tipologiaACASA(enu));
}
return lu;
}
public tipologiasCASA tipologiaACASA(tipologias enu)
{
return new tipologiasCASA()
{
idTipologia = enu.idtipologia,
idGrupoTip = enu.idGrupoTip,
Descripcion = enu.Descripcion,
CoeficienteUso = enu.CoeficienteUso
};
}
public List<ConvenioColectivoConcurso> ListaConvenioColectivoCASA(List<conveniocolectivo> lista)
{
List<ConvenioColectivoConcurso> lcc = new List<ConvenioColectivoConcurso>();
foreach (conveniocolectivo enu in lista)
{
lcc.Add(convenioColectivoACASA(enu));
}
return lcc;
}
public ConvenioColectivoConcurso convenioColectivoACASA(conveniocolectivo cc)
{
return new ConvenioColectivoConcurso()
{
idConvenioColectivo = cc.idConvenioColectivo,
idEnumeracion = cc.idEnumeracion,
idProvincia = cc.idProvincia,
SalarioBase = cc.SalarioBase,
OtrosCostes = cc.OtrosCostes,
CosteAnualTrabajador = cc.CosteAnualTrabajador
};
}
public List<CosteDirectoIndirecto> CalcularTabla(string idProvincia)
{
List<CosteDirectoIndirecto> listaCDCI = new List<CosteDirectoIndirecto>();
//Obtenemos variables a utilizar
if (idProvincia == "") { idProvincia = null; }
double ValorTecSuperior = Enumerados.ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradSup) != null ? Enumerados.ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradSup).CosteAnualTrabajador : 0;
double ValorTecMedio = Enumerados.ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradMed) != null ? Enumerados.ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradMed).CosteAnualTrabajador : 0;
double ValorDelineante = Enumerados.ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idDelin) != null ? Enumerados.ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idDelin).CosteAnualTrabajador : 0; ;
double masCaro = Math.Max(ValorTecSuperior, Math.Max(ValorTecMedio, ValorDelineante));
double masBarato = Math.Min(ValorTecSuperior, Math.Min(ValorTecMedio, ValorDelineante));
//Se calcula
//listaCDCI.Add(new CosteDirectoIndirecto(1, 1 * ValorTecSuperior, 1 * ValorTecSuperior, jornadaLaboralAnual, horasProdMedia, porcentajeCostesVariables));
for (int i = 2; i <= 20; i++)
{
double costeMinimo = ValorTecSuperior + (masBarato * (i - 1));
double costeMaximo = ValorTecSuperior + (masCaro * (i - 1));
CosteDirectoIndirecto cdci = new CosteDirectoIndirecto(i, costeMinimo, costeMaximo, Variables.JornadaLaboral, Variables.HorasProduccionMedia, Variables.CostesVariables,Variables.IPCCosteIndirecto);
listaCDCI.Add(cdci);
}
return listaCDCI;
}
public class ConvenioColectivoConcurso
{
public int idConvenioColectivo { get; set; } = 0;
public int idEnumeracion { get; set; } = 0;
public string? idProvincia { get; set; } = "";
public double? SalarioBase { get; set; } = 0;
public double? OtrosCostes { get; set; } = 0;
public double CosteAnualTrabajador { get; set; } = 0;
}
}
}

View File

@@ -0,0 +1,731 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using bdHerramientaCACOA.db;
using bdHerramientaCACOA.extensiones;
using bdHerramientaCACOA.HerramientaUrban;
using static bdHerramientaCACOA.CASA;
using static bdHerramientaCACOA.HerramientaURBAN.URBAN;
using static bdHerramientaCACOA.LICITACIONES;
namespace bdHerramientaCACOA
{
public class LicitacionesURBAN
{
public string NombreSimulacion { get; set; } = "Licitación Urbanismo " + DateTime.Now;
public List<ConvenioColectivoConcurso> ListaConvenioColectivo { get; set; } = new List<ConvenioColectivoConcurso>();
public List<SolvenciaTecnica> ListaSolvenciaTecnica { get; set; } = new List<SolvenciaTecnica>();
//public int minimoGradoSuperior { get; set; } = 1;
//public int minimoGradoMedio { get; set; } = 0;
public string idProvincia { get; set; } = "";
public int idGradSup { get; set; } = 0;
public int idGradMed { get; set; } = 0;
public int idDelin { get; set; } = 0;
public double PlazoPresentacionDocumentos { get; set; } = 6;
public double CosteHP { get; set; } = 0;
public double CostesProduccionTrabProf { get; set; } = 0;
public double Beneficio { get; set; } = 19;
public double PrecioDelTrabajo { get; set; } = 0;
private URBANTrabajoProfesional _TrabajoProfesional = new URBANTrabajoProfesional();
public URBANTrabajoProfesional TrabajoProfesional
{
get { return _TrabajoProfesional; }
set { _TrabajoProfesional = value; }
}
public EnumeradosLicitacionesURBAN Enumerados { get; set; } = new EnumeradosLicitacionesURBAN();
public VariablesLICITACIONES Variables { get; set; } = new VariablesLICITACIONES();
public class EnumeradosLicitacionesURBAN
{
public List<ConvenioColectivoConcurso> ListaConvenioColectivo { get; set; } = new List<ConvenioColectivoConcurso>();
public List<CosteDirectoIndirecto> ListaCDCI { get; set; } = new List<CosteDirectoIndirecto>();
public List<enumeracionesCASA> TiposDeDocumentos { get; set; } = new List<enumeracionesCASA>();
public List<FasesURBAN> FasesTrabajo { get; set; } = new List<FasesURBAN>();
public List<tipoproyectosURBAN> TiposProyecto { get; set; } = new List<tipoproyectosURBAN>();
public List<tipoproyecto_documentacionURBAN> TipoProy_Documentacion { get; set; } = new List<tipoproyecto_documentacionURBAN>();
public List<DocumentacionURBAN> documentacion { get; set; } = new List<DocumentacionURBAN>();
public List<tipoproyectosURBAN> ProyectosPorTipo(int idTipoDocumento)
{
return TiposProyecto.Where(x => x.idTipoDocumento == idTipoDocumento).ToList();
}
public List<enumeracionesCASA> ListaInstrumentos { get; set; } = new List<enumeracionesCASA>();
public List<enumeracionesCASA> ListaGrupoTrabajadores { get; set; } = new List<enumeracionesCASA>();
}
public class VariablesLICITACIONES
{
public double CostesVariables { get; set; } = 0.035;
public int JornadaLaboral { get; set; } = 1800;
public int HorasProduccionMedia { get; set; } = 80;
public double IPCCosteIndirecto { get; set; } = 1;
}
public void CargarVariables(bdHerramientaCACOA.dbcontext.tsHerramientasCACOA bd)
{
Variables.CostesVariables = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.COSTESVARIABLES").ValorNumerico1;
Variables.JornadaLaboral = (int)bd.enumeraciones.First(x => x.Codigo == "VARCASA.JORLABANUAL").ValorNumerico1;
Variables.HorasProduccionMedia = (int) bd.enumeraciones.First(x => x.Codigo == "VARCASA.HORPRODMEDIA").ValorNumerico1;
Variables.IPCCosteIndirecto = (double)bd.enumeraciones.First(x => x.Codigo == "VARCASA.IPCCD").ValorNumerico1;
idGradSup = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.TECGRADSUP").idEnumeracion;
idGradMed = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.GESTPROY").idEnumeracion;
idDelin = bd.enumeraciones.First(x => x.Codigo == "PUESTOTRABAJO.DELINPROY").idEnumeracion;
}
public void CargarEnumerados(dbcontext.tsHerramientasCACOA bd)
{
var grupoPuestoTrabajo = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "PUESTOTRABAJO");
Enumerados.ListaGrupoTrabajadores = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoPuestoTrabajo.idGrupoEnumeracion).ToList());
var grupoTipDocumento = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "TIPODOCU");
Enumerados.TiposDeDocumentos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoTipDocumento.idGrupoEnumeracion).ToList());
var grupoInstrumentos = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "INNINSTR");
if(Enumerados.ListaInstrumentos.Count == 0)
{
Enumerados.ListaInstrumentos = ListaEnumeracionCASA(bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoInstrumentos.idGrupoEnumeracion).ToList());
}
List<tipoproyectos> lp = bd.tipoproyectos.ToList();
List<tipoproyectosURBAN> lpu = new List<tipoproyectosURBAN>();
foreach (tipoproyectos tp in lp)
{
tipoproyectosURBAN tpu = new tipoproyectosURBAN();
tpu.idtipoproyectos = tp.idtipoproyectos;
tpu.idTipoDocumento = tp.idTipoDocumento;
tpu.Descripcion = tp.Descripcion;
tpu.Abreviatura = tp.Abreviatura;
lpu.Add(tpu);
}
Enumerados.TiposProyecto = lpu;
List<tipoproyecto_documentacion> ltpd = bd.tipoproyecto_documentacion.ToList();
List<tipoproyecto_documentacionURBAN> ltpdu = new List<tipoproyecto_documentacionURBAN>();
foreach (tipoproyecto_documentacion tpd in ltpd)
{
tipoproyecto_documentacionURBAN tpdu = new tipoproyecto_documentacionURBAN();
tpdu.idtipoproyecto_documentacion = tpd.idtipoproyecto_documentacion;
tpdu.idtipoproyecto = tpd.idtipoproyecto;
tpdu.iddocumentacion = tpd.iddocumentacion;
tpdu.esMinima = tpd.esMinima;
tpdu.esOpcional = tpd.esOpcional;
tpdu.esNecesario = tpd.esNecesario;
ltpdu.Add(tpdu);
}
Enumerados.TipoProy_Documentacion = ltpdu;
Enumerados.documentacion = documentacionAUrban(bd.documentacion.ToList());
//Esto es para la tabla de CDCI matematica, en configuracion puede verse como "calculo CD+CI"
var lisConvCol = bd.conveniocolectivo.ToList();
Enumerados.ListaConvenioColectivo = ListaConvenioColectivoCASA(lisConvCol);
Enumerados.ListaCDCI = CalcularTabla("");
}
public void RellenarCamposExtra(dbcontext.tsHerramientasCACOA bd)
{
CargarVariables(bd);
CargarEnumerados(bd);
//Cargamos las Fases
var grupoFases = bd.gruposenumeraciones.FirstOrDefault(x => x.Grupo == "FASURB");
var listaFases = bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupoFases.idGrupoEnumeracion).ToList();
foreach (enumeraciones enu in listaFases)
{
FasesURBAN ft = new FasesURBAN();
ft.idFase = enu.idEnumeracion;
ft.Codigo = enu.Codigo;
ft.Denominacion = enu.ValorAlfabetico1;
ft.Porcentaje = (double)enu.ValorNumerico1;
TrabajoProfesional.FasesTrabajoProfesional.Add(ft);
}
Enumerados.FasesTrabajo = JsonSerializer.Deserialize<List<FasesURBAN>>(JsonSerializer.Serialize(TrabajoProfesional.FasesTrabajoProfesional));
}
public void CalcularLicitacion() {
var horasAnualesDes = Math.Round(TrabajoProfesional.horasTrabProfesional * 12 / PlazoPresentacionDocumentos,2,MidpointRounding.AwayFromZero);
var CD = ObtenerCDTabla(horasAnualesDes);
var CI = ObtenerCITabla(horasAnualesDes);
var CV = 0.025;
CosteHP = ((CD+CI)*(1+CV)).DosDecimales();
CostesProduccionTrabProf = (TrabajoProfesional.horasTrabProfesional*CosteHP).DosDecimales();
Beneficio = 0.19;
PrecioDelTrabajo = (CostesProduccionTrabProf*(1+Beneficio)).DosDecimales();
}
private double ObtenerCDTabla(double horas)
{
double valor = 0;
var a = Enumerados.ListaCDCI.OrderByDescending(x => x.NumeroTrabajadores);
if (Enumerados.ListaCDCI.Count > 0) {
valor = a.First().CostesDirectos;
if (a.Count() > 0)
{
foreach (CosteDirectoIndirecto cdp in a)
{
if (horas <= cdp.HorasProduccionAnuales)
{
valor = cdp.CostesDirectos;
}
}
}
}
return valor;
}
private double ObtenerCITabla(double horas)
{
double valor = 0;
var a = Enumerados.ListaCDCI.OrderByDescending(x => x.NumeroTrabajadores);
if (Enumerados.ListaCDCI.Count > 0)
{
valor = a.First().CostesIndirectos;
if (a.Count() > 0)
{
foreach (CosteDirectoIndirecto cdp in a)
{
if (horas <= cdp.HorasProduccionAnuales)
{
valor = cdp.CostesIndirectos;
}
}
}
}
return valor;
}
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();
CalcularLicitacion();
}
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 void ActualizarFase(FasesURBAN ft)
{
int indice = TrabajoProfesional.FasesTrabajoProfesional.ToList().IndexOf(ft);
TrabajoProfesional.FasesTrabajoProfesional[indice] = ft;
CalcularHorasTrabajoProfesional();
}
public List<DocumentacionURBAN> DocumentacionMinima(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esMinima == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
public List<DocumentacionURBAN> DocumentacionOpcional(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esOpcional == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
public List<DocumentacionURBAN> DatosNecesarios(int idTipoProyecto)
{
List<tipoproyecto_documentacionURBAN> lista = Enumerados.TipoProy_Documentacion.Where(x => x.idtipoproyecto == idTipoProyecto && x.esNecesario == true).ToList();
List<DocumentacionURBAN> ldm = new List<DocumentacionURBAN>();
foreach (tipoproyecto_documentacionURBAN tpd in lista)
{
DocumentacionURBAN d = Enumerados.documentacion.First(x => x.iddocumentacion == tpd.iddocumentacion);
ldm.Add(d);
}
return ldm;
}
private List<DocumentacionURBAN> documentacionAUrban(List<documentacion> lista)
{
var listaDoc = new List<DocumentacionURBAN>();
foreach (var documentacion in lista)
{
var d = new DocumentacionURBAN();
d.iddocumentacion = documentacion.iddocumentacion;
d.Descripcion = documentacion.Descripcion.ToString();
if (documentacion.CoeficienteHoras.HasValue)
{
d.CoefHoras = (double)documentacion.CoeficienteHoras;
}
d.esCheckbox = documentacion.Checkeable;
listaDoc.Add(d);
}
return listaDoc;
}
public List<CosteDirectoIndirecto> CalcularTabla(string idProvincia)
{
List<CosteDirectoIndirecto> listaCDCI = new List<CosteDirectoIndirecto>();
if (ListaSolvenciaTecnica.Count > 0) {
//Obtenemos variables a utilizar
if (idProvincia == "") { idProvincia = null; }
double ValorTecSuperior = Enumerados.ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradSup) != null ? Enumerados.ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradSup).CosteAnualTrabajador : 0;
double ValorTecMedio = Enumerados.ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradMed) != null ? Enumerados.ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idGradMed).CosteAnualTrabajador : 0;
double ValorDelineante = Enumerados.ListaConvenioColectivo.FirstOrDefault(x => x.idProvincia == idProvincia && x.idEnumeracion == idDelin) != null ? Enumerados.ListaConvenioColectivo.First(x => x.idProvincia == idProvincia && x.idEnumeracion == idDelin).CosteAnualTrabajador : 0; ;
double masCaro = Math.Max(ValorTecSuperior, Math.Max(ValorTecMedio, ValorDelineante));
double masBarato = Math.Min(ValorTecSuperior, Math.Min(ValorTecMedio, ValorDelineante));
var minimoGradoSuperior = ListaSolvenciaTecnica.Where(x=> x.idConvenioColectivo==idGradSup).Sum(x => x.Cantidad);
var minimoGradoMedio = ListaSolvenciaTecnica.Where(x => x.idConvenioColectivo == idGradMed).Sum(x => x.Cantidad);
var resto= ListaSolvenciaTecnica.Where(x => x.idConvenioColectivo != idGradMed && x.idConvenioColectivo != idGradSup).Sum(x => x.Cantidad);
int minimoTrabajadores = minimoGradoMedio + minimoGradoSuperior + resto;
//Se calcula
//CosteDirectoIndirecto cdci = new CosteDirectoIndirecto(i, costeMinimo, costeMaximo, Variables.JornadaLaboral, Variables.HorasProduccionMedia, Variables.CostesVariables, Variables.IPCCosteIndirecto);
if (minimoTrabajadores == 1 && minimoGradoSuperior == 1)
{//Se calcula como siempre, el calculo de licitaciones CASA
for (int i = 1; i <= 20; i++)
{
double costeMinimo = ValorTecSuperior + (masBarato * (i - 1));
double costeMaximo = ValorTecSuperior + (masCaro * (i - 1));
listaCDCI.Add(new CosteDirectoIndirecto(i, costeMinimo, costeMaximo, Variables.JornadaLaboral, Variables.HorasProduccionMedia, Variables.CostesVariables, Variables.IPCCosteIndirecto));
}
}
else
{//Se calcula con minimos, por si ponen minimos en licitaciones URBAN
//var resto= minimoTrabajadores-minimoGradoMedio
double costeMinimo1 = (ValorTecSuperior * minimoGradoSuperior) + (ValorTecMedio * minimoGradoMedio)+(masBarato * resto); //+ (masBarato * numresto);
double costeMaximo1 = (ValorTecSuperior * minimoGradoSuperior) + (ValorTecMedio * minimoGradoMedio)+(masBarato * resto); //+ (masCaro * (numresto));
listaCDCI.Add(new CosteDirectoIndirecto(minimoTrabajadores, costeMinimo1, costeMaximo1, Variables.JornadaLaboral, Variables.HorasProduccionMedia, Variables.CostesVariables, Variables.IPCCosteIndirecto));
for (int i = minimoTrabajadores + 1; i <= 20; i++)
{
var numresto = i - minimoTrabajadores;
double costeMinimo = (ValorTecSuperior * minimoGradoSuperior) + (ValorTecMedio * minimoGradoMedio) + (masBarato * numresto);
double costeMaximo = (ValorTecSuperior * minimoGradoSuperior) + (ValorTecMedio * minimoGradoMedio) + (masCaro * (numresto));
listaCDCI.Add(new CosteDirectoIndirecto(i, costeMinimo, costeMaximo, Variables.JornadaLaboral, Variables.HorasProduccionMedia, Variables.CostesVariables, Variables.IPCCosteIndirecto));
}
}
}
return listaCDCI;
}
public void InsertarSolvenciaTecnica(SolvenciaTecnica ot)
{
ListaSolvenciaTecnica.Add(ot);
Enumerados.ListaCDCI = CalcularTabla(idProvincia);
CalcularHorasTrabajoProfesional();
}
public void EliminarSolvenciaTecnica(SolvenciaTecnica ot)
{
ListaSolvenciaTecnica.Remove(ot);
Enumerados.ListaCDCI = CalcularTabla(idProvincia);
CalcularHorasTrabajoProfesional();
}
public void ActualizarSolvenciaTecnica(SolvenciaTecnica ot)
{
int indice = ListaSolvenciaTecnica.ToList().IndexOf(ot);
ListaSolvenciaTecnica[indice] = ot;
Enumerados.ListaCDCI = CalcularTabla(idProvincia);
CalcularHorasTrabajoProfesional();
}
public List<ConvenioColectivoConcurso> ListaConvenioColectivoCASA(List<conveniocolectivo> lista)
{
List<ConvenioColectivoConcurso> lcc = new List<ConvenioColectivoConcurso>();
foreach (conveniocolectivo enu in lista)
{
lcc.Add(convenioColectivoACASA(enu));
}
return lcc;
}
public ConvenioColectivoConcurso convenioColectivoACASA(conveniocolectivo cc)
{
return new ConvenioColectivoConcurso()
{
idConvenioColectivo = cc.idConvenioColectivo,
idEnumeracion = cc.idEnumeracion,
idProvincia = cc.idProvincia,
SalarioBase = cc.SalarioBase,
OtrosCostes = cc.OtrosCostes,
CosteAnualTrabajador = cc.CosteAnualTrabajador
};
}
public class SolvenciaTecnica
{
public int idSolvencia { get; set; } = 0;
public int idConvenioColectivo { get; set; } = 0;
public string TipoConvenio { get; set; } = "";
public int Cantidad { get; set; } = 0;
public string Descripcion { get; set; } = "";
}
#region parsearObjetos
public List<enumeracionesCASA> ListaEnumeracionCASA(List<enumeraciones> lista)
{
List<enumeracionesCASA> lu = new List<enumeracionesCASA>();
foreach (enumeraciones enu in lista)
{
lu.Add(EnumeracionACASA(enu));
}
return lu;
}
public enumeracionesCASA EnumeracionACASA(enumeraciones enu)
{
return new enumeracionesCASA()
{
idEnumeracion = enu.idEnumeracion,
idGrupoEnumeracion = enu.idGrupoEnumeracion,
Codigo = enu.Codigo,
Descripcion = enu.Descripcion,
ValorAlfabetico1 = enu.ValorAlfabetico1,
ValorAlfabetico2 = enu.ValorAlfabetico2,
ValorNumerico1 = enu.ValorNumerico1
};
}
#endregion
}
}

View File

@@ -0,0 +1,22 @@
using bdHerramientaCACOA.db;
using bdHerramientaCACOA.dbcontext;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bdHerramientaCACOA
{
public class Utilidades
{
internal static string CadenaConexionBD = "";
internal static string CadenaConexionBD_SL = "";
public static List<enumeraciones> devolverListadoOrdenadoEnumeracion(tsHerramientasCACOA bd, int grupo)
{
return bd.enumeraciones.Where(x => x.idGrupoEnumeracion == grupo).OrderBy(x => x.Orden).ToList();
}
}
}

View File

@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Label="Globals">
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="8.0.15" />
<PackageReference Include="MySql.Data" Version="8.4.0" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" />
<PackageReference Include="tsEFCore8" Version="1.0.1" />
<PackageReference Include="tsUtilidades" Version="1.0.1" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class codigospostales
{
public string CodigoPostal { get; set; } = null!;
public string? CodigoMunicipio { get; set; }
public virtual municipios? CodigoMunicipioNavigation { get; set; }
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class comarcas
{
public string CodigoComarca { get; set; } = null!;
public string CodigoProvincia { get; set; } = null!;
public string? Nombre { get; set; }
public virtual ICollection<municipios> municipios { get; set; } = new List<municipios>();
}

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class conveniocolectivo
{
public int idConvenioColectivo { get; set; }
public int idEnumeracion { get; set; }
public string? idProvincia { get; set; }
public double? SalarioBase { get; set; }
public double? OtrosCostes { get; set; }
public double CosteAnualTrabajador { get; set; }
public virtual enumeraciones idEnumeracionNavigation { get; set; } = null!;
public virtual provincias? idProvinciaNavigation { get; set; }
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class costedespachoprofesional
{
public int idCosteDespachoProfesional { get; set; }
public int numTrabajadores { get; set; }
public double HorasProduccionAnuales { get; set; }
public double CosteMinimoPersonal { get; set; }
public double CosteMaxPersonal { get; set; }
public double CosteDirectoMedio { get; set; }
public double CostesDirectos { get; set; }
public double CostesIndirectos { get; set; }
public double TotalDespachoProfesional { get; set; }
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class costedespachoprofesionalunused
{
public int idCosteDespachoProfesional { get; set; }
public int numTrabajadores { get; set; }
public double HorasProduccionAnuales { get; set; }
public double CosteMinimoPersonal { get; set; }
public double CosteMaxPersonal { get; set; }
public double CosteDirectoMedio { get; set; }
public double CostesDirectos { get; set; }
public double CostesIndirectos { get; set; }
public double TotalDespachoProfesional { get; set; }
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class costesdirectos
{
public int idcostesdirectos { get; set; }
public int TotalTrabajadores { get; set; }
public int Arquitectos { get; set; }
public int ArquitectosTecnicos { get; set; }
public int Delineantes { get; set; }
public double CosteSalarial { get; set; }
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class documentacion
{
public int iddocumentacion { get; set; }
public string? Descripcion { get; set; }
public double? CoeficienteHoras { get; set; }
public bool Checkeable { get; set; }
public virtual ICollection<tipoproyecto_documentacion> tipoproyecto_documentacion { get; set; } = new List<tipoproyecto_documentacion>();
}

View File

@@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class enumeraciones
{
public int idEnumeracion { get; set; }
public int? idGrupoEnumeracion { get; set; }
public string Codigo { get; set; } = null!;
public string Descripcion { get; set; } = null!;
public string? ValorAlfabetico1 { get; set; }
public string? ValorAlfabetico2 { get; set; }
public double? ValorNumerico1 { get; set; }
public double? ValorNumerico2 { get; set; }
public string? ValorAlfabetico3 { get; set; }
public string? ValorAlfabetico4 { get; set; }
public string? ValorAlfabeticoLargo { get; set; }
public DateTime? Fecha1 { get; set; }
public DateTime? Fecha2 { get; set; }
public int? Orden { get; set; }
public bool Oculto { get; set; }
public virtual ICollection<conveniocolectivo> conveniocolectivo { get; set; } = new List<conveniocolectivo>();
public virtual ICollection<factorescorreccion> factorescorreccion { get; set; } = new List<factorescorreccion>();
public virtual ICollection<ficheros> ficheros { get; set; } = new List<ficheros>();
public virtual gruposenumeraciones? idGrupoEnumeracionNavigation { get; set; }
public virtual ICollection<simulaciones> simulaciones { get; set; } = new List<simulaciones>();
public virtual ICollection<tipologias> tipologias { get; set; } = new List<tipologias>();
public virtual ICollection<tipoproyectos> tipoproyectos { get; set; } = new List<tipoproyectos>();
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class factorescorreccion
{
public int idFactorCorreccion { get; set; }
public int idEnumeracion { get; set; }
public string Descripcion { get; set; } = null!;
public double Coeficiente { get; set; }
public virtual enumeraciones idEnumeracionNavigation { get; set; } = null!;
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class ficheros
{
public int idFichero { get; set; }
public string? Descripcion { get; set; }
public DateTime? FechaCreacion { get; set; }
public int? idTipo { get; set; }
public string? Observaciones { get; set; }
public byte[]? Fichero { get; set; }
public string? NombreFichero { get; set; }
public string? Codigo { get; set; }
public virtual enumeraciones? idTipoNavigation { get; set; }
public virtual ICollection<simulaciones> simulaciones { get; set; } = new List<simulaciones>();
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class gruposenumeraciones
{
public int idGrupoEnumeracion { get; set; }
public string Grupo { get; set; } = null!;
public string? Descripcion { get; set; }
public bool? Oculto { get; set; }
public virtual ICollection<enumeraciones> enumeraciones { get; set; } = new List<enumeraciones>();
}

View File

@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class municipios
{
public string CodigoMunicipio { get; set; } = null!;
public string? CodigoComarca { get; set; }
public string? CodigoProvincia { get; set; }
public string? Nombre { get; set; }
public string? DC { get; set; }
public virtual comarcas? CodigoComarcaNavigation { get; set; }
public virtual provincias? CodigoProvinciaNavigation { get; set; }
public virtual ICollection<codigospostales> codigospostales { get; set; } = new List<codigospostales>();
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class provincias
{
public string CodigoProvincia { get; set; } = null!;
public string? Nombre { get; set; }
public virtual ICollection<conveniocolectivo> conveniocolectivo { get; set; } = new List<conveniocolectivo>();
public virtual ICollection<municipios> municipios { get; set; } = new List<municipios>();
}

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class simulaciones
{
public int idSimulacion { get; set; }
public int idCodigo { get; set; }
public string Descripcion { get; set; } = null!;
public int idTipoSimulacion { get; set; }
public int idFicheroJSON { get; set; }
public DateTime FechaCreacion { get; set; }
public DateTime? FechaModificacion { get; set; }
public bool Ocultar { get; set; }
public double? CostesDirectos { get; set; }
public double? CostesIndirectos { get; set; }
public double? CostesVariables { get; set; }
public virtual usuarios idCodigoNavigation { get; set; } = null!;
public virtual ficheros idFicheroJSONNavigation { get; set; } = null!;
public virtual enumeraciones idTipoSimulacionNavigation { get; set; } = null!;
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class tipologias
{
public int idtipologia { get; set; }
public int idGrupoTip { get; set; }
public string Descripcion { get; set; } = null!;
public double CoeficienteUso { get; set; }
public virtual enumeraciones idGrupoTipNavigation { get; set; } = null!;
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class tipoproyecto_documentacion
{
public int idtipoproyecto_documentacion { get; set; }
public int? idtipoproyecto { get; set; }
public int? iddocumentacion { get; set; }
public bool? esMinima { get; set; }
public bool? esOpcional { get; set; }
public bool? esNecesario { get; set; }
public int orden { get; set; }
public virtual documentacion? iddocumentacionNavigation { get; set; }
public virtual tipoproyectos? idtipoproyectoNavigation { get; set; }
}

View File

@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
/// <summary>
///
/// </summary>
public partial class tipoproyectos
{
public int idtipoproyectos { get; set; }
public int idTipoDocumento { get; set; }
public string? Descripcion { get; set; }
public string? Abreviatura { get; set; }
public virtual enumeraciones idTipoDocumentoNavigation { get; set; } = null!;
public virtual ICollection<tipoproyecto_documentacion> tipoproyecto_documentacion { get; set; } = new List<tipoproyecto_documentacion>();
}

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class usuarios
{
public int idUsuario { get; set; }
public int Codigo { get; set; }
public string Contrasena { get; set; } = null!;
public DateTime FechaCreacion { get; set; }
public DateTime FechaUltimoAcceso { get; set; }
public virtual ICollection<simulaciones> simulaciones { get; set; } = new List<simulaciones>();
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
namespace bdHerramientaCACOA.db;
public partial class v_tipoproyecto_documentacion
{
public int idtipoproyecto_documentacion { get; set; }
public int? idtipoproyecto { get; set; }
public string? tipoproyecto { get; set; }
public int? iddocumentacion { get; set; }
public string? documentacion { get; set; }
public bool? esMinima { get; set; }
public bool? esOpcional { get; set; }
public bool? esNecesario { get; set; }
public int orden { get; set; }
}

View File

@@ -0,0 +1,356 @@
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
using bdHerramientaCACOA.db;
namespace bdHerramientaCACOA.dbcontext;
public partial class herramientascacoaContext : DbContext
{
public herramientascacoaContext(DbContextOptions<herramientascacoaContext> options)
: base(options)
{
}
public virtual DbSet<codigospostales> codigospostales { get; set; }
public virtual DbSet<comarcas> comarcas { get; set; }
public virtual DbSet<conveniocolectivo> conveniocolectivo { get; set; }
public virtual DbSet<costedespachoprofesionalunused> costedespachoprofesionalunused { get; set; }
public virtual DbSet<costesdirectos> costesdirectos { get; set; }
public virtual DbSet<documentacion> documentacion { get; set; }
public virtual DbSet<enumeraciones> enumeraciones { get; set; }
public virtual DbSet<factorescorreccion> factorescorreccion { get; set; }
public virtual DbSet<ficheros> ficheros { get; set; }
public virtual DbSet<gruposenumeraciones> gruposenumeraciones { get; set; }
public virtual DbSet<municipios> municipios { get; set; }
public virtual DbSet<provincias> provincias { get; set; }
public virtual DbSet<simulaciones> simulaciones { get; set; }
public virtual DbSet<tipologias> tipologias { get; set; }
public virtual DbSet<tipoproyecto_documentacion> tipoproyecto_documentacion { get; set; }
public virtual DbSet<tipoproyectos> tipoproyectos { get; set; }
public virtual DbSet<usuarios> usuarios { get; set; }
public virtual DbSet<v_tipoproyecto_documentacion> v_tipoproyecto_documentacion { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.UseCollation("utf8_general_ci")
.HasCharSet("utf8");
modelBuilder.Entity<codigospostales>(entity =>
{
entity.HasKey(e => e.CodigoPostal).HasName("PRIMARY");
entity.HasIndex(e => e.CodigoMunicipio, "IX_FK_codigospostales_municipios");
entity.Property(e => e.CodigoPostal).HasMaxLength(10);
entity.Property(e => e.CodigoMunicipio).HasMaxLength(10);
entity.HasOne(d => d.CodigoMunicipioNavigation).WithMany(p => p.codigospostales)
.HasForeignKey(d => d.CodigoMunicipio)
.HasConstraintName("FK_codigospostales_municipios");
});
modelBuilder.Entity<comarcas>(entity =>
{
entity.HasKey(e => e.CodigoComarca).HasName("PRIMARY");
entity.Property(e => e.CodigoComarca).HasMaxLength(6);
entity.Property(e => e.CodigoProvincia).HasMaxLength(2);
entity.Property(e => e.Nombre).HasMaxLength(80);
});
modelBuilder.Entity<conveniocolectivo>(entity =>
{
entity.HasKey(e => e.idConvenioColectivo).HasName("PRIMARY");
entity.HasIndex(e => e.idEnumeracion, "convenio_enumeraciones_idx");
entity.HasIndex(e => e.idProvincia, "convenio_municipios_idx");
entity.Property(e => e.idConvenioColectivo).HasColumnType("int(11)");
entity.Property(e => e.idEnumeracion).HasColumnType("int(11)");
entity.Property(e => e.idProvincia).HasMaxLength(10);
entity.HasOne(d => d.idEnumeracionNavigation).WithMany(p => p.conveniocolectivo)
.HasForeignKey(d => d.idEnumeracion)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("convenio_enumeraciones");
entity.HasOne(d => d.idProvinciaNavigation).WithMany(p => p.conveniocolectivo)
.HasForeignKey(d => d.idProvincia)
.HasConstraintName("convenio_provincias");
});
modelBuilder.Entity<costedespachoprofesionalunused>(entity =>
{
entity.HasKey(e => e.idCosteDespachoProfesional).HasName("PRIMARY");
entity.Property(e => e.idCosteDespachoProfesional).HasColumnType("int(11)");
entity.Property(e => e.numTrabajadores).HasColumnType("int(11)");
});
modelBuilder.Entity<costesdirectos>(entity =>
{
entity.HasKey(e => e.idcostesdirectos).HasName("PRIMARY");
entity.Property(e => e.idcostesdirectos).HasColumnType("int(11)");
entity.Property(e => e.Arquitectos).HasColumnType("int(11)");
entity.Property(e => e.ArquitectosTecnicos).HasColumnType("int(11)");
entity.Property(e => e.Delineantes).HasColumnType("int(11)");
entity.Property(e => e.TotalTrabajadores).HasColumnType("int(11)");
});
modelBuilder.Entity<documentacion>(entity =>
{
entity.HasKey(e => e.iddocumentacion).HasName("PRIMARY");
entity.Property(e => e.iddocumentacion).HasColumnType("int(11)");
entity.Property(e => e.Descripcion).HasMaxLength(250);
});
modelBuilder.Entity<enumeraciones>(entity =>
{
entity.HasKey(e => e.idEnumeracion).HasName("PRIMARY");
entity.HasIndex(e => e.Codigo, "Codigo_UNIQUE").IsUnique();
entity.HasIndex(e => e.idGrupoEnumeracion, "IX_FK_enumeraciones_gruposenumeracion");
entity.HasIndex(e => e.idEnumeracion, "idEnumeracion").IsUnique();
entity.Property(e => e.idEnumeracion).HasColumnType("int(11)");
entity.Property(e => e.Codigo).HasMaxLength(40);
entity.Property(e => e.Descripcion).HasMaxLength(200);
entity.Property(e => e.Fecha1).HasColumnType("datetime");
entity.Property(e => e.Fecha2).HasColumnType("datetime");
entity.Property(e => e.Orden).HasColumnType("int(11)");
entity.Property(e => e.ValorAlfabetico1).HasMaxLength(40);
entity.Property(e => e.ValorAlfabetico2).HasMaxLength(40);
entity.Property(e => e.ValorAlfabetico3).HasMaxLength(40);
entity.Property(e => e.ValorAlfabetico4).HasMaxLength(40);
entity.Property(e => e.ValorAlfabeticoLargo).HasMaxLength(255);
entity.Property(e => e.idGrupoEnumeracion).HasColumnType("int(11)");
entity.HasOne(d => d.idGrupoEnumeracionNavigation).WithMany(p => p.enumeraciones)
.HasForeignKey(d => d.idGrupoEnumeracion)
.HasConstraintName("FK_enumeraciones_gruposenumeracion");
});
modelBuilder.Entity<factorescorreccion>(entity =>
{
entity.HasKey(e => e.idFactorCorreccion).HasName("PRIMARY");
entity.HasIndex(e => e.idEnumeracion, "factoresEnumeracion_idx");
entity.Property(e => e.idFactorCorreccion).HasColumnType("int(11)");
entity.Property(e => e.Descripcion).HasMaxLength(45);
entity.Property(e => e.idEnumeracion).HasColumnType("int(11)");
entity.HasOne(d => d.idEnumeracionNavigation).WithMany(p => p.factorescorreccion)
.HasForeignKey(d => d.idEnumeracion)
.HasConstraintName("factoresEnumeracion");
});
modelBuilder.Entity<ficheros>(entity =>
{
entity.HasKey(e => e.idFichero).HasName("PRIMARY");
entity.HasIndex(e => e.idTipo, "IX_FK_fichero_tipo");
entity.HasIndex(e => e.idFichero, "idFichero").IsUnique();
entity.Property(e => e.idFichero).HasColumnType("int(11)");
entity.Property(e => e.Codigo).HasMaxLength(40);
entity.Property(e => e.Descripcion).HasMaxLength(80);
entity.Property(e => e.FechaCreacion).HasColumnType("datetime");
entity.Property(e => e.NombreFichero).HasMaxLength(100);
entity.Property(e => e.Observaciones).HasMaxLength(255);
entity.Property(e => e.idTipo).HasColumnType("int(11)");
entity.HasOne(d => d.idTipoNavigation).WithMany(p => p.ficheros)
.HasForeignKey(d => d.idTipo)
.HasConstraintName("FK_fichero_tipo");
});
modelBuilder.Entity<gruposenumeraciones>(entity =>
{
entity.HasKey(e => e.idGrupoEnumeracion).HasName("PRIMARY");
entity.HasIndex(e => e.idGrupoEnumeracion, "idGrupoEnumeracion").IsUnique();
entity.Property(e => e.idGrupoEnumeracion).HasColumnType("int(11)");
entity.Property(e => e.Descripcion).HasMaxLength(60);
entity.Property(e => e.Grupo).HasMaxLength(20);
});
modelBuilder.Entity<municipios>(entity =>
{
entity.HasKey(e => e.CodigoMunicipio).HasName("PRIMARY");
entity.HasIndex(e => e.CodigoComarca, "IX_FK_municipios_comarcas");
entity.HasIndex(e => e.CodigoProvincia, "IX_FK_municipios_provincias");
entity.Property(e => e.CodigoMunicipio).HasMaxLength(10);
entity.Property(e => e.CodigoComarca).HasMaxLength(6);
entity.Property(e => e.CodigoProvincia).HasMaxLength(2);
entity.Property(e => e.DC).HasMaxLength(2);
entity.Property(e => e.Nombre).HasMaxLength(80);
entity.HasOne(d => d.CodigoComarcaNavigation).WithMany(p => p.municipios)
.HasForeignKey(d => d.CodigoComarca)
.HasConstraintName("FK_municipios_comarcas");
entity.HasOne(d => d.CodigoProvinciaNavigation).WithMany(p => p.municipios)
.HasForeignKey(d => d.CodigoProvincia)
.HasConstraintName("FK_municipios_provincias");
});
modelBuilder.Entity<provincias>(entity =>
{
entity.HasKey(e => e.CodigoProvincia).HasName("PRIMARY");
entity.Property(e => e.CodigoProvincia).HasMaxLength(2);
entity.Property(e => e.Nombre).HasMaxLength(80);
});
modelBuilder.Entity<simulaciones>(entity =>
{
entity.HasKey(e => e.idSimulacion).HasName("PRIMARY");
entity.UseCollation("utf8_bin");
entity.HasIndex(e => e.idCodigo, "simulacionCodigo_idx");
entity.HasIndex(e => e.idFicheroJSON, "simulacionFichero_idx");
entity.HasIndex(e => e.idTipoSimulacion, "simulacionTipo_idx");
entity.Property(e => e.idSimulacion).HasColumnType("int(11)");
entity.Property(e => e.Descripcion).HasMaxLength(150);
entity.Property(e => e.FechaCreacion).HasColumnType("datetime");
entity.Property(e => e.FechaModificacion).HasColumnType("datetime");
entity.Property(e => e.idCodigo).HasColumnType("int(11)");
entity.Property(e => e.idFicheroJSON).HasColumnType("int(11)");
entity.Property(e => e.idTipoSimulacion).HasColumnType("int(11)");
entity.HasOne(d => d.idCodigoNavigation).WithMany(p => p.simulaciones)
.HasForeignKey(d => d.idCodigo)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("simulacionCodigo");
entity.HasOne(d => d.idFicheroJSONNavigation).WithMany(p => p.simulaciones)
.HasForeignKey(d => d.idFicheroJSON)
.HasConstraintName("simulacionFichero");
entity.HasOne(d => d.idTipoSimulacionNavigation).WithMany(p => p.simulaciones)
.HasForeignKey(d => d.idTipoSimulacion)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("simulacionTipo");
});
modelBuilder.Entity<tipologias>(entity =>
{
entity.HasKey(e => e.idtipologia).HasName("PRIMARY");
entity.HasIndex(e => e.idGrupoTip, "enumeraciones_tipologia_idx");
entity.Property(e => e.idtipologia).HasColumnType("int(11)");
entity.Property(e => e.Descripcion).HasMaxLength(100);
entity.Property(e => e.idGrupoTip).HasColumnType("int(11)");
entity.HasOne(d => d.idGrupoTipNavigation).WithMany(p => p.tipologias)
.HasForeignKey(d => d.idGrupoTip)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("enumeraciones_tipologia");
});
modelBuilder.Entity<tipoproyecto_documentacion>(entity =>
{
entity.HasKey(e => e.idtipoproyecto_documentacion).HasName("PRIMARY");
entity.HasIndex(e => e.iddocumentacion, "FK_iddocumentacion_documentacion_idx");
entity.HasIndex(e => e.idtipoproyecto, "FK_idtipoproyecto_tipoproyecto_idx");
entity.Property(e => e.idtipoproyecto_documentacion).HasColumnType("int(11)");
entity.Property(e => e.iddocumentacion).HasColumnType("int(11)");
entity.Property(e => e.idtipoproyecto).HasColumnType("int(11)");
entity.Property(e => e.orden).HasColumnType("int(11)");
entity.HasOne(d => d.iddocumentacionNavigation).WithMany(p => p.tipoproyecto_documentacion)
.HasForeignKey(d => d.iddocumentacion)
.HasConstraintName("FK_iddocumentacion_documentacion");
entity.HasOne(d => d.idtipoproyectoNavigation).WithMany(p => p.tipoproyecto_documentacion)
.HasForeignKey(d => d.idtipoproyecto)
.HasConstraintName("FK_idtipoproyecto_tipoproyecto");
});
modelBuilder.Entity<tipoproyectos>(entity =>
{
entity.HasKey(e => e.idtipoproyectos).HasName("PRIMARY");
entity.ToTable(tb => tb.HasComment(" "));
entity.HasIndex(e => e.idTipoDocumento, "FK_tipoproyectos_enumeraciones_idx");
entity.Property(e => e.idtipoproyectos).HasColumnType("int(11)");
entity.Property(e => e.Abreviatura).HasMaxLength(10);
entity.Property(e => e.Descripcion).HasMaxLength(200);
entity.Property(e => e.idTipoDocumento).HasColumnType("int(11)");
entity.HasOne(d => d.idTipoDocumentoNavigation).WithMany(p => p.tipoproyectos)
.HasForeignKey(d => d.idTipoDocumento)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_tipoproyectos_enumeraciones");
});
modelBuilder.Entity<usuarios>(entity =>
{
entity.HasKey(e => e.idUsuario).HasName("PRIMARY");
entity.Property(e => e.idUsuario).HasColumnType("int(11)");
entity.Property(e => e.Codigo).HasColumnType("int(11)");
entity.Property(e => e.Contrasena).HasMaxLength(45);
entity.Property(e => e.FechaCreacion).HasColumnType("datetime");
entity.Property(e => e.FechaUltimoAcceso).HasColumnType("datetime");
});
modelBuilder.Entity<v_tipoproyecto_documentacion>(entity =>
{
entity
.HasNoKey()
.ToView("v_tipoproyecto_documentacion");
entity.Property(e => e.documentacion).HasMaxLength(250);
entity.Property(e => e.iddocumentacion).HasColumnType("int(11)");
entity.Property(e => e.idtipoproyecto).HasColumnType("int(11)");
entity.Property(e => e.idtipoproyecto_documentacion).HasColumnType("int(11)");
entity.Property(e => e.orden).HasColumnType("int(11)");
entity.Property(e => e.tipoproyecto).HasMaxLength(200);
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

View File

@@ -0,0 +1,53 @@
using Microsoft.EntityFrameworkCore;
namespace bdHerramientaCACOA.dbcontext
{
public class tsHerramientasCACOA:bdHerramientaCACOA.dbcontext.herramientascacoaContext
{
public static bool Cargado = false;
private static String? _Ip = null;
public string? ip
{
get
{
return _Ip;
}
set
{
_Ip = value;
}
}
public string Aplicaciones { get; private set; }
private static string? ConexionPorDefecto = null;
public static void EstableceCBD(string WriteConnection, string ReadOnlyConnection, bool soloLectura = false)
{
Utilidades.CadenaConexionBD = soloLectura ? ReadOnlyConnection : WriteConnection;
Utilidades.CadenaConexionBD_SL = ReadOnlyConnection;
}
public static tsHerramientasCACOA NuevoContexto(string NombreConexion = "", bool Lazy = true, bool SoloLectura = false, bool ConEventoSavingChanges = false, string aplicaciones = "")
{
string? cnx = Utilidades.CadenaConexionBD;
if (SoloLectura) cnx = Utilidades.CadenaConexionBD_SL;
var ob = new DbContextOptionsBuilder<herramientascacoaContext>();
// ob.UseLoggerFactory(_myLoggerFactory);
// ob.UseInternalServiceProvider(<EnumeracionesService>)
ob.UseMySql(cnx, Microsoft.EntityFrameworkCore.ServerVersion.Parse("8.2.0-mysql"));
if (Lazy) ob.UseLazyLoadingProxies();
if (SoloLectura) ob.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
var Opciones = ob.Options;
tsHerramientasCACOA bd = new tsHerramientasCACOA(Opciones);
bd.Aplicaciones = aplicaciones;
return bd;
}
public tsHerramientasCACOA(DbContextOptions<herramientascacoaContext> Opciones) : base(Opciones)
{
if (_Ip == null) { ip = tsEFCore8.bbdd.ObtieneIPMysql(this); }
else { ip = _Ip; }
}
}
}

View File

@@ -0,0 +1,117 @@
{
"CodeGenerationMode": 4,
"ContextClassName": "herramientascacoaContext",
"ContextNamespace": null,
"FilterSchemas": false,
"IncludeConnectionString": false,
"ModelNamespace": null,
"OutputContextPath": "dbcontext",
"OutputPath": "db",
"PreserveCasingWithRegex": true,
"ProjectRootNamespace": "bdHerramientaCACOA",
"Schemas": null,
"SelectedHandlebarsLanguage": 2,
"SelectedToBeGenerated": 0,
"T4TemplatePath": null,
"Tables": [
{
"Name": "codigospostales",
"ObjectType": 0
},
{
"Name": "comarcas",
"ObjectType": 0
},
{
"Name": "conveniocolectivo",
"ObjectType": 0
},
{
"Name": "costedespachoprofesionalunused",
"ObjectType": 0
},
{
"Name": "costesdirectos",
"ObjectType": 0
},
{
"Name": "documentacion",
"ObjectType": 0
},
{
"Name": "enumeraciones",
"ObjectType": 0
},
{
"Name": "factorescorreccion",
"ObjectType": 0
},
{
"Name": "ficheros",
"ObjectType": 0
},
{
"Name": "gruposenumeraciones",
"ObjectType": 0
},
{
"Name": "municipios",
"ObjectType": 0
},
{
"Name": "provincias",
"ObjectType": 0
},
{
"Name": "simulaciones",
"ObjectType": 0
},
{
"Name": "tipologias",
"ObjectType": 0
},
{
"Name": "tipoproyecto_documentacion",
"ObjectType": 0
},
{
"Name": "tipoproyectos",
"ObjectType": 0
},
{
"Name": "usuarios",
"ObjectType": 0
},
{
"Name": "v_tipoproyecto_documentacion",
"ObjectType": 3
}
],
"UiHint": null,
"UncountableWords": null,
"UseAsyncStoredProcedureCalls": true,
"UseBoolPropertiesWithoutDefaultSql": true,
"UseDatabaseNames": true,
"UseDatabaseNamesForRoutines": true,
"UseDateOnlyTimeOnly": false,
"UseDbContextSplitting": false,
"UseDecimalDataAnnotationForSprocResult": true,
"UseFluentApiOnly": true,
"UseHandleBars": false,
"UseHierarchyId": false,
"UseInflector": false,
"UseInternalAccessModifiersForSprocsAndFunctions": false,
"UseLegacyPluralizer": false,
"UseManyToManyEntity": false,
"UseNoDefaultConstructor": false,
"UseNoNavigations": false,
"UseNoObjectFilter": false,
"UseNodaTime": false,
"UseNullableReferences": true,
"UsePrefixNavigationNaming": false,
"UseSchemaFolders": false,
"UseSchemaNamespaces": false,
"UseSpatial": false,
"UseT4": true,
"UseT4Split": false
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
namespace bdHerramientaCACOA.extensiones
{
public static class DoubleExtensions
{
public static double DosDecimales(this double value)
{
return Math.Round(value, 2, MidpointRounding.AwayFromZero);
}
}
}

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bdHerramientaCACOA.extensiones_string
{
public static class StringExtensions
{
public static string MilesYDecimales(this double str)
{
return str.ToString("#,0.00", System.Globalization.CultureInfo.GetCultureInfo("es-ES"));
}
public static string MilesYDecimales(this double? str)
{
return str?.ToString("#,0.00", System.Globalization.CultureInfo.GetCultureInfo("es-ES"));
}
}
}