pe.gob.onpe.rae.controller.registro.registroController.java Source code

Java tutorial

Introduction

Here is the source code for pe.gob.onpe.rae.controller.registro.registroController.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 pe.gob.onpe.rae.controller.registro;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFooter;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import pe.gob.onpe.rae.constant.Parametros;
import pe.gob.onpe.rae.constant.RaeConstants;
import pe.gob.onpe.rae.controller.BaseController;
import pe.gob.onpe.rae.dao.AmbitoDAO;
import pe.gob.onpe.rae.dao.ElectorDAO;
import pe.gob.onpe.rae.dao.ExpedienteDAO;
import pe.gob.onpe.rae.dao.ExpedienteImpresionDAO;
import pe.gob.onpe.rae.dao.ExpedientePadronDAO;
import pe.gob.onpe.rae.dao.PadronDAO;
import pe.gob.onpe.rae.dao.ParametroDAO;
import pe.gob.onpe.rae.dao.ReporteDAO;
import pe.gob.onpe.rae.dao.UbigeoDAO;
import pe.gob.onpe.rae.helper.PrintUtil;
import pe.gob.onpe.rae.model.Ambito;
import pe.gob.onpe.rae.model.Elector;
import pe.gob.onpe.rae.model.Expediente;
import pe.gob.onpe.rae.model.ExpedienteImpresion;
import pe.gob.onpe.rae.model.ExpedientePadron;
import pe.gob.onpe.rae.model.Padron;
import pe.gob.onpe.rae.model.Parametro;
import pe.gob.onpe.rae.model.Ubigeo;
import pe.gob.onpe.rae.model.Usuario;
import pe.gob.onpe.rae.model.report.RElector;
import pe.gob.onpe.reportgenerator.iface.IExcelGenerator;
import pe.gob.onpe.reportgenerator.iface.IFactory;
import pe.gob.onpe.reportgenerator.iface.impl.FactoryService;
import pe.gob.onpe.reportgenerator.model.Report;

/**
 *
 * @author AQuispec
 */
@Controller
@Transactional
@RequestMapping("/registro/*")
public class registroController extends BaseController {

    @Autowired
    PadronDAO padronDAO;

    @Autowired
    ElectorDAO electorDAO;

    @Autowired
    ExpedientePadronDAO expedientePadronDAO;

    @Autowired
    UbigeoDAO ubigeoDAO;

    @Autowired
    AmbitoDAO ambitoDAO;

    @Autowired
    ExpedienteDAO expedienteDAO;

    @Autowired
    ExpedienteImpresionDAO expedienteImpresionDAO;

    @Autowired
    ParametroDAO parametroDAO;

    @Autowired
    ReporteDAO reporteDAO;

    @RequestMapping(value = "fetchPadron/{numele}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<ExpedientePadron> fetchPadronByDni(HttpServletRequest request,
            @PathVariable("numele") String numele) {

        Padron padron = new Padron();
        Expediente lista = new Expediente();
        Elector elector = new Elector();
        ExpedientePadron expPadron = null;
        Ambito ambito = new Ambito();
        padron.setNumEle(numele);
        padron = padronDAO.find(padron);

        if (padron == null) {
            elector = electorDAO.fetchElectorbyDni(numele);
            if (elector != null) {
                expPadron.setDni(numele);
                expPadron.setApellidoPaterno(elector.getApellidoPaterno());
                expPadron.setApellidoMaterno(elector.getApellidoMaterno());
                expPadron.setNombre(elector.getNombre());
                expPadron.setUbigeoElector(elector.getUbigeo());
                //ubigeolista
                //ordenregistro
                //indicador
                //estado
                //observacion
                lista.setId(Long.valueOf(0));
                expPadron.setExpediente(lista);
                //ambito
            }
        } else {

            expPadron = expedientePadronDAO.fetchListaPadronByDni(numele);
            if (expPadron != null) {
                lista.setId(expPadron.getExpediente().getId());
                expPadron.setExpediente(lista);
                ambito.setId(expPadron.getAmbito().getId());
                expPadron.setAmbito(ambito);
            } else {
                expPadron = new ExpedientePadron();
                expPadron.setDni(numele);
                expPadron.setApellidoPaterno(padron.getApePat());
                expPadron.setApellidoMaterno(padron.getApMat());
                expPadron.setNombre(padron.getNombres());
                expPadron.setUbigeoElector(padron.getUbigeo());

                lista.setId(Long.valueOf(0));
                expPadron.setExpediente(lista);
                ambito.setId(Long.valueOf(0));
                expPadron.setAmbito(ambito);
            }

        }

        if (expPadron == null) {
            return new ResponseEntity<ExpedientePadron>(HttpStatus.NO_CONTENT);
        }
        return new ResponseEntity<ExpedientePadron>(expPadron, HttpStatus.OK);

    }

    @RequestMapping(value = "/registro/fetchElector/{numele}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<Elector> fetchElectorByDni(HttpServletRequest request,
            @PathVariable("numele") String numele) {

        List<String> result = new ArrayList<String>();

        Elector elector = electorDAO.fetchElectorbyDni(numele);
        if (elector == null) {
            return new ResponseEntity<Elector>(HttpStatus.NO_CONTENT);
        }
        return new ResponseEntity<Elector>(elector, HttpStatus.OK);
    }

    //    @RequestMapping(value = "/registro/fetchListaPadron/{numele}", method = RequestMethod.GET)
    //    @ResponseBody
    //    public ExpedientePadron fetchListaPadronByDni(HttpServletRequest request, @PathVariable("numele") String numele) {
    //        ExpedientePadron listaPadron = new ExpedientePadron();
    //
    //        listaPadron.setDni(numele);
    //        listaPadron = expedientePadronDAO.find(listaPadron);
    //        return listaPadron;
    //    }
    @RequestMapping(value = "fetchUbigeo/{ubiPadre}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<Ubigeo>> fetchUbigeoByUbiPadre(HttpServletRequest request,
            @PathVariable("ubiPadre") String ubiPadre) {
        List<Ubigeo> lstUbigeo;
        lstUbigeo = ubigeoDAO.fetchUbigeoByUbiPadre(ubiPadre);
        return new ResponseEntity<List<Ubigeo>>(lstUbigeo, HttpStatus.OK);
    }

