r21393 - gnucash/trunk/src - Introduce GncInvoiceType enum and start using it instead of the char based Invoice Type.
Geert Janssens
gjanssens at code.gnucash.org
Sat Oct 8 12:59:01 EDT 2011
Author: gjanssens
Date: 2011-10-08 12:59:01 -0400 (Sat, 08 Oct 2011)
New Revision: 21393
Trac: http://svn.gnucash.org/trac/changeset/21393
Modified:
gnucash/trunk/src/business/business-gnome/dialog-invoice.c
gnucash/trunk/src/engine/gncInvoice.c
gnucash/trunk/src/engine/gncInvoice.h
Log:
Introduce GncInvoiceType enum and start using it instead of the char based Invoice Type.
This also puts a first structure in place to add credit notes later on.
Modified: gnucash/trunk/src/business/business-gnome/dialog-invoice.c
===================================================================
--- gnucash/trunk/src/business/business-gnome/dialog-invoice.c 2011-10-08 13:33:34 UTC (rev 21392)
+++ gnucash/trunk/src/business/business-gnome/dialog-invoice.c 2011-10-08 16:59:01 UTC (rev 21393)
@@ -2646,7 +2646,7 @@
columns = gnc_search_param_prepend (columns, _("Billing ID"), NULL, type,
INVOICE_BILLINGID, NULL);
columns = gnc_search_param_prepend (columns, _("Type"), NULL, type,
- INVOICE_TYPE, NULL);
+ INVOICE_TYPE_STRING, NULL);
columns = gnc_search_param_prepend_with_justify (columns, _("Paid"),
GTK_JUSTIFY_CENTER, NULL, type,
INVOICE_IS_PAID, NULL);
@@ -2712,9 +2712,8 @@
{
QofQueryPredData *inv_type_pred;
GSList *param_list = NULL;
- inv_type_pred = qof_query_string_predicate(QOF_COMPARE_EQUAL,
- gncInvoiceGetTypeFromOwnerType(owner_type),
- QOF_STRING_MATCH_NORMAL, FALSE);
+ inv_type_pred = qof_query_int32_predicate(QOF_COMPARE_EQUAL,
+ gncInvoiceGetTypeListForOwnerType(owner_type));
param_list = g_slist_prepend (param_list, INVOICE_TYPE);
qof_query_add_term (q, param_list, inv_type_pred, QOF_QUERY_AND);
}
@@ -2844,14 +2843,14 @@
qof_query_add_boolean_match (q, g_slist_prepend(g_slist_prepend(NULL, LOT_IS_CLOSED),
INVOICE_POST_LOT), FALSE, QOF_QUERY_AND);
- /* Bug#602091, #639365: The INVOICE_TYPE string unfortunately is
- * stored in translated form due to the usage of gncInvoiceGetType
+ /* Bug#602091, #639365: The INVOICE_TYPE_STRING string unfortunately is
+ * stored in translated form due to the usage of gncInvoiceGetTypeString
* for user-visible strings as well. Hence, as an exception we
* must also search for the translated here even though it's an
* internal flag. */
pred_data = qof_query_string_predicate (QOF_COMPARE_NEQ, _("Invoice"),
QOF_STRING_MATCH_NORMAL, FALSE);
- qof_query_add_term (q, g_slist_prepend(NULL, INVOICE_TYPE), pred_data, QOF_QUERY_AND);
+ qof_query_add_term (q, g_slist_prepend(NULL, INVOICE_TYPE_STRING), pred_data, QOF_QUERY_AND);
end_date = time(NULL);
if (days_in_advance < 0)
Modified: gnucash/trunk/src/engine/gncInvoice.c
===================================================================
--- gnucash/trunk/src/engine/gncInvoice.c 2011-10-08 13:33:34 UTC (rev 21392)
+++ gnucash/trunk/src/engine/gncInvoice.c 2011-10-08 16:59:01 UTC (rev 21393)
@@ -838,28 +838,70 @@
return gncInvoiceGetTotalInternal(invoice, TRUE, TRUE, TRUE, type);
}
-const char * gncInvoiceGetTypeFromOwnerType (GncOwnerType type)
+// FIXME this should return a list of valid invoice types for a given owner type
+GncInvoiceType gncInvoiceGetTypeListForOwnerType (GncOwnerType type)
{
switch (type)
{
case GNC_OWNER_CUSTOMER:
- return _("Invoice");
+ return GNC_INVOICE_CUST_INVOICE;
case GNC_OWNER_VENDOR:
- return _("Bill");
+ return GNC_INVOICE_VEND_INVOICE;
case GNC_OWNER_EMPLOYEE:
- return _("Expense");
+ return GNC_INVOICE_EMPL_INVOICE;
default:
- return NULL;
+ return GNC_INVOICE_UNDEFINED;
}
}
-const char * gncInvoiceGetType (GncInvoice *invoice)
+GncInvoiceType gncInvoiceGetType (GncInvoice *invoice)
{
- if (!invoice) return NULL;
- return gncInvoiceGetTypeFromOwnerType (gncInvoiceGetOwnerType (invoice));
+ if (!invoice) return GNC_INVOICE_UNDEFINED;
+ switch (gncInvoiceGetOwnerType (invoice))
+ {
+ case GNC_OWNER_CUSTOMER:
+ if (/* Amount is positive*/ 1 >= 0)
+ return GNC_INVOICE_CUST_INVOICE;
+ else
+ return GNC_INVOICE_CUST_CREDIT_NOTE;
+ case GNC_OWNER_VENDOR:
+ if (/* Amount is positive*/ 1 >= 0)
+ return GNC_INVOICE_VEND_INVOICE;
+ else
+ return GNC_INVOICE_VEND_CREDIT_NOTE;
+ case GNC_OWNER_EMPLOYEE:
+ if (/* Amount is positive*/ 1 >= 0)
+ return GNC_INVOICE_EMPL_INVOICE;
+ else
+ return GNC_INVOICE_EMPL_CREDIT_NOTE;
+ default:
+ return GNC_INVOICE_UNDEFINED;
+ }
}
+const char * gncInvoiceGetTypeString (GncInvoice *invoice)
+{
+ GncInvoiceType type = gncInvoiceGetType(invoice);
+ switch (type)
+ {
+ case GNC_INVOICE_CUST_INVOICE:
+ return _("Invoice");
+ case GNC_INVOICE_VEND_INVOICE:
+ return _("Bill");
+ case GNC_INVOICE_EMPL_INVOICE:
+ return _("Expense");
+ case GNC_INVOICE_CUST_CREDIT_NOTE:
+ return _("Customer Credit Note");
+ case GNC_INVOICE_VEND_CREDIT_NOTE:
+ return _("Vendor Credit Note");
+ case GNC_INVOICE_EMPL_CREDIT_NOTE:
+ return _("Employee Credit Note");
+ default:
+ return NULL;
+ }
+}
+
gnc_commodity * gncInvoiceGetCurrency (const GncInvoice *invoice)
{
if (!invoice) return NULL;
@@ -1178,7 +1220,7 @@
lot = gnc_lot_new (book);
gnc_lot_begin_edit (lot);
- type = gncInvoiceGetType (invoice);
+ type = gncInvoiceGetTypeString (invoice);
/* Set the lot title */
lot_title = g_strdup_printf ("%s %s", type, gncInvoiceGetID (invoice));
@@ -1823,26 +1865,27 @@
{
static QofParam params[] =
{
- { INVOICE_ID, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetID, (QofSetterFunc)gncInvoiceSetID },
- { INVOICE_OWNER, GNC_ID_OWNER, (QofAccessFunc)gncInvoiceGetOwner, NULL },
- { INVOICE_OPENED, QOF_TYPE_DATE, (QofAccessFunc)gncInvoiceGetDateOpened, (QofSetterFunc)gncInvoiceSetDateOpened },
- { INVOICE_DUE, QOF_TYPE_DATE, (QofAccessFunc)gncInvoiceGetDateDue, NULL },
- { INVOICE_POSTED, QOF_TYPE_DATE, (QofAccessFunc)gncInvoiceGetDatePosted, (QofSetterFunc)gncInvoiceSetDatePosted },
+ { INVOICE_ID, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetID, (QofSetterFunc)gncInvoiceSetID },
+ { INVOICE_OWNER, GNC_ID_OWNER, (QofAccessFunc)gncInvoiceGetOwner, NULL },
+ { INVOICE_OPENED, QOF_TYPE_DATE, (QofAccessFunc)gncInvoiceGetDateOpened, (QofSetterFunc)gncInvoiceSetDateOpened },
+ { INVOICE_DUE, QOF_TYPE_DATE, (QofAccessFunc)gncInvoiceGetDateDue, NULL },
+ { INVOICE_POSTED, QOF_TYPE_DATE, (QofAccessFunc)gncInvoiceGetDatePosted, (QofSetterFunc)gncInvoiceSetDatePosted },
{ INVOICE_IS_POSTED, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncInvoiceIsPosted, NULL },
- { INVOICE_IS_PAID, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncInvoiceIsPaid, NULL },
- { INVOICE_BILLINGID, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetBillingID, (QofSetterFunc)gncInvoiceSetBillingID },
- { INVOICE_NOTES, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetNotes, (QofSetterFunc)gncInvoiceSetNotes },
- { INVOICE_ACC, GNC_ID_ACCOUNT, (QofAccessFunc)gncInvoiceGetPostedAcc, (QofSetterFunc)gncInvoiceSetPostedAcc },
- { INVOICE_POST_TXN, GNC_ID_TRANS, (QofAccessFunc)gncInvoiceGetPostedTxn, (QofSetterFunc)gncInvoiceSetPostedTxn },
- { INVOICE_POST_LOT, GNC_ID_LOT, (QofAccessFunc)gncInvoiceGetPostedLot, NULL/*(QofSetterFunc)gncInvoiceSetPostedLot*/ },
- { INVOICE_TYPE, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetType, NULL },
- { INVOICE_TERMS, GNC_ID_BILLTERM, (QofAccessFunc)gncInvoiceGetTerms, (QofSetterFunc)gncInvoiceSetTerms },
- { INVOICE_BILLTO, GNC_ID_OWNER, (QofAccessFunc)gncInvoiceGetBillTo, NULL },
- { INVOICE_ENTRIES, QOF_TYPE_COLLECT, (QofAccessFunc)qofInvoiceGetEntries, (QofSetterFunc)qofInvoiceSetEntries },
- { INVOICE_JOB, GNC_ID_JOB, (QofAccessFunc)qofInvoiceGetJob, (QofSetterFunc)qofInvoiceSetJob },
- { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncInvoiceGetActive, (QofSetterFunc)gncInvoiceSetActive },
- { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL },
- { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL },
+ { INVOICE_IS_PAID, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncInvoiceIsPaid, NULL },
+ { INVOICE_BILLINGID, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetBillingID, (QofSetterFunc)gncInvoiceSetBillingID },
+ { INVOICE_NOTES, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetNotes, (QofSetterFunc)gncInvoiceSetNotes },
+ { INVOICE_ACC, GNC_ID_ACCOUNT, (QofAccessFunc)gncInvoiceGetPostedAcc, (QofSetterFunc)gncInvoiceSetPostedAcc },
+ { INVOICE_POST_TXN, GNC_ID_TRANS, (QofAccessFunc)gncInvoiceGetPostedTxn, (QofSetterFunc)gncInvoiceSetPostedTxn },
+ { INVOICE_POST_LOT, GNC_ID_LOT, (QofAccessFunc)gncInvoiceGetPostedLot, NULL/*(QofSetterFunc)gncInvoiceSetPostedLot*/ },
+ { INVOICE_TYPE, QOF_TYPE_INT32, (QofAccessFunc)gncInvoiceGetType, NULL },
+ { INVOICE_TYPE_STRING, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetTypeString, NULL },
+ { INVOICE_TERMS, GNC_ID_BILLTERM, (QofAccessFunc)gncInvoiceGetTerms, (QofSetterFunc)gncInvoiceSetTerms },
+ { INVOICE_BILLTO, GNC_ID_OWNER, (QofAccessFunc)gncInvoiceGetBillTo, NULL },
+ { INVOICE_ENTRIES, QOF_TYPE_COLLECT, (QofAccessFunc)qofInvoiceGetEntries, (QofSetterFunc)qofInvoiceSetEntries },
+ { INVOICE_JOB, GNC_ID_JOB, (QofAccessFunc)qofInvoiceGetJob, (QofSetterFunc)qofInvoiceSetJob },
+ { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncInvoiceGetActive, (QofSetterFunc)gncInvoiceSetActive },
+ { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL },
+ { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL },
{ NULL },
};
Modified: gnucash/trunk/src/engine/gncInvoice.h
===================================================================
--- gnucash/trunk/src/engine/gncInvoice.h 2011-10-08 13:33:34 UTC (rev 21392)
+++ gnucash/trunk/src/engine/gncInvoice.h 2011-10-08 16:59:01 UTC (rev 21393)
@@ -51,6 +51,20 @@
#define GNC_ID_INVOICE "gncInvoice"
+typedef enum
+{
+ GNC_INVOICE_UNDEFINED ,
+ GNC_INVOICE_CUST_INVOICE , /* Invoice */
+ GNC_INVOICE_VEND_INVOICE , /* Bill */
+ GNC_INVOICE_EMPL_INVOICE , /* Voucher */
+ GNC_INVOICE_CUST_CREDIT_NOTE , /* Credit Note for a customer */
+ GNC_INVOICE_VEND_CREDIT_NOTE , /* Credit Note from a vendor */
+ GNC_INVOICE_EMPL_CREDIT_NOTE , /* Credit Note from an employee,
+ not sure this makes sense,
+ but all code is symmetrical
+ so I've added it to prevent unexpected errors */
+} GncInvoiceType;
+
/* --- type macros --- */
#define GNC_TYPE_INVOICE (gnc_invoice_get_type ())
#define GNC_INVOICE(o) \
@@ -122,8 +136,9 @@
const char * gncInvoiceGetBillingID (const GncInvoice *invoice);
const char * gncInvoiceGetNotes (const GncInvoice *invoice);
GncOwnerType gncInvoiceGetOwnerType (GncInvoice *invoice);
-const char * gncInvoiceGetTypeFromOwnerType (GncOwnerType type);
-const char * gncInvoiceGetType (GncInvoice *invoice);
+GncInvoiceType gncInvoiceGetTypeListForOwnerType (GncOwnerType type);
+GncInvoiceType gncInvoiceGetType (GncInvoice *invoice);
+const char * gncInvoiceGetTypeString (GncInvoice *invoice);
gnc_commodity * gncInvoiceGetCurrency (const GncInvoice *invoice);
GncOwner * gncInvoiceGetBillTo (GncInvoice *invoice);
gnc_numeric gncInvoiceGetToChargeAmount (const GncInvoice *invoice);
@@ -207,6 +222,7 @@
#define INVOICE_POST_TXN "posted_txn"
#define INVOICE_POST_LOT "posted_lot"
#define INVOICE_TYPE "type"
+#define INVOICE_TYPE_STRING "type_string"
#define INVOICE_BILLTO "bill-to"
#define INVOICE_ENTRIES "list_of_entries"
#define INVOICE_JOB "invoice_job"
More information about the gnucash-changes
mailing list