/*
- * Copyright (C) 2015 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
+ * Copyright (C) 2015-2016 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
fprintf(f, "%03d", dec->obrigatoria); /* criterio obrigatoriedade */
fprintf(f, "%013lld", totais_get(dec, "RENDPJ")); /* Total tributavel */
/* CNPJ previdencia */
- fprintf(f, "%-14.14s", pagamento_cnpj_ordenado(dec, 36, 0));
+ fprintf(f, "%-14.14s", inss_cnpj_ordenado(dec, 0));
/* CNPJ previdencia 2 */
- fprintf(f, "%-14.14s", pagamento_cnpj_ordenado(dec, 36, 1));
+ fprintf(f, "%-14.14s", inss_cnpj_ordenado(dec, 1));
/* Total isentos */
fprintf(f, "%013lld", totais_get(dec, "ISENTOS"));
/* Total exclusivo */
return 0;
}
-char * pagamento_cnpj_ordenado(struct declaracao *dec, int codigo, int n)
+char * pagamento_cnpj_ordenado_cond(struct declaracao *dec,
+ int (*cond)(struct pagamento *), int n)
{
struct pagamento *pagamento;
int i;
int j = 0;
for (i = 0; (pagamento = list_get(dec->pagamentos, i)); i++) {
- if (pagamento->codigo == codigo && j++ == n)
+ if (cond(pagamento) && j++ == n)
break;
}
if (!pagamento)
return pagamento->cnpj;
}
-static int pagamento_medico(int codigo)
+static int always(struct pagamento *pagamento)
{
- switch (codigo) {
+ return pagamento != NULL;
+}
+
+char * pagamento_cnpj_ordenado(struct declaracao *dec, int n)
+{
+ return pagamento_cnpj_ordenado_cond(dec, always, n);
+}
+
+static int pagamento_medico(struct pagamento *pagamento)
+{
+ switch (pagamento->codigo) {
case 10:
case 21:
case 26:
char * medico_cnpj_ordenado(struct declaracao *dec, int n)
{
- struct pagamento *pagamento;
- int i;
- int j = 0;
- for (i = 0; (pagamento = list_get(dec->pagamentos, i)); i++) {
- if (pagamento_medico(pagamento->codigo) && j++ == n)
- break;
- }
- if (!pagamento)
- return "";
- return pagamento->cnpj;
+ return pagamento_cnpj_ordenado_cond(dec, pagamento_medico, n);
+}
+
+static int pagamento_inss(struct pagamento *pagamento)
+{
+ return pagamento->codigo == 36;
+}
+
+char *inss_cnpj_ordenado(struct declaracao *dec, int n)
+{
+ return pagamento_cnpj_ordenado_cond(dec, pagamento_inss, n);
}
int pagamento_cmd_init(void);
-char * pagamento_cnpj_ordenado(struct declaracao *dec, int codigo, int n);
+char * pagamento_cnpj_ordenado_cond(struct declaracao *dec,
+ int (*cond)(struct pagamento *), int n);
+char * pagamento_cnpj_ordenado(struct declaracao *dec, int n);
char * medico_cnpj_ordenado(struct declaracao *dec, int n);
+char * inss_cnpj_ordenado(struct declaracao *dec, int n);
#endif