mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Better support for A/R and A/P transaction types. It actually will
DTRT with the due-date, now. Still need a better API for the transaction type git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6144 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
45543abd7d
commit
0dd30be038
@ -843,6 +843,7 @@ gnc_split_register_traverse (VirtualLocation *p_new_virt_loc,
|
||||
gboolean changed;
|
||||
SRInfo *info;
|
||||
Split *split;
|
||||
const char *cell_name;
|
||||
|
||||
if (!reg)
|
||||
return FALSE;
|
||||
@ -875,15 +876,16 @@ gnc_split_register_traverse (VirtualLocation *p_new_virt_loc,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Get the current cell-name to check it.. */
|
||||
cell_name = gnc_table_get_current_cell_name (reg->table);
|
||||
|
||||
/* See if we are leaving an account field */
|
||||
do
|
||||
{
|
||||
const char *cell_name;
|
||||
ComboCell *cell;
|
||||
Account *account;
|
||||
char *name;
|
||||
|
||||
cell_name = gnc_table_get_current_cell_name (reg->table);
|
||||
|
||||
if (!gnc_cell_name_equal (cell_name, XFRM_CELL) &&
|
||||
!gnc_cell_name_equal (cell_name, MXFRM_CELL))
|
||||
|
@ -72,6 +72,26 @@ gnc_split_register_save_date_cell (BasicCell * cell,
|
||||
xaccTransSetDatePostedTS (sd->trans, &ts);
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_split_register_save_type_cell (BasicCell * cell,
|
||||
gpointer save_data,
|
||||
gpointer user_data)
|
||||
{
|
||||
SRSaveData *sd = save_data;
|
||||
const char *value;
|
||||
kvp_frame *kvp;
|
||||
kvp_value *k_val;
|
||||
|
||||
g_return_if_fail (gnc_basic_cell_has_name (cell, TYPE_CELL));
|
||||
|
||||
value = gnc_basic_cell_get_value (cell);
|
||||
|
||||
kvp = xaccTransGetSlots (sd->trans);
|
||||
k_val = kvp_value_new_string (value);
|
||||
kvp_frame_set_slot_path (kvp, k_val, SR_TRANS_TYPE, NULL);
|
||||
kvp_value_delete (k_val);
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_split_register_save_due_date_cell (BasicCell * cell,
|
||||
gpointer save_data,
|
||||
@ -537,6 +557,10 @@ gnc_split_register_model_add_save_handlers (TableModel *model)
|
||||
gnc_split_register_save_due_date_cell,
|
||||
DDUE_CELL);
|
||||
|
||||
gnc_table_model_set_save_handler (model,
|
||||
gnc_split_register_save_type_cell,
|
||||
TYPE_CELL);
|
||||
|
||||
gnc_table_model_set_save_handler (model,
|
||||
gnc_split_register_save_num_cell,
|
||||
NUM_CELL);
|
||||
|
@ -625,6 +625,50 @@ gnc_split_register_get_border (VirtualLocation virt_loc,
|
||||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
gnc_split_register_get_type_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
Transaction *trans;
|
||||
kvp_frame *kvp;
|
||||
kvp_value *val;
|
||||
|
||||
trans = gnc_split_register_get_trans (reg, virt_loc.vcell_loc);
|
||||
if (!trans)
|
||||
return NULL;
|
||||
|
||||
kvp = xaccTransGetSlots (trans);
|
||||
val = kvp_frame_get_slot_path (kvp, SR_TRANS_TYPE, NULL);
|
||||
if (!val)
|
||||
{
|
||||
static char s[2];
|
||||
|
||||
s[0] = 'I';
|
||||
s[1] = '\0';
|
||||
|
||||
return s;
|
||||
}
|
||||
else
|
||||
return kvp_value_get_string (val);
|
||||
}
|
||||
|
||||
static char
|
||||
gnc_split_register_get_type_value (SplitRegister *reg,
|
||||
VirtualLocation virt_loc)
|
||||
{
|
||||
RecnCell *cell;
|
||||
|
||||
cell = (RecnCell *)
|
||||
gnc_table_layout_get_cell (reg->table->layout, TYPE_CELL);
|
||||
if (!cell)
|
||||
return '\0';
|
||||
|
||||
return gnc_recn_cell_get_flag (cell);
|
||||
}
|
||||
|
||||
static const char *
|
||||
gnc_split_register_get_due_date_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
@ -632,29 +676,44 @@ gnc_split_register_get_due_date_entry (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
Transaction *trans;
|
||||
Split *split;
|
||||
Timespec ts;
|
||||
gboolean is_current;
|
||||
char type;
|
||||
|
||||
type = gnc_recn_cell_get_flag
|
||||
((RecnCell *) gnc_table_layout_get_cell (reg->table->layout, TYPE_CELL));
|
||||
is_current = virt_cell_loc_equal (reg->table->current_cursor_loc.vcell_loc,
|
||||
virt_loc.vcell_loc);
|
||||
|
||||
if (is_current) {
|
||||
type = gnc_split_register_get_type_value (reg, virt_loc);
|
||||
} else {
|
||||
const char *typestr =
|
||||
gnc_split_register_get_type_entry (virt_loc, translate,
|
||||
conditionally_changed, user_data);
|
||||
if (typestr != NULL)
|
||||
type = *typestr;
|
||||
else
|
||||
type = '\0';
|
||||
}
|
||||
|
||||
/* Only print the due date for invoice transactions */
|
||||
if (type != 'I')
|
||||
if (type != 'I') {
|
||||
//PWARN ("returning NULL due_date entry");
|
||||
return NULL;
|
||||
|
||||
{
|
||||
Transaction *trans;
|
||||
Split *split;
|
||||
Timespec ts;
|
||||
|
||||
split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
|
||||
trans = xaccSplitGetParent (split);
|
||||
if (!trans)
|
||||
return NULL;
|
||||
|
||||
xaccTransGetDateDueTS (trans, &ts);
|
||||
|
||||
return gnc_print_date (ts);
|
||||
}
|
||||
|
||||
split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
|
||||
trans = xaccSplitGetParent (split);
|
||||
if (!trans) {
|
||||
//PWARN ("No transaction in due_date entry");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
xaccTransGetDateDueTS (trans, &ts);
|
||||
//PWARN ("returning valid due_date entry");
|
||||
|
||||
return gnc_print_date (ts);
|
||||
}
|
||||
|
||||
static const char *
|
||||
@ -833,29 +892,6 @@ gnc_split_register_get_recn_entry (VirtualLocation virt_loc,
|
||||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
gnc_split_register_get_type_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
gboolean *conditionally_changed,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
Split *split;
|
||||
|
||||
split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
|
||||
if (!split)
|
||||
return NULL;
|
||||
|
||||
{
|
||||
static char s[2];
|
||||
|
||||
s[0] = 'I';
|
||||
s[1] = '\0';
|
||||
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
gnc_split_register_get_action_entry (VirtualLocation virt_loc,
|
||||
gboolean translate,
|
||||
@ -1287,6 +1323,23 @@ gnc_split_register_get_recn_io_flags (VirtualLocation virt_loc,
|
||||
return XACC_CELL_ALLOW_ALL | XACC_CELL_ALLOW_EXACT_ONLY;
|
||||
}
|
||||
|
||||
static CellIOFlags
|
||||
gnc_split_register_get_ddue_io_flags (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
char type;
|
||||
|
||||
type = gnc_split_register_get_type_value (reg, virt_loc);
|
||||
|
||||
/* Only print the due date for invoice transactions */
|
||||
if (type != 'I') {
|
||||
return XACC_CELL_ALLOW_NONE;
|
||||
}
|
||||
|
||||
return XACC_CELL_ALLOW_ALL;
|
||||
}
|
||||
|
||||
static CellIOFlags
|
||||
gnc_split_register_get_debcred_io_flags (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
@ -1815,7 +1868,7 @@ gnc_split_register_model_new (void)
|
||||
*/
|
||||
gnc_table_model_set_io_flags_handler
|
||||
(model,
|
||||
gnc_split_register_get_standard_io_flags,
|
||||
gnc_split_register_get_ddue_io_flags,
|
||||
DDUE_CELL);
|
||||
|
||||
gnc_table_model_set_io_flags_handler
|
||||
|
@ -30,6 +30,7 @@
|
||||
#define SPLIT_TRANS_STR _("-- Split Transaction --")
|
||||
#define STOCK_SPLIT_STR _("-- Stock Split --")
|
||||
|
||||
#define SR_TRANS_TYPE "split-register-trans-type"
|
||||
|
||||
struct sr_info
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user