public function ListaEvolucaoConta($DataIni, $DataFin, $CodConta) {
	$Conta = new ModelBanco();
	$lista = $Conta->EvolucaoConta($DataIni, $DataFin, $CodConta);
	if (count($lista) > 1) {
	    return $lista;
	} else {
	    parent::setMsg("Não existem movimentações no período para esta conta");
	}
    }
    function GeraVersaoRelatorios() {




	//Cria as tabelas 
	$Script = '
	    SET SQL DIALECT 3;


	    DROP TABLE "webreport_admin";

	    DROP TABLE "webreport_settings";

	    DROP TABLE "webreport_sql";

	    DROP TABLE "webreport_style";

	    DROP TABLE "webreport_users";

	    DROP TABLE "webreports";

	    DROP SEQUENCE "g_webreport_admin";

	    DROP SEQUENCE "g_webreport_settings";

	    DROP SEQUENCE "g_webreport_sql";

	    DROP SEQUENCE "g_webreport_style";

	    DROP SEQUENCE "g_webreport_users";

	    DROP SEQUENCE "g_webreports";


	    CREATE GENERATOR "g_webreport_admin";

	    CREATE TABLE "webreport_admin" (
		"id"          INTEGER NOT NULL,
		"tablename"   VARCHAR(250),
		"db_type"     VARCHAR(10),
		"group_name"  VARCHAR(250)
	    );



	    ALTER TABLE "webreport_admin" ADD PRIMARY KEY ("id");


	    SET TERM ^ ;


	    /* Trigger: "t_webreport_admin" */
	    CREATE OR ALTER TRIGGER "t_webreport_admin" FOR "webreport_admin"
	    ACTIVE BEFORE INSERT POSITION 0
	    AS
	    BEGIN
	      IF (NEW."id" IS NULL)
		THEN NEW."id" = GEN_ID("g_webreport_admin", 1);
	    END
	    ^


	    SET TERM ; ^


	    SET SQL DIALECT 3;



	    CREATE GENERATOR "g_webreport_settings";

	    CREATE TABLE "webreport_settings" (
		"id"       INTEGER NOT NULL,
		"version"  VARCHAR(10)
	    );




	    ALTER TABLE "webreport_settings" ADD PRIMARY KEY ("id");


	    SET TERM ^ ;

	    CREATE OR ALTER TRIGGER "t_webreport_settings" FOR "webreport_settings"
	    ACTIVE BEFORE INSERT POSITION 0
	    AS
	    BEGIN
	      IF (NEW."id" IS NULL)
		THEN NEW."id" = GEN_ID("g_webreport_settings",1);
	    END
	    ^


	    SET TERM ; ^


	    SET SQL DIALECT 3;


	    CREATE GENERATOR "g_webreport_sql";

	    CREATE TABLE "webreport_sql" (
		"id"          INTEGER NOT NULL,
		"sqlname"     VARCHAR(100),
		"sqlcontent"  BLOB SUB_TYPE 1 SEGMENT SIZE 80
	    );

	    ALTER TABLE "webreport_sql" ADD PRIMARY KEY ("id");

	    SET TERM ^ ;

	    CREATE OR ALTER TRIGGER "t_webreport_sql" FOR "webreport_sql"
	    ACTIVE BEFORE INSERT POSITION 0
	    AS
	    BEGIN
	      IF (NEW."id" IS NULL)
		THEN NEW."id" = GEN_ID("g_webreport_sql", 1);
	    END
	    ^


	    SET TERM ; ^


	    SET SQL DIALECT 3;


	    CREATE GENERATOR "g_webreport_style";

	    CREATE TABLE "webreport_style" (
		"report_style_id"  INTEGER NOT NULL,
		"type"             VARCHAR(6),
		"field"            INTEGER,
		"group"            INTEGER,
		"style_str"        BLOB SUB_TYPE 1 SEGMENT SIZE 80,
		"uniq"             INTEGER,
		"repname"          VARCHAR(255),
		"styletype"        VARCHAR(40)
	    );


	    ALTER TABLE "webreport_style" ADD PRIMARY KEY ("report_style_id");

	    SET TERM ^ ;

	    CREATE OR ALTER TRIGGER "t_webreport_style" FOR "webreport_style"
	    ACTIVE BEFORE INSERT POSITION 0
	    AS
	    BEGIN
	      IF (NEW."report_style_id" IS NULL)
		THEN NEW."report_style_id" = GEN_ID("g_webreport_style", 1);
	    END
	    ^


	    SET TERM ; ^

	    SET SQL DIALECT 3;



	    CREATE GENERATOR "g_webreport_users";

	    CREATE TABLE "webreport_users" (
		"id"        INTEGER NOT NULL,
		"username"  VARCHAR(200),
		"password"  VARCHAR(200),
		"email"     VARCHAR(200)
	    );


	    ALTER TABLE "webreport_users" ADD PRIMARY KEY ("id");

	    SET TERM ^ ;

	    CREATE OR ALTER TRIGGER "t_webreport_users" FOR "webreport_users"
	    ACTIVE BEFORE INSERT POSITION 0
	    AS
	    BEGIN
	      IF (NEW."id" IS NULL)
		THEN NEW."id" = GEN_ID("g_webreport_users", 1);
	    END
	    ^


	    SET TERM ; ^

	    SET SQL DIALECT 3;


	    CREATE GENERATOR "g_webreports";

	    CREATE TABLE "webreports" (
		"rpt_id"       INTEGER NOT NULL,
		"rpt_name"     VARCHAR(100),
		"rpt_title"    VARCHAR(500),
		"rpt_cdate"    TIMESTAMP NOT NULL,
		"rpt_mdate"    TIMESTAMP,
		"rpt_content"  BLOB SUB_TYPE 1 SEGMENT SIZE 80,
		"rpt_owner"    VARCHAR(100),
		"rpt_status"   VARCHAR(10),
		"rpt_type"     VARCHAR(10) NOT NULL
	    );


	    ALTER TABLE "webreports" ADD PRIMARY KEY ("rpt_id");

	    SET TERM ^ ;

	    CREATE OR ALTER TRIGGER "t_webreports" FOR "webreports"
	    ACTIVE BEFORE INSERT POSITION 0
	    AS
	    BEGIN
	      IF (NEW."rpt_id" IS NULL)
		THEN NEW."rpt_id" = GEN_ID("g_webreports", 1);
	    END
	    ^


	    SET TERM ; ^
	    ';



//Populando a tabela webreports webreport_admin
	$sqlQuery = "SELECT * FROM " . '"webreport_admin"';

	if ($result = parent::execute_query($sqlQuery)) {

	    while ($linha = ibase_fetch_assoc($result, IBASE_TEXT)){

		$Script .= 'INSERT INTO'
			. '"webreport_admin"'
			. '('
			. '"id", '
			. '"tablename", '
			. '"db_type" , '
			. '"group_name" '
			. ')'
			. 'VALUES'
			. '('
			. $linha['id'] . ', '
			. "'" . $linha['tablename'] . "'" . ','
			. "'" . $linha['db_type'] . "'" . ','
			. "'" . $linha['group_name'] . "'"
			. ");";

		//echo $Insert . "<br>";
	    }
	}

########################################################################################
//Populando a tabela webreport_settings
	$sql = "SELECT * FROM " . '"webreport_settings"';

	if ($result = parent::execute_query($sql)) {


	    while ($linha = ibase_fetch_assoc($result, IBASE_TEXT)){

		$Script .= 'INSERT INTO'
			. '"webreport_settings" '
			. '("id", '
			. '"version" '
			. ')'
			. 'VALUES'
			. '('
			. $linha['id'] . ', '
			. "'" . $linha['version'] . "'"
			. ");";

		//echo $Insert . "<br>";
	    }
	}

########################################################################################
//Populando a tabela webreport_sql
	$sqlQuery = "SELECT * FROM " . '"webreport_sql"';

	if ($result = parent::execute_query($sqlQuery)) {

	    while ($linha = ibase_fetch_assoc($result, IBASE_TEXT)){

		$Script .= 'INSERT INTO'
			. '"webreport_sql"'
			. '("id", '
			. '"sqlname", '
			. '"sqlcontent" '
			. ' ) '
			. 'VALUES'
			. '('
			. $linha['id'] . ', '
			. "'" . $linha['sqlname'] . "'" . ','
			. "'" . $linha['sqlcontent'] . "'"
			. ");";

		//echo $Insert . "<br><br>";
	    }
	}

	########################################################################################
	//Populando a tabela webreport_style

	$sql = "SELECT * FROM " . '"webreport_style"';


	if ($result = parent::execute_query($sql)) {



	    while ($linha = ibase_fetch_assoc($result, IBASE_TEXT)){
	
		$Script .= 'INSERT INTO'
			. '"webreport_style" '
			. '('
			. '"report_style_id", '
			. '"type", '
			. '"field", '
			. '"group", '
			. '"style_str", '
			. '"uniq", '
			. '"repname", '
			. '"styletype"'
			. ')'
			. 'VALUES'
			. '('
			. $linha['report_style_id'] . ', '
			. "'" . $linha['type'] . "'" . ','
			. $linha['field'] . ', '
			. $linha['group'] . ', '
			. "'" . $linha['style_str'] . "'" . ', '
			. $linha['uniq'] . ', '
			. "'" . $linha['repname'] . "'" . ','
			. "'" . $linha['styletype'] . "'"
			. ');';

		//echo $Insert . "<br><br>";
	    }
	}

	########################################################################################
	//Populando a tabela webreport_users
	$sql = "SELECT * FROM " . '"webreport_users"';

	if ($result = parent::execute_query($sql)) {

	    while ($linha = ibase_fetch_assoc($result, IBASE_TEXT)){

		$Script .= 'INSERT INTO'
			. '"webreport_users"'
			. '("id", '
			. '"username", '
			. '"password", '
			. '"email" '
			. ') '
			. 'VALUES'
			. '('
			. $linha['id'] . ', '
			. "'" . $linha['username'] . "'" . ','
			. "'" . $linha['password'] . "'" . ','
			. "'" . $linha['email'] . "'"
			. ");";


		//echo $Insert . "<br>";
	    }
	}

	########################################################################################
	//Populando a tabela webreports
	$sql = "SELECT * FROM " . '"webreports"';

	if ($result = parent::execute_query($sql)) {

	    while ($linha = ibase_fetch_assoc($result, IBASE_TEXT)){

	

		$Script .= 'INSERT INTO '
			. '"webreports"'
			. '('
			. '"rpt_id", '
			. '"rpt_name", '
			. '"rpt_title", '
			. '"rpt_cdate", '
			. '"rpt_mdate", '
			. '"rpt_content", '
			. '"rpt_owner", '
			. '"rpt_status", '
			. '"rpt_type"'
			. ') '
			. 'VALUES'
			. '('
			. $linha['rpt_id'] . ', '
			. "'" . $linha['rpt_name'] . "'" . ','
			. "'" . $linha['rpt_title'] . "'" . ','
			. "'" . $linha['rpt_cdate'] . "'" . ','
			. "'" . $linha['rpt_mdate'] . "'" . ','
			. "'" . $linha['rpt_content'] . "'" . ','
			. "'" . $linha['rpt_owner'] . "'" . ','
			. "'" . $linha['rpt_status'] . "'" . ','
			. "'" . $linha['rpt_type'] . "'"
			. ");";

		//echo $Insert . "<br><br>";
	    }
	}

	//Abre o arquivo
	$Scriptt = $this->removerAcento($Script);
	$fp = fopen("C:\\BHSistemas\\SGMO\\teste\\teste.sql", "w");

	
	// grava no arquivo.
	fwrite($fp, "$Scriptt");

	// fecha o arquivo
	fclose($fp);


    }
    public function CancelarRecebimentoFatura($id_cr2, $id_usuario, $data) {

	$ContaCC = new ModelBanco();

	$pai = parent::RecuperaCampo("F_LANCA_CR_ID", "F_LANCA_CR2", "F_LANCA_CR2_ID", $id_cr2);

	//Verifica se o lançamento já não faturado ou em. É possível somente cancelar o recebimento de lançamentos quitados
	if (parent::RecuperaCampo("F_STATUS_FINANCEIRO_ID", "F_LANCA_CR", "F_LANCA_CR_ID", $pai) != 3) {
	    return $this->setMotivoErro("Lançamento não encontra-se quitado");
	}

	$valor = parent::RecuperaCampo("VALOR", "F_LANCA_CR2", "F_LANCA_CR2_ID", $id_cr2);

	$sqlCancelaFatura = "UPDATE F_LANCA_CR2 
				    SET DATA_CANCELAMENTO_RECEBIMENTO = '$data',
				    ID_USU_CANCELAMENTO_RECEBIMENTO = $id_usuario,
				    ACAO_CANCELAR_RECEBIMENTO = 'S' 
				    WHERE F_LANCA_CR2_ID = $id_cr2";

	$trans = parent::criaTransacao();

	$CodCC = parent::RecuperaCampo("BANCO_ID", "F_LANCA_CR", "F_LANCA_CR_ID", $pai);

	if (parent::execute_query_trans($trans, $sqlCancelaFatura)) {

	    $sqlcr2 = "UPDATE F_LANCA_CR SET F_STATUS_FINANCEIRO_ID = 2 WHERE F_LANCA_CR_ID = $pai";
	    if (parent::execute_query_trans($trans, $sqlcr2)) {

		//Atualiza o saldo da conta
		$AtualizaSaldo = $ContaCC->AtualizaSaldoConta($valor, "-", $CodCC, $trans, "ER", $id_cr2);

		if ($AtualizaSaldo) {
		    if ($this->AtualizaLancamentosAgrupados($trans, $pai, 2)) {
			parent::gravaTrasacao($trans);
			return TRUE;
		    } else {
			parent::rollbackTransacao($trans);
			return FALSE;
		    }
		}
	    } else {
		return FALSE;
	    }
	} else {
	    return FALSE;
	    parent::rollbackTransacao($trans);
	}
    }
    public function BuscaOperacoesID($IdLancamentos) {
	$sql = "SELECT * FROM F_DEPOSITO_SAQUE "
		. "INNER JOIN U"
		. "WHERE F_DEPOSITO_SAQUE_ID IN ($IdLancamentos)";
	if ($result = parent::execute_query($sql)) {
	    $ListaOperacoes = array();

	    while ($linha = parent::criaObjetoConsulta($result)){
		$dadosOperacoes = new ModelBanco();
		$dadosOperacoes->setVALOR_OPERACAO($linha->VALOR);
		$dadosOperacoes->setDATA_OPERACAO($linha->DATA_OPERACAO);
		$dadosOperacoes->setUSUARIO_OPERACAO($linha->CHAVE_USER);


		array_push($ListaEvolucaoConta, $dadosOperacoes);
	    }
	    return $ListaOperacoes;
	}
	return false;
    }
    Public Function BuscaDetalhesFechamentoDinheiro($dia) {

//Busca os fechamentos realizados para saque no dia em questão
	$sql = "SELECT HIS.F_HISTORICO_SALDO_ID "
		. "FROM "
		. "F_CONSOLIDACAO_DIA "
		. "INNER JOIN F_DEPOSITO_SAQUE ON (F_DEPOSITO_SAQUE.F_DEPOSITO_SAQUE_ID = F_CONSOLIDACAO_DIA.F_DEPOSITO_SAQUE_ID)"
		. "INNER JOIN F_HISTORICO_SALDO HIS ON (HIS.F_DEPOSITO_SAQUE_ID = F_DEPOSITO_SAQUE.F_DEPOSITO_SAQUE_ID)"
		. "WHERE DIA_MOVIMENTACAO = '$dia' "
		. "AND F_DEPOSITO_SAQUE.F_DEPOSITO_SAQUE_ID IS NOT NULL";

	$result = parent::execute_query($sql);
	if ($result) {
	    $StringIN = "";

	    while ($linha = parent::criaObjetoConsulta($result)){
		$StringIN .= $linha->F_HISTORICO_SALDO_ID . " ,";
	    }
	    $StringIN = substr($StringIN, 0, -1);

	    $ModelBanco = new ModelBanco();
	    if ($ListaOperacoes = $ModelBanco->EvolucaoConta($dia, $dia, $codCC = false, $CodUsu = false, $TipoOp = false, $StringIN)) {
		return $ListaOperacoes;
	    } else {
		return false;
	    }
	}
	return false;
    }
    public function CancelaPagamento($id_cr2, $id_usuario, $data) {

	$ContaCC = new ModelBanco();

	$pai = parent::RecuperaCampo("F_LANCA_CP", "F_LANCA_CP2", "F_LANCA_CP2_ID", $id_cr2);
	//Verifica se o lançamento já não encontra-se baixado, somente dessa forma permite o cancelamento
	//Verifica se o lançamento não foi pago anteriormente
	if (parent::RecuperaCampo("F_STATUS_FINANCEIRO_CP_ID", "F_LANCA_CP", "F_LANCA_CP_ID", $pai) != 2) {
	    return $this->setMotivoErro("Lançamento já encontra-se aberto");
	} $sqlCancelaPagamento = "UPDATE F_LANCA_CP2 
				    SET 
				    DATA_CANCELAMENTO_PAGAMENTO = '$data',
				    USUARIO_CANCELAMENTO_PAGAMENTO = $id_usuario,
				    ACAO_CANCELAR_PAGAMENTO = 'S' 
				    WHERE F_LANCA_CP2_ID = $id_cr2";

	$valor = parent::RecuperaCampo("VALOR", "F_LANCA_CP2", "F_LANCA_CP2_ID", $id_cr2);

	$CodCC = parent::RecuperaCampo("BANCO_ID", "F_LANCA_CP", "F_LANCA_CP_ID", $pai);

	$trans = parent::criaTransacao();

	if (parent::execute_query_trans($trans, $sqlCancelaPagamento)) {

	    $sqlcp2 = "UPDATE F_LANCA_CP SET F_STATUS_FINANCEIRO_CP_ID = 1 WHERE F_LANCA_CP_ID = $pai";
	    if (parent::execute_query_trans($trans, $sqlcp2)) {
		//Atualiza o Saldo da Conta
		$ContaCC->AtualizaSaldoConta($valor, "+", $CodCC, $trans, "EP", $id_cr2);
		parent::gravaTrasacao($trans);
		return TRUE;
	    } else {
		return FALSE;
	    }
	} else {
	    return FALSE;
	}
    }
    public function PesquisaGrid($Todos = False) {

	if ($_POST) {
	    unset($_SESSION["pg_atual"]);
	}

	$Data = New Data();

	//Cod Conta
	if (!isset($_SESSION["codContaEvolucao"]) || (isset($_POST["codContaEvolucao"]))) {
	    $_SESSION["codContaEvolucao"] = isset($_POST['codContaEvolucao']) ? (trim($_POST['codContaEvolucao'])) : "";
	}
	//Data Inicial
	if (!isset($_SESSION["data_ini_filtro_evolucao"]) || (isset($_POST["data_ini_filtro_evolucao"]))) {
	    $_SESSION["data_ini_filtro_evolucao"] = isset($_POST['data_ini_filtro_evolucao']) ? $Data->convertDataSql($_POST["data_ini_filtro_evolucao"]) : date('Y-m-d', strtotime("-30 days"));
	}
	//Data Final
	if (!isset($_SESSION["data_fin_filtro_evolucao"]) || (isset($_POST["data_fin_filtro_evolucao"]))) {
	    $_SESSION["data_fin_filtro_evolucao"] = isset($_POST['data_fin_filtro_evolucao']) ? $Data->convertDataSql($_POST["data_fin_filtro_evolucao"]) : date('Y-m-d');
	}

	$Conta = new ModelBanco();

	//Cria a visualização com os detalhes do filtro
	$dataLabelIni = $Data->convertDataBrasileira($_SESSION["data_ini_filtro_evolucao"]);
	$dataLabelFim = $Data->convertDataBrasileira($_SESSION["data_fin_filtro_evolucao"]);
	$labelNomeBanco = $_SESSION["codContaEvolucao"] != null ? $Conta->RecuperaCampo("NOME", "BANCO", "BANCO_ID", $_SESSION["codContaEvolucao"]) : "Todos";
	$_SESSION["label_filtro_evolucao"] = "<span class='label label-default'>Exibindo período de $dataLabelIni até $dataLabelFim Conta = $labelNomeBanco</span>";

	if (empty($_SESSION["codContaEvolucao"])) {
	    parent::setMsg("Selecione uma conta");
	    return false;
	}


	$lista = $Conta->EvolucaoConta($_SESSION["data_ini_filtro_evolucao"], $_SESSION["data_fin_filtro_evolucao"], $_SESSION["codContaEvolucao"]);
	if (count($lista) > 1) {
	    if (!$Todos)
		return parent::Paginar($lista, $_SERVER["SCRIPT_NAME"], $_REQUEST["Pg"]);
	    else
		return $lista;
	} else {
	    parent::setMsg("Não existem movimentações no peróido para esta conta");
	}
    }