function CtrConfVendas() {

	this.setAutoReferencia(this);
	var autoReferencia = this;
	
	this.setId("CtrConfVendas");
	
	this.instanciarLimite = function() {
		return new LimConfVendas(this);
	}
  	
	this.inicializa = function() {
	}
  	
  	/*** atributos ***/
  	this.entConfVendas = null;
  	this.tipoCadastro = "";
  	this.tipoBuscaRapida = "";
	
	/*** Buscas Rapidas ***/
	// CENTRO DE CUSTOS
	this.buscaRapidaCentroDeCustos = function(campoAtual, proximoCampo) {
		var departamento = "DeptoOperacional()";
		var pesquisa = "CentroDeCustos";
		var requisitante = "CtrConfVendas";
		
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
	
	// PLANO DE CONTAS
	this.buscaRapidaPlanoDeConta = function(campoAtual, proximoCampo) {
		var departamento = "DeptoFinanceiro()";
		var pesquisa = "PlanoDeContas";
		var requisitante = "CtrConfVendas";
		
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
	
	// CONTA BANCARIA
	this.buscaRapidaContaBancaria = function(campoAtual, proximoCampo) {
		var departamento = "DeptoFinanceiro()";
		var pesquisa = "ContaBancaria";
		var requisitante = "CtrConfVendas";
		
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
	
	// CLIENTE
	this.buscaRapidaCliente = function(campoAtual, proximoCampo) {
		var departamento = "DeptoPessoal()";
		var pesquisa = "Colaborador";
		var requisitante = "CtrConfVendas";
		
		this.setTipoBuscaRapida("Cliente");
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
	
	// VENDEDOR
	this.buscaRapidaVendedor = function(campoAtual, proximoCampo) {
		var departamento = "DeptoPessoal()";
		var pesquisa = "Colaborador";
		var requisitante = "CtrConfVendas";
		
		this.setTipoBuscaRapida("Vendedor");
		this.buscaRapida(campoAtual, proximoCampo, departamento,pesquisa ,requisitante);
	}
	
	/*** RETORNO PADRAO PARA A PESQUISA GENERICA (ctrBuscaRapida e ctrPesquisaSimple) ***/
	this.retornoPesquisas = function(codigo, descricao, pesquisa) {
		var limite = autoReferencia.getLimite();
		
		if (pesquisa == "CentroDeCustos") {
			autoReferencia.imprimeCentroDeCustos(codigo, descricao);
			autoReferencia.buscaConfiguracoesDeVendas(codigo);
		}
		else if (pesquisa == "PlanoDeContas") {
			autoReferencia.imprimePlanoDeConta(codigo, descricao);
		}
		else if (pesquisa == "ContaBancaria") {
			autoReferencia.imprimeContaBancaria(codigo, descricao);
		}
		else if (pesquisa == "Colaborador") {
			if( this.getTipoBuscaRapida() == "Cliente") {
				autoReferencia.imprimeCliente(codigo, descricao);
			} else if (this.getTipoBuscaRapida() == "Vendedor") {
				autoReferencia.imprimeVendedor(codigo, descricao);
			}
		}
		else {
			limite.mostrarMensagem("alerta", PESQUISA_NAO_RECONHECIDA);
		}
	}
	
	
	/*** Buscas Por Codigo ***/
	//busca configuraçoes
	this.buscaConfiguracoesDeVendas = function(codigo) {
		var entRegistro = new EntRegistro();
		entRegistro.setCodigo(codigo);
		
		var entConfVendas = new EntConfVendas();
		entConfVendas.setResumoCC(entRegistro);
		
		var deptoConfiguracoes = new DeptoConfiguracoes();
		deptoConfiguracoes.busca(entConfVendas, this.retornoBuscaConfiguracoesDeVendas);
	}
	
	this.retornoBuscaConfiguracoesDeVendas = function(resposta) {
		var objLimite = autoReferencia.getLimite();
		if(autoReferencia.trataMensagemRespostaServidor(resposta.codErro, resposta.mensagem)) {
			if (resposta.dados[0].resumoContaBancaria != null) {
				autoReferencia.imprimeContaBancaria(resposta.dados[0].resumoContaBancaria.codigo, resposta.dados[0].resumoContaBancaria.descricao);
				autoReferencia.imprimePlanoDeConta(resposta.dados[0].resumoPlanoDeContas.codigo, resposta.dados[0].resumoPlanoDeContas.descricao);
				autoReferencia.imprimeCliente(resposta.dados[0].resumoCliente.codigo, resposta.dados[0].resumoCliente.descricao);
				autoReferencia.imprimeVendedor(resposta.dados[0].resumoVendedor.codigo, resposta.dados[0].resumoVendedor.descricao);
				autoReferencia.setTipoCadastro("Alterar");
			} else {
				autoReferencia.setTipoCadastro("Salvar");
				objLimite.limpaConfVendas();
			}
		}
	}
	
	// CENTRO DE CUSTOS
	this.buscaCentroDeCustos = function(codigo) {
		var entCentroDeCustos = new EntCentroDeCustos();
		entCentroDeCustos.setCodigo(codigo);
		
		var deptoOperacional = new DeptoOperacional();
		deptoOperacional.busca(entCentroDeCustos, this.retornoBuscaCentroDeCustos);
	}
	
	this.retornoBuscaCentroDeCustos = function(resposta) {
		var objLimite = autoReferencia.getLimite();
		if(autoReferencia.trataMensagemRespostaServidor(resposta.codErro, resposta.mensagem)) {
			if (resposta.dados != null) {
				autoReferencia.imprimeCentroDeCustos(resposta.dados[0].codigo, resposta.dados[0].nome);
				autoReferencia.buscaConfiguracoesDeVendas(resposta.dados[0].codigo);
			} else {
				objLimite.limpaCentroDeCustos();
			}
		}
	}
	
	this.imprimeCentroDeCustos = function(codigo, descricao) {
		var limite = this.getLimite();
		
		limite.setCampoCodigoCentroDeCustos(codigo);
		limite.setCampoCentroDeCustos(descricao);
	}
	
	// PLANO DE CONTA
	this.buscaPlanoDeConta = function(codigo) {
		var entPlanoDeConta = new EntPlanoDeContas();
		entPlanoDeConta.setCodigo(codigo);
		
		var dptoFinanceiro = new DeptoFinanceiro();
		dptoFinanceiro.busca(entPlanoDeConta, this.retornoBuscaPlanoDeConta);
	}
	
	this.retornoBuscaPlanoDeConta = function(resposta) {
		var objLimite = autoReferencia.getLimite();
		if(autoReferencia.trataMensagemRespostaServidor(resposta.codErro, resposta.mensagem)) {
			if (resposta.dados == undefined) {
				objLimite.limpaPlanoDeConta();
			} 
			else {
				autoReferencia.imprimePlanoDeConta(resposta.dados[0].codigo, resposta.dados[0].nome);
			}
		}
	}
	
	this.imprimePlanoDeConta = function(codigo, descricao) {
		var limite = this.getLimite();
		
		limite.setCampoCodigoPlanoDeConta(codigo);
		limite.setCampoPlanoDeConta(descricao);
	}
	
	// CONTA BANCARIA
	this.buscaContaBancaria = function(codigo) {
		var entContaBancaria = new EntContaBancaria();
		entContaBancaria.setCodigo(codigo);
		
		var deptoFinanceiro = new DeptoFinanceiro();
		deptoFinanceiro.busca(entContaBancaria, this.retornoBuscaContaBancaria);
	}
	
	this.retornoBuscaContaBancaria = function(dados) {
		var xml = new Xml();
		xml.lerXml(dados);
		var resposta = xml.getValorElemento("resposta");

		var objLimite = autoReferencia.getLimite();
		
		if(autoReferencia.trataMensagemRespostaServidor(resposta.codErro, resposta.mensagem)) {
			if (resposta.dados == undefined) {
				objLimite.limpaContaBancaria();
			} 
			else {
				autoReferencia.imprimeContaBancaria(resposta.dados.ContaBancaria.codigo, resposta.dados.ContaBancaria.detalhes);
			}
		}
	}
	
	this.imprimeContaBancaria = function(codigo, descricao) {
		var limite = this.getLimite();
		
		limite.setCampoCodigoContaBancaria(codigo);
		limite.setCampoContaBancaria(descricao);
	}
	
	// CLIENTE
	this.buscaCliente = function(codigo) {
		var entColaborador = new EntColaborador();
		
		entColaborador.setCodigo(codigo);
		
		new DeptoPessoal().busca(entColaborador, this.retornoBuscaCliente);
	}
	
	this.retornoBuscaCliente = function(resposta) {
		var limite = autoReferencia.getLimite();
		
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, false)) {
			if (resposta.dados != undefined) {
				autoReferencia.imprimeCliente(resposta.dados[0].codigo, resposta.dados[0].nome);
			} else {
				limite.limpaCliente();
			}
		}		
	}
	
	this.imprimeCliente = function(codigo, descricao) {
		var limite = this.getLimite();
		
		limite.setCampoCodigoCliente(codigo == null ? "" : codigo);
		limite.setCampoCliente(descricao);		
	}
	
	// VENDEDOR
	this.buscaVendedor = function(codigo) {
		var entColaborador = new EntColaborador();
		
		entColaborador.setCodigo(codigo);
		
		new DeptoPessoal().busca(entColaborador, this.retornoBuscaVendedor);
	}
	
	this.retornoBuscaVendedor = function(resposta) {
		var limite = autoReferencia.getLimite();
		
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, false)) {
			if (resposta.dados != undefined) {
				autoReferencia.imprimeVendedor(resposta.dados[0].codigo, resposta.dados[0].nome);
			} else {
				limite.limpaVendedor();
			}
		}		
	}
	
	this.imprimeVendedor = function(codigo, descricao) {
		var limite = this.getLimite();
		
		limite.setCampoCodigoVendedor(codigo == null ? "" : codigo);
		limite.setCampoVendedor(descricao);		
	}
	
	/*** Pesquisas ***/
	//PESQUISA CENTRO DE CUSTOS
	this.pesquisaCentroDeCustos = function(codigo, iniciais, ativo, registroInicial, qtdDeRegistros, metodoDeRetorno) {
		if (metodoDeRetorno == undefined) { // executado pelo limite
			this.setMetodoDePesquisa(this.pesquisaCentroDeCustos);
			this.setMetodoDeRetorno(this.retornoPesquisaCentroDeCustos);
			this.pesquisar();		
		}
		else { // executado pelo controlador de pesquisa generica
			var entCentroDeCustos = new EntCentroDeCustos();
			entCentroDeCustos.setCodigo(codigo);
			entCentroDeCustos.setNome(iniciais);
			entCentroDeCustos.setAtivo(ativo);
		
			new DeptoOperacional().lista(entCentroDeCustos, registroInicial, qtdDeRegistros, metodoDeRetorno);
		}
	}
	
	this.retornoPesquisaCentroDeCustos = function(codigo, descricao) {
		this.imprimeCentroDeCustos(codigo, descricao);
		autoReferencia.buscaConfiguracoesDeVendas(codigo);
	}
	
	//PESQUISA PLANO DE CONTAS
	this.pesquisaPlanoDeConta = function() {
		var controladorPesquisaPlanoDeConta = aplicativo.getControlador("CtrPesquisaPlanoDeContas");;
		controladorPesquisaPlanoDeConta.setControladorRequisitante(this);
		controladorPesquisaPlanoDeConta.abrirJanela();
	}
	
	this.recebePlanoDeContasSelecionado = function(codigo, descricao) {
		this.imprimePlanoDeConta(codigo, descricao);
	}
	
	//PESQUISA CONTA BANCARIA
	this.pesquisaContaBancaria = function(codigo, iniciais, ativo, registroInicial, qtdDeRegistros, metodoDeRetorno) {
			if (metodoDeRetorno == undefined) { // executado pelo limite
			this.setMetodoDePesquisa(this.pesquisaContaBancaria);
			this.setMetodoDeRetorno(this.retornoPesquisaContaBancaria);
			this.pesquisar();		
		}
		else { // executado pelo controlador de pesquisa generica
			var ent = new EntContaBancaria();
			ent.setCodigo(codigo);
			ent.setBanco(iniciais);
			ent.setAtivo(ativo);
		
			new DeptoFinanceiro().lista(ent, registroInicial, qtdDeRegistros, metodoDeRetorno);
		}
	}	
	
	this.retornoPesquisaContaBancaria = function(codigo, descricao) {
		this.imprimeContaBancaria(codigo, descricao);
	}
	
	//PESQUISA CLIENTE *** retorno junto aos buscas rapidas
	this.pesquisaCliente = function() {
		var ctrPesquisaSimples = aplicativo.getControlador("CtrPesquisaSimples");
		ctrPesquisaSimples.setDepto("DeptoPessoal()");
		ctrPesquisaSimples.setPesquisa("Colaborador");
		ctrPesquisaSimples.setControladorRequisitante("CtrConfVendas");
		
		this.setTipoBuscaRapida("Cliente");
		ctrPesquisaSimples.abrirJanela();
	}
	
	//PESQUISA VENDEDOR *** retorno junto aos buscas rapidas
	this.pesquisaVendedor = function() {
		var ctrPesquisaSimples = aplicativo.getControlador("CtrPesquisaSimples");
		ctrPesquisaSimples.setDepto("DeptoPessoal()");
		ctrPesquisaSimples.setPesquisa("Colaborador");
		ctrPesquisaSimples.setControladorRequisitante("CtrConfVendas");
		
		this.setTipoBuscaRapida("Vendedor");
		ctrPesquisaSimples.abrirJanela();
	}
	
	/*** Botao salvar ***/
	this.salvarConfVendas = function() {
		var entConfVendas = this.preencheEntConfVendas();
		var deptoConfiguracoes = new DeptoConfiguracoes();
		
		deptoConfiguracoes.cadastra(entConfVendas, this.retornoCadastra);
	}
	
	this.alterarConfVendas = function() {
		var entConfVendas = this.preencheEntConfVendas();
		var deptoConfiguracoes = new DeptoConfiguracoes();
		
		deptoConfiguracoes.altera(entConfVendas, this.retornoCadastra);
	}
	
	this.retornoCadastra = function(resposta) {
		if (autoReferencia.trataRespostaServidor(resposta.codErro, resposta.mensagem, true)) {
			autoReferencia.getLimite().limpaHtml();
		}
	}
	
	this.preencheEntConfVendas = function() {
		var limite = this.getLimite();
			
		var resumoCC = new EntRegistro()
		resumoCC.setCodigo(limite.getCampoCodigoCentroDeCustos());
		resumoCC.setDescricao(limite.getCampoCentroDeCustos());
		
		var resumoPlanoConta = new EntRegistro();
		resumoPlanoConta.setCodigo(limite.getCampoCodigoPlanoDeConta());
		resumoPlanoConta.setDescricao(limite.getCampoPlanoDeConta());
		
		var resumoContaBancaria = new EntRegistro();
		resumoContaBancaria.setCodigo(limite.getCampoCodigoContaBancaria());
		resumoContaBancaria.setDescricao(limite.getCampoContaBancaria());
		
		var resumoCliente = new EntRegistro();
		resumoCliente.setCodigo(limite.getCampoCodigoCliente());
		resumoCliente.setDescricao(limite.getCampoCliente());
		
		var resumoVendedor = new EntRegistro();
		resumoVendedor.setCodigo(limite.getCampoCodigoVendedor());
		resumoVendedor.setDescricao(limite.getCampoVendedor());
		
		var entConfVendas =  this.getEntConfVendas();
		entConfVendas.setResumoCC(resumoCC);
		entConfVendas.setResumoPlanoDeContas(resumoPlanoConta);
		entConfVendas.setResumoContaBancaria(resumoContaBancaria);
		entConfVendas.setResumoCliente(resumoCliente);
		entConfVendas.setResumoVendedor(resumoVendedor);
		
		return entConfVendas;
	}
	
	//GETS E SETS
	
	this.getEntConfVendas = function() {
		return this.entConfVendas == null ? new EntConfVendas() : this.entConfVendas;
	}

	this.setEntConfVendas = function(valor) {
		this.entConfVendas = valor;
	}
	
	this.getTipoCadastro = function() {
		return this.tipoCadastro;
	}
	
	this.setTipoCadastro = function(valor) {
		this.tipoCadastro = valor;
	}
	
	this.getTipoBuscaRapida = function() {
		return this.tipoBuscaRapida;
	}
	
	this.setTipoBuscaRapida = function(valor) {
		this.tipoBuscaRapida = valor;
	}
	
}
CtrConfVendas.prototype = new CtrPrincipal;