/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.catalogos;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Connection;
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 java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.activation.MimetypesFileTypeMap;
import javax.sql.DataSource;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.UiException;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.UploadEvent;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zkplus.databind.BindingListModel;
import org.zkoss.zkplus.databind.BindingListModelList;
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.Doublebox;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Image;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.api.Timebox;

import com.rjconsultores.ventaboletos.constantes.Constantes;
import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.Ciudad;
import com.rjconsultores.ventaboletos.entidad.Colonia;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.EmpresaContaBancaria;
import com.rjconsultores.ventaboletos.entidad.FechamentoParamptovta;
import com.rjconsultores.ventaboletos.entidad.FormaPago;
import com.rjconsultores.ventaboletos.entidad.FormaPagoDet;
import com.rjconsultores.ventaboletos.entidad.InstiFinanceira;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.Nodo;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.ParamRecoleccion;
import com.rjconsultores.ventaboletos.entidad.PerfilFuncion;
import com.rjconsultores.ventaboletos.entidad.PtoVtaCheckin;
import com.rjconsultores.ventaboletos.entidad.PtoVtaSeguro;
import com.rjconsultores.ventaboletos.entidad.PtoVtaUsuarioBancario;
import com.rjconsultores.ventaboletos.entidad.PtovtaAgencia;
import com.rjconsultores.ventaboletos.entidad.PtovtaAntecipacomissao;
import com.rjconsultores.ventaboletos.entidad.PtovtaCatInd;
import com.rjconsultores.ventaboletos.entidad.PtovtaComissao;
import com.rjconsultores.ventaboletos.entidad.PtovtaDiversos;
import com.rjconsultores.ventaboletos.entidad.PtovtaEmpresa;
import com.rjconsultores.ventaboletos.entidad.PtovtaEmpresaBloqueada;
import com.rjconsultores.ventaboletos.entidad.PtovtaEstoque;
import com.rjconsultores.ventaboletos.entidad.PtovtaHorario;
import com.rjconsultores.ventaboletos.entidad.PtovtaTitular;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.entidad.UsuarioBancario;
import com.rjconsultores.ventaboletos.entidad.UsuarioPerfil;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.exception.IntegracionException;
import com.rjconsultores.ventaboletos.exception.ValidacionCampoException;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.ColoniaService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.FechamentoParamptovtaService;
import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.InstiFinanceiraService;
import com.rjconsultores.ventaboletos.service.MonedaService;
import com.rjconsultores.ventaboletos.service.NodoService;
import com.rjconsultores.ventaboletos.service.PtoVtaCheckinService;
import com.rjconsultores.ventaboletos.service.PtoVtaSeguroService;
import com.rjconsultores.ventaboletos.service.PtoVtaUsuarioBancarioService;
import com.rjconsultores.ventaboletos.service.PtovtaCatIndService;
import com.rjconsultores.ventaboletos.service.PtovtaComissaoService;
import com.rjconsultores.ventaboletos.service.PtovtaEmpresaBloqueadaService;
import com.rjconsultores.ventaboletos.service.PtovtaEmpresaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.service.TipoPuntoVentaService;
import com.rjconsultores.ventaboletos.service.UsuarioBancarioService;
import com.rjconsultores.ventaboletos.service.UsuarioService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.gui.controladores.configuracioneccomerciales.FechamentoParamptovtaListItemRenderer;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.render.FormaPagoDetRender;
import com.rjconsultores.ventaboletos.web.utilerias.render.ParamRecoleccionRender;
import com.rjconsultores.ventaboletos.web.utilerias.render.PtovtaAntecipacomissaoRender;
import com.rjconsultores.ventaboletos.web.utilerias.render.PtovtaEmpresaRender;
import com.rjconsultores.ventaboletos.web.utilerias.render.PtovtaEstoqueRender;
import com.rjconsultores.ventaboletos.web.utilerias.render.PtovtaHorarioRender;
import com.rjconsultores.ventaboletos.web.utilerias.render.PtovtaUsuarioBancarioRender;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderEmpresaBloquear;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderParadaPtoVtaCheckin;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtoVtaSeguro;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtovtaCatInd;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPtovtaComissao;
import com.rjconsultores.ws.totvs.service.GeradorTitulosIntegracion;
import com.rjconsultores.ws.totvs.service.GerenciadorEnvioTitulosWS;
import com.rjconsultores.ws.utileria.RetornoTotvs.TipoRetorno;

/**
 * 
 * @author Rafius
 */
