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;
|
gboolean changed;
|
||||||
SRInfo *info;
|
SRInfo *info;
|
||||||
Split *split;
|
Split *split;
|
||||||
|
const char *cell_name;
|
||||||
|
|
||||||
if (!reg)
|
if (!reg)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -875,15 +876,16 @@ gnc_split_register_traverse (VirtualLocation *p_new_virt_loc,
|
|||||||
return FALSE;
|
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 */
|
/* See if we are leaving an account field */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
const char *cell_name;
|
|
||||||
ComboCell *cell;
|
ComboCell *cell;
|
||||||
Account *account;
|
Account *account;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
cell_name = gnc_table_get_current_cell_name (reg->table);
|
|
||||||
|
|
||||||
if (!gnc_cell_name_equal (cell_name, XFRM_CELL) &&
|
if (!gnc_cell_name_equal (cell_name, XFRM_CELL) &&
|
||||||
!gnc_cell_name_equal (cell_name, MXFRM_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);
|
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
|
static void
|
||||||
gnc_split_register_save_due_date_cell (BasicCell * cell,
|
gnc_split_register_save_due_date_cell (BasicCell * cell,
|
||||||
gpointer save_data,
|
gpointer save_data,
|
||||||
@ -537,6 +557,10 @@ gnc_split_register_model_add_save_handlers (TableModel *model)
|
|||||||
gnc_split_register_save_due_date_cell,
|
gnc_split_register_save_due_date_cell,
|
||||||
DDUE_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_table_model_set_save_handler (model,
|
||||||
gnc_split_register_save_num_cell,
|
gnc_split_register_save_num_cell,
|
||||||
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 *
|
static const char *
|
||||||
gnc_split_register_get_due_date_entry (VirtualLocation virt_loc,
|
gnc_split_register_get_due_date_entry (VirtualLocation virt_loc,
|
||||||
gboolean translate,
|
gboolean translate,
|
||||||
@ -632,30 +676,45 @@ gnc_split_register_get_due_date_entry (VirtualLocation virt_loc,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
SplitRegister *reg = user_data;
|
SplitRegister *reg = user_data;
|
||||||
char type;
|
|
||||||
|
|
||||||
type = gnc_recn_cell_get_flag
|
|
||||||
((RecnCell *) gnc_table_layout_get_cell (reg->table->layout, TYPE_CELL));
|
|
||||||
|
|
||||||
/* Only print the due date for invoice transactions */
|
|
||||||
if (type != 'I')
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
{
|
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
Split *split;
|
Split *split;
|
||||||
Timespec ts;
|
Timespec ts;
|
||||||
|
gboolean is_current;
|
||||||
|
char type;
|
||||||
|
|
||||||
|
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') {
|
||||||
|
//PWARN ("returning NULL due_date entry");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
|
split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
|
||||||
trans = xaccSplitGetParent (split);
|
trans = xaccSplitGetParent (split);
|
||||||
if (!trans)
|
if (!trans) {
|
||||||
|
//PWARN ("No transaction in due_date entry");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
xaccTransGetDateDueTS (trans, &ts);
|
xaccTransGetDateDueTS (trans, &ts);
|
||||||
|
//PWARN ("returning valid due_date entry");
|
||||||
|
|
||||||
return gnc_print_date (ts);
|
return gnc_print_date (ts);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
gnc_split_register_get_date_entry (VirtualLocation virt_loc,
|
gnc_split_register_get_date_entry (VirtualLocation virt_loc,
|
||||||
@ -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 *
|
static const char *
|
||||||
gnc_split_register_get_action_entry (VirtualLocation virt_loc,
|
gnc_split_register_get_action_entry (VirtualLocation virt_loc,
|
||||||
gboolean translate,
|
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;
|
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
|
static CellIOFlags
|
||||||
gnc_split_register_get_debcred_io_flags (VirtualLocation virt_loc,
|
gnc_split_register_get_debcred_io_flags (VirtualLocation virt_loc,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
@ -1815,7 +1868,7 @@ gnc_split_register_model_new (void)
|
|||||||
*/
|
*/
|
||||||
gnc_table_model_set_io_flags_handler
|
gnc_table_model_set_io_flags_handler
|
||||||
(model,
|
(model,
|
||||||
gnc_split_register_get_standard_io_flags,
|
gnc_split_register_get_ddue_io_flags,
|
||||||
DDUE_CELL);
|
DDUE_CELL);
|
||||||
|
|
||||||
gnc_table_model_set_io_flags_handler
|
gnc_table_model_set_io_flags_handler
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#define SPLIT_TRANS_STR _("-- Split Transaction --")
|
#define SPLIT_TRANS_STR _("-- Split Transaction --")
|
||||||
#define STOCK_SPLIT_STR _("-- Stock Split --")
|
#define STOCK_SPLIT_STR _("-- Stock Split --")
|
||||||
|
|
||||||
|
#define SR_TRANS_TYPE "split-register-trans-type"
|
||||||
|
|
||||||
struct sr_info
|
struct sr_info
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user