mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
gncOrder: add reference
make reference editable add g-wrap for reference invoice.scm: add order reference(s) to Invoice output Fix invoice-reload for testing. It works, now (thanks, rlb) git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6741 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
d23182e372
commit
24384eb99a
@ -29,6 +29,7 @@ struct _gncOrder {
|
||||
GUID guid;
|
||||
char * id;
|
||||
char * notes;
|
||||
char * reference;
|
||||
char * printname;
|
||||
GncOwner owner;
|
||||
GList * entries;
|
||||
@ -69,6 +70,7 @@ GncOrder *gncOrderCreate (GNCBook *book)
|
||||
|
||||
order->id = CACHE_INSERT ("");
|
||||
order->notes = CACHE_INSERT ("");
|
||||
order->reference = CACHE_INSERT ("");
|
||||
|
||||
order->active = TRUE;
|
||||
|
||||
@ -85,6 +87,7 @@ void gncOrderDestroy (GncOrder *order)
|
||||
g_list_free (order->entries);
|
||||
CACHE_REMOVE (order->id);
|
||||
CACHE_REMOVE (order->notes);
|
||||
CACHE_REMOVE (order->reference);
|
||||
remObj (order);
|
||||
|
||||
if (order->printname) g_free (order->printname);
|
||||
@ -140,6 +143,13 @@ void gncOrderSetNotes (GncOrder *order, const char *notes)
|
||||
order->dirty = TRUE;
|
||||
}
|
||||
|
||||
void gncOrderSetReference (GncOrder *order, const char *reference)
|
||||
{
|
||||
if (!order || !reference) return;
|
||||
SET_STR (order->reference, reference);
|
||||
order->dirty = TRUE;
|
||||
}
|
||||
|
||||
void gncOrderSetActive (GncOrder *order, gboolean active)
|
||||
{
|
||||
if (!order) return;
|
||||
@ -224,6 +234,12 @@ const char * gncOrderGetNotes (GncOrder *order)
|
||||
return order->notes;
|
||||
}
|
||||
|
||||
const char * gncOrderGetReference (GncOrder *order)
|
||||
{
|
||||
if (!order) return NULL;
|
||||
return order->reference;
|
||||
}
|
||||
|
||||
gboolean gncOrderGetActive (GncOrder *order)
|
||||
{
|
||||
if (!order) return FALSE;
|
||||
|
@ -27,6 +27,7 @@ void gncOrderSetOwner (GncOrder *order, GncOwner *owner);
|
||||
void gncOrderSetDateOpened (GncOrder *order, Timespec *date);
|
||||
void gncOrderSetDateClosed (GncOrder *order, Timespec *date);
|
||||
void gncOrderSetNotes (GncOrder *order, const char *notes);
|
||||
void gncOrderSetReference (GncOrder *order, const char *reference);
|
||||
void gncOrderSetActive (GncOrder *order, gboolean active);
|
||||
|
||||
/* Add an Entry to the Order */
|
||||
@ -42,6 +43,7 @@ GncOwner * gncOrderGetOwner (GncOrder *order);
|
||||
Timespec gncOrderGetDateOpened (GncOrder *order);
|
||||
Timespec gncOrderGetDateClosed (GncOrder *order);
|
||||
const char * gncOrderGetNotes (GncOrder *order);
|
||||
const char * gncOrderGetReference (GncOrder *order);
|
||||
gboolean gncOrderGetActive (GncOrder *order);
|
||||
|
||||
/* Get the list Entries */
|
||||
|
@ -583,6 +583,14 @@
|
||||
'((<gnc:GncOrder*> order))
|
||||
"Return the Order's Notes")
|
||||
|
||||
(gw:wrap-function
|
||||
ws
|
||||
'gnc:order-get-reference
|
||||
'(<gw:mchars> callee-owned const)
|
||||
"gncOrderGetReference"
|
||||
'((<gnc:GncOrder*> order))
|
||||
"Return the Order's Reference")
|
||||
|
||||
(gw:wrap-function
|
||||
ws
|
||||
'gnc:order-get-entries
|
||||
|
@ -5,7 +5,6 @@
|
||||
(gnc:module-load "gnucash/gnome-utils" 0)
|
||||
(gnc:module-load "gnucash/business-core" 0)
|
||||
(gnc:module-load "gnucash/gnome-search" 0)
|
||||
(gnc:module-load "gnucash/report/standard-reports" 0)
|
||||
|
||||
(define (add-customer-extensions)
|
||||
(let ((last-cust (gnc:owner-create)))
|
||||
@ -220,7 +219,9 @@
|
||||
(N_ "Reload invoice report")
|
||||
(list "Extensions" "")
|
||||
(lambda ()
|
||||
(load-from-path "gnucash/report/invoice.scm"))))
|
||||
(let ((m (current-module)))
|
||||
(load-from-path "gnucash/report/invoice.scm")
|
||||
(set-current-module m)))))
|
||||
|
||||
(define init-data
|
||||
(gnc:make-menu-item (N_ "Initialize Test Data")
|
||||
@ -299,6 +300,3 @@
|
||||
)
|
||||
|
||||
(gnc:hook-add-dangler gnc:*add-extension-hook* add-business-extensions)
|
||||
|
||||
(define gnc:invoice-make-printable gnc:invoice-report-create)
|
||||
(export gnc:invoice-make-printable)
|
||||
|
@ -53,6 +53,9 @@ gnc_module_init(int refcount)
|
||||
if (!gnc_module_load ("gnucash/report/report-gnome", 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
if (!gnc_module_load ("gnucash/report/standard-reports", 0)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gh_eval_str("(use-modules (g-wrapped gw-business-gnome))");
|
||||
gh_eval_str("(use-modules (gnucash business-gnome))");
|
||||
|
@ -207,7 +207,7 @@ gnc_invoice_window_print_invoice_cb (GtkWidget *widget, gpointer data)
|
||||
|
||||
g_return_if_fail (invoice);
|
||||
|
||||
func = gh_eval_str ("gnc:invoice-make-printable");
|
||||
func = gh_eval_str ("gnc:invoice-report-create");
|
||||
g_return_if_fail (gh_procedure_p (func));
|
||||
|
||||
arg = gw_wcp_assimilate_ptr (invoice, gh_eval_str("<gnc:GncInvoice*>"));
|
||||
@ -368,7 +368,8 @@ gnc_invoice_owner_changed_cb (GtkWidget *widget, gpointer data)
|
||||
{
|
||||
InvoiceWindow *iw = data;
|
||||
GncInvoice *invoice;
|
||||
|
||||
char const *msg = "";
|
||||
|
||||
if (!iw)
|
||||
return FALSE;
|
||||
|
||||
@ -380,6 +381,23 @@ gnc_invoice_owner_changed_cb (GtkWidget *widget, gpointer data)
|
||||
gncInvoiceSetOwner (invoice, &(iw->owner));
|
||||
gnc_entry_ledger_reset_query (iw->ledger);
|
||||
|
||||
if (iw->dialog_type == EDIT_INVOICE)
|
||||
return FALSE;
|
||||
|
||||
switch (gncOwnerGetType (&(iw->owner))) {
|
||||
case GNC_OWNER_CUSTOMER:
|
||||
msg = gncCustomerGetTerms (gncOwnerGetCustomer (&(iw->owner)));
|
||||
break;
|
||||
case GNC_OWNER_VENDOR:
|
||||
msg = gncVendorGetTerms (gncOwnerGetVendor (&(iw->owner)));
|
||||
break;
|
||||
default:
|
||||
g_warning ("Unknown owner type: %d\n", gncOwnerGetType (&(iw->owner)));
|
||||
break;
|
||||
}
|
||||
|
||||
gtk_entry_set_text (GTK_ENTRY (iw->terms_entry), msg ? msg : "");
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -104,6 +104,8 @@ static void gnc_ui_to_order (OrderWindow *ow, GncOrder *order)
|
||||
(GTK_EDITABLE (ow->id_entry), 0, -1));
|
||||
gncOrderSetNotes (order, gtk_editable_get_chars
|
||||
(GTK_EDITABLE (ow->notes_text), 0, -1));
|
||||
gncOrderSetReference (order, gtk_editable_get_chars
|
||||
(GTK_EDITABLE (ow->ref_entry), 0, -1));
|
||||
|
||||
tt = gnome_date_edit_get_date (GNOME_DATE_EDIT (ow->opened_date));
|
||||
timespecFromTime_t (&ts, tt);
|
||||
@ -316,6 +318,15 @@ gnc_order_owner_changed_cb (GtkWidget *widget, gpointer data)
|
||||
return FALSE;
|
||||
|
||||
gnc_owner_get_owner (ow->owner_choice, &(ow->owner));
|
||||
|
||||
/* Set the Order's owner now! */
|
||||
order = ow_get_order (ow);
|
||||
gncOrderSetOwner (order, &(ow->owner));
|
||||
|
||||
if (ow->dialog_type == EDIT_ORDER)
|
||||
return FALSE;
|
||||
|
||||
/* Only set the reference during the New Job dialog */
|
||||
switch (gncOwnerGetType (&(ow->owner))) {
|
||||
case GNC_OWNER_JOB:
|
||||
{
|
||||
@ -328,9 +339,6 @@ gnc_order_owner_changed_cb (GtkWidget *widget, gpointer data)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Set the Order's owner now! */
|
||||
order = ow_get_order (ow);
|
||||
gncOrderSetOwner (order, &(ow->owner));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -455,6 +463,9 @@ gnc_order_update_window (OrderWindow *ow)
|
||||
time_t tt;
|
||||
gint pos = 0;
|
||||
|
||||
gtk_entry_set_text (GTK_ENTRY (ow->ref_entry),
|
||||
gncOrderGetReference (order));
|
||||
|
||||
string = gncOrderGetNotes (order);
|
||||
gtk_editable_delete_text (GTK_EDITABLE (ow->notes_text), 0, -1);
|
||||
gtk_editable_insert_text (GTK_EDITABLE (ow->notes_text), string,
|
||||
@ -645,7 +656,7 @@ gnc_order_new_window (GtkWidget *parent, GNCBook *bookp,
|
||||
/* Now fill in a lot of the pieces and display properly */
|
||||
gnc_order_update_window (ow);
|
||||
|
||||
/* Set the Reference */
|
||||
/* Maybe set the reference */
|
||||
gnc_order_owner_changed_cb (ow->owner_choice, ow);
|
||||
|
||||
return ow;
|
||||
@ -717,7 +728,7 @@ gnc_order_window_new_order (GtkWidget *parent, GNCBook *bookp, GncOwner *owner)
|
||||
/* Now fill in a lot of the pieces and display properly */
|
||||
gnc_order_update_window (ow);
|
||||
|
||||
/* Set the Reference */
|
||||
/* Maybe set the reference */
|
||||
gnc_order_owner_changed_cb (ow->owner_choice, ow);
|
||||
|
||||
return ow;
|
||||
|
@ -421,7 +421,7 @@
|
||||
<class>GtkEntry</class>
|
||||
<name>ref_entry</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>False</editable>
|
||||
<editable>True</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
|
@ -1,5 +1,8 @@
|
||||
;; -*-scheme-*-
|
||||
;; invoice.scm
|
||||
;; invoice.scm -- an Invoice Report, used to print a GncInvoice
|
||||
;;
|
||||
;; Created by: Derek Atkins <warlord@MIT.EDU>
|
||||
;;
|
||||
|
||||
(define-module (gnucash report invoice))
|
||||
|
||||
@ -97,7 +100,7 @@
|
||||
(if (taxvalue-col column-vector)
|
||||
(addto! heading-list (_ "Tax Amount")))
|
||||
(if (value-col column-vector)
|
||||
(addto! heading-list (_ "Total Charge")))
|
||||
(addto! heading-list (_ "Value")))
|
||||
(reverse heading-list)))
|
||||
|
||||
(define (monetary-or-percent numeric currency entry-type)
|
||||
@ -249,7 +252,7 @@
|
||||
|
||||
gnc:*report-options*)
|
||||
|
||||
(define (make-entry-table entries options)
|
||||
(define (make-entry-table entries options add-order)
|
||||
|
||||
(define (add-subtotal-row leader table used-columns
|
||||
subtotal-collector subtotal-style subtotal-label)
|
||||
@ -330,6 +333,9 @@
|
||||
(gnc:gnc-monetary-commodity (cdr entry-values))
|
||||
(gnc:gnc-monetary-amount (cdr entry-values)))
|
||||
|
||||
(let ((order (gnc:entry-get-order current)))
|
||||
(if order (add-order order)))
|
||||
|
||||
(do-rows-with-subtotals leader
|
||||
rest
|
||||
table
|
||||
@ -379,7 +385,7 @@
|
||||
(line-helper rest)))))
|
||||
(line-helper (string->list string)))
|
||||
|
||||
(define (make-client-table address)
|
||||
(define (make-client-table address orders)
|
||||
(let ((table (gnc:make-html-table)))
|
||||
(gnc:html-table-set-style!
|
||||
table "table"
|
||||
@ -390,6 +396,18 @@
|
||||
table
|
||||
(list
|
||||
(string-expand address #\newline "<br>")))
|
||||
(gnc:html-table-append-row!
|
||||
table
|
||||
(list "<br>"))
|
||||
(for-each
|
||||
(lambda (order)
|
||||
(let* ((reference (gnc:order-get-reference order)))
|
||||
(if (and reference (> (string-length reference) 0))
|
||||
(gnc:html-table-append-row!
|
||||
table
|
||||
(list
|
||||
(string-append (_ "REF") ": " reference))))))
|
||||
orders)
|
||||
(set-last-row-style!
|
||||
table "td"
|
||||
'attribute (list "valign" "top"))
|
||||
@ -451,17 +469,21 @@
|
||||
(gnc:option-value
|
||||
(gnc:lookup-option (gnc:report-options report-obj) section name)))
|
||||
|
||||
(let ((document (gnc:make-html-document))
|
||||
(table '())
|
||||
(owner #f)
|
||||
(entries '())
|
||||
(invoice (opt-val "__reg" "invoice"))
|
||||
(title #f))
|
||||
(let* ((document (gnc:make-html-document))
|
||||
(table '())
|
||||
(orders '())
|
||||
(invoice (opt-val "__reg" "invoice"))
|
||||
(owner (gnc:invoice-get-owner invoice))
|
||||
(entries (gnc:invoice-get-entries invoice))
|
||||
(title (string-append (_ "Invoice #") (gnc:invoice-get-id invoice))))
|
||||
|
||||
(set! owner (gnc:invoice-get-owner invoice))
|
||||
(set! entries (gnc:invoice-get-entries invoice))
|
||||
(set! table (make-entry-table entries (gnc:report-options report-obj)))
|
||||
(set! title (string-append (_ "Invoice #") (gnc:invoice-get-id invoice)))
|
||||
(define (add-order o)
|
||||
(if (not (member o orders))
|
||||
(addto! orders o)))
|
||||
|
||||
(set! table (make-entry-table entries
|
||||
(gnc:report-options report-obj)
|
||||
add-order))
|
||||
|
||||
(gnc:html-document-set-title! document title)
|
||||
|
||||
@ -491,7 +513,7 @@
|
||||
|
||||
(gnc:html-document-add-object!
|
||||
document
|
||||
(make-client-table (gnc:owner-get-address owner)))
|
||||
(make-client-table (gnc:owner-get-address owner) orders))
|
||||
|
||||
(make-break! document)
|
||||
(make-break! document)
|
||||
|
Loading…
Reference in New Issue
Block a user