@Controller("editarPuntoVentaController")
@Scope("prototype")
public class EditarPuntoVentaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(EditarPuntoVentaController.class);
	public static final String FUNCION_TIPO_BOLETO_BLOQUEADO = "COM.RJCONSULTORES.ADMINISTRACION.PUNTOVENTA.TIPOBOLETOBLOQUEADO";

	@Autowired
	private PuntoVentaService puntoVentaService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private TipoPuntoVentaService tipoPuntoVentaService;
	@Autowired
	private MonedaService monedaService;
	@Autowired
	private InstiFinanceiraService ptovtaBancoService;
	@Autowired
	private NodoService nodoService;
	@Autowired
	private FormaPagoService formaPagoService;
	@Autowired
	private ColoniaService coloniaService;
	@Autowired
	private PtovtaEmpresaService ptovtaEmpresaService;
	@Autowired
	private PtoVtaUsuarioBancarioService ptoVtaUsuarioBancarioService;
	@Autowired
	private UsuarioBancarioService usuarioBancarioService;
	@Autowired
	private PtovtaComissaoService ptovtaComissaoService;
	@Autowired
	private PtovtaEmpresaBloqueadaService ptovtaEmpresaBloqueadaService;
	@Autowired
	private PtoVtaCheckinService ptoVtaCheckinService;
	@Autowired
	private PtoVtaSeguroService ptoVtaSeguroService;
	@Autowired
	private CategoriaService categoriaService;
	@Autowired
	private PtovtaCatIndService ptovtaCatIndService;
	@Autowired
	private UsuarioService usuarioService;
	@Autowired
	private FechamentoParamptovtaService fechamentoParamptovtaService;

	private PuntoVenta puntoVenta;
	private Textbox txtCP;
	private MyListbox puntoVentaList;
	private MyListbox paramRecoleccionList;
	private MyListbox formaPagoList;
	private MyListbox ptovtaEmpresaList;
	private MyListbox ptovtaEmpresasBloqueadasList;
	private MyListbox ptovtaPtoVtaCheckinList;
	private MyListbox ptovtaPtoVtaSeguroList;
	private MyListbox ptovtaUsuarioBancarioList;
	private MyListbox ptovtaAntecipaList;
	private MyListbox ptovtaHorarioList;
	private MyListbox ptovtaEstoqueList;
	private MyListbox ptovtaComissaoList;
	private MyListbox ptovtaCatIndList;
	private MyListbox fechamentoParamptovtaList;
	private MyTextbox txtDiasemtransito;

	private List<Categoria> lsCategoriaBloquear;

	private List<Empresa> lsEmpresasBloquear;
	private List<Empresa> lsEmpresas;
	private List<Empresa> lsEmpresasFormapago;
	private List<EmpresaContaBancaria> lsEmpresaContaBancarias;
	private List<InstiFinanceira> lsBanco;
	private List<TipoPuntoVenta> lsTipoPuntoVenta;
	private List<Moneda> lsMoneda;
	private List<Colonia> lsColonia;
	private List<Nodo> lsNodos;
	private List<FormaPago> lsFormaPago;
	private List<FormaPagoDet> lsFormaPagoDet;
	private List<ParamRecoleccion> lsParamRecoleccion;
	private List<UsuarioBancario> lsUsuarioBancario;
	private List<PtovtaEmpresa> lsPtovtaEmpresa;
	private List<PtoVtaUsuarioBancario> lsPtovtaUsuarioBancario;
	private List<PtovtaAntecipacomissao> lsAntecipacomissao;
	private List<PtovtaHorario> lsHorario;
	private List<Empresa> lsEmpresaComissao;
	private List<PtovtaEstoque> lsEstoque;
	private List<PtovtaComissao> lsPtovtaComissao;
	private List<String> lsLogFiles;
	private Radio radDatosTarjetaSi;
	private Radio radDatosTarjetaNo;
	private Radio radAprobacionAutorizado;
	private Radio radAprobacionLatente;
	private Radio radIndvendsegopcionalSi;
	private Radio radIndvendsegopcionalNo;
	private Radio radIndestansegopcionalSi;
	private Radio radIndestansegopcionalNo;
	private Radio radIntervalofechamentoDiario;
	private Radio radIntervalofechamentoSemanal;
	private Radio radIntervalofechamentoDecendial;
	private Radio radIntervalofechamentoQuinzenal;
	private Radio radIntervalofechamentoMensal;
	private Radio radTotvsSi;
	private Radio radTotvsNo;
	private Radio radTotvsErro;

	private Button btnAdicionarEmpresaComissao;
	private MyComboboxPuntoVenta cmbPuntoVentaPadre;
	private Combobox cmbFormaPago;
	private Combobox cmbEmpresaFormaPago;
	private Combobox cmbEmpresa;
	private Combobox cmbEmpresaPtoVta;
	private Combobox cmbEmpresaPtoVtaUsuarioBancario;
	private Combobox cmbParada;
	private Combobox cmbPtoVtaCheckinParada;
	private Combobox cmbEmpresaSeguro;
	private Combobox cmbTipoPontoVenta;
	private Combobox cmbMoneda;
	private Combobox cmbNodo;
	private Combobox cmbBanco;
	private Combobox cmbPessoa;
	private Combobox cmbTipoConta;
	private Combobox cmbForm;
	private Combobox cmbLote;
	private Combobox cmbCiudad;
	private Combobox cmbColonia;
	private Combobox cmbConexion;
	private Combobox cmbUsuarioBancario;
	private Combobox cmbUsuarioBancarioPtoVtaUsuarioBancario;
	private Combobox cmbPosicao;
	private Combobox cmbReceita;
	private Combobox cmbEmpresaComissao;
	private Combobox cmbEmpresas;
	private MyComboboxEstandar cmbEmpresasContaBancarias;
	private Combobox cmbCategorias;
	private Combobox cmbEmpresaFechamentoParamptovta;
	private Combobox cmbLogFiles;
	private Button btnSalvarFormaPago;
	private Button btnApagar;
	private Button btnShowLog;
	private Doublebox txtCargosExtras;
	private MyTextbox txtNome;
	private MyTextbox txtNumFax;
	private MyTextbox txtCompl;
	private MyTextbox txtNumAg;
	private MyTextbox txtDigitoAg;
	private MyTextbox txtConta;
	private MyTextbox txtDigito;
	private MyTextbox txtBilhetes;
	private MyTextbox txtCarga;
	private MyTextbox txtEspecie;
	private MyTextbox txtTitularNome;
	private MyTextbox txtTitularCpf;
	private MyTextbox txtTitularRg;
	private MyTextbox txtTitularEmissor;
	private MyTextbox txtResponAluguel;
	private MyTextbox txtResponTel;
	private MyTextbox txtResponEnergia;
	private MyTextbox txtNumDoCPuntoVenta;
	private MyTextbox txtRazonSocial;
	private MyTextboxDecimal importeInicial;
	private MyTextboxDecimal importeAdicional;
	private Datebox dateAntecipData;
	private MyTextboxDecimal txtAntecipRetem;
	private MyTextboxDecimal txtAntecipPercentual;
	private Image img;
	private Timebox timeboxInicio;
	private Timebox timeboxFim;
	private Intbox txtQuant;
	private Intbox txtcodAg;
	private Intbox txtMaxCancelacion;
	private Textbox txtNumPtoVta;
	private Textbox txtNomeBanco;
	private Textbox numtelefonodos;
	private Textbox numtelefonouno;
	private Checkbox checkInformatizada;
	private Checkbox checkBilheteInfo;
	private Checkbox checkVendaInternet;
	private Checkbox checkTeleEntrega;
	private Checkbox checkDigitacao;
	private Checkbox checkBilhete;
	private Checkbox checkOfpsPropria;
	private Checkbox checkOfpsTerceiros;
	private Checkbox checkStock;
	private Radio radIndEstanTasaEmbarqueSi;
	private Radio radIndEstanTasaEmbarqueNo;
	private Radio radIndPermisoTasaEmbarqueSi;
	private Radio radIndPermisoTasaEmbarqueNo;
	private Checkbox checkPtoVtaEmpresaIndTerceirizada;
	private Checkbox checkPtoVtaEmpresaIndBloqueada;
	private Checkbox checkPtoVtaEmpresaIndMostrarCaja;
	private Textbox txtNumeroSitef;
	private Checkbox ckIsento;
	private Checkbox checkSimulaIntegracion;
	private Checkbox checkTodosPuntosVenta;
	private Checkbox checkDinheiro;
	private Checkbox checkCredito;
	private Checkbox checkDebito;
	private Checkbox checkTF;
	private Checkbox checkBOL;
	private MyTextbox txtNumIEPuntoVenta;
	private Datebox fecIntegracion;
	private Textbox logResult;
	private boolean integracionTotvs;

	private String logFileSelected;
	
	private static final int TAMANHO_BUFFER = 4096; // 4kb
	
	@Autowired
	private DataSource dataSource;

	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}

	public void aplicarMascara() {
		Clients.evalJavaScript(
				"jQuery('#" + txtNumFax.getUuid() + "').mask('(999)9999-9999?9');" +
				"jQuery('#" + numtelefonodos.getUuid() + "').mask('(999)9999-9999?9');" +
				"jQuery('#" + numtelefonouno.getUuid() + "').mask('(999)9999-9999?9');")
				;
	}

	private List<String> getLogFiles(){
		List<String> files = new ArrayList<String>();
		File logDir = new File(System.getProperty("jboss.server.log.dir"));	
		for (String str : logDir.list()){
			if (str.contains("ws") && !str.contains("zip")){
				files.add(str);
			}
		}
		return files;
	}
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsCategoriaBloquear = categoriaService.obtenerTodasCategoriasVisibles();
		lsEmpresasBloquear = empresaService.obtenerTodos();
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		lsMoneda = monedaService.obtenerTodos();
		lsBanco = ptovtaBancoService.obtenerTodos();
		lsColonia = new ArrayList<Colonia>();
		lsNodos = nodoService.obtenerTodos();
		
		lsFormaPago = formaPagoService.obtenerTodos();
		lsEmpresasFormapago = new ArrayList<Empresa>();
		lsEmpresasFormapago.add(empresaService.obtenerID(-1));
		lsEmpresasFormapago.addAll(UsuarioLogado.getUsuarioLogado().getEmpresa());
		
		lsTipoPuntoVenta = tipoPuntoVentaService.obtenerTodosExceto(TipoPuntoVenta.TODOS);
		lsUsuarioBancario = usuarioBancarioService.obtenerTodos();
		lsLogFiles = getLogFiles();		
		puntoVenta = (PuntoVenta) Executions.getCurrent().getArg().get("puntoVenta");
			
		super.doAfterCompose(comp);
		
		cmbBanco.addEventListener("onAfterRender", new org.zkoss.zk.ui.event.EventListener(){			   
			   public void onEvent(Event event) throws Exception{		
				   cmbBanco.setSelectedIndex(lsBanco.indexOf(puntoVenta.getAgenciaId().getInstiFinanceiraId())); 					  
			   }
		});
		
		aplicarMascara();
		
		popularCombobox(cmbTipoConta, cmbPessoa, cmbForm, cmbLote, cmbPosicao, cmbReceita, cmbEmpresas, cmbCategorias);

		ptovtaEmpresasBloqueadasList.setItemRenderer(new RenderEmpresaBloquear());
		ptovtaPtoVtaCheckinList.setItemRenderer(new RenderParadaPtoVtaCheckin());
		ptovtaPtoVtaSeguroList.setItemRenderer(new RenderPtoVtaSeguro());
		ptovtaCatIndList.setItemRenderer(new RenderPtovtaCatInd());

		ptovtaComissaoList.setItemRenderer(new RenderPtovtaComissao());
		ptovtaComissaoList.addEventListener("onDoubleClick", new EventListener() {
			@Override
			public void onEvent(Event event) throws Exception {
				PtovtaComissao ptovtaComissao = (PtovtaComissao) ptovtaComissaoList.getSelected();
				abrirPtovtaComissao(ptovtaComissao);
			}
		});

		try {
//			txtCP.setDisabled(true);
			
			
			fechamentoParamptovtaList.setItemRenderer(new FechamentoParamptovtaListItemRenderer());
			if (puntoVenta.getPuntoventaId() != null) {

				puntoVenta = puntoVentaService.obtenerID(puntoVenta.getPuntoventaId());
				lsEmpresaComissao = empresaService.buscarNotInPuntoVtaComissao(puntoVenta);

				lsPtovtaComissao = ptovtaComissaoService.buscarByPuntaVenta(puntoVenta);

				btnAdicionarEmpresaComissao.setDisabled(false);
				ptovtaComissaoList.setData(lsPtovtaComissao);

				ptovtaEmpresasBloqueadasList.setData(puntoVenta.getPtovtaEmpresaBloqueadaList());
				ptovtaPtoVtaCheckinList.setData(puntoVenta.getPtovtaCheckinList());
				ptovtaPtoVtaSeguroList.setData(puntoVenta.getPtovtaSeguroList());
				ptovtaCatIndList.setData(puntoVenta.getPtovtaCatIndList());

				if (puntoVenta.getColonia() != null) {
					cmbCiudad.setText(puntoVenta.getColonia().getCiudad().getNombciudad());
					cmbColonia.setText(puntoVenta.getColonia().getDesccolonia());
				}
				if (puntoVenta.getIndValidaStock() != null) {
					if (puntoVenta.getIndValidaStock()) {
						checkStock.setChecked(true);
					} else {
						checkStock.setChecked(false);
					}
				}
				if (puntoVenta.getNumfax() != null) {
					txtNumFax.setValue(puntoVenta.getNumfax());
				}
				if (puntoVenta.getNumtelefonouno() != null) {
					numtelefonouno.setValue(puntoVenta.getNumtelefonouno());
				}
				if (puntoVenta.getNumtelefonodos() != null) {
					numtelefonodos.setValue(puntoVenta.getNumtelefonodos());
				}
				if (puntoVenta.getNumDoCPuntoVenta() != null) {
					txtNumDoCPuntoVenta.setValue(puntoVenta.getNumDoCPuntoVenta());
				}
				if (puntoVenta.getRazonSocial() != null) {
					txtRazonSocial.setValue(puntoVenta.getRazonSocial());
				}

				
				List<FechamentoParamptovta> params = fechamentoParamptovtaService.buscaParametrosPorPuntoventa(puntoVenta);
				fechamentoParamptovtaList.setData(params);
			}

			puntoVentaList = (MyListbox) Executions.getCurrent().getArg().get("puntoVentaList");

			if (puntoVenta.getPuntoventaId() != null) {
				if (puntoVenta.getStatusaprobacion() != null) {
					if (puntoVenta.getStatusaprobacion().equals("A")) {
						radAprobacionAutorizado.setChecked(true);
					} else if (puntoVenta.getStatusaprobacion().equals("L")) {
						radAprobacionLatente.setChecked(true);
					}
				}
			}

			if (puntoVenta.getPuntoventaId() != null) {
				if (puntoVenta.getAgenciaId() != null) {

					if (puntoVenta.getAgenciaId().getInstiFinanceiraId() != null) {					
						txtNomeBanco.setText(puntoVenta.getAgenciaId().getInstiFinanceiraId().getCodigo());
					}

					if (puntoVenta.getAgenciaId().getPessoa() != null) {
						if (puntoVenta.getAgenciaId().getPessoa().equals("F")) {
							cmbPessoa.setSelectedIndex(0);
						} else if (puntoVenta.getAgenciaId().getPessoa().equals("J")) {
							cmbPessoa.setSelectedIndex(1);
						}
					}

					if (puntoVenta.getAgenciaId().getTipo() != null) {
						if (puntoVenta.getAgenciaId().getTipo().equals("CC")) {
							cmbTipoConta.setSelectedIndex(0);
						} else if (puntoVenta.getAgenciaId().getTipo().equals("P")) {
							cmbTipoConta.setSelectedIndex(1);
						}
					}

				} else {
					puntoVenta.setAgenciaId(new PtovtaAgencia());
				}
			}

			if (puntoVenta.getPuntoventaId() != null) {
				if (puntoVenta.getIndIntegracion() != null) {

					if (puntoVenta.getIndIntegracion().equals(TipoRetorno.CONCLUIDA.getValor())) {
						radTotvsSi.setChecked(true);
					} else if (puntoVenta.getIndIntegracion().equals(TipoRetorno.JA_CADASTRADA.getValor())) {
						radTotvsNo.setChecked(true);
					} else if (puntoVenta.getIndIntegracion().equals(TipoRetorno.ERRO.getValor())) {
						radTotvsErro.setChecked(true);
					}
				}
				if (puntoVenta.getNumIEPuntoVenta() != null) {
					if (puntoVenta.getNumIEPuntoVenta().equals("ISENTO")) {
						ckIsento.setChecked(true);
						txtNumIEPuntoVenta.setDisabled(true);
					}
				}

				try {
					String agencia = puntoVenta.getAgenciaId() == null ? "" : puntoVenta.getAgenciaId().getNumagencia();
					String[] agenciaComp = agencia == null ? null : agencia.split("-");
					txtNumAg.setValue(agencia == null ? "" : agenciaComp[0]);
					txtDigitoAg.setValue(agencia == null ? "" : agenciaComp[1]);
				} catch (Exception e) {
				}
			}

			if (puntoVenta.getPuntoventaId() != null) {
				if (puntoVenta.getDiversosId() != null) {
					if (puntoVenta.getDiversosId().getInformatizada() != null) {
						if (puntoVenta.getDiversosId().getInformatizada()) {
							checkInformatizada.setChecked(true);
						} else {
							checkInformatizada.setChecked(false);
						}
					}

					if (puntoVenta.getDiversosId().getBilheteInfo() != null) {
						if (puntoVenta.getDiversosId().getBilheteInfo()) {
							checkBilheteInfo.setChecked(true);
						} else {
							checkBilheteInfo.setChecked(false);
						}
					}

					if (puntoVenta.getDiversosId().getPosicao() != null) {
						if (puntoVenta.getDiversosId().getPosicao().equals("FEL")) {
							cmbPosicao.setSelectedIndex(0);
						} else if (puntoVenta.getDiversosId().getPosicao().equals("EL")) {
							cmbPosicao.setSelectedIndex(1);
						}
					}

					if (puntoVenta.getDiversosId().getVendaInternet() != null) {
						if (puntoVenta.getDiversosId().getVendaInternet()) {
							checkVendaInternet.setChecked(true);
						} else {
							checkVendaInternet.setChecked(false);
						}
					}

					if (puntoVenta.getDiversosId().getTeleEntrega() != null) {
						if (puntoVenta.getDiversosId().getTeleEntrega()) {
							checkTeleEntrega.setChecked(true);
						} else {
							checkTeleEntrega.setChecked(false);
						}
					}

					if (puntoVenta.getDiversosId().getDigitacaoSeq() != null) {
						if (puntoVenta.getDiversosId().getDigitacaoSeq()) {
							checkDigitacao.setChecked(true);
						} else {
							checkDigitacao.setChecked(false);
						}
					}

					if (puntoVenta.getDiversosId().getTrabalhaBilhete() != null) {
						if (puntoVenta.getDiversosId().getTrabalhaBilhete()) {
							checkBilhete.setChecked(true);
						} else {
							checkBilhete.setChecked(false);
						}
					}

					if (puntoVenta.getDiversosId().getOfpsPropria() != null) {
						if (puntoVenta.getDiversosId().getOfpsPropria()) {
							checkOfpsPropria.setChecked(true);
						} else {
							checkOfpsPropria.setChecked(false);
						}
					}

					if (puntoVenta.getDiversosId().getOfpsTerceiros() != null) {
						if (puntoVenta.getDiversosId().getOfpsTerceiros()) {
							checkOfpsTerceiros.setChecked(true);
						} else {
							checkOfpsTerceiros.setChecked(false);
						}
					}

				} else {
					puntoVenta.setDiversosId(new PtovtaDiversos());
				}
			}

			if (puntoVenta.getPuntoventaId() != null) {
				if (puntoVenta.getTitularId() != null) {
					if (puntoVenta.getTitularId().getImagem() != null) {
						img.setContent(new org.zkoss.image.AImage("imagem",
								puntoVenta.getTitularId().getImagem()));
					}
				} else {
					puntoVenta.setTitularId(new PtovtaTitular());
				}
			}

			formaPagoList.setItemRenderer(new FormaPagoDetRender());
			if (puntoVenta.getLsFormaPagoDet() == null) {
				puntoVenta.setLsFormaPagoDet(new ArrayList<FormaPagoDet>());
			}
			lsFormaPagoDet = puntoVenta.getLsFormaPagoDet();
			formaPagoList.setData(lsFormaPagoDet);

			paramRecoleccionList.setItemRenderer(new ParamRecoleccionRender());
			if (puntoVenta.getLsParamRecoleccion() == null) {
				puntoVenta.setLsParamRecoleccion(new ArrayList<ParamRecoleccion>());
			}

			lsParamRecoleccion = puntoVenta.getLsParamRecoleccion();
			paramRecoleccionList.setData(lsParamRecoleccion);

			ptovtaEmpresaList.setItemRenderer(new PtovtaEmpresaRender());

			if (puntoVenta.getLsPtovtaEmpresa() == null) {
				puntoVenta.setLsPtovtaEmpresa(new ArrayList<PtovtaEmpresa>());
			}

			lsPtovtaEmpresa = puntoVenta.getLsPtovtaEmpresa();
			ptovtaEmpresaList.setData(lsPtovtaEmpresa);

			ptovtaAntecipaList.setItemRenderer(new PtovtaAntecipacomissaoRender());
			if (puntoVenta.getPtovtaAntecipacomissaoList() == null) {
				puntoVenta.setPtovtaAntecipacomissaoList(new ArrayList<PtovtaAntecipacomissao>());
			}

			lsAntecipacomissao = puntoVenta.getPtovtaAntecipacomissaoList();
			ptovtaAntecipaList.setData(lsAntecipacomissao);

			ptovtaHorarioList.setItemRenderer(new PtovtaHorarioRender());
			if (puntoVenta.getPtovtaHorarioList() == null) {
				puntoVenta.setPtovtaHorarioList(new ArrayList<PtovtaHorario>());
			}

			lsHorario = puntoVenta.getPtovtaHorarioList();
			ptovtaHorarioList.setData(lsHorario);

			ptovtaEstoqueList.setItemRenderer(new PtovtaEstoqueRender());
			if (puntoVenta.getPtovtaEstoqueList() == null) {
				puntoVenta.setPtovtaEstoqueList(new ArrayList<PtovtaEstoque>());
			}

			lsEstoque = puntoVenta.getPtovtaEstoqueList();
			ptovtaEstoqueList.setData(lsEstoque);

			ptovtaUsuarioBancarioList.setItemRenderer(new PtovtaUsuarioBancarioRender());
			if (puntoVenta.getLsPtovtaUsuarioBancario() == null) {
				puntoVenta.setLsPtovtaUsuarioBancario(new ArrayList<PtoVtaUsuarioBancario>());
			}

			lsPtovtaUsuarioBancario = puntoVenta.getLsPtovtaUsuarioBancario();
			ptovtaUsuarioBancarioList.setData(lsPtovtaUsuarioBancario);

			if (puntoVenta.getPuntoventaId() == null) {
				btnApagar.setVisible(Boolean.FALSE);
			} else {
				if (puntoVenta.getParada() != null) {
					cmbParada.setText(puntoVenta.getParada().getDescparada());
				}
			}

		} catch (Exception e) {
			log.error("Punto de Venta: ", e);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarEmpresaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
		txtNome.focus();
	}

    public void onClick$btnDownload(Event event) {
    	String fileName = System.getProperty("jboss.server.log.dir") + "/" + cmbLogFiles.getSelectedItem().getValue().toString();
    	String fileZip = System.getProperty("jboss.server.log.dir") + "/" + cmbLogFiles.getSelectedItem().getValue().toString().replace("log", "zip");
    	FileInputStream inputStream;
    	try {
    		excluirArquivosZip();
    		compactarArquivo(fileZip, fileName);
    		File file = new File(fileZip);
            if (file.exists()) {
                inputStream = new FileInputStream(file);
                Filedownload.save(inputStream, new MimetypesFileTypeMap().getContentType(file), file.getName());
            }
            file.delete();    		
		} catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    private String readFile(String fileName) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        try {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                sb.append(line);
                sb.append("\n");
                line = br.readLine();
            }
            return sb.toString();
        } finally {
            br.close();
        }
    }
	
	@Transactional
	public boolean validaFuncionTipoBoletoBloqueado() {
		List<String> listClavesPermisos = new ArrayList<String>();

		Usuario usuarioLogado = usuarioService.obtenerID(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		List<UsuarioPerfil> listUsuarioPerfil = usuarioLogado.getUsuarioPerfilList();
		for (UsuarioPerfil up : listUsuarioPerfil) {
			List<PerfilFuncion> listPerfilFuncion = up.getPerfil().getPerfilFuncionList();
			for (PerfilFuncion pf : listPerfilFuncion) {
				listClavesPermisos.add(pf.getFuncionSistema().getDescruta());
			}
		}

		if (listClavesPermisos.contains(FUNCION_TIPO_BOLETO_BLOQUEADO)) {
			return true;
		}

		return false;
	}

	public void clearCombobox(Combobox combobox) {

		int size = combobox.getItemCount();

		for (int i = size - 1; i >= 0; i--) {
			combobox.removeItemAt(i);
		}
	}

	public void popularCombobox(Combobox cmbConta, Combobox cmbPessoa, Combobox cmbForm, Combobox cmbLote, Combobox cmbPosicao, Combobox cmbReceita, Combobox cmbEmpresas, Combobox cmbCategorias) throws Exception {

		clearCombobox(cmbConta);
		clearCombobox(cmbPessoa);
		clearCombobox(cmbForm);
		clearCombobox(cmbLote);
		clearCombobox(cmbPosicao);
		clearCombobox(cmbEmpresas);
		clearCombobox(cmbCategorias);

		for (Empresa e : lsEmpresasBloquear) {
			Comboitem comboItem = new Comboitem(e.getNombempresa());
			comboItem.setValue(e);
			comboItem.setParent(cmbEmpresas);
		}

		for (PtovtaAgencia.enumTipoConta p : PtovtaAgencia.enumTipoConta.values()) {
			Comboitem comboItem = new Comboitem(p.descricao());
			comboItem.setValue(p.valor());
			comboItem.setParent(cmbConta);
		}

		for (PtovtaAgencia.enumTipoPessoa p : PtovtaAgencia.enumTipoPessoa.values()) {
			Comboitem comboItem = new Comboitem(p.descricao());
			comboItem.setValue(p.valor());
			comboItem.setParent(cmbPessoa);
		}

		for (PtovtaEstoque.gerarEnum p : PtovtaEstoque.gerarEnum.values()) {
			Comboitem comboItem = new Comboitem(p.descricao());
			comboItem.setValue(p.valor());
			comboItem.setParent(cmbLote);
		}

		for (PtovtaEstoque.gerarEnum p : PtovtaEstoque.gerarEnum.values()) {
			Comboitem comboItem = new Comboitem(p.descricao());
			comboItem.setValue(p.valor());
			comboItem.setParent(cmbForm);
		}

		for (PtovtaDiversos.gerarEnum p : PtovtaDiversos.gerarEnum.values()) {
			Comboitem comboItem = new Comboitem(p.descricao());
			comboItem.setValue(p.valor());
			comboItem.setParent(cmbPosicao);
		}

		for (PtovtaComissao.Receita p : PtovtaComissao.Receita.values()) {
			Comboitem comboItem = new Comboitem(p.descricao());
			comboItem.setValue(p.valor());
			comboItem.setParent(cmbReceita);
		}

		for (Categoria c : lsCategoriaBloquear) {
			Comboitem comboItem = new Comboitem(c.getDesccategoria());
			comboItem.setValue(c);
			comboItem.setParent(cmbCategorias);
		}

	}

	public void onSelect$cmbBanco() {
		InstiFinanceira banco = (InstiFinanceira) cmbBanco.getSelectedItem().getValue();
		txtNomeBanco.setValue(banco.getCodigo());
	}
	
	public void onSelect$cmbEmpresaPtoVta() {
		
		Empresa empresa = (Empresa) cmbEmpresaPtoVta.getSelectedItem().getValue();
		lsEmpresaContaBancarias = ptovtaBancoService.buscarContasBancariasPorIdEmpresa(empresa.getEmpresaId());		
		
		if(lsEmpresaContaBancarias != null && !lsEmpresaContaBancarias.isEmpty()) {
			cmbEmpresasContaBancarias.setModel(new BindingListModelList(lsEmpresaContaBancarias, true));	
		} else {
			cmbEmpresasContaBancarias.setModel(new BindingListModelList(new ArrayList(), true));
			cmbEmpresasContaBancarias.setSelectedItem(null);
		}		
	}

	public void onClick$ckIsento(Event ev) {
		if (ckIsento.isChecked()) {
			puntoVenta.setNumIEPuntoVenta("ISENTO");
			txtNumIEPuntoVenta.setValue("ISENTO");
			txtNumIEPuntoVenta.setDisabled(true);

		} else {
			puntoVenta.setNumIEPuntoVenta("");
			txtNumIEPuntoVenta.setValue("");
			txtNumIEPuntoVenta.setDisabled(false);
		}
	}

	public void onChange$cmbCiudad(Event ev) {
		if (cmbCiudad.getSelectedItem() == null) {
			return;
		} else {
			cmbColonia.setSelectedItem(null);
			Ciudad c = (Ciudad) cmbCiudad.getSelectedItem().getValue();
			List<Colonia> lsCol = coloniaService.buscarPorCiudad(c);
			BindingListModel dictModel = new BindingListModelList(lsCol, false);
			cmbColonia.setModel(dictModel);
		}
	}

	public void onChange$cmbColonia(Event ev) {
		if (cmbColonia.getSelectedItem() == null) {
			return;
		} else {
//			Colonia col = (Colonia) cmbColonia.getSelectedItem().getValue();
//			txtCP.setValue(col.getCodpostal());
		}
	}

	public String replaceTextbox(Textbox textbox) {
		String getString = textbox.getValue();
		getString = getString.replace("(", "");
		getString = getString.replaceAll("_", "");
		getString = getString.replace(")", "");
		getString = getString.replace("-", "");

		return getString;
	}
	
	public void onClick$btnGeraTitulos(Event ev) throws InterruptedException {
		Connection myConn = null;
		GeradorTitulosIntegracion gerador; 
		try {
			myConn = dataSource.getConnection();
			Date dateInicio = fecIntegracion.getValue();

			dateInicio = DateUtil.inicioFecha(dateInicio);
			Date dateFim = DateUtil.fimFecha(fecIntegracion.getValue());

			log.info("puntoVentaId=" + puntoVenta.getPuntoventaId() + ";fecInicio=" + dateInicio + ";fecFin=" + dateFim);

			gerador = new GeradorTitulosIntegracion(myConn, puntoVenta.getPuntoventaId(), dateInicio, 
					dateFim,checkTodosPuntosVenta.isChecked());
			gerador.execute();
			
		    				    
		} catch (Exception e) {
			log.error("Erro ao integrar",e);

			if (e instanceof WrongValueException) {
				throw (WrongValueException) e;
			}

			log.error("", e);

			Messagebox.show(
					e.getMessage(),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		}
	}

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

		Connection myConn = null;
		GeradorTitulosIntegracion gerador; 
		try {
			myConn = dataSource.getConnection();
			Date dateInicio = fecIntegracion.getValue();

			dateInicio = DateUtil.inicioFecha(dateInicio);
			Date dateFim = DateUtil.fimFecha(fecIntegracion.getValue());

			log.info("puntoVentaId=" + puntoVenta.getPuntoventaId() + ";fecInicio=" + dateInicio + ";fecFin=" + dateFim);
	
			GerenciadorEnvioTitulosWS gerenciadorWS = new GerenciadorEnvioTitulosWS(myConn, checkDinheiro.isChecked(),
					checkCredito.isChecked(), checkDebito.isChecked(), checkTF.isChecked(), checkBOL.isChecked(), 
					checkSimulaIntegracion.isChecked(), dateInicio, dateFim);
			gerenciadorWS.execute();
		    				    
		} catch (Exception e) {
			log.error("Erro ao integrar",e);

			if (e instanceof WrongValueException) {
				throw (WrongValueException) e;
			}

			log.error("", e);

			Messagebox.show(
					e.getMessage(),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		}finally {
//			if (myConn != null) {
//				try {
//					myConn.close();
//				} catch (SQLException e) {
//					log.error("Erro ao fechar a conexăo", e);
//				}
//			}
		}
	}

	public void onClick$btnAdicionarEmpresaBloqueada(Event ev) {
		Empresa e = (Empresa) cmbEmpresas.getSelectedItem().getValue();

		puntoVenta.addEmpresaBloqueada(e);

		ptovtaEmpresasBloqueadasList.setData(puntoVenta.getPtovtaEmpresaBloqueadaList());

	}

	public void onClick$btnApagarEmpresaBloqueada(Event ev) {
		try {
			int resp = Messagebox.show(
					Labels.getLabel("editarPuntoVentaController.MSG.borrarEmpresaBloqueadaPergunta"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {

				PtovtaEmpresaBloqueada e = (PtovtaEmpresaBloqueada) ptovtaEmpresasBloqueadasList.getSelected();

				ptovtaEmpresaBloqueadaService.borrar(e);

				puntoVenta.removeEmpresaBloqueada(e);
				ptovtaEmpresasBloqueadasList.setData(puntoVenta.getPtovtaEmpresaBloqueadaList());
			}
		} catch (Exception ex) {
			log.error(ex.toString());
		}
	}

	public void onClick$btnAdicionarPtoVtaCheckin(Event ev) {

		if (cmbPtoVtaCheckinParada.getSelectedItem() != null) {

			Parada parada = (Parada) cmbPtoVtaCheckinParada.getSelectedItem().getValue();

			PtoVtaCheckin pto = new PtoVtaCheckin();
			pto.setParadaId(parada);
			pto.setPuntoventaId(puntoVenta);

			puntoVenta.addPtovtaCheckin(pto);

			ptovtaPtoVtaCheckinList.setData(puntoVenta.getPtovtaCheckinList());
		}

	}

	public void onClick$btnApagarPtoVtaCheckin(Event ev) {
		try {
			if (ptovtaPtoVtaCheckinList.getSelected() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.borrarPtoVtaCheckin"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {

					PtoVtaCheckin pto = (PtoVtaCheckin) ptovtaPtoVtaCheckinList.getSelected();
					if (pto.getPtoVtaCheckinId() != null) {
						ptoVtaCheckinService.borrar(pto);
					}
					puntoVenta.removePtovtaCheckin(pto);
					ptovtaPtoVtaCheckinList.setData(puntoVenta.getPtovtaCheckinList());
				}
			}
		} catch (Exception ex) {
			log.error(ex.toString());
		}
	}

	public void onClick$btnAdicionarPtoVtaSeguro(Event ev) {

		if (cmbEmpresaSeguro.getSelectedItem() != null &&
		   (radIndvendsegopcionalSi.isChecked() || radIndvendsegopcionalNo.isChecked() ||
		    radIndestansegopcionalSi.isChecked() || radIndestansegopcionalNo.isChecked()) &&
		   (radIndPermisoTasaEmbarqueSi.isChecked() || radIndPermisoTasaEmbarqueNo.isChecked() ||
			radIndEstanTasaEmbarqueSi.isChecked() || radIndEstanTasaEmbarqueNo.isChecked())) {

			Empresa empresa = (Empresa) cmbEmpresaSeguro.getSelectedItem().getValue();

			PtoVtaSeguro pto = new PtoVtaSeguro();

			pto.setIndVendeSegOpcional(radIndvendsegopcionalSi.isChecked());
			pto.setIndEstanSegOpcional(radIndestansegopcionalSi.isChecked());
			pto.setIndEstanTasaEmbarque(radIndEstanTasaEmbarqueSi.isChecked());
			pto.setIndPermisoTasaEmbarque(radIndPermisoTasaEmbarqueSi.isChecked());

			pto.setEmpresa(empresa);
			pto.setPuntoventaId(puntoVenta);

			puntoVenta.addPtovtaSeguro(pto);

			ptovtaPtoVtaSeguroList.setData(puntoVenta.getPtovtaSeguroList());
		}

	}

	public void onClick$btnApagarPtoVtaSeguro(Event ev) {
		try {
			if (ptovtaPtoVtaSeguroList.getSelected() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.borrarPtoVtaSeguro"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {

					PtoVtaSeguro pto = (PtoVtaSeguro) ptovtaPtoVtaSeguroList.getSelected();
					if (pto.getPtoVtaSeguroId() != null) {
						ptoVtaSeguroService.borrar(pto);
					}
					puntoVenta.removePtovtaSeguro(pto);
					ptovtaPtoVtaSeguroList.setData(puntoVenta.getPtovtaSeguroList());
				}
			}
		} catch (Exception ex) {
			log.error(ex.toString());
		}
	}

	public void onClick$btnAdicionarPtovtaCatInd(Event ev) {
		if (cmbCategorias.getSelectedItem() != null) {
			Categoria categoria = (Categoria) cmbCategorias.getSelectedItem().getValue();

			PtovtaCatInd pto = new PtovtaCatInd();
			pto.setCategoria(categoria);
			pto.setPuntoVenta(puntoVenta);
			puntoVenta.addPtovtaCatInd(pto);

			ptovtaCatIndList.setData(puntoVenta.getPtovtaCatIndList());
		}
	}

	public void onClick$btnApagarPtovtaCatInd(Event ev) {
		try {
			if (ptovtaCatIndList.getSelected() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.borrarPtoVtaCheckin"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {

					PtovtaCatInd pto = (PtovtaCatInd) ptovtaCatIndList.getSelected();
					if (pto.getPtovtaCategoriaId() != null) {
						ptovtaCatIndService.borrar(pto);
					}
					puntoVenta.removePtovtaCatInd(pto);
					ptovtaCatIndList.setData(puntoVenta.getPtovtaCatIndList());
				}
			}
		} catch (Exception ex) {
			log.error(ex.toString());
		}
	}

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

		txtMaxCancelacion.getValue();
		txtNome.getValue();
		txtNumPtoVta.getValue();
		txtNumFax.getValue();
		txtCompl.getValue();
		txtNumAg.getValue();
		txtConta.getValue();
		txtDigito.getValue();
		txtBilhetes.getValue();
		txtCarga.getValue();
		txtTitularNome.getValue();
		txtTitularCpf.getValue();
		txtTitularRg.getValue();
		txtTitularEmissor.getValue();
		txtAntecipRetem.getValue();
		txtAntecipPercentual.getValue();

		txtResponAluguel.getValue();
		txtResponTel.getValue();
		txtResponEnergia.getValue();

		cmbEmpresa.getValue();
		cmbParada.getValue();
		cmbPtoVtaCheckinParada.getValue();
		cmbTipoPontoVenta.getValue();
		cmbMoneda.getValue();
		cmbNodo.getValue();
		cmbColonia.setConstraint("no empty");
		cmbColonia.getValue();
		cmbCiudad.getValue();
		cmbBanco.getValue();
		cmbPessoa.getValue();
		cmbTipoConta.getValue();
		cmbPosicao.getValue();

		String numagencia = txtNumAg.getValue() + (StringUtils.isBlank(txtDigitoAg.getValue()) ? "" : "-" + txtDigitoAg.getValue());
		puntoVenta.getAgenciaId().setNumagencia(numagencia);

		if (puntoVenta.getPuntoVentaPadre() == null && !cmbPuntoVentaPadre.getValue().isEmpty()) {
			cmbPuntoVentaPadre.getValue(true);
		}

		// checar uma forma onde o proprio componente coloque como null o atributo
		if (cmbPuntoVentaPadre.getValue().isEmpty()) {
			puntoVenta.setPuntoVentaPadre(null);
		}
		List<PuntoVenta> lsPuntoVenta = puntoVentaService.buscaPuntoVenta(txtNumPtoVta.getValue());

		if (!lsPuntoVenta.isEmpty()) {
			boolean exists = CollectionUtils.exists(lsPuntoVenta, new Predicate() {

				@Override
				public boolean evaluate(Object object) {
					return ((PuntoVenta) object).getPuntoventaId().equals(puntoVenta.getPuntoventaId());
				}
			});

			if (!exists) {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.registroNumPtoVtaExiste"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);

				return;
			}
		}

		try {
			if (puntoVenta.getEmpresa() == null) {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.empresa"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			} else if (puntoVenta.getTipoPuntoVenta() == null) {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.punto"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			} else if (puntoVenta.getMoneda() == null) {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.moneda"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			} else if (puntoVenta.getNodo() == null) {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.nodo"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			} else if (lsFormaPagoDet.isEmpty()) {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.formaDePago"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			} else {

				if (cmbConexion.getValue().equals("")) {
					puntoVenta.setConexionBancaria(null);
					puntoVenta.setUsuarioBancario(null);
				}

				if (cmbUsuarioBancario.getValue() == null) {
					puntoVenta.setUsuarioBancario(null);
				}

				if (cmbColonia.getSelectedItem() != null) {
					puntoVenta.setColonia((Colonia) cmbColonia.getSelectedItem().getValue());
				}

				if ((puntoVenta.getComissaoId() != null) && (puntoVenta.getComissaoId().getPtovtaComissaoId() == null)) {
					puntoVenta.setComissaoId(null);
				}

				puntoVenta.setActivo(Boolean.TRUE);
				puntoVenta.setFecmodif(Calendar.getInstance().getTime());
				puntoVenta.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				puntoVenta.setLsFormaPagoDet(lsFormaPagoDet);
				puntoVenta.setLsParamRecoleccion(lsParamRecoleccion);
				puntoVenta.setLsPtovtaEmpresa(lsPtovtaEmpresa);
				puntoVenta.setLsPtovtaUsuarioBancario(lsPtovtaUsuarioBancario);
				puntoVenta.setPtovtaAntecipacomissaoList(lsAntecipacomissao);
				puntoVenta.setPtovtaHorarioList(lsHorario);
				puntoVenta.setPtovtaEstoqueList(lsEstoque);
				String getString = null;
				if (!txtNumFax.getValue().equals("")) {
					getString = this.replaceTextbox(txtNumFax);
					if (getString.length() >= 11) {
						puntoVenta.setNumfax(txtNumFax.getValue().replace("_", ""));
					}
				}
				if (!numtelefonouno.getValue().equals("")) {
					getString = this.replaceTextbox(numtelefonouno);
					if (getString.length() >= 11) {
						puntoVenta.setNumtelefonouno(numtelefonouno.getValue().replace("_", ""));
					}
				}
				if (!numtelefonodos.getValue().equals("")) {
					getString = this.replaceTextbox(numtelefonodos);
					if (getString.length() >= 11) {
						puntoVenta.setNumtelefonodos(numtelefonodos.getValue().replace("_", ""));
					}
				}
				puntoVenta.setIndValidaStock(checkStock.isChecked());

				if (cmbBanco.getSelectedItem() == null) {
					puntoVenta.setAgenciaId(null);
				} else {
					puntoVenta.getAgenciaId().setInstiFinanceiraId((InstiFinanceira) cmbBanco.getSelectedItem().getValue());
					if (cmbPessoa.getSelectedItem() != null) {
						puntoVenta.getAgenciaId().setPessoa((String) cmbPessoa.getSelectedItem().getValue());
					}

					if (cmbTipoConta.getSelectedItem() != null) {
						puntoVenta.getAgenciaId().setTipo((String) cmbTipoConta.getSelectedItem().getValue());
					}
					puntoVenta.getAgenciaId().setActivo(Boolean.TRUE);
					puntoVenta.getAgenciaId().setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					puntoVenta.getAgenciaId().setFecmodif(Calendar.getInstance().getTime());
				}

				if (txtTitularCpf.getValue().equals("")) {
					puntoVenta.setTitularId(null);
				} else {
					puntoVenta.getTitularId().setActivo(Boolean.TRUE);
					puntoVenta.getTitularId().setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					puntoVenta.getTitularId().setFecmodif(Calendar.getInstance().getTime());
				}

				if ((txtResponAluguel.getValue().equals("") && (txtResponTel.getValue().equals("")))) {
					puntoVenta.setDiversosId(null);
				} else {
					puntoVenta.getDiversosId().setBilheteInfo(checkBilheteInfo.isChecked());
					puntoVenta.getDiversosId().setInformatizada(checkInformatizada.isChecked());
					puntoVenta.getDiversosId().setVendaInternet(checkVendaInternet.isChecked());
					puntoVenta.getDiversosId().setTeleEntrega(checkTeleEntrega.isChecked());
					puntoVenta.getDiversosId().setDigitacaoSeq(checkDigitacao.isChecked());
					puntoVenta.getDiversosId().setTrabalhaBilhete(checkBilhete.isChecked());
					puntoVenta.getDiversosId().setOfpsPropria(checkOfpsPropria.isChecked());
					puntoVenta.getDiversosId().setOfpsTerceiros(checkOfpsTerceiros.isChecked());
					puntoVenta.getDiversosId().setActivo(Boolean.TRUE);
					puntoVenta.getDiversosId().setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					puntoVenta.getDiversosId().setFecmodif(Calendar.getInstance().getTime());
					if (cmbPosicao.getSelectedItem() != null) {
						puntoVenta.getDiversosId().setPosicao((String) cmbPosicao.getSelectedItem().getValue());

					}
				}

				List<PtovtaEmpresa> lsPto = new ArrayList<PtovtaEmpresa>();
				for (PtovtaEmpresa pto : lsPtovtaEmpresa) {
					if (!pto.getActivo()) {
						ptovtaEmpresaService.borrarFisico(pto);
					} else {
						pto.setPuntoVenta(puntoVenta);
						lsPto.add(pto);
					}
				}
				puntoVenta.setLsPtovtaEmpresa(lsPto);

				List<PtoVtaUsuarioBancario> lsPto2 = new ArrayList<PtoVtaUsuarioBancario>();
				for (PtoVtaUsuarioBancario pto2 : lsPtovtaUsuarioBancario) {
					if (!pto2.getActivo()) {
						ptoVtaUsuarioBancarioService.borrarFisico(pto2);
					} else {
						pto2.setPuntoVenta(puntoVenta);
						lsPto2.add(pto2);
					}
				}
				puntoVenta.setLsPtovtaUsuarioBancario(lsPto2);

				if (radAprobacionAutorizado.isChecked()) {
					puntoVenta.setStatusaprobacion("A");
				} else if (radAprobacionLatente.isChecked()) {
					puntoVenta.setStatusaprobacion("L");
				}

				if (puntoVenta.getIndIntegracion() == null) {
					puntoVenta.setIndIntegracion(TipoRetorno.PENDENTE.getValor());
				}

				if (puntoVenta.getPuntoventaId() == null) {
					puntoVentaService.suscribir(puntoVenta);
					puntoVentaList.addItemNovo(puntoVenta);
					for (Object object : fechamentoParamptovtaList.getListData()) {
						FechamentoParamptovta fechamentoParamptovta = (FechamentoParamptovta) object;
						fechamentoParamptovta.setPuntoventa(puntoVenta);
						fechamentoParamptovtaService.suscribir(fechamentoParamptovta);
					}
				} else {
					puntoVentaService.actualizacion(puntoVenta);
					puntoVentaList.updateItem(puntoVenta);
				}

				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.suscribirOK"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				closeWindow();

			}

		} catch (ValidacionCampoException ve) {
			log.error("editarPuntoVentaController: ", ve);
			Messagebox.show(
					ve.getMessage(),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		} catch (IntegracionException ex) {
			log.error("editarPuntoVentaController: ", ex);
			Messagebox.show(
					ex.getMessage(),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);

		} catch (Exception ex) {
			log.error("editarPuntoVentaController: ", ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagar(Event ev) {
		try {
			int resp = Messagebox.show(
					Labels.getLabel("editarPuntoVentaController.MSG.borrarPergunta"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {

				puntoVentaService.borrar(puntoVenta);

				log.warn("Usuário " + UsuarioLogado.getUsuarioLogado().getNombusuario() + " excluiu o ponto de venda " + puntoVenta.getPuntoventaId());

				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.borrarOK"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				puntoVentaList.removeItem(puntoVenta);

				closeWindow();
			}
		} catch (BusinessException ex) {
			try {
				Messagebox.show(ex.getMessage(),
						Labels.getLabel("editarPuntoVentaController.window.title"), Messagebox.OK, Messagebox.ERROR);
			} catch (InterruptedException e) {
				log.error(e);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void uploadPhoto(UploadEvent event) {
		org.zkoss.util.media.Media media = event.getMedia();

		try {
			if (media instanceof org.zkoss.image.Image) {
				img.setContent(new org.zkoss.image.AImage(media.getName(),
						media.getStreamData()));
			} else {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.errorIMG") + " " + media,
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
			}
		} catch (IOException ex) {
			log.error(ex);
			throw UiException.Aide.wrap(ex);
		} catch (InterruptedException ex) {
			log.error(ex);
			throw UiException.Aide.wrap(ex);
		}
	}

	public void onClick$btnSalvarAntecipa() throws InterruptedException {
		dateAntecipData.getValue();
		txtAntecipRetem.getValue();
		txtAntecipPercentual.getValue();

		try {
			PtovtaAntecipacomissao antecipa = new PtovtaAntecipacomissao();

			antecipa.setData(dateAntecipData.getValue());
			antecipa.setPercentual(txtAntecipPercentual.getValueDecimal());
			antecipa.setRetem(txtAntecipRetem.getValueDecimal());
			antecipa.setPuntoventaId(puntoVenta);

			antecipa.setActivo(Boolean.TRUE);
			antecipa.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			antecipa.setFecmodif(Calendar.getInstance().getTime());

			lsAntecipacomissao.add(antecipa);
			ptovtaAntecipaList.setData(lsAntecipacomissao);

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagarAntecipa() {
		try {
			PtovtaAntecipacomissao antecipa = (PtovtaAntecipacomissao) ptovtaAntecipaList.getSelected();
			if (antecipa != null) {
				antecipa.setActivo(Boolean.FALSE);
				antecipa.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				antecipa.setFecmodif(Calendar.getInstance().getTime());

				ptovtaAntecipaList.removeItem(antecipa);
				lsAntecipacomissao.remove(antecipa);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnSalvarHorario() throws InterruptedException {
		timeboxInicio.getValue();
		timeboxFim.getValue();
		try {
			PtovtaHorario horario = new PtovtaHorario();

			horario.setInicio(timeboxInicio.getValue());
			horario.setFim(timeboxFim.getValue());
			horario.setPuntoventaId(puntoVenta);
			horario.setActivo(Boolean.TRUE);
			horario.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			horario.setFecmodif(Calendar.getInstance().getTime());

			lsHorario.add(horario);
			ptovtaHorarioList.setData(lsHorario);

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagarHorario() {
		try {
			PtovtaHorario horario = (PtovtaHorario) ptovtaHorarioList.getSelected();
			if (horario != null) {
				horario.setActivo(Boolean.FALSE);
				horario.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				horario.setFecmodif(Calendar.getInstance().getTime());

				ptovtaHorarioList.removeItem(horario);
				lsHorario.remove(horario);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnSalvarEstoque() throws InterruptedException {
		txtEspecie.getValue();
		cmbForm.getValue();
		txtQuant.getValue();
		cmbLote.getValue();
		try {
			PtovtaEstoque estoque = new PtovtaEstoque();

			estoque.setEspecie(txtEspecie.getValue());
			if (cmbForm.getSelectedItem() != null) {
				estoque.setFormCont(Integer.valueOf((String) cmbForm.getSelectedItem().getValue()));
			}
			if (cmbLote.getSelectedItem() != null) {
				estoque.setLoteform(Integer.valueOf((String) cmbLote.getSelectedItem().getValue()));
			}

			estoque.setQuantidade(txtQuant.getValue());
			estoque.setPuntoventaId(puntoVenta);

			estoque.setActivo(Boolean.TRUE);
			estoque.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			estoque.setFecmodif(Calendar.getInstance().getTime());

			lsEstoque.add(estoque);
			ptovtaEstoqueList.setData(lsEstoque);

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagarEstoque() {
		try {
			PtovtaEstoque estoque = (PtovtaEstoque) ptovtaEstoqueList.getSelected();
			if (estoque != null) {
				estoque.setActivo(Boolean.FALSE);
				estoque.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				estoque.setFecmodif(Calendar.getInstance().getTime());

				ptovtaEstoqueList.removeItem(estoque);
				lsEstoque.remove(estoque);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnSalvarFormaPago(Event ev) throws InterruptedException {
		cmbFormaPago.getValue();
		cmbEmpresaFormaPago.getValue();
		try {
			FormaPago formaPago = new FormaPago();
			try {
				formaPago = (FormaPago) cmbFormaPago.getSelectedItem().getValue();
				Boolean achou = Boolean.FALSE;
				Empresa empresa = (Empresa) cmbEmpresaFormaPago.getSelectedItem().getValue();
				if (formaPago != null) {
					for (FormaPagoDet fpd : lsFormaPagoDet) {
						if (fpd.getFormaPago().equals(formaPago) && empresa.equals(fpd.getEmpresa())) {
							achou = Boolean.TRUE;
						}
					}
					if (!achou) {
						FormaPagoDet fpd = new FormaPagoDet();
						/* 
						 * Mantis #6874
						 * fpd.setCargosextras(new BigDecimal(txtCargosExtras.getValue()));
						 */
						fpd.setCargosextras(BigDecimal.ZERO);
						fpd.setFormaPago(formaPago);
						fpd.setPuntoVenta(puntoVenta);

						if(cmbEmpresaFormaPago.getSelectedItem() != null) {
							fpd.setEmpresa(empresa);
						}

						fpd.setActivo(Boolean.TRUE);
						fpd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
						fpd.setFecmodif(Calendar.getInstance().getTime());

						lsFormaPagoDet.add(fpd);
						formaPagoList.setData(lsFormaPagoDet);
					} else {
						Messagebox.show(
								Labels.getLabel("editarPuntoVentaController.MSG.Achou.FormaPago"),
								Labels.getLabel("editarPuntoVentaController.window.title"),
								Messagebox.OK, Messagebox.EXCLAMATION);
					}
				}
			} catch (Exception e) {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.formaDePago"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagarFormaPago(Event ev) {
		try {
			FormaPagoDet fpd = (FormaPagoDet) formaPagoList.getSelected();
			if (fpd != null) {
				fpd.setActivo(Boolean.FALSE);
				fpd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				fpd.setFecmodif(Calendar.getInstance().getTime());

				formaPagoList.removeItem(fpd);
				lsFormaPagoDet.remove(fpd);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnSalvarParamRecoleccion(Event ev) throws InterruptedException {
		importeInicial.getValue();
		importeAdicional.getValue();
		try {
			ParamRecoleccion paramRecoleccion = new ParamRecoleccion();
			paramRecoleccion.setImporteinicial(importeInicial.getValueDecimal());
			paramRecoleccion.setImporteadicional(importeAdicional.getValueDecimal());

			Boolean achou = Boolean.FALSE;

			for (ParamRecoleccion fpd : lsParamRecoleccion) {
				if (fpd.getImporteinicial().equals(paramRecoleccion.getImporteinicial())) {
					achou = Boolean.TRUE;
				}
			}
			if (!achou) {

				paramRecoleccion.setPuntoVenta(puntoVenta);
				paramRecoleccion.setActivo(Boolean.TRUE);
				paramRecoleccion.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				paramRecoleccion.setFecmodif(Calendar.getInstance().getTime());

				lsParamRecoleccion.add(paramRecoleccion);
				paramRecoleccionList.setData(lsParamRecoleccion);
			} else {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.Achou.ParamRecoleccion"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagarParamRecoleccion(Event ev) {
		try {
			ParamRecoleccion fpd = (ParamRecoleccion) paramRecoleccionList.getSelected();
			if (fpd != null) {
				fpd.setActivo(Boolean.FALSE);
				fpd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				fpd.setFecmodif(Calendar.getInstance().getTime());

				paramRecoleccionList.removeItem(fpd);
				lsParamRecoleccion.remove(fpd);
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnSalvarPtovtaEmpresa(Event ev) throws InterruptedException {
		cmbEmpresaPtoVta.getValue();
		try {
			PtovtaEmpresa ptovtaEmpresa = new PtovtaEmpresa();

			Boolean achou = Boolean.FALSE;

			ptovtaEmpresa.setEmpresa((Empresa) cmbEmpresaPtoVta.getSelectedItem().getValue());

			for (PtovtaEmpresa fpd : lsPtovtaEmpresa) {
				if (fpd.getEmpresa().equals(ptovtaEmpresa.getEmpresa())&& fpd.getActivo()) {
					achou = Boolean.TRUE;
				}
			}
			if (!achou) {

				ptovtaEmpresa.setPuntoVenta(puntoVenta);
				ptovtaEmpresa.setActivo(Boolean.TRUE);
				ptovtaEmpresa.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				ptovtaEmpresa.setFecmodif(Calendar.getInstance().getTime());
				ptovtaEmpresa.setIndTerceirizada(checkPtoVtaEmpresaIndTerceirizada.isChecked());
				ptovtaEmpresa.setIndBloqueada(checkPtoVtaEmpresaIndBloqueada.isChecked());
				ptovtaEmpresa.setIndMostrarCaja(checkPtoVtaEmpresaIndMostrarCaja.isChecked());
				ptovtaEmpresa.setNumeroSitef(txtNumeroSitef.getText());
				
				if (cmbEmpresasContaBancarias.getSelectedItem() != null){
					ptovtaEmpresa.setEmpresaContaBancaria((EmpresaContaBancaria) cmbEmpresasContaBancarias.getSelectedItem().getValue());
				}
				lsPtovtaEmpresa.add(ptovtaEmpresa);

				List<PtovtaEmpresa> lsP = new ArrayList<PtovtaEmpresa>();
				for (PtovtaEmpresa p : lsPtovtaEmpresa) {
					if (p.getActivo()) {
						lsP.add(p);
					}
				}
				ptovtaEmpresaList.setData(lsP);
				// ptovtaEmpresaList.addItem(ptovtaEmpresa);
			} else {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.Achou.PtovtaEmpresa"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagarPtovtaEmpresa(Event ev) {
		try {
			PtovtaEmpresa fpd = (PtovtaEmpresa) ptovtaEmpresaList.getSelected();
			if (fpd != null) {
				lsPtovtaEmpresa.remove(fpd);
				ptovtaEmpresaList.removeItem(fpd);
				if (fpd.getPtovtaempresaId() != null) {
					fpd.setActivo(Boolean.FALSE);
					fpd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					fpd.setFecmodif(Calendar.getInstance().getTime());
					fpd.setPuntoVenta(puntoVenta);

					lsPtovtaEmpresa.add(fpd);
				}
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onChange$cmbConexion(Event ev) {
		habilitarCombo();
	}

	private void habilitarCombo() {
		Comboitem cbi = cmbConexion.getSelectedItem();
		if (cbi != null) {
			String valor = (String) cbi.getValue();

			if (valor.equals("S")) {
				cmbUsuarioBancario.setDisabled(Boolean.FALSE);
			}
		}
	}

	public void onClick$btnSalvarPtovtaUsuarioBancario(Event ev) throws InterruptedException {
		cmbEmpresaPtoVtaUsuarioBancario.getValue();
		cmbUsuarioBancarioPtoVtaUsuarioBancario.getValue();

		try {
			PtoVtaUsuarioBancario usuarioBancario = new PtoVtaUsuarioBancario();
			usuarioBancario.setEmpresa((Empresa) cmbEmpresaPtoVtaUsuarioBancario.getSelectedItem().getValue());
			usuarioBancario.setUsuarioBancario((UsuarioBancario) cmbUsuarioBancarioPtoVtaUsuarioBancario.getSelectedItem().getValue());

			Boolean achou = Boolean.FALSE;

			for (PtoVtaUsuarioBancario fpd : lsPtovtaUsuarioBancario) {
				if (fpd.getEmpresa().equals(usuarioBancario.getEmpresa())) {
					achou = Boolean.TRUE;
				}
			}
			if (!achou) {

				usuarioBancario.setPuntoVenta(puntoVenta);
				usuarioBancario.setActivo(Boolean.TRUE);
				usuarioBancario.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				usuarioBancario.setFecmodif(Calendar.getInstance().getTime());

				lsPtovtaUsuarioBancario.add(usuarioBancario);

				List<PtoVtaUsuarioBancario> lsP = new ArrayList<PtoVtaUsuarioBancario>();
				for (PtoVtaUsuarioBancario p : lsPtovtaUsuarioBancario) {
					if (p.getActivo()) {
						lsP.add(p);
					}
				}
				ptovtaUsuarioBancarioList.setData(lsP);
				// ptovtaEmpresaList.addItem(ptovtaEmpresa);

			} else {
				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.Achou.PtovtaUsuario"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarPuntoVentaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnApagarPtovtaUsuarioBancario(Event ev) {
		try {
			PtoVtaUsuarioBancario fpd = (PtoVtaUsuarioBancario) ptovtaUsuarioBancarioList.getSelected();
			if (fpd != null) {
				ptovtaUsuarioBancarioList.removeItem(fpd);
				lsPtovtaUsuarioBancario.remove(fpd);
				if (fpd.getPtovtaUsuarioBancarioID() != null) {
					fpd.setActivo(Boolean.FALSE);
					fpd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
					fpd.setFecmodif(Calendar.getInstance().getTime());

					lsPtovtaUsuarioBancario.add(fpd);
				}
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnAdicionarEmpresaComissao(Event ev) throws InterruptedException {
		if (cmbEmpresaComissao.getSelectedItem() == null) {
			Messagebox.show(
					Labels.getLabel("MSG.Error.combobox"),
					Labels.getLabel("editarPricingController.windowMarca.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		Empresa empresa = (Empresa) cmbEmpresaComissao.getSelectedItem().getValue();

		PtovtaComissao ptovtaComissao = new PtovtaComissao();

		ptovtaComissao.setEmpresaId(empresa);
		ptovtaComissao.setPuntoventaId(this.puntoVenta);

		ptovtaComissaoService.suscribir(ptovtaComissao);

		lsPtovtaComissao.add(ptovtaComissao);

		List<PtovtaComissao> lsPtovtaComissaoAtivo = new ArrayList<PtovtaComissao>();
		for (PtovtaComissao rc : lsPtovtaComissao) {
			if (rc.getActivo()) {
				lsPtovtaComissaoAtivo.add(rc);
			}
		}
		ptovtaComissaoList.setData(lsPtovtaComissaoAtivo);

		cmbEmpresaComissao.getSelectedItem().setVisible(false);

		abrirPtovtaComissao(ptovtaComissao);

	}

	public PuntoVenta getPuntoVenta() {
		return puntoVenta;
	}

	public void setPuntoVenta(PuntoVenta puntoVenta) {
		this.puntoVenta = puntoVenta;
	}

	public MyListbox getPuntoVentaList() {
		return puntoVentaList;
	}

	public MyListbox getAntecipaList() {
		return ptovtaAntecipaList;
	}

	public void setAntecipaList(MyListbox antecipaList) {
		this.ptovtaAntecipaList = antecipaList;
	}

	public void setPuntoVentaList(MyListbox puntoVentaList) {
		this.puntoVentaList = puntoVentaList;
	}

	public PuntoVentaService getPuntoVentaService() {
		return puntoVentaService;
	}

	public void setPuntoVentaService(PuntoVentaService puntoVentaService) {
		this.puntoVentaService = puntoVentaService;
	}

	public EmpresaService getEmpresaService() {
		return empresaService;
	}

	public void setEmpresaService(EmpresaService empresaService) {
		this.empresaService = empresaService;
	}

	public TipoPuntoVentaService getTipoPuntoVentaService() {
		return tipoPuntoVentaService;
	}

	public void setTipoPuntoVentaService(TipoPuntoVentaService tipoPuntoVentaService) {
		this.tipoPuntoVentaService = tipoPuntoVentaService;
	}

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

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

	public List<PtovtaAntecipacomissao> getLsPtovtaAntecipa() {
		return lsAntecipacomissao;
	}

	public void setLsPtovtaAntecipa(List<PtovtaAntecipacomissao> lsAntecipacomissao) {
		this.lsAntecipacomissao = lsAntecipacomissao;
	}

	public List<PtovtaHorario> getLsHorario() {
		return lsHorario;
	}

	public void setLsHorario(List<PtovtaHorario> lsHorario) {
		this.lsHorario = lsHorario;
	}

	public List<TipoPuntoVenta> getLsTipoPuntoVenta() {
		return lsTipoPuntoVenta;
	}

	public void setLsTipoPuntoVenta(List<TipoPuntoVenta> lsTipoPuntoVenta) {
		this.lsTipoPuntoVenta = lsTipoPuntoVenta;
	}

	public MonedaService getMonedaService() {
		return monedaService;
	}

	public void setMonedaService(MonedaService monedaService) {
		this.monedaService = monedaService;
	}

	public List<Moneda> getLsMoneda() {
		return lsMoneda;
	}

	public void setLsMoneda(List<Moneda> lsMoneda) {
		this.lsMoneda = lsMoneda;
	}

	public InstiFinanceiraService getBancoService() {
		return ptovtaBancoService;
	}

	public void setBancoService(InstiFinanceiraService ptovtaBancoService) {
		this.ptovtaBancoService = ptovtaBancoService;
	}

	public List<InstiFinanceira> getLsBanco() {
		return lsBanco;
	}

	public void setLsBanco(List<InstiFinanceira> lsBanco) {
		this.lsBanco = lsBanco;
	}		

	public Combobox getCmbBanco() {
		return cmbBanco;
	}

	public void setCmbBanco(Combobox cmbBanco) {
		this.cmbBanco = cmbBanco;
	}

	public Combobox getCmbPessoa() {
		return cmbPessoa;
	}

	public void setCmbPessoa(Combobox cmbPessoa) {
		this.cmbPessoa = cmbPessoa;
	}

	public Image getImg() {
		return img;
	}

	public void setImg(Image img) {
		this.img = img;
	}

	public Radio getRadAprobacionAutorizado() {
		return radAprobacionAutorizado;
	}

	public void setRadAprobacionAutorizado(Radio radAprobacionAutorizado) {
		this.radAprobacionAutorizado = radAprobacionAutorizado;
	}

	public Radio getRadAprobacionLatente() {
		return radAprobacionLatente;
	}

	public void setRadAprobacionLatente(Radio radAprobacionLatente) {
		this.radAprobacionLatente = radAprobacionLatente;
	}

	public Radio getRadDatosTarjetaNo() {
		return radDatosTarjetaNo;
	}

	public void setRadDatosTarjetaNo(Radio radDatosTarjetaNo) {
		this.radDatosTarjetaNo = radDatosTarjetaNo;
	}

	public Radio getRadDatosTarjetaSi() {
		return radDatosTarjetaSi;
	}

	public void setRadDatosTarjetaSi(Radio radDatosTarjetaSi) {
		this.radDatosTarjetaSi = radDatosTarjetaSi;
	}

	public MyTextbox getTxtNome() {
		return txtNome;
	}

	public void setTxtNome(MyTextbox txtNome) {
		this.txtNome = txtNome;
	}

	public MyTextbox getTxtTitularNome() {
		return txtTitularNome;
	}

	public void setTxtTitularNome(MyTextbox txtTitularNome) {
		this.txtTitularNome = txtTitularNome;
	}

	public MyTextbox getTxtTitularCpf() {
		return txtTitularCpf;
	}

	public void setTxtTitularCpf(MyTextbox txtTitularCpf) {
		this.txtTitularCpf = txtTitularCpf;
	}

	public MyTextbox getTxtTitularRg() {
		return txtTitularRg;
	}

	public void setTxtTitularRg(MyTextbox txtTitularRg) {
		this.txtTitularRg = txtTitularRg;
	}

	public MyTextbox getTxtTitularEmissor() {
		return txtTitularEmissor;
	}

	public void setTxtTitularEmissor(MyTextbox txtTitularEmissor) {
		this.txtTitularEmissor = txtTitularEmissor;
	}

	public MyListbox getFormaPagoList() {
		return formaPagoList;
	}

	public void setFormaPagoList(MyListbox formaPagoList) {
		this.formaPagoList = formaPagoList;
	}

	public List<FormaPago> getLsFormaPago() {
		return lsFormaPago;
	}

	public void setLsFormaPago(List<FormaPago> lsFormaPago) {
		this.lsFormaPago = lsFormaPago;
	}

	public Combobox getCmbFormaPago() {
		return cmbFormaPago;
	}

	public void setCmbFormaPago(Combobox cmbFormaPago) {
		this.cmbFormaPago = cmbFormaPago;
	}

	public Doublebox getTxtCargosExtras() {
		return txtCargosExtras;
	}

	public void setTxtCargosExtras(Doublebox txtCargosExtras) {
		this.txtCargosExtras = txtCargosExtras;
	}

	public List<Nodo> getLsNodos() {
		return lsNodos;
	}

	public void setLsNodos(List<Nodo> lsNodos) {
		this.lsNodos = lsNodos;
	}

	public Button getBtnSalvarFormaPago() {
		return btnSalvarFormaPago;
	}

	public void setBtnSalvarFormaPago(Button btnSalvarFormaPago) {
		this.btnSalvarFormaPago = btnSalvarFormaPago;
	}

	public FormaPagoService getFormaPagoService() {
		return formaPagoService;
	}

	public void setFormaPagoService(FormaPagoService formaPagoService) {
		this.formaPagoService = formaPagoService;
	}

	public List<FormaPagoDet> getLsFormaPagoDet() {
		return lsFormaPagoDet;
	}

	public void setLsFormaPagoDet(List<FormaPagoDet> lsFormaPagoDet) {
		this.lsFormaPagoDet = lsFormaPagoDet;
	}

	public Combobox getCmbCiudad() {
		return cmbCiudad;
	}

	public void setCmbCiudad(Combobox cmbCiudad) {
		this.cmbCiudad = cmbCiudad;
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public Combobox getCmbParada() {
		return cmbParada;
	}

	public void setCmbParada(Combobox cmbParada) {
		this.cmbParada = cmbParada;
	}

	public Combobox getCmbPtoVtaCheckinParada() {
		return cmbPtoVtaCheckinParada;
	}

	public void setCmbPtoVtaCheckinParada(Combobox cmbPtoVtaCheckinParada) {
		this.cmbPtoVtaCheckinParada = cmbPtoVtaCheckinParada;
	}

	public Combobox getCmbMoneda() {
		return cmbMoneda;
	}

	public void setCmbMoneda(Combobox cmbMoneda) {
		this.cmbMoneda = cmbMoneda;
	}

	public Combobox getCmbNodo() {
		return cmbNodo;
	}

	public void setCmbNodo(Combobox cmbNodo) {
		this.cmbNodo = cmbNodo;
	}

	public Combobox getCmbTipoPontoVenta() {
		return cmbTipoPontoVenta;
	}

	public void setCmbTipoPontoVenta(Combobox cmbTipoPontoVenta) {
		this.cmbTipoPontoVenta = cmbTipoPontoVenta;
	}

	/**
	 * @return the lsColonia
	 */
	public List<Colonia> getLsColonia() {
		return lsColonia;
	}

	/**
	 * @param lsColonia
	 *            the lsColonia to set
	 */
	public void setLsColonia(List<Colonia> lsColonia) {
		this.lsColonia = lsColonia;
	}

	/**
	 * @return the cmbColonia
	 */
	public Combobox getCmbColonia() {
		return cmbColonia;
	}

	/**
	 * @param cmbColonia
	 *            the cmbColonia to set
	 */
	public void setCmbColonia(Combobox cmbColonia) {
		this.cmbColonia = cmbColonia;
	}

	/**
	 * @return the txtCP
	 */
	public Textbox getTxtCP() {
		return txtCP;
	}

	/**
	 * @param txtCP
	 *            the txtCP to set
	 */
	public void setTxtCP(Textbox txtCP) {
		this.txtCP = txtCP;
	}

	public MyTextbox getTxtNumAg() {
		return txtNumAg;
	}

	public void setTxtNumAg(MyTextbox txtNumAg) {
		this.txtNumAg = txtNumAg;
	}

	public List<UsuarioBancario> getLsUsuarioBancario() {
		return lsUsuarioBancario;
	}

	public void setLsUsuarioBancario(List<UsuarioBancario> lsUsuarioBancario) {
		this.lsUsuarioBancario = lsUsuarioBancario;
	}

	public List<ParamRecoleccion> getLsParamRecoleccion() {
		return lsParamRecoleccion;
	}

	public void setLsParamRecoleccion(List<ParamRecoleccion> lsParamRecoleccion) {
		this.lsParamRecoleccion = lsParamRecoleccion;
	}

	public Intbox getTxtQuant() {
		return txtQuant;
	}

	public void setTxtQuant(Intbox txtQuant) {
		this.txtQuant = txtQuant;
	}

	public Intbox getTxtcodAg() {
		return txtcodAg;
	}

	public void setTxtcodAg(Intbox txtcodAg) {
		this.txtcodAg = txtcodAg;
	}

	public MyTextbox getTxtNumFax() {
		return txtNumFax;
	}

	public void setTxtNumFax(MyTextbox txtNumFax) {
		this.txtNumFax = txtNumFax;
	}

	public MyTextbox getTxtCompl() {
		return txtCompl;
	}

	public void setTxtCompl(MyTextbox txtCompl) {
		this.txtCompl = txtCompl;
	}

	public MyTextbox getTxtEspecie() {
		return txtEspecie;
	}

	public void setTxtEspecie(MyTextbox txtEspecie) {
		this.txtEspecie = txtEspecie;
	}

	public Textbox getTxtNomeBanco() {
		return txtNomeBanco;
	}

	public void setTxtNomeBanco(Textbox txtNomeBanco) {
		this.txtNomeBanco = txtNomeBanco;
	}

	public MyTextbox getTxtConta() {
		return txtConta;
	}

	public void setTxtConta(MyTextbox txtConta) {
		this.txtConta = txtConta;
	}

	public MyTextbox getTxtDigito() {
		return txtDigito;
	}

	public void setTxtDigito(MyTextbox txtDigito) {
		this.txtDigito = txtDigito;
	}

	public MyTextbox getTxtBilhetes() {
		return txtBilhetes;
	}

	public void setTxtBilhetes(MyTextbox txtBilhetes) {
		this.txtBilhetes = txtBilhetes;
	}

	public MyTextbox getTxtCarga() {
		return txtCarga;
	}

	public void setTxtCarga(MyTextbox txtCarga) {
		this.txtCarga = txtCarga;
	}

	public Datebox getDateAntecipData() {
		return dateAntecipData;
	}

	public void setDateAntecipData(Datebox dateAntecipData) {
		this.dateAntecipData = dateAntecipData;
	}

	public MyTextboxDecimal getTxtAntecipRetem() {
		return txtAntecipRetem;
	}

	public void setTxtAntecipRetem(MyTextboxDecimal txtAntecipRetem) {
		this.txtAntecipRetem = txtAntecipRetem;
	}

	public MyTextboxDecimal getTxtAntecipPercentual() {
		return txtAntecipPercentual;
	}

	public void setTxtAntecipPercentual(MyTextboxDecimal txtAntecipPercentual) {
		this.txtAntecipPercentual = txtAntecipPercentual;
	}

	public Timebox getTimeboxInicio() {
		return timeboxInicio;
	}

	public void setTimeboxInicio(Timebox timeboxInicio) {
		this.timeboxInicio = timeboxInicio;
	}

	public Timebox getTimeboxFim() {
		return timeboxFim;
	}

	public void setTimeboxFim(Timebox timeboxFim) {
		this.timeboxFim = timeboxFim;
	}

	public MyListbox getParamRecoleccionList() {
		return paramRecoleccionList;
	}

	public void setParamRecoleccionList(MyListbox paramRecoleccionList) {
		this.paramRecoleccionList = paramRecoleccionList;
	}

	public List<PtovtaEmpresa> getLsPtovtaEmpresa() {
		return lsPtovtaEmpresa;
	}

	public void setLsPtovtaEmpresa(List<PtovtaEmpresa> lsPtovtaEmpresa) {
		this.lsPtovtaEmpresa = lsPtovtaEmpresa;
	}

	public MyListbox getPtovtaEmpresaList() {
		return ptovtaEmpresaList;
	}

	public void setPtovtaEmpresaList(MyListbox ptovtaEmpresaList) {
		this.ptovtaEmpresaList = ptovtaEmpresaList;
	}

	public List<PtoVtaUsuarioBancario> getLsPtovtaUsuarioBancario() {
		return lsPtovtaUsuarioBancario;
	}

	public void setLsPtovtaUsuarioBancario(List<PtoVtaUsuarioBancario> lsPtovtaUsuarioBancario) {
		this.lsPtovtaUsuarioBancario = lsPtovtaUsuarioBancario;
	}

	public MyListbox getPtovtaUsuarioBancarioList() {
		return ptovtaUsuarioBancarioList;
	}

	public void setPtovtaUsuarioBancarioList(MyListbox ptovtaUsuarioBancarioList) {
		this.ptovtaUsuarioBancarioList = ptovtaUsuarioBancarioList;
	}

	public List<Empresa> getLsEmpresaComissao() {
		return lsEmpresaComissao;
	}

	public void setLsEmpresaComissao(List<Empresa> lsEmpresaComissao) {
		this.lsEmpresaComissao = lsEmpresaComissao;
	}

	public Combobox getCmbEmpresaComissao() {
		return cmbEmpresaComissao;
	}

	public void setCmbEmpresaComissao(Combobox cmbEmpresaComissao) {
		this.cmbEmpresaComissao = cmbEmpresaComissao;
	}

	public Button getBtnAdicionarEmpresaComissao() {
		return btnAdicionarEmpresaComissao;
	}

	public void setBtnAdicionarEmpresaComissao(Button btnAdicionarEmpresaComissao) {
		this.btnAdicionarEmpresaComissao = btnAdicionarEmpresaComissao;
	}

	public MyTextbox getTxtNumDoCPuntoVenta() {
		return txtNumDoCPuntoVenta;
	}

	public void setTxtNumDoCPuntoVenta(MyTextbox txtNumDoCPuntoVenta) {
		this.txtNumDoCPuntoVenta = txtNumDoCPuntoVenta;
	}

	public MyTextbox getTxtRazonSocial() {
		return txtRazonSocial;
	}

	public void setTxtRazonSocial(MyTextbox txtRazonSocial) {
		this.txtRazonSocial = txtRazonSocial;
	}

	
	public String getLogFileSelected() {
		return logFileSelected;
	}

	public void setLogFileSelected(String logFileSelected) {
		this.logFileSelected = logFileSelected;
	}

	public void onChange$cmbPuntoVentaPadre(Event ev) throws InterruptedException {
		if (puntoVenta.getPuntoventaId() != null) {
			List<PuntoVenta> lsPuntosSubordinados = puntoVentaService.buscarPuntoVentaSubordinados(puntoVenta);

			if (!lsPuntosSubordinados.isEmpty()) {
				StringBuilder sbPuntosSubordinados = new StringBuilder("\n");
				for (PuntoVenta pv : lsPuntosSubordinados) {
					sbPuntosSubordinados.append(pv.getNombpuntoventa()).append("\n");
				}

				Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.msg.naopodesersubordinadapossuisubordinadas") + sbPuntosSubordinados.toString(),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);

				cmbPuntoVentaPadre.setSelectedItem(null);
				cmbPuntoVentaPadre.setText(null);
			}
		}
	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void abrirPtovtaComissao(PtovtaComissao ptovtaComissao) {
		Map args = new HashMap();
		args.put("ptovtaComissao", ptovtaComissao);
		args.put("ptovtaComissaoList", ptovtaComissaoList);

		openWindow("/gui/catalogos/editarPuntoVentaComissao.zul",
				Labels.getLabel("editarPuntoVentaComissaoController.window.title", new String[]{ptovtaComissao.getEmpresaId().getNombempresa()}), args, MODAL);

	}

	public void onClick$btnApagarFechamentoParamptovta(Event ev) {
		try {
			if (fechamentoParamptovtaList.getSelected() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarPuntoVentaController.MSG.borrarFechamentoParamptovta"),
						Labels.getLabel("editarPuntoVentaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

				if (resp == Messagebox.YES) {
					FechamentoParamptovta fpp = (FechamentoParamptovta) fechamentoParamptovtaList.getSelected();
					if(puntoVenta!= null && puntoVenta.getPuntoventaId()!= null){
						fechamentoParamptovtaService.borrar(fpp);
						List<FechamentoParamptovta> params = fechamentoParamptovtaService.buscaParametrosPorPuntoventa(puntoVenta);
						fechamentoParamptovtaList.setData(params);
					}else{
						fechamentoParamptovtaList.removeItem(fpp);
					}
				}
			}
		} catch (Exception ex) {
			log.error(ex.toString());
		}
	}

	public void onClick$btnAdicionarFechamentoParamptovta(Event ev) {
		txtDiasemtransito.getValue();
		
		if (cmbEmpresaFechamentoParamptovta.getSelectedItem() != null &&
				(radIntervalofechamentoDiario.isChecked() || radIntervalofechamentoSemanal.isChecked()
						|| radIntervalofechamentoDecendial.isChecked()
						|| radIntervalofechamentoQuinzenal.isChecked()
						|| radIntervalofechamentoMensal.isChecked()
				)
				) {
			Empresa empresa = (Empresa) cmbEmpresaFechamentoParamptovta.getSelectedItem().getValue();

			FechamentoParamptovta fechamentoParamptovta = new FechamentoParamptovta();
			fechamentoParamptovta.setEmpresa(empresa);
			fechamentoParamptovta.setPuntoventa(puntoVenta);
			Integer intervalofechamento = 0;
			
			

			if (radIntervalofechamentoSemanal.isChecked()) {
				intervalofechamento = Constantes.INTERVALO_FECHAMENTO_SEMANAL;

			} else if (radIntervalofechamentoDecendial.isChecked()) {
				intervalofechamento = Constantes.INTERVALO_FECHAMENTO_DECENDIAL;

			} else if (radIntervalofechamentoQuinzenal.isChecked()) {
				intervalofechamento = Constantes.INTERVALO_FECHAMENTO_QUINZENAL;

			} else if (radIntervalofechamentoMensal.isChecked()) {
				intervalofechamento = Constantes.INTERVALO_FECHAMENTO_MENSAL;

			}else if (radIntervalofechamentoDiario.isChecked()) {
				intervalofechamento = Constantes.INTERVALO_FECHAMENTO_DIARIO;
			}
			
			fechamentoParamptovta.setIntervalofechamento(intervalofechamento);
			
			if(StringUtils.isNotBlank(txtDiasemtransito.getValue())) {
				fechamentoParamptovta.setDiasemtransito(Integer.valueOf(txtDiasemtransito.getValue()));
			}

			fechamentoParamptovta.setActivo(true);
			fechamentoParamptovta.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			fechamentoParamptovta.setFecmodif(new Date());

			boolean validado = validaFechamentoParamptovta(fechamentoParamptovta);

			if (validado) {
				if(puntoVenta!= null && puntoVenta.getPuntoventaId()!=null){
					fechamentoParamptovtaService.suscribir(fechamentoParamptovta);
					List<FechamentoParamptovta> params = fechamentoParamptovtaService.buscaParametrosPorPuntoventa(puntoVenta);
					fechamentoParamptovtaList.setData(params);
				}else{
					fechamentoParamptovtaList.addItemNovo(fechamentoParamptovta);
				}
				resetDadosFechamentoParamptovta();
			} else {

				try {

					Messagebox.show(
							Labels.getLabel("editarPuntoVentaController.MSG.fechamentoParamptovtaInvalidado"),
							Labels.getLabel("editarPuntoVentaController.window.title"),
							Messagebox.OK, Messagebox.ERROR);

				} catch (Exception ex) {
					log.error(ex.toString());
				}
			}
		}
	}

	private void resetDadosFechamentoParamptovta() {

		cmbEmpresaFechamentoParamptovta.setSelectedItem(null);

		radIntervalofechamentoSemanal.setChecked(false);
		radIntervalofechamentoDecendial.setChecked(false);
		radIntervalofechamentoQuinzenal.setChecked(false);
		radIntervalofechamentoMensal.setChecked(false);
		radIntervalofechamentoDiario.setChecked(false);		
	}

	private boolean validaFechamentoParamptovta(FechamentoParamptovta fechamentoParamptovta) {
		boolean validado = true;

		Object[] params = fechamentoParamptovtaList.getData();

		for (Object objectData : params) {

			FechamentoParamptovta param = (FechamentoParamptovta) objectData;
			if (fechamentoParamptovta.getEmpresa().getEmpresaId() == param.getEmpresa().getEmpresaId()) {
				validado = false;
			}
		}

		return validado;
	}

	public Combobox getCmbEmpresaFechamentoParamptovta() {
		return cmbEmpresaFechamentoParamptovta;
	}

	public void setCmbEmpresaFechamentoParamptovta(Combobox cmbEmpresaFechamentoParamptovta) {
		this.cmbEmpresaFechamentoParamptovta = cmbEmpresaFechamentoParamptovta;
	}

	public Radio getRadTotvsSi() {
		return radTotvsSi;
	}

	public void setRadTotvsSi(Radio radTotvsSi) {
		this.radTotvsSi = radTotvsSi;
	}

	public Radio getRadTotvsNo() {
		return radTotvsNo;
	}

	public void setRadTotvsNo(Radio radTotvsNo) {
		this.radTotvsNo = radTotvsNo;
	}

	public Radio getRadTotvsErro() {
		return radTotvsErro;
	}

	public void setRadTotvsErro(Radio radTotvsErro) {
		this.radTotvsErro = radTotvsErro;
	}

	public boolean isIntegracionTotvs() {
		integracionTotvs = false;
		if (ApplicationProperties.getInstance().integracionTotvs()) {
			integracionTotvs = true;
		}
		return integracionTotvs;
	}

	public void setIntegracionTotvs(boolean integracionTotvs) {
		this.integracionTotvs = integracionTotvs;
	}

	public List<String> getLsLogFiles() {
		return lsLogFiles;
	}

	public void setLsLogFiles(List<String> lsLogFiles) {
		this.lsLogFiles = lsLogFiles;
	}

	public Button getBtnShowLog() {
		return btnShowLog;
	}

	public void setBtnShowLog(Button btnShowLog) {
		this.btnShowLog = btnShowLog;
	}
	
	public static void compactarArquivo(String arqSaida,String arqEntrada) throws IOException{        
		int cont;        
		byte[] dados = new byte[TAMANHO_BUFFER];                            
		BufferedInputStream origem = null;        
		FileInputStream streamDeEntrada = null;        
		FileOutputStream destino = null;        
		ZipOutputStream saida = null;        
		ZipEntry entry = null;                       
		try {             
			destino = new FileOutputStream(new File(arqSaida));             
			saida = new ZipOutputStream(new BufferedOutputStream(destino));             
			File file = new File(arqEntrada);             
			streamDeEntrada = new FileInputStream(file);             
			origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);             
			entry = new ZipEntry(file.getName());             
			saida.putNextEntry(entry);                                     
			while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {                 
				saida.write(dados, 0, cont);             
			}             
			origem.close();             
			saida.close();        
		} catch(IOException e) {             
			throw new IOException(e.getMessage());         
		}    
	}
	
	private void excluirArquivosZip(){
		File pasta = new File(System.getProperty("jboss.server.log.dir"));    
		File[] arquivos = pasta.listFiles();    
		    
		for(File arquivo : arquivos) {
		    if(arquivo.getName().endsWith("zip")) {
		        arquivo.delete();
		    }
		}
	}
	
	public Boolean isPermissaoEditarComissao() {
		return UsuarioLogado.getUsuarioLogado().isPermisoClave(Constantes.CLAVE_EDITAR_COMISSAO);
	}

	public List<EmpresaContaBancaria> getLsEmpresaContaBancarias() {
		return lsEmpresaContaBancarias;
	}

	public void setLsEmpresaContaBancarias(List<EmpresaContaBancaria> lsEmpresaContaBancarias) {
		this.lsEmpresaContaBancarias = lsEmpresaContaBancarias;
	}

	public MyComboboxEstandar getCmbEmpresasContaBancarias() {
		return cmbEmpresasContaBancarias;
	}

	public void setCmbEmpresasContaBancarias(MyComboboxEstandar cmbEmpresasContaBancarias) {
		this.cmbEmpresasContaBancarias = cmbEmpresasContaBancarias;
	}

	public List<Empresa> getLsEmpresasFormapago() {
		return lsEmpresasFormapago;
	}

	public void setLsEmpresasFormapago(List<Empresa> lsEmpresasFormapago) {
		this.lsEmpresasFormapago = lsEmpresasFormapago;
	}			
}