]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* ADDED : Insertar ordenado en widget lista, para usar cuando se hace
authorRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 28 May 2004 02:45:31 +0000 (02:45 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Fri, 28 May 2004 02:45:31 +0000 (02:45 +0000)
 una consulta por rando de fecha con filtro de estado, asi queda
 ordenado por NumFac.

emufs_gui/facturas.c
emufs_gui/lista.c
emufs_gui/lista.h

index 82be7bacef8346de96c46af7ec2eaeeaa514153c..153b5cb8f4f70fd6fa60c0b2ad595b51b2716bbb 100644 (file)
@@ -1114,12 +1114,16 @@ void fact_consultas_fechas(char *s)
                                fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, k, &size, &error);
                                */
                        }
-                       lista_agregar_fila(lista,
-                               fact.numero,
-                               fact.emision,
-                               get_estado(fact.estado),
-                               get_forma_pago(fact.fp)
-                       );
+                       if (strcmp(estado, "Todos") != 0) {
+                               if (strcmp(estado, fact.estado) == 0) {
+                                       lista_agregar_fila_ordenada(lista,
+                                               fact.numero,
+                                               fact.emision,
+                                               get_estado(fact.estado),
+                                               get_forma_pago(fact.fp)
+                                       );
+                               }
+                       }
                }
                if (datos) free(datos);
                k_menor = idx->obtener_sig_clave(idx, k_menor);
index a3ca282a076e382f48234e45f5903eb180d80411..126007d5c8d93fc33a137f9d651a056bbc4ceec9 100644 (file)
@@ -84,6 +84,75 @@ void lista_agregar_fila(t_Lista *lst, ...)
        }
 }
 
+void lista_agregar_fila_ordenada(t_Lista *lst, ...)
+{
+       int i, fin;
+       t_Columna *col;
+       t_Fila *nueva, *pos;
+       va_list args;
+
+       col = lst->columnas;
+       nueva = malloc(sizeof(t_Fila));
+       nueva->datos = malloc(sizeof(t_Dato)*lst->cant_columnas);
+       nueva->sig = NULL;
+       nueva->ant = NULL;
+
+       va_start(args, lst);
+       /* Para cada columna, leo el dato y lo agrego en la fila */
+       i = 0;
+       while (col) {
+               fprintf(stderr, "Dato en columnas %d\n", i);
+               switch (col->tipo) {
+                       case DATO_INT:
+                               nueva->datos[i].i_dato = va_arg(args, int);
+                       break;
+                       case DATO_STR:
+                               strcpy(nueva->datos[i].s_dato, va_arg(args, char *));
+                       break;
+                       case DATO_FLOAT:
+                               nueva->datos[i].f_dato = va_arg(args, double);
+               }
+               i++;
+               col = col->sig;
+       }
+       va_end(args);
+
+       col = lst->columnas;
+
+       /* Agrego la fila ordenada */
+       if (lst->primera == NULL) {
+               lst->primera = nueva;
+       } else {
+               pos = lst->primera;
+               fin = 0;
+               while ((pos->sig != NULL) && (!fin)) {
+                       switch (col->tipo) {
+                               case DATO_INT:
+                                       fin = (pos->datos[0].i_dato >= nueva->datos[0].i_dato);
+                               break;
+                               case DATO_STR:
+                                       fin = (strcmp(pos->datos[0].s_dato, nueva->datos[0].s_dato) >= 0);
+                               break;
+                               case DATO_FLOAT:
+                                       fin = (pos->datos[0].f_dato >= nueva->datos[0].f_dato);
+                       }
+                       if (!fin)
+                               pos = pos->sig;
+               }
+               if (pos->ant == NULL) {
+                       /* Soy el primero */
+                       nueva->sig = lst->primera;
+                       lst->primera = nueva;
+                       pos->ant = nueva;
+               } else {
+                       pos->ant->sig = nueva;
+                       nueva->ant = pos->ant;
+                       pos->ant = nueva;
+                       nueva->sig = pos;
+               }
+       }
+}
+
 void print_lista(t_Lista *lst, t_Fila *fil, int sel)
 {
        char texto[100];
index 057d1d4112f0c72f54aa56bb1ffca884cb1da19a..efa456848536fb0150f8e1b5120eb84a98e506c4 100644 (file)
@@ -74,6 +74,16 @@ void lista_agregar_columna(t_Lista *lst, char *nombre, t_TipoDato tipo, int offs
  */
 void lista_agregar_fila(t_Lista *lst, ...);
 
+/** Agrega una fila a la lista ordenada
+ *
+ *  La fila se agrega pasando cada parametro en funcion del tipo
+ *  de cada columna. Se deben pasar tantos datos como columnas
+ *  existen.
+ *
+ *  El orden se define por el primer parametro
+ */
+void lista_agregar_fila_ordenada(t_Lista *lst, ...);
+
 /** Muestra la lista en pantalla
  *
  *  \param lst