cl.a2r.wsmicampov2.dao.TrasladoDAO.java Source code

Java tutorial

Introduction

Here is the source code for cl.a2r.wsmicampov2.dao.TrasladoDAO.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 cl.a2r.wsmicampov2.dao;

//import cl.a2r.common.wsservice.WSAdempiereCliente;
import cl.a2r.wsmicampo.diio.Diio;
import cl.a2r.wsmicampo.traslado.Acoplado;
import cl.a2r.wsmicampo.traslado.Camion;
import cl.a2r.wsmicampo.traslado.Chofer;
import cl.a2r.wsmicampo.traslado.DctoAdem;
import cl.a2r.wsmicampo.traslado.FMA;
import cl.a2r.wsmicampo.traslado.FmaCorreo;
import cl.a2r.wsmicampo.traslado.Transportista;
import cl.a2r.wsmicampo.traslado.Traslado;
import cl.a2r.wsmicampov2.app.AppException;
import cl.a2r.wsmicampov2.common.utils.Correo;
import cl.a2r.wsmicampov2.common.utils.Util;
import cl.a2r.wsmicampov2.comunes.GanadoManejo;
import cl.a2r.wsmicampov2.comunes.ManejoBase;
import cl.a2r.wsmicampov2.ganado.Ganado;
import cl.a2r.wsmicampov2.pdf.CellHelper;
import cl.a2r.wsmicampov2.pdf.EventoPagina;
import com.itextpdf.io.font.FontConstants;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.events.PdfDocumentEvent;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.border.Border;
import com.itextpdf.layout.element.AreaBreak;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.element.Text;
import com.itextpdf.layout.property.AreaBreakType;
import com.itextpdf.layout.property.TextAlignment;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
//import org.apache.coyote.http11.Constants;
//import org.apache.coyote.http11.filters.ChunkedInputFilter;

/**
 *
 * @author Elaine
 */
public class TrasladoDAO {

    private static final String SQL_TRANSPORTISTA_SELECT = "SELECT * FROM micampo.traslado_select_transportista(?)";

    private static final String SQL_CAMION_SELECT = "SELECT * FROM micampo.traslado_select_camion(?)";

    private static final String SQL_ACOPLADO_SELECT = "SELECT * FROM micampo.traslado_select_acoplado(?)";

    private static final String SQL_CHOFER_SELECT = "SELECT * FROM micampo.traslado_select_chofer(?)";

    private static final String SQL_TRASLADO_ENCABEZADO_SELECT = "SELECT * FROM micampo.traslado_encabezado_select(?)";

    private static final String SQL_TRASLADO_DETALLE_SELECT = "SELECT * FROM micampo.traslado_detalle_select(?)";

    private static final String SQL_TRASLADO_ENCABEZADO_GESTIONAR = "SELECT * FROM  micampo.traslado_encabezado_gestionar(?,?,?,?,?,?)";

    private static final String SQL_TRASLADO_DETALLE_GESTIONAR = "SELECT * FROM  micampo.traslado_detalle_gestionar(?,?,?,?,?,?)";
    private static final String SQL_INSERT_MOVTO_ADEM = "select * from micampo.traslado_ins_movto_adem(?)";

    private static final String SQL_GENERAR_ENTRADA = "select * from micampo.traslado_generar_entrada(?,?,?,?,?)";

    private static final String SQL_SELECT_FMA_XML = "select * from micampo.traslado_fma_xml(?, ?, ?, ?)";

    private static final String SQL_USUARIO_BY_ID = "select * from  micampo.usuario_by_id(?)";

    private static final String SQL_TRASLADO_ENCABEZADO_BY_ID = "select * from  micampo.traslado_encabezado_by_id(?)";

    private static final String SQL_FUNDOS_RUP_DIFERENTES = "select * from  micampo.fundos_rup_diferentes(?,?)";

    private static final String SQL_FUNDOS_BY_ID = "select * from micampo.fundo_by_id(?)";

    private static final String SQL_TRASLADO_INFO_GUIA = "select * from micampo.traslado_info_guia(?)";

    private static final String SQL_TRASLADO_DIIOS = "select * from micampo.traslado_diios_by_id(?)";

