2001-11-16 19:17:06 -06:00
|
|
|
(define-module (gnucash business-core))
|
2002-02-26 00:07:09 -06:00
|
|
|
(use-modules (g-wrapped gw-business-core))
|
2002-07-03 21:39:19 -05:00
|
|
|
(use-modules (gnucash gnc-module))
|
|
|
|
(gnc:module-load "gnucash/engine" 0)
|
2002-02-26 00:07:09 -06:00
|
|
|
|
|
|
|
(define (gnc:owner-get-address owner)
|
2002-05-08 15:42:38 -05:00
|
|
|
(let ((type (gw:enum-<gnc:GncOwnerType>-val->sym
|
|
|
|
(gnc:owner-get-type owner) #f)))
|
|
|
|
(case type
|
|
|
|
((gnc-owner-customer)
|
|
|
|
(let ((c (gnc:owner-get-customer owner)))
|
|
|
|
(gnc:customer-get-addr c)))
|
|
|
|
((gnc-owner-vendor)
|
|
|
|
(let ((v (gnc:owner-get-vendor owner)))
|
|
|
|
(gnc:vendor-get-addr v)))
|
2003-03-03 00:47:54 -06:00
|
|
|
((gnc-owner-employee)
|
|
|
|
(let ((e (gnc:owner-get-employee owner)))
|
|
|
|
(gnc:employee-get-addr e)))
|
2002-05-08 15:42:38 -05:00
|
|
|
((gnc-owner-job)
|
|
|
|
(gnc:owner-get-address (gnc:job-get-owner
|
|
|
|
(gnc:owner-get-job owner))))
|
|
|
|
(else ""))))
|
|
|
|
|
2006-02-12 10:16:20 -06:00
|
|
|
;
|
|
|
|
; The -dep functions return combined strings of the appropriate
|
|
|
|
; content. When multiple "lines" are included, separate them
|
|
|
|
; by newlines.
|
|
|
|
;
|
|
|
|
; e.g.: return a string which is basically:
|
|
|
|
; name \n Attn: contact \n addr1 \n addr2 \n addr3 \n addr4
|
|
|
|
;
|
|
|
|
; But only include the strings that really exist.
|
|
|
|
;
|
|
|
|
|
|
|
|
(define (gnc:owner-get-name-dep owner)
|
|
|
|
(define (just-name name)
|
|
|
|
(if name name ""))
|
|
|
|
|
2002-02-26 00:07:09 -06:00
|
|
|
(let ((type (gw:enum-<gnc:GncOwnerType>-val->sym
|
|
|
|
(gnc:owner-get-type owner) #f)))
|
|
|
|
(case type
|
|
|
|
((gnc-owner-job)
|
2006-02-12 10:16:20 -06:00
|
|
|
(gnc:owner-get-dep-name (gnc:job-get-owner
|
|
|
|
(gnc:owner-get-job owner))))
|
|
|
|
(else (just-name (gnc:owner-get-name owner))))))
|
|
|
|
|
|
|
|
(define (gnc:owner-get-address-dep owner)
|
|
|
|
(define (add-if-exists lst new)
|
|
|
|
(if (and new (> (string-length new) 0))
|
|
|
|
(cons new lst)
|
|
|
|
lst))
|
|
|
|
(define (build-string lst)
|
|
|
|
(cond
|
|
|
|
((null? lst) "")
|
|
|
|
((null? (cdr lst)) (car lst))
|
|
|
|
(else (string-append (build-string (cdr lst)) "\n" (car lst)))))
|
|
|
|
(let ((lst '())
|
|
|
|
(addr (gnc:owner-get-address owner)))
|
|
|
|
(set! lst (add-if-exists lst (gnc:address-get-addr1 addr)))
|
|
|
|
(set! lst (add-if-exists lst (gnc:address-get-addr2 addr)))
|
|
|
|
(set! lst (add-if-exists lst (gnc:address-get-addr3 addr)))
|
|
|
|
(set! lst (add-if-exists lst (gnc:address-get-addr4 addr)))
|
|
|
|
(build-string lst)))
|
|
|
|
|
|
|
|
(define (gnc:owner-get-name-and-address-dep owner)
|
|
|
|
(let ((name (gnc:owner-get-name-dep owner))
|
|
|
|
(addr (gnc:owner-get-address-dep owner)))
|
|
|
|
(if (> (string-length name) 0)
|
|
|
|
(string-append name "\n" addr)
|
|
|
|
addr)))
|
2002-02-26 00:07:09 -06:00
|
|
|
|
|
|
|
(define (gnc:owner-get-owner-id owner)
|
|
|
|
(let ((type (gw:enum-<gnc:GncOwnerType>-val->sym
|
|
|
|
(gnc:owner-get-type owner) #f)))
|
|
|
|
(case type
|
|
|
|
((gnc-owner-customer)
|
|
|
|
(let ((c (gnc:owner-get-customer owner)))
|
2003-03-03 00:47:54 -06:00
|
|
|
(gnc:customer-get-id c)))
|
2002-02-26 00:07:09 -06:00
|
|
|
((gnc-owner-vendor)
|
|
|
|
(let ((v (gnc:owner-get-vendor owner)))
|
2003-03-03 00:47:54 -06:00
|
|
|
(gnc:vendor-get-id v)))
|
|
|
|
((gnc-owner-employee)
|
|
|
|
(let ((e (gnc:owner-get-employee owner)))
|
|
|
|
(gnc:employee-get-id e)))
|
2002-02-26 00:07:09 -06:00
|
|
|
((gnc-owner-job)
|
2005-08-15 07:54:21 -05:00
|
|
|
(gnc:owner-get-owner-id (gnc:job-get-owner (gnc:owner-get-job owner))))
|
2002-02-26 00:07:09 -06:00
|
|
|
(else ""))))
|
|
|
|
|
2002-07-03 21:39:19 -05:00
|
|
|
(define (gnc:entry-type-percent-p type-val)
|
2002-07-04 10:31:55 -05:00
|
|
|
(let ((type (gw:enum-<gnc:GncAmountType>-val->sym type-val #f)))
|
2002-07-03 21:39:19 -05:00
|
|
|
(equal? type 'gnc-amount-type-percent)))
|
|
|
|
|
|
|
|
(define (gnc:owner-from-split split result-owner)
|
|
|
|
(let* ((trans (gnc:split-get-parent split))
|
|
|
|
(invoice (gnc:invoice-get-invoice-from-txn trans))
|
|
|
|
(temp-owner (gnc:owner-create))
|
|
|
|
(owner #f))
|
|
|
|
|
|
|
|
(if invoice
|
|
|
|
(set! owner (gnc:invoice-get-owner invoice))
|
|
|
|
(let ((split-list (gnc:transaction-get-splits trans)))
|
|
|
|
(define (check-splits splits)
|
2003-01-07 17:31:35 -06:00
|
|
|
(if (and splits (not (null? splits)))
|
|
|
|
(let* ((split (car splits))
|
|
|
|
(lot (gnc:split-get-lot split)))
|
|
|
|
(if lot
|
|
|
|
(let* ((invoice (gnc:invoice-get-invoice-from-lot lot))
|
|
|
|
(owner? (gnc:owner-get-owner-from-lot
|
|
|
|
lot temp-owner)))
|
|
|
|
(if invoice
|
|
|
|
(set! owner (gnc:invoice-get-owner invoice))
|
|
|
|
(if owner?
|
|
|
|
(set! owner temp-owner)
|
|
|
|
(check-splits (cdr splits)))))
|
|
|
|
(check-splits (cdr splits))))))
|
2002-07-03 21:39:19 -05:00
|
|
|
(check-splits split-list)))
|
|
|
|
|
2003-01-07 17:31:35 -06:00
|
|
|
(if owner
|
|
|
|
(begin
|
|
|
|
(gnc:owner-copy-into-owner (gnc:owner-get-end-owner owner) result-owner)
|
|
|
|
(gnc:owner-destroy temp-owner)
|
|
|
|
result-owner)
|
|
|
|
(begin
|
|
|
|
(gnc:owner-destroy temp-owner)
|
|
|
|
#f))))
|
2002-07-03 21:39:19 -05:00
|
|
|
|
2002-02-26 17:42:11 -06:00
|
|
|
|
2002-02-26 00:07:09 -06:00
|
|
|
(export gnc:owner-get-address)
|
2006-02-12 10:16:20 -06:00
|
|
|
(export gnc:owner-get-name-dep)
|
|
|
|
(export gnc:owner-get-address-dep)
|
2006-02-12 09:28:58 -06:00
|
|
|
(export gnc:owner-get-name-and-address-dep)
|
2002-02-26 00:07:09 -06:00
|
|
|
(export gnc:owner-get-owner-id)
|
2002-02-26 17:42:11 -06:00
|
|
|
(export gnc:entry-type-percent-p)
|
2002-07-03 21:39:19 -05:00
|
|
|
(export gnc:owner-from-split)
|