private void btnEstornar_Click(object sender, EventArgs e)
        {
            ContasAPagar cap = new ContasAPagar();
            ContasAPagar aux = new ContasAPagar();
            bool flag = false;
            List<ContasAPagar> lcap = (List<ContasAPagar>)DgvQuitar.DataSource;
            cap = lcap[DgvQuitar.CurrentRow.Index];
            if (VerificaUltimaParcelaFechada(cap))
            {
                lcap = IContasapagar.GetData(cap.Cap_datageracao).ToList();
                foreach(var a in lcap)
                    if(a.Cap_datavencimento == cap.Cap_datavencimento)
                        if(a.Cap_valorpago == 0)
                        {
                            aux = a;
                            break;
                        }
                cap.Cap_valorpago = 0;
                cap.Cap_datapagamento = DateTime.MinValue;
                IContasapagar.Estornar(cap, aux);
                MessageBox.Show("O valor da parcela foi estornado!!");
                rbFechado_Click(sender, e);
                

            }
            else
                MessageBox.Show("Você não pode estornar essa parcela, pois tem uma parcela posterior paga!");

        }
        private void rbAberto_CheckedChanged(object sender, EventArgs e)
        {
            DgvQuitar.DataSource = "";
            List<ContasAPagar> lcap = new List<ContasAPagar>();
            if (!cbFiltro.Checked)
            {
                
                lcap = IContasapagar.GetAbertas().ToList();
                DgvQuitar.DataSource = lcap;
                
            }
            else
            {
                
                if (DatasIguaisFiltro())
                    lcap = IContasapagar.GetAbertarFiltro(dtpData.Value.Date, dtpData2.Value.AddHours(Convertpara23h(dtpData2.Value.Hour)).AddMinutes(Convertpara59m(dtpData2.Value.Minute)).AddSeconds(dtpData2.Value.Second)).ToList();
                else if (dtpData.Value < dtpData2.Value)
                    lcap = IContasapagar.GetAbertarFiltro(dtpData.Value, dtpData2.Value.AddHours(Convertpara23h(dtpData2.Value.Hour)).AddMinutes(Convertpara59m(dtpData2.Value.Minute)).AddSeconds(dtpData2.Value.Second)).ToList();
                else
                    MessageBox.Show("Você não pode filtrar uma despesa onde o período que deseja seja menor que a data atual, altere a primeira data e mantenha o segundo filtro no dia atual");

                DgvQuitar.DataSource = lcap;

            }
            DgvQuitar_SelectionChanged(sender, e);
            NomeiaCampos();

        }
        public void CarregaGRID()
        {
            List<ContasAPagar> lcap = IContasapagar.GetAbertas().ToList();
            DgvQuitar.DataSource = lcap;
            NomeiaCampos();
            

            
        }
        private void btnExcluir_Click(object sender, EventArgs e)
        {
            List <ContasAPagar> lcap = (List <ContasAPagar>)DgvDespesa.DataSource;


            if (lcap[0].Cap_valorpago == 0)
            {
                IContasapagar.Excluir(lcap[0].Cap_datageracao);
            }
            else
            {
                MessageBox.Show("Você não pode excluir essa despesa, já houve parcela paga!!");
            }
            Limpar();
        }
 private void btnQuitar_Click(object sender, EventArgs e)
 {
     List<ContasAPagar> lcap = (List<ContasAPagar>)DgvQuitar.DataSource;
     cap = lcap[DgvQuitar.CurrentRow.Index];
     if(VerificaParcela(cap) || MessageBox.Show("Você selecionou uma parcela porém tem outra anterior em aberta, ainda deseja quitar essa parcela","Existe parcela(s) anterior(es)",MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
     {
         if (lcap[DgvQuitar.CurrentRow.Index].Cap_valorpago.Equals(0))
         {
             decimal b, d;
             string a = txtValorPago.Text.Replace("R$", "").Replace("-", "").Replace("_", "").Replace(".", ",").Replace(" ", "");
             string c = txtVP.Text.Replace("R$", "").Replace("-", "").Replace("_", "").Replace(".", ",").Replace(" ", "");
             cap.Cap_datapagamento = dtpDataPagamento.Value;
             b = cap.Cap_valorpago = Math.Round(Convert.ToDecimal(a), 2);
             d = Math.Round(Convert.ToDecimal(c), 2);
             bool flag = true;
             if (Math.Round(Convert.ToDecimal(a), 2) > Math.Round(Convert.ToDecimal(c), 2))
             {
                 if (MessageBox.Show("Foi inserido um valor de pagamento acima do preço da despesa, deseja confirmar o pagamento mesmo assim?", "Valor do pagamento acima do valor da despesa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                 {
                     cap.Cap_valorpago = cap.Cap_valordespesa;
                     IContasapagar.Quitar(cap, flag);
                     MessageBox.Show("Sua despesa foi quitada com um valor remanescente de R$" + (b - d));
                 }
                 else
                     MessageBox.Show("Usuario não concordou em continuar a quitação da despesa, logo, a operação foi cancelada!");
                 
             }
             else if (Math.Round(Convert.ToDecimal(a), 2) < Math.Round(Convert.ToDecimal(c), 2))
             {
                 flag = false;
                 IContasapagar.Quitar(cap, flag);
                 MessageBox.Show("Sua despesa foi parcialmente quitada, foi gerado uma nova parcela com o valor restante!!");
             }
             else if (Math.Round(Convert.ToDecimal(a), 2) == Math.Round(Convert.ToDecimal(c), 2))
             {
                 IContasapagar.Quitar(cap, flag);
                 MessageBox.Show("Sua despesa foi quitada!!");
             }
             LimparTela();
         }
     }
     
     
     
 }
        private void btnLancar_Click(object sender, EventArgs e)
        {
            List <ContasAPagar> lcap = (List <ContasAPagar>)DgvDespesa.DataSource;

            if (lcap[0].Cap_cod == null)
            {
                if (ValidaPreco(lcap))
                {
                    IContasapagar.Gravar(lcap);
                    MessageBox.Show("Gravado com sucesso!!");
                    Limpar();
                    DgvDespesa.DataSource = "";
                }
            }
            else
            {
                MessageBox.Show("Essa despesa já foi lançadaaa!!!!");
            }
        }
        public bool VerificaParcela(ContasAPagar cap)
        {
            List<ContasAPagar> lcap = new List<ContasAPagar>();
            lcap = (List<ContasAPagar>)IContasapagar.GetData(cap.Cap_datageracao);
            foreach(var a in lcap)
            {
                if (a.Cap_cod < cap.Cap_cod)
                {
                    if (a.Cap_valorpago.Equals(0))
                        return false;
                }
                else if (a.Cap_cod == cap.Cap_cod)
                    break;

            }


            return true;
        }
 public bool VerificaUltimaParcelaFechada(ContasAPagar cap)
 {
     List<ContasAPagar> lcap = IContasapagar.GetData(cap.Cap_datageracao).ToList();
     List<ContasAPagar> suport = new List<ContasAPagar>();
     foreach(var a in lcap)
     {
         if (cap.Cap_datavencimento == a.Cap_datavencimento)
             suport.Add(a);
     }
     suport = suport.OrderByDescending(c => c.Cap_cod).ToList();
     
     foreach(var a in suport)
     {
         if (a.Cap_valorpago != 0)
             if (a.Cap_cod == cap.Cap_cod)
                 return true;
             else
                 break;
         
     }
     return false;
 }
        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            var a = new PesquisaLancarDespesa(IContasapagar);



            if (a.ShowDialog() == DialogResult.OK)
            {
                List <ContasAPagar> lcap = IContasapagar.GetData(a.CAP.Cap_datageracao).ToList();

                /*txtID.Text = a.CAP.Cap_cod.ToString();
                 * txtDescricao.Text = a.CAP.Cap_descricao;
                 * txtUser.Text = a.CAP.User.User_login;
                 * txtValorDespesa.Text = a.CAP.Cap_valordespesa.ToString().PadLeft(11, ' ');
                 * txtParcelas.Text = IContasapagar.conta(Convert.ToInt32(txtID.Text)).ToString();
                 * if (Convert.ToInt32(txtParcelas.Text) > 1)
                 *  rbParcelado.Checked = true;
                 * else
                 *  rbAVista.Checked = true;
                 * dtpData.Value = a.CAP.Cap_datageracao;
                 * cbbDespesa.Text = a.CAP.Despesa.Desp_descricao;*/
                DgvDespesa.DataSource = lcap;
                DgvDespesa.Columns.Remove("Cap_cod");
                DgvDespesa.Columns.Remove("Cap_datapagamento");
                DgvDespesa.Columns.Remove("Cap_valorpago");
                DgvDespesa.Columns.Remove("User");
                DgvDespesa.Columns.Remove("Despesaid");
                DgvDespesa.Columns.Remove("Usuarioid");
                DgvDespesa.Columns.Remove("PedidoPetid");
                DgvDespesa.Columns["Cap_descricao"].HeaderText      = "Descrição da despesa";
                DgvDespesa.Columns["Cap_datageracao"].HeaderText    = "Data de lançamento";
                DgvDespesa.Columns["Cap_valordespesa"].HeaderText   = "Valor da despesa";
                DgvDespesa.Columns["Cap_datavencimento"].HeaderText = "Data do vencimento";
                DgvDespesa.Columns["DespesaDescricao"].HeaderText   = "Categoria da despesa";
                DgvDespesa.Columns["NomeUsuario"].HeaderText        = "Nome do Usuario";
            }
        }