]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/facturas.c
Expongo el obtener siguiente de secuencial indexado, via la funcion en indince obtene...
[z.facultad/75.06/emufs.git] / emufs_gui / facturas.c
index 48ff1c9e0c399c1d27b4a847e1226593a4f65e17..2df27ea46cf68c12fe04e5e842736385aa409d83 100644 (file)
@@ -238,6 +238,10 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                emufs_agregar_indice(tmp->fp, "vto", IND_SELECCION, param->ind_fac[2].tipo_arbol, IDX_STRING, STRUCT_OFFSET(factura, emision), param->ind_fac[2].tam_bloque, 1);
                emufs_agregar_indice(tmp->fp, "emision", IND_EXAHUSTIVO, param->ind_fac[1].tipo_arbol, IDX_STRING, STRUCT_OFFSET(factura, emision), param->ind_fac[1].tam_bloque, 0);
                emufs_agregar_indice(tmp->fp, "numero", IND_PRIMARIO, param->ind_fac[0].tipo_arbol, IDX_INT, 0, param->ind_fac[0].tam_bloque, 0);
+
+               /* Creo el indice externo por Nro Articulo */
+               tmp->fp->externo = emufs_indice_crear(tmp->fp, "articulo", IND_SELECCION, IND_B, IDX_INT, 0, 512, 0);
+
                tmp->fp_texto = emufs_crear("notas", param->tipo_arch_nota, param->tam_bloque_nota, 100);
                for (node=inicio ; node ; node = node->next) {
                        if (node->type == XML_ELEMENT_NODE) {
@@ -273,8 +277,21 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                                        fact.reg_nota = id;
                                        save = procesar_guardar_factura(&fact, lst_facturas, &size);
                                        if (save != NULL) {
+                                               int i;
                                                error = 0;
-                                               tmp->fp->grabar_registro(tmp->fp, save, size, &error);
+                                               id = tmp->fp->grabar_registro(tmp->fp, save, size, &error);
+                                       
+                                               /* Agrego los Items al indice externo */
+                                               for(i=0; i<fact.cant_items; i++) {
+                                                       if (fact.items[i].numero != 0) {
+                                                               CLAVE _k; /* HACK Para hacer mas rapido */
+                                                               INDICE_DATO _dato;
+                                                               _k.i_clave = fact.items[i].numero;
+                                                               _dato.id = id;
+                                                               tmp->fp->externo->agregar_entrada(tmp->fp->externo, _k, _dato);
+                                                       }
+                                               }
+                                               
                                                if (fact.items) {
                                                        free(fact.items);
                                                        fact.items = NULL;
@@ -291,8 +308,6 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                xmlFreeDoc(document);
                xmlCleanupParser();
        } else {
-#ifdef NO_SE_USA_MAS
-               /* TODO RECUPERAR INDICES DESDE EL ARCHIVO */
                PERR("Voy a recuperar desde un archivo");
                tmp->fp = emufs_abrir("facturas");
                if (tmp->fp == NULL) {
@@ -309,21 +324,6 @@ t_LstFacturas *fact_cargar(t_Parametros *param)
                        lst_facturas = NULL;
                        return NULL;
                }
-
-               /* Ahora trato de recuperar la info */
-               indices = emufs_idx_get(tmp->fp, &indices_cant);
-               for(i=0; i<indices_cant; i++) {
-                       t_Factura art;
-                       void *save;
-                       /* Leo el registro */
-                       save = tmp->fp->leer_registro(tmp->fp, indices[i], &size, &error);
-                       if (procesar_leer_factura(&art, save, size, tmp) == 1) {
-                               agregar_nodo_factura(tmp, crear_nodo_factura(indices[i], art.reg_nota, art.numero));
-                               free(save);
-                       }
-               }
-               free(indices);
-#endif
        }
 
        PERR("Facturas todo Ok");
@@ -649,8 +649,9 @@ void fact_agregar(char *s)
                                cant++;
                                its = (t_Item *)realloc(its, cant*sizeof(t_Item));
                                if (its != NULL) {
+                                       art_actualizar_stock(atoi(entrada), atoi(cv));
                                        its[cant-1].numero = atoi(entrada);
-                                       strcpy(its[cant-1].cv, form_obtener_valor_char(form, "CV"));
+                                       strcpy(its[cant-1].cv, cv);
                                        strcpy(its[cant-1].pvu, art->pvu);
                                }
                                free(art);
@@ -1478,3 +1479,20 @@ void fact_recorrer()
        }
 }
 
+int fact_hay_con_item(int numero)
+{
+       INDICE *idx;
+       CLAVE k;
+       INDICE_DATO dato;
+       /* Busco si existe alguna factura que contenga al articulo "numero" */
+       idx = lst_facturas->fp->externo;
+
+       k.i_clave = numero;
+       dato = idx->existe_entrada(idx, k);
+
+       if (dato.id == -1)
+               return 0; /* No existe factura que contenga este articulo!! */
+
+       return 1; /* Hay alguna factura que contiene el articulo */
+}
+