    @RequestMapping(value = "fetchAmbitosReg/{ambitoPadre}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<Ambito>> fetchAmbitosReg(HttpServletRequest request,
            @PathVariable("ambitoPadre") Long ambitoPadre) {
        List<Ambito> lstAmbito;
        lstAmbito = ambitoDAO.buscarAmbitosRegElector(ambitoPadre);
        return new ResponseEntity<List<Ambito>>(lstAmbito, HttpStatus.OK);
    }

    @RequestMapping("/registro/registrar")
    public ModelAndView selectList(HttpServletRequest request) {
        ModelAndView view;
        view = new ModelAndView("registro/index");
        view.addObject("lstDptos", new Gson().toJson(ubigeoDAO.fetchDepartamentos()));
        view.addObject("dptos", new Gson().toJson(ambitoDAO.listarDepartamento()));
        return view;
    }

    //    @RequestMapping(value = "/listarProvincias/{ubigeo}", method = RequestMethod.GET)
    //    @ResponseBody
    //    public List<Ambito> listarProvincias(HttpServletRequest request, @PathVariable("ubigeo") String ubigeo) {
    //        List<Ambito> provincias;
    //        Ambito ambito = new Ambito();
    //        ambito.setUbigeo(ubigeo);
    //        provincias = ambitoDAO.listarProvincia(ambito);
    //        return provincias;
    //    }               
    @RequestMapping(value = "listarProvincias/{ubigeo}", method = RequestMethod.GET)
    public ResponseEntity<List<Ambito>> listarProvincias(@PathVariable String ubigeo) {
        Ambito ambito = new Ambito();
        ambito.setUbigeo(ubigeo);
        List<Ambito> provincias = ambitoDAO.listarProvincia(ambito);
        return new ResponseEntity<List<Ambito>>(provincias, HttpStatus.OK);
    }

    @RequestMapping(value = "listarDistritos/{ubigeo}", method = RequestMethod.GET)
    public ResponseEntity<List<Ambito>> listarDistritos(@PathVariable String ubigeo) {
        Ambito ambito = new Ambito();
        ambito.setUbigeo(ubigeo);
        List<Ambito> distritos = ambitoDAO.listarDistrito(ambito);
        return new ResponseEntity<List<Ambito>>(distritos, HttpStatus.OK);
    }

    @RequestMapping(value = "listarCCPP/{ubigeo}", method = RequestMethod.GET)
    public ResponseEntity<List<Ambito>> listarCCPP(@PathVariable String ubigeo) {
        Ambito ambito = new Ambito();
        ambito.setUbigeo(ubigeo);
        List<Ambito> ambitos = ambitoDAO.listarCCPP(ambito);
        return new ResponseEntity<List<Ambito>>(ambitos, HttpStatus.OK);
    }

    @RequestMapping(value = "listarExpedientes/{ccpp}", method = RequestMethod.GET)
    public ResponseEntity<List<Expediente>> listarExpedientes(@PathVariable Long ccpp) {
        Ambito ambito = new Ambito();
        ambito.setId(ccpp);
        Expediente expediente = new Expediente();
        expediente.setAmbito(ambito);
        List<Expediente> listas = expedienteDAO.listarExpediente(expediente);
        return new ResponseEntity<List<Expediente>>(listas, HttpStatus.OK);
    }

    @RequestMapping(value = "buscarUbigeo/{ubigeo}", method = RequestMethod.GET)
    public ResponseEntity<List<Ambito>> buscarUbigeo(@PathVariable String ubigeo) {
        Ambito ambito = new Ambito();
        ambito.setDepartamento(ubigeo);
        List<Ambito> ambitos = ambitoDAO.buscarUbigeo(ambito);
        return new ResponseEntity<List<Ambito>>(ambitos, HttpStatus.OK);
    }

    @RequestMapping(value = "buscarCCPP/{nombre}", method = RequestMethod.GET)
    public ResponseEntity<List<Ambito>> buscarLocal(@PathVariable String nombre) {
        Ambito ambito = new Ambito();
        ambito.setNombreAmbito(nombre);
        List<Ambito> lstAmbitos = new ArrayList<Ambito>();
        List<Ambito> ambitos = ambitoDAO.buscarCCPPP(ambito);
        for (Ambito a : ambitos) {
            a.setExpedientes(null);
            a.setExpedientesPadron(null);
            a.setLocales(null);
            lstAmbitos.add(a);
        }
        return new ResponseEntity<List<Ambito>>(lstAmbitos, HttpStatus.OK);

    }

    @RequestMapping(value = "eliminarElector/", method = RequestMethod.POST, headers = "Accept=application/json")
    @ResponseBody
    public ResponseEntity<ExpedientePadron> eliminar(@RequestBody ExpedientePadron elector) {
        try {
            if (elector.getId() != null) {
                expedientePadronDAO.updateDAO(elector);
                return new ResponseEntity<ExpedientePadron>(HttpStatus.OK);
            } else {
                return new ResponseEntity<ExpedientePadron>(HttpStatus.NO_CONTENT);
            }
        } catch (Exception ex) {
            return new ResponseEntity<ExpedientePadron>(HttpStatus.NOT_FOUND);
        }
    }

    @RequestMapping(value = "fetchExpediente/{id}", method = RequestMethod.GET)
    public ResponseEntity<Expediente> fetchExpediente(@PathVariable Long id) {
        Expediente expediente = new Expediente();
        expediente.setId(id);
        expediente = expedienteDAO.find(expediente);
        expediente.setAmbito(expediente.getAmbito());

        expediente.getAmbito().setExpedientes(null);
        expediente.getAmbito().setExpedientesPadron(null);
        expediente.getAmbito().setLocales(null);
        expediente.setExpedientesImpresion(null);
        expediente.setExpedientesPadron(null);

        return new ResponseEntity<Expediente>(expediente, HttpStatus.OK);
    }

