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

import java.sql.Connection;
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.lang.StringUtils;
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.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Row;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.api.Datebox;

import com.rjconsultores.ventaboletos.entidad.Constante;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.exception.ComissaoException;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioCalculoComissao;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioCalculoComissaoAnalitico;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioReciboComissao;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.SaidaRelatorio;
import com.rjconsultores.ventaboletos.service.CalculoComissaoService;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.CustomEnum;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.vo.comissao.HistoricoComissao;
import com.rjconsultores.ventaboletos.vo.comissao.RegistroCalculo;
import com.rjconsultores.ventaboletos.web.utilerias.MaskUtil;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.wsag.GeradorTitulosAG;

@Scope("prototype")
@Controller("busquedaCalculoComissaoController")
public class BusquedaCalculoComissaoController extends MyGenericForwardComposer {

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

	@Autowired
	private CalculoComissaoService calculoComissaoService;

	@Autowired
	private DataSource dataSourceRead;

	@Autowired
	private DataSource dataSource;
	
	@Autowired
	private ConstanteService constanteService;
	
	private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;
	private List<PuntoVenta> lsPuntoVenta;
	private MyComboboxPuntoVenta cmbPuntoVenta;
	private Textbox txtCompetencia;
	private Checkbox chkIgnorarGerados;
	private Datebox datInicial;
	private Datebox datFinal;
	
