]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/facturas.c
* BUGFIX en idx_get . No filtraba los ids no utilizados.
[z.facultad/75.06/emufs.git] / emufs_gui / facturas.c
index 3d44564550e198dd9b396b7df6b6e935ddb0637e..2b0a305965a9ed07f8e01babbca9b391e08596d3 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "facturas.h"
+#include "idx.h"
 
 static t_LstFacturas *lst_facturas;
 
@@ -20,7 +21,12 @@ t_LstFacturas *fact_get_lst()
 /* Hack! ... Si no existe propiedad retorna "" */
 char *xml_get_prop(xmlNode *node, char *nombre)
 {
-       if (xmlGetProp(node, nombre) == NULL) return "";
+       char *s;
+       if (xmlGetProp(node, nombre) == NULL) {
+               s = malloc(1);
+               s[0] = '\0';
+               return s;
+       }
        return xmlGetProp(node, nombre);
 }
 
@@ -75,6 +81,7 @@ t_Item *leer_items(xmlNode *node, int *cant, int size)
 {
        t_Item *tmp;
        int count;
+       char *prop;
        if (size == -1) {
                *cant = 0;
                return NULL;
@@ -88,9 +95,11 @@ t_Item *leer_items(xmlNode *node, int *cant, int size)
                while (node) {
                        if (node->type == XML_ELEMENT_NODE) {
                                if (strcmp(node->name, "ITEMVENTA") == 0) {
-                                       tmp[count].numero = atoi(xml_get_prop(node, "NroArtículo"));
-                                       strcpy(tmp[count].cv, xml_get_prop(node, "CV"));
-                                       strcpy(tmp[count].pvu, xml_get_prop(node, "PVU"));
+                                       prop = xml_get_prop(node, "NroArtículo");
+                                       tmp[count].numero = atoi(prop);
+                                       xmlFree(prop);
+                                       strcpy(tmp[count].cv, prop = xml_get_prop(node, "CV")); xmlFree(prop);
+                                       strcpy(tmp[count].pvu, prop = xml_get_prop(node, "PVU")); xmlFree(prop);
                                        count++;
                                }
                        }
@@ -129,10 +138,11 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque)
 {
        xmlDocPtr document;
        xmlNode *node, *inicio;
-       int error = 0, cant_items;
+       int error = 0, cant_items, i;
+       char *prop;
        EMUFS_REG_SIZE size;
        t_LstFacturas *tmp;
-       EMUFS_REG_ID id; /*, *indices, indices_cant;*/
+       EMUFS_REG_ID id, *indices, indices_cant;
        
        lst_facturas = NULL;
 
@@ -142,8 +152,11 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque)
        tmp->primero = NULL;
 
        if (filename != NULL) {
+               PERR("Voy a cargar de un XML");
                document = xmlReadFile(filename, "ISO-8859-1",0);
                if (document == NULL) {
+                       free(tmp);
+                       lst_facturas = NULL;
                        return NULL;
                }
 
@@ -176,16 +189,19 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque)
                                if (strcmp(node->name, "FACTURA") == 0) {
                                        t_Factura fact;
                                        void *save;
-                                       memset(&fact, '*', sizeof(t_Factura));
-                                       fact.numero = atoi(xml_get_prop(node, "NroFac"));
-                                       fact.procdoi = atof(xml_get_prop(node, "PorcDoI"));
-                                       fact.numero_remito = atoi(xml_get_prop(node, "NroRemito"));
-                                       strcpy(fact.emision, xml_get_prop(node, "FechaEmisión"));
-                                       strcpy(fact.vencimiento, xml_get_prop(node, "FechaVto"));
-                                       strcpy(fact.estado, xml_get_prop(node, "Estado"));
-                                       strcpy(fact.fp, xml_get_prop(node, "FP"));
-                                       strcpy(fact.ctacte, xml_get_prop(node, "NroCtaCte"));
-                                       strcpy(fact.cheque, xml_get_prop(node, "NroCheque"));
+                                       memset(&fact, 0, sizeof(t_Factura));
+                                       prop = xml_get_prop(node, "NroFac");
+                                       fact.numero = atoi(prop); xmlFree(prop);
+                                       prop = xml_get_prop(node, "PorcDoI");
+                                       fact.procdoi = atof(prop); xmlFree(prop);
+                                       prop = xml_get_prop(node, "NroRemito");
+                                       fact.numero_remito = atoi(prop); xmlFree(prop);
+                                       strcpy(fact.emision, prop = xml_get_prop(node, "FechaEmisión")); xmlFree(prop);
+                                       strcpy(fact.vencimiento, prop = xml_get_prop(node, "FechaVto")); xmlFree(prop);
+                                       strcpy(fact.estado, prop = xml_get_prop(node, "Estado")); xmlFree(prop);
+                                       strcpy(fact.fp, prop = xml_get_prop(node, "FP")); xmlFree(prop);
+                                       strcpy(fact.ctacte, prop = xml_get_prop(node, "NroCtaCte")); xmlFree(prop);
+                                       strcpy(fact.cheque, prop = xml_get_prop(node, "NroCheque")); xmlFree(prop);
 
                                        fact.nota = leer_nota(node);
                                        fact.items = leer_items(node, &fact.cant_items, (tipo==3)?10:-1);
@@ -208,20 +224,36 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque)
                xmlFreeDoc(document);
                xmlCleanupParser();
        } else {
-/*             tmp->fp = emufs_abrir("articulos");*/
+               PERR("Voy a recuperar desde un archivo");
+               tmp->fp = emufs_abrir("facturas");
+               if (tmp->fp == NULL) {
+                       PERR("No se pudo cargar archivo de facturas!");
+                       free(tmp);
+                       lst_facturas = NULL;
+                       return NULL;
+               }
+               tmp->fp_texto = emufs_abrir("notas");
+               if (tmp->fp_texto == NULL) {
+                       PERR("No se pudo cargar archivo de notas!");
+                       emufs_destruir(tmp->fp);
+                       free(tmp);
+                       lst_facturas = NULL;
+                       return NULL;
+               }
+
                /* Ahora trato de recuperar la info */
-/*             indices = emufs_idx_get(tmp->fp, &indices_cant);
+               indices = emufs_idx_get(tmp->fp, &indices_cant);
                for(i=0; i<indices_cant; i++) {
-                       t_Articulo art;
-                       void *save;*/
+                       t_Factura art;
+                       void *save;
                        /* Leo el registro */
-/*                     save = tmp->fp->leer_registro(tmp->fp, indices[i], &size, &error);
-                       if (procesar_leer_articulo(&art, save, size, tmp) == 1) {
-                               agregar_nodo_articulo(tmp, crear_nodo_articulo(indices[i], art.numero));
+                       save = tmp->fp->leer_registro(tmp->fp, indices[i], &size, &error);
+                       if (procesar_leer_factura(&art, save, size, tmp) == 1) {
+                               agregar_nodo_factura(tmp, crear_nodo_factura(indices[i], art.reg_nota, art.numero));
                                free(save);
                        }
                }
-               free(indices);*/
+               free(indices);
        }
        return lst_facturas;
 }