X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/d381699312637624c1fa51dfdf0f2184636e498c..43e1e27b378dcf40321063e8c200894d4f47bb7c:/emufs_gui/articulos.c diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index fd1d1fd..4c69770 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -675,24 +675,19 @@ void art_consultas_old(char *s) delwin(win); } -void art_consultas_codigos(char *s) +void art_consultas_codigos(char *s, t_Lista *lista) { EMUFS_REG_ID dummy; int desde_codigo, hasta_codigo; - int i; + CLAVE k, menor, mayor; t_Articulo *articulo; - t_Lista *lista; t_Form *form; - WINDOW *win, *win1; + INDICE *idx; + + idx = lst_articulos->fp->indices; - 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); - /* El usuario ingresa rango a listar */ - form = form_crear(win1); + form = form_crear(lista->win); form_agregar_widget(form, INPUT, "Desde Codigo", 8, "0"); form_agregar_widget(form, INPUT, "Hasta Codigo", 8, "99999999"); @@ -702,22 +697,22 @@ void art_consultas_codigos(char *s) hasta_codigo = form_obtener_valor_int(form, "Hasta Codigo"); form_destruir(form); - werase(win1); - wrefresh(win1); - - /* Creo la lista donde mostrar la consulta*/ - /* Muestro solo info relevante */ - lista = lista_crear(4, win1, COLS-4, LINES-6); - - /* Creo las columnas */ - lista_agregar_columna(lista, "Numero", DATO_INT, 0, 8); /* numero */ - lista_agregar_columna(lista, "Descripcion", DATO_STR, 10, 51); /* desc */ - lista_agregar_columna(lista, "Existencia", DATO_STR, 55, 9); /* existencia */ - lista_agregar_columna(lista, "Stock Minimo", DATO_STR, 65, 9); /* enim */ + werase(lista->win); + wrefresh(lista->win); /* Leo los datos desde el archivo */ - for(i=desde_codigo; i<=hasta_codigo; i++) { - articulo = art_obtener(lst_articulos, i, &dummy); + k = emufs_indice_generar_clave_desde_valor(idx, (char *)&desde_codigo); + + menor = idx->obtener_menor_clave(idx); + mayor = idx->obtener_mayor_clave(idx); + + if (k.i_clave < menor.i_clave) + k = menor; + if (k.i_clave > mayor.i_clave) + hasta_codigo = mayor.i_clave; + fprintf(stderr, "k.i_clave = %d -- hasta_codigo = %d\n", k.i_clave, hasta_codigo); + while ((k.i_clave != -1) && (k.i_clave <= hasta_codigo)) { + articulo = art_obtener(lst_articulos, k.i_clave, &dummy); if (articulo != NULL) { lista_agregar_fila(lista, articulo->numero, @@ -725,46 +720,85 @@ void art_consultas_codigos(char *s) articulo->existencia, articulo->emin ); + free(articulo); } + k = idx->obtener_sig_clave(idx, k); + fprintf(stderr, "k.i_clave = %d -- hasta_codigo = %d\n", k.i_clave, hasta_codigo); } curs_set(0); lista_ejecutar(lista); curs_set(1); - - wrefresh(win1); - wrefresh(win); - werase(win1); - werase(win); - wrefresh(win); - delwin(win); } -void art_consultas_varias(char *nombre_indice, char *titulo) +void art_consultas_stock(char *s, t_Lista *lista) +{ + EMUFS_REG_ID dummy; + int hasta_codigo; + CLAVE k, menor, mayor; + t_Articulo *articulo; + t_Form *form; + INDICE *idx; + float por; + + idx = lst_articulos->fp->indices; + + /* El usuario ingresa rango a listar */ + form = form_crear(lista->win); + form_agregar_widget(form, INPUT, "Ingrese %", 8, "0"); + + form_ejecutar(form, 2, 2); + + por = form_obtener_valor_float(form, "Ingrese %"); + + form_destruir(form); + werase(lista->win); + wrefresh(lista->win); + + menor = idx->obtener_menor_clave(idx); + mayor = idx->obtener_mayor_clave(idx); + + k = menor; + hasta_codigo = mayor.i_clave; + while ((k.i_clave != -1) && (k.i_clave <= hasta_codigo)) { + articulo = art_obtener(lst_articulos, k.i_clave, &dummy); + if (articulo != NULL) { + if (atof(articulo->existencia) <= (1.0f+por)*atof(articulo->emin)) { + lista_agregar_fila(lista, + articulo->numero, + articulo->desc, + articulo->existencia, + articulo->emin + ); + } + free(articulo); + } + k = idx->obtener_sig_clave(idx, k); + } + + curs_set(0); + lista_ejecutar(lista); + curs_set(1); +} + +void art_consultas_varias(char *nombre_indice, char *titulo, t_Lista *lista) { int i, cant, error; char *desc, *tmp; t_Articulo articulo; - t_Lista *lista; t_Form *form; INDICE_DATO *datos; - WINDOW *win, *win1; CLAVE k; EMUFS *fs; EMUFS_REG_SIZE size; fs = lst_articulos->fp; - 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); - /* El usuario ingresa rango a listar */ - form = form_crear(win1); + form = form_crear(lista->win); form_agregar_widget(form, INPUT, titulo, 50, ""); + werase(lista->win); form_ejecutar(form, 2, 2); tmp = form_obtener_valor_char(form, titulo); @@ -772,18 +806,8 @@ void art_consultas_varias(char *nombre_indice, char *titulo) strcpy(desc, tmp); form_destruir(form); - werase(win1); - wrefresh(win1); - - /* Creo la lista donde mostrar la consulta*/ - /* Muestro solo info relevante */ - lista = lista_crear(4, win1, COLS-4, LINES-6); - - /* Creo las columnas */ - lista_agregar_columna(lista, "Numero", DATO_INT, 0, 8); /* numero */ - lista_agregar_columna(lista, "Descripcion", DATO_STR, 10, 51); /* desc */ - lista_agregar_columna(lista, "Existencia", DATO_STR, 55, 9); /* existencia */ - lista_agregar_columna(lista, "Stock Minimo", DATO_STR, 65, 9); /* enim */ + werase(lista->win); + wrefresh(lista->win); /* Leo los datos desde el archivo */ datos = emufs_buscar_registros(fs, nombre_indice, desc, &cant); @@ -809,35 +833,61 @@ void art_consultas_varias(char *nombre_indice, char *titulo) lista_ejecutar(lista); curs_set(1); - wrefresh(win1); - wrefresh(win); - werase(win1); - werase(win); - wrefresh(win); - delwin(win); } void art_consultas(char *s) { + t_Lista *lista; + WINDOW *win1, *win; MENU(mi_menu) { MENU_OPCION("por Codigos", "Consulta de Articulos por rango de codigo."), MENU_OPCION("por Descripcion", "Consulta por descripcion"), MENU_OPCION("por Presentacion", "Consulta por Presentacion"), + MENU_OPCION("por Sock Faltante", "Consulta de articulos por stock"), MENU_OPCION("Volver", "Volver al menu anterior.") }; int opt; - while ((opt = menu_ejecutar(mi_menu, 4, "Consulta de Articulos")) != 3) { + 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); + + /* Creo la lista donde mostrar la consulta*/ + /* Muestro solo info relevante */ + lista = lista_crear(4, win1, COLS-4, LINES-6); + + /* Creo las columnas */ + lista_agregar_columna(lista, "Numero", DATO_INT, 0, 8); /* numero */ + lista_agregar_columna(lista, "Descripcion", DATO_STR, 10, 51); /* desc */ + lista_agregar_columna(lista, "Existencia", DATO_STR, 55, 9); /* existencia */ + lista_agregar_columna(lista, "S. Minimo", DATO_STR, 66, 9); /* enim */ + + while ((opt = menu_ejecutar(mi_menu, 5, "Consulta de Articulos")) != 4) { switch (opt) { case 0: - art_consultas_codigos(s); + art_consultas_codigos(s, lista); break; case 1: - art_consultas_varias("desc", "Descripcion"); + art_consultas_varias("desc", "Descripcion", lista); break; case 2: - art_consultas_varias("presentacion", "Presentacion"); + art_consultas_varias("presentacion", "Presentacion", lista); + break; + case 3: + art_consultas_stock(s, lista); } + lista_clear(lista); + werase(win1); + werase(win); + wrefresh(win1); + box(win, 0, 0); + wrefresh(win); } + werase(win1); + werase(win); + wrefresh(win); + delwin(win); }