]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
* Empiezo con las Facturas en la GUI
authorRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 11 Apr 2004 00:24:37 +0000 (00:24 +0000)
committerRicardo Markiewicz <gazer.arg@gmail.com>
Sun, 11 Apr 2004 00:24:37 +0000 (00:24 +0000)
emufs_gui/Makefile
emufs_gui/articulos.c
emufs_gui/articulos.h
emufs_gui/facturas.c [new file with mode: 0644]
emufs_gui/facturas.h [new file with mode: 0644]
emufs_gui/gui.c
emufs_gui/malloc_debug.c [deleted file]
emufs_gui/malloc_debug.h [deleted file]

index 450599d4f9d41ddc4c501f164618402eb99d0b79..25606db4b2a3c3f4b1e9c2c12ce77dd1035b81ba 100644 (file)
@@ -3,7 +3,7 @@ LDFLAGS= -lmenu -lncurses -lxml2
 
 all: gui 
 
 
 all: gui 
 
-gui: form.c gui.c malloc_debug.c articulos.c ../emufs/libemufs.a
+gui: form.c gui.c articulos.c facturas.c ../emufs/libemufs.a
 
 clean:
        @rm -vf *.o gui
 
 clean:
        @rm -vf *.o gui
index ca82c02afb58555bb0b98c3d4e83d28277ea0d21..f816fc5f5016735eb381a311d63bffa371c6ee5f 100644 (file)
@@ -1,9 +1,11 @@
 
 #include "articulos.h"
 
 
 #include "articulos.h"
 
