Skip to content

Commit

Permalink
Factor out a convenience function to retrieve a (business) owner star…
Browse files Browse the repository at this point in the history
…ting from a transaction
  • Loading branch information
gjanssens committed Mar 25, 2016
1 parent 656a3a9 commit 6fd3569
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 20 deletions.
25 changes: 25 additions & 0 deletions src/engine/gncOwner.c
Original file line number Diff line number Diff line change
Expand Up @@ -637,6 +637,31 @@ gboolean gncOwnerGetOwnerFromLot (GNCLot *lot, GncOwner *owner)
return (owner->owner.undefined != NULL);
}

gboolean gncOwnerGetOwnerFromTxn (Transaction *txn, GncOwner *owner)
{
Split *apar_split = NULL;

if (!txn || !owner) return FALSE;

if (xaccTransGetTxnType (txn) == TXN_TYPE_NONE)
return FALSE;

apar_split = xaccTransGetFirstAPARAcctSplit (txn);
if (apar_split)
{
GNCLot *lot = xaccSplitGetLot (apar_split);
GncInvoice *invoice = gncInvoiceGetInvoiceFromLot (lot);
if (invoice)
gncOwnerCopy (gncInvoiceGetOwner (invoice), owner);
else if (!gncOwnerGetOwnerFromLot (lot, owner))
return FALSE;

return TRUE; // Got owner from either invoice or lot
}

return FALSE;
}

gboolean gncOwnerIsValid (const GncOwner *owner)
{
if (!owner) return FALSE;
Expand Down
9 changes: 9 additions & 0 deletions src/engine/gncOwner.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,15 @@ gint gncOwnerLotsSortFunc (GNCLot *lotA, GNCLot *lotB);
*/
gboolean gncOwnerGetOwnerFromLot (GNCLot *lot, GncOwner *owner);

/** Convenience function to get the owner from a transaction.
* Transactions don't really have an owner. What this function will
* do it figure out whether the transaction is part of a business
* transaction (either a posted invoice/bill/voucher/credit note or
* a payment transaction) and use the business object behind it
* to extract owner information.
*/
gboolean gncOwnerGetOwnerFromTxn (Transaction *txn, GncOwner *owner);

gboolean gncOwnerGetOwnerFromTypeGuid (QofBook *book, GncOwner *owner, QofIdType type, GncGUID *guid);

/** Get the kvp-frame from the underlying owner object */
Expand Down
32 changes: 12 additions & 20 deletions src/gnome/dialog-print-check.c
Original file line number Diff line number Diff line change
Expand Up @@ -1706,28 +1706,20 @@ gnc_ui_print_check_dialog_create(GtkWidget *parent,
* it would create build problems */
if (g_list_length(pcd->splits) == 1)
{
GncOwner txn_owner;

trans = xaccSplitGetParent((Split *)(pcd->splits->data));
if (xaccTransGetTxnType (trans) == TXN_TYPE_PAYMENT)
if (gncOwnerGetOwnerFromTxn (trans, &txn_owner))
{
Split *apar_split = xaccTransGetFirstAPARAcctSplit (trans);
if (apar_split)
{
GNCLot *lot = xaccSplitGetLot (apar_split);
GncOwner owner;
if (!gncOwnerGetOwnerFromLot (lot, &owner))
{
GncInvoice *invoice = gncInvoiceGetInvoiceFromLot (lot);
if (invoice)
gncOwnerCopy (gncOwnerGetEndOwner (gncInvoiceGetOwner (invoice)), &owner);
}

/* Got a business owner, get the address */
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_name), gncOwnerGetName(&owner));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_1), gncAddressGetAddr1 (gncOwnerGetAddr(&owner)));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_2), gncAddressGetAddr2 (gncOwnerGetAddr(&owner)));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_3), gncAddressGetAddr3 (gncOwnerGetAddr(&owner)));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_4), gncAddressGetAddr4 (gncOwnerGetAddr(&owner)));
}
GncOwner owner;
gncOwnerCopy (gncOwnerGetEndOwner (&txn_owner), &owner);

/* Got a business owner, get the address */
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_name), gncOwnerGetName(&owner));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_1), gncAddressGetAddr1 (gncOwnerGetAddr(&owner)));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_2), gncAddressGetAddr2 (gncOwnerGetAddr(&owner)));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_3), gncAddressGetAddr3 (gncOwnerGetAddr(&owner)));
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_4), gncAddressGetAddr4 (gncOwnerGetAddr(&owner)));
}
}

Expand Down

0 comments on commit 6fd3569

Please sign in to comment.