Logica.LogicaReserva.java Source code

Java tutorial

Introduction

Here is the source code for Logica.LogicaReserva.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica;

import Clases.Cliente;
import Clases.Inmueble;
import Clases.Reserva;
import Conexion.EnvioEmail;
import Persistencia.PersistenciaInmueble;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfFormField;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import Conexion.Hilo;
import java.awt.Desktop;
import java.io.File;

/**
 *
 * @author maria
 */
public class LogicaReserva {
    PersistenciaInmueble BDInmueble = new PersistenciaInmueble();

    public void GenerarReserva(Inmueble inmuebleReservado, Cliente clienteReserva, double montoReserva,
            Date tiempoValidez) throws IOException, DocumentException {
        Reserva nuevaReserva = new Reserva(clienteReserva, inmuebleReservado, tiempoValidez, montoReserva);
        GenerarDocumento(nuevaReserva);
        BDInmueble.guardarReserva(nuevaReserva);
    }

    private void GenerarDocumento(Reserva nuevaReserva) throws IOException, DocumentException {
        //String dirPath = "C:\\";
        String fileName = "Base reserva.pdf";
        HashMap fieldsWithValues = new HashMap();
        ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
        PdfReader reader = new PdfReader(fileName);
        PdfStamper stamper = new PdfStamper(reader, baosPDF);
        AcroFields form = stamper.getAcroFields();
        HashMap fields = (HashMap) form.getFields();
        Set keys = fields.keySet();

        //Metodo que retorna map de datos que queremos obtener de objeto para agregar a PDF    
        fieldsWithValues = crearHashMapReserva(nuevaReserva, keys);

        //Iteracion sobre campos de pdf
        Iterator itr = keys.iterator();
        while (itr.hasNext()) {
            String fieldName = (String) itr.next();
            String fieldValue = fieldsWithValues.get(fieldName) != null ? (String) (fieldsWithValues.get(fieldName))
                    : "";
            form.setField(fieldName, fieldValue);
            form.setFieldProperty(fieldName, "setfflags", PdfFormField.FF_READ_ONLY, null);

        }
        stamper.setFormFlattening(true);
        stamper.close();
        reader.close();

        //Guardando cambios
        String nombre;
        DateFormat fecha = new SimpleDateFormat("yyyy_MM_dd HH_mm_ss");
        nombre = fecha.format(nuevaReserva.getFechaHasta());
        String nombreydir = "Documentos\\Documento Reserva -" + nombre + "-.pdf";
        OutputStream pdf = new FileOutputStream(nombreydir);
        baosPDF.writeTo(pdf);
        pdf.close();

        Hilo h1 = new Hilo("email", nombreydir, nuevaReserva.getCliente().getCorreo());
        h1.start();

        try {
            File archivo = new File(nombreydir);
            Desktop.getDesktop().open(archivo);
        } catch (IOException ex) {
        }
        //EnvioEmail(nombreydir, nuevaReserva.getCliente().getCorreo());
    }

