+
+#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;
+}
+