]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/articulos.c
Se separa el algoritmo de ordenamiento del ejemplo, se borran cosas obsoletas.
[z.facultad/75.06/emufs.git] / emufs_gui / articulos.c
index 2d49c02a9c84051f2ee015336dcc3a1101d5dd14..c042bfbe7c8843630b739441456c2e3eef59afa5 100644 (file)
@@ -5,6 +5,7 @@
 #include "common.h"
 #include "lista.h"
 #include "menu.h"
+#include "facturas.h"
 
 static t_LstArticulos *lst_articulos;
 
@@ -360,10 +361,20 @@ void art_eliminar(char *s)
                getch();
        } else {
                INDICE_DATO dummy;
-               k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&(articulo->numero));
-               PERR("Borrando ARTICULO")
-               lst_articulos->fp->borrar_registro(lst_articulos->fp, k, dummy);
-               PERR("LISTO BORRADO");
+
+               /* Antes de borrar veo si existe alguna factura que contenga este articulo */
+               if (fact_hay_con_item(articulo->numero) == 0) {
+                       k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&(articulo->numero));
+                       PERR("Borrando ARTICULO")
+                       lst_articulos->fp->borrar_registro(lst_articulos->fp, k, dummy);
+                       PERR("LISTO BORRADO");
+               } else {
+                       wattron(win, COLOR_PAIR(COLOR_YELLOW));
+                       mvwaddstr(win, 6, 4, "No se pudo eliminar Articulo porque hay una factura que lo referencia.");
+                       wattroff(win, COLOR_PAIR(COLOR_YELLOW));
+                       wrefresh(win);
+                       getch();
+               }
                free(articulo);
        }
 
@@ -1011,7 +1022,7 @@ void imprimir(WINDOW *win, int y, int x, char *s, char *b)
        waddstr(win, b);
 }
 
-void mostrar_art(WINDOW *win, CLAVE k, char *s)
+void mostrar_art(WINDOW *win, CLAVE k, char *s, INDICE *idx)
 {
        t_Articulo *art;
        EMUFS_REG_ID dummy;
@@ -1029,7 +1040,43 @@ void mostrar_art(WINDOW *win, CLAVE k, char *s)
        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 (strcmp(s, "codigo") == 0) {
+               art = art_obtener(lst_articulos, k.i_clave, &dummy);
+       } else {
+               INDICE_DATO *datos;
+               EMUFS_REG_SIZE size;
+               int cant, error;
+               char *tmp;
+
+               art = (t_Articulo *)malloc(sizeof(t_Articulo));
+               /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */
+               PERR("Busco todos los datos que tengan esta clave");
+               datos = idx->buscar_entradas(idx, k, &cant);
+               if (datos == NULL) {
+                       free(art);
+                       art = NULL;
+               } else {
+                       fprintf(stderr, "Tengo %d datos\n", cant);
+                       error = 1;
+                       k.i_clave = datos[0].id;
+                       PERR("Leo el primer dato");
+                       tmp = lst_articulos->fp->leer_registro(lst_articulos->fp, k, &size, &error);
+                       if (tmp == NULL) {
+                               free(art);
+                               art = NULL;
+                       } else {
+                               if (procesar_leer_articulo(art, tmp, size, lst_articulos) != 1) {
+                                       free(art);
+                                       free(tmp);
+                                       art = NULL;
+                               }
+                       }
+                       free(datos);
+               }
+       }
+
+       
        if (art != NULL) {
                sprintf(numero, "%08d", art->numero);
 
@@ -1071,10 +1118,11 @@ void art_recorrer_con_indice(char *s)
        PERR("Muestro el primer elemento");
 
 
-       mostrar_art(win1, k, s);
+       mostrar_art(win1, k, s, idx);
        wrefresh(win1);
        PERR("Sigue el usuario");
        curs_set(0);
+       stack[0] = k;
        while ((c=wgetch(win)) != 13) {
                switch (c) {
                        case 'L':
@@ -1094,7 +1142,7 @@ void art_recorrer_con_indice(char *s)
                                continue;
                }
                werase(win1);
-               mostrar_art(win1, k, s);
+               mostrar_art(win1, k, s, idx);
                wrefresh(win1);
        }
        curs_set(1);
@@ -1115,7 +1163,7 @@ void art_recorrer()
                MENU_OPCION("Volver", "Volver al menu anterior.")
        };
        int opt;
-       while ((opt = menu_ejecutar(mi_menu, 4, "Consulta de Articulos")) != 3) {
+       while ((opt = menu_ejecutar(mi_menu, 4, "Recorrer Articulos")) != 3) {
                art_recorrer_con_indice(ind[opt]);
        }
 }