Nova função para ordenação de pagamentos médicos.
authorThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Sat, 12 Mar 2016 20:22:58 +0000 (17:22 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Sat, 12 Mar 2016 20:48:27 +0000 (17:48 -0300)
Como pagamentos médicos podem utilizar mais de um código de pagamento,
uma nova função foi necessária.

lib/gera.c
lib/pagamento.c
lib/pagamento.h

index c3bfd89..eac97ea 100644 (file)
@@ -105,9 +105,9 @@ static void gera_header(struct declaracao *dec, FILE *f)
        fprintf(f, "%-11.11s", ""); /* CPF Dependente 6 */
        fprintf(f, "%-8.8s", ""); /* DN Dependente 6 */
        /* medico maior, TODO: outros códigos */
-       fprintf(f, "%-14.14s", pagamento_cnpj_ordenado(dec, 26, 0));
+       fprintf(f, "%-14.14s", medico_cnpj_ordenado(dec, 0));
        /* medico maior 2, TODO: outros códigos */
-       fprintf(f, "%-14.14s", pagamento_cnpj_ordenado(dec, 26, 1));
+       fprintf(f, "%-14.14s", medico_cnpj_ordenado(dec, 1));
        fprintf(f, "%-11.11s", ""); /* CPF pensao */
        fprintf(f, "%-11.11s", ""); /* CPF inventariante */
        fprintf(f, "%-40.40s", dec->contribuinte.municipio);
index 92ff7ba..051a7e6 100644 (file)
@@ -130,3 +130,30 @@ char * pagamento_cnpj_ordenado(struct declaracao *dec, int codigo, int n)
                return "";
        return pagamento->cnpj;
 }
+
+static int pagamento_medico(int codigo)
+{
+       switch (codigo) {
+       case 10:
+       case 21:
+       case 26:
+               return 1;
+       default:
+               return 0;
+       }
+       return 0;
+}
+
+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;
+}
index 235daca..a6d1f59 100644 (file)
@@ -36,5 +36,6 @@ void pagamento_free(void *pointer);
 int pagamento_cmd_init(void);
 
 char * pagamento_cnpj_ordenado(struct declaracao *dec, int codigo, int n);
+char * medico_cnpj_ordenado(struct declaracao *dec, int n);
 
 #endif