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:
Derek Atkins 2002-01-24 04:27:41 +00:00
parent 101cbeaa0b
commit 243babdc03
7 changed files with 91 additions and 30 deletions

View File

@ -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 ... */

View File

@ -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);

View File

@ -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;
}

View File

@ -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 */

View File

@ -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);
}

View File

@ -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);

View File

@ -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?