#include "util.h"
#include "totais.h"
+static int pagamento_totais_update(struct declaracao *dec, struct pagamento *pagamento)
+{
+ int r;
+ r = totais_add(dec, "PAGAMENTOS", pagamento->pagamento);
+ r += totais_add(dec, "PAGAMENTOSTIT", pagamento->pagamento);
+ r += totais_add(dec, "REEMBOLSOS", pagamento->reembolso);
+ r += totais_add(dec, "REEMBOLSOSTIT", pagamento->reembolso);
+ switch (pagamento->codigo) {
+ case 10:
+ case 21:
+ case 26:
+ r += totais_add(dec, "MEDICAS", pagamento->pagamento - pagamento->reembolso);
+ break;
+ case 36:
+ r += totais_add(dec, "PREVIDENCIA", pagamento->pagamento - pagamento->reembolso);
+ break;
+ }
+ return r;
+}
+
void pagamento_free(void *pointer)
{
struct pagamento *pagamento = pointer;
pagamento_free(pagamento);
return r;
}
- r = totais_add(dec, "PAGAMENTOS", pagamento->pagamento);
- r += totais_add(dec, "PAGAMENTOSTIT", pagamento->pagamento);
+ r = pagamento_totais_update(dec, pagamento);
if (r) {
pagamento_free(pagamento);
return r;
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 "";
return pagamento->cnpj;
}
+
+static int always(struct pagamento *pagamento)
+{
+ 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:
+ return 1;
+ default:
+ return 0;
+ }
+ return 0;
+}
+
+char * medico_cnpj_ordenado(struct declaracao *dec, int n)
+{
+ 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);
+}