public CalculoInfonavit calcularInfonavit(Empleado_Infonavit infonavit) { //Obtener el contrato relacionado al credito Empleado_Contrato itemContrato = new Empleado_Contrato(); using (var context = new RHEntities()) { itemContrato = context.Empleado_Contrato.FirstOrDefault(x => x.IdContrato == infonavit.IdEmpleadoContrato); } CalculoInfonavit calculo = new CalculoInfonavit(); calculo.FechaInicio = infonavit.FechaInicio; calculo.IdEmpleadoContrato = infonavit.IdEmpleadoContrato; calculo.IdInfonavit = infonavit.Id; calculo.NumCredito = infonavit.NumCredito; calculo.Salario = infonavit.Salario; if (itemContrato != null) {//si el contrato tiene nuevo sdi, tomará el valor de ese nuevo sdi calculo.Salario = itemContrato.SDI; } calculo.FactorDescuento = infonavit.FactorDescuento; calculo.FechaSuspension = infonavit.FechaSuspension; calculo.Status = infonavit.Status; calculo.TipoCredito = infonavit.TipoCredito; if (calculo.FechaInicio < DateTime.Today) { calculo.FechaAplicada = DateTime.Today; } else { calculo.FechaAplicada = calculo.FechaInicio; } var numBimestre = Utils.GetBimestre(calculo.FechaAplicada.Value.Month); calculo.DiasBimestre = Utils.GetDiasDelBimestre(calculo.FechaAplicada.Value.Year, numBimestre); decimal salarioCalculo = 0; var zonaSalario = GetZonaSalario(); switch (infonavit.TipoCredito) { case 1: //Cuota Fijam calculo.DescuentoBimestral = calcularCuotaFija(calculo.FactorDescuento); calculo.DescuentoDiario = calculo.DescuentoBimestral / calculo.DiasBimestre; calculo.TipoCredito = infonavit.TipoCredito; break; case 2: // Porcentaje//tomar el sdi del contrato calculo.DescuentoDiario = calcularPorcentaje(calculo.FactorDescuento, calculo.Salario.Value); calculo.DescuentoBimestral = (calculo.DescuentoDiario * calculo.DiasBimestre) + 15; calculo.TipoCredito = infonavit.TipoCredito; break; case 3: //VSM if (infonavit.UsarUMA) { salarioCalculo = zonaSalario.UMA; } else { salarioCalculo = zonaSalario.SMG; } //calculo.Salario = sm != calculo.Salario ? sm : calculo.Salario; calculo.Salario = salarioCalculo != calculo.Salario ? salarioCalculo : calculo.Salario; calculo.DescuentoBimestral = calcularVSM(calculo.FactorDescuento, calculo.Salario.Value); calculo.DescuentoDiario = calculo.DescuentoBimestral / calculo.DiasBimestre; calculo.TipoCredito = infonavit.TipoCredito; break; case 4: //VSM if (infonavit.UsarUMA) { salarioCalculo = zonaSalario.UMA; } else { salarioCalculo = zonaSalario.SMG; } //calculo.Salario = sm != calculo.Salario ? sm : calculo.Salario; calculo.Salario = salarioCalculo != calculo.Salario ? salarioCalculo : calculo.Salario; calculo.DescuentoBimestral = calcularVSM(calculo.FactorDescuento, calculo.Salario.Value); calculo.DescuentoDiario = calculo.DescuentoBimestral / calculo.DiasBimestre; calculo.TipoCredito = infonavit.TipoCredito; break; default: break; } var iniBim = new DateTime(calculo.FechaAplicada.Value.Year, (numBimestre * 2) - 1, 1); var finBim = new DateTime(calculo.FechaAplicada.Value.Year, (numBimestre * 2), 1); calculo.BimestreAplicado = iniBim.ToString("MMMM") + " - " + finBim.ToString("MMMM"); calculo.DescuentoBimestral = calculo.DescuentoBimestral; //Math.Round(calculo.DescuentoBimestral, 2); calculo.DescuentoDiario = calculo.DescuentoDiario; //Math.Round(calculo.DescuentoDiario, 2); return(calculo); }
public CalculoInfonavit calcularInfonavit(Empleado_Infonavit infonavit) { CalculoInfonavit calculo = new CalculoInfonavit(); calculo.FechaInicio = infonavit.FechaInicio; calculo.IdEmpleadoContrato = infonavit.IdEmpleadoContrato; calculo.IdInfonavit = infonavit.Id; calculo.NumCredito = infonavit.NumCredito; calculo.Salario = infonavit.Salario; calculo.FactorDescuento = infonavit.FactorDescuento; calculo.FechaSuspension = infonavit.FechaSuspension; calculo.Status = infonavit.Status; calculo.TipoCredito = infonavit.TipoCredito; if (calculo.FechaInicio < DateTime.Today) { calculo.FechaAplicada = DateTime.Today; } else { calculo.FechaAplicada = calculo.FechaInicio; } var numBimestre = Utils.GetBimestre(calculo.FechaAplicada.Value.Month); calculo.DiasBimestre = Utils.GetDiasDelBimestre(calculo.FechaAplicada.Value.Year, numBimestre); decimal salarioCalculo = 0; var zonaSalario = GetZonaSalario(); switch (infonavit.TipoCredito) { case 1: //Cuota Fija calculo.DescuentoBimestral = calcularCuotaFija(calculo.FactorDescuento); calculo.DescuentoDiario = calculo.DescuentoBimestral / calculo.DiasBimestre; calculo.TipoCredito = infonavit.TipoCredito; break; case 2: // Porcentaje calculo.DescuentoDiario = calcularPorcentaje(calculo.FactorDescuento, calculo.Salario.Value); calculo.DescuentoBimestral = (calculo.DescuentoDiario * calculo.DiasBimestre) + 15; calculo.TipoCredito = infonavit.TipoCredito; break; case 3: //VSM if (infonavit.UsarUMA) { salarioCalculo = zonaSalario.UMA; } else { salarioCalculo = zonaSalario.SMG; } //calculo.Salario = sm != calculo.Salario ? sm : calculo.Salario; calculo.Salario = salarioCalculo != calculo.Salario ? salarioCalculo : calculo.Salario; calculo.DescuentoBimestral = calcularVSM(calculo.FactorDescuento, calculo.Salario.Value); calculo.DescuentoDiario = calculo.DescuentoBimestral / calculo.DiasBimestre; calculo.TipoCredito = infonavit.TipoCredito; break; case 4: //VSM if (infonavit.UsarUMA) { salarioCalculo = zonaSalario.UMA; } else { salarioCalculo = zonaSalario.SMG; } //calculo.Salario = sm != calculo.Salario ? sm : calculo.Salario; calculo.Salario = salarioCalculo != calculo.Salario ? salarioCalculo : calculo.Salario; calculo.DescuentoBimestral = calcularVSM(calculo.FactorDescuento, calculo.Salario.Value); calculo.DescuentoDiario = calculo.DescuentoBimestral / calculo.DiasBimestre; calculo.TipoCredito = infonavit.TipoCredito; break; default: break; } var iniBim = new DateTime(calculo.FechaAplicada.Value.Year, (numBimestre * 2) - 1, 1); var finBim = new DateTime(calculo.FechaAplicada.Value.Year, (numBimestre * 2), 1); calculo.BimestreAplicado = iniBim.ToString("MMMM") + " - " + finBim.ToString("MMMM"); calculo.DescuentoBimestral = calculo.DescuentoBimestral; //Math.Round(calculo.DescuentoBimestral, 2); calculo.DescuentoDiario = calculo.DescuentoDiario; //Math.Round(calculo.DescuentoDiario, 2); return(calculo); }