]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Mas hacks al codigo :-) ... Agrego un miembro INDICE externo a EMUFS
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 07:09:12 +0000 (07:09 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 07:09:12 +0000 (07:09 +0000)
 para poder indexar las facturas por NroArticulo para cumplir
 con el enunciado.

 * Me aseguro que para borrar una articulo no exista factura
 que lo referencia

emufs/emufs.h
emufs_gui/articulos.c
emufs_gui/facturas.c
emufs_gui/facturas.h

index 0b8255ace04b3d202ab4a034286b29c1a9f8d253..7c4e6933dbc9ee1b464fb8c13dfea231724dd545 100644 (file)
@@ -125,7 +125,12 @@ struct _emu_fs_t {
        void (*compactar)(struct _emu_fs_t *); /**< Método para compactar el archivo reorganizándolo físicamente */
        char *nombre; /**< Nombre del archivo */
 
+       /* Lista de Indices */
        INDICE *indices;
+       /* Indice externo para utilizar con Facturas
+        * e indexar por NroArticulo
+        */
+       INDICE *externo;
 };
 
 /** Crea un archivo auxiliar. */
index 84357dce5a3dfcddce1e8fd20ab1136b577b35ea..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);
        }
 
index 48ff1c9e0c399c1d27b4a847e1226593a4f65e17..de177691e1a7b691878e486d9b670ee58117f12c 100644 (file)
@@ -238,6 +238,10 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                emufs_agregar_indice(tmp->fp, "vto", IND_SELECCION, param->ind_fac[2].tipo_arbol, IDX_STRING, STRUCT_OFFSET(factura, emision), param->ind_fac[2].tam_bloque, 1);
                emufs_agregar_indice(tmp->fp, "emision", IND_EXAHUSTIVO, param->ind_fac[1].tipo_arbol, IDX_STRING, STRUCT_OFFSET(factura, emision), param->ind_fac[1].tam_bloque, 0);
                emufs_agregar_indice(tmp->fp, "numero", IND_PRIMARIO, param->ind_fac[0].tipo_arbol, IDX_INT, 0, param->ind_fac[0].tam_bloque, 0);
+
+               /* Creo el indice externo por Nro Articulo */
+               tmp->fp->externo = emufs_indice_crear(tmp->fp, "articulo", IND_SELECCION, IND_B, IDX_INT, 0, 512, 0);
+
                tmp->fp_texto = emufs_crear("notas", param->tipo_arch_nota, param->tam_bloque_nota, 100);
                for (node=inicio ; node ; node = node->next) {
                        if (node->type == XML_ELEMENT_NODE) {
@@ -273,8 +277,21 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                                        fact.reg_nota = id;
                                        save = procesar_guardar_factura(&fact, lst_facturas, &size);
                                        if (save != NULL) {
+                                               int i;
                                                error = 0;
-                                               tmp->fp->grabar_registro(tmp->fp, save, size, &error);
+                                               id = tmp->fp->grabar_registro(tmp->fp, save, size, &error);
+                                       
+                                               /* Agrego los Items al indice externo */
+                                               for(i=0; i<fact.cant_items; i++) {
+                                                       if (fact.items[i].numero != 0) {
+                                                               CLAVE _k; /* HACK Para hacer mas rapido */
+                                                               INDICE_DATO _dato;
+                                                               _k.i_clave = fact.items[i].numero;
+                                                               _dato.id = id;
+                                                               tmp->fp->externo->agregar_entrada(tmp->fp->externo, _k, _dato);
+                                                       }
+                                               }
+                                               
                                                if (fact.items) {
                                                        free(fact.items);
                                                        fact.items = NULL;
@@ -1478,3 +1495,20 @@ void fact_recorrer()
        }
 }
 
+int fact_hay_con_item(int numero)
+{
+       INDICE *idx;
+       CLAVE k;
+       INDICE_DATO dato;
+       /* Busco si existe alguna factura que contenga al articulo "numero" */
+       idx = lst_facturas->fp->externo;
+
+       k.i_clave = numero;
+       dato = idx->existe_entrada(idx, k);
+
+       if (dato.id == -1)
+               return 0; /* No existe factura que contenga este articulo!! */
+
+       return 1; /* Hay alguna factura que contiene el articulo */
+}
+
index 777fb561ffcba6dad4b2c2ef9ba405c2ca873c00..db3561fc565c670618bac473917c24fbc268d72b 100644 (file)
@@ -80,4 +80,6 @@ int fact_exportar_xml(const char *filename);
 
 void fact_recorrer();
 
+int fact_hay_con_item(int numero);
+
 #endif