]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Agrego a la lista capacidad de imprimirse a un archivo, para
authorRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 31 May 2004 03:41:42 +0000 (03:41 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Mon, 31 May 2004 03:41:42 +0000 (03:41 +0000)
 que no digan que no lo implementamos (y ademas sale gratis :-)

emufs_gui/emufs_view.c
emufs_gui/facturas.c
emufs_gui/gui.h
emufs_gui/lista.c
emufs_gui/lista.h

index 8a0a1d655e132c3e5aed5db41421a5d0bec1d748..fb8436ca6598037b9523c8bbf671f3b3b78c6278 100644 (file)
@@ -28,7 +28,6 @@ void menu_ver_registros();
 void menu_ver_bloques();
 void menu_ver_indices();
 void preguntar_nuevo_tipo(const char *title, int *tipo, int *tam_bloque, int *tam_reg);
-char *preguntar_file();
 
 void ver_estadisticas(EMUFS *fp);
 
index f16e16fa6b0bc9e517d6f7525f1cfb3ba1ba03fd..a1d7e326f0bfcfd3b43a9fbd9739e3c782987b93 100644 (file)
@@ -1216,8 +1216,6 @@ void fact_consultas_fechas(char *s)
                }
                fclose(fp);
                /* Mando a ordenar */
-               /* XXX TODO XXX TODO XXX */
-               /* ORDENAR */
                extsort("tmp_ord.xxx", 5*sizeof(t_OrdExt_Data), sizeof(t_OrdExt_Data), comparar_externo);
        }
        /* Creo la lista donde mostrar la consulta*/
@@ -1267,10 +1265,17 @@ void fact_consultas_fechas(char *s)
        } else {
                /* Cargo la lista a partir del archivo ordenado externamente */
                FILE *fp;
+               int j;
+               char st[3];
                t_OrdExt_Data ord;
+               
+               j =( strcmp(estado, "Todos") == 0);
                fp = fopen("tmp_ord.xxx", "r");
+
+               /* si j == 1 tengo que paginar por estado */
+               fread(&ord, sizeof(t_OrdExt_Data), 1, fp);
+               strcpy(st, ord.estado);
                while (!feof(fp)) {
-                       if (fread(&ord, sizeof(t_OrdExt_Data), 1, fp) != 1) continue;
                        lista_agregar_fila(lista,
                                ord.numero,
                                ord.emision,
@@ -1278,7 +1283,20 @@ void fact_consultas_fechas(char *s)
                                get_forma_pago(ord.fp),
                                ord.importe
                        );
+                       strcpy(st, ord.estado);
+                       
+                       fread(&ord, sizeof(t_OrdExt_Data), 1, fp);
+                       /* Si el estado cambio y j == 1 */
+                       if ((strcmp(st, ord.estado) != 0) && (j == 1)) {
+                               /* Hago la pausa para mostrar lo que hay */
+                               lista_ejecutar(lista);
+                               /* bue, ya miraron, ahora limpio y sigo con el resto */
+                               lista_clear(lista);
+                       }
                }
+
+               /* Elimino el archivo temporal */
+               unlink("tmp_ord.xxx");
        }
        curs_set(0);
        lista_ejecutar(lista);
index c825b3c6bd36b82a7b92ab00646c3ec5cafb1974..2eab16e7e91600c2bb8dc8be146ba8b9b42c2de7 100644 (file)
@@ -53,5 +53,7 @@ typedef struct _mis_param_ {
        parametro_indice ind_fac[5];
 } t_Parametros;
 
+char *preguntar_file();
+
 #endif
 
index ca71b72163a203a71c6aa536e987b7690230fd8f..5d22bff4a743cfe04bf123b009e57a187184527a 100644 (file)
@@ -1,6 +1,7 @@
 
 #include "common.h"
 #include "lista.h"
