Se total de rendimentos é zero, não gera linha.
authorThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Mon, 30 Apr 2018 20:37:40 +0000 (17:37 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Sat, 15 Sep 2018 19:46:50 +0000 (16:46 -0300)
Ao gerar a linha de um tipo de rendimento, se o seu total é zero, a linha não
deve ser gerada.

lib/gera.c

index a07319d..5bc6075 100644 (file)
@@ -556,10 +556,13 @@ static void gera_isentos(struct declaracao *dec, FILE *f)
 
 static void gera_isentos2(struct declaracao *dec, FILE *f, int codigo, char *nome)
 {
+       long long total = totais_get(dec, nome);
+       if (total == 0)
+               return;
        fprintf(f, "23");
        fprintf(f, "%-11.11s", dec->cpf);
        fprintf(f, "%04d", codigo);
-       fprintf(f, "%013lld", totais_get(dec, nome)); /* TODO: retistuição imposto anos anteriores */
+       fprintf(f, "%013lld", total);
 }
 
 static void gera_23_poupanca(struct declaracao *dec, FILE *f)
@@ -985,8 +988,12 @@ static int wrap(gera_linha fn, struct declaracao *dec, struct list *l)
                return -errno;
        }
        fn(dec, m);
-       dec->linhas[0]++;
        fflush(m);
+       if (bsize == 0) {
+               fclose(m);
+               return 0;
+       }
+       dec->linhas[0]++;
 
        /* Calcula CRC32 para campo de controle dos registros. */
        c = crc32(c, buf, bsize);