X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/a149135d6cf1d32b45f3c92c8562170e5771faf9..6dbdcda18bbe3ad978b4d531eaf83d350dc7ad7c:/emufs_gui/articulos.c diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index 8480a3f..8719bb5 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -8,22 +8,23 @@ t_Articulo *art_form_buscar(WINDOW *win); t_LstArticulos *art_cargar(const char *filename) { xmlDocPtr document; - xmlNode *node; + xmlNode *node, *inicio; int cant; - t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos)); - if (tmp == NULL) return NULL; + lst_articulos = NULL; + document = xmlReadFile(filename, "ISO-8859-1",0); if (document == NULL) { - free(tmp); return NULL; } + inicio = NULL; node = xmlDocGetRootElement(document); + /* Busco el TAG principal "ARTICULOS" */ while (node) { if (node->type == XML_ELEMENT_NODE) { if (strcmp(node->name, "ARTICULOS") == 0) { - node = node->children; + inicio = node->children; break; } } @@ -39,43 +40,47 @@ t_LstArticulos *art_cargar(const char *filename) } } } + t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos)); + printf("%p\n", tmp); + if (tmp == NULL) return NULL; tmp->cant = cant; - tmp->array = (t_Articulo *)malloc(sizeof(t_Articulo)*cant); +/* tmp->array = (t_Reg_Articulo *)malloc(sizeof(t_Reg_Articulo)*tmp->cant);*/ + printf("%p\n", tmp->array); if (tmp->array == NULL) { + printf("Fallo malloc\n"); xmlFreeDoc(document); xmlCleanupParser(); free(tmp); return NULL; } - node = xmlDocGetRootElement(document); - while (node) { - if (node->type == XML_ELEMENT_NODE) { - if (strcmp(node->name, "ARTICULOS") == 0) { - node = node->children; - break; - } - } - node = node->next; - } - - /* leo los datos */ + /* leo los datos y los guardo en el archivo*/ cant = 0; - for ( ; node ; node = node->next) { + /* FIXME : por ahora hago que entren 2 bloques y me sobre algo de espacio*/ + tmp->fp = emufs_crear("articulos", T3, sizeof(t_Articulo)*2, sizeof(t_Articulo)); + for (node=inicio ; node ; node = node->next) { if (node->type == XML_ELEMENT_NODE) { if (strcmp(node->name, "ARTICULO") == 0) { - strncpy(tmp->array[cant].numero, xmlGetProp(node, "NroArtículo"), 8); - strncpy(tmp->array[cant].desc, xmlGetProp(node, "Descripción"), 50); - strncpy(tmp->array[cant].presentacion, xmlGetProp(node, "Presentación"), 30); - strncpy(tmp->array[cant].existencia, xmlGetProp(node, "Existencia"), 8); -// / strncpy(tmp->array[cant].ubicacion, xmlGetProp(node, "Ubicacion"), 30); - strncpy(tmp->array[cant].pvu, xmlGetProp(node, "PVU"), 8); - strncpy(tmp->array[cant].emin, xmlGetProp(node, "Emín"), 8); + t_Articulo art; + art.numero = atoi(xmlGetProp(node, "NroArtículo")); + strncpy(art.desc, xmlGetProp(node, "Descripción"), 50); + strncpy(art.presentacion, xmlGetProp(node, "Presentación"), 30); + strncpy(art.existencia, xmlGetProp(node, "Existencia"), 8); + /*strncpy(tmp->array[cant].ubicacion, xmlGetProp(node, "Ubicacion"), 30);*/ + strncpy(art.pvu, xmlGetProp(node, "PVU"), 8); + strncpy(art.emin, xmlGetProp(node, "Emín"), 8); + + /* Ya leido el articulo ahora paso a guardarlo en el archivo y agregarlo a la lista */ + tmp->array[cant].num_reg = tmp->fp->grabar_registro(tmp->fp, &art, sizeof(t_Articulo)); + tmp->array[cant].numero = art.numero; + printf("ID(%d) -> (%d,%d)\n", cant, art.numero, tmp->array[cant].num_reg); ++cant; } } } + tmp->cant = cant; + printf("%d\n", cant); xmlFreeDoc(document); xmlCleanupParser(); @@ -88,6 +93,8 @@ int art_liberar(t_LstArticulos *l) if (l == NULL) l = lst_articulos; if (l == NULL) return 1; + ver_archivo_FS(l->fp); + emufs_destruir(l->fp); free(l->array); free(l); @@ -97,15 +104,20 @@ int art_liberar(t_LstArticulos *l) t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero) { - int i, j; + /* FIXME : NO ME GUSTA :-/ */ + t_Articulo *art; + int i; int n = atoi(numero); if (lst == NULL) lst = lst_articulos; for(i=0; icant; i++) { - j = atoi(lst->array[i].numero); - if (n == j) - return &lst->array[i]; + if (n == lst->array[i].numero) { + art = (t_Articulo *)malloc(sizeof(t_Articulo)); + /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */ + lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, art, sizeof(t_Articulo)); + return art; + } } return NULL; @@ -130,6 +142,7 @@ void art_modificar(char *s) WINDOW *win; t_Form *form; t_Articulo *articulo; + char num[8]; win = newwin(8, 68, 13, 1); box(win, 0, 0); @@ -139,7 +152,8 @@ void art_modificar(char *s) if (articulo != NULL) { form = form_crear(win); - form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero); + sprintf(num, "%07d", articulo->numero); + form_agregar_widget(form, INPUT, "Numero de Artículo", 8, num); form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc); form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion); form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia); @@ -150,6 +164,7 @@ void art_modificar(char *s) /* TODO : Actualizar registro */ form_destruir(form); + free(articulo); } werase(win);