-t_LstArticulos *lst_articulos;
+static t_LstArticulos *lst_articulos;
 
 
-t_Articulo *art_form_buscar(WINDOW *win);
+static t_Articulo *art_form_buscar(WINDOW *win);
+
+static int procesar_articulo(t_Articulo *dst, void *src, int size, t_LstArticulos *lst);
 
 t_LstArticulos *art_cargar(const char *filename)
 {
 
 t_LstArticulos *art_cargar(const char *filename)
 {
@@ -17,10 +19,8 @@ t_LstArticulos *art_cargar(const char *filename)
        if (tmp == NULL) return NULL;
        tmp->cant = 0;
        /*      tmp->array = (t_Reg_Articulo *)malloc(sizeof(t_Reg_Articulo)*tmp->cant);*/
        if (tmp == NULL) return NULL;
        tmp->cant = 0;
        /*      tmp->array = (t_Reg_Articulo *)malloc(sizeof(t_Reg_Articulo)*tmp->cant);*/
-       printf("%p\n", tmp->array);
 
        if (tmp->array == NULL) {
 
        if (tmp->array == NULL) {
-               printf("Fallo malloc\n");
                free(tmp);
                return NULL;
        }
                free(tmp);
                return NULL;
        }
@@ -111,20 +111,18 @@ t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero)
        int n = atoi(numero);
 
        if (lst == NULL) lst = lst_articulos;
        int n = atoi(numero);
 
        if (lst == NULL) lst = lst_articulos;
+       if (lst == NULL) return NULL;
 
        for(i=0; i<lst->cant; i++) {
                if (n == lst->array[i].numero) {
                        art = (t_Articulo *)malloc(sizeof(t_Articulo));
                        /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */
                        tmp = lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, &size);
 
        for(i=0; i<lst->cant; i++) {
                if (n == lst->array[i].numero) {
                        art = (t_Articulo *)malloc(sizeof(t_Articulo));
                        /* Ya se cual tengo que retornar. Ahora veo si lo cargo desde el archivo */
                        tmp = lst->fp->leer_registro(lst->fp, lst->array[i].num_reg, &size);
-                       if (tmp == NULL) {
-                               return NULL;
-                       }
-                       if (size == sizeof(t_Articulo)) {
-                               memcpy(art, tmp, sizeof(t_Articulo));
-                       } else {
+                       
+                       if (procesar_articulo(art, tmp, size, lst_articulos) != 1) {
                                free(art);
                                free(art);
-                               art = NULL;
+                               free(tmp);
+                               return NULL;
                        }
                        free(tmp);
                        return art;
                        }
                        free(tmp);
                        return art;
@@ -253,3 +251,20 @@ void art_agregar(char *s)
        delwin(win);
 }
 
        delwin(win);
 }
 
+int procesar_articulo(t_Articulo *dst, void *src, int size, t_LstArticulos *lst)
+{
+       switch (lst->fp->tipo) {
+               case T1:
+               case T2:
+                       /* TODO : Leer campos variales */
+                       break;
+               case T3:
+                       if (size != sizeof(t_Articulo)) {
+                               return 0; /* El tamaño no encaja!! */
+                       }
+                       memcpy(dst, src, size);
+       }
+
+       return 1; /* Todo ok */
+}
+
index da3a3d58f4e996e4b4ea3bca41f31515cc874a75..3800f491005277b012a1ca5a76c6780809be35b3 100644 (file)
@@ -9,19 +9,6 @@
 #include "form.h"
 #include "emufs.h"
 
 #include "form.h"
 #include "emufs.h"
 
-/* FACTURAS!!
-       char numero[9];
-       char emision[9];
-       char vencimiento[9];
-       char numero_remito[9];
-       char estado[3];
-       char fp[3];
-       char procdoi[6];
-       char ctacte[6];
-       char cheque[19];
-       char *nota;
-*/
-       
 /* Tipo de dato articulo */
 typedef struct _articulo_ {
        unsigned int numero;
 /* Tipo de dato articulo */
 typedef struct _articulo_ {
        unsigned int numero;
@@ -35,7 +22,7 @@ typedef struct _articulo_ {
 
 /* tipo de dato registro de articulo */
 typedef struct _reg_articulo_ {
 
 /* tipo de dato registro de articulo */
 typedef struct _reg_articulo_ {
-       unsigned int num_reg; /* numero de registro en el archivo */
+       EMUFS_REG_ID num_reg; /* numero de registro en el archivo */
        unsigned int numero; /* codigo de articulo */
 } t_Reg_Articulo;
 
        unsigned int numero; /* codigo de articulo */
 } t_Reg_Articulo;
 
diff --git a/emufs_gui/facturas.c b/emufs_gui/facturas.c
new file mode 100644 (file)
index 0000000..fbf1b25
--- /dev/null
@@ -0,0 +1,96 @@
+
+#include "facturas.h"
+
+static t_LstFacturas *lst_facturas;
+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);
+
+/* es por cada mes a generar */
+#define CANT_FACTURAS 500
+
+t_LstFacturas *fact_cargar(const char *filename)
+{
+       int i, numero, size;
+       char *estados[6] = {"PN", "CD", "CM", "CF", "PM", "NC"}; 
+       char *fps[6] = {"CO", "CR", "CH"}; 
+       void *save;
+       t_Factura fact;
+
+       if (filename == NULL) {
+               /* 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++) {
+                       /* Entre 10 y 15 ITEMS! */
+                       fact.numero = numero;
+                       sprintf(fact.emision, "200404%02d", al_azar(1, 30));
+                       sprintf(fact.vencimiento, "200406%02d", al_azar(1, 30));
+                       fact.numero_remito = numero; /* QUE PONGO? */
+                       strcpy(fact.estado, estados[al_azar(0, 5)]);
+                       strcpy(fact.fp, fps[al_azar(0, 2)]); /* FIXME : esto y estado se relacionan */
+                       fact.procdoi = 0; /* TODO : relacionar con el estado */
+                       sprintf(fact.ctacte, "%05d", al_azar(11111, 99999));
+                       sprintf(fact.cheque, "%04d-%03d-%05d-%03d", al_azar(1, 9999), al_azar(1,999),al_azar(1,99999),al_azar(1,999));
+                       fact.nota = NULL;
+
+                       /* Guardo */
+                       save = procesar_guardar_factura(&fact, lst_facturas, &size);
+                       if (save != NULL) {
+                               lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size);
+                       }
+               }
+       } else {
+               /* Cargo un archivo existente */
+       }
+
+       return lst_facturas;
+}
+
+int al_azar(int min, int max)
+{
+       return (min + rand()%(max-min));
+}
+
+void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size)
+{
+       char *tmp=NULL;
+       int i[9];
+
+       switch (lst->fp->tipo) {
+               case T1:
+               case T2:
+                       /* Calculo el tamaño que voy a necesitar */
+                       i[0] = sizeof(int);
+                       i[1] = sizeof(char)*(strlen(f->emision)+1); /* +1 por el \0 para separar */
+                       i[2] = sizeof(char)*(strlen(f->vencimiento)+1); /* +1 por el \0 para separar */
+                       i[3] = sizeof(int);
+                       i[4] = sizeof(char)*(strlen(f->estado)+1); /* +1 por el \0 para separar */
+                       i[5] = sizeof(char)*(strlen(f->fp)+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]);
+                       if (tmp == NULL) return NULL;
+                       /* Ahora copio la info */
+                       memcpy(tmp, &f->numero, i[0]);
+                       memcpy(tmp+i[0], f->emision, i[1]);
+                       memcpy(tmp+i[0]+i[1], f->vencimiento, i[2]);
+                       memcpy(tmp+i[0]+i[1]+i[2], &f->numero_remito, i[3]);
+                       memcpy(tmp+i[0]+i[1]+i[2]+i[3], f->estado, i[4]);
+                       memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4], f->fp, i[5]);
+                       memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5], &f->procdoi, i[6]);
+                       memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6], f->ctacte, i[7]);
+                       memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7], f->cheque, i[8]);
+               break;
+               case T3:
+                       tmp = (char *)malloc(sizeof(t_Factura));
+                       if (tmp == NULL) return NULL;
+                       memcpy(tmp, f, sizeof(t_Factura));
+                       (*size) = sizeof(t_Factura);
+       }
+       return tmp;
+}
+
diff --git a/emufs_gui/facturas.h b/emufs_gui/facturas.h
new file mode 100644 (file)
index 0000000..d8108b0
--- /dev/null
@@ -0,0 +1,40 @@
+
+#ifndef _FACTURAS_H_
+#define _FACTURAS_H_
+
+#include "emufs.h"
+#include <string.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+
+typedef struct _facturas_ {
+       int numero;
+       char emision[9];
+       char vencimiento[9];
+       int numero_remito;
+       char estado[3];
+       char fp[3];
+       float procdoi;
+       char ctacte[6];
+       char cheque[19];
+       char *nota;
+} t_Factura;
+
+typedef struct _reg_factura_ {
+       EMUFS_REG_ID num_reg; /* numero de registro en el archivo */
+       EMUFS_REG_ID texto_reg; /* numero de registro donde se encuentra el texto */
+       unsigned int numero; /* codigo de factura */
+} t_Reg_Factura;
+
+typedef struct _lista_facturas_ {
+       t_Reg_Factura array[100];
+       unsigned int cant;
+       EMUFS *fp; /* Filepointer al archivo donde estan los datos */
+       EMUFS *fp_texto; /* Filepointer al archivo donde estan los textos */
+} t_LstFacturas;
+       
+t_LstFacturas *fact_cargar(const char *filename);
+
+#endif
+
index 88130d51a4d00f3f6ffe4d90b0159f44b49e005e..bc2bacf9bfafd6e8504c6c9376a1a27aced86888 100644 (file)
@@ -118,16 +118,16 @@ void menu_articulos()
        items[4] = NULL;
 
        menu = new_menu((ITEM **)items);
        items[4] = NULL;
 
        menu = new_menu((ITEM **)items);
