#include "facturas.h"
+#include "idx.h"
static t_LstFacturas *lst_facturas;
{
xmlDocPtr document;
xmlNode *node, *inicio;
- int error = 0, cant_items;
+ int error = 0, cant_items, i;
char *prop;
EMUFS_REG_SIZE size;
t_LstFacturas *tmp;
- EMUFS_REG_ID id; /*, *indices, indices_cant;*/
+ EMUFS_REG_ID id, *indices, indices_cant;
lst_facturas = NULL;
if (strcmp(node->name, "FACTURA") == 0) {
t_Factura fact;
void *save;
- memset(&fact, '*', sizeof(t_Factura));
+ memset(&fact, 0, sizeof(t_Factura));
prop = xml_get_prop(node, "NroFac");
fact.numero = atoi(prop); xmlFree(prop);
prop = xml_get_prop(node, "PorcDoI");
xmlFreeDoc(document);
xmlCleanupParser();
} else {
-/* tmp->fp = emufs_abrir("articulos");*/
+ tmp->fp = emufs_abrir("facturas");
+ tmp->fp_texto = emufs_abrir("notas");
+
/* Ahora trato de recuperar la info */
-/* indices = emufs_idx_get(tmp->fp, &indices_cant);
+ indices = emufs_idx_get(tmp->fp, &indices_cant);
for(i=0; i<indices_cant; i++) {
- t_Articulo art;
- void *save;*/
+ t_Factura art;
+ void *save;
/* Leo el registro */
-/* save = tmp->fp->leer_registro(tmp->fp, indices[i], &size, &error);
- if (procesar_leer_articulo(&art, save, size, tmp) == 1) {
- agregar_nodo_articulo(tmp, crear_nodo_articulo(indices[i], art.numero));
+ 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);*/
+ free(indices);
}
return lst_facturas;
}
WINDOW *msg_box(WINDOW *win, int w, int h, const char *format, ...);
void msg_box_free(WINDOW *padre, WINDOW *win);
-typedef enum {PARAM_OK, SHOW_HELP, TIPO_NO_DEFINIDO, TIPO_INVALIDO, BLOQUE_NO_DEFINIDO} t_Param;
+typedef enum {
+ PARAM_OK, /* Parametros estan ok */
+ NO_ART_FILE, /* No se especifico nombre de archivo Articulos */
+ NO_FACT_FILE, /* No se especifico nombre de archivo Facturas */
+ SHOW_HELP, /* Mostrar ayuda encontrado */
+ TIPO_NO_DEFINIDO, /* No se definio tipo de archivo */
+ TIPO_INVALIDO, /* El valor de tipo de archivo no es valido */
+ BLOQUE_NO_DEFINIDO, /* No se especifico tamaño de bloque */
+ NULL_BLOCK_FOUND /* Tamaño de bloque <= 0!!! */
+} t_Param;
+
+struct _mis_param_ {
+ int xml_fact; /* Pos en argv del archivo XML a usar para facturas */
+ int xml_art; /* Pos en argv del archivo XML a usar para articulos */
+ char tipo_arch_fact; /* Tipo de archivo para Facturas */
+ char tipo_arch_art; /* Tipo de archivo para Articulos */
+ EMUFS_BLOCK_SIZE tam_bloque_fact;
+ EMUFS_BLOCK_SIZE tam_bloque_art;
+} parametros;
/* Verifica Argumentos */
t_Param param_ok(int argc, char *argv[])
for(i=1; i<argc; i++) {
if ((strcmp(argv[i], "-h")==0) || (strcmp(argv[i], "--help")==0)) return SHOW_HELP;
- if (strcmp(argv[i]+strlen(argv[i])-3, "xml") == 0) {
- /* Luego del archivo XML debe seguir el tipo */
- if ((i+1)<argc) {
- n = atoi(argv[i+1]);
- if ((n < 1) || (n > 3)) return TIPO_INVALIDO;
- if (((n == 1) || (n == 3)) && ((i+2)>=argc))
- return BLOQUE_NO_DEFINIDO;
+ if (strcmp(argv[i], "-a") == 0) { /* Articulos! */
+ i++;
+ if (i >= argc) return SHOW_HELP;
+ if (strcmp(argv[i]+strlen(argv[i])-3, "xml") == 0) {
+ /* Luego del archivo XML debe seguir el tipo */
+ if ((i+1)<argc) {
+ n = atoi(argv[i+1]);
+ if ((n < 1) || (n > 3)) return TIPO_INVALIDO;
+ if (((n == 1) || (n == 3)) && ((i+2)>=argc))
+ return BLOQUE_NO_DEFINIDO;
+ parametros.tipo_arch_art = n;
+ parametros.tam_bloque_art = atoi(argv[i+2]);
+ if (parametros.tam_bloque_art <= 0) return NULL_BLOCK_FOUND;
+ parametros.xml_art = i;
+ } else {
+ /* Ops, no hay mas parametros */
+ return TIPO_NO_DEFINIDO;
+ }
} else {
- /* Ops, no hay mas parametros */
- return TIPO_NO_DEFINIDO;
+ return NO_ART_FILE;
}
- }
+ } /* Articulos */
+
+ if (strcmp(argv[i], "-f") == 0) { /* Facturas! */
+ i++;
+ if (i >= argc) return SHOW_HELP;
+ if (strcmp(argv[i]+strlen(argv[i])-3, "xml") == 0) {
+ /* Luego del archivo XML debe seguir el tipo */
+ if ((i+1)<argc) {
+ n = atoi(argv[i+1]);
+ if ((n < 1) || (n > 3)) return TIPO_INVALIDO;
+ if (((n == 1) || (n == 3)) && ((i+2)>=argc))
+ return BLOQUE_NO_DEFINIDO;
+ parametros.tipo_arch_fact = n;
+ parametros.tam_bloque_fact = atoi(argv[i+2]);
+ if (parametros.tam_bloque_fact <= 0) return NULL_BLOCK_FOUND;
+ parametros.xml_fact = i;
+ } else {
+ /* Ops, no hay mas parametros */
+ return TIPO_NO_DEFINIDO;
+ }
+ } else {
+ return NO_FACT_FILE;
+ }
+ } /* Facturas */
+
}
-
return PARAM_OK;
}
void print_help(char *s)
{
printf("EMUFS - 1v0\n");
- printf("Modo de uso : %s [<archivo articulos XML> tipo=[1|2|3]]\n", s);
- printf("\nSi especifica un archivo XML desde donde cargar los articulos debera tambien especificar el tipo");
- printf(" de archivo a crear, siendo 1, 2, 3\n");
+ printf("Modo de uso : %s [-[f|a] <archivo articulos XML> tipo [tamaño bloque]] \n", s);
+ printf(" -f indica que lo que está a continuación seran los datos para generar el archivo de facturas.\n");
+ printf(" -a indica que lo que está a continuación seran los datos para generar el archivo de articulos.\n");
+ printf(" 'tipo' es el modo de archivo. Siendo :\n");
+ printf(" 1 - Registros long. variables con bloque parametrizado\n");
+ printf(" 2 - Registros long. variables sin bloque\n");
+ printf(" 3 - Registros long fija con bloque parametrizado\n");
+ printf(" tamaño bloque debe ser especificado solo en aquellos tipos que lo requiera.\n");
}
int main(int argc, char *argv[])
int c, fin=0;
WINDOW *dialog;
+ parametros.xml_art = parametros.xml_fact = -1;
switch (param_ok(argc, argv)) {
case SHOW_HELP:
print_help(argv[0]);
printf("\t2 - Archivo de registros variables sin bloques.\n");
printf("\t3 - Archivos de bloque parametrizado y registro de long. parametrizada.\n");
return 2;
+ case NO_ART_FILE:
+ printf("Falta parámetro requerido.\nHa utilizado el modificador -a para crear los articulos a partir de un XML pero no ha especificado ningún archivo XML.\n");
+ return 3;
+ case NO_FACT_FILE:
+ printf("Falta parámetro requerido.\nHa utilizado el modificador -f para crear las facturas a partir de un XML pero no ha especificado ningún archivo XML.\n");
+ return 3;
+ case NULL_BLOCK_FOUND:
+ printf("Error de parámerto.\nHa ingresado un valor nulo como tamaño de bloque.\n");
+ return 4;
case PARAM_OK:
fin = 0;
}
wrefresh(stdscr);
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", 1, 400))
- fprintf(stderr, "ERROR CARGANDO FACTURAS\n");
- } else
+
+ if (parametros.xml_art != -1) {
+ art_cargar(argv[parametros.xml_art], parametros.tipo_arch_art, parametros.tam_bloque_art);
+ } else {
art_cargar(NULL, -1, -1);
+ }
+ if (parametros.xml_fact != -1) {
+ fact_cargar(argv[parametros.xml_fact], parametros.tipo_arch_fact, parametros.tam_bloque_fact);
+ } else {
+ fact_cargar(NULL, -1, -1);
+ }
msg_box_free(stdscr, dialog);
stats = fp->leer_estadisticas(fp);
win = newwin(LINES-4, COLS-2, 2, 1);
-
+ curs_set(0);
+
+ wattron(win, COLOR_PAIR(COLOR_YELLOW));
+ wattron(win, A_BOLD);
mvwaddstr(win, 1, 1, "Tipo de Archivo : ");
+ wattroff(win, A_BOLD);
+ wattroff(win, COLOR_PAIR(COLOR_YELLOW));
switch (fp->tipo) {
case T1:
waddstr(win, "Registro long. variable con bloque parametrizado");
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de bloque : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", fp->tam_bloque);
+ waddstr(win, s);
break;
case T2:
waddstr(win, "Registro long. variable sin bloques");
break;
case T3:
waddstr(win, "Registro long. fija con bloque parametrizado");
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de bloque : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", fp->tam_bloque);
+ waddstr(win, s);
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de registro : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", fp->tam_reg);
+ waddstr(win, s);
}
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Cant. Registros : ");
+ wattroff(win, A_BOLD);
sprintf(s, "%lu", stats.tam_archivo);
waddstr(win, s);
- mvwaddstr(win, i++, 1, "Tamaño de Archivo (bytes) : ");
- sprintf(s, "%lu", stats.tam_archivo_bytes);
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de Archivo : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.tam_archivo_bytes);
waddstr(win, s);
- mvwaddstr(win, i++, 1, "Tamaño de Info de Control (bytes) : ");
- sprintf(s, "%lu", stats.info_control);
+ wattron(win, A_BOLD);
+ mvwaddstr(win, i++, 1, "Tamaño de Info de Control : ");
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.info_control);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Media de espacio libre : ");
- sprintf(s, "%lu", stats.media_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes/bloque", stats.media_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Espacio Libre : ");
- sprintf(s, "%lu", stats.total_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.total_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Maximo de Espacio libre : ");
- sprintf(s, "%lu", stats.max_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.max_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Minimo de Espacio libre : ");
- sprintf(s, "%lu", stats.min_fs);
+ wattroff(win, A_BOLD);
+ sprintf(s, "%lu bytes", stats.min_fs);
waddstr(win, s);
+ wattron(win, A_BOLD);
mvwaddstr(win, i++, 1, "Cantidad de bloques : ");
+ wattroff(win, A_BOLD);
sprintf(s, "%lu", stats.cant_bloques);
waddstr(win, s);
+
+ wattron(win, A_BLINK);
+ mvwaddstr(win, i+2, 1, "Presione una tecla para continuar.");
+ wattroff(win, A_BLINK);
+
+ wrefresh(win);
+ getch();
werase(win);
wrefresh(win);
delwin(win);