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:
Derek Atkins 2001-11-30 00:40:00 +00:00
parent 45543abd7d
commit 0dd30be038
4 changed files with 123 additions and 43 deletions

View File

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

View File

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

View File

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

View File

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