]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/articulos.c
* Cargo los indices desde el XML
[z.facultad/75.06/emufs.git] / emufs_gui / articulos.c
index 2c038dcd20c9bf9f64655160a7647eb5e77cd4ce..a6011b1c262ec8829f995da0743c8622d0d9f3e1 100644 (file)
@@ -112,9 +112,9 @@ t_LstArticulos *art_cargar(t_Parametros *param)
                tmp->fp = emufs_crear("articulos", param->tipo_arch_art, param->tam_bloque_art, sizeof(t_Articulo));
                /* Agrego los indices */
                PERR("Voy a agregar un indice");
                tmp->fp = emufs_crear("articulos", param->tipo_arch_art, param->tam_bloque_art, sizeof(t_Articulo));
                /* Agrego los indices */
                PERR("Voy a agregar un indice");
-               emufs_agregar_indice(tmp->fp, "presentacion", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(un_articulo, presentacion), 20480);
-               emufs_agregar_indice(tmp->fp, "desc", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), 2048);
-               emufs_agregar_indice(tmp->fp, "codigo", IND_PRIMARIO, IND_B, IDX_INT, 0, 512);
+               emufs_agregar_indice(tmp->fp, "presentacion", IND_EXAHUSTIVO, param->ind_art[2].tipo_arbol, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), param->ind_art[2].tam_bloque, 1);
+               emufs_agregar_indice(tmp->fp, "desc", IND_EXAHUSTIVO, param->ind_art[1].tipo_arbol, IDX_STRING, STRUCT_OFFSET(un_articulo, desc), param->ind_art[1].tam_bloque, 0);
+               emufs_agregar_indice(tmp->fp, "codigo", IND_PRIMARIO, param->ind_art[0].tipo_arbol, IDX_INT, 0, param->ind_art[0].tam_bloque, 0);
                if (!tmp->fp) {
                        PERR("NO SE PUDO CREAR ARCHIVO ARTICULOS");
                        free(tmp);
                if (!tmp->fp) {
                        PERR("NO SE PUDO CREAR ARCHIVO ARTICULOS");
                        free(tmp);
@@ -315,9 +315,13 @@ void art_modificar(char *s)
                tmp = procesar_guardar_articulo(articulo, &size, lst_articulos);
                if (tmp) {
                        CLAVE k;
                tmp = procesar_guardar_articulo(articulo, &size, lst_articulos);
                if (tmp) {
                        CLAVE k;
+                       INDICE_DATO dummy1;
                        error = 0;
                        k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&articulo->numero);
                        error = 0;
                        k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&articulo->numero);
-                       lst_articulos->fp->modificar_registro(lst_articulos->fp, k, tmp, size, &error);
+                       /* dummy se pasa porque esto se hace por clave primaria, y el INDICE_DATO que se
+                        * pasa solo es requerido cuando son claves multiples
+                        */
+                       lst_articulos->fp->modificar_registro(lst_articulos->fp, k, tmp, size, &error, dummy1);
                        free(tmp);
                }
                
                        free(tmp);
                }
                
@@ -355,8 +359,11 @@ void art_eliminar(char *s)
                wrefresh(win);
                getch();
        } else {
                wrefresh(win);
                getch();
        } else {
+               INDICE_DATO dummy;
                k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&(articulo->numero));
                k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&(articulo->numero));
-               lst_articulos->fp->borrar_registro(lst_articulos->fp, k);
+               PERR("Borrando ARTICULO")
+               lst_articulos->fp->borrar_registro(lst_articulos->fp, k, dummy);
+               PERR("LISTO BORRADO");
                free(articulo);
        }
 
                free(articulo);
        }
 
@@ -439,6 +446,7 @@ int procesar_leer_articulo(t_Articulo *dst, void *src, EMUFS_REG_SIZE size, t_Ls
        char *fin, *ini;
        switch (lst->fp->tipo) {
                case T1:
        char *fin, *ini;
        switch (lst->fp->tipo) {
                case T1:
+               case T4:
                case T2:
                        ini = (char *)src;
                        /* Copio el primer campo, esto es facil :-) */
                case T2:
                        ini = (char *)src;
                        /* Copio el primer campo, esto es facil :-) */
@@ -476,6 +484,7 @@ int procesar_leer_articulo(t_Articulo *dst, void *src, EMUFS_REG_SIZE size, t_Ls
                        memcpy(dst->emin, ini, fin-ini);
 
                        break;
                        memcpy(dst->emin, ini, fin-ini);
 
                        break;
+               case T5:
                case T3:
                        memcpy(dst, src, sizeof(t_Articulo));
        }
                case T3:
                        memcpy(dst, src, sizeof(t_Articulo));
        }
@@ -491,6 +500,7 @@ void *procesar_guardar_articulo(t_Articulo *src, EMUFS_REG_SIZE *size, t_LstArti
        switch(lst->fp->tipo) {
                case T1:
                case T2:
        switch(lst->fp->tipo) {
                case T1:
                case T2:
+               case T4:
                        /* Calculo el tamaño que voy a necesitar */
                        i[0] = sizeof(unsigned int);
                        i[1] = sizeof(char)*(strlen(src->desc)+1);
                        /* Calculo el tamaño que voy a necesitar */
                        i[0] = sizeof(unsigned int);
                        i[1] = sizeof(char)*(strlen(src->desc)+1);
@@ -511,6 +521,7 @@ void *procesar_guardar_articulo(t_Articulo *src, EMUFS_REG_SIZE *size, t_LstArti
                        memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4], src->pvu, i[5]);
                        memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5], src->emin, i[6]);
                break;
                        memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4], src->pvu, i[5]);
                        memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5], src->emin, i[6]);
                break;
