X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/439d9f9ac17b496b8f90857995271bc17fa5600e..03e6bac48b3be290deae9d8943940bf0067846af:/emufs_gui/facturas.c?ds=sidebyside diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 9410c19..b713ba6 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -8,9 +8,13 @@ static t_LstFacturas *lst_facturas; /* Procesa una factura antes de enviarla al archivo para guardarla */ static void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE *size); static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, t_LstFacturas *lst); + +/* Manejo de la lista en memoria */ static t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num); static int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo); int eliminar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo); + +/* Funciones para carga desde el XML */ static t_Item *leer_items(xmlNode *, int *cant, int size); static char *leer_nota(xmlNode *, int max); @@ -174,11 +178,11 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque, int t { xmlDocPtr document; xmlNode *node, *inicio; - int error = 0, cant_items, i; + int error = 0, cant_items; char *prop; EMUFS_REG_SIZE size; t_LstFacturas *tmp; - EMUFS_REG_ID id, *indices, indices_cant; + EMUFS_REG_ID id; lst_facturas = NULL; @@ -271,6 +275,7 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque, int t xmlFreeDoc(document); xmlCleanupParser(); } else { +#ifdef NO_SE_USA_MAS PERR("Voy a recuperar desde un archivo"); tmp->fp = emufs_abrir("facturas"); if (tmp->fp == NULL) { @@ -301,6 +306,7 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque, int t } } free(indices); +#endif } PERR("Facturas todo Ok"); @@ -329,35 +335,29 @@ int fact_liberar(t_LstFacturas *l) t_Factura *fact_buscar(t_LstFacturas *lst, int numero, EMUFS_REG_ID *id, EMUFS_REG_ID *id_texto) { t_Factura *fact; - t_Reg_Factura *reg; char *leo; EMUFS_REG_SIZE size; int error; if (lst == NULL) return NULL; fact = NULL; - reg = lst->primero; - while (reg) { - if (reg->numero == numero) { - size = 0; - error = 0; - leo = lst->fp->leer_registro(lst->fp, reg->num_reg, &size, &error); - if (leo != NULL) { - fact = (t_Factura *)malloc(sizeof(t_Factura)); - if (fact == NULL) { - free(leo); - return NULL; - } - procesar_leer_factura(fact, leo, size, lst); - (*id) = reg->num_reg; - (*id_texto) = reg->texto_reg; - free(leo); - fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, reg->texto_reg, &size, &error); - } - break; + leo = lst->fp->leer_registro(lst->fp, + emufs_indice_generar_clave_desde_valor(lst->fp->indices, (char*)&numero), &size, &error); + if (leo != NULL) { + fact = (t_Factura *)malloc(sizeof(t_Factura)); + if (fact == NULL) { + free(leo); + return NULL; } - reg = reg->sig; + procesar_leer_factura(fact, leo, size, lst); + /* y esto ??! + (*id) = reg->num_reg; + (*id_texto) = reg->texto_reg; + */ + free(leo); + //fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, reg->texto_reg, &size, &error); } + return fact; } @@ -402,8 +402,8 @@ void fact_eliminar(char *s) nodo = lst_facturas->primero; while (nodo) { if (nodo->numero == fact->numero) { - lst_facturas->fp->borrar_registro(lst_facturas->fp, nodo->num_reg); - lst_facturas->fp_texto->borrar_registro(lst_facturas->fp_texto, nodo->texto_reg); + /*lst_facturas->fp->borrar_registro(lst_facturas->fp, nodo->num_reg);*/ + /*lst_facturas->fp_texto->borrar_registro(lst_facturas->fp_texto, nodo->texto_reg);*/ eliminar_nodo_factura(lst_facturas, nodo); break; } @@ -418,6 +418,7 @@ void fact_modificar(char *s) { WINDOW *win, *items, *nota, *subnota; t_Form *form, *form_nota; + t_Reg_Factura *nodo; t_Factura *fact; EMUFS_REG_SIZE size; EMUFS_REG_ID id, id_texto; @@ -429,11 +430,24 @@ void fact_modificar(char *s) win = newwin(LINES-4, COLS-2, 2, 1); box(win, 0, 0); - fact = fact_form_buscar(win, &id, &id_texto); + if (s == NULL) { + fact = fact_form_buscar(win, &id, &id_texto); + } else { + id = atoi(s); + fact = NULL; + nodo = lst_facturas->primero; + while (nodo) { + if (nodo->num_reg == id) { + fact = fact_buscar(lst_facturas, nodo->numero, &id, &id_texto); + break; + } + nodo = nodo->sig; + } + } if (fact == NULL) { wattron(win, COLOR_PAIR(COLOR_YELLOW)); - mvwaddstr(win, 2, 1, "No existe artículo con ese código. Abortando!"); + mvwaddstr(win, 2, 1, "No existe factura con ese código. Abortando!"); wattroff(win, COLOR_PAIR(COLOR_YELLOW)); wrefresh(win); getch(); @@ -699,7 +713,7 @@ void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, t_LstFacturas *lst) { char *ini, *fin; - int dummy; + /*int dummy;*/ if (lst == NULL) { PERR("Puntero a lista NULO"); @@ -772,7 +786,7 @@ static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, } else { dst->items = NULL; } - dst->nota = lst->fp_texto->leer_registro(lst->fp_texto, dst->reg_nota, (EMUFS_REG_SIZE *)&dummy, &dummy); + /*dst->nota = lst->fp_texto->leer_registro(lst->fp_texto, dst->reg_nota, (EMUFS_REG_SIZE *)&dummy, &dummy);*/ return 0; break; case T3: @@ -782,13 +796,14 @@ static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, memcpy(dst, src, size-sizeof(t_Item)*10); dst->items = (t_Item *)malloc(10*sizeof(t_Item)); memcpy(dst->items, src+size-sizeof(t_Item)*10, 10*sizeof(t_Item)); - dst->nota = lst->fp_texto->leer_registro(lst->fp_texto, dst->reg_nota, (EMUFS_REG_SIZE *)&dummy, &dummy); + /*dst->nota = lst->fp_texto->leer_registro(lst->fp_texto, dst->reg_nota, (EMUFS_REG_SIZE *)&dummy, &dummy);*/ } return 0; } void fact_reformatear(int tipo, int tam_bloque, int tam_reg, int nota_tipo, int nota_tam_bloque, int nota_tam_registro) { +#ifdef NO_ANDA_AUN EMUFS *nuevo, *old; EMUFS_REG_ID *indices, id; EMUFS_REG_SIZE indices_total, i, size, tam_reg1; @@ -885,6 +900,7 @@ void fact_reformatear(int tipo, int tam_bloque, int tam_reg, int nota_tipo, int rename("nota_tmp.fsc", "notas.fsc"); rename("nota_tmp.did", "notas.did"); PERR("==== TERMINE ====\n"); +#endif } int fact_exportar_xml(const char *filename)