2003-10-17 00:15:56 -05:00
|
|
|
/********************************************************************\
|
|
|
|
* gncEntry.h -- the Core Business Entry Interface *
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or *
|
|
|
|
* modify it under the terms of the GNU General Public License as *
|
|
|
|
* published by the Free Software Foundation; either version 2 of *
|
|
|
|
* the License, or (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* This program is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
|
|
* GNU General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU General Public License*
|
|
|
|
* along with this program; if not, contact: *
|
|
|
|
* *
|
|
|
|
* Free Software Foundation Voice: +1-617-542-5942 *
|
2005-11-16 23:35:02 -06:00
|
|
|
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
|
|
|
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
2003-10-17 00:15:56 -05:00
|
|
|
* *
|
|
|
|
\********************************************************************/
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @addtogroup Business
|
|
|
|
@{ */
|
|
|
|
/** @addtogroup Entry
|
|
|
|
@{ */
|
|
|
|
/** @file gncEntry.h
|
|
|
|
@brief Business Entry Interface
|
|
|
|
@author Copyright (C) 2001,2002 Derek Atkins <warlord@MIT.EDU>
|
|
|
|
*/
|
2001-11-21 19:23:07 -06:00
|
|
|
|
|
|
|
#ifndef GNC_ENTRY_H_
|
|
|
|
#define GNC_ENTRY_H_
|
|
|
|
|
|
|
|
typedef struct _gncEntry GncEntry;
|
|
|
|
|
2003-04-01 15:15:22 -06:00
|
|
|
typedef enum {
|
|
|
|
GNC_PAYMENT_CASH = 1,
|
|
|
|
GNC_PAYMENT_CARD
|
|
|
|
} GncEntryPaymentType;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
GNC_DISC_PRETAX = 1,
|
|
|
|
GNC_DISC_SAMETIME,
|
|
|
|
GNC_DISC_POSTTAX
|
|
|
|
} GncDiscountHow;
|
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
#ifdef GNUCASH_MAJOR_VERSION
|
2003-10-19 00:13:59 -05:00
|
|
|
#include "gncBusiness.h"
|
2005-11-01 21:32:36 -06:00
|
|
|
#endif
|
2003-10-19 00:13:59 -05:00
|
|
|
#include "gncInvoice.h"
|
|
|
|
#include "gncOrder.h"
|
|
|
|
#include "gncTaxTable.h"
|
2005-11-01 21:32:36 -06:00
|
|
|
#include "gncOwner.h"
|
2003-10-19 00:13:59 -05:00
|
|
|
|
|
|
|
#define GNC_ID_ENTRY "gncEntry"
|
|
|
|
#define GNC_IS_ENTRY(obj) (QOF_CHECK_TYPE((obj), GNC_ID_ENTRY))
|
|
|
|
#define GNC_ENTRY(obj) (QOF_CHECK_CAST((obj), GNC_ID_ENTRY, GncEntry))
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2004-05-07 00:11:49 -05:00
|
|
|
/** How to apply the discount and taxes. There are three distinct ways to
|
2002-06-16 00:11:33 -05:00
|
|
|
* apply them:
|
|
|
|
*
|
|
|
|
* Type: discount tax
|
|
|
|
* PRETAX pretax pretax-discount
|
|
|
|
* SAMETIME pretax pretax
|
|
|
|
* POSTTAX pretax+tax pretax
|
|
|
|
*/
|
2003-03-02 22:58:55 -06:00
|
|
|
|
2002-07-01 13:31:48 -05:00
|
|
|
const char * gncEntryDiscountHowToString (GncDiscountHow how);
|
|
|
|
gboolean gncEntryDiscountStringToHow (const char *str, GncDiscountHow *how);
|
|
|
|
|
2003-03-02 22:58:55 -06:00
|
|
|
const char * gncEntryPaymentTypeToString (GncEntryPaymentType type);
|
|
|
|
gboolean gncEntryPaymentStringToType (const char *str, GncEntryPaymentType *type);
|
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Create/Destroy Functions
|
|
|
|
@{ */
|
2003-06-26 22:05:25 -05:00
|
|
|
GncEntry *gncEntryCreate (QofBook *book);
|
2001-11-21 19:23:07 -06:00
|
|
|
void gncEntryDestroy (GncEntry *entry);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2002-09-14 00:32:37 -05:00
|
|
|
/* SET FUNCTIONS */
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Generic (shared) data
|
|
|
|
@{ */
|
2002-02-27 23:10:07 -06:00
|
|
|
void gncEntrySetDate (GncEntry *entry, Timespec date);
|
|
|
|
void gncEntrySetDateEntered (GncEntry *entry, Timespec date);
|
2001-11-21 19:23:07 -06:00
|
|
|
void gncEntrySetDescription (GncEntry *entry, const char *desc);
|
|
|
|
void gncEntrySetAction (GncEntry *entry, const char *action);
|
2002-06-16 23:04:05 -05:00
|
|
|
void gncEntrySetNotes (GncEntry *entry, const char *notes);
|
2001-11-21 19:23:07 -06:00
|
|
|
void gncEntrySetQuantity (GncEntry *entry, gnc_numeric quantity);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Customer Invoices
|
|
|
|
@{ */
|
2002-07-11 10:11:33 -05:00
|
|
|
void gncEntrySetInvAccount (GncEntry *entry, Account *acc);
|
2002-09-14 00:32:37 -05:00
|
|
|
void gncEntrySetInvPrice (GncEntry *entry, gnc_numeric price);
|
|
|
|
void gncEntrySetInvTaxable (GncEntry *entry, gboolean taxable);
|
|
|
|
void gncEntrySetInvTaxIncluded (GncEntry *entry, gboolean tax_included);
|
|
|
|
void gncEntrySetInvTaxTable (GncEntry *entry, GncTaxTable *table);
|
|
|
|
void gncEntrySetInvDiscount (GncEntry *entry, gnc_numeric discount);
|
|
|
|
void gncEntrySetInvDiscountType (GncEntry *entry, GncAmountType type);
|
|
|
|
void gncEntrySetInvDiscountHow (GncEntry *entry, GncDiscountHow how);
|
2005-11-01 21:32:36 -06:00
|
|
|
void qofEntrySetInvDiscType (GncEntry *entry, const char *type);
|
|
|
|
void qofEntrySetInvDiscHow (GncEntry *entry, const char *type);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2002-09-14 00:32:37 -05:00
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Vendor Bills (and Employee Expenses)
|
|
|
|
@{ */
|
2002-07-11 10:11:33 -05:00
|
|
|
void gncEntrySetBillAccount (GncEntry *entry, Account *acc);
|
2002-09-14 00:32:37 -05:00
|
|
|
void gncEntrySetBillPrice (GncEntry *entry, gnc_numeric price);
|
|
|
|
void gncEntrySetBillTaxable (GncEntry *entry, gboolean taxable);
|
|
|
|
void gncEntrySetBillTaxIncluded (GncEntry *entry, gboolean tax_included);
|
|
|
|
void gncEntrySetBillTaxTable (GncEntry *entry, GncTaxTable *table);
|
|
|
|
void gncEntrySetBillable (GncEntry *entry, gboolean billable);
|
|
|
|
void gncEntrySetBillTo (GncEntry *entry, GncOwner *billto);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name employee-stuff
|
|
|
|
@{ */
|
2003-03-02 22:58:55 -06:00
|
|
|
void gncEntrySetBillPayment (GncEntry *entry, GncEntryPaymentType type);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2003-03-02 22:58:55 -06:00
|
|
|
|
2002-09-14 00:32:37 -05:00
|
|
|
/* GET FUNCTIONS */
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Generic (shared) data
|
|
|
|
@{ */
|
2001-11-21 19:23:07 -06:00
|
|
|
Timespec gncEntryGetDate (GncEntry *entry);
|
2002-02-27 23:10:07 -06:00
|
|
|
Timespec gncEntryGetDateEntered (GncEntry *entry);
|
2001-11-21 19:23:07 -06:00
|
|
|
const char * gncEntryGetDescription (GncEntry *entry);
|
|
|
|
const char * gncEntryGetAction (GncEntry *entry);
|
2002-06-16 23:04:05 -05:00
|
|
|
const char * gncEntryGetNotes (GncEntry *notes);
|
2001-11-21 19:23:07 -06:00
|
|
|
gnc_numeric gncEntryGetQuantity (GncEntry *entry);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2002-09-14 00:32:37 -05:00
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Customer Invoices
|
|
|
|
@{ */
|
2002-09-14 00:32:37 -05:00
|
|
|
Account * gncEntryGetInvAccount (GncEntry *entry);
|
|
|
|
gnc_numeric gncEntryGetInvPrice (GncEntry *entry);
|
|
|
|
gnc_numeric gncEntryGetInvDiscount (GncEntry *entry);
|
|
|
|
GncAmountType gncEntryGetInvDiscountType (GncEntry *entry);
|
|
|
|
GncDiscountHow gncEntryGetInvDiscountHow (GncEntry *entry);
|
2005-11-01 21:32:36 -06:00
|
|
|
char* qofEntryGetInvDiscType (GncEntry *entry);
|
|
|
|
char* qofEntryGetInvDiscHow (GncEntry *entry);
|
2002-09-14 00:32:37 -05:00
|
|
|
gboolean gncEntryGetInvTaxable (GncEntry *entry);
|
|
|
|
gboolean gncEntryGetInvTaxIncluded (GncEntry *entry);
|
|
|
|
GncTaxTable * gncEntryGetInvTaxTable (GncEntry *entry);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2002-09-14 00:32:37 -05:00
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Vendor Bills (and Employee Expenses)
|
|
|
|
@{ */
|
2002-09-14 00:32:37 -05:00
|
|
|
Account * gncEntryGetBillAccount (GncEntry *entry);
|
|
|
|
gnc_numeric gncEntryGetBillPrice (GncEntry *entry);
|
|
|
|
gboolean gncEntryGetBillTaxable (GncEntry *entry);
|
|
|
|
gboolean gncEntryGetBillTaxIncluded (GncEntry *entry);
|
|
|
|
GncTaxTable * gncEntryGetBillTaxTable (GncEntry *entry);
|
2002-07-10 12:32:59 -05:00
|
|
|
gboolean gncEntryGetBillable (GncEntry *entry);
|
|
|
|
GncOwner *gncEntryGetBillTo (GncEntry *entry);
|
2001-11-23 23:35:08 -06:00
|
|
|
|
2003-03-02 22:58:55 -06:00
|
|
|
GncEntryPaymentType gncEntryGetBillPayment (GncEntry* entry);
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
2002-09-14 00:32:37 -05:00
|
|
|
|
2002-05-18 15:10:27 -05:00
|
|
|
void gncEntryCopy (const GncEntry *src, GncEntry *dest);
|
|
|
|
|
2005-11-01 21:32:36 -06:00
|
|
|
/** @name Getting Values
|
|
|
|
|
|
|
|
* The first three return the rounded values -- the last returns the
|
2002-06-16 00:11:33 -05:00
|
|
|
* list of unrounded account-values. The list belongs to the entry
|
|
|
|
* and will be destroyed, so use it quickly.
|
2005-11-01 21:32:36 -06:00
|
|
|
@{
|
|
|
|
*/
|
2002-09-14 00:32:37 -05:00
|
|
|
gnc_numeric gncEntryReturnValue (GncEntry *entry, gboolean is_inv);
|
|
|
|
gnc_numeric gncEntryReturnDiscountValue (GncEntry *entry, gboolean is_inv);
|
|
|
|
gnc_numeric gncEntryReturnTaxValue (GncEntry *entry, gboolean is_inv);
|
2006-10-15 14:02:05 -05:00
|
|
|
typedef GList AccountValueList;
|
|
|
|
AccountValueList * gncEntryReturnTaxValues (GncEntry *entry, gboolean is_inv);
|
2002-06-16 00:11:33 -05:00
|
|
|
|
2004-05-07 00:11:49 -05:00
|
|
|
/** Compute the Entry value, tax-value, and discount_value, based on
|
2002-06-16 00:11:33 -05:00
|
|
|
* the quantity, price, discount, tax-table, and types. The value is
|
|
|
|
* the amount the merchant gets, the taxes are what the gov't gets,
|
2006-07-16 21:04:59 -05:00
|
|
|
* and the discount is how much the customer saved. The SCU is the
|
|
|
|
* target denominator of the value and tax -- it should be the
|
|
|
|
* account or commodity SCU of the target.
|
2002-06-16 00:11:33 -05:00
|
|
|
*
|
|
|
|
* The tax_values list is the property of the entry and will be
|
|
|
|
* destroyed automatically, so use it quickly. Note that all return
|
|
|
|
* values from these two functions are NOT rounded.
|
2002-01-12 22:25:55 -06:00
|
|
|
*/
|
2002-09-14 00:32:37 -05:00
|
|
|
void gncEntryGetValue (GncEntry *entry, gboolean is_inv, gnc_numeric *value,
|
2002-06-16 00:11:33 -05:00
|
|
|
gnc_numeric *discount, gnc_numeric *tax_value,
|
|
|
|
GList **tax_values);
|
2002-09-14 00:32:37 -05:00
|
|
|
|
2002-01-20 20:27:02 -06:00
|
|
|
void gncEntryComputeValue (gnc_numeric qty, gnc_numeric price,
|
2002-06-16 00:11:33 -05:00
|
|
|
GncTaxTable *tax_table, gboolean tax_included,
|
|
|
|
gnc_numeric discount, GncAmountType discount_type,
|
2006-07-16 21:04:59 -05:00
|
|
|
GncDiscountHow discount_how, int SCU,
|
2002-06-16 00:11:33 -05:00
|
|
|
/* return values */
|
|
|
|
gnc_numeric *value, gnc_numeric *discount_value,
|
|
|
|
GList **tax_values);
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
|
|
|
|
2001-11-21 19:23:07 -06:00
|
|
|
GncOrder * gncEntryGetOrder (GncEntry *entry);
|
|
|
|
GncInvoice * gncEntryGetInvoice (GncEntry *entry);
|
2002-07-09 23:12:19 -05:00
|
|
|
GncInvoice * gncEntryGetBill (GncEntry *entry);
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2003-10-19 00:13:59 -05:00
|
|
|
/** Return a pointer to the instance gncEntry that is identified
|
|
|
|
* by the guid, and is residing in the book. Returns NULL if the
|
|
|
|
* instance can't be found.
|
|
|
|
* Equivalent function prototype is
|
|
|
|
* GncEntry * gncEntryLookup (QofBook *book, const GUID *guid);
|
|
|
|
*/
|
|
|
|
#define gncEntryLookup(book,guid) \
|
|
|
|
QOF_BOOK_LOOKUP_ENTITY((book),(guid),GNC_ID_ENTRY, GncEntry)
|
2001-11-21 19:23:07 -06:00
|
|
|
|
2002-11-03 14:21:42 -06:00
|
|
|
gboolean gncEntryIsOpen (GncEntry *entry);
|
|
|
|
void gncEntryBeginEdit (GncEntry *entry);
|
2001-11-21 19:23:07 -06:00
|
|
|
void gncEntryCommitEdit (GncEntry *entry);
|
2002-02-03 14:01:08 -06:00
|
|
|
int gncEntryCompare (GncEntry *a, GncEntry *b);
|
|
|
|
|
2004-10-16 10:51:26 -05:00
|
|
|
#define ENTRY_DATE "date"
|
|
|
|
#define ENTRY_DATE_ENTERED "date-entered"
|
|
|
|
#define ENTRY_DESC "desc"
|
|
|
|
#define ENTRY_ACTION "action"
|
|
|
|
#define ENTRY_NOTES "notes"
|
|
|
|
#define ENTRY_QTY "qty"
|
|
|
|
|
|
|
|
#define ENTRY_IPRICE "iprice"
|
2005-11-01 21:32:36 -06:00
|
|
|
#define ENTRY_IACCT "invoice-account"
|
|
|
|
#define ENTRY_BACCT "bill-account"
|
2004-10-16 10:51:26 -05:00
|
|
|
#define ENTRY_BPRICE "bprice"
|
|
|
|
#define ENTRY_BILLABLE "billable?"
|
|
|
|
#define ENTRY_BILLTO "bill-to"
|
|
|
|
|
|
|
|
#define ENTRY_ORDER "order"
|
|
|
|
#define ENTRY_INVOICE "invoice"
|
|
|
|
#define ENTRY_BILL "bill"
|
|
|
|
|
|
|
|
#define ENTRY_INV_DISC_TYPE "discount-type"
|
|
|
|
#define ENTRY_INV_DISC_HOW "discount-method"
|
|
|
|
|
|
|
|
#define ENTRY_INV_TAXABLE "invoice-taxable"
|
|
|
|
#define ENTRY_BILL_TAXABLE "bill-taxable"
|
|
|
|
#define ENTRY_INV_TAX_INC "invoice-tax-included"
|
|
|
|
#define ENTRY_BILL_TAX_INC "bill-tax-included"
|
|
|
|
#define ENTRY_INV_DISCOUNT "invoice-discount"
|
|
|
|
#define ENTRY_BILL_PAY_TYPE "bill-payment-type"
|
|
|
|
|
2002-02-03 19:55:33 -06:00
|
|
|
|
2003-10-14 16:20:55 -05:00
|
|
|
/* deprecated functions, should be removed */
|
|
|
|
#define gncEntryGetGUID(x) qof_instance_get_guid(QOF_INSTANCE(x))
|
|
|
|
|
2001-11-21 19:23:07 -06:00
|
|
|
#endif /* GNC_ENTRY_H_ */
|
2004-05-07 00:11:49 -05:00
|
|
|
/** @} */
|
|
|
|
/** @} */
|