/* 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 */
-#define CANT_FACTURAS 500
+#define CANT_FACTURAS 1500
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;
+ 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;
- 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));
/* 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 {
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));
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]);