]> git.llucax.com Git - z.facultad/75.06/emufs.git/blobdiff - emufs_gui/facturas.c
* Se agregan leyendas a "Ver Registro" para que sea mas facil adivinar
[z.facultad/75.06/emufs.git] / emufs_gui / facturas.c
index fbf1b25e9e0516d0de21452726b5131c74d87e4b..0016c9f1c805f4adb970edfdba704153217ec48c 100644 (file)
@@ -6,24 +6,80 @@ static int al_azar(int min, int max);
 
 /* Procesa una factura antes de enviarla al archivo para guardarla */
 static void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size);
 
 /* Procesa una factura antes de enviarla al archivo para guardarla */
 static void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size);
+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);
+
+int eliminar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo)
+{
+       if (nodo == NULL) return 0;
+       if (nodo->ant == NULL) {
+               /* Me piden borrar el primer nodo */
+               if (nodo->sig) {
+                       nodo->sig->ant = NULL;
+               }
+               lst->primero = nodo->sig;
+       } else {
+               if (nodo->sig) {
+                       nodo->sig->ant = nodo->ant;
+               }
+               nodo->ant->sig = nodo->sig;
+       }
+       free(nodo);
+       return 1;
+}
+
+t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num)
+{
+       t_Reg_Factura *tmp;
+       if (reg == EMUFS_NOT_FOUND) return NULL;
+       tmp = malloc(sizeof(t_Reg_Factura));
+       if (tmp == NULL) return NULL;
+       tmp->sig = tmp->ant = NULL;
+       tmp->num_reg = reg;
+       tmp->texto_reg = texto;
+       tmp->numero = num;
+
+       return tmp;
+}
+
+int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo)
+{
+       if (nodo == NULL) return 0;
+
+       if (lst->primero) {
+               lst->primero->ant = nodo;
+               nodo->sig = lst->primero;
+               lst->primero = nodo;
+       } else {
+               lst->primero = nodo;
+       }
+       return 1;
+}
 
 /* es por cada mes a generar */
 
 /* es por cada mes a generar */
-#define CANT_FACTURAS 500
+#define CANT_FACTURAS 1500
 
 t_LstFacturas *fact_cargar(const char *filename)
 {
 
 t_LstFacturas *fact_cargar(const char *filename)
 {
-       int i, numero, size;
+       int i, numero, size, error = 0, cant;
        char *estados[6] = {"PN", "CD", "CM", "CF", "PM", "NC"}; 
        char *fps[6] = {"CO", "CR", "CH"}; 
        void *save;
        t_Factura fact;
        char *estados[6] = {"PN", "CD", "CM", "CF", "PM", "NC"}; 
        char *fps[6] = {"CO", "CR", "CH"}; 
        void *save;
        t_Factura fact;
+       EMUFS_REG_ID id;
 
 
-       if (filename == NULL) {
+       lst_facturas = (t_LstFacturas *)malloc(sizeof(t_LstFacturas));
+       lst_facturas->primero = NULL;
+
+       if (filename != NULL) {
+               lst_facturas->fp = emufs_crear("facturas", T3, sizeof(t_Factura)*20, sizeof(t_Factura));
                /* Genero las facturas en forma automática */
                /* Genero las facturas de fecha Abril 2004 */
                srand(time(NULL));
                numero = 0;
                /* Genero las facturas en forma automática */
                /* Genero las facturas de fecha Abril 2004 */
                srand(time(NULL));
                numero = 0;
-               for(i=0; i<CANT_FACTURAS*0.1; i++) {
+               cant = 0;
+               for(i=0; i<CANT_FACTURAS; i++) {
                        /* Entre 10 y 15 ITEMS! */
                        fact.numero = numero;
                        sprintf(fact.emision, "200404%02d", al_azar(1, 30));
                        /* Entre 10 y 15 ITEMS! */
                        fact.numero = numero;
                        sprintf(fact.emision, "200404%02d", al_azar(1, 30));
@@ -39,7 +95,9 @@ t_LstFacturas *fact_cargar(const char *filename)
                        /* Guardo */
                        save = procesar_guardar_factura(&fact, lst_facturas, &size);
                        if (save != NULL) {
                        /* Guardo */
                        save = procesar_guardar_factura(&fact, lst_facturas, &size);
                        if (save != NULL) {
-                               lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size);
+                               id = lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size, &error);
+                               agregar_nodo_factura(lst_facturas, crear_nodo_factura(id, EMUFS_NOT_FOUND, numero));
+                               free(save);
                        }
                }
        } else {
                        }
                }
        } else {
@@ -49,6 +107,18 @@ t_LstFacturas *fact_cargar(const char *filename)
        return lst_facturas;
 }
 
        return lst_facturas;
 }
 
+int fact_liberar(t_LstFacturas *l)
+{
+       if (l == NULL) l = lst_facturas;
+       if (l == NULL) return 1;
+
+       emufs_destruir(l->fp);
+       free(l);
+
+       lst_facturas = NULL;
+       return 0;
+}
+
 int al_azar(int min, int max)
 {
        return (min + rand()%(max-min));
 int al_azar(int min, int max)
 {
        return (min + rand()%(max-min));
@@ -72,7 +142,8 @@ void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size)
                        i[6] = sizeof(float);
                        i[7] = sizeof(char)*(strlen(f->ctacte)+1); /* +1 por el \0 para separar */
                        i[8] = sizeof(char)*(strlen(f->cheque)+1); /* +1 por el \0 para separar */
                        i[6] = sizeof(float);
                        i[7] = sizeof(char)*(strlen(f->ctacte)+1); /* +1 por el \0 para separar */
                        i[8] = sizeof(char)*(strlen(f->cheque)+1); /* +1 por el \0 para separar */
-                       tmp = (char *)malloc(i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]);
+                       (*size) = i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8];
+                       tmp = (char *)malloc(*size);
                        if (tmp == NULL) return NULL;
                        /* Ahora copio la info */
                        memcpy(tmp, &f->numero, i[0]);
                        if (tmp == NULL) return NULL;
                        /* Ahora copio la info */
                        memcpy(tmp, &f->numero, i[0]);