//Função que avança ao próximo formulário
        private void goForward()
        {
            Globals.step += 1;
            if (Globals.step == 1)
            {
                if (Globals.clientStep.cbb_clientName.SelectedIndex == -1)
                {
                    MessageBox.Show("Selecione um cliente antes de avançar!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    Globals.step -= 1;
                }
                else
                {
                    //Cadastro de orçamento
                    Globals.numeroOrcamento = 0;

                    //Usuário não passou pelo formulário de orçamentos
                    Globals.budgetStep = new BudgetStep(this, null)
                    {
                        Dock = DockStyle.Fill, TopLevel = false, TopMost = true
                    };

                    //Todos os dados do cliente
                    this.displayOnPanel();
                }
            }
            else if (Globals.step == 2)
            {
                //Todos os dados do orçamento do cliente
                Globals.budgetStepDataTable = Database.query("SELECT * FROM orcamento WHERE orcamento.numeroOrcamento = " + Globals.numeroOrcamento);
                if (Globals.budgetStepDataTable.Rows.Count > 0)
                {
                    //Cliente já tem orçamento cadastrado
                    Globals.idCliente = Convert.ToInt32(Globals.budgetStepDataTable.Rows[0].ItemArray[1]);

                    Globals.productStep = new ProductStep(this)
                    {
                        Dock = DockStyle.Fill, TopLevel = false, TopMost = true
                    };
                    this.panel_steps.Controls.Remove(Globals.budgetStep);
                    this.panel_steps.Controls.Add(Globals.productStep);
                    Globals.productStep.Show();

                    this.lbl_btnGoBackTag.Visible     = true;
                    this.pcb_btnGoBack.Visible        = true;
                    this.lbl_btnGoForwardTag.Visible  = false;
                    this.pcb_btnGoForward.Visible     = false;
                    this.lbl_btnEndBudgetTag.Visible  = true;
                    this.pcb_btnEndBudget.Visible     = true;
                    this.lbl_btnEndBudgetTag.Location = new Point(925, 445);
                    this.pcb_btnEndBudget.Location    = new Point(845, 417);
                }
                else
                {
                    if (String.IsNullOrEmpty(Globals.budgetStep.mtb_budgetDate.Text.Trim()) || String.IsNullOrEmpty(Globals.budgetStep.txt_laborValue.Text.Trim()) || Globals.budgetStep.cbb_incomeAccount.SelectedIndex == -1 || Globals.budgetStep.cbb_paymentCondition.SelectedIndex == -1)
                    {
                        MessageBox.Show("Preencha todos os campos antes de avançar!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        Globals.step -= 1;
                    }
                    else
                    {
                        //Cliente ainda não cadastrou orçamento
                        if ((Globals.budgetStep.ckb_parcelValue.Checked) && ((String.IsNullOrEmpty(Globals.budgetStep.txt_parcels.Text.Trim())) || (Globals.budgetStep.cbb_period.SelectedIndex == -1)))
                        {
                            MessageBox.Show("Informe o número de parcelas da receita e o período em que elas se repetem!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                        else
                        {
                            Account account = new Account();
                            Budget  budget  = new Budget();
                            Income  income  = new Income();
                            account.IdConta      = income.IdConta;
                            budget.IdCliente     = Convert.ToInt32(Globals.clientStepDataTable.Rows[0].ItemArray[0]);
                            Globals.idCliente    = Convert.ToInt32(Globals.clientStepDataTable.Rows[0].ItemArray[0]);
                            budget.DataOrcamento = Convert.ToDateTime(Globals.budgetStep.mtb_budgetDate.Text.Trim());
                            income.DataTransacao = Convert.ToDateTime(Globals.budgetStep.mtb_budgetDate.Text.Trim());
                            Regex  regexValor    = new Regex(@"[R$ ]?[R$]?\d{1,3}(\.\d{3})*,\d{2}");
                            string valorTrabalho = Globals.budgetStep.txt_laborValue.Text.Trim();
                            if (regexValor.IsMatch(valorTrabalho))
                            {
                                if (valorTrabalho.Contains("R$ "))
                                {
                                    budget.ValorTrabalho = Convert.ToDecimal(valorTrabalho.Substring(3).Trim());
                                    budget.ValorTotal    = Convert.ToDecimal(valorTrabalho.Substring(3).Trim());
                                    income.ValorReceita  = Convert.ToDecimal(valorTrabalho.Substring(3).Trim());
                                }
                                else if (valorTrabalho.Contains("R$"))
                                {
                                    budget.ValorTrabalho = Convert.ToDecimal(valorTrabalho.Substring(2).Trim());
                                    budget.ValorTotal    = Convert.ToDecimal(valorTrabalho.Substring(2).Trim());
                                    income.ValorReceita  = Convert.ToDecimal(valorTrabalho.Substring(2).Trim());
                                }
                                else
                                {
                                    budget.ValorTrabalho = Convert.ToDecimal(Globals.budgetStep.txt_laborValue.Text.Trim());
                                    budget.ValorTotal    = Convert.ToDecimal(Globals.budgetStep.txt_laborValue.Text.Trim());
                                    income.ValorReceita  = Convert.ToDecimal(Globals.budgetStep.txt_laborValue.Text.Trim());
                                }
                            }
                            else
                            {
                                MessageBox.Show("Formato monetário incorreto!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                Globals.budgetStep.txt_laborValue.Clear();
                                Globals.budgetStep.txt_laborValue.PlaceholderText = "";
                                Globals.budgetStep.txt_laborValue.Focus();
                                return;
                            }
                            budget.CondicaoPagamento = Globals.budgetStep.cbb_paymentCondition.SelectedItem.ToString().Trim();
                            if (Globals.budgetStep.ckb_confirmedBudget.Checked)
                            {
                                budget.OrcamentoConfirmado = true;
                            }
                            else
                            {
                                budget.OrcamentoConfirmado = false;
                            }
                            income.DescricaoReceita   = Globals.budgetStep.txt_incomeDescription.Text.Trim();
                            income.IdConta            = Convert.ToInt32(Database.query("SELECT idConta FROM conta WHERE nomeConta = '" + Globals.budgetStep.cbb_incomeAccount.SelectedItem.ToString().Trim() + "';").Rows[0].ItemArray[0]);
                            income.IdCategoria        = Convert.ToInt32(Database.query("SELECT idCategoria FROM categoria WHERE nomeCategoria = 'Orçamentos';").Rows[0].ItemArray[0]);
                            income.ObservacoesReceita = Globals.budgetStep.txt_incomeObservations.Text.Trim();
                            if (Globals.budgetStep.ckb_incomeReceived.Checked)
                            {
                                income.RecebimentoConfirmado = true;
                            }
                            else
                            {
                                income.RecebimentoConfirmado = false;
                            }

                            if (Globals.budgetStep.ckb_parcelValue.Checked)
                            {
                                if (Globals.budgetStep.ckb_parcelValue.Checked)
                                {
                                    income.RepetirParcelarReceita = true;

                                    income.ParcelarValorReceita          = true;
                                    income.ParcelasReceita               = Convert.ToInt32(Globals.budgetStep.txt_parcels.Text.Trim());
                                    income.PeriodoRepetirParcelarReceita = Globals.budgetStep.cbb_period.SelectedItem.ToString().Trim();
                                    income.ValorReceita = income.ValorReceita / income.ParcelasReceita;

                                    if (Database.newBudget(budget))
                                    {
                                        income.NumeroOrcamento  = Convert.ToInt32(Database.query("SELECT numeroOrcamento FROM orcamento ORDER BY numeroOrcamento DESC LIMIT 1;").Rows[0].ItemArray[0]);
                                        Globals.numeroOrcamento = income.NumeroOrcamento;
                                        if (Database.newIncome(income))
                                        {
                                            Globals.idReceita = Convert.ToInt32(Database.query("SELECT idReceita FROM receita ORDER BY idReceita DESC LIMIT 1;").Rows[0].ItemArray[0]);
                                            List <Parcel> parcels = new List <Parcel>();
                                            int           success = 1;
                                            for (int i = 0; i < (income.ParcelasReceita - 1); i++)
                                            {
                                                parcels.Add(new Parcel());
                                                parcels[i].IdReceita        = Convert.ToInt32(Database.query("SELECT idReceita FROM receita ORDER BY idReceita DESC LIMIT 1;").Rows[0].ItemArray[0]);
                                                parcels[i].IdConta          = income.IdConta;
                                                parcels[i].IdCategoria      = income.IdCategoria;
                                                parcels[i].ValorParcela     = income.ValorReceita;
                                                parcels[i].DescricaoParcela = income.DescricaoReceita;
                                                this.periodSelection(i, income, parcels);
                                                parcels[i].ObservacoesParcela    = income.ObservacoesReceita;
                                                parcels[i].RecebimentoConfirmado = false;
                                                if (Database.newParcel(parcels[i]))
                                                {
                                                    continue;
                                                }
                                                else
                                                {
                                                    success = 0;
                                                    break;
                                                }
                                            }
                                            if (success == 0)
                                            {
                                                MessageBox.Show("[ERRO] Não foi possível cadastrar todas as parcelas!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            }

                                            this.selectClientLastBudget();
                                            Globals.idCliente   = Convert.ToInt32(Globals.budgetStepDataTable.Rows[0].ItemArray[1]);
                                            Globals.productStep = new ProductStep(this)
                                            {
                                                Dock = DockStyle.Fill, TopLevel = false, TopMost = true
                                            };
                                            this.panel_steps.Controls.Remove(Globals.budgetStep);
                                            this.panel_steps.Controls.Add(Globals.productStep);
                                            Globals.productStep.Show();

                                            this.lbl_btnGoBackTag.Visible     = true;
                                            this.pcb_btnGoBack.Visible        = true;
                                            this.lbl_btnGoForwardTag.Visible  = false;
                                            this.pcb_btnGoForward.Visible     = false;
                                            this.lbl_btnEndBudgetTag.Visible  = true;
                                            this.pcb_btnEndBudget.Visible     = true;
                                            this.lbl_btnEndBudgetTag.Location = new Point(925, 445);
                                            this.pcb_btnEndBudget.Location    = new Point(845, 417);
                                        }
                                        else
                                        {
                                            MessageBox.Show("[ERRO] Não foi possível cadastrar receita!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("[ERRO] Não foi possível cadastrar orçamento!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                }
                                else
                                {
                                    income.ParcelarValorReceita = false;
                                }
                            }
                            else
                            {
                                income.RepetirParcelarReceita = false;
                                if (Database.newBudget(budget))
                                {
                                    income.NumeroOrcamento  = Convert.ToInt32(Database.query("SELECT numeroOrcamento FROM orcamento ORDER BY numeroOrcamento DESC LIMIT 1;").Rows[0].ItemArray[0]);
                                    Globals.numeroOrcamento = income.NumeroOrcamento;
                                    if (Database.newIncome(income))
                                    {
                                        Globals.idReceita = Convert.ToInt32(Database.query("SELECT idReceita FROM receita ORDER BY idReceita DESC LIMIT 1;").Rows[0].ItemArray[0]);

                                        Globals.productStep = new ProductStep(this)
                                        {
                                            Dock = DockStyle.Fill, TopLevel = false, TopMost = true
                                        };
                                        this.panel_steps.Controls.Remove(Globals.budgetStep);
                                        this.panel_steps.Controls.Add(Globals.productStep);
                                        Globals.productStep.Show();

                                        this.lbl_btnGoBackTag.Visible     = true;
                                        this.pcb_btnGoBack.Visible        = true;
                                        this.lbl_btnGoForwardTag.Visible  = false;
                                        this.pcb_btnGoForward.Visible     = false;
                                        this.lbl_btnEndBudgetTag.Visible  = true;
                                        this.pcb_btnEndBudget.Visible     = true;
                                        this.lbl_btnEndBudgetTag.Location = new Point(925, 445);
                                        this.pcb_btnEndBudget.Location    = new Point(845, 417);
                                    }
                                    else
                                    {
                                        MessageBox.Show("[ERRO] Não foi possível cadastrar receita!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("[ERRO] Não foi possível cadastrar orçamento!", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            }
                        }
                    }
                }
            }
        }
        //Função que seleciona a data de transação da parcela de acordo com o período escolhido pelo usuário
        private void periodSelection(int i, Income income, List <Parcel> parcels)
        {
            if (i == 0)
            {
                switch (income.PeriodoRepetirParcelarReceita)
                {
                case "Diário":
                    parcels[i].DataTransacao = income.DataTransacao.AddDays(1);
                    break;

                case "Semanal":
                    parcels[i].DataTransacao = income.DataTransacao.AddDays(7);
                    break;

                case "A cada 2 semanas":
                    parcels[i].DataTransacao = income.DataTransacao.AddDays(14);
                    break;

                case "Mensal":
                    parcels[i].DataTransacao = income.DataTransacao.AddMonths(1);
                    break;

                case "Bimestral":
                    parcels[i].DataTransacao = income.DataTransacao.AddMonths(2);
                    break;

                case "Trimestral":
                    parcels[i].DataTransacao = income.DataTransacao.AddMonths(3);
                    break;

                case "Semestral":
                    parcels[i].DataTransacao = income.DataTransacao.AddMonths(6);
                    break;

                case "Anual":
                    parcels[i].DataTransacao = income.DataTransacao.AddYears(1);
                    break;
                }
            }
            else
            {
                switch (income.PeriodoRepetirParcelarReceita)
                {
                case "Diário":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddDays(1);
                    break;

                case "Semanal":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddDays(7);
                    break;

                case "A cada 2 semanas":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddDays(14);
                    break;

                case "Mensal":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddMonths(1);
                    break;

                case "Bimestral":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddMonths(2);
                    break;

                case "Trimestral":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddMonths(3);
                    break;

                case "Semestral":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddMonths(6);
                    break;

                case "Anual":
                    parcels[i].DataTransacao = parcels[i - 1].DataTransacao.AddYears(1);
                    break;
                }
            }
        }