- gncOwner: add create/destroy functions (for scheme)

- g-wrap the gncOwner interfaces

- restructure the Extensions menu

- dialog-invoice.c: hide the 'print invoice' button until after the
		invoice has been posted

- dialog-order.c: validate the passed-in gncowner to make sure it is a
		valid type


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6687 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Derek Atkins 2002-02-05 04:11:31 +00:00
parent 75bade2f8d
commit 198b7d043b
7 changed files with 253 additions and 45 deletions

View File

@ -16,6 +16,19 @@
#define _GNC_MOD_NAME GNC_OWNER_MODULE_NAME
GncOwner * gncOwnerCreate (void)
{
GncOwner *o = g_new0 (GncOwner, 1);
o->type = GNC_OWNER_NONE;
return o;
}
void gncOwnerDestroy (GncOwner *owner)
{
if (!owner) return;
g_free (owner);
}
void gncOwnerInitUndefined (GncOwner *owner, gpointer obj)
{
if (!owner) return;

View File

@ -69,4 +69,12 @@ const GUID * gncOwnerGetEndGUID (GncOwner *owner);
#define OWNER_PARENTG "parent-guid"
#define OWNER_NAME "name"
/*
* These two functions are mainly for the convenience of scheme code.
* Normal C code has no need to ever use these two functions, and rather
* can just use a GncOwner directly and just pass around a pointer to it.
*/
GncOwner * gncOwnerCreate (void);
void gncOwnerDestroy (GncOwner *owner);
#endif /* GNC_OWNER_H_ */

View File

@ -1,5 +1,9 @@
;;; -*-scheme-*-
;(debug-enable 'backtrace)
;(debug-enable 'debug)
;(read-enable 'positions)
(debug-set! maxdepth 100000)
(debug-set! stack 2000000)
@ -12,6 +16,7 @@
(use-modules (g-wrap gw-wct-spec))
(use-modules (g-wrapped gw-engine-spec))
(use-modules (g-wrap gw-wct-spec))
(let ((ws (gw:new-wrapset "gw-business-core")))
@ -56,6 +61,14 @@
(gw:wrap-as-wct ws '<gnc:GncOwner*> "GncOwner*" "const GncOwner*")
(gw:wrap-as-wct ws '<gnc:GncVendor*> "GncVendor*" "const GncVendor*")
(let ((wt (gw:wrap-enumeration ws '<gnc:GncOwnerType> "GncOwnerType")))
(gw:enum-add-value! wt "GNC_OWNER_NONE" 'gnc-owner-none)
(gw:enum-add-value! wt "GNC_OWNER_UNDEFINED" 'gnc-owner-undefined)
(gw:enum-add-value! wt "GNC_OWNER_CUSTOMER" 'gnc-owner-customer)
(gw:enum-add-value! wt "GNC_OWNER_JOB" 'gnc-owner-job)
(gw:enum-add-value! wt "GNC_OWNER_VENDOR" 'gnc-owner-vendor)
#t)
;; gncAddress.h
;; gncCustomer.h
@ -71,6 +84,85 @@
;; gncOrder.h
;; gncOwner.h
(gw:wrap-function
ws
'gnc:owner-create
'<gnc:GncOwner*>
"gncOwnerCreate"
'()
"Create a GncOwner object")
(gw:wrap-function
ws
'gnc:owner-destroy
'<gw:void>
"gncOwnerDestroy"
'((<gnc:GncOwner*> owner))
"Destroy a GncOwner object")
(gw:wrap-function
ws
'gnc:owner-init-customer
'<gw:void>
"gncOwnerInitCustomer"
'((<gnc:GncOwner*> owner) (<gnc:GncCustomer*> customer))
"Initialize an owner to hold a Customer. The Customer may be NULL.")
(gw:wrap-function
ws
'gnc:owner-init-job
'<gw:void>
"gncOwnerInitJob"
'((<gnc:GncOwner*> owner) (<gnc:GncJob*> job))
"Initialize an owner to hold a Job. The Job may be NULL.")
(gw:wrap-function
ws
'gnc:owner-init-vendor
'<gw:void>
"gncOwnerInitVendor"
'((<gnc:GncOwner*> owner) (<gnc:GncVendor*> vendor))
"Initialize an owner to hold a Vendor. The Vendor may be NULL.")
(gw:wrap-function
ws
'gnc:owner-get-type
'<gnc:GncOwnerType>
"gncOwnerGetType"
'((<gnc:GncOwner*> owner))
"Return the type of this owner.")
(gw:wrap-function
ws
'gnc:owner-get-customer
'<gnc:GncCustomer*>
"gncOwnerGetCustomer"
'((<gnc:GncOwner*> owner))
"Return the customer of this owner.")
(gw:wrap-function
ws
'gnc:owner-get-job
'<gnc:GncJob*>
"gncOwnerGetJob"
'((<gnc:GncOwner*> owner))
"Return the job of this owner.")
(gw:wrap-function
ws
'gnc:owner-get-vendor
'<gnc:GncVendor*>
"gncOwnerGetVendor"
'((<gnc:GncOwner*> owner))
"Return the vendor of this owner.")
(gw:wrap-function
ws
'gnc:owner-equal
'<gw:bool>
"gncOwnerEqual"
'((<gnc:GncOwner*> owner1) (<gnc:GncOwner*> owner2))
"Compare owner1 and owner2 and return if they are equal")
;; gncVendor.h

View File

@ -5,11 +5,122 @@
(gnc:module-load "gnucash/gnome-utils" 0)
(gnc:module-load "gnucash/business-core" 0)
(define (add-customer-extensions)
(let ((last-cust (gnc:owner-create)))
(define customer-menu
(gnc:make-menu (N_ "Customers")
(list "Extensions" "")))
(define new-customer-item
(gnc:make-menu-item (N_ "New Customer")
(N_ "New Customer")
(list "Extensions" "Customers" "")
(lambda ()
(let ((cust (gnc:customer-new
#f (gnc:get-current-book))))
(if (not (null? cust))
(gnc:owner-init-customer last-cust cust))))))
(define select-customer-item
(gnc:make-menu-item (N_ "Customer Selection")
(N_ "Customer Selection")
(list "Extensions" "Customers" "")
(lambda ()
(let ((cust (gnc:customer-select
(gnc:get-current-book)
(gnc:owner-get-customer
last-cust)
#f)))
(if (not (null? cust))
(gnc:owner-init-customer last-cust cust))))))
(define new-order-item
(gnc:make-menu-item (N_ "New Order")
(N_ "New Order")
(list "Extensions" "Customers" "")
(lambda ()
(gnc:order-new #f last-cust
(gnc:get-current-book)))))
(define new-invoice-item
(gnc:make-menu-item (N_ "New Invoice")
(N_ "New Invoice")
(list "Extensions" "Customers" "")
(lambda ()
(gnc:invoice-new #f last-cust
(gnc:get-current-book)))))
(gnc:owner-init-customer last-cust #f)
(gnc:add-extension customer-menu)
(gnc:add-extension new-invoice-item)
(gnc:add-extension new-order-item)
(gnc:add-extension select-customer-item)
(gnc:add-extension new-customer-item)
))
(define (add-vendor-extensions)
(let ((last-vendor (gnc:owner-create)))
(define vendor-menu
(gnc:make-menu (N_ "Vendors")
(list "Extensions" "")))
(define new-vendor-item
(gnc:make-menu-item (N_ "New Vendor")
(N_ "New Vendor")
(list "Extensions" "Vendors" "")
(lambda ()
(let ((vendor (gnc:vendor-new
#f
(gnc:get-current-book))))
if (not (null? vendor))
(gnc:owner-init-vendor last-vendor vendor)))))
(define select-vendor-item
(gnc:make-menu-item (N_ "Vendor Selection")
(N_ "Vendor Selection")
(list "Extensions" "Vendors" "")
(lambda ()
(let ((vendor (gnc:vendor-select
(gnc:get-current-book)
(gnc:owner-get-vendor
last-vendor)
#f)))
(if (not (null? vendor))
(gnc:owner-init-vendor last-vendor vendor))))))
(define new-order-item
(gnc:make-menu-item (N_ "New Order")
(N_ "New Order")
(list "Extensions" "Vendors" "")
(lambda ()
(gnc:order-new #f last-vendor
(gnc:get-current-book)))))
(define new-invoice-item
(gnc:make-menu-item (N_ "New Invoice")
(N_ "New Invoice")
(list "Extensions" "Vendors" "")
(lambda ()
(gnc:invoice-new #f last-vendor
(gnc:get-current-book)))))
(gnc:owner-init-vendor last-vendor #f)
(gnc:add-extension vendor-menu)
(gnc:add-extension new-invoice-item)
(gnc:add-extension new-order-item)
(gnc:add-extension select-vendor-item)
(gnc:add-extension new-vendor-item)
))
(define (add-business-extensions)
(define gnc:extensions-last-order #f)
(define gnc:extensions-last-invoice #f)
(define gnc:extensions-owner #f)
(define new-job-item
(gnc:make-menu-item (N_ "Test New Job Dialog")
@ -26,22 +137,6 @@
(gnc:job-select #f (gnc:get-current-book)
#f #f))))
(define new-vendor-item
(gnc:make-menu-item (N_ "Test New Vendor Dialog")
(N_ "Test New Vendor Dialog")
(list "Extensions" "")
(lambda ()
(gnc:vendor-new #f (gnc:get-current-book)))))
(define select-vendor-item
(gnc:make-menu-item (N_ "Test Vendor Selection Dialog")
(N_ "Test Vendor Selection Dialog")
(list "Extensions" "")
(lambda ()
(gnc:vendor-select (gnc:get-current-book)
#f #f))))
(define new-employee-item
(gnc:make-menu-item (N_ "Test New Employee Dialog")
(N_ "Test New Employee Dialog")
@ -58,15 +153,6 @@
(gnc:employee-select (gnc:get-current-book)
#f #f))))
(define new-order-item
(gnc:make-menu-item (N_ "Test New Order Dialog")
(N_ "Test New Order Dialog")
(list "Extensions" "")
(lambda ()
(set! gnc:extensions-last-order
(gnc:order-new #f gnc:extensions-owner
(gnc:get-current-book))))))
(define edit-order-item
(gnc:make-menu-item (N_ "Test Edit/View Order Dialog")
(N_ "Test Edit/View Order Dialog")
@ -74,15 +160,6 @@
(lambda ()
(gnc:order-edit #f gnc:extensions-last-order))))
(define new-invoice-item
(gnc:make-menu-item (N_ "Test New Invoice Dialog")
(N_ "Test New Invoice Dialog")
(list "Extensions" "")
(lambda ()
(set! gnc:extensions-last-invoice
(gnc:invoice-new #f gnc:extensions-owner
(gnc:get-current-book))))))
(define edit-invoice-item
(gnc:make-menu-item (N_ "Test Edit/View Invoice Dialog")
(N_ "Test Edit/View Invoice Dialog")
@ -91,15 +168,15 @@
(gnc:invoice-edit #f gnc:extensions-last-invoice))))
(gnc:add-extension edit-invoice-item)
(gnc:add-extension new-invoice-item)
(gnc:add-extension edit-order-item)
(gnc:add-extension new-order-item)
;; (gnc:add-extension edit-invoice-item)
;; (gnc:add-extension edit-order-item)
(gnc:add-extension select-employee-item)
(gnc:add-extension new-employee-item)
(gnc:add-extension select-vendor-item)
(gnc:add-extension new-vendor-item)
(gnc:add-extension select-job-item)
(gnc:add-extension new-job-item))
(gnc:add-extension new-job-item)
(add-vendor-extensions)
(add-customer-extensions)
)
(gnc:hook-add-dangler gnc:*add-extension-hook* add-business-extensions)

View File

@ -501,6 +501,10 @@ gnc_invoice_update_window (InvoiceWindow *iw)
/* hide the close invoice button -- it needs to be posted first! */
hide = glade_xml_get_widget (iw->xml, "close_invoice_button");
gtk_widget_hide_all (hide);
/* Also hide the print invoice button, for the same reason */
hide = glade_xml_get_widget (iw->xml, "print_invoice_button");
gtk_widget_hide_all (hide);
}
}

View File

@ -598,9 +598,19 @@ gnc_order_new (GtkWidget *parent, GncOwner *ownerp, GNCBook *bookp)
GncOrder *created_order = NULL;
GncOwner owner;
if (ownerp)
gncOwnerCopy (ownerp, &owner);
else
if (ownerp) {
switch (gncOwnerGetType (ownerp)) {
case GNC_OWNER_CUSTOMER:
case GNC_OWNER_VENDOR:
case GNC_OWNER_JOB:
gncOwnerCopy (ownerp, &owner);
break;
default:
g_warning ("Cannot deal with unknown Owner types");
/* XXX: popup a warning? */
return NULL;
}
} else
gncOwnerInitJob (&owner, NULL); /* XXX: pass in the owner type? */
/* Make sure required options exist */

View File

@ -1,5 +1,9 @@
;;; -*-scheme-*-
;(debug-enable 'backtrace)
;(debug-enable 'debug)
;(read-enable 'positions)
(debug-set! maxdepth 100000)
(debug-set! stack 2000000)