]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* BUGFIX : En emufs_destruir habia un bug donde eliminaba mal y se colgaba
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 19:23:08 +0000 (19:23 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 30 May 2004 19:23:08 +0000 (19:23 +0000)
 * 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 !! :-(

emufs/emufs.c
emufs/indice_b.c
emufs/indices.h
emufs/tipo1.c
emufs_gui/articulos.c
emufs_gui/articulos.h
emufs_gui/emufs_view.c
emufs_gui/facturas.c

index 1eb517737e6239af92100782eba3bf87884f631e..dd1ef086d2936195f8b38b67feea02f43cb8d680 100644 (file)
@@ -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; i<cant; i++) {
                INDICE *tmp;
                tmp = emufs_indice_abrir(emu,
index ef051127b5e2f86a039efd3782fa935c4fbc3c50..e6a0e052e5c59b829aa303e5575ea3890cd073ce 100644 (file)
@@ -1407,4 +1407,15 @@ int b_borrar_dup_clave(INDICE *idx, INDICE_DATO k_dato, INDICE_DATO dato)
        return cant;
 }
 
+#ifdef NO_TERMINAOD
+EMUFS_Estadisticas emufs_indice_b_obtener_estadisticas(INDICE *idx)
+{
+       EMUFS_Estadisticas stats, st_string, st_multiples;
+
+       stats.tam_archivo = emufs_common_get_file_size(idx->filename);
+       stats.cant_bloques = stats.tam_archivo/idx->tam_bloque;
+
+}
+#endif
+
 #include "indice_b_asc.c"
index 2be19c2b03445c61830396f6674123d9397fe6d1..2063bc046b4ed4a406f93c401a083727efc141f4 100644 (file)
@@ -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;
 
index 88706da34280b07c44e2a28f9e5a6d45cbcb7121..43fc9ef90b03dffb4952ef82bb174749dea4651e 100644 (file)
@@ -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);
 }
 
index e5a685056abfd82505002653cf1e5aec1a38c069..f7ee0985bc47d2adf6b2249f66880b406f1ac753 100644 (file)
@@ -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; i<cant; i++) {
+                       error = 1;
+                       k1.i_clave = datos[i].id;
+                       leo = lst_facturas->fp->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);
+               }
+       }
+}
+
index d87de7f65ce5ea0f0db5c908600b7567153d07c7..41f1699fb8bee4d656fd520ba4148507f5718c15 100644 (file)
@@ -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
index f282e7be4d2721ea7ef97540749d07934f4c20d9..d72c98744419c5c6e0eb64f6c460a7cffa341cc0 100644 (file)
@@ -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;
 }
+
index 23e9deb49acf420b2ce45c2f6960a2196bd8da96..2df27ea46cf68c12fe04e5e842736385aa409d83 100644 (file)
@@ -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);