    @RequestMapping(value = "listarElectoresPrevia/", method = RequestMethod.POST, headers = "Accept=application/json")
    @ResponseBody
    public ResponseEntity<List<ExpedientePadron>> listarElectoresPrevia(
            @RequestBody ExpedientePadron expedientePadron) {
        try {
            if (expedientePadron.getExpediente().getId() != null) {

                int ultPagina = expedienteImpresionDAO.getCountPaginas(
                        expedientePadron.getExpediente().getId().intValue(), expedientePadron.getIndicador());
                int ultimoReg = 0;
                if (ultPagina > 0) {
                    ultimoReg = expedienteImpresionDAO.getRegistroFinal(
                            expedientePadron.getExpediente().getId().intValue(), expedientePadron.getIndicador(),
                            ultPagina);
                }
                List<ExpedientePadron> electores = expedientePadronDAO.listarElectores(expedientePadron, ultimoReg);
                return new ResponseEntity<List<ExpedientePadron>>(electores, HttpStatus.OK);
            } else {
                return new ResponseEntity<List<ExpedientePadron>>(HttpStatus.NO_CONTENT);
            }
        } catch (Exception ex) {
            return new ResponseEntity<List<ExpedientePadron>>(HttpStatus.NOT_FOUND);
        }
    }

    @RequestMapping(value = "/exportarExpediente/{expediente}", method = RequestMethod.GET)
    public void exportarExpediente(HttpServletRequest request, @PathVariable("expediente") int expediente,
            HttpServletResponse response) {
        try {
            Report report = new Report();
            report.setCode("RPT01");
            report.setLabel("REGISTRO DE ELECTORES");
            report.setDescription("LISTA DE ELECTORES REGISTRADOS");

            //List<ExpedientePadron> electores = expedientePadronDAO.exportarExpediente(expediente);
            List electores = reporteDAO.exportarExpediente(expediente);
            String gson = new Gson().toJson(electores);

            IFactory factory = new FactoryService();
            IExcelGenerator excelGenerator = factory.createExcelGenerator(report, gson, null, true, null);
            HSSFWorkbook workbook = excelGenerator.createFromJson();

            response.setContentType("application/vnd.ms-excel");

            String attachment = String.format("attachment; filename=%s.xls", "REGISTRO DE ELECTORES");
            response.setHeader("Content-Disposition", attachment);
            workbook.write(response.getOutputStream());
        } catch (IOException ex) {
            System.out.println(ex.toString());
        }
    }

    @RequestMapping(value = "/countExpedientePadron/{expediente}", method = RequestMethod.GET)
    public ResponseEntity<Integer> countExpedientePadron(@PathVariable int expediente) {
        int result = expedientePadronDAO.getCountExportarExpediente(expediente);
        return new ResponseEntity<Integer>(result, HttpStatus.OK);
    }

    @RequestMapping(value = "countVPDiferenteUbigeo/{codExpediente}", method = RequestMethod.GET)
    public ResponseEntity<Integer> countVPDiferenteUbigeo(@PathVariable int codExpediente) {
        int ultPagina = expedienteImpresionDAO.getCountPaginas(codExpediente,
                Parametros.N_INDICADOR_DIFERENTE_UBIGEO);
        int result = 0;
        if (ultPagina > 0) {
            result = expedienteImpresionDAO.getRegistroFinal(codExpediente, Parametros.N_INDICADOR_DIFERENTE_UBIGEO,
                    ultPagina);
        }
        return new ResponseEntity<Integer>(result, HttpStatus.OK);
    }

    @RequestMapping(value = "getContadores/{codExpediente}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<Integer>> getContadores(@PathVariable int codExpediente) {
        List<Integer> lstContadores = new ArrayList<Integer>();
        int ultPagina;
        int ultimoReg;

        int iTotalDifUbigeo = expedientePadronDAO.fetchCountExpedPadron(codExpediente,
                Parametros.N_INDICADOR_DIFERENTE_UBIGEO);
        int iTotalMismoUbigeo = expedientePadronDAO.fetchCountExpedPadron(codExpediente,
                Parametros.N_INDICADOR_MISMO_UBIGEO);

        ultPagina = expedienteImpresionDAO.getCountPaginas(codExpediente, Parametros.N_INDICADOR_DIFERENTE_UBIGEO);
        ultimoReg = 0;
        if (ultPagina > 0) {
            ultimoReg = expedienteImpresionDAO.getRegistroFinal(codExpediente,
                    Parametros.N_INDICADOR_DIFERENTE_UBIGEO, ultPagina);
        }
        int iTotalVPDifUbigeo = iTotalDifUbigeo - ultimoReg;

        ultPagina = expedienteImpresionDAO.getCountPaginas(codExpediente, Parametros.N_INDICADOR_MISMO_UBIGEO);
        ultimoReg = 0;
        if (ultPagina > 0) {
            ultimoReg = expedienteImpresionDAO.getRegistroFinal(codExpediente, Parametros.N_INDICADOR_MISMO_UBIGEO,
                    ultPagina);
        }
        int iTotalVPMismoUbigeo = iTotalMismoUbigeo - ultimoReg;
        lstContadores.add(iTotalMismoUbigeo);
        lstContadores.add(iTotalVPMismoUbigeo);
        lstContadores.add(iTotalDifUbigeo);
        lstContadores.add(iTotalVPDifUbigeo);

        return new ResponseEntity<List<Integer>>(lstContadores, HttpStatus.OK);
    }

