#include "common.h"
#include "lista.h"
#include "menu.h"
+#include "facturas.h"
static t_LstArticulos *lst_articulos;
getch();
} else {
INDICE_DATO dummy;
- k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&(articulo->numero));
- PERR("Borrando ARTICULO")
- lst_articulos->fp->borrar_registro(lst_articulos->fp, k, dummy);
- PERR("LISTO BORRADO");
+
+ /* Antes de borrar veo si existe alguna factura que contenga este articulo */
+ if (fact_hay_con_item(articulo->numero) == 0) {
+ k = emufs_indice_generar_clave_desde_valor(lst_articulos->fp->indices, (char *)&(articulo->numero));
+ PERR("Borrando ARTICULO")
+ lst_articulos->fp->borrar_registro(lst_articulos->fp, k, dummy);
+ PERR("LISTO BORRADO");
+ } else {
+ wattron(win, COLOR_PAIR(COLOR_YELLOW));
+ mvwaddstr(win, 6, 4, "No se pudo eliminar Articulo porque hay una factura que lo referencia.");
+ wattroff(win, COLOR_PAIR(COLOR_YELLOW));
+ wrefresh(win);
+ getch();
+ }
free(articulo);
}
waddstr(win, b);
}
-void mostrar_art(WINDOW *win, CLAVE k, char *s)
+void mostrar_art(WINDOW *win, CLAVE k, char *s, INDICE *idx)
{
t_Articulo *art;
EMUFS_REG_ID dummy;
wattroff(win, A_BOLD);
mvwaddstr(win, 19, 5, " L = Siguiente");
mvwaddstr(win, 20, 5, " K = Anterior");
- art = art_obtener(lst_articulos, k.i_clave, &dummy);
+
+ if (strcmp(s, "codigo") == 0) {
+ art = art_obtener(lst_articulos, k.i_clave, &dummy);
+ } else {
+ INDICE_DATO *datos;
+ EMUFS_REG_SIZE size;
+ int cant, error;
+ char *tmp;
+
+ art = (t_Articulo *)malloc(sizeof(t_Articulo));
+ /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */
+ PERR("Busco todos los datos que tengan esta clave");
+ datos = idx->buscar_entradas(idx, k, &cant);
+ if (datos == NULL) {
+ free(art);
+ art = NULL;
+ } else {
+ fprintf(stderr, "Tengo %d datos\n", cant);
+ error = 1;
+ k.i_clave = datos[0].id;
+ PERR("Leo el primer dato");
+ tmp = lst_articulos->fp->leer_registro(lst_articulos->fp, k, &size, &error);
+ if (tmp == NULL) {
+ free(art);
+ art = NULL;
+ } else {
+ if (procesar_leer_articulo(art, tmp, size, lst_articulos) != 1) {
+ free(art);
+ free(tmp);
+ art = NULL;
+ }
+ }
+ free(datos);
+ }
+ }
+
+
if (art != NULL) {
sprintf(numero, "%08d", art->numero);
PERR("Muestro el primer elemento");
- mostrar_art(win1, k, s);
+ mostrar_art(win1, k, s, idx);
wrefresh(win1);
PERR("Sigue el usuario");
curs_set(0);
+ stack[0] = k;
while ((c=wgetch(win)) != 13) {
switch (c) {
case 'L':
continue;
}
werase(win1);
- mostrar_art(win1, k, s);
+ mostrar_art(win1, k, s, idx);
wrefresh(win1);
}
curs_set(1);
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, 4, "Recorrer Articulos")) != 3) {
art_recorrer_con_indice(ind[opt]);
}
}