*/
}
+CLAVE emufs_indice_b_obtener_menor_clave(INDICE *idx)
+{
+ B_NodoHeader header;
+ B_NodoEntry *claves;
+ CLAVE k;
+ char *nodo;
+
+ nodo = b_leer_nodo(idx, 0);
+ b_leer_header(nodo, &header);
+ /* Tengo que ir siempre a la izquierda hasta una hora */
+ while (header.hijo_izquierdo != -1) {
+ free(nodo);
+ nodo = b_leer_nodo(idx, header.hijo_izquierdo);
+ b_leer_header(nodo, &header);
+ }
+
+ /* Listo, ahora solo leo la primer clave */
+ claves = b_leer_claves(nodo, &header);
+ k = claves[0].clave;
+ free(nodo);
+ return k;
+}
+
+CLAVE emufs_indice_b_obtener_mayor_clave(INDICE *idx)
+{
+ B_NodoHeader header;
+ B_NodoEntry *claves;
+ CLAVE k;
+ int i;
+ char *nodo;
+
+ nodo = b_leer_nodo(idx, 0);
+ b_leer_header(nodo, &header);
+ claves = b_leer_claves(nodo, &header);
+ /* Tengo que ir siempre a la izquierda hasta una hora */
+ while (claves[header.cant-1].hijo_derecho != -1) {
+ i = claves[header.cant-1].hijo_derecho;
+ free(nodo);
+ nodo = b_leer_nodo(idx, i);
+ b_leer_header(nodo, &header);
+ claves = b_leer_claves(nodo, &header);
+ }
+
+ /* Listo, ahora solo leo la primer clave */
+ k = claves[header.cant-1].clave;
+ free(nodo);
+ return k;
+}
+
delwin(win);
}
+void fact_consultas_fechas(char *s)
+{
+ EMUFS_REG_ID dummy;
+ char desde_fecha[10], hasta_fecha[10];
+ int i;
+ t_Factura *factura;
+ t_Lista *lista;
+ t_Form *form;
+ WINDOW *win, *win1;
+ INDICE *idx;
+ CLAVE k;
+
+ 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(lst_facturas->fp, "emision");
+ if (idx==NULL) PERR("INDICE EMISION NO SE ENCUENTRA!!");
+ if (strlen(desde_fecha) == 0) {
+ k = idx->obtener_menor_clave(idx);
+ emufs_indice_obtener_valor_desde_clave(idx, k, desde_fecha);
+ PERR("OBTUVE MENOR CLAVE DESDE EL INDICE");
+ PERR(desde_fecha);
+ }
+ if (strlen(hasta_fecha) == 0) {
+ k = idx->obtener_mayor_clave(idx);
+ emufs_indice_obtener_valor_desde_clave(idx, k, 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, "Numero", DATO_INT, 0, 8); /* numero */
+ lista_agregar_columna(lista, "Fecha", DATO_STR, 10, 9); /* emision */
+ lista_agregar_columna(lista, "Estado", DATO_STR, 20, 19); /* estado */
+ 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) {
+ lista_agregar_fila(lista,
+ factura->numero,
+ factura->emision,
+ get_estado(factura->estado),
+ get_forma_pago(factura->fp)
+ );
+ }
+ }
+
+ curs_set(0);
+ lista_ejecutar(lista);
+ curs_set(1);
+ */
+ wrefresh(win1);
+ wrefresh(win);
+ werase(win1);
+ werase(win);
+ wrefresh(win);
+ delwin(win);
+}
+
void fact_consultas_varias(char *nombre_indice, char *titulo)
{
int i, cant, error;
MENU(mi_menu) {
MENU_OPCION("por Codigos", "Consulta de Articulos por rango de codigo."),
MENU_OPCION("por Fecha de Emision", "Consulta por fecha unica"),
+ MENU_OPCION("por Rango de Fecha", "Consulta por rando de fecha de emision"),
MENU_OPCION("por Presentacion", "Consulta por Presentacion"),
MENU_OPCION("Volver", "Volver al menu anterior.")
};
int opt;
- while ((opt = menu_ejecutar(mi_menu, 4, "Consulta de Articulos")) != 3) {
+ while ((opt = menu_ejecutar(mi_menu, 5, "Consulta de Articulos")) != 4) {
switch (opt) {
case 0:
fact_consultas_codigos(s);
fact_consultas_varias("emision", "Fecha");
break;
case 2:
+ fact_consultas_fechas(s);
+ break;
+ case 3:
fact_consultas_varias("presentacion", "Presentacion");
}
}