+#include "gui.h"
 
 t_Lista *lista_crear(int cc, WINDOW *win, int w, int h)
 {
@@ -178,7 +179,7 @@ void print_lista(t_Lista *lst, t_Fila *fil, int sel)
        /* Imprimo algunas cosas*/
        sprintf(format, "Cantidad de Items : %d", lst->cant_filas);
        mvwaddstr(lst->win, 0, 0, format);
-       mvwaddstr(lst->win, 1, 0, "Teclas : ENTER = VOLVER       E = Editar");
+       mvwaddstr(lst->win, 1, 0, "Teclas : ENTER = VOLVER     E = Editar    P = Imprimir");
        /* Pongo la filas */
        y = 0;
        y++;
@@ -226,6 +227,7 @@ int lista_ejecutar(t_Lista *lst)
        int key;
        t_Fila *fil;
        int i, offset=0, selected=0;
+       char *file;
 
        fil = lst->primera;
        if (fil == NULL) {
@@ -262,6 +264,12 @@ int lista_ejecutar(t_Lista *lst)
                                i++;
                        }
                        return fil->datos[0].i_dato;
+               } else if ((key == 'p') || (key == 'P')) {
+                               file = preguntar_file();
+                               if (file) {
+                                       lista_print_file(lst, file);
+                                       free(file);
+                               }
                } else {
                        continue;
                }
@@ -291,5 +299,71 @@ void lista_clear(t_Lista *lst)
                free(del);
        }
        lst->primera = NULL;
+       lst->cant_filas = 0;
 }
 
+void poner_espacios(FILE *fp, int cant)
+{
+       int i;
+       for(i=0; i<cant; i++)
+               fputc(' ', fp);
+}
+
+void lista_print_file(t_Lista *lst, char *file)
+{
+       FILE *fp;
+
+       char texto[100];
+       char salida[100];
+       char format[100];
+       t_Columna *col;
+       t_Fila *fil;
+       int i;
+
+       fp = fopen(file, "wt");
+       /* Imprimo algunas cosas*/
+       fputs("EMUFS - Reporte\n\n", fp);
+
+       sprintf(format, "Cantidad de Items : %d\n\n", lst->cant_filas);
+       fputs(format, fp);
+       /* Pongo la filas */
+       col = lst->columnas;
+       while (col) {
+               poner_espacios(fp, col->offset);
+               fputs(col->nombre, fp);
+               col = col->sig;
+       }
+       fputs("\n", fp);
+
+       fil = lst->primera;
+       while (fil) {
+               /* Si no entran mas filas salgo! */
+               col = lst->columnas;
+               /* Imprimo los datos de cada columna */
+               i = 0;
+               while (col) {
+                       switch (col->tipo) {
+                               case DATO_INT:
+                                       sprintf(texto, "%d", fil->datos[i].i_dato);
+                                       /* Alineo el numero a derecha */
+                                       sprintf(format, "%% %ds", col->width);
+                               break;
+                               case DATO_STR:
+                                       sprintf(texto, "%s", fil->datos[i].s_dato);
+                                       sprintf(format, "%%-%ds", col->width);
+                               break;
+                               case DATO_FLOAT:
+                                       sprintf(texto, "%.2f", fil->datos[i].f_dato);
+                                       sprintf(format, "%%%ds", col->width);
+                       }
+                       sprintf(salida, format, texto);
+                       poner_espacios(fp, col->offset);
+                       fputs(texto, fp);
+                       i++;
+                       col = col->sig;
+               }
+               fputs("\n", fp);
+               fil = fil->sig;
+       }
+       fclose(fp);
+}
index 4b2d977af8a0916090181cb3589a43e054c0d353..d3f8c4b8ad2dccec2b9a74daba14f5b25b65e192 100644 (file)
@@ -96,5 +96,9 @@ int lista_ejecutar(t_Lista *lst);
 
 /** Limpia los datos agregados a las filas */
 void lista_clear(t_Lista *lst);
+
+/** Imprime una lista a un archivo */
+void lista_print_file(t_Lista *lst, char *file);
+
 #endif