-       menu_win = newwin(8, 68, 3, 1);
+       menu_win = newwin(8, COLS-2, 3, 1);
        keypad(menu_win, TRUE);
        set_menu_mark(menu, " > ");
        set_menu_win(menu, menu_win);
        keypad(menu_win, TRUE);
        set_menu_mark(menu, " > ");
        set_menu_win(menu, menu_win);
-       set_menu_sub(menu, derwin(menu_win, 5, 66, 3, 1));
+       set_menu_sub(menu, derwin(menu_win, 5, COLS-4, 3, 1));
 
        box(menu_win, 0, 0);
        mvwaddch(menu_win, 2, 0, ACS_LTEE);
 
        box(menu_win, 0, 0);
        mvwaddch(menu_win, 2, 0, ACS_LTEE);
-       mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
-       mvwaddch(menu_win, 2, 67, ACS_RTEE);
+       mvwhline(menu_win, 2, 1, ACS_HLINE, COLS-3);
+       mvwaddch(menu_win, 2, COLS-3, ACS_RTEE);
        wattron(menu_win, COLOR_PAIR(COLOR_RED));
        mvwaddstr(menu_win, 1, 1, "Menu Articulos");
        wattroff(menu_win, COLOR_PAIR(COLOR_RED));
        wattron(menu_win, COLOR_PAIR(COLOR_RED));
        mvwaddstr(menu_win, 1, 1, "Menu Articulos");
        wattroff(menu_win, COLOR_PAIR(COLOR_RED));
@@ -204,16 +204,16 @@ int main_menu()
        items[5] = NULL;
 
        menu = new_menu((ITEM **)items);
        items[5] = NULL;
 
        menu = new_menu((ITEM **)items);
-       menu_win = newwin(9, 68, 3, 1);
+       menu_win = newwin(9, COLS-2, 3, 1);
        keypad(menu_win, TRUE);
        set_menu_mark(menu, " > ");
        set_menu_win(menu, menu_win);
        keypad(menu_win, TRUE);
        set_menu_mark(menu, " > ");
        set_menu_win(menu, menu_win);
-       set_menu_sub(menu, derwin(menu_win, 6, 66, 3, 1));
+       set_menu_sub(menu, derwin(menu_win, 6, COLS-4, 3, 1));
 
        box(menu_win, 0, 0);
        mvwaddch(menu_win, 2, 0, ACS_LTEE);
 
        box(menu_win, 0, 0);
        mvwaddch(menu_win, 2, 0, ACS_LTEE);