    @RequestMapping(value = "fetchExpPadByCodExpediente/{codExpediente}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<ExpedientePadron>> fetchExpPadByCodExp(@PathVariable int codExpediente) {
        List<ExpedientePadron> result = new ArrayList<ExpedientePadron>();
        result = expedientePadronDAO.fetchByExpediente(codExpediente);
        return new ResponseEntity<List<ExpedientePadron>>(result, HttpStatus.OK);
    }

    @RequestMapping(value = "registrarElector/", method = RequestMethod.POST, headers = "Accept=application/json")
    @ResponseBody
    public ResponseEntity<ExpedientePadron> registrarElector(HttpServletRequest request,
            @RequestBody ExpedientePadron elector) {
        try {

            HttpSession session = request.getSession(false);
            Usuario usu = (Usuario) session.getAttribute("USUARIO_AUTENTICADO");
            if (usu != null) {
                ExpedientePadron expPadron = null;
                Padron padron = new Padron();
                Elector nEle = null;
                padron.setNumEle(elector.getDni());
                padron = padronDAO.find(padron);

                if (padron == null) {
                    elector.setObservacion(
                            addObservacion(elector.getObservacion(), Parametros.CODE_PARAM_NO_PADRON_NAC));
                    nEle = electorDAO.fetchElectorbyDni(elector.getDni());
                    if (nEle == null) {
                        nEle = new Elector();
                        nEle.setDni(elector.getDni());
                        nEle.setApellidoPaterno(elector.getApellidoPaterno());
                        nEle.setApellidoMaterno(elector.getApellidoMaterno());
                        nEle.setNombre(elector.getNombre());
                        nEle.setUbigeo(elector.getUbigeoElector());
                        electorDAO.saveDAO(nEle);
                    }
                }

                expPadron = expedientePadronDAO.fetchListaPadronByDni(elector.getDni());
                if (expPadron != null) {
                    expPadron.setEstado(Parametros.ESTADO_ELECTOR_REG_OTRA_LISTA);
                    expedientePadronDAO.updateDAO(expPadron);
                }

                if (padron != null) {
                    if (padron.getRestric() != null) {
                        elector.setObservacion(
                                addObservacion(elector.getObservacion(), Parametros.CODE_PARAM_DNI_RESTRINGIDO));
                    }
                }

                elector.setEstado(Parametros.ESTADO_ELECTOR_ACTIVO);
                if (!elector.getUbigeoElector().equals(elector.getUbigeoLista())) {
                    elector.setEstado(Parametros.ESTADO_ELECTOR_PENDIENTE);
                    elector.setObservacion(
                            addObservacion(elector.getObservacion(), Parametros.CODE_PARAM_NO_PADRON_DIST));
                    elector.setOrdenRegistro(expedientePadronDAO
                            .fetchCountExpedPadron((elector.getExpediente().getId()).intValue(), 1) + 1);
                    elector.setIndicador(Parametros.N_INDICADOR_DIFERENTE_UBIGEO);
                } else {
                    elector.setOrdenRegistro(expedientePadronDAO
                            .fetchCountExpedPadron((elector.getExpediente().getId()).intValue(), 0) + 1);
                    elector.setIndicador(Parametros.N_INDICADOR_MISMO_UBIGEO);
                }
                if (usu.getPerfil().getId() == Parametros.PERFIL_AMBITO) {
                    elector.setFlag(Parametros.FLAG_ELECTOR_PENDIENTE);
                } else {
                    elector.setFlag(Parametros.FLAG_ELECTOR_VALIDO);
                }
                expedientePadronDAO.saveDAO(elector);
                return new ResponseEntity<ExpedientePadron>(HttpStatus.OK);
            } else {
                return new ResponseEntity<ExpedientePadron>(HttpStatus.NO_CONTENT);
            }

        } catch (Exception ex) {
            return new ResponseEntity<ExpedientePadron>(HttpStatus.NOT_FOUND);
        }
    }

    @RequestMapping(value = "updateElector/", method = RequestMethod.POST, headers = "Accept=application/json")
    @ResponseBody
    public ResponseEntity<ExpedientePadron> update(HttpServletRequest request,
            @RequestBody ExpedientePadron elector) {
        try {
            HttpSession session = request.getSession(false);
            Usuario usu = (Usuario) session.getAttribute("USUARIO_AUTENTICADO");

            if (usu != null) {

                if (elector.getId() != null) {

                    if (usu.getPerfil().getId() == Parametros.PERFIL_AMBITO) {
                        elector.setFlag(Parametros.FLAG_ELECTOR_PENDIENTE);
                    } else {
                        elector.setFlag(Parametros.FLAG_ELECTOR_VALIDO);
                    }

                    expedientePadronDAO.updateDAO(elector);
                    return new ResponseEntity<ExpedientePadron>(HttpStatus.OK);
                } else {
                    return new ResponseEntity<ExpedientePadron>(HttpStatus.NO_CONTENT);
                }
            } else {
                return new ResponseEntity<ExpedientePadron>(HttpStatus.NO_CONTENT);
            }

        } catch (Exception ex) {
            return new ResponseEntity<ExpedientePadron>(HttpStatus.NOT_FOUND);
        }
    }

