/// <summary> /// Suma los valores de las casillas cuyas claves de encuentran /// en el array de claves pasado como argumento, y almacena el resultado /// en la casilla con la clave 'casillaResultado' de la página facilitada /// como parámtro. /// </summary> /// <param name="casillasBase">Array con las claves de las casillas a acumular.</param> /// <param name="casillaResultado">Clave de la casilla dónde irá el resultado /// de la suma.</param> /// <param name="modPagina">Página de las casillas.</param> private void AcumulaCasillas(string[] casillasBase, string casillaResultado, IPagina modPagina) { decimal suma = 0; foreach (var clave in casillasBase) { suma += Convert.ToDecimal(modPagina[clave]?.Valor); } if (Convert.ToDecimal(modPagina[casillaResultado]?.Valor) == 0) { modPagina[casillaResultado].Valor = suma; } }
/// <summary> /// En caso de que la declaración sea a devolver realiza las operaciones necesarias. /// </summary> protected override void PreparaDevolucion() { IPagina modPagina1 = RecuperaPagina(1, 0, false) as IPagina; IPagina modPagina3 = RecuperaPagina(3, 0, false) as IPagina; if (modPagina3 == null) { throw new ArgumentException($"Se ha seleccionado devolución ('D') como tipo de declaración y no se ha proporcionado IBAN"); } if ($"{modPagina3["IBAN"].Valor}".Trim() == "") { throw new ArgumentException($"Se ha seleccionado devolución ('D') como tipo de declaración y no se ha proporcionado IBAN"); } modPagina3["DevolucionMarcaSEPA"].Valor = 1; }
/// <summary> /// Actualiza el valor de todos los campos calculados. /// </summary> public override void Calcular() { IPagina modPagina1 = RecuperaPagina(1, 0, false) as IPagina; IPagina modPagina2 = RecuperaPagina(2, 0, false) as IPagina; IPagina modPagina3 = RecuperaPagina(3, 0, true) as IPagina; // Si no existe la crea // Último perido no válido valor 0 (establecemos por defecto el valor 2, no exonerado de 390) if ($"{modPagina1["Periodo"].Valor}" == "4T" || $"{modPagina1["Periodo"].Valor}" == "12") { if ($"{modPagina1["Exonerado390"].Valor}" == "0") { modPagina1["Exonerado390"].Valor = 2; // (1=SI, 2=NO) } } // Me aseguro de informar los tipos necesarios. int[] clavesCuota = new int[] { 3, 6, 9, 21, 24 }; decimal[] tipos = new decimal[] { 4m, 10m, 21m, 1.4m, 5.2m }; for (int k = 0; k < clavesCuota.Length; k++) { string claveCuota = $"{clavesCuota[k]}".PadLeft(2, '0'); string claveTipo = $"{clavesCuota[k] - 1}".PadLeft(2, '0'); if (Convert.ToDecimal(modPagina1[claveCuota]?.Valor) != 0 && Convert.ToDecimal(modPagina1[claveTipo]?.Valor) == 0) { modPagina1[claveTipo].Valor = tipos[k]; } } string[] clavesASumar = null; // Total cuota devengada ( [03] + [06] + [09] + [11] + [13] + [15] + [18] + [21] + [24] + [26] ) clavesASumar = new string[] { "03", "06", "09", "11", "13", "15", "18", "21", "24", "26" }; AcumulaCasillas(clavesASumar, "27", modPagina1); // Total a deducir ( [29] + [31] + [33] + [35] + [37] + [39] + [41] + [42] + [43] + [44] ) clavesASumar = new string[] { "29", "31", "33", "35", "37", "39", "41", "42", "43", "44" }; AcumulaCasillas(clavesASumar, "45", modPagina1); // Resultado régimen general ( [27] - [45] ) if (Convert.ToDecimal(modPagina1["46"]?.Valor) == 0) { modPagina1["46"].Valor = Convert.ToDecimal(modPagina1["27"].Valor) - Convert.ToDecimal(modPagina1["45"].Valor); } // Suma de resultados ( [46] + [58] + [76] ) if (modPagina3["64"] != null && Convert.ToDecimal(modPagina3["64"]?.Valor) == 0) { modPagina3["64"].Valor = Convert.ToDecimal(modPagina1["46"].Valor) + ((modPagina2 == null) ? 0 : Convert.ToDecimal(modPagina2["58"] == null ? 0 : modPagina2["58"].Valor)) + Convert.ToDecimal(modPagina3["76"] == null ? 0 : modPagina3["76"].Valor); } // Atribuible a la Administracion del Estado if (modPagina3["65"] != null && Convert.ToDecimal(modPagina3["65"]?.Valor) == 0) { modPagina3["65"].Valor = 100; } // Atribuible a la Administración del Estado if (Convert.ToDecimal(modPagina3["66"]?.Valor) == 0) { modPagina3["66"].Valor = Math.Round(Convert.ToDecimal(modPagina3["65"].Valor) / 100 * Convert.ToDecimal(modPagina3["64"].Valor), 2); } // Comprobamos si existen cuotas a compensar de periodos anteriores. decimal cuotasACompensar = Convert.ToDecimal(modPagina3["110"].Valor); if (cuotasACompensar > 0) // Existen cuotas a compensar de periodos anteriores, por lo que calculamos que importe se aplicará en este periodo. { decimal resultadoPeriodo = Convert.ToDecimal(modPagina3["66"].Valor) + Convert.ToDecimal(modPagina3["77"].Valor) + Convert.ToDecimal(modPagina3["68"].Valor); if (Convert.ToDecimal(modPagina3["78"]?.Valor) == 0) { if (resultadoPeriodo <= 0) { modPagina3["78"].Valor = 0; } else if (resultadoPeriodo >= cuotasACompensar) { modPagina3["78"].Valor = cuotasACompensar; } else { modPagina3["78"].Valor = resultadoPeriodo; } } } // Cuotas a compensar de periodos previos pendientes para periodos posteriores ([110] - [78]) [87] if (Convert.ToDecimal(modPagina3["87"]?.Valor) == 0) { modPagina3["87"].Valor = Convert.ToDecimal(modPagina3["110"].Valor) - Convert.ToDecimal(modPagina3["78"].Valor); } // Resultado ( [66] + [77] - [78] + [68] ) decimal resultado = Convert.ToDecimal(modPagina3["66"].Valor) + Convert.ToDecimal(modPagina3["77"].Valor) - Convert.ToDecimal(modPagina3["78"].Valor) + Convert.ToDecimal(modPagina3["68"].Valor); if (Convert.ToDecimal(modPagina3["69"]?.Valor) == 0) { modPagina3["69"].Valor = resultado; } // Resultado de la liquidación ( [69] - [70] ) [71] if (Convert.ToDecimal(modPagina3["71"]?.Valor) == 0) { modPagina3["71"].Valor = Convert.ToDecimal(modPagina3["69"].Valor) - Convert.ToDecimal(modPagina3["70"].Valor); } // Verificaciones tipo declaración if ($"{modPagina1["TipoDeclaracion"].Valor}" == "D") { PreparaDevolucion(); } Paginas.Empaquetables.Sort(); // Ordenamos las páginas para evitar problemas indeseados. }
public MenuPaginas(IPagina Principal,IPagina Settings) { principal = Principal; settings = Settings; }