Check printing: extract address from invoice/bill for payment transactions

If the transaction is marked as a (business feature) payment,
extract the address of the bill/invoice associated with the
payment, or the owner if there's no bill/invoice yet.
This commit is contained in:
Geert Janssens 2016-03-25 14:43:15 +01:00
parent 531335a8f9
commit d5d58dacba

View File

@ -1705,17 +1705,35 @@ gnc_ui_print_check_dialog_create(GtkWidget *parent,
/* Can't access business objects e.g. Customer,Vendor,Employee because /* Can't access business objects e.g. Customer,Vendor,Employee because
* it would create build problems */ * it would create build problems */
if (g_list_length(pcd->splits) == 1) if (g_list_length(pcd->splits) == 1)
{
trans = xaccSplitGetParent((Split *)(pcd->splits->data)); trans = xaccSplitGetParent((Split *)(pcd->splits->data));
else if (xaccTransGetTxnType (trans) == TXN_TYPE_PAYMENT)
trans = NULL;
if ( trans )
{ {
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)));
}
}
}
/* Use transaction description as address name if no better address has been found */
if ( trans && (0 == gtk_entry_get_text_length (GTK_ENTRY(pcd->check_address_name))) )
gtk_entry_set_text(GTK_ENTRY(pcd->check_address_name), xaccTransGetDescription(trans)); gtk_entry_set_text(GTK_ENTRY(pcd->check_address_name), xaccTransGetDescription(trans));
}
else
{
/* nothing to do - defaults to blank */
}
gtk_widget_destroy(GTK_WIDGET(gtk_builder_get_object (builder, "lower_left"))); gtk_widget_destroy(GTK_WIDGET(gtk_builder_get_object (builder, "lower_left")));