return k;
}
+CLAVE emufs_indice_b_obtener_sig_clave(INDICE *idx, CLAVE k)
+{
+ int i;
+ B_NodoHeader header;
+ B_NodoEntry *claves;
+ char *nodo, *tmp;
+ int nodo_id;
+ CLAVE salida;
+
+ /* Primero busco la clave pasada por parametro */
+ nodo = b_leer_nodo(idx, 0);
+ nodo_id = 0;
+ while (nodo) {
+ b_leer_header(nodo, &header);
+ claves = b_leer_claves(nodo, &header);
+ i=0;
+ while ((i<header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, k))) i++;
+ if ((i<header.cant) && (emufs_indice_es_igual(idx, claves[i].clave, k))) {
+ /* LA ENCONTRE! , ahora busco la siguiente clave!! */
+ if ((i+1)<header.cant) {
+ if (claves[i].hijo_derecho == -1) {
+ /* Joya!, fue facil, la siguiente va en camino! */
+ salida = claves[i].clave;
+ free(nodo);
+ return salida;
+ }
+
+ /* Mmmmm ... la siguiente esta en uno de mis hijo */
+ /* Necesito la mas chica de las siguientes, para eso
+ * me voy a mi hijo derecho y de ahi bajo siempre
+ * hacia la izquierda hacia una hoja */
+ i = claves[i].hijo_derecho;
+ free(nodo);
+ nodo = b_leer_nodo(idx, i);
+ b_leer_header(nodo, &header);
+ while (header.hijo_izquierdo != -1) {
+ free(nodo);
+ nodo = b_leer_nodo(idx, header.hijo_izquierdo);
+ b_leer_header(nodo, &header);
+ }
+ claves = b_leer_claves(nodo, &header);
+ salida = claves[0].clave;
+ free(nodo);
+ return salida;
+ }
+
+ /* Fuck, la siguiente clave la tengo que sacar de padre */
+ /* Busco al mi padre, perdido en un maremoto hace mucho,muchos
+ * años
+ */
+ free(nodo);
+ nodo = b_leer_nodo(idx, header.padre);
+ b_leer_header(nodo, &header);
+ claves = b_leer_claves(nodo, &header);
+ i = 0;
+ while ((i<header.cant) && (emufs_indice_es_menor(idx, claves[i].clave, k))) i++;
+ if (i<header.cant)
+ salida = claves[i].clave;
+ else
+ /* No hay mas claves! */
+ salida.i_clave = -1;
+ return salida;
+ } else {
+ tmp = nodo;
+ b_grabar_nodo(idx, nodo_id, nodo);
+ if (i == 0) {
+ nodo = b_leer_nodo(idx, header.hijo_izquierdo);
+ nodo_id = header.hijo_izquierdo;
+ } else {
+ nodo = b_leer_nodo(idx, claves[i-1].hijo_derecho);
+ nodo_id = claves[i-1].hijo_derecho;
+ }
+ free(tmp);
+ }
+ }
+
+ /* No encontre la clave pasada, no existe */
+ salida.i_clave = -1;
+ return salida;
+}
+
*/
B_NodoEntry *b_leer_claves(char *src, B_NodoHeader *header);
+CLAVE emufs_indice_b_obtener_sig_clave(INDICE *idx, CLAVE k);
+
#endif
tmp->buscar_entradas = emufs_indice_b_buscar_muchos;
tmp->obtener_menor_clave = emufs_indice_b_obtener_menor_clave;
tmp->obtener_mayor_clave = emufs_indice_b_obtener_mayor_clave;
+ tmp->obtener_sig_clave = emufs_indice_b_obtener_sig_clave;
break;
case IND_B_ASC:
/* llenar metodos */
CLAVE (*obtener_menor_clave)(struct _indices_h_ *idx);
CLAVE (*obtener_mayor_clave)(struct _indices_h_ *idx);
+ CLAVE (*obtener_sig_clave)(struct _indices_h_ *idx, CLAVE k);
+
char *nombre; /**< Nombre único de busqueda del indice */
char *filename; /**< nombre del archivo de indice */
void fact_consultas_fechas(char *s)
{
- EMUFS_REG_ID dummy;
char desde_fecha[10], hasta_fecha[10];
- int i;
- t_Factura *factura;
+ char estado[6];
t_Lista *lista;
t_Form *form;
WINDOW *win, *win1;
form = form_crear(win1);
form_agregar_widget(form, INPUT, "Desde Fecha", 8, "");
form_agregar_widget(form, INPUT, "Hasta Fecha", 8, "");
-
+ form_agregar_widget(form, RADIO, "Estado", 7, "Todos,PN,CD,CM,SF,PM,NC");
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"));
+ strcpy(estado, form_obtener_valor_char(form, "Estado"));
form_destruir(form);
werase(win1);
lista_agregar_columna(lista, "Forma de Pago", DATO_STR, 40, 19); /* fp */
/* Leo los datos desde el archivo */
-/* for(i=desde_codigo; i<=hasta_codigo; i++) {
- factura = fact_buscar(lst_facturas, i, &dummy, &dummy);
- if (factura != NULL) {
+ while (k.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, &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);
+ /*k.i_clave = fact->reg_nota;
+ error = 0;
+ fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, k, &size, &error);
+ */
+ }
lista_agregar_fila(lista,
- factura->numero,
- factura->emision,
- get_estado(factura->estado),
- get_forma_pago(factura->fp)
+ fact.numero,
+ fact.emision,
+ get_estado(fact.estado),
+ get_forma_pago(fact.fp)
);
}
+ if (datos) free(datos);
+ k = idx->obtener_sig_clave(idx, k);
}
curs_set(0);
lista_ejecutar(lista);
curs_set(1);
- */
wrefresh(win1);
wrefresh(win);
werase(win1);