    @RequestMapping(value = "printDifUbigeo/{codExpediente}", method = RequestMethod.GET)
    public void getPrintDifUbigeo(HttpServletRequest request, @PathVariable("codExpediente") int codExpediente,
            HttpServletResponse response) throws IOException {

        try {
            ServletContext sc = request.getSession().getServletContext();
            InputStream inStream = sc
                    .getResourceAsStream("/WEB-INF/jasper/ListaImpresion_no_pertenecientes_15.jasper");
            byte[] bytes = getByteVP(codExpediente, 1, 0, inStream);
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);
            outStream.flush();
            outStream.close();

        } catch (Exception ex) {
            Logger.getLogger(registroController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @RequestMapping(value = "printMismoUbigeo/{codExpediente}", method = RequestMethod.GET)
    public void getPrintMismoUbigeo(HttpServletRequest request, @PathVariable("codExpediente") int codExpediente,
            HttpServletResponse response) throws IOException {

        try {
            ServletContext sc = request.getSession().getServletContext();
            InputStream inStream = sc
                    .getResourceAsStream("/WEB-INF/jasper/ListaImpresion_pertenecientes_15.jasper");

            byte[] bytes = getByteVP(codExpediente, 0, 0, inStream);
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);
            outStream.flush();
            outStream.close();
        } catch (Exception ex) {
            Logger.getLogger(registroController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @RequestMapping(value = "printDifUbigeo2/{codExpediente}", method = RequestMethod.GET)
    public void getPrintDifUbigeo2(HttpServletRequest request, @PathVariable("codExpediente") int codExpediente,
            HttpServletResponse response) throws IOException {

        try {
            ServletContext sc = request.getSession().getServletContext();
            InputStream inStream = sc.getResourceAsStream("/WEB-INF/jasper/ListaImpresion_ubigeo.jasper");

            byte[] bytes = getByteVP(codExpediente, 1, 1, inStream);
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);
            outStream.flush();
            outStream.close();
        } catch (Exception ex) {
            Logger.getLogger(registroController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @RequestMapping(value = "getCompaginadosMUbigeo/{codExpediente}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<ExpedienteImpresion>> getCompaginadosMUbigeo(@PathVariable int codExpediente) {
        List<ExpedienteImpresion> result = new ArrayList<ExpedienteImpresion>();
        result = expedienteImpresionDAO.getCompaginados(codExpediente, Parametros.N_INDICADOR_MISMO_UBIGEO);
        return new ResponseEntity<List<ExpedienteImpresion>>(result, HttpStatus.OK);
    }

    @RequestMapping(value = "getCompaginadosDUbigeo/{codExpediente}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<ExpedienteImpresion>> getCompaginadosDUbigeo(@PathVariable int codExpediente) {
        List<ExpedienteImpresion> result = new ArrayList<ExpedienteImpresion>();
        result = expedienteImpresionDAO.getCompaginados(codExpediente, Parametros.N_INDICADOR_DIFERENTE_UBIGEO);
        return new ResponseEntity<List<ExpedienteImpresion>>(result, HttpStatus.OK);
    }

    @RequestMapping(value = "getElectoresByCompaginado/{codCompaginado}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<ExpedientePadron>> getElectoresByCompaginado(@PathVariable int codCompaginado) {
        ExpedienteImpresion expImpresion = new ExpedienteImpresion(codCompaginado);
        expImpresion = expedienteImpresionDAO.find(expImpresion);

        List<ExpedientePadron> result = new ArrayList<ExpedientePadron>();
        result = expedientePadronDAO.getByCompaginado(expImpresion);
        for (int i = 0; i < result.size(); i++) {
            result.get(i).setExpediente(new Expediente(result.get(i).getExpediente().getId()));
            result.get(i).setAmbito(new Ambito(result.get(i).getAmbito().getId()));
        }
        return new ResponseEntity<List<ExpedientePadron>>(result, HttpStatus.OK);
    }

    @RequestMapping(value = "getElectoresTodos/{codExpediente}/{indicador}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<ExpedientePadron>> getElectoresTodos(@PathVariable int codExpediente,
            @PathVariable int indicador) {
        Expediente expediente = new Expediente(codExpediente);

        List<ExpedientePadron> result = new ArrayList<ExpedientePadron>();
        result = expedientePadronDAO.getByExpedienteIndicador(expediente, indicador);
        for (ExpedientePadron ePadron : result) {
            ePadron.setExpediente(new Expediente(ePadron.getExpediente().getId()));
            ePadron.setAmbito(new Ambito(ePadron.getAmbito().getId()));
        }
        return new ResponseEntity<List<ExpedientePadron>>(result, HttpStatus.OK);

    }

    @RequestMapping(value = "getElectoresByRango/{codExpediente}/{indicador}/{rangoInicial}/{rangoFinal}", method = RequestMethod.GET)
    @ResponseBody
    public ResponseEntity<List<ExpedientePadron>> getElectoreByRango(@PathVariable int codExpediente,
            @PathVariable int indicador, @PathVariable int rangoInicial, @PathVariable int rangoFinal) {
        Expediente expediente = new Expediente(codExpediente);
        ExpedienteImpresion expImp = new ExpedienteImpresion(0);
        expImp.setExpediente(expediente);
        expImp.setIndicador(indicador);
        expImp.setRegistroInicial(rangoInicial);
        expImp.setResgitroFinal(rangoFinal);

        List<ExpedientePadron> result = new ArrayList<ExpedientePadron>();
        result = expedientePadronDAO.getByCompaginado(expImp);
        for (int i = 0; i < result.size(); i++) {
            result.get(i).setExpediente(new Expediente(result.get(i).getExpediente().getId()));
            result.get(i).setAmbito(new Ambito(result.get(i).getAmbito().getId()));
        }
        return new ResponseEntity<List<ExpedientePadron>>(result, HttpStatus.OK);
    }

    @RequestMapping(value = "generateFVDoc/{codExpediente}", method = RequestMethod.GET)
    public void generateFVDoc(HttpServletRequest request, @PathVariable("codExpediente") int codExpediente,
            HttpServletResponse response) {
        try {
            ServletContext sc = request.getSession().getServletContext();

            Expediente expediente = new Expediente(codExpediente);
            expediente = expedienteDAO.find(expediente);

            Ambito amb = new Ambito(expediente.getAmbito().getId());
            amb = ambitoDAO.find(amb);

            int totalElectoresRemitidos = expedientePadronDAO.getCountByExpediente(expediente);
            int totalElectoresIncorporados = expedientePadronDAO.getCountByExpedienteAndEstado(expediente,
                    Parametros.ESTADO_ELECTOR_ACTIVO);

            JsonParser jsonParser = new JsonParser();
            JsonObject jsonObject = (JsonObject) jsonParser.parse(amb.getInformacion());
            String nombre = jsonObject.get("nombres").toString() + " "
                    + jsonObject.get("apellidoPaterno").toString() + " "
                    + jsonObject.get("apellidoMaterno").toString();

            InputStream is = registroController.class.getResourceAsStream("/ejemplo.docx");
            XWPFDocument document = new XWPFDocument(is);

            XWPFHeaderFooterPolicy policy = document.getHeaderFooterPolicy();
            if (policy == null) {
                CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
                policy = new XWPFHeaderFooterPolicy(document, sectPr);
            }

            if (policy.getDefaultHeader() == null && policy.getFirstPageHeader() == null
                    && policy.getDefaultFooter() == null) {
                XWPFFooter footerD = policy.getFooter(1);// createFooter(policy.DEFAULT);
                XWPFRun run = footerD.getParagraphs().get(0).createRun();
                run.setText("usuario");
                XWPFParagraph paragraph = footerD.createParagraph();
                paragraph.setAlignment(ParagraphAlignment.DISTRIBUTE);
                run = paragraph.createRun();
                run.setFontFamily("Arial");
                run.setFontSize(8);
                run.setText(
                        "Jr.Washington N 1894, Cercado de Lima. Central Telefonica: 417-0630 www.onpe.gob.pe informes@onpe.gob.pe");

            }

            XWPFParagraph paragraph = document.createParagraph();

            XWPFRun run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.setText("Lima,");
            run.addBreak();

            paragraph = document.createParagraph();
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.setBold(true);
            run.setText("OFICIO N       -2016-GPP/ONPE");
            run.setUnderline(UnderlinePatterns.SINGLE);
            run.addBreak();

            paragraph = document.createParagraph();
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.setText("Seor");

            XWPFRun run1 = paragraph.createRun();
            run1.setFontSize(11);
            run1.setFontFamily("Arial");
            run1.setText(nombre.replace("\"", ""));
            run1.setBold(true);
            run1.addBreak();

            XWPFRun run2 = paragraph.createRun();
            run2.setFontSize(11);
            run2.setFontFamily("Arial");
            run2.setText(jsonObject.get("cargo").toString().replace("\"", ""));
            run2.addBreak();
            run2.setText("Centro Poblado " + amb.getNombreAmbito());
            run2.addBreak();
            run2.setText("Av. 28 de Julio S/N Centro Cvico Huacrachuco - Municipalidad Provincial de "
                    + amb.getProvincia());
            run2.addBreak();
            run2.setText(amb.getDepartamento() + " - " + amb.getProvincia() + " - " + amb.getDistrito());
            run2.addBreak();

            run2 = paragraph.createRun();
            run2.setFontSize(11);
            run2.setFontFamily("Arial");
            run2.setUnderline(UnderlinePatterns.WORDS);
            run2.setText("Presente");

            run2 = paragraph.createRun();
            run2.setFontSize(11);
            run2.setFontFamily("Arial");
            run2.setText(".-");

            paragraph = document.createParagraph();
            run.addBreak();
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.addBreak();
            run.setText("Asunto");
            run.addTab();
            run.addTab();
            run.setText(": SOLICITUD DE CREACIN DE MESA DE SUFRAGIO.");
            run.addBreak();

            paragraph = document.createParagraph();
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.setText("Referencia");
            run.addTab();
            run.setText(": OFICIO N 087-2016/M-CP.CHOCOBAMBA (16AGO2016) - Exp. " + expediente.getExpediente());
            run.addBreak();

            paragraph = document.createParagraph();
            paragraph.setAlignment(ParagraphAlignment.THAI_DISTRIBUTE);
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.setText(
                    "Me dirijo a usted con relacin al documento de la referencia con la finalidad de hacer de su "
                            + "conocimiento que se ha cumplido con todos los requisitos que dan inicio al trmite de "
                            + "instalacin de mesas de sufragio en el Centro Poblado " + amb.getNombreAmbito()
                            + ", distrito " + amb.getDistrito() + ", " + "provincia " + amb.getProvincia()
                            + ", departamento " + amb.getDepartamento() + ".");
            paragraph = document.createParagraph();
            paragraph.setAlignment(ParagraphAlignment.THAI_DISTRIBUTE);
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.addBreak();
            run.setText("Al respecto, el mencionado expediente contiene un listado de electores que solicitan ser "
                    + "parte de la mesa de sufragio de la localidad " + amb.getNombreAmbito()
                    + ", el cual, luego de la validacin " + "realizada, se informa que podrn ser incorporados "
                    + totalElectoresIncorporados + " electores del total de " + totalElectoresRemitidos
                    + " registros "
                    + "de electores remitidos. Se adjunta un cuadro resumen con las observaciones mencionadas.");
            paragraph = document.createParagraph();
            paragraph.setAlignment(ParagraphAlignment.THAI_DISTRIBUTE);
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.addBreak();
            run.setText(
                    "Asimismo, se programar un viaje para la verificacin de rutas, tiempos y servicios de la "
                            + "localidad, la cual se coordinar previamente con las autoridades del centro poblado a fin de "
                            + "programarla adecuadamente; luego de lo cual se emitir un informe de respuesta al "
                            + "resultado de la solicitud, que de ser positivo, conllevara a la instalacin de mesas de sufragio "
                            + "en el centro poblado en mencin, con miras a las ");
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.setBold(true);
            run.setText("Elecciones Regionales y Municipales de 2018.");
            paragraph = document.createParagraph();
            paragraph.setAlignment(ParagraphAlignment.THAI_DISTRIBUTE);
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.addBreak();
            run.setText("Finalmente, de requerir mayor informacin, agradeceremos se comunique con nosotros al "
                    + "telefono 417-0630 anexo 8484 o al 8481.");
            paragraph = document.createParagraph();
            paragraph.setAlignment(ParagraphAlignment.THAI_DISTRIBUTE);
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.addBreak();
            run.setText("Sin otro particular.");

            paragraph = document.createParagraph();
            paragraph.setAlignment(ParagraphAlignment.THAI_DISTRIBUTE);
            run = paragraph.createRun();
            run.setFontSize(11);
            run.setFontFamily("Arial");
            run.addBreak();
            run.addBreak();
            run.setText("Atentamente,");
            response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
            document.write(response.getOutputStream());
        } catch (Exception ex) {
            Logger.getLogger(registroController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @RequestMapping(value = "generarFichaVerificacion/{codExpediente}", method = RequestMethod.GET)
    public void generarFichaVerificacion(HttpServletRequest request,
            @PathVariable("codExpediente") int codExpediente, HttpServletResponse response) {
        try {

            ServletContext sc = request.getSession().getServletContext();
            InputStream inStream = sc.getResourceAsStream("/WEB-INF/jasper/ficha_verificacion.jasper");

            Expediente expediente = new Expediente(codExpediente);
            expediente = expedienteDAO.find(expediente);

            Ambito amb = new Ambito(expediente.getAmbito().getId());
            amb = ambitoDAO.find(amb);

            List<RElector> lstRElector = new ArrayList<RElector>();

            Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_2 = getNParametro(
                    Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_2,
                    Parametros.N_PARAM_PK_TAB_EXP_PADRON_OBSERVACION_2);
            lstRElector = getElectoresByObservacion(expediente, Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_2,
                    lstRElector);

            Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_3 = getNParametro(
                    Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_3,
                    Parametros.N_PARAM_PK_TAB_EXP_PADRON_OBSERVACION_3);
            lstRElector = getElectoresByObservacion(expediente, Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_3,
                    lstRElector);

            Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_5 = getNParametro(
                    Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_5,
                    Parametros.N_PARAM_PK_TAB_EXP_PADRON_OBSERVACION_5);
            lstRElector = getElectoresByObservacion(expediente, Parametros.N_PARAM_TAB_EXP_PADRON_OBSERVACION_5,
                    lstRElector);

            HashMap<String, Object> parameters = new HashMap();
            parameters.put("TITLE_REPORT", RaeConstants.N_TITLE_REPORT_OBS);
            parameters.put("CCPP", amb.getNombreAmbito());
            parameters.put("DISTRITO", amb.getDistrito());
            parameters.put("EXPEDIENTE", expediente.getExpediente());
            parameters.put("YEAR", expediente.getFechaExpediente().toString().substring(0, 4));
            byte[] bytes = PrintUtil.generarPdf(parameters, lstRElector, inStream);

            response.setContentLength(bytes.length);
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);
            outStream.flush();
            outStream.close();
        } catch (Exception ex) {
            Logger.getLogger(registroController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private List<RElector> getElectoresByObservacion(Expediente expediente, Parametro paramObservacion,
            List<RElector> lstRElector) {
        List<ExpedientePadron> lstElectores = expedientePadronDAO.getElectores(expediente,
                String.valueOf(paramObservacion.getCodigo()));
        for (int i = 0; i < lstElectores.size(); i++) {
            RElector elec = new RElector();
            elec.setOrdenRegistro(i + 1);
            elec.setObservacion(paramObservacion.getTitulo());
            elec.setApellidoPaterno(lstElectores.get(i).getApellidoPaterno());
            elec.setApellidoMaterno(lstElectores.get(i).getApellidoMaterno());
            elec.setNombre(lstElectores.get(i).getNombre());
            elec.setDocumentoIdentidad(lstElectores.get(i).getDni());
            elec.setSubsanarObservacion(paramObservacion.getObservacion());
            lstRElector.add(elec);
        }
        return lstRElector;
    }

    @RequestMapping(value = "reImprimir/{codExpediente}/{indicador}/{pageUbigeo}/{page}/{rInicio}/{rFinal}", method = RequestMethod.GET)
    public void reImprimir(HttpServletRequest request, @PathVariable("codExpediente") int codExpediente,
            @PathVariable("indicador") int indicador, @PathVariable("pageUbigeo") int pageUbigeo,
            @PathVariable("page") int page, @PathVariable("rInicio") int rInicio,
            @PathVariable("rFinal") int rFinal, HttpServletResponse response) throws IOException {

        try {

            ServletContext sc = request.getSession().getServletContext();
            InputStream inStream = null;

            if (pageUbigeo == Parametros.N_INDICADOR_DIFERENTE_UBIGEO) {
                inStream = sc.getResourceAsStream("/WEB-INF/jasper/ListaImpresion_ubigeo.jasper");
            } else {
                if (indicador == Parametros.N_INDICADOR_DIFERENTE_UBIGEO) {
                    inStream = sc.getResourceAsStream("/WEB-INF/jasper/ListaImpresion_no_pertenecientes_15.jasper");
                } else {
                    inStream = sc.getResourceAsStream("/WEB-INF/jasper/ListaImpresion_pertenecientes_15.jasper");
                }
            }

            Expediente expediente = new Expediente(codExpediente);
            expediente = expedienteDAO.find(expediente);

            ExpedienteImpresion expImp = null;
            if (page > 0) {
                expImp = new ExpedienteImpresion(page);
                expImp = expedienteImpresionDAO.find(expImp);
                page = expImp.getPagina() - 1;
            }

            expImp = new ExpedienteImpresion(0);
            expImp.setExpediente(expediente);
            expImp.setIndicador(indicador);
            expImp.setRegistroInicial(rInicio);
            expImp.setResgitroFinal(rFinal);

            List<ExpedientePadron> lstElectores = new ArrayList<ExpedientePadron>();
            lstElectores = expedientePadronDAO.getByCompaginado(expImp);

            HashMap<String, Object> parameters = new HashMap();
            parameters.put("ubigeo", expediente.getAmbito().getDepartamento() + " / "
                    + expediente.getAmbito().getProvincia() + " / " + expediente.getAmbito().getDistrito());
            parameters.put("lista", expediente.getAmbito().getUbigeo() + ": " + expediente.getExpediente());
            parameters.put("local", RaeConstants.SUBTITTLE_REPORT + expediente.getAmbito().getNombreAmbito());
            parameters.put("titulo", RaeConstants.N_TITLE_REPORT);
            parameters.put("pagina", page);

            List<RElector> lstElector = new ArrayList<RElector>();
            for (int i = 0; i < lstElectores.size(); i++) {
                RElector elec = new RElector();
                elec.setOrdenRegistro(lstElectores.get(i).getOrdenRegistro());
                elec.setDocumentoIdentidad(lstElectores.get(i).getDni());
                elec.setApellidoPaterno(lstElectores.get(i).getApellidoPaterno());
                elec.setApellidoMaterno(lstElectores.get(i).getApellidoMaterno());
                elec.setNombre(lstElectores.get(i).getNombre());
                if (indicador == Parametros.N_INDICADOR_DIFERENTE_UBIGEO) {
                    elec.setDistritoElector(
                            (ubigeoDAO.findByCodeUbigeo(lstElectores.get(i).getUbigeoElector())).getDescripcion());
                }

                lstElector.add(elec);
            }
            byte[] bytes = PrintUtil.generarPdf(parameters, lstElector, inStream);
            response.setContentType("application/pdf");
            response.setContentLength(bytes.length);
            //response.setHeader("Content-Disposition", "inline; filename=\\asghd.pdf");
            ServletOutputStream outStream = response.getOutputStream();
            outStream.write(bytes, 0, bytes.length);
            outStream.flush();
            outStream.close();

        } catch (Exception ex) {
            Logger.getLogger(registroController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    private byte[] getByteVP(int codExpediente, int indicador, int pageUbigeo, InputStream inStream)
            throws Exception {
        Expediente exped = new Expediente(codExpediente);
        exped = expedienteDAO.find(exped);

        int pageReport = 0;
        int ultPagina;
        int ultimoReg = 0;
        ultPagina = expedienteImpresionDAO.getCountPaginas(codExpediente, indicador);
        pageReport = ultPagina;
        ultimoReg = 0;

        if (ultPagina > 0) {
            ultimoReg = expedienteImpresionDAO.getRegistroFinal(codExpediente, indicador, ultPagina);
        }
        List<ExpedientePadron> lstElectores = (List<ExpedientePadron>) expedientePadronDAO
                .fetchByRangoInicialInd(exped, indicador, ultimoReg);

        List<RElector> lstElector = new ArrayList<RElector>();

        for (int i = 0; i < lstElectores.size(); i++) {
            RElector elec = new RElector();
            elec.setOrdenRegistro(lstElectores.get(i).getOrdenRegistro());
            elec.setDocumentoIdentidad(lstElectores.get(i).getDni());
            elec.setApellidoPaterno(lstElectores.get(i).getApellidoPaterno());
            elec.setApellidoMaterno(lstElectores.get(i).getApellidoMaterno());
            elec.setNombre(lstElectores.get(i).getNombre());
            if (indicador == Parametros.N_INDICADOR_DIFERENTE_UBIGEO && pageUbigeo == 1) {
                elec.setDistritoElector(
                        (ubigeoDAO.findByCodeUbigeo(lstElectores.get(i).getUbigeoElector())).getDescripcion());
            }

            lstElector.add(elec);
        }

        int countFaltantes = lstElectores.size();
        while (countFaltantes > 0) {
            int inicio = ultimoReg + 1;
            boolean reg = false;
            if (countFaltantes - 15 > 0) {
                ultPagina++;

                ExpedienteImpresion impresion = new ExpedienteImpresion();
                impresion.setRegistroInicial(inicio);
                impresion.setResgitroFinal(ultimoReg + 15);
                impresion.setIndicador(indicador);
                impresion.setPagina(ultPagina);
                impresion.setExpediente(exped);
                if (indicador == 1 && pageUbigeo == 1) {
                    expedienteImpresionDAO.saveDAO(impresion);
                }
                ultimoReg = +15;
                countFaltantes = countFaltantes - 15;
            } else {
                ultPagina++;

                ExpedienteImpresion impresion = new ExpedienteImpresion();
                impresion.setRegistroInicial(inicio);
                impresion.setResgitroFinal(ultimoReg + countFaltantes);
                impresion.setIndicador(indicador);
                impresion.setPagina(ultPagina);
                impresion.setExpediente(exped);
                if (indicador == 1 && pageUbigeo == 1) {
                    expedienteImpresionDAO.saveDAO(impresion);
                }
                countFaltantes = 0;
            }
        }

        HashMap<String, Object> parameters = new HashMap();
        parameters.put("ubigeo", exped.getAmbito().getDepartamento() + " / " + exped.getAmbito().getProvincia()
                + " / " + exped.getAmbito().getDistrito());
        parameters.put("lista", exped.getAmbito().getUbigeo() + ": " + exped.getExpediente());
        parameters.put("local", RaeConstants.SUBTITTLE_REPORT + exped.getAmbito().getNombreAmbito());
        parameters.put("titulo", RaeConstants.N_TITLE_REPORT);
        parameters.put("pagina", pageReport);
        //parameters.put("PATH_LOGO", pathLogo);      //parameters.put("urlLogo", BASE_URL_EMAIL_IMG + LOGO_ONPE_REPORTS);

        byte[] bytes = PrintUtil.generarPdf(parameters, lstElector, inStream);
        return bytes;
    }

    @RequestMapping("vistaPrevia")
    public String vistaPrevia() {
        return "registro/vistaPrevia";
    }

    private String addObservacion(String obs, int code) {
        if (obs.equals("")) {
            obs = obs + code;
        } else {
            obs = obs + "," + code;
        }
        return obs;
    }

    @RequestMapping("nuevoElector")
    public String modalElector() {
        return "registro/registroForm";
    }
}