4 static t_LstFacturas *lst_facturas;
5 static int al_azar(int min, int max);
7 /* Procesa una factura antes de enviarla al archivo para guardarla */
8 static void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size);
9 static t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num);
10 static int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo);
12 t_Reg_Factura *crear_nodo_factura(EMUFS_REG_ID reg, EMUFS_REG_ID texto, unsigned int num)
15 if (reg == EMUFS_NOT_FOUND) return NULL;
16 tmp = malloc(sizeof(t_Reg_Factura));
17 if (tmp == NULL) return NULL;
18 tmp->sig = tmp->ant = NULL;
20 tmp->texto_reg = texto;
26 int agregar_nodo_factura(t_LstFacturas *lst, t_Reg_Factura *nodo)
28 if (nodo == NULL) return 0;
31 lst->primero->ant = nodo;
32 nodo->sig = lst->primero;
40 /* es por cada mes a generar */
41 #define CANT_FACTURAS 1500
43 t_LstFacturas *fact_cargar(const char *filename)
45 int i, numero, size, error = 0, cant;
46 char *estados[6] = {"PN", "CD", "CM", "CF", "PM", "NC"};
47 char *fps[6] = {"CO", "CR", "CH"};
52 lst_facturas = (t_LstFacturas *)malloc(sizeof(t_LstFacturas));
54 if (filename != NULL) {
55 lst_facturas->fp = emufs_crear("facturas", T3, sizeof(t_Factura)*20, sizeof(t_Factura));
56 /* Genero las facturas en forma automática */
57 /* Genero las facturas de fecha Abril 2004 */
61 for(i=0; i<CANT_FACTURAS; i++) {
62 /* Entre 10 y 15 ITEMS! */
64 sprintf(fact.emision, "200404%02d", al_azar(1, 30));
65 sprintf(fact.vencimiento, "200406%02d", al_azar(1, 30));
66 fact.numero_remito = numero; /* QUE PONGO? */
67 strcpy(fact.estado, estados[al_azar(0, 5)]);
68 strcpy(fact.fp, fps[al_azar(0, 2)]); /* FIXME : esto y estado se relacionan */
69 fact.procdoi = 0; /* TODO : relacionar con el estado */
70 sprintf(fact.ctacte, "%05d", al_azar(11111, 99999));
71 sprintf(fact.cheque, "%04d-%03d-%05d-%03d", al_azar(1, 9999), al_azar(1,999),al_azar(1,99999),al_azar(1,999));
75 save = procesar_guardar_factura(&fact, lst_facturas, &size);
77 id = lst_facturas->fp->grabar_registro(lst_facturas->fp, save, size, &error);
78 agregar_nodo_factura(lst_facturas, crear_nodo_factura(id, EMUFS_NOT_FOUND, numero));
83 /* Cargo un archivo existente */
89 int fact_liberar(t_LstFacturas *l)
91 if (l == NULL) l = lst_facturas;
92 if (l == NULL) return 1;
94 emufs_destruir(l->fp);
101 int al_azar(int min, int max)
103 return (min + rand()%(max-min));
106 void *procesar_guardar_factura(t_Factura *f, t_LstFacturas *lst, int *size)
111 switch (lst->fp->tipo) {
114 /* Calculo el tamaño que voy a necesitar */
116 i[1] = sizeof(char)*(strlen(f->emision)+1); /* +1 por el \0 para separar */
117 i[2] = sizeof(char)*(strlen(f->vencimiento)+1); /* +1 por el \0 para separar */
119 i[4] = sizeof(char)*(strlen(f->estado)+1); /* +1 por el \0 para separar */
120 i[5] = sizeof(char)*(strlen(f->fp)+1); /* +1 por el \0 para separar */
121 i[6] = sizeof(float);
122 i[7] = sizeof(char)*(strlen(f->ctacte)+1); /* +1 por el \0 para separar */
123 i[8] = sizeof(char)*(strlen(f->cheque)+1); /* +1 por el \0 para separar */
124 (*size) = i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8];
125 tmp = (char *)malloc(*size);
126 if (tmp == NULL) return NULL;
127 /* Ahora copio la info */
128 memcpy(tmp, &f->numero, i[0]);
129 memcpy(tmp+i[0], f->emision, i[1]);
130 memcpy(tmp+i[0]+i[1], f->vencimiento, i[2]);
131 memcpy(tmp+i[0]+i[1]+i[2], &f->numero_remito, i[3]);
132 memcpy(tmp+i[0]+i[1]+i[2]+i[3], f->estado, i[4]);
133 memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4], f->fp, i[5]);
134 memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5], &f->procdoi, i[6]);
135 memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6], f->ctacte, i[7]);
136 memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7], f->cheque, i[8]);
139 tmp = (char *)malloc(sizeof(t_Factura));
140 if (tmp == NULL) return NULL;
141 memcpy(tmp, f, sizeof(t_Factura));
142 (*size) = sizeof(t_Factura);