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:
Derek Atkins 2002-02-27 04:52:33 +00:00
parent d23182e372
commit 24384eb99a
9 changed files with 106 additions and 28 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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") ":&nbsp;" 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)