<repo_name>juanlasarte4/DesarrolloDeInterfaces1-EVAL<file_sep>/src/unidad1/practica1/facturacion/UtilidadesCalculoIVA.java
package unidad1.practica1.facturacion;

import java.util.Calendar;
import java.util.List;

public class UtilidadesCalculoIVA {

	// CALCULO 3 MESES ANTERIORES 1 DEL MES AL ACTUAL
	public static double calculoIVATrimestral(List<Factura> listaFacturas, int año, int mes) {
		double IVATrimestral = 0;

		for (var factura : listaFacturas) {
			Calendar fechaActual = new Calendar.Builder().setDate(año, mes, 1).build(),
					fecha3MesesAntes = (Calendar) fechaActual.clone();
			
			fecha3MesesAntes.add(Calendar.MONTH, -3);
			fecha3MesesAntes.add(Calendar.DAY_OF_MONTH, -1);
			
			if (factura.getFecha().before(fechaActual) && factura.getFecha().after(fecha3MesesAntes)) {
				IVATrimestral += UtilidadesFactura.calcularIVAFactura(factura);
			}
		}
		return IVATrimestral;
	}

	// NOTA: FACTURAS ES UNA LISTA QUE PUEDE TENER 0, 1 O VARIAS FACTURAS DE CUALQUIER AÑO
	public static double calculoIVAMesActual(List<Factura> listaFacturas, int año, int mes) {
		double IVAMesActual = 0;

		for (var factura : listaFacturas) {
			Calendar ultimoDiaDelMesAnterior = new Calendar.Builder().setDate(año, mes, 1).build(),
					primerDiaDelMesSiguiente = (Calendar) ultimoDiaDelMesAnterior.clone();
			
			ultimoDiaDelMesAnterior.add(Calendar.DAY_OF_MONTH, -1);
			primerDiaDelMesSiguiente.add(Calendar.MONTH, 1);
			
			if (factura.getFecha().after(ultimoDiaDelMesAnterior)
					&& factura.getFecha().before(primerDiaDelMesSiguiente)) {
				IVAMesActual += UtilidadesFactura.calcularIVAFactura(factura);
			}
		}
		return IVAMesActual;
	}
}<file_sep>/src/unidad1/practica1/gestion/Ejercicio3.java
package unidad1.practica1.gestion;

import java.util.Arrays;
import java.util.Calendar;
import java.util.List;

import unidad1.practica1.facturacion.*;
import unidad1.practica1.facturacion.Producto.IVA;

public class Ejercicio3 {

	public static void main(String[] args) {

		List<Factura> facturas = Arrays.asList(
			new Factura(1,
					Arrays.asList(
						new Producto(.70, "Botellín", IVA.Superreducido),
						new Producto(1, "Tomate", IVA.Normal),
						new Producto(.50, "Regaliz")
					),
					new Calendar.Builder().setDate(2020, Calendar.JANUARY, 5).build()
				),
			new Factura(2,
					Arrays.asList(
						new Producto(1.1, "Maíz", IVA.Normal),
						new Producto(6.25, "Lechuga", IVA.Reducido),
						new Producto(2.67, "Huevos")
					),
					new Calendar.Builder().setDate(2020, Calendar.SEPTEMBER, 17).build()
				),
			new Factura(3, 
					Arrays.asList(
						new Producto(2.5, "Helado", IVA.Normal),
						new Producto(0.59, "Gominolas", IVA.Normal),
						new Producto(2.5, "Guisantes")
					),
					new Calendar.Builder().setDate(2020, Calendar.JUNE, 7).build()
				),
			new Factura(4, 
					Arrays.asList(
							new Producto(5.5, "Hamburguesas", IVA.Reducido),
							new Producto(3.99, "Spaguettis", IVA.Normal),
							new Producto(4.78, "Merluza")
						),
					new Calendar.Builder().setDate(2020, Calendar.MARCH, 15).build()
				),
			new Factura(5,
					Arrays.asList(
							new Producto(5.99, "Patatas", IVA.Reducido),
							new Producto(3.89, "Lentejas"),
							new Producto(2, "Garbanzos", IVA.Superreducido)
						),
					new Calendar.Builder().setDate(2020, Calendar.OCTOBER, 12).build()
				)
			);
		
		for ( var factura : facturas ) {
			System.out.println(factura);
		}
		
		System.out.printf("El IVA Trimestral: %.2f€", UtilidadesCalculoIVA.calculoIVATrimestral(facturas, 2020, Calendar.JANUARY));
		System.out.printf("\nEl IVA Mensual: %.2f€", UtilidadesCalculoIVA.calculoIVAMesActual(facturas, 2020, Calendar.OCTOBER));
	}
}<file_sep>/src/unidad2/practica2/Memento/EjecutarMemento.java
package unidad2.practica2.Memento;

public class EjecutarMemento {
	public static void main(String[] args) {
		// CREAR EL OBJETO ORIGINAL CREADOR
		Originator creador = new Originator("Pedro", "<NAME>");

		// CREAR EL OBJETO GESTOR/VIGILANTE DEL MEMENTO
		Caretaker vigilante = new Caretaker();

		// CREAR EL MEMENTO Y ASOCIARLO AL OBJETO GESTOR
		vigilante.setMemento(creador.createMemento());

		// MOSTRAR LOS DATOS DEL OBJETO
		System.out.println("Nombre completo: [" + creador.getNombre() + " " + creador.getApellidos() + "]");

		// MODIFICAR LOS DATOS DEL OBJETO
		creador.setNombre("María");
		creador.setApellidos("<NAME>");

		// MOSTRAR LOS DATOS DEL OBJETO
		System.out.println("Nombre completo: [" + creador.getNombre() + " " + creador.getApellidos() + "]");

		// RESTAURAR LOS DATOS DEL OBJETO
		creador.setMemento(vigilante.getMemento());

		// MOSTRAR LOS DATOS DEL OBJETO
		System.out.println("Nombre completo: [" + creador.getNombre() + " " + creador.getApellidos() + "]");
	}
}