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)
{
char desde_fecha[10], hasta_fecha[10];
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);
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 */
- while (k.i_clave != -1) {
+ 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, &cant);
+ datos = idx->buscar_entradas(idx, k_menor, &cant);
for(i=0; i<cant; i++) {
error = 1;
k1.i_clave = datos[i].id;
fact->nota = lst->fp_texto->leer_registro(lst->fp_texto, k, &size, &error);
*/
}
- lista_agregar_fila(lista,
- fact.numero,
- fact.emision,
- get_estado(fact.estado),
- get_forma_pago(fact.fp)
- );
+ 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);
- k = idx->obtener_sig_clave(idx, k);
+ if (fact.items) free(fact.items);
+ k_menor = idx->obtener_sig_clave(idx, k_menor);
}
curs_set(0);