X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/fe7cadabd775ddd59714749b7dfe31a578c6ecca..88d4c0489c5040d8c1832549f0059c3612cbf42b:/emufs_gui/articulos.c diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index a6011b1..2d49c02 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -612,24 +612,25 @@ void art_reformatear(int tipo, int tam_bloque, int tam_reg) int art_exportar_xml(const char *filename) { - t_Reg_Articulo *nodo; t_Articulo *art; EMUFS_REG_ID id; FILE *fp; + CLAVE k; + INDICE *idx; - if (lst_articulos->primero == NULL) return 0; + idx = lst_articulos->fp->indices; - nodo = lst_articulos->primero; + k = idx->obtener_menor_clave(idx); if (!(fp = fopen(filename, "wt"))) return 0; fprintf(fp, "\n\n"); fprintf(fp, "\n"); - while (nodo) { - art = art_obtener(lst_articulos, nodo->numero, &id); + while (k.i_clave != -1) { + art = art_obtener(lst_articulos, k.i_clave, &id); if (art != NULL) { fprintf(fp, "\tnumero); + fprintf(fp, "NroArtículo=\"%d\" ", art->numero); fprintf(fp, "Descripción=\"%s\" ", art->desc); fprintf(fp, "Presentación=\"%s\" ", art->presentacion); fprintf(fp, "Ubicación=\"%s\" ", art->ubicacion); @@ -638,7 +639,7 @@ int art_exportar_xml(const char *filename) fprintf(fp, "Emín=\"%s\" />\n", art->emin); free(art); } - nodo = nodo->sig; + k = idx->obtener_sig_clave(idx, k); } fprintf(fp, "\n"); @@ -1002,3 +1003,120 @@ void art_consultas(char *s) delwin(win); } + +void imprimir(WINDOW *win, int y, int x, char *s, char *b) +{ + wmove(win, y, x); + waddstr(win, s); + waddstr(win, b); +} + +void mostrar_art(WINDOW *win, CLAVE k, char *s) +{ + t_Articulo *art; + EMUFS_REG_ID dummy; + int y = 3; + char numero[10]; + /* XXX SOLO PARA CODIGO XXX */ + + wattron(win, COLOR_PAIR(COLOR_RED)); + mvwaddstr(win, 1, 5, "Recorriendo Articulos por indice "); + waddstr(win, s); + wattroff(win, COLOR_PAIR(COLOR_RED)); + + wattron(win, A_BOLD); + mvwaddstr(win, 18, 5, "Teclas:"); + wattroff(win, A_BOLD); + mvwaddstr(win, 19, 5, " L = Siguiente"); + mvwaddstr(win, 20, 5, " K = Anterior"); + art = art_obtener(lst_articulos, k.i_clave, &dummy); + if (art != NULL) { + sprintf(numero, "%08d", art->numero); + + imprimir(win, y++, 5, "Numero : ", numero); + imprimir(win, y++, 5, "Descripcion : ", art->desc); + imprimir(win, y++, 5, "Presentacion: ", art->presentacion); + imprimir(win, y++, 5, "Existencia : ", art->existencia); + imprimir(win, y++, 5, "Ubicacion : ", art->ubicacion); + imprimir(win, y++, 5, "P. Unitario : ", art->pvu); + imprimir(win, y++, 5, "Stock Minimo: ", art->emin); + + free(art); + } else { + PERR("NO EXISTE EL ARTICULO"); + } + +} + +void art_recorrer_con_indice(char *s) +{ + WINDOW *win, *win1; + INDICE *idx; + CLAVE stack[1000]; /* shhhh */ + CLAVE k; + int stack_pos=0, c; + + PERR("Busco indice"); + idx = emufs_buscar_indice_por_nombre(lst_articulos->fp, s); + + win = newwin(LINES-4, COLS-2, 2, 1); + win1 = derwin(win, LINES-6, COLS-4, 1, 1); + werase(win); + box(win, 0, 0); + wrefresh(win); + + PERR("Obtengo clave menor"); + k = idx->obtener_menor_clave(idx); + + PERR("Muestro el primer elemento"); + + + mostrar_art(win1, k, s); + wrefresh(win1); + PERR("Sigue el usuario"); + curs_set(0); + while ((c=wgetch(win)) != 13) { + switch (c) { + case 'L': + case 'l': + stack[stack_pos++] = k; /* Guardo la clave para poder volver */ + k = idx->obtener_sig_clave(idx, k); + /* TODO Verificar que no me pase del fin */ + break; + case 'K': + case 'k': + /* recupero la anterior */ + stack_pos--; + if (stack_pos < 0) stack_pos = 0; + k = stack[stack_pos]; + break; + default: + continue; + } + werase(win1); + mostrar_art(win1, k, s); + wrefresh(win1); + } + curs_set(1); + + werase(win1); + werase(win); + wrefresh(win); + delwin(win); +} + +void art_recorrer() +{ + char *ind[3] = {"codigo", "desc", "presentacion"}; + MENU(mi_menu) { + MENU_OPCION("Codigos", "Recorrer por Indice Codigo"), + MENU_OPCION("Descripcion", "Recorrer por Indice Descripcionn"), + MENU_OPCION("Presentacion", "Recorrer por Indice Presentacion"), + MENU_OPCION("Volver", "Volver al menu anterior.") + }; + int opt; + while ((opt = menu_ejecutar(mi_menu, 4, "Consulta de Articulos")) != 3) { + art_recorrer_con_indice(ind[opt]); + } +} +