mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
More Invoice/Order updates/fixes:
- check if the current entry changed and ask to commit when the order/invoice is commited (via ok, close, or post) - save the entry_ledger in the order; destroy it at dialog exit - fix bug in the entry_ledger model: get_inv_entry would never reset itself git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6644 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
101cbeaa0b
commit
243babdc03
@ -78,6 +78,20 @@ iw_get_invoice (InvoiceWindow *iw)
|
||||
return gncInvoiceLookup (iw->book, &iw->invoice_guid);
|
||||
}
|
||||
|
||||
static void gnc_entry_check_close (InvoiceWindow *iw)
|
||||
{
|
||||
if (!iw || !iw->ledger) return;
|
||||
|
||||
if (gnc_entry_ledger_changed (iw->ledger)) {
|
||||
const char *message = _("The current entry has been changed.\n"
|
||||
"Would you like to save it?");
|
||||
if (gnc_verify_dialog_parented (iw->dialog, message, TRUE))
|
||||
gnc_entry_ledger_save (iw->ledger, TRUE);
|
||||
else
|
||||
gnc_entry_ledger_cancel_cursor_changes (iw->ledger);
|
||||
}
|
||||
}
|
||||
|
||||
static void gnc_ui_to_invoice (InvoiceWindow *iw, GncInvoice *invoice)
|
||||
{
|
||||
Timespec ts;
|
||||
@ -140,11 +154,13 @@ gnc_invoice_window_verify_ok (InvoiceWindow *iw)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
static gboolean
|
||||
gnc_invoice_window_ok_save (InvoiceWindow *iw)
|
||||
{
|
||||
gnc_entry_check_close (iw); /* save the current entry? */
|
||||
|
||||
if (!gnc_invoice_window_verify_ok (iw))
|
||||
return;
|
||||
return FALSE;
|
||||
|
||||
{
|
||||
GncInvoice *invoice = iw_get_invoice (iw);
|
||||
@ -154,6 +170,7 @@ gnc_invoice_window_ok_save (InvoiceWindow *iw)
|
||||
/* Save the invoice to return it later. */
|
||||
iw->created_invoice = invoice;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -161,11 +178,13 @@ gnc_invoice_window_ok_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
InvoiceWindow *iw = data;
|
||||
|
||||
gnc_invoice_window_ok_save (iw);
|
||||
gnc_close_gui_component (iw->component_id);
|
||||
if (!gnc_invoice_window_ok_save (iw))
|
||||
return;
|
||||
|
||||
/* Ok, we don't need this anymore */
|
||||
iw->invoice_guid = *xaccGUIDNULL ();
|
||||
|
||||
gnc_close_gui_component (iw->component_id);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -244,7 +263,10 @@ gnc_invoice_window_post_invoice_cb (GtkWidget *widget, gpointer data)
|
||||
/* Save the Due Date */
|
||||
gncInvoiceSetDateDue (invoice, &ddue);
|
||||
|
||||
/* Yep, we're posting. So, save the invoice... */
|
||||
/* Yep, we're posting. So, save the invoice...
|
||||
* Note that we can safely ignore the return value; we checked
|
||||
* the verify_ok earlier, so we know it's ok.
|
||||
*/
|
||||
gnc_invoice_window_ok_save (iw);
|
||||
|
||||
/* ... post it; post date is set to now ... */
|
||||
|
@ -56,6 +56,7 @@ typedef struct _order_window {
|
||||
GtkWidget * active_check;
|
||||
|
||||
GnucashRegister * reg;
|
||||
GncEntryLedger * ledger;
|
||||
|
||||
OrderDialogType dialog_type;
|
||||
GUID order_guid;
|
||||
@ -75,6 +76,20 @@ ow_get_order (OrderWindow *ow)
|
||||
return gncOrderLookup (ow->book, &ow->order_guid);
|
||||
}
|
||||
|
||||
static void gnc_entry_check_close (OrderWindow *ow)
|
||||
{
|
||||
if (!ow || !ow->ledger) return;
|
||||
|
||||
if (gnc_entry_ledger_changed (ow->ledger)) {
|
||||
const char *message = _("The current entry has been changed.\n"
|
||||
"Would you like to save it?");
|
||||
if (gnc_verify_dialog_parented (ow->dialog, message, TRUE))
|
||||
gnc_entry_ledger_save (ow->ledger, TRUE);
|
||||
else
|
||||
gnc_entry_ledger_cancel_cursor_changes (ow->ledger);
|
||||
}
|
||||
}
|
||||
|
||||
static void gnc_ui_to_order (OrderWindow *ow, GncOrder *order)
|
||||
{
|
||||
Timespec ts;
|
||||
@ -140,6 +155,8 @@ gnc_order_window_ok_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
OrderWindow *ow = data;
|
||||
|
||||
gnc_entry_check_close (ow);
|
||||
|
||||
if (!gnc_order_window_verify_ok (ow))
|
||||
return;
|
||||
|
||||
@ -201,6 +218,8 @@ gnc_order_window_close_order_cb (GtkWidget *widget, gpointer data)
|
||||
gboolean non_inv = FALSE;
|
||||
Timespec ts;
|
||||
|
||||
gnc_entry_check_close (ow);
|
||||
|
||||
/* Make sure the order is ok */
|
||||
if (!gnc_order_window_verify_ok (ow))
|
||||
return;
|
||||
@ -259,6 +278,7 @@ gnc_order_window_destroy_cb (GtkWidget *widget, gpointer data)
|
||||
ow->order_guid = *xaccGUIDNULL ();
|
||||
}
|
||||
|
||||
gnc_entry_ledger_destroy (ow->ledger);
|
||||
gnc_unregister_gui_component (ow->component_id);
|
||||
gnc_resume_gui_refresh ();
|
||||
|
||||
@ -377,7 +397,6 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp,
|
||||
GtkWidget *label, *hbox, *vbox, *regWidget, *cd_label;
|
||||
GncEntryLedger *entry_ledger = NULL;
|
||||
GnomeDialog *owd;
|
||||
GList *entries;
|
||||
gboolean hide_cd = FALSE;
|
||||
|
||||
gnc_configure_register_colors ();
|
||||
@ -429,6 +448,9 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp,
|
||||
break;
|
||||
}
|
||||
|
||||
/* Save the entry ledger for later */
|
||||
ow->ledger = entry_ledger;
|
||||
|
||||
/* Set the order for the entry_ledger */
|
||||
gnc_entry_ledger_set_default_order (entry_ledger, order);
|
||||
|
||||
|
@ -318,3 +318,15 @@ void gnc_entry_ledger_set_readonly (GncEntryLedger *ledger)
|
||||
/* and refresh the display */
|
||||
gnc_entry_ledger_display_refresh (ledger);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gnc_entry_ledger_changed (GncEntryLedger *ledger)
|
||||
{
|
||||
if (!ledger)
|
||||
return FALSE;
|
||||
|
||||
if (gnc_table_current_cursor_changed (ledger->table, FALSE))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -84,4 +84,8 @@ void gnc_entry_ledger_set_parent (GncEntryLedger *ledger, gncUIWidget parent);
|
||||
|
||||
void gnc_entry_ledger_set_readonly (GncEntryLedger *ledger);
|
||||
|
||||
gboolean gnc_entry_ledger_changed (GncEntryLedger *ledger);
|
||||
|
||||
void gnc_entry_ledger_cancel_cursor_changes (GncEntryLedger *ledger);
|
||||
|
||||
#endif /* GNC_ENTRY_LEDGER_H */
|
||||
|
@ -68,27 +68,6 @@ static void gnc_entry_ledger_move_cursor (VirtualLocation *p_new_virt_loc,
|
||||
*p_new_virt_loc = new_virt_loc;
|
||||
}
|
||||
|
||||
static void gnc_entry_ledger_cancel_cursor_changes (GncEntryLedger *ledger)
|
||||
{
|
||||
VirtualLocation virt_loc;
|
||||
|
||||
if (ledger == NULL)
|
||||
return;
|
||||
|
||||
virt_loc = ledger->table->current_cursor_loc;
|
||||
|
||||
if (!gnc_table_current_cursor_changed (ledger->table, FALSE))
|
||||
return;
|
||||
|
||||
/* When cancelling edits, reload the cursor from the entry. */
|
||||
gnc_table_clear_current_cursor_changes (ledger->table);
|
||||
|
||||
if (gnc_table_find_close_valid_cell (ledger->table, &virt_loc, FALSE))
|
||||
gnc_table_move_cursor_gui (ledger->table, virt_loc);
|
||||
|
||||
gnc_table_refresh_gui (ledger->table, TRUE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnc_entry_ledger_auto_completion (GncEntryLedger *ledger,
|
||||
gncTableTraversalDir dir,
|
||||
@ -459,3 +438,24 @@ gboolean gnc_entry_ledger_save (GncEntryLedger *ledger, gboolean do_commit)
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void gnc_entry_ledger_cancel_cursor_changes (GncEntryLedger *ledger)
|
||||
{
|
||||
VirtualLocation virt_loc;
|
||||
|
||||
if (ledger == NULL)
|
||||
return;
|
||||
|
||||
virt_loc = ledger->table->current_cursor_loc;
|
||||
|
||||
if (!gnc_table_current_cursor_changed (ledger->table, FALSE))
|
||||
return;
|
||||
|
||||
/* When cancelling edits, reload the cursor from the entry. */
|
||||
gnc_table_clear_current_cursor_changes (ledger->table);
|
||||
|
||||
if (gnc_table_find_close_valid_cell (ledger->table, &virt_loc, FALSE))
|
||||
gnc_table_move_cursor_gui (ledger->table, virt_loc);
|
||||
|
||||
gnc_table_refresh_gui (ledger->table, TRUE);
|
||||
}
|
||||
|
@ -81,8 +81,7 @@ refresh_handler (GHashTable *changes, gpointer user_data)
|
||||
GncEntryLedger *ledger = user_data;
|
||||
GList *entries;
|
||||
|
||||
if (ledger->loading)
|
||||
return;
|
||||
if (!ledger || ledger->loading) return;
|
||||
|
||||
entries = gnc_entry_ledger_get_entries (ledger);
|
||||
|
||||
|
@ -305,7 +305,9 @@ static const char * get_inv_entry (VirtualLocation virt_loc,
|
||||
static char s[2] = { ' ', '\0' };
|
||||
|
||||
entry = gnc_entry_ledger_get_entry (ledger, virt_loc.vcell_loc);
|
||||
if (gncEntryGetInvoice (entry) != NULL)
|
||||
if (gncEntryGetInvoice (entry) == NULL)
|
||||
s[0] = ' ';
|
||||
else
|
||||
s[0] = 'X';
|
||||
|
||||
/* XXX: what if this entry doesn't belong to this invoice?
|
||||
|
Loading…
Reference in New Issue
Block a user