	private Row rowCompetencia;
	private Row rowDatas;
	private Row rowTipoData;
	private Radio rdTipoMesAno;
	private Radio rdTipoDataInicialFinal;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		txtCompetencia.focus();
		aplicarMascara();
		rowTipoData.setVisible(ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.IS_PERMITE_CALCULO_COMISSAO_PERIODO.getDescricao()));

		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		lsPuntoVenta = new ArrayList<PuntoVenta>();
	}

	public void onClick$btnApagar(Event ev) throws SQLException, InterruptedException {
		txtCompetencia.getValue();
		
		try {
			if(verificarCampos()) {
				PuntoVenta puntoVenta = (PuntoVenta) (cmbPuntoVenta.getSelectedItem() != null ? cmbPuntoVenta.getSelectedItem().getValue() : null);
				Empresa empresa = (Empresa) (cmbEmpresa.getSelectedItem() != null ? cmbEmpresa.getSelectedItem().getValue() : null);

				if(isCalculoComissaoPeriodo()) {
					apagarCalculoComissaoPeriodo(puntoVenta, empresa, datInicial.getValue(), datFinal.getValue());
				} else {
					String competencia = txtCompetencia.getValue();
					Date periodo = DateUtil.getDateFromString("01/"+competencia, "dd/MM/yyyy");
					apagarCalculoComissaoCompetencia(puntoVenta, empresa, periodo);
				}
	
				Messagebox.show(
						Labels.getLabel("busquedaCalculoComissaoController.comissao.msg"),
						Labels.getLabel("busquedaCalculoComissaoController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}

		} catch (ComissaoException ce) {
			Messagebox.show(ce.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		} catch (Exception e) {
			log.error("", e);
			Messagebox.show(e.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}

	}

	/**
	 * Exclui o calculo de comissao por periodo
	 * @param puntoVenta
	 * @param empresa
	 * @param dataInicial
	 * @param dataFinal
	 * @throws BusinessException 
	 * @throws ComissaoException 
	 */
	private void apagarCalculoComissaoPeriodo(PuntoVenta puntoVenta, Empresa empresa, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException {
		if(puntoVenta != null && puntoVenta.getPuntoventaId() > -1) {
			calculoComissaoService.cancelarCalculoComissaoPeriodo(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), dataInicial, dataFinal);
		} else {
			calculoComissaoService.cancelarCalculoComissaoPeriodo(empresa.getEmpresaId(), dataInicial, dataFinal);
		}
	}

	/**
	 * Exclui o calculo de comissao por competencia
	 * @param puntoVenta
	 * @param empresa
	 * @param periodo
	 * @throws ComissaoException
	 * @throws BusinessException 
	 */
	private void apagarCalculoComissaoCompetencia(PuntoVenta puntoVenta, Empresa empresa, Date periodo) throws ComissaoException, BusinessException {
		if(puntoVenta != null && puntoVenta.getPuntoventaId() > -1) {
			calculoComissaoService.cancelarCalculoComissao(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), periodo);
		} else {
			calculoComissaoService.cancelarCalculoComissao(empresa.getEmpresaId(), periodo);
		}
	}
	
	private boolean verificarCampos() throws Exception {
		if(!isCalculoComissaoPeriodo() && !DateUtil.isCompetenciaValida(txtCompetencia.getValue())) {
			Messagebox.show(Labels.getLabel("MSG.Error.invalida.competencia"),
							Labels.getLabel("busquedaCalculoComissaoController.window.title"),
							Messagebox.OK, Messagebox.ERROR);
			
			return false;
		}
		if(isCalculoComissaoPeriodo() && (datInicial.getValue() == null || datFinal.getValue() == null)) {
			Messagebox.show(Labels.getLabel("MSG.Error.invalida.dataInicialOuDataFinalNaoInformada"),
					Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
	
			return false;
		} else if(isCalculoComissaoPeriodo() && datInicial.getValue() != null && datFinal.getValue() != null) {
			if(datInicial.getValue().after(datFinal.getValue())){
				Messagebox.show(Labels.getLabel("MSG.Error.invalida.dataInicialDepoisDataFinal"),
						Labels.getLabel("busquedaCalculoComissaoController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
				return false;
			}
			
			Calendar cal = Calendar.getInstance();
			cal.setTime(datInicial.getValue());
			int monthInicial = cal.get(Calendar.MONTH);
			int yearInicial = cal.get(Calendar.YEAR);
			
			cal.setTime(datFinal.getValue());
			int monthFinal = cal.get(Calendar.MONTH);
			int yearFinal = cal.get(Calendar.YEAR);
			
			if(monthInicial != monthFinal || yearFinal != yearInicial){
				Messagebox.show(Labels.getLabel("MSG.Error.invalida.dataInicialFinalMesDiferente"),
						Labels.getLabel("busquedaCalculoComissaoController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
				return false;
			}
		}
		return true;
	}

	public void onClick$btnRelatorio(Event ev) throws SQLException, InterruptedException {
		txtCompetencia.getValue();

		try {
			
			if(verificarCampos()) {
				PuntoVenta puntoVenta = (PuntoVenta) (cmbPuntoVenta.getSelectedItem() != null ? cmbPuntoVenta.getSelectedItem().getValue() : null);
				Empresa empresa = (Empresa) (cmbEmpresa.getSelectedItem() != null ? cmbEmpresa.getSelectedItem().getValue() : null);
				
				String competencia = null;
				Date periodo = null;
				Date dataInicial = null;
				Date dataFinal = null;
				if(isCalculoComissaoPeriodo()) {
					dataInicial = datInicial.getValue();
					dataFinal = datFinal.getValue();
				} else {
					competencia = txtCompetencia.getValue();
					periodo = DateUtil.getDateFromString("01/"+competencia, "dd/MM/yyyy");
				}
	
				String subReport = "/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCalculoComissaoReceitas.jasper";
	
				Map<String, Object> parametros = new HashMap<String, Object>();
				parametros.put("empresa", empresa.getNombempresa());
				parametros.put("subReport", subReport);
				
				Relatorio relatorio = null;
				if(isCalculoComissaoPeriodo()) {
					relatorio = gerarRelatorioCalculoComissaoPeriodo(empresa, puntoVenta, parametros, dataInicial, dataFinal);
				} else {
					parametros.put("competencia", competencia);
					relatorio = gerarRelatorioCalculoComissaoCompetencia(empresa, puntoVenta, parametros, periodo);
				}

				Map<String, Relatorio> args = new HashMap<String, Relatorio>();
				args.put("relatorio", relatorio);
	
				openWindow("/component/reportView.zul",
						Labels.getLabel("busquedaCalculoComissaoController.window.title"), args, MODAL);
			
			}

		} catch (ComissaoException ce) {
			log.error(ce.getMessage(), ce);
			Messagebox.show(ce.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		} catch (Exception e) {
			log.error(e.getMessage(), e);
			Messagebox.show(e.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}

	}

	private Boolean isCalculoComissaoPeriodo() {
		return rdTipoDataInicialFinal != null ? rdTipoDataInicialFinal.isChecked() : false;
	}

	/**
	 * Gera o relatorio de comissao por periodo
	 * @param empresa
	 * @param puntoVenta
	 * @param parametros
	 * @param dataInicial
	 * @param dataFinal
	 * @return
	 * @throws BusinessException 
	 * @throws ComissaoException 
	 * @throws SQLException 
	 */
	private Relatorio gerarRelatorioCalculoComissaoPeriodo(Empresa empresa, PuntoVenta puntoVenta, Map<String, Object> parametros, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException, SQLException {
		StringBuilder sDataInicialEDataFinal = new StringBuilder();
		sDataInicialEDataFinal.append(DateUtil.getStringDate(dataInicial, "dd/MM/yyyy"))
							  .append(" ")
							  .append(Labels.getLabel("lb.ate"))
							  .append(" ")
							  .append(DateUtil.getStringDate(dataFinal, "dd/MM/yyyy"));
		parametros.put("dataInicialEDataFinal", sDataInicialEDataFinal.toString());
		
		if(puntoVenta != null && puntoVenta.getPuntoventaId() > -1) {
			RegistroCalculo rc = calculoComissaoService.relatorioCalculoComissao(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false, dataInicial, dataFinal);
			parametros.put("puntoventa", puntoVenta.getNombpuntoventa());
			parametros.put("registroCalculo", rc);
			return new RelatorioCalculoComissao(parametros, dataSourceRead.getConnection(), "RelatorioCalculoComissaoReceitas");
		} else {
			List<RegistroCalculo> registrosCalculo = calculoComissaoService.relatorioCalculoComissao(empresa.getEmpresaId(), null, dataInicial, dataFinal, UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false);
			parametros.put("puntoventa", "Todas");
			parametros.put("registrosCalculo", registrosCalculo);
			return new RelatorioCalculoComissaoAnalitico(parametros, dataSourceRead.getConnection());
		}
		
	}

	/**
	 * Gera o relatorio de comissao por competencia
	 * @param empresa
	 * @param puntoVenta
	 * @param parametros
	 * @param periodo
	 * @return
	 * @throws ComissaoException
	 * @throws BusinessException
	 * @throws SQLException
	 */
	private Relatorio gerarRelatorioCalculoComissaoCompetencia(Empresa empresa, PuntoVenta puntoVenta, Map<String, Object> parametros, Date periodo) throws ComissaoException, BusinessException, SQLException {
		if(puntoVenta != null && puntoVenta.getPuntoventaId() > -1) {
			RegistroCalculo rc = calculoComissaoService.relatorioCalculoComissao(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), periodo, UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false);
			parametros.put("puntoventa", puntoVenta.getNombpuntoventa());
			parametros.put("registroCalculo", rc);
			return new RelatorioCalculoComissao(parametros, dataSourceRead.getConnection(), "RelatorioCalculoComissaoReceitas");
		} else {
			parametros.put("puntoventa", "Todas");
			List<RegistroCalculo> registrosCalculo = calculoComissaoService.relatorioCalculoComissao(empresa.getEmpresaId(), periodo, null, null, UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false);
			parametros.put("registrosCalculo", registrosCalculo);
			return new RelatorioCalculoComissaoAnalitico(parametros, dataSourceRead.getConnection());
		}
	}

	public void onClick$btnRegistrar(Event ev) throws InterruptedException {
		txtCompetencia.getValue();
		
		PuntoVenta puntoVenta = (PuntoVenta) (cmbPuntoVenta.getSelectedItem() != null ? cmbPuntoVenta.getSelectedItem().getValue() : null);
		Empresa empresa = (Empresa) (cmbEmpresa.getSelectedItem() != null ? cmbEmpresa.getSelectedItem().getValue() : null);

		try {
			if(verificarCampos()) {
				String competencia = null;
				Date periodo = null;
				Date dataInicial = null;
				Date dataFinal = null;
				if(isCalculoComissaoPeriodo()) {
					dataInicial = datInicial.getValue();
					dataFinal = datFinal.getValue();
				} else {
					competencia = txtCompetencia.getValue();
					periodo = DateUtil.getDateFromString("01/"+competencia, "dd/MM/yyyy");
				}
				
				if(isCalculoComissaoPeriodo()) {
					registrarComissaoPeriodo(puntoVenta, empresa, dataInicial, dataFinal);
				} else {
					registrarComissaoCompetencia(puntoVenta, empresa, periodo);
				}
				
				Constante empresasIntegraAG = constanteService.buscarPorNomeConstante("EMPRESAS_INTEGRACAO_AG");
				if (empresasIntegraAG != null && empresasIntegraAG.getValorconstante() != null && empresasIntegraAG.getValorconstante().contains(empresa.getEmpresaId().toString())) {
					log.debug("iniciando integração com AG");
					
					Connection myConn = dataSource.getConnection();
					
					Date dateInicio = null;
					Date dateFim = null;
	
					if(isCalculoComissaoPeriodo()) {
						dateInicio = DateUtil.inicioFecha(dataInicial);
						dateFim = DateUtil.fimFecha(dataFinal);
					} else {
						dateInicio = DateUtil.inicioFecha(periodo);
						dateFim = DateUtil.fimFecha(new Date());
					}
	
					GeradorTitulosAG gerador = new GeradorTitulosAG(myConn, dateInicio, dateFim);
					gerador.setEmpresaId(puntoVenta.getEmpresa().getEmpresaId());
					gerador.execute(puntoVenta.getPuntoventaId(), false, false, false, false, true);
					gerador.send(false, false, false, false, true);
					
					log.debug("fim da integração com AG");					
				}
				Messagebox.show(
						Labels.getLabel("busquedaCalculoComissaoController.registro.comissao.msg"),
						Labels.getLabel("busquedaCalculoComissaoController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
		} catch (ComissaoException ce) {
			Messagebox.show(ce.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		} catch (Exception e) {
			log.error("", e);
			Messagebox.show(e.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}

	}

	/**
	 * Registrar comissao por periodo
	 * @param puntoVenta
	 * @param empresa
	 * @param dataInicial
	 * @param dataFinal
	 * @throws ComissaoException
	 */
	private void registrarComissaoPeriodo(PuntoVenta puntoVenta, Empresa empresa, Date dataInicial, Date dataFinal) throws ComissaoException {
		if(puntoVenta != null && puntoVenta.getPuntoventaId() > -1) {
			calculoComissaoService.registrarCalculoComissaoPeriodo(puntoVenta, empresa, chkIgnorarGerados.isChecked(), UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false, dataInicial, dataFinal);
		} else {
			calculoComissaoService.registrarCalculoComissaoPeriodo(empresa, chkIgnorarGerados.isChecked(), UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false, dataInicial, dataFinal);
		}
	}

	/**
	 * Registrar comissao por competencia
	 * @param puntoVenta
	 * @param empresa
	 * @param periodo
	 * @throws ComissaoException
	 */
	private void registrarComissaoCompetencia(PuntoVenta puntoVenta, Empresa empresa, Date periodo) throws ComissaoException {
		if(puntoVenta != null && puntoVenta.getPuntoventaId() > -1) {
			calculoComissaoService.registrarCalculoComissao(puntoVenta, empresa, periodo, chkIgnorarGerados.isChecked(), UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false);
		} else {
			calculoComissaoService.registrarCalculoComissao(empresa, periodo, chkIgnorarGerados.isChecked(), UsuarioLogado.getUsuarioLogado().getUsuarioId(), false, false);
		}
	}
	
	public void onClick$btnGerarReciboComissao(Event ev) throws SQLException, InterruptedException {
		txtCompetencia.getValue();

		try {
			
			if(verificarCampos()) {
				processarRecibo(false);
			}

		} catch (ComissaoException ce) {
			Messagebox.show(ce.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		} catch (Exception e) {
			log.error("", e);
			Messagebox.show(e.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}

	}

	public void onClick$btnEnviarEmailReciboComissao(Event ev) throws SQLException, InterruptedException {
		txtCompetencia.getValue();
		
		try {
			
			if(verificarCampos()) {
				processarRecibo(true);
			}
			
		} catch (ComissaoException ce) {
			Messagebox.show(ce.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
			
		} catch (Exception e) {
			log.error("", e);
			Messagebox.show(e.getMessage(), Labels.getLabel("busquedaCalculoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
		
	}
	
	private void processarRecibo(boolean enviarEmail) throws Exception {
		
		if(verificarCampos()) {
			PuntoVenta puntoVenta = (PuntoVenta) (cmbPuntoVenta.getSelectedItem() != null ? cmbPuntoVenta.getSelectedItem().getValue() : null);
			Empresa empresa = (Empresa) (cmbEmpresa.getSelectedItem() != null ? cmbEmpresa.getSelectedItem().getValue() : null);
			String competencia = txtCompetencia.getValue();
	
			Map<String, Object> parametros = new HashMap<String, Object>();
			List<HistoricoComissao> recibos = null;
			if(isCalculoComissaoPeriodo()) {
				recibos = calculoComissaoService.relatorioReciboComissao(puntoVenta != null ? puntoVenta.getPuntoventaId() : null, empresa.getEmpresaId(), datInicial.getValue(), datFinal.getValue());
			} else {
				recibos = calculoComissaoService.relatorioReciboComissao(puntoVenta != null ? puntoVenta.getPuntoventaId() : null, empresa.getEmpresaId(), competencia);
			}
	
			if(enviarEmail && !recibos.isEmpty()) {
				boolean isEmailEnviado = true;
				for (HistoricoComissao comissao : recibos) {
					if(StringUtils.isNotBlank(comissao.getDescCorreo())) {
						List<HistoricoComissao> recibosEmail = new ArrayList<HistoricoComissao>();
						recibosEmail.add(comissao);
						parametros.put("recibos", recibosEmail);
						Relatorio relatorio = new RelatorioReciboComissao(parametros, dataSourceRead.getConnection());
						isEmailEnviado = calculoComissaoService.enviarEmailReciboComissao(comissao, relatorio.getConteudo(SaidaRelatorio.PDF));
					} else {
						isEmailEnviado = false;
					}
					
					if(!isEmailEnviado) {
						Messagebox.show(
								Labels.getLabel("busquedaCalculoComissaoController.recibo.email.naoEnvio", new Object[] {comissao.getNombpuntoventa()}),
								Labels.getLabel("busquedaCalculoComissaoController.window.title"),
								Messagebox.OK, Messagebox.EXCLAMATION);
					}
				}
				
				if(isEmailEnviado) {
					Messagebox.show(
							Labels.getLabel("busquedaCalculoComissaoController.recibo.email.msg"),
							Labels.getLabel("busquedaCalculoComissaoController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
				}
			} else {
				parametros.put("recibos", recibos);
				Relatorio relatorio = new RelatorioReciboComissao(parametros, dataSourceRead.getConnection());
				Map<String, Relatorio> args = new HashMap<String, Relatorio>();
				args.put("relatorio", relatorio);
		
				openWindow("/component/reportView.zul",
					Labels.getLabel("relatorioAcompanhamentoEquivalentesController.window.title"), args, MODAL);
			}
		}
	}

	public void aplicarMascara() {
		MaskUtil.aplicarMascara(txtCompetencia.getUuid(), "99/9999");
	}
	
	public void onCheck$rdTipoMesAno() {
		if (rdTipoMesAno.isChecked()) {
			controlRowVisibility(false, true);
		}
	}

	public void onCheck$rdTipoDataInicialFinal() {
		if (rdTipoDataInicialFinal.isChecked()) {
			controlRowVisibility(true, false);
		}
	}
	
	private void controlRowVisibility(Boolean dataInicialFinal, Boolean mesAno) {
		rowDatas.setVisible(dataInicialFinal);
		rowDatas.setVisible(dataInicialFinal);
		rowCompetencia.setVisible(mesAno);
		txtCompetencia.setVisible(mesAno);
		datInicial.setVisible(dataInicialFinal);
		datFinal.setVisible(dataInicialFinal);

		if (mesAno) {
			txtCompetencia.setConstraint("no empty");
			datInicial.setConstraint("");
			datFinal.setConstraint("");
			datInicial.setValue(null);
			datFinal.setValue(null);
		} else {
			txtCompetencia.setConstraint("");
			datInicial.setConstraint("no empty");
			datFinal.setConstraint("no empty");
			txtCompetencia.setValue(null);
		}
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

	public List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}

	public List<PuntoVenta> getLsPuntoVenta() {
		return lsPuntoVenta;
	}

	public void setLsPuntoVenta(List<PuntoVenta> lsPuntoVenta) {
		this.lsPuntoVenta = lsPuntoVenta;
	}

	public MyComboboxPuntoVenta getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(MyComboboxPuntoVenta cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}

}
