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

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
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.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Row;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.Ciudad;
import com.rjconsultores.ventaboletos.entidad.ComEmpCategoria;
import com.rjconsultores.ventaboletos.entidad.ComEmpFormapago;
import com.rjconsultores.ventaboletos.entidad.ComEmpTipoEventoExtra;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.EmpresaContaBancaria;
import com.rjconsultores.ventaboletos.entidad.EmpresaImposto;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.FormaPago;
import com.rjconsultores.ventaboletos.entidad.InscricaoEstadual;
import com.rjconsultores.ventaboletos.entidad.InstiFinanceira;
import com.rjconsultores.ventaboletos.entidad.TipoEventoExtra;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.CiudadService;
import com.rjconsultores.ventaboletos.service.EmpresaImpostoService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.EstadoService;
import com.rjconsultores.ventaboletos.service.FormaPagoService;
import com.rjconsultores.ventaboletos.service.InstiFinanceiraService;
import com.rjconsultores.ventaboletos.service.TipoEventoExtraService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.RegistroConDependenciaException;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
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.render.RenderComEmpCategoria;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderComEmpFormapago;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderComEmpTipoEventoExtra;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderEmpresaContaBancaria;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderEmpresaImposto;

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

	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(EditarEmpresaController.class);
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private EmpresaImpostoService empresaImpostoService;
	@Autowired
	private EstadoService estadoService;
	@Autowired
	private CiudadService ciudadService;
	@Autowired
	private InstiFinanceiraService instFinanceiraService;
	@Autowired
	private CategoriaService categoriaService;
	@Autowired
	private FormaPagoService formaPagoService;
	@Autowired
	private TipoEventoExtraService tipoEventoExtraService;
	
	private Empresa empresa;
	private MyListbox empresaList;
	private MyTextbox txtNome;
	private MyTextbox txtCNPJ;
	private MyTextbox txtCodantt;
	private Radio rdgFechaVenta;
	private Radio rdgFechaSalida;
	private MyListbox empresaImpostoList;
	private List<EmpresaImposto> lsEmpresaImposto;
	private Button btnApagar;
	private Combobox cmbIndTipo;
	private Combobox cmbEstado;
	private Combobox cmbEstadoImposto;
	private Combobox cmbCidade;
	private Row rowEquivalencia;
	private List<Estado> lsEstados;
	private List<Estado> lsTodosEstados;
	private List<Ciudad> lsCidades;
	private MyTextbox numtelefono;
	private Checkbox chkIndcarboletosdevolvidosconf;

	private MyListbox inscEstadualList;
	private Combobox cmbEstadoInscEstadual;
	private MyTextbox txtInscEstadual;
	private Button btnRemoverInscEstadual;

	private List<InstiFinanceira> lsBanco;
	private Combobox cmbBanco;
	private MyListbox empresaContaBancariaList;
	private Textbox txtNumConta;
	private Textbox txtNumAgencia;
	private Textbox txtNumIntegracion;
	private List<EmpresaContaBancaria> lsEmpresaContaBancaria;
	private Textbox txtInscEstLogradouro;
	private Textbox txtInscEstNumero;
	private Textbox txtInscEstComplemento; 
	private Textbox txtInscEstCEP;		
	private Textbox txtInscEstBairro;
	private Combobox cmbInscEstCidade;
	private Textbox txtInscEstCNPJ;
	
	private List<Categoria> lsCategorias;
	private List<FormaPago> lsFormaPagos;
	private List<TipoEventoExtra> lsTipoEventoExtras;
	
	private MyListbox comEmpCategoriaList;
	private MyListbox comEmpFormapagoList;
	private MyListbox comEmpTipoEventoExtraList;
	
	private MyComboboxEstandar cmbCategorias;
	private MyComboboxEstandar cmbFormaPagos;
	private MyComboboxEstandar cmbTipoEventoExtras;
	
	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public List<Estado> getLsEstados() {
		return lsEstados;
	}

	public void setLsEstados(List<Estado> lsEstados) {
		this.lsEstados = lsEstados;
	}

	/**
	 * @return the lsTodosEstados
	 */
	public List<Estado> getLsTodosEstados() {
		return lsTodosEstados;
	}

	/**
	 * @param lsTodosEstados
	 *            the lsTodosEstados to set
	 */
	public void setLsTodosEstados(List<Estado> lsTodosEstados) {
		this.lsTodosEstados = lsTodosEstados;
	}

	public List<Ciudad> getLsCidades() {
		return lsCidades;
	}

	public void setLsCidades(List<Ciudad> lsCidades) {
		this.lsCidades = lsCidades;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {

		lsCategorias = categoriaService.obtenerTodasCategoriasVisibles();
		lsFormaPagos = formaPagoService.obtenerTodos();
		lsTipoEventoExtras = tipoEventoExtraService.obtenerTodos();

		empresa = (Empresa) Executions.getCurrent().getArg().get("empresa");
		empresaList = (MyListbox) Executions.getCurrent().getArg().get("empresaList");

		lsEstados = estadoService.buscarNotInEmpresaImposto(empresa);
		lsTodosEstados = estadoService.obtenerTodos();
		lsCidades = new ArrayList<Ciudad>();
		lsBanco = instFinanceiraService.obtenerTodos();

		super.doAfterCompose(comp);
		
		if(empresa.getIndfechatarifa() == null){
			rdgFechaSalida.setChecked(Boolean.TRUE);
		}else if(empresa.getIndfechatarifa()){
			rdgFechaVenta.setChecked(Boolean.TRUE);
		}else{
			rdgFechaSalida.setChecked(Boolean.TRUE);
		}

		lsEmpresaContaBancaria = new ArrayList<EmpresaContaBancaria>();
		empresaContaBancariaList.setItemRenderer(new RenderEmpresaContaBancaria());
		empresaContaBancariaList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				EmpresaContaBancaria empCB = (EmpresaContaBancaria) empresaContaBancariaList.getSelected();
				editContaBancaria(empCB);
			}
		});

		empresaImpostoList.setItemRenderer(new RenderEmpresaImposto());
		empresaImpostoList.addEventListener("onDoubleClick", new EventListener() {
			@Override
			public void onEvent(Event event) throws Exception {
				EmpresaImposto empresaImposto = (EmpresaImposto) empresaImpostoList.getSelected();
				abrirEmpresaImposto(empresaImposto);
			}
		});

		inscEstadualList.setItemRenderer(new ListitemRenderer() {

			@Override
			public void render(Listitem listItem, Object item) throws Exception {
				InscricaoEstadual inscricaoEstadual = (InscricaoEstadual) item;

				new Listcell(inscricaoEstadual.getEstado().getNombestado()).setParent(listItem);
				new Listcell(inscricaoEstadual.getNumInscricaoEstadual()).setParent(listItem);
				if(null != inscricaoEstadual.getCidade() ){
					new Listcell(inscricaoEstadual.getCidade().getNombciudad()).setParent(listItem);
				}else{
					new Listcell("").setParent(listItem);
				}
				new Listcell(inscricaoEstadual.getCnpj()).setParent(listItem);
				new Listcell(inscricaoEstadual.getLogradouro()).setParent(listItem);
				new Listcell(inscricaoEstadual.getNumero()).setParent(listItem);
				new Listcell(inscricaoEstadual.getComplemento()).setParent(listItem);
				new Listcell(inscricaoEstadual.getCep()).setParent(listItem);
				new Listcell(inscricaoEstadual.getBairro()).setParent(listItem);
				
				
				
				listItem.setAttribute("data", inscricaoEstadual);
			}
		});

		if (empresa.getEmpresaId() != null) {
			empresa = empresaService.obtenerID(empresa.getEmpresaId());
			lsEmpresaImposto = empresaImpostoService.buscarByEmpresa(empresa);
			empresaImpostoList.setData(lsEmpresaImposto);
			inscEstadualList.setData(empresa.getInscricoesEstaduaisActivas());

			// Contas Bancárias das Empresas
			lsEmpresaContaBancaria = empresa.getEmpresaContaBancaria();
			empresaContaBancariaList.setData(lsEmpresaContaBancaria);
		}

		chkIndcarboletosdevolvidosconf.setChecked(empresa.getIndcarboletosdevolvidosconf() == null? false:empresa.getIndcarboletosdevolvidosconf());
		txtNome.focus();

		if (empresa.getEmpresaId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		} else {
			Ciudad cidade = empresa.getCidade();
			if (cidade != null) {
				cmbCidade.setText(cidade.getNombciudad());

				Estado estado = cidade.getEstado();
				if (estado != null) {
					cmbEstado.setText(estado.getNombestado());
				}
			}
		}

		if (!ApplicationProperties.getInstance().mostrarEquivalencia()) {
			rowEquivalencia.setVisible(Boolean.FALSE);
		}
		
		comEmpCategoriaList.setItemRenderer(new RenderComEmpCategoria());
		if(empresa.getComEmpCategorias() != null) {
			comEmpCategoriaList.setData(empresa.getComEmpCategorias());
		}
		
		comEmpFormapagoList.setItemRenderer(new RenderComEmpFormapago());
		
		if(empresa.getComEmpFormapagos() != null) {
			comEmpFormapagoList.setData(empresa.getComEmpFormapagos());
		}
		
		comEmpTipoEventoExtraList.setItemRenderer(new RenderComEmpTipoEventoExtra());
		
		if(empresa.getComEmpTipoEventoExtras() != null) {
			comEmpTipoEventoExtraList.setData(empresa.getComEmpTipoEventoExtras());
		}

	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void editContaBancaria(EmpresaContaBancaria empCB) {
		if (empCB == null) {
			return;
		}

		Map args = new HashMap();
		args.put("empresaContaBancaria", empCB);
		args.put("empresaContaBancariaList", empresaContaBancariaList);

		openWindow("/gui/catalogos/editarContaBancariaEmpresa.zul",
				Labels.getLabel("editarEmpresaController.contaBancaria.window.title"), args, MODAL);
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtNome.getValue();
		cmbIndTipo.getValue();
		txtCNPJ.getValue();
		txtCodantt.getValue();
		numtelefono.getValue();
		chkIndcarboletosdevolvidosconf.getValue();

		Comboitem cbiCidade = cmbCidade.getSelectedItem();
		if (cbiCidade != null) {
			Ciudad cidade = (Ciudad) cbiCidade.getValue();
			empresa.setCidade(cidade);
		}

		try {
			if (empresa.getIndExterna() == null) {
				empresa.setIndExterna(Boolean.FALSE);
			}
			empresa.setIndfechatarifa(rdgFechaVenta.isChecked());

			empresa.setIndcarboletosdevolvidosconf(chkIndcarboletosdevolvidosconf.isChecked());
			
			empresaService.suscribirActualizacion(empresa);
			empresaList.updateItem(empresa);

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

			closeWindow();

		} catch (Exception ex) {
			log.error("editarEmpresaController: " + ex);

			Messagebox.show(Labels.getLabel(ex.getMessage()),
					Labels.getLabel("editarEmpresaController.window.title"), Messagebox.OK, Messagebox.ERROR);
		}
	}

	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$btnApagar(Event ev) throws InterruptedException {

		int resp = Messagebox.show(
				Labels.getLabel("editarEmpresaController.MSG.borrarPergunta"),
				Labels.getLabel("editarEmpresaController.window.title"),
				Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (resp == Messagebox.YES) {

			try {
				empresaService.borrar(empresa);
			} catch (RegistroConDependenciaException e) {
				Messagebox.show(
						Labels.getLabel("editarEmpresaController.MSG.noPuedeBorrar"),
						Labels.getLabel("editarEmpresaController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				return;

			}

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

			empresaList.removeItem(empresa);

			closeWindow();
		}
	}

	public void onChange$cmbEstado(Event ev) {
		Comboitem cbiEstado = cmbEstado.getSelectedItem();
		if (cbiEstado != null) {
			Estado estado = (Estado) cbiEstado.getValue();

			lsCidades.addAll(ciudadService.buscarPorEstado(estado));
			BindingListModel listModelCiudad = new BindingListModelList(lsCidades, true);
			cmbCidade.setModel(listModelCiudad);
		}
	}
	
	public void onChange$cmbEstadoInscEstadual(Event ev) {
		Comboitem cbiEstado = cmbEstadoInscEstadual.getSelectedItem();
		if (cbiEstado != null) {
			Estado estado = (Estado) cbiEstado.getValue();

			lsCidades.addAll(ciudadService.buscarPorEstado(estado));
			BindingListModel listModelCiudad = new BindingListModelList(lsCidades, true);
			cmbInscEstCidade.setModel(listModelCiudad);
		}
	}

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

		EmpresaImposto empresaImposto = new EmpresaImposto();

		empresaImposto.setEstado(estado);
		empresaImposto.setEmpresa(empresa);

		empresaImpostoService.suscribir(empresaImposto);

		lsEmpresaImposto.add(empresaImposto);

		List<EmpresaImposto> lsEmpresaImpostoAtivo = new ArrayList<EmpresaImposto>();
		for (EmpresaImposto rc : lsEmpresaImposto) {
			if (rc.getActivo()) {
				lsEmpresaImpostoAtivo.add(rc);
			}
		}
		empresaImpostoList.setData(lsEmpresaImpostoAtivo);

		cmbEstadoImposto.getSelectedItem().setVisible(false);
		cmbEstadoImposto.setSelectedIndex(-1);

		this.abrirEmpresaImposto(empresaImposto);

	}

	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void abrirEmpresaImposto(EmpresaImposto empresaImposto) {
		Map args = new HashMap();
		args.put("empresaImposto", empresaImposto);
		args.put("empresaImpostoList", empresaImpostoList);

		openWindow("/gui/catalogos/editarEmpresaImposto.zul",
				Labels.getLabel("editarEmpresaImpostoController.window.title"), args, MODAL);

	}

	public MyListbox getInscEstadualList() {
		return inscEstadualList;
	}

	public void setInscEstadualList(MyListbox inscEstadualList) {
		this.inscEstadualList = inscEstadualList;
	}

	public void onClick$btnAdicionarInscEstadual(Event ev) throws InterruptedException {
		Estado estado = (Estado) cmbEstadoInscEstadual.getSelectedItem().getValue();
		String inscEstadual = txtInscEstadual.getValue();

		String inscEstLogradouro = txtInscEstLogradouro.getValue();
		String inscEstNumero = txtInscEstNumero.getValue();
		String inscEstComplemento = txtInscEstComplemento.getValue();
		String inscEstCEP = txtInscEstCEP.getValue();
		String inscEstBairro = txtInscEstBairro.getValue();
		Ciudad ciudad = (Ciudad)cmbInscEstCidade.getSelectedItem().getValue();
		String inscEstCNPJ = txtInscEstCNPJ.getValue();
		

		for (int i = 0; i < inscEstadualList.getModel().getSize(); i++) {
			if (((InscricaoEstadual) inscEstadualList.getModel().getElementAt(i)).getEstado().equals(estado)) {
				Messagebox.show(
						Labels.getLabel("editarEmpresaController.MSG.insEstadualCadastrada"),
						Labels.getLabel("editarPricingController.windowMarca.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
				return;
			}
		}

		InscricaoEstadual nuevaInscEstadual = new InscricaoEstadual(inscEstadual, empresa, estado, UsuarioLogado.getUsuarioLogado().getUsuarioId(),
				inscEstLogradouro, inscEstNumero, inscEstComplemento, inscEstCEP, inscEstBairro, ciudad, inscEstCNPJ);
		empresaService.actualizaInscEstadual(nuevaInscEstadual);
		empresa.getInscricoesEstaduais().add(nuevaInscEstadual);

		inscEstadualList.setData(empresa.getInscricoesEstaduaisActivas());

		cmbEstadoInscEstadual.setSelectedItem(null);
		txtInscEstadual.setText(null);
		txtInscEstLogradouro.setText(null);
		txtInscEstNumero.setText(null);
		txtInscEstComplemento.setText(null);
		txtInscEstCEP.setText(null);
		txtInscEstBairro.setText(null);
		cmbInscEstCidade.setSelectedItem(null);
		txtInscEstCNPJ.setText(null);
	}

	public void onClick$btnRemoverInscEstadual(Event ev) throws InterruptedException {
		InscricaoEstadual inscEstadual = (InscricaoEstadual) inscEstadualList.getSelected();
		if (inscEstadual != null) {

			if (inscEstadual.getInscricaoestadualId() != null) {
				inscEstadual.setActivo(Boolean.FALSE);
				inscEstadual.setFecmodif(Calendar.getInstance().getTime());
				inscEstadual.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

				empresaService.actualizaInscEstadual(inscEstadual);
			}

			inscEstadualList.setData(empresa.getInscricoesEstaduaisActivas());
		}
	}
	
	public void onClick$btnAdicionarComissaoCategoria(Event ev) throws InterruptedException {
		try {
			
			Categoria categoria = (Categoria) cmbCategorias.getSelectedItem().getValue();
			
			if(categoria != null) {
				
				ComEmpCategoria comEmpCategoria = new ComEmpCategoria();
				comEmpCategoria.setCategoria(categoria);
				comEmpCategoria.setEmpresa(getEmpresa());
				
				comEmpCategoria = empresaService.adicionarComissaoCategoria(comEmpCategoria);

				comEmpCategoriaList.updateItem(comEmpCategoria);
			
	            Messagebox.show(Labels.getLabel("editarEmpresaController.msg.adicionarComissaoCategoria"),
	    				Labels.getLabel("editarEmpresaController.window.title"),
	    				Messagebox.OK,Messagebox.INFORMATION);
            
			}

		} catch (Exception e) {
			log.error(e.getMessage(), e);
		    Messagebox.show(Labels.getLabel("MSG.Error"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.ERROR);
		}
	}
	
	public void onClick$btnRemoverComissaoCategoria(Event ev) throws InterruptedException {
		try {
			if(comEmpCategoriaList.getSelected() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarEmpresaController.MSG.borrarComissaoCategoriaPergunta"),
						Labels.getLabel("editarEmpresaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
	
				if (resp == Messagebox.YES) {
					ComEmpCategoria comEmpCategoria = (ComEmpCategoria) comEmpCategoriaList.getSelected();
					empresaService.removerComissaoCategoria(comEmpCategoria);
					comEmpCategoriaList.removeItem(comEmpCategoria);
					
		            Messagebox.show(Labels.getLabel("editarEmpresaController.msg.removerComissaoCategoria"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.INFORMATION);				
				}
			}
			
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		    Messagebox.show(Labels.getLabel("MSG.Error"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.ERROR);
		}
	}
	
	public void onClick$btnAdicionarComissaoFormapago(Event ev) throws InterruptedException {
		try {
			
			FormaPago formapago = (FormaPago) cmbFormaPagos.getSelectedItem().getValue();
			
			if(formapago != null) {
				
				ComEmpFormapago comEmpFormapago = new ComEmpFormapago();
				comEmpFormapago.setFormaPago(formapago);
				comEmpFormapago.setEmpresa(getEmpresa());
				
				comEmpFormapago = empresaService.adicionarComissaoFormapago(comEmpFormapago);

				comEmpFormapagoList.updateItem(comEmpFormapago);
			
	            Messagebox.show(Labels.getLabel("editarEmpresaController.msg.adicionarComissaoFormapago"),
	    				Labels.getLabel("editarEmpresaController.window.title"),
	    				Messagebox.OK,Messagebox.INFORMATION);
            
			}

		} catch (Exception e) {
			log.error(e.getMessage(), e);
		    Messagebox.show(Labels.getLabel("MSG.Error"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.ERROR);
		}
	}
	
	public void onClick$btnRemoverComissaoFormapago(Event ev) throws InterruptedException {
		try {
			if(comEmpFormapagoList.getSelected() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarEmpresaController.MSG.borrarComissaoFormapagoPergunta"),
						Labels.getLabel("editarEmpresaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
	
				if (resp == Messagebox.YES) {
					ComEmpFormapago comEmpFormapago = (ComEmpFormapago) comEmpFormapagoList.getSelected();
					empresaService.removerComissaoFormapago(comEmpFormapago);
					comEmpFormapagoList.removeItem(comEmpFormapago);
					
		            Messagebox.show(Labels.getLabel("editarEmpresaController.msg.removerComissaoFormapago"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.INFORMATION);				
				}
			}
			
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		    Messagebox.show(Labels.getLabel("MSG.Error"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.ERROR);
		}		
	}
	
	public void onClick$btnAdicionarComissaoTipoEventoExtra(Event ev) throws InterruptedException {
		try {
			
			TipoEventoExtra tipoEventoExtra = (TipoEventoExtra) cmbTipoEventoExtras.getSelectedItem().getValue();
			
			if(tipoEventoExtra != null) {
				
				ComEmpTipoEventoExtra comEmpTipoEventoExtra = new ComEmpTipoEventoExtra();
				comEmpTipoEventoExtra.setTipoEventoExtra(tipoEventoExtra);
				comEmpTipoEventoExtra.setEmpresa(getEmpresa());
				
				comEmpTipoEventoExtra = empresaService.adicionarComissaoTipoEventoExtra(comEmpTipoEventoExtra);

				comEmpTipoEventoExtraList.updateItem(comEmpTipoEventoExtra);
			
	            Messagebox.show(Labels.getLabel("editarEmpresaController.msg.adicionarComissaoTipoEventoExtra"),
	    				Labels.getLabel("editarEmpresaController.window.title"),
	    				Messagebox.OK,Messagebox.INFORMATION);
            
			}

		} catch (Exception e) {
			log.error(e.getMessage(), e);
		    Messagebox.show(Labels.getLabel("MSG.Error"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.ERROR);
		}
	}
	
	public void onClick$btnRemoverComissaoTipoEventoExtra(Event ev) throws InterruptedException {
		try {
			if(comEmpTipoEventoExtraList.getSelected() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarEmpresaController.MSG.borrarComissaoTipoEventoExtraPergunta"),
						Labels.getLabel("editarEmpresaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
	
				if (resp == Messagebox.YES) {
					ComEmpTipoEventoExtra comEmpTipoEventoExtra = (ComEmpTipoEventoExtra) comEmpTipoEventoExtraList.getSelected();
					empresaService.removerComissaoTipoEventoExtra(comEmpTipoEventoExtra);
					comEmpTipoEventoExtraList.removeItem(comEmpTipoEventoExtra);
					
		            Messagebox.show(Labels.getLabel("editarEmpresaController.msg.removerComissaoTipoEventoExtra"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.INFORMATION);				
				}
			}
			
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		    Messagebox.show(Labels.getLabel("MSG.Error"),
		    				Labels.getLabel("editarEmpresaController.window.title"),
		    				Messagebox.OK,Messagebox.ERROR);
		}		
	}

	public Combobox getCmbEstadoInscEstadual() {
		return cmbEstadoInscEstadual;
	}

	public void setCmbEstadoInscEstadual(Combobox cmbEstadoInscEstadual) {
		this.cmbEstadoInscEstadual = cmbEstadoInscEstadual;
	}

	public MyTextbox getTxtInscEstadual() {
		return txtInscEstadual;
	}

	public void setTxtInscEstadual(MyTextbox txtInscEstadual) {
		this.txtInscEstadual = txtInscEstadual;
	}

	public Button getBtnRemoverInscEstadual() {
		return btnRemoverInscEstadual;
	}

	public void setBtnRemoverInscEstadual(Button btnRemoverInscEstadual) {
		this.btnRemoverInscEstadual = btnRemoverInscEstadual;
	}



	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 MyListbox getEmpresaContaBancariaList() {
		return empresaContaBancariaList;
	}

	public void setEmpresaContaBancariaList(MyListbox empresaContaBancariaList) {
		this.empresaContaBancariaList = empresaContaBancariaList;
	}

	public Textbox getTxtNumConta() {
		return txtNumConta;
	}

	public void setTxtNumConta(Textbox txtNumConta) {
		this.txtNumConta = txtNumConta;
	}

	public Textbox getTxtNumAgencia() {
		return txtNumAgencia;
	}

	public void setTxtNumAgencia(Textbox txtNumAgencia) {
		this.txtNumAgencia = txtNumAgencia;
	}
	
	public Combobox getCmbInscEstCidade() {
		return cmbInscEstCidade;
	}

	public void setCmbInscEstCidade(Combobox cmbInscEstCidade) {
		this.cmbInscEstCidade = cmbInscEstCidade;
	}

	public Textbox getTxtInscEstLogradouro() {
		return txtInscEstLogradouro;
	}

	public void setTxtInscEstLogradouro(Textbox txtInscEstLogradouro) {
		this.txtInscEstLogradouro = txtInscEstLogradouro;
	}

	public Textbox getTxtInscEstNumero() {
		return txtInscEstNumero;
	}

	public void setTxtInscEstNumero(Textbox txtInscEstNumero) {
		this.txtInscEstNumero = txtInscEstNumero;
	}

	public Textbox getTxtInscEstComplemento() {
		return txtInscEstComplemento;
	}

	public void setTxtInscEstComplemento(Textbox txtInscEstComplemento) {
		this.txtInscEstComplemento = txtInscEstComplemento;
	}

	public Textbox getTxtInscEstCEP() {
		return txtInscEstCEP;
	}

	public void setTxtInscEstCEP(Textbox txtInscEstCEP) {
		this.txtInscEstCEP = txtInscEstCEP;
	}

	public Textbox getTxtInscEstBairro() {
		return txtInscEstBairro;
	}

	public void setTxtInscEstBairro(Textbox txtInscEstBairro) {
		this.txtInscEstBairro = txtInscEstBairro;
	}

	public Textbox getTxtInscEstCNPJ() {
		return txtInscEstCNPJ;
	}

	public void setTxtInscEstCNPJ(Textbox txtInscEstCNPJ) {
		this.txtInscEstCNPJ = txtInscEstCNPJ;
	}

	public void onClick$btnRemoverContaBancaria(Event ev) {

		EmpresaContaBancaria empresaToRemove = (EmpresaContaBancaria) empresaContaBancariaList.getSelected();

		if (empresaToRemove != null) {
			lsEmpresaContaBancaria.remove(empresaToRemove);
			empresaToRemove.setFecmodif(Calendar.getInstance().getTime());
			empresaToRemove.setActivo(Boolean.FALSE);
			empresaToRemove.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			lsEmpresaContaBancaria.add(empresaToRemove);
			empresaContaBancariaList.updateItem(empresaToRemove);
			empresaContaBancariaList.removeItem(empresaToRemove);
			empresa.setEmpresaContaBancaria(lsEmpresaContaBancaria);
		} else {
			try {
				Messagebox.show(
						Labels.getLabel("editarEmpresaController.MSG.selecioneUmItem"),
						Labels.getLabel("editarEmpresaController.contaBancaria.label"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			} catch (InterruptedException e) {
				log.error("editarEmpresaController: " + e);
			}
		}
	}

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

		if (infoContaBancariaValida()) {
			InstiFinanceira instiFinanceira = (InstiFinanceira) cmbBanco.getSelectedItem().getValue();
			String numConta = txtNumConta.getValue();
			String numAgencia = txtNumAgencia.getValue();
			String numIntegracion = txtNumIntegracion.getValue();

			EmpresaContaBancaria empresaContaBancariaToAdd = new EmpresaContaBancaria();
			empresaContaBancariaToAdd.setActivo(Boolean.TRUE);
			empresaContaBancariaToAdd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			empresaContaBancariaToAdd.setFecmodif(Calendar.getInstance().getTime());
			empresaContaBancariaToAdd.setEmpresa(empresa);
			empresaContaBancariaToAdd.setInstituicaoFinandeira(instiFinanceira);
			empresaContaBancariaToAdd.setNumAgencia(numAgencia);
			empresaContaBancariaToAdd.setNumIntegracion(numIntegracion);
			empresaContaBancariaToAdd.setNumConta(numConta);

			boolean achou = Boolean.FALSE;
			for (EmpresaContaBancaria empresaContaBancariaInTheList : lsEmpresaContaBancaria) {
				if (empresaContaBancariaInTheList.equals(empresaContaBancariaToAdd)) {
					achou = Boolean.TRUE;
				}
			}

			if (!achou) {
				lsEmpresaContaBancaria.add(empresaContaBancariaToAdd);
				empresa.setEmpresaContaBancaria(lsEmpresaContaBancaria);

				List<EmpresaContaBancaria> tempList = new ArrayList<EmpresaContaBancaria>();
				if (lsEmpresaContaBancaria != null) {
					for (EmpresaContaBancaria empresaContaBancaria : lsEmpresaContaBancaria) {
						if (empresaContaBancaria.getActivo()) {
							tempList.add(empresaContaBancaria);
						}
					}
				}

				empresaContaBancariaList.setData(tempList);

			} else {
				Messagebox.show(
						Labels.getLabel("editarEmpresaController.MSG.jaExisteContaComAsMesmasInfoCadastradas"),
						Labels.getLabel("editarEmpresaController.contaBancaria.label"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
			
			clearContaBancaria();
		}
	}

	private void clearContaBancaria() {
		cmbBanco.setSelectedItem(null);
		txtNumAgencia.setValue(null);
		txtNumConta.setValue(null);
	}

	private boolean infoContaBancariaValida() throws InterruptedException {

		if (cmbBanco.getSelectedItem().getValue() == null) {
			Messagebox.show(
					Labels.getLabel("editarEmpresaController.MSG.informeBanco"),
					Labels.getLabel("editarEmpresaController.contaBancaria.label"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return false;
		}

		if (txtNumConta.getValue() == null) {
			Messagebox.show(
					Labels.getLabel("editarEmpresaController.MSG.informeConta"),
					Labels.getLabel("editarEmpresaController.contaBancaria.label"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return false;
		}

		if (txtNumAgencia.getValue() == null) {
			Messagebox.show(
					Labels.getLabel("editarEmpresaController.MSG.informeAgencia"),
					Labels.getLabel("editarEmpresaController.contaBancaria.label"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return false;
		}

		return true;
	}

	public List<Categoria> getLsCategorias() {
		return lsCategorias;
	}

	public void setLsCategorias(List<Categoria> lsCategorias) {
		this.lsCategorias = lsCategorias;
	}

	public List<FormaPago> getLsFormaPagos() {
		return lsFormaPagos;
	}

	public void setLsFormaPagos(List<FormaPago> lsFormaPagos) {
		this.lsFormaPagos = lsFormaPagos;
	}

	public List<TipoEventoExtra> getLsTipoEventoExtras() {
		return lsTipoEventoExtras;
	}

	public void setLsTipoEventoExtras(List<TipoEventoExtra> lsTipoEventoExtras) {
		this.lsTipoEventoExtras = lsTipoEventoExtras;
	}

	public MyListbox getComEmpCategoriaList() {
		return comEmpCategoriaList;
	}

	public void setComEmpCategoriaList(MyListbox comEmpCategoriaList) {
		this.comEmpCategoriaList = comEmpCategoriaList;
	}
}
