| | | 1 | | using FAU.Entidades; |
| | | 2 | | using FAU.Logica.DTOs; |
| | | 3 | | |
| | | 4 | | namespace FAU.Logica.Calculadores; |
| | | 5 | | |
| | | 6 | | public abstract class CalculadorHaberesBase : ICalculadorHaberes |
| | | 7 | | { |
| | | 8 | | public Task<ResultadoCalculo> CalcularAsync( |
| | | 9 | | RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores) |
| | | 10 | | { |
| | 26 | 11 | | var resultado = new ResultadoCalculo(); |
| | | 12 | | try |
| | | 13 | | { |
| | 26 | 14 | | var (wpara53, wPara10) = CalcularItemsBase(funcionario, insumos, acumuladores, resultado); |
| | 24 | 15 | | AgregarItemsDecreto(funcionario, insumos, acumuladores, resultado); |
| | | 16 | | |
| | 24 | 17 | | if (wPara10 > 0) |
| | 21 | 18 | | CalcularDedicacionIntegral(wPara10, insumos, acumuladores, resultado); |
| | | 19 | | |
| | 24 | 20 | | if (!funcionario.Situacion.AfectaCobro) |
| | 10 | 21 | | foreach (var item in resultado.Items) |
| | 4 | 22 | | item.EsReferencia = true; |
| | | 23 | | |
| | 24 | 24 | | resultado.Estado = resultado.Incidencias.Count > 0 |
| | 24 | 25 | | ? EstadoCalculo.Revisar |
| | 24 | 26 | | : EstadoCalculo.Calculado; |
| | 24 | 27 | | } |
| | 2 | 28 | | catch (Exception ex) |
| | | 29 | | { |
| | 2 | 30 | | resultado.Estado = EstadoCalculo.Error; |
| | 2 | 31 | | resultado.MensajeError = ex.Message; |
| | 2 | 32 | | } |
| | | 33 | | |
| | 26 | 34 | | return Task.FromResult(resultado); |
| | | 35 | | } |
| | | 36 | | |
| | | 37 | | protected abstract (decimal WPara53, decimal WPara10) CalcularItemsBase( |
| | | 38 | | RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado); |
| | | 39 | | |
| | | 40 | | protected virtual void AgregarItemsDecreto( |
| | | 41 | | RelacionLaboral funcionario, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado) |
| | | 42 | | { |
| | 21 | 43 | | int[] codigosDecreto = [38, 39, 41, 154, 225]; |
| | 252 | 44 | | foreach (var cod in codigosDecreto) |
| | | 45 | | { |
| | 105 | 46 | | var rem = insumos.ObtenerRemuneracion(funcionario.GradoId, cod); |
| | 105 | 47 | | if (rem is not null) |
| | 3 | 48 | | AgregarItem(cod, rem.Monto, insumos, acumuladores, resultado); |
| | | 49 | | } |
| | 21 | 50 | | } |
| | | 51 | | |
| | | 52 | | private static void CalcularDedicacionIntegral( |
| | | 53 | | decimal wPara10, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado) |
| | | 54 | | { |
| | 21 | 55 | | AgregarItem(17, wPara10 * 0.10m, insumos, acumuladores, resultado); |
| | 21 | 56 | | } |
| | | 57 | | |
| | | 58 | | protected static void AgregarItem( |
| | | 59 | | int codigo, decimal monto, InsumosPeriodo insumos, Acumuladores acumuladores, ResultadoCalculo resultado) |
| | | 60 | | { |
| | 577 | 61 | | var catalogoItem = insumos.CatalogoItems.FirstOrDefault(c => c.Codigo == codigo); |
| | 96 | 62 | | resultado.Items.Add(new ItemCalculado |
| | 96 | 63 | | { |
| | 96 | 64 | | CodigoConcepto = codigo, |
| | 96 | 65 | | NombreConcepto = catalogoItem?.Nombre ?? $"Concepto {codigo}", |
| | 96 | 66 | | Importe = monto |
| | 96 | 67 | | }); |
| | 96 | 68 | | if (catalogoItem is not null) |
| | 96 | 69 | | acumuladores.AgregarItem(monto, catalogoItem); |
| | 96 | 70 | | } |
| | | 71 | | |
| | | 72 | | protected static int CalcularAniosServicio(RelacionLaboral funcionario, InsumosPeriodo insumos) |
| | | 73 | | { |
| | 21 | 74 | | var fechaPeriodo = new DateTime(insumos.ParametroPeriodo.Anio, insumos.ParametroPeriodo.Mes, 1); |
| | 21 | 75 | | return Math.Max(0, (int)((fechaPeriodo - funcionario.FechaInicio).TotalDays / 365.25)); |
| | | 76 | | } |
| | | 77 | | } |