    private static final String SQL_SELECT_DIIOS_BY_MANEJO = "select * from micampo.select_diios_by_manejo(?)";

    public static List selectTransportista(Transaccion trx, Long syncTime) throws SQLException {

        List list = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRANSPORTISTA_SELECT);

        pst.setObject(1, syncTime);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            Transportista item = getTransportista(res);
            if (item != null) {
                list.add(item);
            }
        }

        res.close();
        pst.close();

        return list;
    }

    public static boolean fundosDiferentes(Transaccion trx, Integer fundo1_id, Integer fundo2_id)
            throws SQLException {

        boolean result = false;
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_FUNDOS_RUP_DIFERENTES);

        pst.setObject(1, fundo1_id);
        pst.setObject(2, fundo2_id);
        ResultSet res = pst.executeQuery();

        if (res.next()) {

            result = res.getBoolean(1);

        }

        res.close();
        pst.close();
        return result;
    }

    public static List selectChofer(Transaccion trx, Long syncTime) throws SQLException {

        List list = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_CHOFER_SELECT);

        pst.setObject(1, syncTime);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            Chofer item = getChofer(res);
            if (item != null) {
                list.add(item);
            }
        }

        res.close();
        pst.close();

        return list;
    }

    public static List selectCamion(Transaccion trx, Long syncTime) throws SQLException {

        List list = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_CAMION_SELECT);

        pst.setObject(1, syncTime);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            Camion item = getCamion(res);
            if (item != null) {
                list.add(item);
            }
        }

        res.close();
        pst.close();

        return list;
    }

    public static List selectAcoplado(Transaccion trx, Long syncTime) throws SQLException {

        List list = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_ACOPLADO_SELECT);

        pst.setObject(1, syncTime);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            Acoplado item = getAcoplado(res);
            if (item != null) {
                list.add(item);
            }
        }

        res.close();
        pst.close();

        return list;
    }

    public static List selectTrasladoEncabezado(Transaccion trx, Long syncTime) throws SQLException {

        List list = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRASLADO_ENCABEZADO_SELECT);

        pst.setObject(1, syncTime);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            ManejoBase item = getTrasladoEncabezado(res);
            if (item != null) {
                list.add(item);
            }
        }

        res.close();
        pst.close();

        return list;
    }

    public static String selectUsuarioById(Transaccion trx, Integer usuario_id) throws SQLException {

        String usuario = "";
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_USUARIO_BY_ID);

        pst.setObject(1, usuario_id);
        ResultSet res = pst.executeQuery();

        if (res.next()) {
            usuario = res.getString(1);
        }

        res.close();
        pst.close();

        return usuario;
    }

    public static String selectFundoById(Transaccion trx, Integer fundo_id) throws SQLException {

        String nombreFundo = "";
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_FUNDOS_BY_ID);

        pst.setObject(1, fundo_id);
        ResultSet res = pst.executeQuery();

        if (res.next()) {
            nombreFundo = res.getString(1);
        }

        res.close();
        pst.close();

        return nombreFundo;
    }

    public static ManejoBase getTrasladoEncabezadoById(Transaccion trx, Integer trasladoId) throws SQLException {

        ManejoBase traslado = new ManejoBase();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRASLADO_ENCABEZADO_BY_ID);

        pst.setObject(1, trasladoId);

        ResultSet res = pst.executeQuery();

        if (res.next()) {
            traslado = new ManejoBase(res.getInt(ManejoBase.COLUMN_ID), res.getString(ManejoBase.COLUMN_TIPO),
                    res.getInt(ManejoBase.COLUMN_FUNDOID), res.getInt(ManejoBase.COLUMN_USUARIOID),
                    res.getTimestamp(ManejoBase.COLUMN_FECHA), res.getString(ManejoBase.COLUMN_ESTADO),
                    res.getString(ManejoBase.COLUMN_VALORES), "", res.getInt(ManejoBase.COLUMN_MANEJO_PADRE)

            );
        }

        res.close();
        pst.close();
        return traslado;
    }

    public static List selectTrasladoDetalle(Transaccion trx, Long syncTime) throws SQLException {

        List list = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRASLADO_DETALLE_SELECT);

        pst.setObject(1, syncTime);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            GanadoManejo item = getTrasladoDetalle(res);
            if (item != null) {
                list.add(item);
            }
        }

        res.close();
        pst.close();
        return list;
    }

    private static ManejoBase getTrasladoEncabezado(ResultSet res) {

        try {
            return new ManejoBase(res.getInt(ManejoBase.COLUMN_ID), res.getString(ManejoBase.COLUMN_TIPO),
                    res.getInt(ManejoBase.COLUMN_FUNDOID), res.getInt(ManejoBase.COLUMN_USUARIOID),
                    res.getTimestamp(ManejoBase.COLUMN_FECHA), res.getString(ManejoBase.COLUMN_ESTADO),
                    res.getString(ManejoBase.COLUMN_VALORES), "", res.getInt(ManejoBase.COLUMN_MANEJO_PADRE)

            );
        } catch (SQLException e) {
            return null;
        }
    }

    private static GanadoManejo getTrasladoDetalle(ResultSet res) {

        try {
            return new GanadoManejo(res.getInt(GanadoManejo.COLUMN_ID), res.getInt(GanadoManejo.COLUMN_CREADOPORID),
                    res.getTimestamp(GanadoManejo.COLUMN_FECHA), res.getInt(GanadoManejo.COLUMN_GANADOID),
                    res.getInt(GanadoManejo.COLUMN_MANEJOID), res.getString(GanadoManejo.COLUMN_ESTADO),
                    res.getString(GanadoManejo.COLUMN_TIPO), res.getInt(GanadoManejo.COLUMN_FUNDOID), "", "", "",
                    res.getString(GanadoManejo.COLUMN_GUID));
        } catch (SQLException e) {
            return null;
        }
    }

    private static Camion getCamion(ResultSet res) {

        try {
            return new Camion(res.getInt(Camion.COLUMN_ID), res.getString(Camion.COLUMN_PATENTE),
                    res.getInt(Camion.COLUMN_TRANSPORTISTA_ID), res.getString(Camion.COLUMN_ESTADO)

            );
        } catch (SQLException e) {
            return null;
        }
    }

    private static Transportista getTransportista(ResultSet res) {

        try {
            return new Transportista(res.getInt(Transportista.COLUMN_ID),
                    res.getString(Transportista.COLUMN_NOMBRE), res.getString(Transportista.COLUMN_RUT),
                    res.getString(Transportista.COLUMN_ESTADO));
        } catch (SQLException e) {
            return null;
        }
    }

    private static Chofer getChofer(ResultSet res) {
        try {
            return new Chofer(res.getInt(Chofer.COLUMN_ID), res.getString(Chofer.COLUMN_NOMBRE),
                    res.getInt(Chofer.COLUMN_TRANSPORTISTA_ID), res.getString(Camion.COLUMN_ESTADO));
        } catch (SQLException e) {
            return null;
        }
    }

    private static Acoplado getAcoplado(ResultSet res) {

        try {
            return new Acoplado(res.getInt(Acoplado.COLUMN_ID), res.getString(Acoplado.COLUMN_PATENTE),
                    res.getInt(Acoplado.COLUMN_TRANSPORTISTA_ID), res.getString(Acoplado.COLUMN_ESTADO));
        } catch (SQLException e) {
            return null;
        }
    }

    public static Integer insertTrasladoEncabezado(Transaccion trx, ManejoBase trasladoEncabezado)
            throws SQLException {

        Integer id = null;
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRASLADO_ENCABEZADO_GESTIONAR);
        pst.setObject(1, trasladoEncabezado.getEstado());
        pst.setObject(2, trasladoEncabezado.getFundoId());
        pst.setObject(3, trasladoEncabezado.getUsuarioId());
        pst.setObject(4, trasladoEncabezado.getValores());
        pst.setObject(5, trasladoEncabezado.getId());
        pst.setObject(6, trasladoEncabezado.getAccion());

        ResultSet res = pst.executeQuery();
        if (res.next()) {
            id = res.getInt(1);
        }
        res.close();
        pst.close();

        return id;
    }

    public static Integer generarTrasladoEntrada(Transaccion trx, ManejoBase trasladoEncabezado)
            throws SQLException {

        Integer id = null;
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_GENERAR_ENTRADA);
        pst.setObject(1, trasladoEncabezado.getEstado());
        pst.setObject(2, trasladoEncabezado.getFundoId());
        pst.setObject(3, trasladoEncabezado.getUsuarioId());
        pst.setObject(4, trasladoEncabezado.getValores());
        pst.setObject(5, trasladoEncabezado.getId());

        ResultSet res = pst.executeQuery();
        if (res.next()) {
            id = res.getInt(1);
        }
        res.close();
        pst.close();
        return id;
    }

    public static Integer insertTrasladoDetalle(Transaccion trx, GanadoManejo trasladoGanado) throws SQLException {

        Integer id = null;
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRASLADO_DETALLE_GESTIONAR);
        pst.setObject(1, trasladoGanado.getEstado());
        pst.setObject(2, trasladoGanado.getFundoId());
        pst.setObject(3, trasladoGanado.getGanadoId());
        pst.setObject(4, trasladoGanado.getCreadoporId());
        pst.setObject(5, trasladoGanado.getManejoId());
        pst.setObject(6, trasladoGanado.getId());

        ResultSet res = pst.executeQuery();
        if (res.next()) {
            id = res.getInt(1);
        }
        res.close();
        pst.close();
        return id;
    }

    public static Integer trasladoEncabezadoListGestionar(Transaccion trx, List<ManejoBase> trasladoEncabezadoList)
            throws SQLException {

        Integer cant = 0;

        if (trasladoEncabezadoList != null && trasladoEncabezadoList.size() > 0) {
            for (ManejoBase item : trasladoEncabezadoList) {
                Integer id = insertTrasladoEncabezado(trx, item);
                item.setId(id);

                if (id != null) {
                    cant++;
                }

            }
        }
        return cant;
    }

    public static Integer trasladoDetalleListGestionar(Transaccion trx, List<GanadoManejo> ganadoTrasladoList)
            throws SQLException {

        Integer cant = 0;

        if (ganadoTrasladoList != null && ganadoTrasladoList.size() > 0) {
            for (GanadoManejo item : ganadoTrasladoList) {
                Integer id = insertTrasladoDetalle(trx, item);
                item.setId(id);

                if (id != null) {
                    cant++;
                }

            }
        }
        return cant;
    }

    public static Integer gestionarTraslado(Transaccion trx, List<ManejoBase> trasladosEncabezadosList,
            List<GanadoManejo> ganadoTrasladoList) throws SQLException {

        Integer cant = 0;
        Integer detalleId = null;
        Integer id = null;
        List<GanadoManejo> ganadoManejoListToAdd = new ArrayList<GanadoManejo>();
        List<ManejoBase> trasladosConcluidos = new ArrayList<ManejoBase>();

        for (GanadoManejo ganadoDetalle : ganadoTrasladoList) {

            if (ganadoDetalle.getEstado().equals("EP")) {
                ganadoManejoListToAdd.add(ganadoDetalle);
            } else if (ganadoDetalle.getEstado().equals("AN")) {

                id = insertTrasladoDetalle(trx, ganadoDetalle);
                if (id != null)
                    cant++;
            }
        }
        id = null;

        for (ManejoBase traslado : trasladosEncabezadosList) {

            id = insertTrasladoEncabezado(trx, traslado);

            if (traslado.getEstado().equals("AN")) {

                Correo correo = new Correo();
                correo.setFrom("adempiere@chilterra.com");
                String correoDestino = selectUsuarioById(trx, traslado.getUsuarioId());
                correo.setTo(correoDestino + ";" + "sipec@chilterra.com" + ";" + "desarrollador@chilterra.com" + ";"
                        + "sipec2@chilterra.com");

                ManejoBase trasladoInserted = getTrasladoEncabezadoById(trx, traslado.getId());

                String fundoOrigen = selectFundoById(trx, traslado.getFundoId());
                String fundoDestino = selectFundoById(trx, traslado.getTrasladoDestino());

                correo.setBody("El traslado " + trasladoInserted.getTrasladoNroGuia() + " ha sido anulado" + "\n"
                        + "Fundo origen: " + fundoOrigen + "\n" + "Fundo destino: " + fundoDestino);
                correo.setSubject("Anulacin de traslado");

                correo.enviar();

            }

            if (id == null)
                return null;

            cant++;

            //Asociando los ganados con el traslado correspondiente
            for (GanadoManejo ganadoDetalle : ganadoManejoListToAdd) {

                if (ganadoDetalle.getManejoId().equals(traslado.getId())) {

                    ganadoDetalle.setManejoId(id);
                }
            }

            //Seteando los traslados con el id de postgres
            if (traslado.getEstado().equals("BO-CO")) {

                ManejoBase trasladoInserted = traslado;
                trasladoInserted.setId(id);
                trasladosConcluidos.add(trasladoInserted);
            }

            id = null;
        }
        for (GanadoManejo ganadoDetalle : ganadoManejoListToAdd) {

            detalleId = insertTrasladoDetalle(trx, ganadoDetalle);
            if (detalleId != null) {
                cant++;
            } else {

                return null;
            }

            detalleId = null;
        }

        return cant;

    }

    public static DctoAdem insertMovtoAdem(Transaccion trx, Integer salidaId) throws SQLException {
        DctoAdem d = new DctoAdem();

        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet res = null;

        conn = trx.getConn();
        pst = conn.prepareStatement(SQL_INSERT_MOVTO_ADEM);
        pst.setObject(1, salidaId);
        res = pst.executeQuery();
        if (res.next()) {
            d.setIddocto(res.getInt("iddocto"));
            d.setIdtipodocto(res.getInt("idtipodocto"));
            d.setNrodocto(res.getString("nrodocto"));
            d.setG_movimiento_id(salidaId);
        }

        // res.close();
        //  pst.close();

        return d;
    }

    public static void selectFmaXml(Transaccion trx, FMA fma) throws SQLException {
        String strXML = null;
        String correoDestino = null;
        String fundoOrigen = null;
        String fundoDestino = null;
        String rupOrigen = null;
        String rupDestino = null;
        Integer nro_documento = null;

        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet res = null;

        conn = trx.getConn();
        pst = conn.prepareStatement(SQL_SELECT_FMA_XML);
        pst.setObject(1, fma.getUsuarioId());
        pst.setObject(2, fma.getG_movimiento_id());
        pst.setObject(3, fma.getFundoOrigenId());
        pst.setObject(4, fma.getFundoDestinoId());
        res = pst.executeQuery();

        if (res.next()) {
            strXML = res.getString("xmlmsg");
            correoDestino = res.getString("mail");
            fundoOrigen = res.getString("fundo_origen");
            fundoDestino = res.getString("fundo_destino");
            rupOrigen = res.getString("rup_origen");
            rupDestino = res.getString("rup_destino");
            nro_documento = res.getInt("nro_documento");
        }

        //No se genera el FMA, debido a que el predio de origen y/o destino no esta registrado
        //en SIPEC o no tiene RUP asignado en SIP
        if (rupOrigen == null || rupDestino == null || (rupOrigen.equals(rupDestino))) {
            res.close();
            pst.close();
            return;
        }

        byte[] byteXML = strXML.getBytes();

        Correo correo = new Correo();
        correo.setFrom("adempiere@chilterra.com");
        correo.setTo(correoDestino + ";" + "sipec@chilterra.com" + ";" + "desarrollador@chilterra.com" + ";"
                + "sipec2@chilterra.com");
        correo.setSubject("FMA " + nro_documento + " - " + fundoOrigen + " - " + fundoDestino);
        correo.setBody("XML vlido para generar un FMA en sitio web SIPEC" + "\n" + "http://sipecweb.sag.gob.cl/"
                + "\n" + "RUP " + fundoOrigen + ": " + rupOrigen + "\n" + "RUP " + fundoDestino + ": " + rupDestino
                + "\n");
        correo.addAdjunto(byteXML, "application/xml", "FMA " + nro_documento + ".xml");
        correo.enviar();

        res.close();
        pst.close();
    }

    public static FmaCorreo selectDataForFma(Transaccion trx, FMA fma) throws SQLException {
        String strXML = null;
        String correoDestino = null;
        String fundoOrigen = null;
        String fundoDestino = null;
        String rupOrigen = null;
        String rupDestino = null;
        Integer nro_documento = null;

        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet res = null;

        conn = trx.getConn();
        pst = conn.prepareStatement(SQL_SELECT_FMA_XML);
        pst.setObject(1, fma.getUsuarioId());
        pst.setObject(2, fma.getG_movimiento_id());
        pst.setObject(3, fma.getFundoOrigenId());
        pst.setObject(4, fma.getFundoDestinoId());
        res = pst.executeQuery();

        if (res.next()) {
            strXML = res.getString("xmlmsg");
            correoDestino = res.getString("mail");
            fundoOrigen = res.getString("fundo_origen");
            fundoDestino = res.getString("fundo_destino");
            rupOrigen = res.getString("rup_origen");
            rupDestino = res.getString("rup_destino");
            nro_documento = res.getInt("nro_documento");
        }

        res.close();
        pst.close();

        FmaCorreo fmaCorreo = new FmaCorreo(correoDestino, fundoOrigen, fundoDestino, rupOrigen, rupDestino,
                nro_documento);
        return fmaCorreo;
    }

    private static Traslado getTraslado(ResultSet res) {

        try {
            return new Traslado(res.getInt(Traslado.COLUMN_ID), res.getDate(Traslado.COLUMN_FECHA),
                    res.getString(Traslado.COLUMN_FUNDO_ORIGEN), res.getString(Traslado.COLUMN_FUNDO_DESTINO),
                    res.getString(Traslado.COLUMN_NOMBRE_CHOFER), res.getString(Traslado.COLUMN_RUT_CHOFER),
                    res.getString(Traslado.COLUMN_PATENTE_CAMION),
                    res.getString(Traslado.COLUMN_NOMBRE_TRANSPORTISTA),
                    res.getString(Traslado.COLUMN_RUT_TRANSPORTISTA),
                    res.getString(Traslado.COLUMN_ACOPLADO_PATENTE), res.getString(Traslado.COLUMN_CORREO)

            );
        } catch (SQLException e) {
            return null;
        }
    }

    public static Traslado selectTrasladoById(Transaccion trx, Integer trasladoId) throws SQLException {

        Traslado item = null;
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRASLADO_INFO_GUIA);

        pst.setObject(1, trasladoId);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            item = getTraslado(res);
            if (item != null) {
                return item;
            }
        }

        res.close();
        pst.close();
        return item;
    }

    public static List selectDiiosTrasladoById(Transaccion trx, Integer trasladoId) throws SQLException {

        List listDiios = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_TRASLADO_DIIOS);

        pst.setObject(1, trasladoId);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            String item = res.getString(1);
            if (item != null) {
                listDiios.add(item);
            }
        }

        res.close();
        pst.close();
        return listDiios;
    }

    public static List selectDiiosByManejoId(Transaccion trx, Integer trasladoId) throws SQLException {

        List listDiios = new ArrayList();
        Connection conn = trx.getConn();
        PreparedStatement pst = conn.prepareStatement(SQL_SELECT_DIIOS_BY_MANEJO);

        pst.setObject(1, trasladoId);
        ResultSet res = pst.executeQuery();

        while (res.next()) {

            Integer item = res.getInt(1);
            listDiios.add(item);

        }

        res.close();
        pst.close();
        return listDiios;
    }

    public static void generarDocumentoTraslado(Transaccion trx, Integer trasladoId) throws SQLException {

        Traslado traslado = selectTrasladoById(trx, trasladoId);
        List<String> listDiios = selectDiiosTrasladoById(trx, trasladoId);
        try {

            Integer identificadorTraslado = trasladoId;
            String fundoOrigen = traslado.getFundoOrigen();
            String fundoDestino = traslado.getFundoDestino();
            Integer cantAnimales = listDiios.size();
            Date fecha = traslado.getFecha();
            String nombreChofer = traslado.getNombreChofer();
            String rutChofer = traslado.getRutChofer();
            String patenteCamion = traslado.getPatenteCamion();
            String patenteAcoplado = traslado.getAcopladoPatente();
            String nombreTransportista = traslado.getNombreTransportista();
            String rutTransportista = traslado.getRutTransportista();

            String correoDestino = traslado.getCorreo();

            DateFormat df = new SimpleDateFormat("dd-MM-yyyy hh_mm_ss");
            DateFormat df2 = new SimpleDateFormat("dd-MM-yyyy");
            Date today = Calendar.getInstance().getTime();
            String reportDate = df.format(today);
            String reportDate2 = df2.format(today);

            String fileName = "Traslado Nro. " + identificadorTraslado + "-" + reportDate2 + " " + fundoOrigen + "_"
                    + fundoDestino;
            //            String fileRoot="Z:\\Chilterra\\MiCampoGuias\\"+fileName+".pdf";

            String fileRoot = "/usr/share/MiCampoGuiasUpload/" + fileName + ".pdf";

            PdfWriter writer = new PdfWriter(fileRoot);

            PdfDocument pdf = new PdfDocument(writer);

            Document document = new Document(pdf);

            addPageToGuia(traslado, listDiios, document, cantAnimales);
            addSpaces(document);

            //Firmas        
            Table firmas = new Table(3);
            firmas.addCell(CellHelper.getCellFirma("Responsable fundo origen", TextAlignment.CENTER));
            firmas.addCell(CellHelper.getCell("", TextAlignment.LEFT));
            firmas.addCell(CellHelper.getCellFirma("Transportista", TextAlignment.CENTER));
            document.add(firmas);

            copiaPara("Fundo origen", document);

            document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));

            addDiiosPage(document, listDiios);
            document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));

            addPageToGuia(traslado, listDiios, document, cantAnimales);
            addSpaces(document);

            Table firmas2 = new Table(3);
            firmas2.addCell(CellHelper.getCellFirma("Responsable fundo destino", TextAlignment.CENTER));
            firmas2.addCell(CellHelper.getCell("", TextAlignment.LEFT));
            firmas2.addCell(CellHelper.getCellFirma("Transportista", TextAlignment.CENTER));
            document.add(firmas2);

            copiaPara("Fundo destino", document);

            document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));

            addDiiosPage(document, listDiios);

            document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));

            addPageToGuia(traslado, listDiios, document, cantAnimales);
            addSpaces(document);

            Table firmas3 = new Table(3);
            firmas3.addCell(CellHelper.getCellFirma("Responsable fundo origen", TextAlignment.CENTER));
            firmas3.addCell(CellHelper.getCell("", TextAlignment.LEFT));
            firmas3.addCell(CellHelper.getCellFirma("Responsable fundo destino", TextAlignment.CENTER));
            document.add(firmas3);

            copiaPara("Transportista", document);

            document.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
            addDiiosPage(document, listDiios);

            document.close();

            File file = new File(fileRoot);
            InputStream inputStream = new FileInputStream(file);
            int fileLength = (int) file.length();

            byte[] bytes = new byte[fileLength];
            inputStream.read(bytes);

            Correo correo = new Correo();
            correo.setFrom("desarrollador@chilterra.com");
            correo.setTo(correoDestino + ";" + "sipec@chilterra.com");

            correo.setSubject("Traslado interno de animales Nro: " + trasladoId);
            correo.setBody("");

            correo.addAdjunto(bytes, "application/pdf", fileName + ".pdf");
            correo.enviar();
        } catch (Exception ex) {

        }
    }

    public static void addPageToGuia(Traslado traslado, List<String> listDiios, Document document,
            Integer cantAnimales) {

        try {

            Integer identificadorTraslado = traslado.getId();
            String fundoOrigen = traslado.getFundoOrigen();
            String fundoDestino = traslado.getFundoDestino();
            Date fecha = traslado.getFecha();
            String nombreChofer = traslado.getNombreChofer();
            String rutChofer = traslado.getRutChofer();
            String patenteCamion = traslado.getPatenteCamion();
            String patenteAcoplado = traslado.getAcopladoPatente();
            String nombreTransportista = traslado.getNombreTransportista();
            String rutTransportista = traslado.getRutTransportista();

            String imagePath = "/usr/share/MiCampoGuiasUpload/A2RLogo.png";
            //        String imagePath="Z:\\Chilterra\\MiCampoGuias\\A2RLogo.png";

            DateFormat df = new SimpleDateFormat("dd-MM-yyyy hh_mm_ss");
            DateFormat df2 = new SimpleDateFormat("dd-MM-yyyy");
            Date today = Calendar.getInstance().getTime();
            String reportDate = df.format(today);
            String reportDate2 = df2.format(today);

            PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);

            Text fechaText = new Text("Fecha: " + reportDate2).setTextAlignment(TextAlignment.RIGHT);
            Paragraph paragraphFecha = new Paragraph().add(fechaText);
            paragraphFecha.setTextAlignment(TextAlignment.RIGHT);
            document.add(paragraphFecha);

            Text title = new Text("TRASLADO INTERNO DE ANIMALES No. " + identificadorTraslado).setFont(bold);
            title.setFontSize(12);

            Image a2R = new Image(ImageDataFactory.create(imagePath));
            Paragraph p = new Paragraph("").add(a2R).add(title);

            document.add(p);

            //Datos del traslado
            Table table = new Table(2);

            table.addCell(CellHelper.getCell("Fundo origen: ", fundoOrigen, TextAlignment.LEFT));
            table.addCell(CellHelper.getCell("Fundo destino: ", fundoDestino, TextAlignment.LEFT));

            table.addCell(CellHelper.getCell("Nombre Chofer: ", nombreChofer, TextAlignment.LEFT));
            table.addCell(CellHelper.getCell("Rut Chofer: ", nombreChofer, TextAlignment.LEFT));

            table.addCell(CellHelper.getCell("Patente camin: ", patenteCamion, TextAlignment.LEFT));
            table.addCell(CellHelper.getCell("Patente acoplado: ", patenteAcoplado, TextAlignment.LEFT));

            table.addCell(CellHelper.getCell("Nombre transportista: ", nombreTransportista, TextAlignment.LEFT));
            table.addCell(CellHelper.getCell("Rut transportista: ", rutTransportista, TextAlignment.LEFT));

            document.add(table);

            Paragraph totalAnimales = CellHelper.getBoldParagraph("Cantidad total de animales: ",
                    cantAnimales.toString());

            document.add(totalAnimales);

            //Observaciones
            Paragraph observaciones = new Paragraph("Observaciones: ").setBold();
            document.add(observaciones);

            Table observTable = new Table(1);
            observTable.addCell(CellHelper.getCellObservaciones("", TextAlignment.LEFT));
            document.add(observTable);

            Paragraph space1 = new Paragraph("");
            document.add(space1);

            Paragraph space2 = new Paragraph("");
            document.add(space2);

            Paragraph space3 = new Paragraph("");
            document.add(space3);

            Paragraph space4 = new Paragraph("");
            document.add(space4);

        } catch (Exception ex) {

        }

    }

    public static void addDiiosPage(Document document, List<String> listDiios) {

        try {

            Integer cantAnimales = listDiios.size();
            Integer diff = 0;

            if (listDiios.size() < 6) {
                diff = 6 - cantAnimales;
            } else {

                if (cantAnimales % 6 != 0) {

                    Integer cociente = cantAnimales / 6;
                    diff = ((cociente + 1) * 6) - cantAnimales;
                }

            }

            for (int i = 0; i < diff; i++) {
                listDiios.add(" ");
            }

            PdfFont bold = PdfFontFactory.createFont(FontConstants.HELVETICA_BOLD);
            Text subTitle = new Text("Diios: ").setFont(bold);
            Paragraph subtitleParagraph = new Paragraph().add(subTitle);

            document.add(subtitleParagraph);
            Table tableDiios = new Table(6);
            for (int i = 0; i < listDiios.size(); i++) {

                tableDiios.addCell(CellHelper.getCellDiios(listDiios.get(i), TextAlignment.LEFT));
            }

            document.add(tableDiios);

        } catch (Exception ex) {

        }

    }

    public static void copiaPara(String copia, Document document) {

        Text copy = new Text("Copia para " + copia).setTextAlignment(TextAlignment.CENTER);
        Paragraph paragraphCopy = new Paragraph().add(copy);
        paragraphCopy.setTextAlignment(TextAlignment.CENTER);
        document.add(paragraphCopy);

    }

    public static void addSpaces(Document document) {
        for (int i = 0; i < 20; i++) {

            document.add(new Paragraph(" "));
        }
    }

}