From: Thadeu Lima de Souza Cascardo Date: Sun, 10 Apr 2016 15:24:53 +0000 (-0300) Subject: Permite pagamento para despesa com dependente. X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fdeclara.git;a=commitdiff_plain;h=e86e399877de703140d16f2caaf366ebc08ff474 Permite pagamento para despesa com dependente. O dependente deve ser especificado numericamente, indexado a partir de 1. Este é o mesmo código a ser utilizado ao gerar a linha de dependente e que será utilizado na linha de pagamento. A opção foi feita por utilizar o índice, pois nem todos os dependentes possuem CPF, e no raro caso de existirem dependentes homônimos, o nome não poderia ser utilizado tampouco. A utilização do índice exige que o dependente seja adicionado anteriormente ao pagamento. Se o dependente for omitido ou tiver o índice zero, considera-se a despesa com o titular. A linha de pagamento também passa a ser gerada com a informação correta sobre o dependente. --- diff --git a/lib/gera.c b/lib/gera.c index 56950ed..69c4311 100644 --- a/lib/gera.c +++ b/lib/gera.c @@ -655,7 +655,7 @@ static void gera_pagamento(struct declaracao *dec, FILE *f) fprintf(f, "26"); fprintf(f, "%s", dec->cpf); fprintf(f, "%02d", p->codigo); - fprintf(f, "%05d", 0); /* TODO: chave dependente */ + fprintf(f, "%05d", p->dependente); fprintf(f, "%-14.14s", p->cnpj); fprintf(f, "%-60.60s", p->nome); fprintf(f, "%-11.11s", ""); /* TODO: NIT */ @@ -666,8 +666,8 @@ static void gera_pagamento(struct declaracao *dec, FILE *f) fprintf(f, "%013lld", 0); } fprintf(f, "%d", strlen(p->cnpj) == 11 ? 1 : 2); - /* Titular (T), Dependente (D), Alimentando (A), FIXME */ - fprintf(f, "T"); + /* Titular (T), Dependente (D), Alimentando (A), FIXME Alimentando */ + fprintf(f, "%c", p->dependente ? 'D' : 'T'); } static void gera_isento(struct declaracao *dec, FILE *f, int codigo) diff --git a/lib/pagamento.c b/lib/pagamento.c index 1e91115..821a3f1 100644 --- a/lib/pagamento.c +++ b/lib/pagamento.c @@ -69,7 +69,7 @@ static int pagamento_cmp(void *p1, void *p2) return 0; } -static struct pagamento * pagamento_new(char **args) +static struct pagamento * pagamento_new(char **args, int argc) { struct pagamento *pagamento; int r = 0; @@ -89,6 +89,15 @@ static struct pagamento * pagamento_new(char **args) pagamento_free(pagamento); return NULL; } + if (argc == 7) { + r = set_int(&args[5], 2, &pagamento->dependente); + } else { + pagamento->dependente = 0; + } + if (r < 0 || pagamento->dependente < 0) { + pagamento_free(pagamento); + return NULL; + } return pagamento; } @@ -96,11 +105,15 @@ static int run_pagamento(struct declaracao *dec, char **args, int argc) { struct pagamento *pagamento; int r; - if (argc != 6) + if (argc != 6 && argc != 7) return -EINVAL; - pagamento = pagamento_new(args); + pagamento = pagamento_new(args, argc); if (!pagamento) return -ENOMEM; + if (pagamento->dependente > list_size(dec->dependentes)) { + pagamento_free(pagamento); + return -EINVAL; + } r = list_insert_ordered(&dec->pagamentos, pagamento, pagamento_cmp); if (r < 0) { pagamento_free(pagamento); @@ -119,8 +132,8 @@ void pagamento_salva(struct declaracao *dec, FILE *f) int i; struct pagamento *j; for (i = 0; j = list_get(dec->pagamentos, i); i++) - fprintf(f, "pagamento %d \"%s\" \"%s\" %lld %lld\n", - j->codigo, j->cnpj, j->nome, j->pagamento, j->reembolso); + fprintf(f, "pagamento %d \"%s\" \"%s\" %lld %lld %d\n", + j->codigo, j->cnpj, j->nome, j->pagamento, j->reembolso, j->dependente); } static struct cmd cmd_pagamento = { diff --git a/lib/pagamento.h b/lib/pagamento.h index e4ce6bf..adf105f 100644 --- a/lib/pagamento.h +++ b/lib/pagamento.h @@ -28,6 +28,7 @@ struct pagamento { char *nome; long long pagamento; long long reembolso; + int dependente; }; void pagamento_salva(struct declaracao *dec, FILE *f);