static void search_new_item_cb (GtkButton *button, GNCSearchWindow *sw) { gpointer res; g_return_if_fail (sw->new_item_cb); res = (sw->new_item_cb)(sw->user_data); if (res) { const GncGUID *guid = (const GncGUID *) ((sw->get_guid->param_getfcn)(res, sw->get_guid)); QofQueryOp op = QOF_QUERY_OR; if (!sw->q) { if (!sw->start_q) { sw->start_q = qof_query_create_for (sw->search_for); qof_query_set_book (sw->start_q, gnc_get_current_book ()); } sw->q = qof_query_copy (sw->start_q); op = QOF_QUERY_AND; } qof_query_add_guid_match (sw->q, g_slist_prepend (NULL, QOF_PARAM_GUID), guid, op); /* Watch this entity so we'll refresh once it's actually changed */ gnc_gui_component_watch_entity (sw->component_id, guid, QOF_EVENT_MODIFY); } }
/********************************************************************\ * gnc_query_list_new * * creates the query list * * * * Args: param_list - the list of params * * query - the query to use to find entries * * Returns: the query list widget, or NULL if there was a problem. * \********************************************************************/ void gnc_query_list_construct (GNCQueryList *list, GList *param_list, Query *query) { GNCQueryListPriv *priv; g_return_if_fail(list); g_return_if_fail(param_list); g_return_if_fail(query); g_return_if_fail(IS_GNC_QUERY_LIST(list)); /* more configuration */ list->query = qof_query_copy(query); list->column_params = param_list; /* cache the function to get the guid of this query type */ priv = GNC_QUERY_LIST_GET_PRIVATE(list); priv->get_guid = qof_class_get_parameter (qof_query_get_search_for(query), QOF_PARAM_GUID); /* Initialize the CList */ gnc_query_list_init_clist(list); /* Set initial sort order */ gnc_query_list_set_query_sort(list, TRUE); }
void gnc_query_list_reset_query (GNCQueryList *list, Query *query) { g_return_if_fail(list); g_return_if_fail(query); g_return_if_fail (IS_GNC_QUERY_LIST(list)); qof_query_destroy(list->query); list->query = qof_query_copy(query); gnc_query_list_set_query_sort(list, TRUE); }
void gnc_ledger_display_set_query (GNCLedgerDisplay *ledger_display, Query *q) { if (!ledger_display || !q) return; g_return_if_fail (ledger_display->ld_type == LD_GL); qof_query_destroy (ledger_display->query); ledger_display->query = qof_query_copy (q); }
GNCSearchWindow * gnc_ui_find_transactions_dialog_create2 (GNCLedgerDisplay2 * orig_ledg) { QofIdType type = GNC_ID_SPLIT; struct _ftd_data *ftd; static GList *params = NULL; QofQuery *start_q, *show_q = NULL; gboolean num_action = qof_book_use_split_action_for_num_field(gnc_get_current_book()); /* Build parameter list in reverse order */ if (params == NULL) { params = gnc_search_param_prepend (params, N_("All Accounts"), ACCOUNT_MATCH_ALL_TYPE, type, SPLIT_TRANS, TRANS_SPLITLIST, SPLIT_ACCOUNT_GUID, NULL); params = gnc_search_param_prepend (params, N_("Account"), GNC_ID_ACCOUNT, type, SPLIT_ACCOUNT, QOF_PARAM_GUID, NULL); params = gnc_search_param_prepend (params, N_("Balanced"), NULL, type, SPLIT_TRANS, TRANS_IS_BALANCED, NULL); params = gnc_search_param_prepend (params, N_("Reconcile"), RECONCILED_MATCH_TYPE, type, SPLIT_RECONCILE, NULL); params = gnc_search_param_prepend (params, N_("Share Price"), NULL, type, SPLIT_SHARE_PRICE, NULL); params = gnc_search_param_prepend (params, N_("Shares"), NULL, type, SPLIT_AMOUNT, NULL); params = gnc_search_param_prepend (params, N_("Value"), NULL, type, SPLIT_VALUE, NULL); params = gnc_search_param_prepend (params, N_("Date Posted"), NULL, type, SPLIT_TRANS, TRANS_DATE_POSTED, NULL); params = gnc_search_param_prepend (params, N_("Notes"), NULL, type, SPLIT_TRANS, TRANS_NOTES, NULL); params = gnc_search_param_prepend (params, (num_action ? N_("Number/Action") : N_("Action")), NULL, type, SPLIT_ACTION, NULL); params = gnc_search_param_prepend (params, (num_action ? N_("Transaction Number") : N_("Number")), NULL, type, SPLIT_TRANS, TRANS_NUM, NULL); params = gnc_search_param_prepend (params, N_("Memo"), NULL, type, SPLIT_MEMO, NULL); params = gnc_search_param_prepend (params, N_("Description"), NULL, type, SPLIT_TRANS, TRANS_DESCRIPTION, NULL); } else { GList *l; for (l = params; l; l = l->next) { GNCSearchParam *param = l->data; if (num_action) { if (strcmp (param->title, N_("Action")) == 0) gnc_search_param_set_title (param, N_("Number/Action")); if (strcmp (param->title, N_("Number")) == 0) gnc_search_param_set_title (param, N_("Transaction Number")); } else { if (strcmp (param->title, N_("Number/Action")) == 0) gnc_search_param_set_title (param, N_("Action")); if (strcmp (param->title, N_("Transaction Number")) == 0) gnc_search_param_set_title (param, N_("Number")); } } } ftd = g_new0 (struct _ftd_data, 1); if (orig_ledg) { ftd->ledger_q = gnc_ledger_display2_get_query (orig_ledg); start_q = show_q = qof_query_copy (ftd->ledger_q); } else { start_q = qof_query_create (); qof_query_set_book (start_q, gnc_get_current_book ()); /* In lieu of not "mis-using" some portion of the infrastructure by writing * a bunch of new code, we just filter out the accounts of the template * transactions. While these are in a seperate Account trees just for this * reason, the query engine makes no distinction between Account trees. * See Gnome Bug 86302. * -- jsled * * copied from gnc-ledger-display2.c:gnc_ledger_display2_gl() -- warlord * * <jsled> Alternatively, you could look for a GNC_SX_ACCOUNT [SchedAction.h] * key in the KVP frame of the split. */ { Account *tRoot; GList *al; tRoot = gnc_book_get_template_root( gnc_get_current_book() ); al = gnc_account_get_descendants( tRoot ); xaccQueryAddAccountMatch( start_q, al, QOF_GUID_MATCH_NONE, QOF_QUERY_AND ); g_list_free (al); al = NULL; tRoot = NULL; } ftd->q = start_q; /* save this to destroy it later */ } ftd->sw = gnc_search_dialog_create (type, _("Find Transaction"), params, NULL, start_q, show_q, NULL, do_find_cb, NULL, ftd, free_ftd_cb, GNC_PREFS_GROUP_SEARCH, NULL); if (!ftd->sw) { free_ftd_cb (ftd); return NULL; } return ftd->sw; }
static GNCLedgerDisplay * gnc_ledger_display_internal (Account *lead_account, Query *q, GNCLedgerDisplayType ld_type, SplitRegisterType reg_type, SplitRegisterStyle style, gboolean use_double_line, gboolean is_template ) { GNCLedgerDisplay *ld; gint limit; const char *klass; GList *splits; switch (ld_type) { case LD_SINGLE: klass = REGISTER_SINGLE_CM_CLASS; if (reg_type >= NUM_SINGLE_REGISTER_TYPES) { PERR ("single-account register with wrong split register type"); return NULL; } if (!lead_account) { PERR ("single-account register with no account specified"); return NULL; } if (q) { PWARN ("single-account register with external query"); q = NULL; } ld = gnc_find_first_gui_component (klass, find_by_leader, lead_account); if (ld) return ld; break; case LD_SUBACCOUNT: klass = REGISTER_SUBACCOUNT_CM_CLASS; if (!lead_account) { PERR ("sub-account register with no lead account"); return NULL; } if (q) { PWARN ("account register with external query"); q = NULL; } ld = gnc_find_first_gui_component (klass, find_by_leader, lead_account); if (ld) return ld; break; case LD_GL: klass = REGISTER_GL_CM_CLASS; if (!q) { PWARN ("general journal with no query"); } break; default: PERR ("bad ledger type: %d", ld_type); return NULL; } ld = g_new (GNCLedgerDisplay, 1); ld->leader = *xaccAccountGetGUID (lead_account); ld->query = NULL; ld->ld_type = ld_type; ld->loading = FALSE; ld->destroy = NULL; ld->get_parent = NULL; ld->user_data = NULL; limit = gnc_prefs_get_float(GNC_PREFS_GROUP_GENERAL_REGISTER, GNC_PREF_MAX_TRANS); /* set up the query filter */ if (q) ld->query = qof_query_copy (q); else gnc_ledger_display_make_query (ld, limit, reg_type); ld->component_id = gnc_register_gui_component (klass, refresh_handler, close_handler, ld); /******************************************************************\ * The main register window itself * \******************************************************************/ ld->use_double_line_default = use_double_line; ld->reg = gnc_split_register_new (reg_type, style, use_double_line, is_template); gnc_split_register_set_data (ld->reg, ld, gnc_ledger_display_parent); splits = qof_query_run (ld->query); gnc_ledger_display_set_watches (ld, splits); gnc_ledger_display_refresh_internal (ld, splits); return ld; }
GNCSearchWindow * gnc_customer_search (GncCustomer *start, QofBook *book) { QofQuery *q, *q2 = NULL; QofIdType type = GNC_CUSTOMER_MODULE_NAME; struct _customer_select_window *sw; static GList *params = NULL; static GList *columns = NULL; static GNCSearchCallbackButton buttons[] = { { N_("View/Edit Customer"), edit_customer_cb, NULL, TRUE}, { N_("Customer's Jobs"), jobs_customer_cb, NULL, TRUE}, // { N_("Customer's Orders"), order_customer_cb, NULL, TRUE}, { N_("Customer's Invoices"), invoice_customer_cb, NULL, TRUE}, { N_("Process Payment"), payment_customer_cb, NULL, FALSE}, { NULL }, }; (void)order_customer_cb; g_return_val_if_fail (book, NULL); /* Build parameter list in reverse order */ if (params == NULL) { params = gnc_search_param_prepend (params, _("Shipping Contact"), NULL, type, CUSTOMER_SHIPADDR, ADDRESS_NAME, NULL); params = gnc_search_param_prepend (params, _("Billing Contact"), NULL, type, CUSTOMER_ADDR, ADDRESS_NAME, NULL); params = gnc_search_param_prepend (params, _("Customer ID"), NULL, type, CUSTOMER_ID, NULL); params = gnc_search_param_prepend (params, _("Company Name"), NULL, type, CUSTOMER_NAME, NULL); } /* Build the column list in reverse order */ if (columns == NULL) { columns = gnc_search_param_prepend (columns, _("Contact"), NULL, type, CUSTOMER_ADDR, ADDRESS_NAME, NULL); columns = gnc_search_param_prepend (columns, _("Company"), NULL, type, CUSTOMER_NAME, NULL); columns = gnc_search_param_prepend (columns, _("ID #"), NULL, type, CUSTOMER_ID, NULL); } /* Build the queries */ q = qof_query_create_for (type); qof_query_set_book (q, book); #if 0 if (start) { q2 = qof_query_copy (q); qof_query_add_guid_match (q2, g_slist_prepend (NULL, QOF_PARAM_GUID), gncCustomerGetGUID (start), QOF_QUERY_AND); } #endif /* launch select dialog and return the result */ sw = g_new0 (struct _customer_select_window, 1); sw->book = book; sw->q = q; return gnc_search_dialog_create (type, _("Find Customer"), params, columns, q, q2, buttons, NULL, new_customer_cb, sw, free_userdata_cb, GCONF_SECTION_SEARCH, NULL); }
static GNCLedgerDisplay2 * gnc_ledger_display2_internal (Account *lead_account, Query *q, GNCLedgerDisplay2Type ld_type, SplitRegisterType2 reg_type, SplitRegisterStyle2 style, gboolean use_double_line, gboolean is_template ) { GNCLedgerDisplay2 *ld; gint limit; const char *klass; // GList *splits; gboolean display_subaccounts = FALSE; gboolean is_gl = FALSE; switch (ld_type) { case LD2_SINGLE: klass = REGISTER_SINGLE_CM_CLASS; if (reg_type >= NUM_SINGLE_REGISTER_TYPES2) { PERR ("single-account register with wrong split register type"); return NULL; } if (!lead_account) { PERR ("single-account register with no account specified"); return NULL; } if (q) { PWARN ("single-account register with external query"); q = NULL; } ld = gnc_find_first_gui_component (klass, find_by_leader, lead_account); if (ld) return ld; break; case LD2_SUBACCOUNT: klass = REGISTER_SUBACCOUNT_CM_CLASS; if (!lead_account) { PERR ("sub-account register with no lead account"); return NULL; } if (q) { PWARN ("account register with external query"); q = NULL; } ld = gnc_find_first_gui_component (klass, find_by_leader, lead_account); if (ld) return ld; display_subaccounts = TRUE; break; case LD2_GL: klass = REGISTER_GL_CM_CLASS; if (!q) { PWARN ("general journal with no query"); } is_gl = TRUE; break; default: PERR ("bad ledger type: %d", ld_type); return NULL; } ld = g_new (GNCLedgerDisplay2, 1); ld->leader = *xaccAccountGetGUID (lead_account); ld->query = NULL; ld->ld_type = ld_type; ld->loading = FALSE; ld->refresh_ok = FALSE; ld->destroy = NULL; ld->get_parent = NULL; ld->user_data = NULL; limit = gnc_prefs_get_float(GNC_PREFS_GROUP_GENERAL_REGISTER, GNC_PREF_MAX_TRANS); /* set up the query filter */ if (q) ld->query = qof_query_copy (q); else gnc_ledger_display2_make_query (ld, limit, reg_type); ld->component_id = gnc_register_gui_component (klass, refresh_handler, close_handler, ld); /******************************************************************\ * The main register window itself * \******************************************************************/ ld->use_double_line_default = use_double_line; ld->model = gnc_tree_model_split_reg_new (reg_type, style, use_double_line, is_template); gnc_tree_model_split_reg_set_data (ld->model, ld, gnc_ledger_display2_parent); gnc_tree_model_split_reg_set_display (ld->model, display_subaccounts, is_gl); // This sets up a call back to reload after changes g_signal_connect (G_OBJECT (ld->model), "refresh_trans", G_CALLBACK (gnc_ledger_display2_refresh_cb), ld ); //FIXME Not Needed ? gnc_ledger_display2_set_watches (ld, splits); // gnc_ledger_display2_set_watches (ld, splits); // Populate the model with an empty split // An empty model could cause our gui callbacks to crash gnc_ledger_display2_refresh_internal (ld, NULL); return ld; }
GNCSearchWindow * gnc_job_search (GncJob *start, GncOwner *owner, QofBook *book) { QofQuery *q, *q2 = NULL; QofIdType type = GNC_JOB_MODULE_NAME; struct _job_select_window *sw; static GList *params = NULL; static GList *columns = NULL; static GNCSearchCallbackButton buttons[] = { { N_("View/Edit Job"), edit_job_cb, NULL, TRUE}, { N_("View Invoices"), invoice_job_cb, NULL, TRUE}, { N_("Process Payment"), payment_job_cb, NULL, FALSE}, { NULL }, }; g_return_val_if_fail (book, NULL); /* Build parameter list in reverse order */ if (params == NULL) { params = gnc_search_param_prepend (params, _("Owner's Name"), NULL, type, JOB_OWNER, OWNER_NAME, NULL); params = gnc_search_param_prepend (params, _("Only Active?"), NULL, type, JOB_ACTIVE, NULL); params = gnc_search_param_prepend (params, _("Billing ID"), NULL, type, JOB_REFERENCE, NULL); params = gnc_search_param_prepend (params, _("Job Number"), NULL, type, JOB_ID, NULL); params = gnc_search_param_prepend (params, _("Job Name"), NULL, type, JOB_NAME, NULL); } /* Build the column list in reverse order */ if (columns == NULL) { columns = gnc_search_param_prepend (columns, _("Billing ID"), NULL, type, JOB_REFERENCE, NULL); columns = gnc_search_param_prepend (columns, _("Company"), NULL, type, JOB_OWNER, OWNER_NAME, NULL); columns = gnc_search_param_prepend (columns, _("Job Name"), NULL, type, JOB_NAME, NULL); columns = gnc_search_param_prepend (columns, _("ID #"), NULL, type, JOB_ID, NULL); } /* Build the queries */ q = qof_query_create_for (type); qof_query_set_book (q, book); /* If we have a start job but, for some reason, not an owner -- grab * the owner from the starting job. */ if ((!owner || !gncOwnerGetGUID (owner)) && start) owner = gncJobGetOwner (start); /* If owner is supplied, limit all searches to invoices who's owner * is the supplied owner! Show all invoices by this owner. */ if (owner && gncOwnerGetGUID (owner)) { qof_query_add_guid_match (q, g_slist_prepend (g_slist_prepend (NULL, QOF_PARAM_GUID), JOB_OWNER), gncOwnerGetGUID (owner), QOF_QUERY_AND); q2 = qof_query_copy (q); } #if 0 if (start) { if (q2 == NULL) q2 = qof_query_copy (q); qof_query_add_guid_match (q2, g_slist_prepend (NULL, QOF_PARAM_GUID), gncJobGetGUID (start), QOF_QUERY_AND); } #endif /* launch select dialog and return the result */ sw = g_new0 (struct _job_select_window, 1); if (owner) { gncOwnerCopy (owner, &(sw->owner_def)); sw->owner = &(sw->owner_def); } sw->book = book; sw->q = q; return gnc_search_dialog_create (type, _("Find Job"), params, columns, q, q2, buttons, NULL, new_job_cb, sw, free_userdata_cb, GCONF_SECTION_SEARCH, NULL); }
GNCSearchWindow * gnc_employee_search (GncEmployee *start, QofBook *book) { QofIdType type = GNC_EMPLOYEE_MODULE_NAME; struct _employee_select_window *sw; QofQuery *q, *q2 = NULL; static GList *params = NULL; static GList *columns = NULL; static GNCSearchCallbackButton buttons[] = { { N_("View/Edit Employee"), edit_employee_cb, NULL, TRUE}, { N_("Expense Vouchers"), invoice_employee_cb, NULL, TRUE}, { N_("Process Payment"), payment_employee_cb, NULL, FALSE}, { NULL }, }; g_return_val_if_fail (book, NULL); /* Build parameter list in reverse order */ if (params == NULL) { params = gnc_search_param_prepend (params, _("Employee ID"), NULL, type, EMPLOYEE_ID, NULL); params = gnc_search_param_prepend (params, _("Employee Username"), NULL, type, EMPLOYEE_USERNAME, NULL); params = gnc_search_param_prepend (params, _("Employee Name"), NULL, type, EMPLOYEE_ADDR, ADDRESS_NAME, NULL); } /* Build the column list in reverse order */ if (columns == NULL) { columns = gnc_search_param_prepend (columns, _("Username"), NULL, type, EMPLOYEE_USERNAME, NULL); columns = gnc_search_param_prepend (columns, _("ID #"), NULL, type, EMPLOYEE_ID, NULL); columns = gnc_search_param_prepend (columns, _("Name"), NULL, type, EMPLOYEE_ADDR, ADDRESS_NAME, NULL); } /* Build the queries */ q = qof_query_create_for (type); qof_query_set_book (q, book); #if 0 if (start) { q2 = qof_query_copy (q); qof_query_add_guid_match (q2, g_slist_prepend (NULL, QOF_PARAM_GUID), gncEmployeeGetGUID (start), QOF_QUERY_AND); } #endif /* launch select dialog and return the result */ sw = g_new0 (struct _employee_select_window, 1); sw->book = book; sw->q = q; return gnc_search_dialog_create (type, _("Find Employee"), params, columns, q, q2, buttons, NULL, new_employee_cb, sw, free_employee_cb, GNC_PREFS_GROUP_SEARCH, NULL); }