31 #include <glib/gi18n.h>
32 #include <qofinstance-p.h>
35 #include "gncEntryP.h"
37 #include "gncOrderP.h"
39 #include "gncOwnerP.h"
64 #define _GNC_MOD_NAME GNC_ID_ORDER
66 #define SET_STR(obj, member, str) { \
69 if (!g_strcmp0 (member, str)) return; \
70 gncOrderBeginEdit (obj); \
71 tmp = CACHE_INSERT (str); \
72 CACHE_REMOVE (member); \
76 G_INLINE_FUNC
void mark_order (
GncOrder *order);
79 qof_instance_set_dirty(&order->inst);
99 G_DEFINE_TYPE(
GncOrder, gnc_order, QOF_TYPE_INSTANCE);
107 gnc_order_dispose(GObject *orderp)
109 G_OBJECT_CLASS(gnc_order_parent_class)->dispose(orderp);
113 gnc_order_finalize(GObject* orderp)
115 G_OBJECT_CLASS(gnc_order_parent_class)->dispose(orderp);
119 gnc_order_get_property (GObject *
object,
126 g_return_if_fail(GNC_IS_ORDER(
object));
128 priv = GNC_ORDER(
object);
132 g_value_set_string(value, priv->id);
135 g_value_set_string(value, priv->notes);
138 g_value_set_boolean(value, priv->active);
140 case PROP_DATE_OPENED:
141 g_value_set_boxed(value, &priv->opened);
143 case PROP_DATE_CLOSED:
144 g_value_set_boxed(value, &priv->closed);
147 g_value_set_string(value, priv->reference);
150 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, prop_id, pspec);
156 gnc_order_set_property (GObject *
object,
163 g_return_if_fail(GNC_IS_ORDER(
object));
165 order = GNC_ORDER(
object);
166 g_assert (qof_instance_get_editlevel(order));
171 gncOrderSetID(order, g_value_get_string(value));
174 gncOrderSetNotes(order, g_value_get_string(value));
177 gncOrderSetActive(order, g_value_get_boolean(value));
179 case PROP_DATE_OPENED:
180 gncOrderSetDateOpened(order, *(
Timespec*)g_value_get_boxed(value));
182 case PROP_DATE_CLOSED:
183 gncOrderSetDateClosed(order, *(
Timespec*)g_value_get_boxed(value));
186 gncOrderSetReference(order, g_value_get_string(value));
189 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, prop_id, pspec);
210 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
213 gobject_class->dispose = gnc_order_dispose;
214 gobject_class->finalize = gnc_order_finalize;
215 gobject_class->set_property = gnc_order_set_property;
216 gobject_class->get_property = gnc_order_get_property;
218 qof_class->get_display_name = NULL;
219 qof_class->refers_to_object = NULL;
220 qof_class->get_typed_referring_object_list = impl_get_typed_referring_object_list;
222 g_object_class_install_property
225 g_param_spec_string (
"id",
227 "The order id is an arbitrary string "
228 "assigned by the user to identify the order.",
232 g_object_class_install_property
235 g_param_spec_string (
"notes",
237 "The order notes is an arbitrary string "
238 "assigned by the user to provide notes about "
243 g_object_class_install_property
246 g_param_spec_boolean (
"active",
248 "TRUE if the order is active. FALSE if inactive.",
252 g_object_class_install_property
255 g_param_spec_boxed(
"date-opened",
257 "The date the order was opened.",
261 g_object_class_install_property
264 g_param_spec_boxed(
"date-closed",
266 "The date the order was closed.",
270 g_object_class_install_property
273 g_param_spec_string (
"reference",
275 "The order reference is an arbitrary string "
276 "assigned by the user to provide a reference for "
287 if (!book)
return NULL;
289 order = g_object_new (GNC_TYPE_ORDER, NULL);
292 order->id = CACHE_INSERT (
"");
293 order->notes = CACHE_INSERT (
"");
294 order->reference = CACHE_INSERT (
"");
296 order->active = TRUE;
303 void gncOrderDestroy (
GncOrder *order)
306 qof_instance_set_destroying(order, TRUE);
307 gncOrderCommitEdit (order);
310 static void gncOrderFree (
GncOrder *order)
316 g_list_free (order->entries);
317 CACHE_REMOVE (order->id);
318 CACHE_REMOVE (order->notes);
319 CACHE_REMOVE (order->reference);
321 if (order->printname) g_free (order->printname);
324 g_object_unref (order);
330 void gncOrderSetID (
GncOrder *order,
const char *
id)
332 if (!order || !
id)
return;
333 SET_STR (order, order->id,
id);
335 gncOrderCommitEdit (order);
340 if (!order || !owner)
return;
343 gncOrderBeginEdit (order);
344 gncOwnerCopy (owner, &order->owner);
346 gncOrderCommitEdit (order);
353 gncOrderBeginEdit (order);
354 order->opened = date;
356 gncOrderCommitEdit (order);
363 gncOrderBeginEdit (order);
364 order->closed = date;
366 gncOrderCommitEdit (order);
369 void gncOrderSetNotes (
GncOrder *order,
const char *notes)
371 if (!order || !notes)
return;
372 SET_STR (order, order->notes, notes);
374 gncOrderCommitEdit (order);
377 void gncOrderSetReference (
GncOrder *order,
const char *reference)
379 if (!order || !reference)
return;
380 SET_STR (order, order->reference, reference);
382 gncOrderCommitEdit (order);
385 void gncOrderSetActive (
GncOrder *order, gboolean active)
388 if (order->active == active)
return;
389 gncOrderBeginEdit (order);
390 order->active = active;
392 gncOrderCommitEdit (order);
401 if (!order || !entry)
return;
403 old = gncEntryGetOrder (entry);
404 if (old == order)
return;
405 if (old) gncOrderRemoveEntry (old, entry);
407 gncOrderBeginEdit (order);
408 order->entries = g_list_insert_sorted (order->entries, entry,
409 (GCompareFunc)gncEntryCompare);
412 gncEntrySetOrder (entry, order);
414 gncOrderCommitEdit (order);
419 if (!order || !entry)
return;
421 gncOrderBeginEdit (order);
422 gncEntrySetOrder (entry, NULL);
423 order->entries = g_list_remove (order->entries, entry);
425 gncOrderCommitEdit (order);
430 const char * gncOrderGetID (
const GncOrder *order)
432 if (!order)
return NULL;
438 if (!order)
return NULL;
439 return &order->owner;
447 if (!order)
return ts;
448 return order->opened;
456 if (!order)
return ts;
457 return order->closed;
460 const char * gncOrderGetNotes (
const GncOrder *order)
462 if (!order)
return NULL;
466 const char * gncOrderGetReference (
const GncOrder *order)
468 if (!order)
return NULL;
469 return order->reference;
472 gboolean gncOrderGetActive (
const GncOrder *order)
474 if (!order)
return FALSE;
475 return order->active;
479 GList * gncOrderGetEntries (
GncOrder *order)
481 if (!order)
return NULL;
482 return order->entries;
485 gboolean gncOrderIsClosed (
const GncOrder *order)
487 if (!order)
return FALSE;
488 if (order->closed.tv_sec || order->closed.tv_nsec)
return TRUE;
494 void gncOrderBeginEdit (
GncOrder *order)
501 PERR(
"Order QofBackend Failure: %d", errcode);
502 gnc_engine_signal_commit_error( errcode );
510 gncOrderFree (order);
513 void gncOrderCommitEdit (
GncOrder *order)
517 gncOrderOnDone, order_free);
524 if (a == b)
return 0;
528 compare = g_strcmp0 (a->id, b->id);
529 if (compare)
return compare;
532 if (compare)
return compare;
535 if (compare)
return compare;
545 _gncOrderPrintable (gpointer obj)
549 g_return_val_if_fail (order, NULL);
553 if (order->printname) g_free (order->printname);
556 g_strdup_printf (
"%s%s", order->id,
557 gncOrderIsClosed (order) ? _(
" (closed)") :
"");
560 return order->printname;
566 DI(.e_type = ) _GNC_MOD_NAME,
567 DI(.type_label = ) "Order",
568 DI(.create = ) (gpointer)gncOrderCreate,
569 DI(.book_begin = ) NULL,
570 DI(.book_end = ) NULL,
574 DI(.printable = ) _gncOrderPrintable,
578 gboolean gncOrderRegister (
void)
586 { ORDER_IS_CLOSED, QOF_TYPE_BOOLEAN, (
QofAccessFunc)gncOrderIsClosed, NULL },
600 gchar *gncOrderNextID (
QofBook *book)
int qof_instance_version_cmp(const QofInstance *left, const QofInstance *right)
Business Interface: Object OWNERs.
const GncGUID * qof_instance_get_guid(gconstpointer)
QofBook * qof_instance_get_book(gconstpointer)
gboolean qof_collection_is_dirty(const QofCollection *col)
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)
void qof_class_register(QofIdTypeConst obj_name, QofSortFunc default_sort_fcn, const QofParam *params)
gboolean timespec_equal(const Timespec *ta, const Timespec *tb)
gboolean gncOwnerEqual(const GncOwner *a, const GncOwner *b)
Use a 64-bit unsigned int timespec.
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
#define QOF_OBJECT_VERSION
gboolean qof_commit_edit(QofInstance *inst)
#define PERR(format, args...)
void qof_collection_foreach(const QofCollection *, QofInstanceForeachCB, gpointer user_data)
void qof_instance_init_data(QofInstance *, QofIdType, QofBook *)
gint timespec_cmp(const Timespec *ta, const Timespec *tb)
gboolean qof_begin_edit(QofInstance *inst)
gboolean qof_instance_get_dirty_flag(gconstpointer ptr)
int(* QofSortFunc)(gconstpointer, gconstpointer)
gboolean qof_commit_edit_part2(QofInstance *inst, void(*on_error)(QofInstance *, QofBackendError), void(*on_done)(QofInstance *), void(*on_free)(QofInstance *))
void qof_collection_mark_clean(QofCollection *)
gint qof_instance_guid_compare(const gconstpointer ptr1, const gconstpointer ptr2)
void(* QofSetterFunc)(gpointer, gpointer)
gboolean qof_object_register(const QofObject *object)
Business Entry Interface.
void qof_event_gen(QofInstance *entity, QofEventId event_type, gpointer event_data)
Invoke all registered event handlers using the given arguments.
const gchar * QofLogModule