GnuCash c935c2f+
Loading...
Searching...
No Matches
gncInvoice.h
Go to the documentation of this file.
1/********************************************************************\
2 * gncInvoice.h -- the Core Business Invoice Interface *
3 * *
4 * This program is free software; you can redistribute it and/or *
5 * modify it under the terms of the GNU General Public License as *
6 * published by the Free Software Foundation; either version 2 of *
7 * the License, or (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License*
15 * along with this program; if not, contact: *
16 * *
17 * Free Software Foundation Voice: +1-617-542-5942 *
18 * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
19 * Boston, MA 02110-1301, USA gnu@gnu.org *
20 * *
21\********************************************************************/
36#ifndef GNC_INVOICE_H_
37#define GNC_INVOICE_H_
38
39struct _gncInvoice;
40typedef struct _gncInvoice GncInvoice;
41typedef struct _gncInvoiceClass GncInvoiceClass;
42typedef GList GncInvoiceList;
43
44#include <glib.h>
45#include "gncBillTerm.h"
46#include "gncEntry.h"
47#include "gncOwner.h"
48#include "gnc-lot.h"
49#include "qofbook.h"
50#include "qofbook.h"
51#include "gnc-pricedb.h"
52
53#ifdef __cplusplus
54extern "C" {
55#endif
56
57#define GNC_ID_INVOICE "gncInvoice"
58
59typedef enum
60{
61 GNC_INVOICE_UNDEFINED ,
62 GNC_INVOICE_CUST_INVOICE , /* Invoice */
63 GNC_INVOICE_VEND_INVOICE , /* Bill */
64 GNC_INVOICE_EMPL_INVOICE , /* Voucher */
65 GNC_INVOICE_CUST_CREDIT_NOTE , /* Credit Note for a customer */
66 GNC_INVOICE_VEND_CREDIT_NOTE , /* Credit Note from a vendor */
67 GNC_INVOICE_EMPL_CREDIT_NOTE , /* Credit Note from an employee,
68 not sure this makes sense,
69 but all code is symmetrical
70 so I've added it to prevent unexpected errors */
71 GNC_INVOICE_NUM_TYPES
72} GncInvoiceType;
73
74/* --- type macros --- */
75#define GNC_TYPE_INVOICE (gnc_invoice_get_type ())
76#define GNC_INVOICE(o) \
77 (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_INVOICE, GncInvoice))
78#define GNC_INVOICE_CLASS(k) \
79 (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_INVOICE, GncInvoiceClass))
80#define GNC_IS_INVOICE(o) \
81 (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_INVOICE))
82#define GNC_IS_INVOICE_CLASS(k) \
83 (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_INVOICE))
84#define GNC_INVOICE_GET_CLASS(o) \
85 (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_INVOICE, GncInvoiceClass))
86GType gnc_invoice_get_type(void);
87
90GncInvoice *gncInvoiceCreate (QofBook *book);
91
92void gncInvoiceDestroy (GncInvoice *invoice);
93
100GncInvoice *gncInvoiceCopy (const GncInvoice *other_invoice);
105void gncInvoiceSetID (GncInvoice *invoice, const char *id);
106void gncInvoiceSetOwner (GncInvoice *invoice, GncOwner *owner);
109void gncInvoiceSetDateOpenedGDate (GncInvoice *invoice, const GDate *date);
110void gncInvoiceSetDateOpened (GncInvoice *invoice, time64 date);
111void gncInvoiceSetDatePosted (GncInvoice *invoice, time64 date);
112void gncInvoiceSetTerms (GncInvoice *invoice, GncBillTerm *terms);
113void gncInvoiceSetBillingID (GncInvoice *invoice, const char *billing_id);
114void gncInvoiceSetNotes (GncInvoice *invoice, const char *notes);
115void gncInvoiceSetDocLink (GncInvoice *invoice, const char *doclink);
116void gncInvoiceSetCurrency (GncInvoice *invoice, gnc_commodity *currency);
117void gncInvoiceSetActive (GncInvoice *invoice, gboolean active);
118void gncInvoiceSetIsCreditNote (GncInvoice *invoice, gboolean credit_note);
119void gncInvoiceSetBillTo (GncInvoice *invoice, GncOwner *billto);
120void gncInvoiceSetToChargeAmount (GncInvoice *invoice, gnc_numeric amount);
123void gncInvoiceAddEntry (GncInvoice *invoice, GncEntry *entry);
124void gncInvoiceRemoveEntry (GncInvoice *invoice, GncEntry *entry);
125void gncInvoiceAddPrice (GncInvoice *invoice, GNCPrice *price);
126
128void gncBillAddEntry (GncInvoice *bill, GncEntry *entry);
129void gncBillRemoveEntry (GncInvoice *bill, GncEntry *entry);
130
134void gncInvoiceSortEntries (GncInvoice *invoice);
135
139void gncInvoiceRemoveEntries (GncInvoice *invoice);
140
143const char * gncInvoiceGetID (const GncInvoice *invoice);
144const GncOwner * gncInvoiceGetOwner (const GncInvoice *invoice);
145time64 gncInvoiceGetDateOpened (const GncInvoice *invoice);
146time64 gncInvoiceGetDatePosted (const GncInvoice *invoice);
147time64 gncInvoiceGetDateDue (const GncInvoice *invoice);
148GncBillTerm * gncInvoiceGetTerms (const GncInvoice *invoice);
149const char * gncInvoiceGetBillingID (const GncInvoice *invoice);
150const char * gncInvoiceGetNotes (const GncInvoice *invoice);
151const char * gncInvoiceGetDocLink (const GncInvoice *invoice);
152GncOwnerType gncInvoiceGetOwnerType (const GncInvoice *invoice);
153GList * gncInvoiceGetTypeListForOwnerType (const GncOwnerType type);
154GncInvoiceType gncInvoiceGetType (const GncInvoice *invoice);
155const char * gncInvoiceGetTypeString (const GncInvoice *invoice);
156gnc_commodity * gncInvoiceGetCurrency (const GncInvoice *invoice);
157GncOwner * gncInvoiceGetBillTo (GncInvoice *invoice);
158gnc_numeric gncInvoiceGetToChargeAmount (const GncInvoice *invoice);
159gboolean gncInvoiceGetActive (const GncInvoice *invoice);
160gboolean gncInvoiceGetIsCreditNote (const GncInvoice *invoice);
161
162GNCLot * gncInvoiceGetPostedLot (const GncInvoice *invoice);
163Transaction * gncInvoiceGetPostedTxn (const GncInvoice *invoice);
164Account * gncInvoiceGetPostedAcc (const GncInvoice *invoice);
169gnc_numeric gncInvoiceGetTotal (GncInvoice *invoice);
170gnc_numeric gncInvoiceGetTotalOf (GncInvoice *invoice, GncEntryPaymentType type);
171gnc_numeric gncInvoiceGetTotalSubtotal (GncInvoice *invoice);
172gnc_numeric gncInvoiceGetTotalTax (GncInvoice *invoice);
175AccountValueList *gncInvoiceGetTotalTaxList (GncInvoice *invoice);
176
177typedef GList EntryList;
178EntryList * gncInvoiceGetEntries (GncInvoice *invoice);
179GNCPrice * gncInvoiceGetPrice (GncInvoice *invoice, gnc_commodity* commodity);
180
189gboolean gncInvoiceAmountPositive (const GncInvoice *invoice);
190
200GHashTable *gncInvoiceGetForeignCurrencies (const GncInvoice *invoice);
201
219Transaction *
220gncInvoicePostToAccount (GncInvoice *invoice, Account *acc,
221 time64 posted_date, time64 due_date,
222 const char *memo, gboolean accumulatesplits,
223 gboolean autopay);
224
235gboolean
236gncInvoiceUnpost (GncInvoice *invoice, gboolean reset_tax_tables);
237
243void
244gncInvoiceAutoApplyPayments (GncInvoice *invoice);
245
259void
260gncInvoiceApplyPayment (const GncInvoice *invoice, Transaction *txn,
261 Account *xfer_acc, gnc_numeric amount,
262 gnc_numeric exch, time64 date,
263 const char *memo, const char *num);
264
265
267GncInvoice * gncInvoiceGetInvoiceFromTxn (const Transaction *txn);
268
270GncInvoice * gncInvoiceGetInvoiceFromLot (GNCLot *lot);
271
276static inline GncInvoice * gncInvoiceLookup (const QofBook *book, const GncGUID *guid)
277{
278 if (book == NULL || guid == NULL) return NULL;
279 QOF_BOOK_RETURN_ENTITY(book, guid, GNC_ID_INVOICE, GncInvoice);
280}
281
282void gncInvoiceBeginEdit (GncInvoice *invoice);
283void gncInvoiceCommitEdit (GncInvoice *invoice);
284int gncInvoiceCompare (const GncInvoice *a, const GncInvoice *b);
285gboolean gncInvoiceIsPosted (const GncInvoice *invoice);
286gboolean gncInvoiceIsPaid (const GncInvoice *invoice);
287
288#define INVOICE_ID "id"
289#define INVOICE_OWNER "owner"
290#define INVOICE_OPENED "date_opened"
291#define INVOICE_POSTED "date_posted"
292#define INVOICE_DUE "date_due"
293#define INVOICE_IS_POSTED "is_posted?"
294#define INVOICE_IS_PAID "is_paid?"
295#define INVOICE_TERMS "terms"
296#define INVOICE_BILLINGID "billing_id"
297#define INVOICE_NOTES "notes"
298#define INVOICE_DOCLINK "doclink"
299#define INVOICE_ACC "account"
300#define INVOICE_POST_TXN "posted_txn"
301#define INVOICE_POST_LOT "posted_lot"
302#define INVOICE_IS_CN "credit_note"
303#define INVOICE_TYPE "type"
304#define INVOICE_TYPE_STRING "type_string"
305#define INVOICE_BILLTO "bill-to"
306#define INVOICE_JOB "invoice_job"
307
308#define INVOICE_FROM_LOT "invoice-from-lot"
309#define INVOICE_FROM_TXN "invoice-from-txn"
310
311QofBook *gncInvoiceGetBook (GncInvoice *x);
312
314#define gncInvoiceGetGUID(x) qof_instance_get_guid (QOF_INSTANCE(x))
315#define gncInvoiceRetGUID(x) (x ? *(qof_instance_get_guid (QOF_INSTANCE(x))) : *(guid_null()))
316
318gboolean gncInvoiceEqual (const GncInvoice *a, const GncInvoice *b);
319
320#ifdef __cplusplus
321}
322#endif
323
324#endif /* GNC_INVOICE_H_ */
a simple price database for gnucash
Billing Term interface.
Business Entry Interface.
Business Interface: Object OWNERs.
#define QOF_BOOK_RETURN_ENTITY(book, guid, e_type, c_type)
Encapsulates all the information about a dataset manipulated by QOF.
Definition qofbook.h:101
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
Definition gnc-date.h:87
gnc_numeric gncInvoiceGetTotal(GncInvoice *invoice)
Return the "total" amount of the invoice as seen on the document (and shown to the user in the report...
GHashTable * gncInvoiceGetForeignCurrencies(const GncInvoice *invoice)
Return an overview of amounts on this invoice that will be posted to accounts in currencies that are ...
AccountValueList * gncInvoiceGetTotalTaxList(GncInvoice *invoice)
Return a list of tax totals accumulated per tax account.
void gncInvoiceAutoApplyPayments(GncInvoice *invoice)
Attempt to pay the invoice using open payment lots and lots for documents of the opposite sign (credi...
GncInvoice * gncInvoiceCopy(const GncInvoice *other_invoice)
Create a new GncInvoice object as a deep copy of the given other invoice.
Definition gncInvoice.c:336
void gncInvoiceSortEntries(GncInvoice *invoice)
Call this function when an Entry is changed and you want to re-sort the list of entries.
Definition gncInvoice.c:750
gboolean gncInvoiceUnpost(GncInvoice *invoice, gboolean reset_tax_tables)
Unpost this invoice.
void gncBillAddEntry(GncInvoice *bill, GncEntry *entry)
Call this function when adding an entry to a bill instead of an invoice.
Definition gncInvoice.c:719
Transaction * gncInvoicePostToAccount(GncInvoice *invoice, Account *acc, time64 posted_date, time64 due_date, const char *memo, gboolean accumulatesplits, gboolean autopay)
Post this invoice to an account.
GncInvoice * gncInvoiceGetInvoiceFromTxn(const Transaction *txn)
Given a transaction, find and return the Invoice.
gboolean gncInvoiceEqual(const GncInvoice *a, const GncInvoice *b)
Test support function used by test-dbi-business-stuff.c.
void gncInvoiceRemoveEntries(GncInvoice *invoice)
Remove all entries from an invoice.
Definition gncInvoice.c:760
GncInvoice * gncInvoiceGetInvoiceFromLot(GNCLot *lot)
Given a LOT, find and return the Invoice attached to the lot.
gboolean gncInvoiceAmountPositive(const GncInvoice *invoice)
Depending on the invoice type, invoices have a different effect on the balance.
void gncInvoiceApplyPayment(const GncInvoice *invoice, Transaction *txn, Account *xfer_acc, gnc_numeric amount, gnc_numeric exch, time64 date, const char *memo, const char *num)
A convenience function to apply a payment to an invoice.
void gncInvoiceSetDateOpenedGDate(GncInvoice *invoice, const GDate *date)
Set the DateOpened using a GDate argument.
Definition gncInvoice.c:488
Encapsulate all the information about a dataset.
STRUCTS.
The type used to store guids in C.
Definition guid.h:75
QofBook reference.
Definition qofbook-p.hpp:47