Dúvida sobre compra parcelada

22/06/2013

0

Pessoal estou com uma dúvida, eu sei fazer no caso o vencimento do produto e tal. Mais quando parte para compra parcelada, ainda não raciocinei bem ainda para produzir um algoritmo eficiente, obs: Estou criando um gestor financeiro pessoal.
Raniel Gomes

Raniel Gomes

Responder

Posts

22/06/2013

Joel Rodrigues

Não entendi bem qual é sua dificuldade.
Responder

22/06/2013

Raniel Gomes

Tipo assim, tenho uma divida que se vence nos dia 20 de cada mês, e ela é parcelada em 3x quero que ele mostre a data de vencimento dá segunda parcela após o vencimento da primeira parcela. E assim por diante.
Responder

22/06/2013

Joel Rodrigues

Bem, definido o dia do vencimento da primeira parcela, você conta 30 dias (mês fiscal) a partir dela para encontrar o vencimento da segunda e assim por diante. Caso caia em um final de semana ou feriado, você passa para a próxima data válida.

Outra forma seria fixar o dia do vencimento. Se será todo dia 20 de cada mês, basta verificar se o dia 20 não cairá em um fim de semana ou feriado e proceder como dito acima.

Como você pretende calcular os vencimentos das próximas parcelas? Em dias fixos ou 30 dias após a anterior?
Responder

22/06/2013

Raniel Gomes

Poderia ser em dias fixos mesmo de 30 dias.
Responder

22/06/2013

Joel Rodrigues

Cara, não entendi =/
Você meio que misturou os dois aí.
Responder

22/06/2013

Raniel Gomes

Olha amigo queria só um exemplo, que eu possa calcular a data do vencimento parcelado em meses. Decrementando os meses do pagamento após o vencimento. Pode ser qualquer exemplo e depois vou melhorando o mesmo, só estou meio desnorteado no momento na regra de negócio.
Responder

22/06/2013

Joel Rodrigues

Bom, eu não tenho o Delphi aqui, mas a ideia eu já passei.
Se você tem a data da primeira parcela e a quantidade de parcelas, basta fazer um loop com N-1 iterações, onde N é o número de parcelas. Em cada iteração você instancia um novo DateTime, aumentando o mês (a partir da data anterior) e mantendo fixo o dia.
Responder

22/06/2013

Raniel Gomes

Delphi? cara estou fazendo em C#
Responder

22/06/2013

Joel Rodrigues

Tanto faz, a ideia é a mesma e o código ainda mais fácil, pois a classe DateTime possui métodos que facilitam esse cálculo, como o AddDays(30).
Responder

22/06/2013

Raniel Gomes

Obrigado amigo pela dica.
Responder

22/06/2013

Joel Rodrigues

Daqui a pouco eu vou pegar o notebook, aí faço um exemplo rapidão e posto aqui.
Abraço.
Responder

22/06/2013

Joel Rodrigues

Fiz uma pequena aplicação Console, veja se dá pra entender:
class Program
    {
        static void Main(string[] args)
        {
            int parcelas = 3; //quantidade de parcelas
            DateTime dataParcela = DateTime.Today; //data da primeira parcela (fixei como hoje)
            Console.WriteLine(dataParcela.ToString("dd/MM/yyyy")); //imprime a primeira parcela
            for (int i = 1; i < parcelas; i++) //faz um laço a menos que o número de parcelas
            {
                 dataParcela = getProximaData(dataParcela, 30);
                 Console.WriteLine(dataParcela.ToString("dd/MM/yyyy"));
            }
            Console.Read();
        }

        private static DateTime getProximaData(DateTime data, int dias)
        {
            DateTime proximaData = data.AddDays(dias);
            bool ehValida = false;
            while (!ehValida)
            {
                if (proximaData.DayOfWeek == DayOfWeek.Sunday)//se cair em um domingo, adiciona um dia
                {
                    proximaData = proximaData.AddDays(1);
                }
                else
                {
                    ehValida = true;
                }
            }
            return proximaData;
        }
    }

Qualquer dúvida, é só falar.
Responder

23/06/2013

Raniel Gomes

Obrigado pelo exemplo vou testar aqui, abraço.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar