package com.rjconsultores.ventaboletos.web.gui.controladores.impressaofiscal;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.media.AMedia;
import org.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioAnaliticoFinanceiro;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioAnaliticoVoucher;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioAnaliticoVoucherCancelados;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioECFReducaoZ;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.SaidaRelatorio;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.EstadoService;
import com.rjconsultores.ventaboletos.service.FiscalService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.ZipUtil;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalReducaoZVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalVO;
import com.rjconsultores.ventaboletos.web.utilerias.MaskUtil;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("busquedaImportacionFiscalController")
@Scope("prototype")
public class BusquedaImportacionFiscalController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = LogManager.getLogger(BusquedaImportacionFiscalController.class);

	@Autowired
	private DataSource dataSourceRead;
	@Autowired
	private FiscalService fiscalService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private EstadoService estadoService;

	private List<Empresa> lsEmpresa;
	private Datebox datInicial;
	private Datebox datFinal;
	private MyComboboxEstandar cmbEmpresa;
	private Checkbox chkArquivoTxt;
	private Checkbox chkArquivoXls;

	private Checkbox chkBoletoHist;

	private Button btnExeImportacionEcfRedZ;
	private Button btnExeImportacionEcf;
	private Button btnExeImportacionEcfCancelados;
	private Button btnExeImportacionReducaoZ;
	private Button btnExeImportacionManual;
	private Button btnExeImportacionNaoFiscal;
	private Button btnExeRelatorioFinanceiro;
	private Button btnExeRelatorioVoucher;
	private Button btnExeRelatorioPendenciaEcf;
	private Button btnExeRelatorioPendenciaReducaoZ;
	private Button btnExeRelatorioVoucherCancelados;

	private Boolean isExibirTipoGeracaoArquivo;
	private Boolean isExibirCompetencia;
	private boolean isExibirDatas;
	private Textbox txtCompetencia;

	private Combobox cmbEstado;
	private List<Estado> lsEstado;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresa = empresaService.obtenerTodos();

		lsEstado = new ArrayList<Estado>();
		Estado estadoTodos = new Estado(-1);
		estadoTodos.setNombestado("TODOS");
		lsEstado.add(estadoTodos);

		lsEstado.addAll(estadoService.obtenerTodos());

		super.doAfterCompose(comp);

		defineImportacao();
		aplicarMascara();
	}

	private void defineImportacao() {

		boolean isEcfRedZ = Executions.getCurrent().getArg().get("ECF_RED_Z") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("ECF_RED_Z");
		if (isEcfRedZ) {
			btnExeImportacionEcfRedZ.setVisible(true);
		} else {
			btnExeImportacionEcfRedZ.setVisible(false);
		}

		boolean isEcf = Executions.getCurrent().getArg().get("ECF") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("ECF");
		if (isEcf) {
			btnExeImportacionEcf.setVisible(true);
		} else {
			btnExeImportacionEcf.setVisible(false);
		}

		boolean isEcfCancel = Executions.getCurrent().getArg().get("ECF_CANCELADOS") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("ECF_CANCELADOS");
		if (isEcfCancel) {
			btnExeImportacionEcfCancelados.setVisible(true);
		} else {
			btnExeImportacionEcfCancelados.setVisible(false);
		}

		boolean isManual = Executions.getCurrent().getArg().get("MANUAL") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("MANUAL");
		if (isManual) {
			btnExeImportacionManual.setVisible(true);
		} else {
			btnExeImportacionManual.setVisible(false);
		}

		boolean isReducaoZ = Executions.getCurrent().getArg().get("REDUCAO_Z") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("REDUCAO_Z");
		if (isReducaoZ) {
			btnExeImportacionReducaoZ.setVisible(true);
		} else {
			btnExeImportacionReducaoZ.setVisible(false);
		}

		boolean isNaoFiscal = Executions.getCurrent().getArg().get("NAO_FISCAL") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("NAO_FISCAL");
		if (isNaoFiscal) {
			btnExeImportacionNaoFiscal.setVisible(true);
		} else {
			btnExeImportacionNaoFiscal.setVisible(false);
		}

		boolean isRelatorioFinanceiro = Executions.getCurrent().getArg().get("RELATORIO_FINANCEIRO") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("RELATORIO_FINANCEIRO");
		if (isRelatorioFinanceiro) {
			btnExeRelatorioFinanceiro.setVisible(true);
		} else {
			btnExeRelatorioFinanceiro.setVisible(false);
		}

		boolean isRelatorioVoucher = Executions.getCurrent().getArg().get("RELATORIO_VOUCHER") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("RELATORIO_VOUCHER");
		if (isRelatorioVoucher) {
			btnExeRelatorioVoucher.setVisible(true);
		} else {
			btnExeRelatorioVoucher.setVisible(false);
		}

		boolean isRelatorioPendenciaEcf = Executions.getCurrent().getArg().get("PENDENCIA_ECF") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("PENDENCIA_ECF");
		if (isRelatorioPendenciaEcf) {
			btnExeRelatorioPendenciaEcf.setVisible(true);
		} else {
			btnExeRelatorioPendenciaEcf.setVisible(false);
		}

		boolean isRelatorioPendenciaReducaoZ = Executions.getCurrent().getArg().get("PENDENCIA_REDUCAO_Z") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("PENDENCIA_REDUCAO_Z");
		if (isRelatorioPendenciaReducaoZ) {
			btnExeRelatorioPendenciaReducaoZ.setVisible(true);
		} else {
			btnExeRelatorioPendenciaReducaoZ.setVisible(false);
		}

		boolean isRelatorioVoucherCancelados = Executions.getCurrent().getArg().get("RELATORIO_VOUCHER_CANCELADOS") == null ? Boolean.FALSE : (Boolean) Executions.getCurrent().getArg().get("RELATORIO_VOUCHER_CANCELADOS");
		if (isRelatorioVoucherCancelados) {
			btnExeRelatorioVoucherCancelados.setVisible(true);
		} else {
			btnExeRelatorioVoucherCancelados.setVisible(false);
		}

		isExibirTipoGeracaoArquivo = (Boolean) Executions.getCurrent().getArg().get("ExibirTipoGeracaoArquivo");
		isExibirCompetencia = (Boolean) Executions.getCurrent().getArg().get("ExibirCompetencia");
		isExibirDatas = isExibirCompetencia != null ? !isExibirCompetencia : true;

	}

	@SuppressWarnings({ "unchecked" })
	public void onClick$btnExeImportacionEcfRedZ(Event ev) throws InterruptedException {

		Empresa empresa = null;
		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			empresa = (Empresa) itemEmpresa.getValue();
		}

		Estado estado = null;
		Comboitem itemEstado = cmbEstado.getSelectedItem();
		if (itemEstado != null) {
			estado = (Estado) itemEstado.getValue();
		}

		try {
			HashMap<String, Object> retorno = fiscalService.importacionFiscalECFValidaReducaoZ(datInicial.getValue(), datFinal.getValue(), empresa, estado, chkBoletoHist.isChecked());

			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("ecfInvalidos", (List<ImportacionFiscalVO>) retorno.get("ecfInvalidos"));
			parametros.put("redZInvalido", (List<ImportacionFiscalReducaoZVO>) retorno.get("redZInvalido"));
			parametros.put("inicio", datInicial.getValue());
			parametros.put("fim", datFinal.getValue());
			parametros.put("empresa", empresa.getNombempresa());

			RelatorioECFReducaoZ relatorio = new RelatorioECFReducaoZ(parametros, dataSourceRead.getConnection());
			final InputStream mediais = new ByteArrayInputStream(relatorio.getConteudo(SaidaRelatorio.PDF));
			AMedia conteudoRelatorioPDF = new AMedia("RelatorioECFReducaoZ" + ".pdf", "pdf", null, mediais);

			List<File> txts = (List<File>) retorno.get("arquivos");
			txts.add(inpuStreamToFile(conteudoRelatorioPDF.getStreamData(), "RelatorioECFReducaoZ_0", ".pdf"));

			downloadListaArquivos(txts);

		} catch (Exception e) {
			log.error("", e);
		}
	}

	private File inpuStreamToFile(InputStream in, String prefix, String suffix) {
		try {
			File tempFile = File.createTempFile(prefix, suffix);
			tempFile.deleteOnExit();
			FileOutputStream out = new FileOutputStream(tempFile);
			IOUtils.copy(in, out);
			return tempFile;
		} catch (IOException e) {
			log.error("", e);
		}
		return null;
	}

	public void onClick$btnExeImportacionManual(Event ev) throws InterruptedException {

		Empresa empresa = null;
		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			empresa = (Empresa) itemEmpresa.getValue();
		}

		Estado estado = null;
		Comboitem itemEstado = cmbEstado.getSelectedItem();
		if (itemEstado != null) {
			estado = (Estado) itemEstado.getValue();
		}

		try {
			File arquivoTxt = fiscalService.importacionFiscalECFManual(datInicial.getValue(), datFinal.getValue(), empresa, estado, chkBoletoHist.isChecked());
			File arquivoXls = null;
			if (chkArquivoXls.isChecked()) {
				arquivoXls = fiscalService.importacionFiscalECFManualXls(empresa, arquivoTxt);
			}
			downloadArquivo(arquivoTxt, arquivoXls);
		} catch (Exception e) {
			log.error("", e);
		}
	}

	public void onClick$btnExeImportacionEcfCancelados(Event ev) throws InterruptedException {

		Empresa empresa = null;
		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			empresa = (Empresa) itemEmpresa.getValue();
		}

		Estado estado = null;
		Comboitem itemEstado = cmbEstado.getSelectedItem();
		if (itemEstado != null) {
			estado = (Estado) itemEstado.getValue();
		}

		try {
			File arquivoTxt = fiscalService.importacionFiscalECFCancelados(datInicial.getValue(), datFinal.getValue(), empresa, estado, chkBoletoHist.isChecked());
			File arquivoXls = null;
			if (chkArquivoXls.isChecked()) {
				arquivoXls = fiscalService.importacionFiscalECFCanceladosXls(empresa, arquivoTxt);
			}
			downloadArquivo(arquivoTxt, arquivoXls);
		} catch (Exception e) {
			log.error("", e);
		}
	}

	public void onClick$btnExeImportacionEcf(Event ev) throws InterruptedException {

		Empresa empresa = null;
		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			empresa = (Empresa) itemEmpresa.getValue();
		}

		Estado estado = null;
		Comboitem itemEstado = cmbEstado.getSelectedItem();
		if (itemEstado != null) {
			estado = (Estado) itemEstado.getValue();
		}

		try {
			File arquivoTxt = fiscalService.importacionFiscalECF(datInicial.getValue(), datFinal.getValue(), empresa, estado, chkBoletoHist.isChecked());
			File arquivoXls = null;
			if (chkArquivoXls.isChecked()) {
				arquivoXls = fiscalService.importacionFiscalECFXls(empresa, arquivoTxt);
			}
			downloadArquivo(arquivoTxt, arquivoXls);
		} catch (Exception e) {
			log.error("", e);
		}
	}

	public void onClick$btnExeRelatorioPendenciaEcf(Event ev) throws InterruptedException {

		Empresa empresa = null;
		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			empresa = (Empresa) itemEmpresa.getValue();
		}

		Estado estado = null;
		Comboitem itemEstado = cmbEstado.getSelectedItem();
		if (itemEstado != null) {
			estado = (Estado) itemEstado.getValue();
		}

		try {
			File arquivoTxt = fiscalService.importacionFiscalECFPendencias(datInicial.getValue(), datFinal.getValue(), empresa, estado);
			File arquivoXls = null;
			// if (chkArquivoXls.isChecked()) {
			// arquivoXls = fiscalService.importacionFiscalECFXls(empresa, arquivoTxt);
			// }
			downloadArquivo(arquivoTxt, arquivoXls);
		} catch (Exception e) {
			log.error("", e);
		}
	}

	private void downloadListaArquivos(List<File> files) throws Exception {

		String extensao = ".zip";
		String contentType = "application/zip";
		File arquivoDownload = new File(System.getProperty("jboss.server.log.dir") + File.separator + "fiscal_" + DateUtil.getStringDate(Calendar.getInstance().getTime(), "yyyyMMddhhmm") + extensao);
		ZipUtil.compactarArquivos(arquivoDownload, files);
		InputStream isFile = new FileInputStream(arquivoDownload);
		String nomeArquivo = arquivoDownload.getName();

		Filedownload.save(isFile, contentType, nomeArquivo);

		if (arquivoDownload != null) {
			arquivoDownload.delete();
		}
	}

	private void downloadArquivo(File arquivoTxt, File arquivoXls) throws Exception {
		String contentType = null;
		String extensao = null;
		File arquivoDownload = null;
		InputStream isFile = null;
		String nomeArquivo = null;

		if (chkArquivoTxt.isChecked() && chkArquivoXls.isChecked()) {
			extensao = ".zip";
			contentType = "application/zip";
			arquivoDownload = new File(System.getProperty("jboss.server.log.dir") + File.separator + "fiscal_" + DateUtil.getStringDate(Calendar.getInstance().getTime(), "yyyyMMddhhmm") + extensao);
			ZipUtil.compactarArquivos(arquivoDownload, arquivoTxt, arquivoXls);
			isFile = new FileInputStream(arquivoDownload);
			nomeArquivo = arquivoDownload.getName();
		} else if (chkArquivoXls.isChecked()) {
			extensao = ".xls";
			contentType = "application/vnd.ms-excel";
			isFile = new FileInputStream(arquivoXls);
			nomeArquivo = arquivoXls.getName();
		} else if (chkArquivoTxt.isChecked()) {
			extensao = ".txt";
			contentType = "application/notepad";
			isFile = new FileInputStream(arquivoTxt);
			nomeArquivo = arquivoTxt.getName();
		}

		Filedownload.save(isFile, contentType, nomeArquivo);

		if (arquivoTxt != null) {
			arquivoTxt.delete();
		}
		if (arquivoDownload != null) {
			arquivoDownload.delete();
		}
		if (arquivoXls != null) {
			arquivoXls.delete();
		}
	}

	public void onClick$btnExeRelatorioPendenciaReducaoZ(Event ev) throws InterruptedException {

		Empresa empresa = null;
		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			empresa = (Empresa) itemEmpresa.getValue();
		}

		Estado estado = null;
		Comboitem itemEstado = cmbEstado.getSelectedItem();
		if (itemEstado != null) {
			estado = (Estado) itemEstado.getValue();
		}

		try {
			File arquivoTxt = fiscalService.importacionFiscalReducaoZPendencia(datInicial.getValue(), datFinal.getValue(), empresa, estado);
			File arquivoXls = null;
			// if (chkArquivoXls.isChecked()) {
			// arquivoXls = fiscalService.importacionFiscalReducaoZXls(empresa, arquivoTxt);
			// }
			downloadArquivo(arquivoTxt, arquivoXls);
			/*
			 * File arquivo = fiscalService.importacionFiscalReducaoZ(datInicial.getValue(), datFinal.getValue(), empresa); InputStream is = new FileInputStream(arquivo); Filedownload.save(is, "application/notepad", "fiscal_reducao_z" + DateUtil.getStringDate(Calendar.getInstance().getTime(), "yyyyMMddhhmm") + ".txt"); arquivo.delete();
			 */
		} catch (Exception e) {
			log.error("", e);
		}

	}

	public void onClick$btnExeImportacionReducaoZ(Event ev) throws InterruptedException {

		Empresa empresa = null;
		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			empresa = (Empresa) itemEmpresa.getValue();
		}

		Estado estado = null;
		Comboitem itemEstado = cmbEstado.getSelectedItem();
		if (itemEstado != null) {
			estado = (Estado) itemEstado.getValue();
		}

		try {
			File arquivoTxt = fiscalService.importacionFiscalReducaoZ(datInicial.getValue(), datFinal.getValue(), empresa, estado);
			File arquivoXls = null;
			if (chkArquivoXls.isChecked()) {
				arquivoXls = fiscalService.importacionFiscalReducaoZXls(empresa, arquivoTxt);
			}
			downloadArquivo(arquivoTxt, arquivoXls);
			/*
			 * File arquivo = fiscalService.importacionFiscalReducaoZ(datInicial.getValue(), datFinal.getValue(), empresa); InputStream is = new FileInputStream(arquivo); Filedownload.save(is, "application/notepad", "fiscal_reducao_z" + DateUtil.getStringDate(Calendar.getInstance().getTime(), "yyyyMMddhhmm") + ".txt"); arquivo.delete();
			 */
		} catch (Exception e) {
			log.error("", e);
		}

	}

	public void onClick$btnExeImportacionNaoFiscal(Event ev) throws InterruptedException {
		try {
			Empresa empresa = null;
			Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
			if (itemEmpresa != null) {
				empresa = (Empresa) itemEmpresa.getValue();
			}

			Estado estado = null;
			Comboitem itemEstado = cmbEstado.getSelectedItem();
			if (itemEstado != null) {
				estado = (Estado) itemEstado.getValue();
			}

			File arquivoTxt = fiscalService.importacionNaoFiscal(datInicial.getValue(), datFinal.getValue(), empresa, estado);
			File arquivoXls = null;
			if (chkArquivoXls.isChecked()) {
				arquivoXls = fiscalService.importacionNaoFiscalXls(empresa, arquivoTxt);
			}
			downloadArquivo(arquivoTxt, arquivoXls);

		} catch (Exception e) {
			log.error("", e);
		}
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void onClick$btnExeRelatorioFinanceiro(Event ev) throws InterruptedException {
		try {
			Empresa empresa = null;
			Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
			if (itemEmpresa != null) {
				empresa = (Empresa) itemEmpresa.getValue();
			}

			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("inicio", datInicial.getValue());
			parametros.put("fim", datFinal.getValue());
			parametros.put("empresa", empresa);

			RelatorioAnaliticoFinanceiro relatorio = new RelatorioAnaliticoFinanceiro(parametros, dataSourceRead.getConnection());

			Map args = new HashMap();
			args.put("relatorio", relatorio);

			openWindow("/component/reportView.zul",
					Labels.getLabel("busquedaImportacionFiscalRelatorioFinanceiroController.window.title"), args, MODAL);

		} catch (SQLException e) {
			log.error(e.getMessage(), e);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void onClick$btnExeRelatorioVoucherCancelados(Event ev) throws InterruptedException {
		try {
			Empresa empresa = null;
			Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
			if (itemEmpresa != null) {
				empresa = (Empresa) itemEmpresa.getValue();
			}

			txtCompetencia.getValue();
			if (!DateUtil.isCompetenciaValida(txtCompetencia.getValue())) {
				Messagebox.show(Labels.getLabel("MSG.Error.invalida.competencia"),
						Labels.getLabel("busquedaImportacionFiscalRelatorioVoucherController.window.title"),
						Messagebox.OK, Messagebox.ERROR);

				return;
			}

			Date dataInicial = DateUtil.getDataInicialCompetencia(txtCompetencia.getValue());
			Date dataFinal = DateUtil.getDataFinalCompetencia(txtCompetencia.getValue());

			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("competencia", txtCompetencia.getValue());
			parametros.put("inicio", dataInicial);
			parametros.put("fim", dataFinal);
			parametros.put("empresa", empresa);
			parametros.put("nombempresa", empresa.getNombempresa());

			RelatorioAnaliticoVoucherCancelados relatorio = new RelatorioAnaliticoVoucherCancelados(parametros, dataSourceRead.getConnection());

			Map args = new HashMap();
			args.put("relatorio", relatorio);

			openWindow("/component/reportView.zul",
					Labels.getLabel("busquedaImportacionFiscalRelatorioVoucherCanceladosController.window.title"), args, MODAL);

		} catch (SQLException e) {
			log.error(e.getMessage(), e);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void onClick$btnExeRelatorioVoucher(Event ev) throws InterruptedException {
		try {
			Empresa empresa = null;
			Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
			if (itemEmpresa != null) {
				empresa = (Empresa) itemEmpresa.getValue();
			}

			txtCompetencia.getValue();
			if (!DateUtil.isCompetenciaValida(txtCompetencia.getValue())) {
				Messagebox.show(Labels.getLabel("MSG.Error.invalida.competencia"),
						Labels.getLabel("busquedaImportacionFiscalRelatorioVoucherController.window.title"),
						Messagebox.OK, Messagebox.ERROR);

				return;
			}

			Date dataInicial = DateUtil.getDataInicialCompetencia(txtCompetencia.getValue());
			Date dataFinal = DateUtil.getDataFinalCompetencia(txtCompetencia.getValue());

			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("competencia", txtCompetencia.getValue());
			parametros.put("inicio", dataInicial);
			parametros.put("fim", dataFinal);
			parametros.put("empresa", empresa);
			parametros.put("nombempresa", empresa.getNombempresa());

			RelatorioAnaliticoVoucher relatorio = new RelatorioAnaliticoVoucher(parametros, dataSourceRead.getConnection());

			Map args = new HashMap();
			args.put("relatorio", relatorio);

			openWindow("/component/reportView.zul",
					Labels.getLabel("busquedaImportacionFiscalRelatorioVoucherController.window.title"), args, MODAL);

		} catch (SQLException e) {
			log.error(e.getMessage(), e);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
	}

	public List<Empresa> getLsEmpresa() {
		return lsEmpresa;
	}

	public Checkbox getChkArquivoTxt() {
		return chkArquivoTxt;
	}

	public void setChkArquivoTxt(Checkbox chkArquivoTxt) {
		this.chkArquivoTxt = chkArquivoTxt;
	}

	public Checkbox getChkArquivoXls() {
		return chkArquivoXls;
	}

	public void setChkArquivoXls(Checkbox chkArquivoXls) {
		this.chkArquivoXls = chkArquivoXls;
	}

	public Boolean isExibirTipoGeracaoArquivo() {
		return isExibirTipoGeracaoArquivo;
	}

	public Boolean isExibirCompetencia() {
		return isExibirCompetencia;
	}

	public Boolean isExibirDatas() {
		return isExibirDatas;
	}

	public void aplicarMascara() {
		MaskUtil.aplicarMascara(txtCompetencia.getUuid(), "99/9999");
	}

	public List<Estado> getLsEstado() {
		return lsEstado;
	}

}
