//=========================================================================
        public List <ContaVO> PesquisarConta(int codUser, DateTime dataInicial, DateTime dataFinal, string NomeConta)
        {
            banco2 objBanco = new banco2();

            List <ContaVO>  lstRetorno  = new List <ContaVO>();
            List <tb_conta> lstConsulta = new List <tb_conta>();

            lstConsulta = objBanco.tb_conta.Where(co => co.id_usuario == codUser && co.nome_banco == NomeConta && co.data_cadastro >= dataInicial && co.data_cadastro <= dataFinal).ToList();

            for (int i = 0; i < lstConsulta.Count; i++)
            {
                ContaVO objvo = new ContaVO();

                objvo.NomeBanco   = lstConsulta[i].nome_banco;
                objvo.Agencia     = lstConsulta[i].agencia_conta;
                objvo.NumeroConta = lstConsulta[i].numero_conta;
                objvo.Saldo       = lstConsulta[i].saldo_conta.ToString();
                objvo.Tipo        = lstConsulta[i].tipo_conta == 0 ? "Poupança" : "Corrente";

                objvo.objConta = lstConsulta[i];

                lstRetorno.Add(objvo);
            }

            return(lstRetorno);
        }
        //============================================================================
        public List <ContaVO> ConsultarContaVO(int codUserLogado)
        {
            banco2 objbanco = new banco2();

            List <ContaVO> lstRetorno = new List <ContaVO>();

            List <tb_conta> lstConsulta = new List <tb_conta>();

            lstConsulta = objbanco.tb_conta.Where(con => con.id_usuario == codUserLogado).ToList();

            for (int i = 0; i < lstConsulta.Count; i++)
            {
                ContaVO objVo = new ContaVO();

                objVo.NomeBanco   = lstConsulta[i].nome_banco;
                objVo.Agencia     = lstConsulta[i].agencia_conta;
                objVo.NumeroConta = lstConsulta[i].numero_conta;
                objVo.Saldo       = lstConsulta[i].saldo_conta.ToString();
                objVo.Tipo        = lstConsulta[i].tipo_conta == 0 ? "Poupança" : "Corrente";

                lstRetorno.Add(objVo);
            }


            return(lstRetorno);
        }
        public void ExcluirMovimento(int idMov, int tipo, decimal valor, int idConta)
        {
            banco2 objBanco = new banco2();

            tb_movimento objmovExcluir = objBanco.tb_movimento.FirstOrDefault(mov => mov.id_movimento == idMov);

            using (TransactionScope tran = new TransactionScope())
            {
                objBanco.DeleteObject(objmovExcluir);

                objBanco.SaveChanges();

                tb_conta objContaAtualizar = objBanco.tb_conta.FirstOrDefault(con => con.id_conta == idConta);

                if (tipo == 0)
                {
                    objContaAtualizar.saldo_conta -= valor;
                }
                else
                {
                    objContaAtualizar.saldo_conta += valor;
                }
                objBanco.SaveChanges();

                tran.Complete();
            }
        }
        //===========================================================================
        /// <summary>
        /// Retorna todas as categorias do usuario logado;
        /// </summary>
        /// <param name="codUserLogado">Codigo do Logado</param>
        /// <returns>Lista de resultado</returns>
        public List <tb_categoria> ConsultarCategoria(int codUserLogado)
        {
            banco2 objBanco = new banco2();

            List <tb_categoria> lstRetorno = objBanco.tb_categoria.Where(cat => cat.id_usuario == codUserLogado).ToList();

            return(lstRetorno);
        }
        //============================================================================
        /// <summary>
        /// Retorna todas as Categorias do usuario logado
        /// </summary>
        /// <param name="codUserLogado">Codigo do Logado</param>
        /// <returns> Lista de reusltado</returns>
        public List <tb_conta> ConsultarContas(int codUserLogado)
        {
            banco2 objbanco = new banco2();

            List <tb_conta> lstRetorno = objbanco.tb_conta.Where(cont => cont.id_usuario == codUserLogado).ToList();

            return(lstRetorno);
        }
        //============================================================================
        public void ExcluirCategoria(int codCategoria)
        {
            banco2 objBanco = new banco2();

            tb_categoria objResgate = objBanco.tb_categoria.Where(cat => cat.id_categoria == codCategoria).FirstOrDefault();

            objBanco.DeleteObject(objResgate);

            objBanco.SaveChanges();
        }
        //=========================================================================
        public void ExcluirConta(int codConta)
        {
            banco2 objBanco = new banco2();

            tb_conta objResgate = objBanco.tb_conta.Where(cont => cont.id_conta == codConta).FirstOrDefault();

            objBanco.DeleteObject(objResgate);

            objBanco.SaveChanges();
        }
        //============================================================================
        public void InserirCategoria(tb_categoria objCategoria)
        {
            // Cria o obj que representa o BD
            banco2 objbanco = new banco2();

            // No meu obj banco add an tb categoria o obj do parametro de entrada
            objbanco.AddTotb_categoria(objCategoria);


            // Salava no BD
            objbanco.SaveChanges();
        }
        //============================================================================
        public void InserirConta(tb_conta objConta)
        {
            //Cria  o obejeto do banco

            banco2 objbanco = new banco2();

            //adiciona na tb conta o obj do parametro de entrada
            objbanco.AddTotb_conta(objConta);

            //salva no banco
            objbanco.SaveChanges();
        }
        public List <MovimentoVO> ConsultarMovimento(int codUser, DateTime dtInicial, DateTime dtFinal, short tipoMov)
        {
            banco2 objBanco = new banco2();
            //Lista de Retorno - O Movimento VO foi criado para personalizar um retorno devido ter mais de uma tabela  vinculada
            List <MovimentoVO> lstRetorno = new List <MovimentoVO>();
            // Lista de Consulta
            List <tb_movimento> lstConsulta = new List <tb_movimento>();

            if (tipoMov != 2)
            {
                // Alimenta a lista de consulta fcom os dados da tabela de movimento  quando  o tipo for especifico

                lstConsulta = objBanco.tb_movimento
                              .Include("tb_conta")
                              .Include("tb_categoria")
                              .Include("tb_empresa")
                              .Where(mov => mov.id_usuario == codUser &&
                                     mov.data_movimento >= dtInicial && mov.data_movimento <= dtFinal &&
                                     mov.tipo_movimento == tipoMov).ToList();
            }
            else
            {
                lstConsulta = objBanco.tb_movimento
                              .Include("tb_conta")
                              .Include("tb_categoria")
                              .Include("tb_empresa")
                              .Where(mov => mov.id_usuario == codUser &&
                                     mov.data_movimento >= dtInicial && mov.data_movimento <= dtFinal).ToList();
            }


            // este for vai percorrer  item a item da lista de Consulta
            for (int i = 0; i < lstConsulta.Count; i++)
            {
                //cria o obj
                MovimentoVO objvo = new MovimentoVO();

                //preenche as propriedades customizadas
                objvo.Categoria = lstConsulta[i].tb_categoria.nome_categoria;
                objvo.Empresa   = lstConsulta[i].tb_empresa.nome_empresa;
                objvo.Conta     = lstConsulta[i].tb_conta.numero_conta + " / Banco: " + lstConsulta[i].tb_conta.nome_banco;
                objvo.Data      = lstConsulta[i].data_movimento.ToShortDateString();
                objvo.Valor     = lstConsulta[i].valor_movimento;
                objvo.Tipo      = lstConsulta[i].tipo_movimento == 0 ? "Entrada" : "Saída";

                objvo.objMov = lstConsulta[i];

                //Adiciona na lista de retorno
                lstRetorno.Add(objvo);
            }

            return(lstRetorno);
        }
        //=========================================================================
        //public List<MovimentoVO>PesquisarMovimentoConta(int codUser, DateTime dataInicial, DateTime dataFinal, )

        //=========================================================

        public void AlterarConta(tb_conta ObjContaAtualizada)
        {
            banco2 objBanco = new banco2();

            tb_conta objResgate = objBanco.tb_conta.Where(cont => cont.id_conta == ObjContaAtualizada.id_conta).FirstOrDefault();

            objResgate.nome_banco    = ObjContaAtualizada.nome_banco;
            objResgate.agencia_conta = ObjContaAtualizada.agencia_conta;
            objResgate.numero_conta  = ObjContaAtualizada.numero_conta;
            objResgate.saldo_conta   = ObjContaAtualizada.saldo_conta;
            objResgate.tipo_conta    = ObjContaAtualizada.tipo_conta;

            objBanco.SaveChanges();
        }
        //============================================================================
        public void AlterarCategoria(tb_categoria objCategoriaAtualizada)
        {
            //1º passo
            //conexão com o banco
            banco2 objBanco2 = new banco2();

            //resgata o registro antigo
            tb_categoria ObjResgate = objBanco2.tb_categoria.Where(cat => cat.id_categoria == objCategoriaAtualizada.id_categoria).FirstOrDefault();

            //2º passo
            //atualiza as informações
            ObjResgate.nome_categoria = objCategoriaAtualizada.nome_categoria;

            // Salva a alteração
            objBanco2.SaveChanges();
        }
        public List <MovimentoVO> ConsultarMovimentoEmpresa(int codUser, DateTime dtInicial, DateTime dtFinal, int idEmpresa)
        {
            banco2 objBanco = new banco2();

            List <MovimentoVO>  lstRetorno  = new List <MovimentoVO>();
            List <tb_movimento> lstConsulta = new List <tb_movimento>();



            lstConsulta = objBanco.tb_movimento
                          .Include("tb_conta")
                          .Include("tb_categoria")
                          .Include("tb_empresa")
                          .Where(mov => mov.id_usuario == codUser &&
                                 mov.data_movimento >= dtInicial &&
                                 mov.data_movimento <= dtFinal &&
                                 mov.tb_categoria.id_categoria == idEmpresa).ToList();



            for (int i = 0; i < lstConsulta.Count; i++)
            {
                //cria o obj
                MovimentoVO objvo = new MovimentoVO();

                //preenche as propriedades customizadas
                objvo.Conta     = lstConsulta[i].tb_conta.nome_banco + " / Numero : " + lstConsulta[i].tb_conta.numero_conta;
                objvo.Categoria = lstConsulta[i].tb_categoria.nome_categoria;
                objvo.Empresa   = lstConsulta[i].tb_empresa.nome_empresa;

                objvo.Data  = lstConsulta[i].data_movimento.ToShortDateString();
                objvo.Valor = lstConsulta[i].valor_movimento;
                objvo.Tipo  = lstConsulta[i].tipo_movimento == 0 ? "Entrada" : "Saída";



                //Adiciona na lista de retorno
                lstRetorno.Add(objvo);
            }
            return(lstRetorno);
        }
        public void LancarMovimento(tb_movimento objMov)

        {
            banco2 objBanco = new banco2();

            objBanco.AddTotb_movimento(objMov);

            if (objMov.id_conta == null)
            {
            }
            else
            {
                using (TransactionScope t = new TransactionScope())
                {
                    //insere na tb_movimento
                    objBanco.SaveChanges();

                    tb_conta objConta = objBanco.tb_conta.FirstOrDefault(cont => cont.id_conta == objMov.id_conta);

                    //identificar se vai remover ou adicionar dinheiro verificando a combo de tipo

                    if (objMov.tipo_movimento == 0)//entrada
                    {
                        objConta.saldo_conta += objMov.valor_movimento;
                    }
                    else//saida
                    {
                        objConta.saldo_conta -= objMov.valor_movimento;
                    }

                    //altera na tb_conta
                    objBanco.SaveChanges();

                    //confirmação da Transactrion
                    t.Complete();
                }
            }
        }