X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/02e27a9ec780fe569744b52463eabdd83c8cf68f..af17bf78b31b1cdb1ed6823344bb945add1700e2:/gui/articulos.c diff --git a/gui/articulos.c b/gui/articulos.c index c9b42d8..28c0cc1 100644 --- a/gui/articulos.c +++ b/gui/articulos.c @@ -1,6 +1,10 @@ #include "articulos.h" +t_LstArticulos *lst_articulos; + +t_Articulo *art_form_buscar(WINDOW *win); + t_LstArticulos *art_cargar(const char *filename) { xmlDocPtr document; @@ -9,13 +13,22 @@ t_LstArticulos *art_cargar(const char *filename) t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos)); if (tmp == NULL) return NULL; - document = xmlParseFile(filename); + document = xmlReadFile(filename, "ISO-8859-1",0); if (document == NULL) { 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; + } /* Cuento la cantidad de articulos en el archivo */ cant = 0; @@ -29,20 +42,36 @@ t_LstArticulos *art_cargar(const char *filename) tmp->cant = cant; tmp->array = (t_Articulo *)malloc(sizeof(t_Articulo)*cant); + if (tmp->array == NULL) { + 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 */ cant = 0; for ( ; 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].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, "Ubicación"), 30); +// / 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); + strncpy(tmp->array[cant].emin, xmlGetProp(node, "Emín"), 8); ++cant; } } @@ -50,21 +79,134 @@ t_LstArticulos *art_cargar(const char *filename) xmlFreeDoc(document); xmlCleanupParser(); + lst_articulos = tmp; return tmp; } int art_liberar(t_LstArticulos *l) { + if (l == NULL) l = lst_articulos; if (l == NULL) return 1; free(l->array); free(l); + lst_articulos = NULL; return 0; } t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero) { + int i, j; + 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]; + } + return NULL; } +t_Articulo *art_form_buscar(WINDOW *win) +{ + t_Form *form; + t_Articulo *articulo; + + form = form_crear(win); + form_agregar_widget(form, INPUT, "Numero de Artículo", 8, ""); + form_ejecutar(form, 1,1); + articulo = art_obtener(NULL, form_obtener_valor(form, "Numero de Artículo")); + form_destruir(form); + + return articulo; +} + +void art_modificar(char *s) +{ + WINDOW *win; + t_Form *form; + t_Articulo *articulo; + + win = newwin(8, 68, 13, 1); + box(win, 0, 0); + wrefresh(win); + + articulo = art_form_buscar(win); + + if (articulo != NULL) { + form = form_crear(win); + form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero); + 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); + form_agregar_widget(form, INPUT, "PVU", 8, articulo->pvu); + form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin); + form_ejecutar(form, 1,1); + + /* TODO : Actualizar registro */ + + form_destruir(form); + } + + werase(win); + wrefresh(win); + delwin(win); +} + +void art_eliminar(char *s) +{ + WINDOW *win; + t_Articulo *articulo; + + win = newwin(8, 68, 13, 1); + box(win, 0, 0); + wrefresh(win); + + articulo = art_form_buscar(win); + + if (articulo == NULL) { + wattron(win, COLOR_PAIR(COLOR_YELLOW)); + mvwaddstr(win, 6, 4, "No existe artículo con ese código. Abortando!"); + wattroff(win, COLOR_PAIR(COLOR_YELLOW)); + wrefresh(win); + getch(); + } else { + /* TODO : Eliminar un registro */ + } + + werase(win); + wrefresh(win); + delwin(win); +} + +void art_agregar(char *s) +{ + WINDOW *win; + t_Form *form; + + win = newwin(8, 68, 13, 1); + box(win, 0, 0); + wrefresh(win); + + form = form_crear(win); + form_agregar_widget(form, INPUT, "Numero de Artículo", 8, ""); + form_agregar_widget(form, INPUT, "Descripción", 50, ""); + form_agregar_widget(form, INPUT, "Presentación", 30, ""); + form_agregar_widget(form, INPUT, "Stock Actual", 8, ""); + form_agregar_widget(form, INPUT, "PVU", 8, ""); + form_agregar_widget(form, INPUT, "Stock Mínimo", 8, ""); + form_ejecutar(form, 1,1); + + /* TODO : Agregar el nuevo elemento */ + + form_destruir(form); + + werase(win); + wrefresh(win); + delwin(win); +} +