//Função para conciliar public void startConc() { //Percorrer todos os movimentos foreach (OFX_Movimento mov in movimentos) { //Verificar se a data do movimento maior data atual evitando //lançamentos futuros do extrato if (mov.Data.Date <= DateTime.Now.Date) { //Verifica se já não existe o movimento evitando duplicidade Decimal valor = Convert.ToDecimal(mov.Valor); using (var objVerExiste = new dbGerenciadorEntities()) { //FALTOU TESTAR - QUANDO INCLUIR MOVIMENTO var query = from conv in objVerExiste.Movimento where (conv.data == mov.Data.Date && conv.valor == valor && conv.descricao == mov.Descricao) select conv; var ListaFinal = query.ToList(); //Não tem duplicidade if (ListaFinal.Count == 0) { using (var objPesqVctoValor = new dbGerenciadorEntities()) { //Primeira pesquisa por Vencimento e Valor var queryTitulo = from titulo in objPesqVctoValor.Titulo join relacao in objPesqVctoValor.Relacao on titulo.relacao equals relacao.id where (titulo.vencimento == mov.Data.Date && titulo.valor == valor && titulo.baixado == null) select new { titulo.id, titulo.numero, relacao.Nome, titulo.tipo, titulo.parcela, titulo.valor, titulo.vencimento, titulo.natureza, titulo.descricao }; var ListaTitulos = queryTitulo.ToList(); //A primeira pesquisa retornou valor if (ListaTitulos.Count != 0) { //Exibe o formulario com todos os titulos encontrado possibilitando a baixa frmConcilia.Conciliado passar = new frmConcilia.Conciliado(); frmConcilia formConcilia = new frmConcilia(ListaTitulos, mov, ref passar); formConcilia.ShowDialog(); //Obtem o numero da conta string[] split = agConta.Split('/'); //Depois do split realiza a conversão para inteiro int conta = Convert.ToInt32(split[1]); //Adiciona o numero da conta a classe conciliado passar.conta = conta; lstConciliado.Add(passar); } else { using (var objPesqValor = new dbGerenciadorEntities()) { //Se a primeira pesquisa não retornar vamos pesquisar apenas por valor que não tenha //sida anteriormente baixados var queryTitulo_val = from titulo in objPesqValor.Titulo join relacao in objPesqValor.Relacao on titulo.relacao equals relacao.id where titulo.valor == valor && titulo.baixado == null select new { titulo.id, titulo.numero, relacao.Nome, titulo.tipo, titulo.parcela, titulo.valor, titulo.vencimento, titulo.natureza, titulo.descricao }; var ListaTitulos_val = queryTitulo_val.ToList(); //A primeira pesquisa retornou valor if (ListaTitulos_val.Count != 0) { //Exibe o formulario com todos os titulos encontrado possibilitando a baixa frmConcilia.Conciliado passar = new frmConcilia.Conciliado(); frmConcilia formConcilia = new frmConcilia(ListaTitulos_val, mov, ref passar); formConcilia.ShowDialog(); //Obtem o numero da conta string[] split = agConta.Split('/'); //Depois do split realiza a conversão para inteiro int conta = Convert.ToInt32(split[1]); //Adiciona o numero da conta a classe conciliado passar.conta = conta; lstConciliado.Add(passar); } //Nenhuma pesquisa retornou agora precisamos cadastrar o titulo else { //Exibir Formulario para cadastrar ou editar Titulo //Informações do movimento para cadastrar um titulo DateTime dtMovimento = mov.Data; Double vlMovimento = mov.Valor; MessageBox.Show("Título não encontrado:" + Environment.NewLine + "Data: " + dtMovimento.Date + Environment.NewLine + "Valor: " + vlMovimento + Environment.NewLine + "Descrição: " + mov.Descricao, "Titulo x Movimento", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); frmCadTitulo cadMovimento = new frmCadTitulo(dtMovimento, vlMovimento); cadMovimento.ShowDialog(); //Apos abrir o formulario realiza de novo busca using (var objNovaPesq = new dbGerenciadorEntities()) { //Primeira pesquisa por Vencimento e Valor var queryNovoTitulo = from titulo in objNovaPesq.Titulo join relacao in objNovaPesq.Relacao on titulo.relacao equals relacao.id where (titulo.vencimento == mov.Data.Date && titulo.valor == valor && titulo.baixado == null) select new { titulo.id, titulo.numero, relacao.Nome, titulo.tipo, titulo.parcela, titulo.valor, titulo.vencimento, titulo.natureza, titulo.descricao }; var ListaNovosTitulos = queryNovoTitulo.ToList(); //Verifica se houve retorno if (ListaNovosTitulos.Count != 0) { //Exibe o formulario com todos os titulos encontrado possibilitando a baixa frmConcilia.Conciliado passar = new frmConcilia.Conciliado(); frmConcilia formConcilia = new frmConcilia(ListaNovosTitulos, mov, ref passar); formConcilia.ShowDialog(); //Obtem o numero da conta string[] split = agConta.Split('/'); //Depois do split realiza a conversão para inteiro int conta = Convert.ToInt32(split[1]); //Adiciona o numero da conta a classe conciliado passar.conta = conta; lstConciliado.Add(passar); } } } }//Segundo using } }//Terceiro using } else { MessageBox.Show("O Movimento já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } }//using } }//Fim do foreach //Aqui verificar se a lstConciliado não é vazia se não for vazia //loop na lista inserindo na tabela movimento e atualizando a tabela titulo if (lstConciliado.Count != 0) { MessageBox.Show("Vamos efetuar as alterações na base de dados", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); foreach (frmConcilia.Conciliado movBanco in lstConciliado) { //Incluir as informações na tabela Movimento Gerenciador.Data.dbGerenciadorEntities objGerenciador = new Gerenciador.Data.dbGerenciadorEntities(); var objMovimento = new Gerenciador.Data.Movimento(); objMovimento.data = movBanco.dtMovimento; objMovimento.tipo = movBanco.tipo; objMovimento.valor = Convert.ToDecimal(movBanco.vlBaixado); objMovimento.numero = Convert.ToString(movBanco.numero); objMovimento.descricao = movBanco.descricao; objMovimento.conta = movBanco.conta; objMovimento.id_titulo = movBanco.idTitulo; objGerenciador.AddToMovimento(objMovimento); objGerenciador.SaveChanges(); //Atualiza a tabela Titulo using (var objUpdate = new dbGerenciadorEntities()) { var objTitulo = new Gerenciador.Data.Titulo(); objTitulo = (from conv in objUpdate.Titulo where conv.id == movBanco.idTitulo select conv).First(); objTitulo.baixado = Convert.ToString(movBanco.baixado); objTitulo.dta_baixa = movBanco.dtMovimento; objTitulo.vlr_pagamento = Convert.ToDecimal(movBanco.vlBaixado); objTitulo.conta_baixa = movBanco.conta; objUpdate.SaveChanges(); } }//FIm loop da inclusão MessageBox.Show("Atualizações efetuadas com sucesso!", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); }//Fim atualização banco de dados }
//Função para conciliar public void startConc() { //Varivel que finalizara tudo caso o titulo não seja cadastrado bool sair; sair = false; //Percorrer todos os movimentos foreach (OFX_Movimento mov in movimentos) { //Verificar se a data do movimento maior data atual evitando //lançamentos futuros do extrato if (mov.Data.Date <= DateTime.Now.Date) { //Verifica se já não existe o movimento evitando duplicidade Decimal valor = Convert.ToDecimal(mov.Valor); using (var objVerExiste = new dbGerenciadorEntities()) { //Arrumei fazendo estas conversões pois não altera o banco //Na hora de salvar na tabela movimento o parametro transforma em string em int //Agora temos que fazer o contrario int ID = Convert.ToInt32(mov.Id); string sID = Convert.ToString(ID); var query = from conv in objVerExiste.Movimento where (conv.data == mov.Data.Date && conv.valor == valor && conv.numero == sID) select conv; var ListaFinal = query.ToList(); //Não tem duplicidade if (ListaFinal.Count == 0) { using (var objPesqVctoValor = new dbGerenciadorEntities()) { //Primeira pesquisa por Vencimento e Valor de titulos que não tenham sido baixados var queryTitulo = from titulo in objPesqVctoValor.Titulo join relacao in objPesqVctoValor.Relacao on titulo.relacao equals relacao.id where (titulo.vencimento == mov.Data.Date && titulo.valor == valor && titulo.baixado == null) select new { titulo.id, titulo.numero, relacao.Nome, titulo.tipo, titulo.parcela, titulo.valor, titulo.vencimento, titulo.natureza, titulo.descricao }; var ListaTitulos = queryTitulo.ToList(); //A primeira pesquisa retornou valor if (ListaTitulos.Count != 0) { //Exibe o formulario com todos os titulos encontrado possibilitando escolha do titulo para baixa //Cria uma lista que será passada como ponteiro(ref) ao formulario concilia //Para que as alterações permanecam apos o fechamento do formulario frmConcilia.Conciliado passar = new frmConcilia.Conciliado(); //Chama o formulario passando os objects retornados da busca com vencimento e valor, o movimento do OFX // e a lista de referência que será alterada frmConcilia formConcilia = new frmConcilia(ListaTitulos, mov, ref passar); formConcilia.ShowDialog(); //Obtem o numero da conta string[] split = agConta.Split('/'); //Depois do split realiza a conversão para inteiro int conta = Convert.ToInt32(split[1]); //Adiciona o numero da conta a classe conciliado passar.conta = conta; //Adiciona a lista de referência a lista de conciliados lstConciliado.Add(passar); } else { using (var objPesqValor = new dbGerenciadorEntities()) { //Se a primeira pesquisa não retornar vamos pesquisar apenas por valor que não tenha //sida anteriormente baixados var queryTitulo_val = from titulo in objPesqValor.Titulo join relacao in objPesqValor.Relacao on titulo.relacao equals relacao.id where titulo.valor == valor && titulo.baixado == null select new { titulo.id, titulo.numero, relacao.Nome, titulo.tipo, titulo.parcela, titulo.valor, titulo.vencimento, titulo.natureza, titulo.descricao }; var ListaTitulos_val = queryTitulo_val.ToList(); //A primeira pesquisa retornou valor if (ListaTitulos_val.Count != 0) { //Exibe o formulario com todos os titulos encontrado possibilitando escolha do titulo para baixa //Cria uma lista que será passada como ponteiro(ref) ao formulario concilia //Para que as alterações permanecam apos o fechamento do formulario frmConcilia.Conciliado passar = new frmConcilia.Conciliado(); //Chama o formulario passando os objects retornados da busca com vencimento e valor, o movimento do OFX // e a lista de referência que será alterada frmConcilia formConcilia = new frmConcilia(ListaTitulos_val, mov, ref passar); formConcilia.ShowDialog(); //Obtem o numero da conta string[] split = agConta.Split('/'); //Depois do split realiza a conversão para inteiro int conta = Convert.ToInt32(split[1]); //Adiciona o numero da conta a classe conciliado passar.conta = conta; lstConciliado.Add(passar); } //Nenhuma pesquisa retornou agora precisamos cadastrar o titulo else { //Exibir Formulario para cadastrar ou editar Titulo //Informações do movimento para cadastrar um titulo DateTime dtMovimento = mov.Data; Double vlMovimento = mov.Valor; //Exibe informação sobre o movimento sem titulo correnpondente encontrado MessageBox.Show("Título não encontrado:" + Environment.NewLine + "Data: " + dtMovimento.Date + Environment.NewLine + "Valor: " + vlMovimento + Environment.NewLine + "Descrição: " + mov.Descricao, "Titulo x Movimento", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); //Exibe o formulario para cadastrar o titulo frmCadTitulo cadMovimento = new frmCadTitulo(dtMovimento, vlMovimento); cadMovimento.ShowDialog(); //Apos fechar o formulario realiza de novo busca using (var objNovaPesq = new dbGerenciadorEntities()) { //Primeira pesquisa por Vencimento e Valor var queryNovoTitulo = from titulo in objNovaPesq.Titulo join relacao in objNovaPesq.Relacao on titulo.relacao equals relacao.id where (titulo.vencimento == mov.Data.Date && titulo.valor == valor && titulo.baixado == null) select new { titulo.id, titulo.numero, relacao.Nome, titulo.tipo, titulo.parcela, titulo.valor, titulo.vencimento, titulo.natureza, titulo.descricao }; var ListaNovosTitulos = queryNovoTitulo.ToList(); //Verifica se houve retorno if (ListaNovosTitulos.Count != 0) { //Exibe o formulario com todos os titulos encontrado possibilitando a baixa frmConcilia.Conciliado passar = new frmConcilia.Conciliado(); frmConcilia formConcilia = new frmConcilia(ListaNovosTitulos, mov, ref passar); formConcilia.ShowDialog(); //Obtem o numero da conta string[] split = agConta.Split('/'); //Depois do split realiza a conversão para inteiro int conta = Convert.ToInt32(split[1]); //Adiciona o numero da conta a classe conciliado passar.conta = conta; lstConciliado.Add(passar); } else { MessageBox.Show("Titulo ainda não foi cadastrado" + Environment.NewLine + "Para garantir a integridade do processo não podemos continuar" + Environment.NewLine + "Cadastre o titulo e tente novamente", "Aviso"); //Como se diz para garantir integridade não podemos terminar conciliação sem cadastrar //todos os titulos que estão no movimento OFX sair = true; break; } } } }//Segundo using } }//Terceiro using } else { MessageBox.Show("O Movimento já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } }//using } //Condição quando a data do movimento for maior que a data atual (evitando lançamento futuros) que mudam descrição else { MessageBox.Show("Lançamento com data futura não será incluido nesta conciliação." + Environment.NewLine + "será importado no documento com a data correta", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); } }//Fim do foreach //Aqui verificar se a lstConciliado não é vazia se não for vazia //loop na lista inserindo na tabela movimento e atualizando a tabela titulo if (lstConciliado.Count != 0 && sair == false) { MessageBox.Show("Vamos efetuar as alterações na base de dados", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); foreach (frmConcilia.Conciliado movBanco in lstConciliado) { //Incluir as informações na tabela Movimento Gerenciador.Data.dbGerenciadorEntities objGerenciador = new Gerenciador.Data.dbGerenciadorEntities(); var objMovimento = new Gerenciador.Data.Movimento(); objMovimento.data = movBanco.dtMovimento; objMovimento.tipo = movBanco.tipo; objMovimento.valor = Convert.ToDecimal(movBanco.vlBaixado); objMovimento.numero = Convert.ToString(movBanco.numero); objMovimento.descricao = movBanco.descricao; objMovimento.conta = movBanco.conta; objMovimento.id_titulo = movBanco.idTitulo; objGerenciador.AddToMovimento(objMovimento); objGerenciador.SaveChanges(); //Atualiza a tabela Titulo ( Com data da baixa, valor pago, em que banco foi pago) using (var objUpdate = new dbGerenciadorEntities()) { var objTitulo = new Gerenciador.Data.Titulo(); objTitulo = (from conv in objUpdate.Titulo where conv.id == movBanco.idTitulo select conv).First(); objTitulo.baixado = Convert.ToString(movBanco.baixado); objTitulo.dta_baixa = movBanco.dtMovimento; objTitulo.vlr_pagamento = Convert.ToDecimal(movBanco.vlBaixado); objTitulo.conta_baixa = movBanco.conta; objUpdate.SaveChanges(); } }//FIm loop da inclusão MessageBox.Show("Atualizações efetuadas com sucesso!", "AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); }//Fim atualização banco de dados }