X-Git-Url: https://git.llucax.com/z.facultad/75.06/emufs.git/blobdiff_plain/51536b1a336fbdc9be86f84f1de2ce01f243969d..db30ec34669e71266f038fcf7cb2386fa210d531:/emufs_gui/facturas.c?ds=inline diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c index 9f5bcfd..0ac4861 100644 --- a/emufs_gui/facturas.c +++ b/emufs_gui/facturas.c @@ -8,11 +8,15 @@ 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 *); +static char *leer_nota(xmlNode *, int max); t_LstFacturas *fact_get_lst() { @@ -97,8 +101,10 @@ t_Item *leer_items(xmlNode *node, int *cant, int size) prop = xml_get_prop(node, "NroArtículo"); tmp[count-1].numero = atoi(prop); xmlFree(prop); - strcpy(tmp[count-1].cv, prop = xml_get_prop(node, "CV")); xmlFree(prop); - strcpy(tmp[count-1].pvu, prop = xml_get_prop(node, "PVU")); xmlFree(prop); + strncpy(tmp[count-1].cv, prop = xml_get_prop(node, "CV"), 8); xmlFree(prop); + tmp[count-1].cv[8] = '\0'; + strncpy(tmp[count-1].pvu, prop = xml_get_prop(node, "PVU"), 8); xmlFree(prop); + tmp[count-1].pvu[8] = '\0'; } } node = node->next; @@ -114,12 +120,14 @@ t_Item *leer_items(xmlNode *node, int *cant, int size) while (node) { if (node->type == XML_ELEMENT_NODE) { if (strcmp(node->name, "ITEMVENTA") == 0) { - memset(&tmp[count], '*', sizeof(t_Item)); + memset(&tmp[count], 0, sizeof(t_Item)); prop = xml_get_prop(node, "NroArtículo"); tmp[count].numero = atoi(prop); xmlFree(prop); - strcpy(tmp[count].cv, prop = xml_get_prop(node, "CV")); xmlFree(prop); - strcpy(tmp[count].pvu, prop = xml_get_prop(node, "PVU")); xmlFree(prop); + strncpy(tmp[count].cv, prop = xml_get_prop(node, "CV"), 8); xmlFree(prop); + tmp[count].cv[8] = '\0'; + strncpy(tmp[count].pvu, prop = xml_get_prop(node, "PVU"), 8); xmlFree(prop); + tmp[count].pvu[8] = '\0'; count++; } } @@ -130,7 +138,7 @@ t_Item *leer_items(xmlNode *node, int *cant, int size) return tmp; } -char *leer_nota(xmlNode *node) +char *leer_nota(xmlNode *node, int max) { xmlNode *tmp; char *salida; @@ -145,11 +153,22 @@ char *leer_nota(xmlNode *node) } if (tmp) { - salida = (char *)malloc(sizeof(char)*(strlen(XML_GET_CONTENT(tmp->children))+1)); - strcpy(salida, XML_GET_CONTENT(tmp->children)); + if (max == -1) { + salida = (char *)malloc(sizeof(char)*(strlen(XML_GET_CONTENT(tmp->children))+1)); + strcpy(salida, XML_GET_CONTENT(tmp->children)); + } else { + salida = (char *)malloc(sizeof(char)*max); + strncpy(salida, XML_GET_CONTENT(tmp->children), max-1); + salida[max-1] = '\0'; + } } else { - salida = (char *)malloc(sizeof(char)); - salida[0] = '\0'; + if (max == -1) { + salida = (char *)malloc(sizeof(char)); + salida[0] = '\0'; + } else { + salida = (char *)malloc(sizeof(char)*max); + memset(salida, 0, max); + } } return salida; } @@ -205,7 +224,11 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque, int t cant_items = 0; } tmp->fp = emufs_crear("facturas", tipo-1, tam_bloque, sizeof(t_Factura)-sizeof(char *)-sizeof(t_Item*)+cant_items*sizeof(t_Item)); - tmp->fp_texto = emufs_crear("notas", tipo_nota, bloque_nota, 100); +#ifdef DEBUG + fprintf(stderr, "Facturas : Tipo=%d Tam Bloque = %d\n", tipo-1, tam_bloque); + fprintf(stderr, "Notas : Tipo=%d Tam Bloque = %d\n", tipo_nota-1, bloque_nota); +#endif + tmp->fp_texto = emufs_crear("notas", tipo_nota-1, bloque_nota, 100); for (node=inicio ; node ; node = node->next) { if (node->type == XML_ELEMENT_NODE) { if (strcmp(node->name, "FACTURA") == 0) { @@ -231,11 +254,11 @@ t_LstFacturas *fact_cargar(const char *filename, int tipo, int tam_bloque, int t strncpy(fact.cheque, prop = xml_get_prop(node, "NroCheque"), 18); xmlFree(prop); fact.cheque[18] = '\0'; - fact.nota = leer_nota(node); + fact.nota = leer_nota(node, (((tipo-1)==T3)?100:-1)); fact.items = leer_items(node, &fact.cant_items, ((tipo-1)==T3)?10:-1); error = 0; - id = tmp->fp_texto->grabar_registro(tmp->fp_texto, fact.nota, strlen(fact.nota)+1, &error); + id = tmp->fp_texto->grabar_registro(tmp->fp_texto, fact.nota, ((tipo-1)==T3)?100:(strlen(fact.nota)+1), &error); fact.reg_nota = id; save = procesar_guardar_factura(&fact, lst_facturas, &size); if (save != NULL) { @@ -399,6 +422,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; @@ -410,11 +434,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();