+               case T5:
                case T3:
                        /* Lleno el lugar no ocupado de los strings con *, para que el ver
                         * registro se vea bien 
                case T3:
                        /* Lleno el lugar no ocupado de los strings con *, para que el ver
                         * registro se vea bien 
@@ -712,8 +723,12 @@ void art_consultas_codigos(char *s, t_Lista *lista)
                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)) {
                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)) {
+               PERR("BUSCO ARTICULO");
                articulo = art_obtener(lst_articulos, k.i_clave, &dummy);
                articulo = art_obtener(lst_articulos, k.i_clave, &dummy);
+               PERR("LO TENGO");
                if (articulo != NULL) {
                if (articulo != NULL) {
+                       PERR("AGREGO A LA LISTA");
+                       fprintf(stderr, "%d - %s\n", articulo->numero, articulo->desc);
                        lista_agregar_fila(lista,
                                                                articulo->numero,
                                                                articulo->desc,
                        lista_agregar_fila(lista,
                                                                articulo->numero,
                                                                articulo->desc,
@@ -722,6 +737,7 @@ void art_consultas_codigos(char *s, t_Lista *lista)
                                                );
                        free(articulo);
                }
                                                );
                        free(articulo);
                }
+               PERR("OBTENGO SIGUIENTE CLAVE");
                k = idx->obtener_sig_clave(idx, k); 
                fprintf(stderr, "k.i_clave = %d  -- hasta_codigo = %d\n", k.i_clave, hasta_codigo);
        }
                k = idx->obtener_sig_clave(idx, k); 
                fprintf(stderr, "k.i_clave = %d  -- hasta_codigo = %d\n", k.i_clave, hasta_codigo);
        }
@@ -809,6 +825,8 @@ void art_consultas_cambiar_precio(char *s, t_Lista *lista)
        form_agregar_widget(form, INPUT, "Desc. Articulo (nulo==Todos)", 50, "");
        form_agregar_widget(form, INPUT, "Ingrese %", 8, "0");
 
        form_agregar_widget(form, INPUT, "Desc. Articulo (nulo==Todos)", 50, "");
        form_agregar_widget(form, INPUT, "Ingrese %", 8, "0");
 
+       werase(lista->win);
+       wrefresh(lista->win);
        form_ejecutar(form, 2, 2);
 
        por = form_obtener_valor_float(form, "Ingrese %");
        form_ejecutar(form, 2, 2);
 
        por = form_obtener_valor_float(form, "Ingrese %");
@@ -853,7 +871,14 @@ void art_consultas_cambiar_precio(char *s, t_Lista *lista)
                                sprintf(articulo.pvu, "%.2f", pvu);
                                tmp = procesar_guardar_articulo(&articulo, &size, lst_articulos);
                                error = 0;
                                sprintf(articulo.pvu, "%.2f", pvu);
                                tmp = procesar_guardar_articulo(&articulo, &size, lst_articulos);
                                error = 0;
-                               lst_articulos->fp->modificar_registro(lst_articulos->fp, k1, tmp, size, &error);
+                               /* README : Aca si tengo que pasar el INDICE_DATO correcto, para que la funcion
+                                * borrar sea capaz de eliminar solo el item que corresponde en las
+                                * claves con repeticion
+                                */
+                               PERR("=== MODIFICANDO ===");
+                               fprintf(stderr, "Desc=%s , PVU=%s, Codigo=%d\n", articulo.desc, articulo.pvu, articulo.numero);
+                               lst_articulos->fp->modificar_registro(lst_articulos->fp, k1, tmp, size, &error, datos[i]);
+                               PERR("===     FIN     ===");
                        }
                }
                if (datos) free(datos);
                        }
                }
                if (datos) free(datos);