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