cant_items = 0;
}
tmp->fp = emufs_crear("facturas", param->tipo_arch_fact, param->tam_bloque_fact, sizeof(t_Factura)-sizeof(char *)-sizeof(t_Item*)+cant_items*sizeof(t_Item));
- emufs_agregar_indice(tmp->fp, "emision", IND_EXAHUSTIVO, IND_B, IDX_STRING, STRUCT_OFFSET(factura, emision), 512);
- emufs_agregar_indice(tmp->fp, "numero", IND_PRIMARIO, IND_B, IDX_INT, 0, 512);
+ emufs_agregar_indice(tmp->fp, "emision", IND_EXAHUSTIVO, param->ind_fac[1].tipo_arbol, IDX_STRING, STRUCT_OFFSET(factura, emision), param->ind_fac[1].tam_bloque, 0);
+ emufs_agregar_indice(tmp->fp, "numero", IND_PRIMARIO, param->ind_fac[0].tipo_arbol, IDX_INT, 0, param->ind_fac[0].tam_bloque, 0);
tmp->fp_texto = emufs_crear("notas", param->tipo_arch_nota, param->tam_bloque_nota, 100);
for (node=inicio ; node ; node = node->next) {
if (node->type == XML_ELEMENT_NODE) {
t_Factura *fact;
EMUFS_REG_ID id;
CLAVE k;
+ INDICE_DATO dummy;
win = newwin(LINES-4, COLS-2, 2, 1);
box(win, 0, 0);
}
k = emufs_indice_generar_clave_desde_valor(lst_facturas->fp->indices, (char *)(&fact->numero));
- lst_facturas->fp->borrar_registro(lst_facturas->fp, k);
+ lst_facturas->fp->borrar_registro(lst_facturas->fp, k, dummy);
k.i_clave = fact->reg_nota;
- lst_facturas->fp_texto->borrar_registro(lst_facturas->fp_texto, k);
+ lst_facturas->fp_texto->borrar_registro(lst_facturas->fp_texto, k, dummy);
if (fact->items) free(fact->items);
if (fact->nota) free(fact->nota);
entrada = procesar_guardar_factura(fact, lst_facturas, &size);
if (entrada) {
CLAVE k;
+ INDICE_DATO dummy;
k = emufs_indice_generar_clave_desde_valor(lst_facturas->fp->indices, (char *)&fact->numero);
- lst_facturas->fp->modificar_registro(lst_facturas->fp, k, entrada, size, &error);
+ lst_facturas->fp->modificar_registro(lst_facturas->fp, k, entrada, size, &error, dummy);
k.i_clave = id_texto;
- id_texto = lst_facturas->fp_texto->modificar_registro(lst_facturas->fp_texto, k, fact->nota, strlen(fact->nota)+1, &error);
+ id_texto = lst_facturas->fp_texto->modificar_registro(lst_facturas->fp_texto, k, fact->nota, strlen(fact->nota)+1, &error, dummy);
free(entrada);
}
switch (lst->fp->tipo) {
case T1:
case T2:
+ case T4:
/* Calculo el tamaƱo que voy a necesitar */
i[0] = sizeof(int);
i[1] = sizeof(float);
memcpy(tmp+i[0]+i[1]+i[2]+i[3]+i[4]+i[5]+i[6]+i[7]+i[8]+i[9]+i[10], f->items, i[11]);
break;
case T3:
+ case T5:
(*size) = sizeof(t_Factura)-sizeof(char *)-sizeof(t_Item *) + f->cant_items*sizeof(t_Item);
tmp = (char *)malloc(*size);
if (tmp == NULL) return NULL;
switch (lst->fp->tipo) {
case T1:
case T2:
+ case T4:
ini = (char *)src;
/* Copio los campos numericos, muy facil:-) */
memcpy(&dst->numero, ini, sizeof(int));
return 0;
break;
case T3:
+ case T5:
/* Se que tengo 10 items */
/* TODO : Ver porque leer_registro_tipo3 tira mal el size */
size = lst->fp->tam_reg;
lista_agregar_columna(lista, "Numero", DATO_INT, 0, 8); /* numero */
lista_agregar_columna(lista, "Fecha", DATO_STR, 10, 9); /* emision */
lista_agregar_columna(lista, "Estado", DATO_STR, 20, 19); /* estado */
- lista_agregar_columna(lista, "Forma de Pago", DATO_STR, 40, 19); /* fp */
+ lista_agregar_columna(lista, "F. Pago", DATO_STR, 40, 9); /* fp */
/* Leo los datos desde el archivo */
for(i=desde_codigo; i<=hasta_codigo; i++) {
delwin(win);
}
+float get_importe_factura(t_Item *items, int cant, float interes)
+{
+ float a=0.0f;
+ int i;
+ for(i=0; i<cant; i++) {
+ a += atof(items[i].cv)*atof(items[i].pvu);
+ }
+ a += a*interes/100.0f;
+ return a;
+}
+
+
void fact_consultas_fechas(char *s)
{
- EMUFS_REG_ID dummy;
char desde_fecha[10], hasta_fecha[10];
- int i;
- t_Factura *factura;
+ char estado[6];
t_Lista *lista;
t_Form *form;
WINDOW *win, *win1;
INDICE *idx;
- CLAVE k;
+ CLAVE k_menor, k_mayor;
win = newwin(LINES-4, COLS-2, 2, 1);
win1 = derwin(win, LINES-6, COLS-4, 1, 1);
form = form_crear(win1);
form_agregar_widget(form, INPUT, "Desde Fecha", 8, "");
form_agregar_widget(form, INPUT, "Hasta Fecha", 8, "");
-
+ form_agregar_widget(form, RADIO, "Estado", 7, "Todos,PN,CD,CM,SF,PM,NC");
form_ejecutar(form, 2, 2);
strcpy(desde_fecha, form_obtener_valor_char(form, "Desde Fecha"));
strcpy(hasta_fecha, form_obtener_valor_char(form, "Hasta Fecha"));
+ strcpy(estado, form_obtener_valor_char(form, "Estado"));
form_destruir(form);
werase(win1);
idx = emufs_buscar_indice_por_nombre(lst_facturas->fp, "emision");
if (idx==NULL) PERR("INDICE EMISION NO SE ENCUENTRA!!");
if (strlen(desde_fecha) == 0) {
- k = idx->obtener_menor_clave(idx);
- emufs_indice_obtener_valor_desde_clave(idx, k, desde_fecha);
+ k_menor = idx->obtener_menor_clave(idx);
+ emufs_indice_obtener_valor_desde_clave(idx, k_menor, desde_fecha);
PERR("OBTUVE MENOR CLAVE DESDE EL INDICE");
PERR(desde_fecha);
}
if (strlen(hasta_fecha) == 0) {
- k = idx->obtener_mayor_clave(idx);
- emufs_indice_obtener_valor_desde_clave(idx, k, hasta_fecha);
+ k_mayor = idx->obtener_mayor_clave(idx);
+ emufs_indice_obtener_valor_desde_clave(idx, k_mayor, hasta_fecha);
PERR("OBTUVE MAYOR CLAVE DESDE EL INDICE");
PERR(hasta_fecha);
}
lista_agregar_columna(lista, "Numero", DATO_INT, 0, 8); /* numero */
lista_agregar_columna(lista, "Fecha", DATO_STR, 10, 9); /* emision */
lista_agregar_columna(lista, "Estado", DATO_STR, 20, 19); /* estado */
- lista_agregar_columna(lista, "Forma de Pago", DATO_STR, 40, 19); /* fp */
+ lista_agregar_columna(lista, "F. Pago", DATO_STR, 40, 9); /* fp */
+ lista_agregar_columna(lista, "Importe", DATO_FLOAT, 50, 8); /* importe */
/* Leo los datos desde el archivo */
-/* for(i=desde_codigo; i<=hasta_codigo; i++) {
- factura = fact_buscar(lst_facturas, i, &dummy, &dummy);
- if (factura != NULL) {
- lista_agregar_fila(lista,
- factura->numero,
- factura->emision,
- get_estado(factura->estado),
- get_forma_pago(factura->fp)
- );
+ while (k_menor.i_clave != -1) {
+ t_Factura fact;
+ int error, cant, i;
+ char *leo;
+ EMUFS_REG_SIZE size;
+ INDICE_DATO *datos;
+ CLAVE k1;
+ datos = idx->buscar_entradas(idx, k_menor, &cant);
+ for(i=0; i<cant; i++) {
+ error = 1;
+ k1.i_clave = datos[i].id;
+ leo = lst_facturas->fp->leer_registro(lst_facturas->fp, k1, &size, &error);
+ if (leo != NULL) {
+ procesar_leer_factura(&fact, leo, size, lst_facturas);
+ free(leo);
+ /*k.i_clave = fact->reg_nota;
+ error = 0;
+ fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, k, &size, &error);
+ */
+ }
+ if (strcmp(estado, "Todos") != 0) {
+ if (strcmp(estado, fact.estado) == 0) {
+ fprintf(stderr, "Agrego factura num=%d con %d items\n", fact.numero, fact.cant_items);
+ lista_agregar_fila_ordenada(lista,
+ fact.numero,
+ fact.emision,
+ get_estado(fact.estado),
+ get_forma_pago(fact.fp),
+ get_importe_factura(fact.items, fact.cant_items, fact.procdoi)
+ );
+ }
+ }
}
+ if (datos) free(datos);
+ if (fact.items) free(fact.items);
+ k_menor = idx->obtener_sig_clave(idx, k_menor);
}
curs_set(0);
lista_ejecutar(lista);
curs_set(1);
- */
wrefresh(win1);
wrefresh(win);
werase(win1);