31 #include <glib/gi18n.h> 32 #include <qofinstance-p.h> 36 #include "gncEntryP.h" 38 #include "gncOrderP.h" 40 #include "gncOwnerP.h" 50 const char * reference;
60 QofInstanceClass parent_class;
63 static QofLogModule log_module = GNC_MOD_BUSINESS;
65 #define _GNC_MOD_NAME GNC_ID_ORDER 67 #define SET_STR(obj, member, str) { \ 68 if (!g_strcmp0 (member, str)) return; \ 69 gncOrderBeginEdit (obj); \ 70 CACHE_REPLACE (member, str); \ 73 static inline void mark_order (GncOrder *order);
74 void mark_order (GncOrder *order)
76 qof_instance_set_dirty(&order->inst);
96 G_DEFINE_TYPE(GncOrder, gnc_order, QOF_TYPE_INSTANCE)
99 gnc_order_init(GncOrder* order)
101 order->closed = INT64_MAX;
105 gnc_order_dispose(GObject *orderp)
107 G_OBJECT_CLASS(gnc_order_parent_class)->dispose(orderp);
111 gnc_order_finalize(GObject* orderp)
113 G_OBJECT_CLASS(gnc_order_parent_class)->dispose(orderp);
117 gnc_order_get_property (GObject *
object,
124 g_return_if_fail(GNC_IS_ORDER(
object));
126 priv = GNC_ORDER(
object);
130 g_value_set_string(value, priv->id);
133 g_value_set_string(value, priv->notes);
136 g_value_set_boolean(value, priv->active);
138 case PROP_DATE_OPENED:
139 g_value_set_boxed(value, &priv->opened);
141 case PROP_DATE_CLOSED:
142 g_value_set_boxed(value, &priv->closed);
145 g_value_set_string(value, priv->reference);
148 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, prop_id, pspec);
154 gnc_order_set_property (GObject *
object,
161 g_return_if_fail(GNC_IS_ORDER(
object));
163 order = GNC_ORDER(
object);
164 g_assert (qof_instance_get_editlevel(order));
169 gncOrderSetID(order, g_value_get_string(value));
172 gncOrderSetNotes(order, g_value_get_string(value));
175 gncOrderSetActive(order, g_value_get_boolean(value));
177 case PROP_DATE_OPENED:
178 gncOrderSetDateOpened(order, g_value_get_int64(value));
180 case PROP_DATE_CLOSED:
181 gncOrderSetDateClosed(order, g_value_get_int64(value));
184 gncOrderSetReference(order, g_value_get_string(value));
187 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, prop_id, pspec);
206 gnc_order_class_init (GncOrderClass *klass)
208 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
209 QofInstanceClass* qof_class = QOF_INSTANCE_CLASS(klass);
211 gobject_class->dispose = gnc_order_dispose;
212 gobject_class->finalize = gnc_order_finalize;
213 gobject_class->set_property = gnc_order_set_property;
214 gobject_class->get_property = gnc_order_get_property;
216 qof_class->get_display_name = NULL;
217 qof_class->refers_to_object = NULL;
218 qof_class->get_typed_referring_object_list = impl_get_typed_referring_object_list;
220 g_object_class_install_property
223 g_param_spec_string (
"id",
225 "The order id is an arbitrary string " 226 "assigned by the user to identify the order.",
230 g_object_class_install_property
233 g_param_spec_string (
"notes",
235 "The order notes is an arbitrary string " 236 "assigned by the user to provide notes about " 241 g_object_class_install_property
244 g_param_spec_boolean (
"active",
246 "TRUE if the order is active. FALSE if inactive.",
250 g_object_class_install_property
253 g_param_spec_boxed(
"date-opened",
255 "The date the order was opened.",
259 g_object_class_install_property
262 g_param_spec_boxed(
"date-closed",
264 "The date the order was closed.",
268 g_object_class_install_property
271 g_param_spec_string (
"reference",
273 "The order reference is an arbitrary string " 274 "assigned by the user to provide a reference for " 281 GncOrder *gncOrderCreate (QofBook *book)
285 if (!book)
return NULL;
287 order = g_object_new (GNC_TYPE_ORDER, NULL);
290 order->id = CACHE_INSERT (
"");
291 order->notes = CACHE_INSERT (
"");
292 order->reference = CACHE_INSERT (
"");
294 order->active = TRUE;
301 void gncOrderDestroy (GncOrder *order)
304 qof_instance_set_destroying(order, TRUE);
305 gncOrderCommitEdit (order);
308 static void gncOrderFree (GncOrder *order)
314 g_list_free (order->entries);
315 CACHE_REMOVE (order->id);
316 CACHE_REMOVE (order->notes);
317 CACHE_REMOVE (order->reference);
319 if (order->printname) g_free (order->printname);
322 g_object_unref (order);
328 void gncOrderSetID (GncOrder *order,
const char *
id)
330 if (!order || !
id)
return;
331 SET_STR (order, order->id,
id);
333 gncOrderCommitEdit (order);
336 void gncOrderSetOwner (GncOrder *order,
GncOwner *owner)
338 if (!order || !owner)
return;
341 gncOrderBeginEdit (order);
342 gncOwnerCopy (owner, &order->owner);
344 gncOrderCommitEdit (order);
347 void gncOrderSetDateOpened (GncOrder *order,
time64 date)
350 if (order->opened == date)
return;
351 gncOrderBeginEdit (order);
352 order->opened = date;
354 gncOrderCommitEdit (order);
357 void gncOrderSetDateClosed (GncOrder *order,
time64 date)
360 if (order->closed == date)
return;
361 gncOrderBeginEdit (order);
362 order->closed = date;
364 gncOrderCommitEdit (order);
367 void gncOrderSetNotes (GncOrder *order,
const char *notes)
369 if (!order || !notes)
return;
370 SET_STR (order, order->notes, notes);
372 gncOrderCommitEdit (order);
375 void gncOrderSetReference (GncOrder *order,
const char *reference)
377 if (!order || !reference)
return;
378 SET_STR (order, order->reference, reference);
380 gncOrderCommitEdit (order);
383 void gncOrderSetActive (GncOrder *order, gboolean active)
386 if (order->active == active)
return;
387 gncOrderBeginEdit (order);
388 order->active = active;
390 gncOrderCommitEdit (order);
395 void gncOrderAddEntry (GncOrder *order, GncEntry *entry)
399 if (!order || !entry)
return;
401 old = gncEntryGetOrder (entry);
402 if (old == order)
return;
403 if (old) gncOrderRemoveEntry (old, entry);
405 gncOrderBeginEdit (order);
406 order->entries = g_list_insert_sorted (order->entries, entry,
407 (GCompareFunc)gncEntryCompare);
410 gncEntrySetOrder (entry, order);
412 gncOrderCommitEdit (order);
415 void gncOrderRemoveEntry (GncOrder *order, GncEntry *entry)
417 if (!order || !entry)
return;
419 gncOrderBeginEdit (order);
420 gncEntrySetOrder (entry, NULL);
421 order->entries = g_list_remove (order->entries, entry);
423 gncOrderCommitEdit (order);
428 const char * gncOrderGetID (
const GncOrder *order)
430 if (!order)
return NULL;
434 GncOwner * gncOrderGetOwner (GncOrder *order)
436 if (!order)
return NULL;
437 return &order->owner;
440 time64 gncOrderGetDateOpened (
const GncOrder *order)
442 if (!order)
return INT64_MAX;
443 return order->opened;
446 time64 gncOrderGetDateClosed (
const GncOrder *order)
448 if (!order)
return INT64_MAX;
449 return order->closed;
452 const char * gncOrderGetNotes (
const GncOrder *order)
454 if (!order)
return NULL;
458 const char * gncOrderGetReference (
const GncOrder *order)
460 if (!order)
return NULL;
461 return order->reference;
464 gboolean gncOrderGetActive (
const GncOrder *order)
466 if (!order)
return FALSE;
467 return order->active;
471 GList * gncOrderGetEntries (GncOrder *order)
473 if (!order)
return NULL;
474 return order->entries;
477 gboolean gncOrderIsClosed (
const GncOrder *order)
479 if (!order)
return FALSE;
480 if (order->closed != INT64_MAX)
return TRUE;
486 void gncOrderBeginEdit (GncOrder *order)
493 PERR(
"Order QofBackend Failure: %d", errcode);
494 gnc_engine_signal_commit_error( errcode );
501 GncOrder *order = (GncOrder *) inst;
502 gncOrderFree (order);
505 void gncOrderCommitEdit (GncOrder *order)
509 gncOrderOnDone, order_free);
512 int gncOrderCompare (
const GncOrder *a,
const GncOrder *b)
516 if (a == b)
return 0;
520 compare = g_strcmp0 (a->id, b->id);
521 if (compare)
return compare;
523 if (a->opened != b->opened)
return a->opened - b->opened;
524 if (a->closed != b->closed)
return a->closed - b->closed;
534 _gncOrderPrintable (gpointer obj)
536 GncOrder *order = obj;
538 g_return_val_if_fail (order, NULL);
542 if (order->printname) g_free (order->printname);
545 g_strdup_printf (
"%s%s", order->id,
546 gncOrderIsClosed (order) ? _(
" (closed)") :
"");
549 return order->printname;
552 static QofObject gncOrderDesc =
555 DI(.e_type = ) _GNC_MOD_NAME,
556 DI(.type_label = ) "Order",
557 DI(.create = ) (gpointer)gncOrderCreate,
558 DI(.book_begin = ) NULL,
559 DI(.book_end = ) NULL,
562 DI(.foreach = ) qof_collection_foreach,
563 DI(.printable = ) _gncOrderPrintable,
567 gboolean gncOrderRegister (
void)
569 static QofParam params[] =
575 { ORDER_IS_CLOSED, QOF_TYPE_BOOLEAN, (
QofAccessFunc)gncOrderIsClosed, NULL },
589 gchar *gncOrderNextID (QofBook *book)
int qof_instance_version_cmp(const QofInstance *left, const QofInstance *right)
Compare two instances, based on their last update times.
Business Interface: Object OWNERs.
const GncGUID * qof_instance_get_guid(gconstpointer inst)
Return the GncGUID of this instance.
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
gboolean qof_collection_is_dirty(const QofCollection *col)
Return value of 'dirty' flag on collection.
QofBackendError
The errors that can be reported to the GUI & other front-end users.
gchar * qof_book_increment_and_format_counter(QofBook *book, const char *counter_name)
This will increment the named counter for this book and format it.
void qof_class_register(QofIdTypeConst obj_name, QofSortFunc default_sort_function, const QofParam *params)
This function registers a new object class with the Qof subsystem.
gboolean gncOwnerEqual(const GncOwner *a, const GncOwner *b)
Assess equality by checking.
int(* QofSortFunc)(gconstpointer, gconstpointer)
This function is the default sort function for a particular object type.
#define QOF_OBJECT_VERSION
Defines the version of the core object object registration interface.
gboolean qof_commit_edit(QofInstance *inst)
commit_edit helpers
#define PERR(format, args...)
Log a serious error.
#define QOF_PARAM_BOOK
"Known" Object Parameters – all objects must support these
void(* QofSetterFunc)(gpointer, gpointer)
The QofSetterFunc defines an function pointer for parameter setters.
void qof_instance_init_data(QofInstance *inst, QofIdType type, QofBook *book)
Initialise the settings associated with an instance.
gboolean qof_begin_edit(QofInstance *inst)
begin_edit
gboolean qof_instance_get_dirty_flag(gconstpointer ptr)
Retrieve the flag that indicates whether or not this object has been modified.
gboolean qof_commit_edit_part2(QofInstance *inst, void(*on_error)(QofInstance *, QofBackendError), void(*on_done)(QofInstance *), void(*on_free)(QofInstance *))
part2 – deal with the backend
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
The QofAccessFunc defines an arbitrary function pointer for access functions.
void qof_collection_mark_clean(QofCollection *)
reset value of dirty flag
gint qof_instance_guid_compare(gconstpointer ptr1, gconstpointer ptr2)
Compare the GncGUID values of two instances.
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...
gboolean qof_object_register(const QofObject *object)
Register new types of object objects.
Business Entry Interface.
void qof_event_gen(QofInstance *entity, QofEventId event_id, gpointer event_data)
Invoke all registered event handlers using the given arguments.