From: Ricardo Markiewicz Date: Sun, 30 May 2004 19:23:08 +0000 (+0000) Subject: * BUGFIX : En emufs_destruir habia un bug donde eliminaba mal y se colgaba X-Git-Tag: svn_import_r684~65 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/d843981b278fd692ab40eab347e37e6950283558 * BUGFIX : En emufs_destruir habia un bug donde eliminaba mal y se colgaba * BUGFIX : Si al leer archivo .info cant==0 no se hace nada * Agrego a la creacion de facturas restar la cantidad vendida del articulo en el archivo de articulos. TODO : ver por que se cuelga en articulos.c:1276 !! :-( --- diff --git a/emufs/emufs.c b/emufs/emufs.c index 1eb5177..dd1ef08 100644 --- a/emufs/emufs.c +++ b/emufs/emufs.c @@ -344,8 +344,9 @@ int emufs_destruir(EMUFS *e) cur = e->indices; while (cur) { del = cur; + fprintf(stderr, "INDICE A ELIMINAR = %s\n", del->nombre); cur = cur->sig; - emufs_indice_destruir(e, cur); + emufs_indice_destruir(e, del); } free(e->nombre); @@ -464,6 +465,7 @@ int emufs_agregar_indice(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, INDIC return 0; } + tmp->sig = NULL; if (emu->indices==NULL) emu->indices = tmp; else { @@ -550,13 +552,17 @@ int cargar_indices(EMUFS *emu) return 0; } + emu->indices = NULL; fread(&cant, 1, sizeof(int), fp); + if (cant == 0) { + PERR("NO HAY INDICES EN ESTE ARCHIVO"); + return 1; + } indices = malloc(cant*sizeof(t_Indice)); fread(indices, cant, sizeof(t_Indice), fp); fclose(fp); /* Leo */ - emu->indices = NULL; for(i=0; ifilename); + stats.cant_bloques = stats.tam_archivo/idx->tam_bloque; + +} +#endif + #include "indice_b_asc.c" diff --git a/emufs/indices.h b/emufs/indices.h index 2be19c2..2063bc0 100644 --- a/emufs/indices.h +++ b/emufs/indices.h @@ -107,6 +107,8 @@ typedef struct _indices_h_ { * pripiamente dicho */ EMUFS *emu_mult; + + /*EMUFS_Estadisticas (*obtener_estadisticas)(struct _indices_h_ *);*/ struct _indices_h_ *sig; /**< Siguiente indice */ } INDICE; diff --git a/emufs/tipo1.c b/emufs/tipo1.c index 88706da..43fc9ef 100644 --- a/emufs/tipo1.c +++ b/emufs/tipo1.c @@ -722,7 +722,9 @@ EMUFS_BLOCK_ID emufs_tipo1_grabar_bloque_fsc(EMUFS *efs, void *block, EMUFS_REG_ID emufs_tipo1_modificar_registro(EMUFS* efs, CLAVE k, void *data, EMUFS_REG_SIZE size, int* err, INDICE_DATO dato) { + PERR("Tipo1 Modificar Borrando"); emufs_tipo1_borrar_registro(efs, k, dato); + PERR("Tipo1 Modificar Agregando de nuevo"); return emufs_tipo1_grabar_registro(efs, data, size, err); } diff --git a/emufs_gui/articulos.c b/emufs_gui/articulos.c index e5a6850..f7ee098 100644 --- a/emufs_gui/articulos.c +++ b/emufs_gui/articulos.c @@ -159,6 +159,7 @@ t_LstArticulos *art_cargar(t_Parametros *param) } else { PERR("Voy a recuperar desde un archivo"); tmp->fp = emufs_abrir("articulos"); + fprintf(stderr, "PTR=%p %p\n", tmp, tmp->fp); if (tmp->fp == NULL) { PERR("No se pudo cargar archivo de articulos."); free(tmp); @@ -1150,3 +1151,134 @@ void art_recorrer() } } +void art_ver_ventas() +{ +#ifdef cONDORITO + char desde_fecha[10], hasta_fecha[10]; + t_Lista *lista; + t_Form *form; + WINDOW *win, *win1; + INDICE *idx; + CLAVE k_menor, k_mayor; + + 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_agregar_widget(form, INPUT, "Desde Fecha", 8, ""); + form_agregar_widget(form, INPUT, "Hasta Fecha", 8, ""); + form_ejecutar(form, 2, 2); + + strcpy(desde_fecha, form_obtener_valor_char(form, "Desde Fecha")); + strcpy(hasta_fecha, form_obtener_valor_char(form, "Hasta Fecha")); + + form_destruir(form); + werase(win1); + wrefresh(win1); + + /* Si el usuario no ingreso alguno de los datos, lo obtengo del indice */ + /*idx = emufs_buscar_indice_por_nombre(fact_get_lst()->fp, "emision");*/ + + /* Uso el indice por numero de articulo */ + idx = fact_get_lst()->fp->externo; + + if (idx==NULL) PERR("INDICE EMISION NO SE ENCUENTRA!!"); + if (strlen(desde_fecha) == 0) { + k_menor = idx->obtener_menor_clave(idx); + emufs_indice_obtener_valor_desde_clave(idx, k_menor, desde_fecha); + PERR("OBTUVE MENOR CLAVE DESDE EL INDICE"); + PERR(desde_fecha); + } + if (strlen(hasta_fecha) == 0) { + k_mayor = idx->obtener_mayor_clave(idx); + emufs_indice_obtener_valor_desde_clave(idx, k_mayor, hasta_fecha); + PERR("OBTUVE MAYOR CLAVE DESDE EL INDICE"); + PERR(hasta_fecha); + } + + /* 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, "Fecha", DATO_STR, 0, 9); /* emision */ + lista_agregar_columna(lista, "Numero", DATO_INT, 20, 8); /* numero articulo */ + lista_agregar_columna(lista, "Cantidad", DATO_INT, 30, 10); /* estado */ + + /* Leo los datos desde el archivo */ + while (k_menor.i_clave != -1) { + t_Factura fact; + int error, cant, i; + char *leo; + EMUFS_REG_SIZE size; + INDICE_DATO *datos; + CLAVE k1; + datos = idx->buscar_entradas(idx, k_menor, &cant); + for(i=0; ifp->leer_registro(lst_facturas->fp, k1, &size, &error); + if (leo != NULL) { + procesar_leer_factura(&fact, leo, size, lst_facturas); + free(leo); + } + lista_agregar_fila(lista, + fact.emision, + get_estado(fact.estado), + get_forma_pago(fact.fp), + get_importe_factura(fact.items, fact.cant_items, fact.procdoi) + ); + } + if (datos) free(datos); + if (fact.items) free(fact.items); + k_menor = idx->obtener_sig_clave(idx, k_menor); + } + + curs_set(0); + lista_ejecutar(lista); + curs_set(1); + wrefresh(win1); + wrefresh(win); + werase(win1); + werase(win); + wrefresh(win); + delwin(win); +#endif +} + +void art_actualizar_stock(int numero, int cv) +{ + t_Articulo *articulo; + EMUFS_REG_ID dummy; + char *tmp; + EMUFS_REG_SIZE size; + int error, stock; + + articulo = art_obtener(lst_articulos, numero, &dummy); + if (articulo != NULL) { + /* Actualizo el stock */ + stock = atoi(articulo->existencia); + stock -= cv; + sprintf(articulo->existencia, "%d", stock); + tmp = procesar_guardar_articulo(articulo, &size, lst_articulos); + if (tmp) { + CLAVE k; + INDICE_DATO dummy1; + k.i_clave = numero; + /* dummy se pasa porque esto se hace por clave primaria, y el INDICE_DATO que se + * pasa solo es requerido cuando son claves multiples + */ + PERR("Guardando modificacion de Stock"); + error = 0; + fprintf(stderr, "PTR=%p %p\n", lst_articulos, lst_articulos->fp); + lst_articulos->fp->modificar_registro(lst_articulos->fp, k, tmp, size, &error, dummy1); + PERR("Listo"); + free(tmp); + } + } +} + diff --git a/emufs_gui/articulos.h b/emufs_gui/articulos.h index d87de7f..41f1699 100644 --- a/emufs_gui/articulos.h +++ b/emufs_gui/articulos.h @@ -50,4 +50,8 @@ int art_exportar_xml(const char *filename); void art_recorrer(); +void art_ver_ventas(); + +void art_actualizar_stock(int numero, int cv); + #endif diff --git a/emufs_gui/emufs_view.c b/emufs_gui/emufs_view.c index f282e7b..d72c987 100644 --- a/emufs_gui/emufs_view.c +++ b/emufs_gui/emufs_view.c @@ -387,11 +387,12 @@ void menu_articulos() MENU_OPCION("Modificacion", "Modifica un articulo existente."), MENU_OPCION("Consultas", "Consulta varias de articulo."), MENU_OPCION("Recorrer", "Recorrer el archivo por alguno de sus indices."), + MENU_OPCION("Ver ventas", "Ver venta de articulos entre 2 fechas."), MENU_OPCION("Volver", "Volver al menu anterior.") }; int opt; - while ((opt = menu_ejecutar(mi_menu, 6, "Menu Articulos")) != 5) { + while ((opt = menu_ejecutar(mi_menu, 7, "Menu Articulos")) != 6) { switch (opt) { case 0: art_agregar(NULL); @@ -407,6 +408,9 @@ void menu_articulos() break; case 4: art_recorrer(); + break; + case 5: + art_ver_ventas(); } } @@ -929,3 +933,4 @@ char *preguntar_file() form_destruir(form); return t; } + diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 23e9deb..2df27ea 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -649,8 +649,9 @@ void fact_agregar(char *s) cant++; its = (t_Item *)realloc(its, cant*sizeof(t_Item)); if (its != NULL) { + art_actualizar_stock(atoi(entrada), atoi(cv)); its[cant-1].numero = atoi(entrada); - strcpy(its[cant-1].cv, form_obtener_valor_char(form, "CV")); + strcpy(its[cant-1].cv, cv); strcpy(its[cant-1].pvu, art->pvu); } free(art);