1 /* HomeBank -- Free, easy, personal accounting for everyone. 2 * Copyright (C) 1995-2021 Maxime DOYEN 3 * 4 * This file is part of HomeBank. 5 * 6 * HomeBank is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * HomeBank is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef __HB_FILTER_H__ 21 #define __HB_FILTER_H__ 22 23 24 /* 25 ** filter options 26 */ 27 enum 28 { 29 FLT_GRP_DATE, 30 FLT_GRP_CATEGORY, 31 FLT_GRP_PAYEE, 32 FLT_GRP_ACCOUNT, 33 FLT_GRP_TEXT, 34 FLT_GRP_AMOUNT, 35 FLT_GRP_PAYMODE, 36 FLT_GRP_STATUS, 37 FLT_GRP_TYPE, 38 FLT_GRP_MAX 39 }; 40 41 42 enum 43 { 44 FLT_RANGE_THISMONTH = 0, 45 FLT_RANGE_LASTMONTH = 1, 46 FLT_RANGE_THISQUARTER = 2, 47 FLT_RANGE_LASTQUARTER = 3, 48 FLT_RANGE_THISYEAR = 4, 49 FLT_RANGE_LASTYEAR = 5, //was not existing on 4.5 50 // 6 separator 51 FLT_RANGE_LAST30DAYS = 7, 52 FLT_RANGE_LAST60DAYS = 8, 53 FLT_RANGE_LAST90DAYS = 9, 54 FLT_RANGE_LAST12MONTHS = 10, 55 // 11 separator 56 FLT_RANGE_OTHER = 12, 57 // 13 separator 58 FLT_RANGE_ALLDATE = 14 59 }; 60 61 62 enum 63 { 64 FLT_TYPE_ALL = 0, 65 // 1 separator 66 FLT_TYPE_EXPENSE = 2, 67 FLT_TYPE_INCOME = 3, 68 FLT_TYPE_INTXFER = 4, 69 }; 70 71 72 enum 73 { 74 FLT_STATUS_ALL = 0, 75 // 1 separator 76 FLT_STATUS_CLEARED = 2, 77 FLT_STATUS_UNCLEARED = 3, 78 FLT_STATUS_RECONCILED = 4, 79 FLT_STATUS_UNRECONCILED = 5, 80 // 6 separator 81 FLT_STATUS_UNCATEGORIZED = 7, 82 }; 83 84 85 enum 86 { 87 FLT_QSEARCH_MEMO = 1<<0, 88 FLT_QSEARCH_INFO = 1<<1, 89 FLT_QSEARCH_PAYEE = 1<<2, 90 FLT_QSEARCH_CATEGORY = 1<<3, 91 FLT_QSEARCH_TAGS = 1<<4, 92 FLT_QSEARCH_AMOUNT = 1<<5 93 }; 94 95 96 typedef struct _filter Filter; 97 98 struct _filter 99 { 100 101 gshort option[FLT_GRP_MAX]; 102 gint range; 103 guint32 mindate, maxdate; 104 //gint rawtype, rawstatus; 105 106 gint type, status; 107 108 gboolean paymode[NUM_PAYMODE_MAX]; 109 110 gdouble minamount, maxamount; 111 112 gboolean exact; 113 114 gchar *info; 115 gchar *memo; 116 gchar *tag; 117 118 /* unsaved datas */ 119 gint nbdaysfuture; 120 gboolean forceadd; 121 gboolean forcechg; 122 gboolean forceremind; 123 gboolean forcevoid; 124 gchar last_tab[8]; /* keep last active tab */ 125 }; 126 127 128 Filter *da_flt_malloc(void); 129 void da_flt_free(Filter *flt); 130 131 void da_flt_destroy(void); 132 void da_flt_new(void); 133 134 void da_flt_status_acc_set(Filter *flt, guint32 kacc, gboolean status); 135 void da_flt_status_pay_set(Filter *flt, guint32 kpay, gboolean status); 136 void da_flt_status_cat_set(Filter *flt, guint32 kcat, gboolean status); 137 gboolean da_flt_status_acc_get(Filter *flt, guint32 kacc); 138 gboolean da_flt_status_pay_get(Filter *flt, guint32 kpay); 139 gboolean da_flt_status_cat_get(Filter *flt, guint32 kcat); 140 141 void filter_status_acc_clear_except(Filter *flt, guint32 selkey); 142 void filter_status_pay_clear_except(Filter *flt, guint32 selkey); 143 void filter_status_cat_clear_except(Filter *flt, guint32 selkey); 144 145 void filter_reset(Filter *flt); 146 void filter_preset_daterange_set(Filter *flt, gint range, guint32 kacc); 147 void filter_preset_type_set(Filter *flt, gint value); 148 gboolean filter_preset_daterange_future_enable(gint range); 149 void filter_preset_daterange_add_futuregap(Filter *filter, gint nbdays); 150 151 void filter_set_tag_by_id(Filter *flt, guint32 key); 152 void filter_preset_status_set(Filter *flt, gint value); 153 154 gchar *filter_daterange_text_get(Filter *flt); 155 gboolean filter_txn_search_match(gchar *needle, Transaction *txn, gint flags); 156 gboolean filter_tpl_search_match(gchar *needle, Archive *arc); 157 158 gint filter_txn_match(Filter *flt, Transaction *ope); 159 160 #endif 161