-       mvwhline(menu_win, 2, 1, ACS_HLINE, 67);
-       mvwaddch(menu_win, 2, 67, ACS_RTEE);
+       mvwhline(menu_win, 2, 1, ACS_HLINE, COLS-3);
+       mvwaddch(menu_win, 2, COLS-3, ACS_RTEE);
        wattron(menu_win, COLOR_PAIR(COLOR_RED));
        mvwaddstr(menu_win, 1, 1, "Menu Principal");
        wattroff(menu_win, COLOR_PAIR(COLOR_RED));
        wattron(menu_win, COLOR_PAIR(COLOR_RED));
        mvwaddstr(menu_win, 1, 1, "Menu Principal");
        wattroff(menu_win, COLOR_PAIR(COLOR_RED));
diff --git a/emufs_gui/malloc_debug.c b/emufs_gui/malloc_debug.c
deleted file mode 100644 (file)
index cd2a35a..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/***************************************************************************
- *            malloc_debug.c
- *
- *  Sat Aug 30 17:00:48 2003
- *  Copyright  2003  Ricardo Markiewicz
- *  rmarkie@fi.uba.ar
- ****************************************************************************/
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-/* este debe ser el ultimo include, para evitar errores de compilacion */
-#include "malloc_debug.h"
-
-/* Tengo que sacar los macros dentro de malloc_debug para evitar problemas */
-#undef malloc
-#undef free
-
-typedef struct _t_malloc_ {
-       void *ptr;
-       int size;
-       char file[21];
-       int line;
-       time_t hora;
-       struct _t_malloc_ *next;
-} t_MDAlloc;
-
-static t_MDAlloc *lstMalloc = NULL;
-
-void *MD_malloc(int size, int line, char *file)
-{
-       void *ptr;
-       t_MDAlloc *nodo;
-
-       ptr = malloc(size);
-       if (ptr == NULL) {
-               /* No registro nada porque no hay memoria! */
-               return NULL;
-       }
-
-       nodo = (t_MDAlloc *)malloc(sizeof(t_MDAlloc));
-       if (nodo == NULL) {
-               free(ptr);
-               return NULL;
-       }
-       nodo->ptr = ptr;
-       nodo->size = size;
-       nodo->line = line;
-       nodo->hora = time(NULL);
-       strncpy(nodo->file, file, 20);
-
-       /* Agrego el nodo al principio */
-       nodo->next = lstMalloc;
-       lstMalloc = nodo;
-
-       return ptr;
-}
-
-void MD_free(void *ptr)
-{
-       /* Tengo que buscar el nodo alocado */
-       t_MDAlloc *node, *padre;
-       node = lstMalloc;
-       padre = NULL;
-       while (node != NULL) {
-               if (node->ptr == ptr) {
-                       /* lo encontre! */
-                       if (padre != NULL) {
-                               padre->next = node->next;
-                       } else {
-                               lstMalloc = node->next;
-                       }
-                       free(node);
-                       break;
-               }
-               padre = node;
-               node = node->next;
-       }
-       free(ptr);
-}
-
-void MD_Listar()
-{
-       struct tm *hora;
-       t_MDAlloc *nodo;
-       nodo = lstMalloc;
-       printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------");
-       printf("|Direccion | Tamaño | %-20s | Linea   | Fecha |   Hora   |\n", "Archivo");
-       printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------");
-       while (nodo != NULL) {
-               hora = localtime(&nodo->hora);
-               printf("|%p | % 6d | %-20s | % 7d | %02d/%02d | %02d:%02d:%02d |\n", \
-                       nodo->ptr, nodo->size, nodo->file, nodo->line, hora->tm_mday, hora->tm_mon, \
-                       hora->tm_hour, hora->tm_min, hora->tm_sec);
-               printf("+----------+--------+-%-20s-+---------+-------+----------+\n", "--------------------");
-               free(hora);
-               nodo = nodo->next;
-       }
-}
diff --git a/emufs_gui/malloc_debug.h b/emufs_gui/malloc_debug.h
deleted file mode 100644 (file)
index 00ba43f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/***************************************************************************
- *            malloc_debug.h
- *
- *  Sat Aug 30 16:55:51 2003
- *  Copyright  2003  Ricardo Markiewicz
- *  rmarkie@fi.uba.ar
- ****************************************************************************/
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-/* Si ya esta definido malloc y/o free, lo dehabilito */
-
-#include <stdio.h>
-
-/* Macro para emular la funcion malloc y free */
-#define malloc(x) MD_malloc(x, __LINE__, __FILE__)
-#define free(x) MD_free(x)
-
-#ifndef _MALLOC_DEBUG_H
-#define _MALLOC_DEBUG_H 1
-
-void *MD_malloc(int size, int line, char *file);
-void MD_free(void *);
-void MD_Listar();
-
-#endif
-