From: Ricardo Markiewicz Date: Fri, 16 Apr 2004 05:29:53 +0000 (+0000) Subject: * Modificacion parcial (porque no graba) de Facturas. X-Git-Tag: svn_import_r684~464 X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/commitdiff_plain/ecc9d27042d38e53309151e07c1c23cc6331efea?ds=sidebyside * Modificacion parcial (porque no graba) de Facturas. El alta de facturas me tira un "idx.c: error al recuperar ultimo indice" --- diff --git a/emufs/tipo3.c b/emufs/tipo3.c index 00adef8..596e2a2 100644 --- a/emufs/tipo3.c +++ b/emufs/tipo3.c @@ -90,6 +90,7 @@ void* emufs_tipo3_leer_registro(EMUFS *emu, EMUFS_REG_ID ID, break; } *reg_size = emu->tam_reg; + fprintf(stderr, "ACA VALE %d\n", emu->tam_reg); } iterador += emu->tam_reg; } diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index d37f943..d0c0428 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -5,6 +5,7 @@ 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); 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); @@ -138,7 +139,6 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque) if (filename != NULL) { document = xmlReadFile(filename, "ISO-8859-1",0); if (document == NULL) { - fprintf(stderr, "ERROR ABRIENDO %s\n", filename); return NULL; } @@ -173,7 +173,7 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque) void *save; memset(&fact, '*', sizeof(t_Factura)); fact.numero = atoi(xml_get_prop(node, "NroFac")); - fact.procdoi = atoi(xml_get_prop(node, "porcDoI")); + fact.procdoi = atof(xml_get_prop(node, "PorcDoI")); fact.numero_remito = atoi(xml_get_prop(node, "NroRemito")); strcpy(fact.emision, xml_get_prop(node, "FechaEmisión")); strcpy(fact.vencimiento, xml_get_prop(node, "FechaVto")); @@ -228,6 +228,126 @@ int fact_liberar(t_LstFacturas *l) return 0; } +t_Factura *fact_buscar(t_LstFacturas *lst, int numero) +{ + 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) { + leo = lst->fp->leer_registro(lst->fp, reg->num_reg, &size, &error); + if (leo != NULL) { + fact = (t_Factura *)malloc(sizeof(t_Factura)); + procesar_leer_factura(fact, leo, size, lst); + } + break; + } + reg = reg->sig; + } + return fact; +} + +t_Factura *fact_form_buscar(WINDOW *win, EMUFS_REG_ID *id) +{ + t_Form *form; + t_Factura *fact; + + form = form_crear(win); + form_agregar_widget(form, INPUT, "Numero de Factura", 8, ""); + form_ejecutar(form, 1,1); + fact = fact_buscar(lst_facturas, form_obtener_valor_int(form, "Numero de Factura")); + form_destruir(form); + + return fact; +} + +void fact_modificar(char *s) +{ + WINDOW *win, *items; + t_Form *form; + t_Factura *fact; + /*EMUFS_REG_SIZE size;*/ + EMUFS_REG_ID id; /*, id_texto;*/ +/* int y_actual, cant, error;*/ + char tmp_str[10]; + + + win = newwin(LINES-4, COLS-2, 2, 1); + box(win, 0, 0); + + fact = fact_form_buscar(win, &id); + + if (fact == NULL) { + werase(win); + wrefresh(win); + delwin(win); + return; + } + + mvwaddch(win, 10, 0, ACS_LTEE); + mvwhline(win, 10, 1, ACS_HLINE, COLS-3); + mvwaddch(win, 10, COLS-3, ACS_RTEE); + wrefresh(win); + + items = derwin(win, LINES-20, COLS-4, 15, 1); + wrefresh(items); + + form = form_crear(win); + sprintf(tmp_str, "%08d", fact->numero); + form_agregar_widget(form, INPUT, "Numero de Factura", 8, tmp_str); + form_agregar_widget(form, INPUT, "Fecha Emision", 8, fact->emision); + form_agregar_widget(form, INPUT, "Fecha Vto", 8, fact->vencimiento); + sprintf(tmp_str, "%08d", fact->numero_remito); + form_agregar_widget(form, INPUT, "Nro Remito", 8, tmp_str); + form_agregar_widget(form, RADIO, "Estado", 6, "PN,CD,CM,SF,PM,NC"); + form_agregar_widget(form, RADIO, "Forma de pago", 3, "CO,CR,CH"); + sprintf(tmp_str, "%02.2f", fact->procdoi); + form_agregar_widget(form, INPUT, "%% Descuento", 5, tmp_str); + form_agregar_widget(form, INPUT, "Cuenta Cte", 5, fact->ctacte); + form_agregar_widget(form, INPUT, "Cheque Nro", 18, fact->cheque); + + form_ejecutar(form, 1,1); + + fact->numero = form_obtener_valor_int(form, "Numero de Factura"); + strcpy(fact->emision, form_obtener_valor_char(form, "Fecha Emision")); + strcpy(fact->vencimiento, form_obtener_valor_char(form, "Fecha Vto")); + fact->numero_remito = form_obtener_valor_int(form, "Nro Remito"); + strcpy(fact->estado, form_obtener_valor_char(form, "Estado")); + strcpy(fact->fp, form_obtener_valor_char(form, "Forma de pago")); + fact->procdoi = form_obtener_valor_float(form, "%% Descuento"); + strcpy(fact->ctacte, form_obtener_valor_char(form, "Cuenta Cte")); + strcpy(fact->cheque, form_obtener_valor_char(form, "Cheque Nro")); + + form_destruir(form); + + /* TODO MODIFICAR */ + +/* entrada = procesar_guardar_factura(&fact,lst_facturas, &size); + if (entrada) { + id = lst_facturas->fp->grabar_registro(lst_facturas->fp, entrada, size, &error);*/ + /*id_texto = tmp->fp_texto->grabar_registro(tmp->fp_texto, fact.nota, 400, &error);*/ + /* TODO : -1 == id_texto !!!!!!!! XXX XXX XXX XXX XXX XXX XXX */ + /*agregar_nodo_factura(lst_facturas, crear_nodo_factura(id, -1, fact.numero)); + free(entrada); + } + */ +/* form_destruir(form); */ + + free(fact->items); + free(fact); + + werase(win); + wrefresh(win); + delwin(items); + delwin(win); +} + void fact_agregar(char *s) { WINDOW *win, *items; @@ -263,6 +383,7 @@ void fact_agregar(char *s) form_ejecutar(form, 1,1); fact.numero = form_obtener_valor_int(form, "Numero de Factura"); + fprintf(stderr, "Agregando numero %d\n", fact.numero); strcpy(fact.emision, form_obtener_valor_char(form, "Fecha Emision")); strcpy(fact.vencimiento, form_obtener_valor_char(form, "Fecha Vto")); fact.numero_remito = form_obtener_valor_int(form, "Nro Remito"); @@ -384,3 +505,20 @@ void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, EMUFS_REG_SIZE return tmp; } +static int procesar_leer_factura(t_Factura *dst, void *src, EMUFS_REG_SIZE size, t_LstFacturas *lst) +{ + switch (lst->fp->tipo) { + case T1: + case T2: + return 0; + case T3: + /* Se que tengo 10 items */ + /* TODO : Ver porque leer_registro_tipo3 tira mal el size */ + size = lst->fp->tam_reg; + 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)); + } + return 0; +} + diff --git a/emufs_gui/facturas.h b/emufs_gui/facturas.h index ffb4995..cdf92bc 100644 --- a/emufs_gui/facturas.h +++ b/emufs_gui/facturas.h @@ -53,6 +53,7 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque); int fact_liberar(t_LstFacturas *l); void fact_agregar(char *s); +void fact_modificar(char *s); #endif diff --git a/emufs_gui/gui.c b/emufs_gui/gui.c index 84837c2..99418b8 100644 --- a/emufs_gui/gui.c +++ b/emufs_gui/gui.c @@ -136,7 +136,7 @@ int main(int argc, char *argv[]) dialog = msg_box(stdscr, COLS, LINES, "Generando archivos ..."); if (argc == 4) { art_cargar(argv[1], atoi(argv[2]), atoi(argv[3])); - if (!fact_cargar("facturas.xml", 3, 100)) + if (!fact_cargar("facturas.xml", 3, 400)) fprintf(stderr, "ERROR CARGANDO FACTURAS\n"); } else art_cargar(NULL, -1, -1); @@ -196,7 +196,7 @@ void menu_facturas() items[1] = new_item(opciones[1], "Eliminar una factura existente."); /* set_item_userptr(items[1], art_eliminar); */ items[2] = new_item(opciones[2], "Modificar una factura existente."); -/* set_item_userptr(items[2], art_modificar); */ + set_item_userptr(items[2], fact_modificar); items[3] = new_item(opciones[3], "Volver al menu anterior."); items[4] = NULL;