| | | 1 | | namespace FAU.Logica.Calculadores; |
| | | 2 | | |
| | | 3 | | public class CalculadorFactory : ICalculadorFactory |
| | | 4 | | { |
| | | 5 | | private readonly Dictionary<string, ICalculadorHaberes> _calculadores; |
| | | 6 | | |
| | 10 | 7 | | public CalculadorFactory( |
| | 10 | 8 | | Sit10Calculator sit10, |
| | 10 | 9 | | Sit30Calculator sit30, |
| | 10 | 10 | | Sit32Calculator sit32, |
| | 10 | 11 | | Sit50Calculator sit50, |
| | 10 | 12 | | Sit70Calculator sit70, |
| | 10 | 13 | | SitCadeteCalculator sitCadete) |
| | | 14 | | { |
| | 10 | 15 | | _calculadores = new Dictionary<string, ICalculadorHaberes>(StringComparer.OrdinalIgnoreCase) |
| | 10 | 16 | | { |
| | 10 | 17 | | // Nombres que coinciden con el campo `calculador` en la tabla `situaciones` |
| | 10 | 18 | | [nameof(Sit10Calculator)] = sit10, // SIT01 — Personal Superior en actividad |
| | 10 | 19 | | [nameof(Sit30Calculator)] = sit30, // SIT07 — Personal Subalterno en actividad |
| | 10 | 20 | | [nameof(Sit50Calculator)] = sit50, // SIT16, SIT17 — Reincorporados |
| | 10 | 21 | | |
| | 10 | 22 | | // TODO: la DB usa "CivilCalculator" (SIT19, SIT21) pero implementamos Sit70Calculator. |
| | 10 | 23 | | // Confirmar con FAU cuál es el nombre definitivo antes de conectar al pipeline. |
| | 10 | 24 | | [nameof(Sit70Calculator)] = sit70, |
| | 10 | 25 | | |
| | 10 | 26 | | // TODO: la DB usa "Sit40Calculator" (SIT12, SIT13 — Cadetes) pero implementamos SitCadeteCalculator. |
| | 10 | 27 | | // Confirmar con FAU cuál es el nombre definitivo antes de conectar al pipeline. |
| | 10 | 28 | | [nameof(SitCadeteCalculator)] = sitCadete, |
| | 10 | 29 | | |
| | 10 | 30 | | // TODO: Sit32Calculator no aparece en el seed de situaciones. |
| | 10 | 31 | | // Confirmar con FAU si existe alguna situación que use este calculador. |
| | 10 | 32 | | [nameof(Sit32Calculator)] = sit32, |
| | 10 | 33 | | |
| | 10 | 34 | | // TODO: los siguientes calculadores están en la DB pero aún no implementados: |
| | 10 | 35 | | // "Sit20Calculator" → SIT02 Personal Superior en disponibilidad |
| | 10 | 36 | | // "ReservaCalculator" → SIT05, SIT08 Reservistas |
| | 10 | 37 | | // "AguinaldoCalculator"→ SIT14, SIT15, SIT18, SIT20 Bajas/aguinaldo |
| | 10 | 38 | | // "SubsidioCalculator" → SIT22 Subsidio transitorio |
| | 10 | 39 | | // El factory retorna null para estos y el motor los registrará como Error. |
| | 10 | 40 | | }; |
| | 10 | 41 | | } |
| | | 42 | | |
| | | 43 | | public ICalculadorHaberes? Resolver(string? nombreCalculador) |
| | | 44 | | { |
| | 12 | 45 | | if (string.IsNullOrEmpty(nombreCalculador)) return null; |
| | 8 | 46 | | _calculadores.TryGetValue(nombreCalculador, out var calc); |
| | 8 | 47 | | return calc; |
| | | 48 | | } |
| | | 49 | | } |