* src/gnome/window-register.c: add a Transaction->Invoice item

* src/engine/Query.c: add GUID predicate


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@3887 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2001-04-03 22:24:08 +00:00
parent b9c52ead8f
commit e867dbcc6d
4 changed files with 126 additions and 0 deletions

View File

@ -1,5 +1,9 @@
2001-04-03 Dave Peticolas <dave@krondo.com>
* src/gnome/window-register.c: add a Transaction->Invoice item
* src/engine/Query.c: add GUID predicate
* src/gnome/dialog-commodity.c: add namespace picker getter.
Show "CURRENCY" instead of "ISO4217" when displaying.

View File

@ -85,6 +85,7 @@ static int xaccBalanceMatchPredicate(Split * s, PredicateData * pd);
static int xaccClearedMatchPredicate(Split * s, PredicateData * pd);
static int xaccDateMatchPredicate(Split * s, PredicateData * pd);
static int xaccDescriptionMatchPredicate(Split * s, PredicateData * pd);
static int xaccGUIDMatchPredicate(Split * s, PredicateData * pd);
static int xaccMemoMatchPredicate(Split * s, PredicateData * pd);
static int xaccNumberMatchPredicate(Split * s, PredicateData * pd);
static int xaccSharePriceMatchPredicate(Split * s, PredicateData * pd);
@ -1232,6 +1233,9 @@ xaccQueryGetPredicate (pr_type_t term_type)
case PR_DESC:
p = & xaccDescriptionMatchPredicate;
break;
case PR_GUID:
p = & xaccGUIDMatchPredicate;
break;
case PR_MEMO:
p = & xaccMemoMatchPredicate;
break;
@ -1862,6 +1866,38 @@ xaccQueryAddBalanceMatch(Query * q, balance_match_t how, QueryOp op)
xaccFreeQuery(qr);
}
/********************************************************************
* xaccQueryAddGUIDMatch
* Add a 'guid' filter to an existing query.
********************************************************************/
void
xaccQueryAddGUIDMatch(Query * q, GUID *guid, QueryOp op)
{
Query * qs = xaccMallocQuery();
QueryTerm * qt = g_new0(QueryTerm, 1);
Query * qr;
qt->p = & xaccGUIDMatchPredicate;
qt->data.type = PD_GUID;
qt->data.base.term_type = PR_GUID;
qt->data.base.sense = 1;
qt->data.guid.guid = guid ? *guid : *xaccGUIDNULL ();
xaccInitQuery(qs, qt);
xaccQuerySetGroup(qs, q->acct_group);
if(xaccQueryHasTerms(q)) {
qr = xaccQueryMerge(q, qs, op);
}
else {
qr = xaccQueryMerge(q, qs, QUERY_OR);
}
xaccQuerySwapTerms(q, qr);
xaccFreeQuery(qs);
xaccFreeQuery(qr);
}
/*******************************************************************
* xaccQueryPurgeTerms
* delete any terms of a particular type
@ -2050,6 +2086,38 @@ xaccDescriptionMatchPredicate(Split * s, PredicateData * pd) {
return string_match_predicate(descript, pd);
}
/*******************************************************************
* xaccGUIDMatchPredicate
*******************************************************************/
static int
xaccGUIDMatchPredicate(Split * s, PredicateData * pd)
{
GUIDPredicateData *gpd;
GUID *guid;
assert(s && pd);
assert(pd->type == PD_GUID);
guid = &pd->guid.guid;
switch (xaccGUIDType (guid))
{
case GNC_ID_NONE:
case GNC_ID_NULL:
default:
return 0;
case GNC_ID_ACCOUNT:
return xaccSplitGetAccount (s) == xaccAccountLookup (guid);
case GNC_ID_TRANS:
return xaccSplitGetParent (s) == xaccTransLookup (guid);
case GNC_ID_SPLIT:
return s == xaccSplitLookup (guid);
}
}
/*******************************************************************
* xaccNumberMatchPredicate
*******************************************************************/

View File

@ -64,6 +64,7 @@ typedef enum {
PD_STRING,
PD_CLEARED,
PD_BALANCE,
PD_GUID,
PD_MISC
} pd_type_t;
@ -75,6 +76,7 @@ typedef enum {
PR_CLEARED,
PR_DATE,
PR_DESC,
PR_GUID,
PR_MEMO,
PR_MISC,
PR_NUM,
@ -187,6 +189,13 @@ typedef struct {
balance_match_t how;
} BalancePredicateData;
typedef struct {
pd_type_t type;
pr_type_t term_type;
int sense;
GUID guid;
} GUIDPredicateData;
typedef struct {
pd_type_t type;
pr_type_t term_type;
@ -204,6 +213,7 @@ typedef union {
StringPredicateData str;
ClearedPredicateData cleared;
BalancePredicateData balance;
GUIDPredicateData guid;
MiscPredicateData misc;
} PredicateData;
@ -280,6 +290,7 @@ void xaccQueryAddMemoMatch(Query * q, const char * matchstring,
int case_sens, int use_regexp, QueryOp op);
void xaccQueryAddClearedMatch(Query * q, cleared_match_t how, QueryOp op);
void xaccQueryAddBalanceMatch(Query * q, balance_match_t how, QueryOp op);
void xaccQueryAddGUIDMatch(Query * q, GUID *guid, QueryOp op);
void xaccQueryAddMiscMatch(Query * q, Predicate p, int how, int data,
QueryOp op);

View File

@ -141,6 +141,7 @@ static void cancelCB(GtkWidget *w, gpointer data);
static void closeCB(GtkWidget *w, gpointer data);
static void reportCB(GtkWidget *w, gpointer data);
static void invoiceCB(GtkWidget *w, gpointer data);
static void invoiceTransCB(GtkWidget *w, gpointer data);
static void printReportCB(GtkWidget *w, gpointer data);
static void dateCB(GtkWidget *w, gpointer data);
static void expand_trans_cb(GtkWidget *widget, gpointer data);
@ -1538,6 +1539,14 @@ gnc_register_create_menu_bar(RegWindow *regData, GtkWidget *statusbar)
0, 0, NULL
},
GNOMEUIINFO_SEPARATOR,
{
GNOME_APP_UI_ITEM,
N_("Invoice"),
N_("Open an invoice report window for this transaction"),
invoiceTransCB, NULL, NULL,
GNOME_APP_PIXMAP_NONE, NULL,
0, 0, NULL
},
{
GNOME_APP_UI_ITEM,
N_("_Print Check... (unfinished!)"),
@ -3117,6 +3126,40 @@ invoiceCB (GtkWidget *widget, gpointer data)
report_helper (regData, func, NULL);
}
/********************************************************************\
* invoiceTransCB *
* *
* Args: widget - the widget that called us *
* data - regData - the data struct for this register *
* Return: none *
\********************************************************************/
static void
invoiceTransCB (GtkWidget *widget, gpointer data)
{
RegWindow *regData = data;
SplitRegister *reg;
Split *split;
Query *query;
SCM func;
reg = xaccLedgerDisplayGetSR (regData->ledger);
split = xaccSRGetCurrentSplit (reg);
if (!split)
return;
func = gh_eval_str ("gnc:show-invoice-report");
g_return_if_fail (gh_procedure_p (func));
query = xaccMallocQuery ();
xaccQuerySetGroup (query, gncGetCurrentGroup ());
xaccQueryAddGUIDMatch (query, xaccSplitGetGUID (split), QUERY_AND);
report_helper (regData, func, query);
}
/********************************************************************\
* printReportCB *
* *