    private HashMap crearHashMapReserva(Reserva reserva, Set keys) {
        HashMap datInmCli = new HashMap();
        Inmueble inmu = reserva.getInmueble();
        Cliente clie = reserva.getCliente();
        DateFormat fecha = new SimpleDateFormat("dd-MM-yyyy");

        //DatosInmueble
        datInmCli.put("ProvinciaInm", inmu.getProvinciaNombre());
        datInmCli.put("LocalidadInm", inmu.getLocalidadNombre());
        datInmCli.put("CP", String.valueOf(inmu.getCp()));
        datInmCli.put("Calle", inmu.getCalle());
        datInmCli.put("Numero", String.valueOf(inmu.getNumero()));
        if (inmu.getBarrio().equals(""))
            datInmCli.put("Barrio", "N/A");
        else
            datInmCli.put("Barrio", inmu.getBarrio());
        if (inmu.getPiso().equals(""))
            datInmCli.put("Piso", "N/A");
        else
            datInmCli.put("Piso", inmu.getPiso());

        if (inmu.getDepto().equals(""))
            datInmCli.put("Departamento", "N/A");
        else
            datInmCli.put("Departamento", inmu.getDepto());

        datInmCli.put("LongFondo", String.valueOf(inmu.getFondo()));
        datInmCli.put("LongFrente", String.valueOf(inmu.getFrente()));
        datInmCli.put("SupTerreno", String.valueOf(inmu.getSupTerreno()));
        datInmCli.put("SupEdificada", String.valueOf(inmu.getSupInmueble()));

        switch (inmu.getOrientacion()) {
        case 0:
            datInmCli.put("Orientacion", "Este");
            break;
        case 1:
            datInmCli.put("Orientacion", "Norte");
            break;
        case 2:
            datInmCli.put("Orientacion", "Noreste");
            break;
        case 3:
            datInmCli.put("Orientacion", "Noroeste");
            break;
        case 4:
            datInmCli.put("Orientacion", "Oeste");
            break;
        case 5:
            datInmCli.put("Orientacion", "Sur");
            break;
        case 6:
            datInmCli.put("Orientacion", "Sureste");
            break;
        case 7:
            datInmCli.put("Orientacion", "Suroeste");
            break;
        }
        if (inmu.getAntiguedad() == -1)
            datInmCli.put("Antiguedad", "N/A");
        else
            datInmCli.put("Antiguedad", String.valueOf(2016 - inmu.getAntiguedad()));

        switch (inmu.getTipoInmueble()) {
        case 0:
            datInmCli.put("TipoInm", "Casa");
            break;
        case 1:
            datInmCli.put("TipoInm", "Departamento");
            break;
        case 2:
            datInmCli.put("TipoInm", "Galpon");
            break;
        case 3:
            datInmCli.put("TipoInm", "Local-Oficina");
            break;
        case 4:
            datInmCli.put("TipoInm", "Quinta");
            break;
        case 5:
            datInmCli.put("TipoInm", "Terreno");
            break;
        }

        datInmCli.put("Dormitorios", String.valueOf(inmu.getDormitorio()));
        datInmCli.put("Banios", String.valueOf(inmu.getBano()));

        if (inmu.getGarage())
            datInmCli.put("Garage", "Si");
        else
            datInmCli.put("Garage", "No");

        if (inmu.getPatio())
            datInmCli.put("Patio", "Si");
        else
            datInmCli.put("Patio", "No");

        if (inmu.getGn())
            datInmCli.put("GN", "Si");
        else
            datInmCli.put("GN", "No");

        if (inmu.getAc())
            datInmCli.put("AC", "Si");
        else
            datInmCli.put("AC", "No");

        if (inmu.getTelefono())
            datInmCli.put("TelefonoInm", "Si");
        else
            datInmCli.put("TelefonoInm", "No");

        if (inmu.getLavadero())
            datInmCli.put("Lavadero", "Si");
        else
            datInmCli.put("Lavadero", "No");

        if (inmu.getPavimento())
            datInmCli.put("Pavimento", "Si");
        else
            datInmCli.put("Pavimento", "No");

        datInmCli.put("Observaciones", inmu.getObservaciones());
        datInmCli.put("PrecioInmueble", String.valueOf(String.format("%.2f", inmu.getPrecio()).replace(',', '.')));

        //DatosCliente
        datInmCli.put("Nombre", clie.getNombre());
        datInmCli.put("Apellido", clie.getApellido());

        switch (clie.getTipoDoc()) {
        case 0:
            datInmCli.put("TipoDoc", "DNI");
            break;
        case 1:
            datInmCli.put("TipoDoc", "Pasaporte");
            break;
        case 2:
            datInmCli.put("TipoDoc", "LC");
            break;
        case 3:
            datInmCli.put("TipoDoc", "LE");
            break;
        }

        datInmCli.put("NroDoc", String.valueOf(clie.getNumeroDoc()));
        datInmCli.put("Domicilio", clie.getDomicilio());
        datInmCli.put("NroDomicilio", String.valueOf(clie.getAlturaDomicilio()));
        datInmCli.put("Provincia", clie.getProvincia().getProvincia());
        datInmCli.put("Localidad", clie.getLocalidad().getLocalidad());
        datInmCli.put("Telefono", String.valueOf(clie.getTelefono()));
        datInmCli.put("Email", String.valueOf(clie.getCorreo()));

        //DatosReserva
        datInmCli.put("MontoReserva",
                String.valueOf(String.format("%.2f", reserva.getImporte()).replace(',', '.')));
        datInmCli.put("FechaReserva", fecha.format(reserva.getFechaHasta()));
        return datInmCli;
    }

    public boolean ExisteReserva(Inmueble inmSeleccionado) {
        List<Reserva> reservas;
        reservas = BDInmueble.existenReservas(inmSeleccionado);
        if (reservas.isEmpty()) {
            return false;
        }
        return true;
    }

    public Reserva ObtenerReserva(Inmueble inmSeleccionado) {
        List<Reserva> reserva;
        reserva = BDInmueble.existenReservas(inmSeleccionado);
        if (reserva.isEmpty()) {
            return null;
        }
        return reserva.get(0);
    }

    public boolean EliminarReserva(int id) {
        return BDInmueble.eliminarReservaPorID(id);
    }

    public boolean reservasViejas(Inmueble in) {
        List<Reserva> reservas;
        reservas = BDInmueble.existenReservas(in);

        if (reservas.isEmpty())
            return false;
        else
            return true;
    }

    public void DescartarReservasViejas() {
        PersistenciaInmueble operador = new PersistenciaInmueble();
        List<Reserva> reservas;
        List<Reserva> reservasAEliminar = new ArrayList<>();
        reservas = BDInmueble.todasLasReservas();

        java.util.Date tempDate = new java.util.Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(tempDate);
        cal.set(Calendar.MILLISECOND, 0);
        Timestamp hoy = new java.sql.Timestamp(cal.getTimeInMillis());

        for (Iterator<Reserva> iter = reservas.listIterator(); iter.hasNext();) {
            Reserva item = iter.next();
            if (!item.getFechaHasta().after(hoy)) {
                reservasAEliminar.add(item);
            }
        }
        operador.eliminarReservas(reservasAEliminar);

    }

    public List<Reserva> TieneReserva(Cliente cliente) {
        return BDInmueble.TieneReserva(cliente);
    }
}