mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
* 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:
parent
b9c52ead8f
commit
e867dbcc6d
@ -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.
|
||||
|
||||
|
@ -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
|
||||
*******************************************************************/
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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 *
|
||||
* *
|
||||
|
Loading…
Reference in New Issue
Block a user