GnuCash  5.6-150-g038405b370+
Files | Data Structures | Macros | Enumerations | Functions
Scheduled/Periodic/Recurring Transactions


Scheduled Transactions provide a framework for remembering information about a transactions that are set to occur in the future, either once or periodically. More...

Files

file  FreqSpec.h
 Period / Date Frequency Specification.
 
file  SchedXaction.h
 Scheduled Transactions public handling routines.
 
file  SX-book.h
 Anchor Scheduled Transaction info in a book.
 

Data Structures

struct  SchedXaction
 A single scheduled transaction. More...
 
struct  SchedXactionClass
 
struct  SXTmpStateData
 Just the variable temporal bits from the SX structure. More...
 
struct  SchedXactions
 
struct  SchedXactionsClass
 

Macros

#define ENUM_LIST_TYPE(_)
 
#define ENUM_LIST_UI(_)
 
#define GNC_TYPE_SCHEDXACTION   (gnc_schedxaction_get_type ())
 
#define GNC_SCHEDXACTION(o)   (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_SCHEDXACTION, SchedXaction))
 
#define GNC_SCHEDXACTION_CLASS(k)   (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_SCHEDXACTION, SchedXactionClass))
 
#define GNC_IS_SCHEDXACTION(o)   (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SCHEDXACTION))
 
#define GNC_IS_SCHEDXACTION_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_SCHEDXACTION))
 
#define GNC_SCHEDXACTION_GET_CLASS(o)   (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_SCHEDXACTION, SchedXactionClass))
 
#define GNC_IS_SX(obj)   GNC_IS_SCHEDXACTION(obj)
 
#define GNC_SX(obj)   GNC_SCHEDXACTION(obj)
 
#define xaccSchedXactionSetGUID(X, G)   qof_instance_set_guid(QOF_INSTANCE(X),(G))
 
#define GNC_SX_SHARES   "shares"
 
#define GNC_SX_FREQ_SPEC   "scheduled-frequency"
 
#define GNC_SX_NAME   "sched-xname"
 
#define GNC_SX_START_DATE   "sched-start-date"
 
#define GNC_SX_LAST_DATE   "sched-last-date"
 
#define GNC_SX_NUM_OCCUR   "sx-total-number"
 
#define GNC_SX_REM_OCCUR   "sx-remaining-num"
 
#define xaccSchedXactionIsDirty(X)   qof_instance_is_dirty (QOF_INSTANCE(X))
 
#define xaccSchedXactionGetGUID(X)   qof_entity_get_guid(QOF_INSTANCE(X))
 
#define GNC_TYPE_SCHEDXACTIONS   (gnc_schedxactions_get_type ())
 
#define GNC_SCHEDXACTIONS(o)   (G_TYPE_CHECK_INSTANCE_CAST ((o), GNC_TYPE_SCHEDXACTIONS, SchedXactions))
 
#define GNC_SCHEDXACTIONS_CLASS(k)   (G_TYPE_CHECK_CLASS_CAST((k), GNC_TYPE_SCHEDXACTIONS, SchedXactionsClass))
 
#define GNC_IS_SCHEDXACTIONS(o)   (G_TYPE_CHECK_INSTANCE_TYPE ((o), GNC_TYPE_SCHEDXACTIONS))
 
#define GNC_IS_SCHEDXACTIONS_CLASS(k)   (G_TYPE_CHECK_CLASS_TYPE ((k), GNC_TYPE_SCHEDXACTIONS))
 
#define GNC_SCHEDXACTIONS_GET_CLASS(o)   (G_TYPE_INSTANCE_GET_CLASS ((o), GNC_TYPE_SCHEDXACTIONS, SchedXactionsClass))
 
#define GNC_IS_SXES(obj)   GNC_IS_SCHEDXACTIONS(obj)
 
#define GNC_SXES(obj)   GNC_SCHEDXACTIONS(obj)
 

Enumerations

enum  FreqType {
  INVALID, ONCE, DAILY, WEEKLY,
  MONTHLY, MONTH_RELATIVE, COMPOSITE
}
 Frequency specification. More...
 
enum  UIFreqType {
  UIFREQ_NONE, UIFREQ_ONCE, UIFREQ_DAILY, UIFREQ_DAILY_MF,
  UIFREQ_WEEKLY, UIFREQ_BI_WEEKLY, UIFREQ_SEMI_MONTHLY, UIFREQ_MONTHLY,
  UIFREQ_QUARTERLY, UIFREQ_TRI_ANUALLY, UIFREQ_SEMI_YEARLY, UIFREQ_YEARLY,
  UIFREQ_NUM_UI_FREQSPECS
}
 The user's conception of the frequency. More...
 

Functions

GType gnc_schedxaction_get_type (void)
 
SchedXaction * xaccSchedXactionMalloc (QofBook *book)
 Creates and initializes a scheduled transaction.
 
void sx_set_template_account (SchedXaction *sx, Account *account)
 
void xaccSchedXactionDestroy (SchedXaction *sx)
 Cleans up and frees a SchedXaction and its associated data.
 
void gnc_sx_begin_edit (SchedXaction *sx)
 
void gnc_sx_commit_edit (SchedXaction *sx)
 
GList * gnc_sx_get_schedule (const SchedXaction *sx)
 
void gnc_sx_set_schedule (SchedXaction *sx, GList *schedule)
 
gchar * xaccSchedXactionGetName (const SchedXaction *sx)
 
void xaccSchedXactionSetName (SchedXaction *sx, const gchar *newName)
 A copy of the name is made.
 
const GDate * xaccSchedXactionGetStartDate (const SchedXaction *sx)
 
time64 xaccSchedXactionGetStartDateTT (const SchedXaction *sx)
 
void xaccSchedXactionSetStartDate (SchedXaction *sx, const GDate *newStart)
 
void xaccSchedXactionSetStartDateTT (SchedXaction *sx, const time64 newStart)
 
int xaccSchedXactionHasEndDate (const SchedXaction *sx)
 
const GDate * xaccSchedXactionGetEndDate (const SchedXaction *sx)
 Returns invalid date when there is no end-date specified.
 
void xaccSchedXactionSetEndDate (SchedXaction *sx, const GDate *newEnd)
 Set to an invalid GDate to turn off 'end-date' definition.
 
const GDate * xaccSchedXactionGetLastOccurDate (const SchedXaction *sx)
 
time64 xaccSchedXactionGetLastOccurDateTT (const SchedXaction *sx)
 
void xaccSchedXactionSetLastOccurDate (SchedXaction *sx, const GDate *newLastOccur)
 
void xaccSchedXactionSetLastOccurDateTT (SchedXaction *sx, const time64 newLastOccur)
 
gboolean xaccSchedXactionHasOccurDef (const SchedXaction *sx)
 Returns true if the scheduled transaction has a defined number of occurrences, false if not.
 
gint xaccSchedXactionGetNumOccur (const SchedXaction *sx)
 
void xaccSchedXactionSetNumOccur (SchedXaction *sx, gint numNum)
 Set to '0' to turn off number-of-occurrences definition.
 
gint xaccSchedXactionGetRemOccur (const SchedXaction *sx)
 
void xaccSchedXactionSetRemOccur (SchedXaction *sx, gint numRemain)
 
gint gnc_sx_get_num_occur_daterange (const SchedXaction *sx, const GDate *start_date, const GDate *end_date)
 Calculates and returns the number of occurrences of the given SX in the given date range (inclusive). More...
 
gint gnc_sx_get_instance_count (const SchedXaction *sx, SXTmpStateData *stateData)
 Get the instance count. More...
 
void gnc_sx_set_instance_count (SchedXaction *sx, gint instanceNum)
 Sets the instance count to something other than the default. More...
 
GList * xaccSchedXactionGetSplits (const SchedXaction *sx)
 
void xaccSchedXactionSetSplits (SchedXaction *sx, GList *newSplits)
 
gboolean xaccSchedXactionGetEnabled (const SchedXaction *sx)
 
void xaccSchedXactionSetEnabled (SchedXaction *sx, gboolean newEnabled)
 
void xaccSchedXactionGetAutoCreate (const SchedXaction *sx, gboolean *outAutoCreate, gboolean *outNotify)
 
void xaccSchedXactionSetAutoCreate (SchedXaction *sx, gboolean newAutoCreate, gboolean newNotify)
 
gint xaccSchedXactionGetAdvanceCreation (const SchedXaction *sx)
 
void xaccSchedXactionSetAdvanceCreation (SchedXaction *sx, gint createDays)
 
gint xaccSchedXactionGetAdvanceReminder (const SchedXaction *sx)
 
void xaccSchedXactionSetAdvanceReminder (SchedXaction *sx, gint reminderDays)
 
GDate xaccSchedXactionGetNextInstance (const SchedXaction *sx, SXTmpStateData *stateData)
 Returns the next occurrence of a scheduled transaction. More...
 
void gnc_sx_add_defer_instance (SchedXaction *sx, void *deferStateData)
 Adds an instance to the deferred list of the SX. More...
 
void gnc_sx_remove_defer_instance (SchedXaction *sx, void *deferStateData)
 Removes an instance from the deferred list. More...
 
GList * gnc_sx_get_defer_instances (SchedXaction *sx)
 Returns the defer list from the SX. More...
 
gboolean SXRegister (void)
 QOF registration. More...
 
GType gnc_schedxactions_get_type (void)
 
SchedXactions * gnc_book_get_schedxactions (QofBook *book)
 
void gnc_sxes_add_sx (SchedXactions *sxes, SchedXaction *sx)
 
void gnc_sxes_del_sx (SchedXactions *sxes, SchedXaction *sx)
 
Accountgnc_book_get_template_root (const QofBook *book)
 Returns the template group from the book. More...
 
GList * gnc_sx_get_sxes_referencing_account (QofBook *book, Account *acct)
 

Temporal state data.


These functions allow us to opaquely save the entire temporal state of ScheduledTransactions.

This is used by the "since-last-run" dialog to store the initial state of SXes before modification ... if it later becomes necessary to revert an entire set of changes, we can 'revert' the SX without having to rollback all the individual state changes.

SXTmpStateDatagnc_sx_create_temporal_state (const SchedXaction *sx)
 Allocates a new SXTmpStateData object and fills it with the current state of the given sx.
 
void gnc_sx_incr_temporal_state (const SchedXaction *sx, SXTmpStateData *stateData)
 Calculates the next occurrence of the given SX and stores that occurrence in the remporalStateDate. More...
 
void gnc_sx_destroy_temporal_state (SXTmpStateData *stateData)
 Frees the given stateDate object. More...
 
SXTmpStateDatagnc_sx_clone_temporal_state (SXTmpStateData *stateData)
 Allocates and returns a one-by-one copy of the given temporal state. More...
 

Detailed Description


Scheduled Transactions provide a framework for remembering information about a transactions that are set to occur in the future, either once or periodically.

Macro Definition Documentation

◆ ENUM_LIST_TYPE

#define ENUM_LIST_TYPE (   _)
Value:
_(INVALID,) \
_(ONCE,) \
_(DAILY,) \
_(WEEKLY,) \
_(MONTHLY,) \
_(MONTH_RELATIVE,) \
_(COMPOSITE,)
Hmmm...
Definition: FreqSpec.h:43

Definition at line 34 of file FreqSpec.h.

◆ ENUM_LIST_UI

#define ENUM_LIST_UI (   _)
Value:
_(UIFREQ_NUM_UI_FREQSPECS,)
Repeat twice a year.
Definition: FreqSpec.h:68
no frequency
Definition: FreqSpec.h:68
Repeat once each week.
Definition: FreqSpec.h:68
Repeat every day.
Definition: FreqSpec.h:68
Repeat three times a year.
Definition: FreqSpec.h:68
Repeat twice a month.
Definition: FreqSpec.h:68
Repeat twice a week.
Definition: FreqSpec.h:68
Just occurs once.
Definition: FreqSpec.h:68
Repeat every quarter.
Definition: FreqSpec.h:68
Repeat Monday to Friday, skip weekend.
Definition: FreqSpec.h:68
Repeat once a year.
Definition: FreqSpec.h:68
Repeat once a month.
Definition: FreqSpec.h:68

Definition at line 53 of file FreqSpec.h.

◆ xaccSchedXactionGetGUID

#define xaccSchedXactionGetGUID (   X)    qof_entity_get_guid(QOF_INSTANCE(X))
Deprecated:

Definition at line 319 of file SchedXaction.h.

◆ xaccSchedXactionIsDirty

#define xaccSchedXactionIsDirty (   X)    qof_instance_is_dirty (QOF_INSTANCE(X))
Deprecated:

Definition at line 317 of file SchedXaction.h.

Enumeration Type Documentation

◆ FreqType

enum FreqType

Frequency specification.

For BI_WEEKLY, use weekly[2] SEMI_MONTHLY, use composite YEARLY, monthly[12]

Enumerator
WEEKLY 

Hmmm...

This is sort of DAILY[7]...

Definition at line 43 of file FreqSpec.h.

◆ UIFreqType

enum UIFreqType

The user's conception of the frequency.

It is expected that this list will grow, while the former FreqType will not.

Enumerator
UIFREQ_NONE 

no frequency

UIFREQ_ONCE 

Just occurs once.

UIFREQ_DAILY 

Repeat every day.

UIFREQ_DAILY_MF 

Repeat Monday to Friday, skip weekend.

UIFREQ_WEEKLY 

Repeat once each week.

UIFREQ_BI_WEEKLY 

Repeat twice a week.

UIFREQ_SEMI_MONTHLY 

Repeat twice a month.

UIFREQ_MONTHLY 

Repeat once a month.

UIFREQ_QUARTERLY 

Repeat every quarter.

UIFREQ_TRI_ANUALLY 

Repeat three times a year.

UIFREQ_SEMI_YEARLY 

Repeat twice a year.

UIFREQ_YEARLY 

Repeat once a year.

Definition at line 68 of file FreqSpec.h.

Function Documentation

◆ gnc_book_get_template_root()

Account* gnc_book_get_template_root ( const QofBook *  book)

Returns the template group from the book.

Definition at line 65 of file SX-book.cpp.

66 {
67  QofCollection *col;
68  if (!book) return NULL;
69  col = qof_book_get_collection (book, GNC_ID_SXTG);
70  return gnc_collection_get_template_root (col);
71 }
QofCollection * qof_book_get_collection(const QofBook *book, QofIdType entity_type)
Return The table of entities of the given type.
Definition: qofbook.cpp:521

◆ gnc_sx_add_defer_instance()

void gnc_sx_add_defer_instance ( SchedXaction *  sx,
void *  deferStateData 
)

Adds an instance to the deferred list of the SX.

Added instances are added in date-sorted order.

Added instances are added in (date-)sorted order.

Definition at line 1099 of file SchedXaction.cpp.

1100 {
1101  sx->deferredList = g_list_insert_sorted( sx->deferredList,
1102  deferStateData,
1103  _temporal_state_data_cmp );
1104 }

◆ gnc_sx_clone_temporal_state()

SXTmpStateData* gnc_sx_clone_temporal_state ( SXTmpStateData stateData)

Allocates and returns a one-by-one copy of the given temporal state.

The caller must destroy the returned object with gnc_sx_destroy_temporal_state() after usage.

Definition at line 1063 of file SchedXaction.cpp.

1064 {
1065  SXTmpStateData *toRet = NULL;
1066 
1067  if(tsd)
1068  {
1069  toRet = g_new(SXTmpStateData, 1);
1070  *toRet = *tsd;
1071  }
1072 
1073  return toRet;
1074 }
Just the variable temporal bits from the SX structure.
Definition: SchedXaction.h:131

◆ gnc_sx_destroy_temporal_state()

void gnc_sx_destroy_temporal_state ( SXTmpStateData stateData)

Frees the given stateDate object.

Definition at line 1057 of file SchedXaction.cpp.

1058 {
1059  g_free(tsd);
1060 }

◆ gnc_sx_get_defer_instances()

GList* gnc_sx_get_defer_instances ( SchedXaction *  sx)

Returns the defer list from the SX.

This is a date-sorted state-data instance list. The list should not be modified by the caller; use the gnc_sx_{add,remove}_defer_instance() functions to modify the list.

Returns the defer list from the SX.

The list should not be modified by the caller; use the gnc_sx_{add,remove}_defer_instance() functions to modify the list.

Parameters
sxScheduled transaction
Returns
Defer list which must not be modified by the caller

Definition at line 1137 of file SchedXaction.cpp.

1138 {
1139  return sx->deferredList;
1140 }

◆ gnc_sx_get_instance_count()

gint gnc_sx_get_instance_count ( const SchedXaction *  sx,
SXTmpStateData stateData 
)

Get the instance count.

This is incremented by one for every created instance of the SX. Returns the instance num of the SX unless stateData is non-null, in which case it returns the instance num from the state data.

Parameters
sxThe instance whose state should be retrieved.
stateDatamay be NULL.

Definition at line 929 of file SchedXaction.cpp.

930 {
931  gint toRet = -1;
932  SXTmpStateData *tsd;
933 
934  if ( stateData )
935  {
936  tsd = (SXTmpStateData*)stateData;
937  toRet = tsd->num_inst;
938  }
939  else
940  {
941  toRet = sx->instance_num;
942  }
943 
944  return toRet;
945 }
Just the variable temporal bits from the SX structure.
Definition: SchedXaction.h:131

◆ gnc_sx_get_num_occur_daterange()

gint gnc_sx_get_num_occur_daterange ( const SchedXaction *  sx,
const GDate *  start_date,
const GDate *  end_date 
)

Calculates and returns the number of occurrences of the given SX in the given date range (inclusive).

Definition at line 739 of file SchedXaction.cpp.

740 {
741  gint result = 0;
742  SXTmpStateData *tmpState;
743  gboolean countFirstDate;
744 
745  /* SX still active? If not, return now. */
747  && xaccSchedXactionGetRemOccur(sx) <= 0)
748  || (xaccSchedXactionHasEndDate(sx)
749  && g_date_compare(xaccSchedXactionGetEndDate(sx), start_date) < 0))
750  {
751  return result;
752  }
753 
754  tmpState = gnc_sx_create_temporal_state (sx);
755 
756  /* Should we count the first valid date we encounter? Only if the
757  * SX has not yet occurred so far, or if its last valid date was
758  * before the start date. */
759  countFirstDate = !g_date_valid(&tmpState->last_date)
760  || (g_date_compare(&tmpState->last_date, start_date) < 0);
761 
762  /* No valid date? SX has never occurred so far. */
763  if (!g_date_valid(&tmpState->last_date))
764  {
765  /* SX has never occurred so far */
766  gnc_sx_incr_temporal_state (sx, tmpState);
767  if (xaccSchedXactionHasOccurDef(sx) && tmpState->num_occur_rem < 0)
768  {
769  g_free (tmpState);
770  return result;
771  }
772  }
773 
774  /* Increase the tmpState until we are in our interval of
775  * interest. Only calculate anything if the sx hasn't already
776  * ended. */
777  while (g_date_compare(&tmpState->last_date, start_date) < 0)
778  {
779  gnc_sx_incr_temporal_state (sx, tmpState);
780  if (xaccSchedXactionHasOccurDef(sx) && tmpState->num_occur_rem < 0)
781  {
782  g_free (tmpState);
783  return result;
784  }
785  }
786 
787  /* Now we are in our interval of interest. Increment the
788  * occurrence date until we are beyond the end of our
789  * interval. Make sure to check for invalid dates here: It means
790  * the SX has ended. */
791  while (g_date_valid(&tmpState->last_date)
792  && (g_date_compare(&tmpState->last_date, end_date) <= 0)
793  && (!xaccSchedXactionHasEndDate(sx)
794  || g_date_compare(&tmpState->last_date, xaccSchedXactionGetEndDate(sx)) <= 0)
796  /* The >=0 (i.e. the ==) is important here, otherwise
797  * we miss the last valid occurrence of a SX which is
798  * limited by num_occur */
799  || tmpState->num_occur_rem >= 0))
800  {
801  ++result;
802  gnc_sx_incr_temporal_state (sx, tmpState);
803  }
804 
805  /* If the first valid date shouldn't be counted, decrease the
806  * result number by one. */
807  if (!countFirstDate && result > 0)
808  --result;
809 
810  g_free (tmpState);
811  return result;
812 }
const GDate * xaccSchedXactionGetEndDate(const SchedXaction *sx)
Returns invalid date when there is no end-date specified.
SXTmpStateData * gnc_sx_create_temporal_state(const SchedXaction *sx)
Allocates a new SXTmpStateData object and fills it with the current state of the given sx...
Just the variable temporal bits from the SX structure.
Definition: SchedXaction.h:131
void gnc_sx_incr_temporal_state(const SchedXaction *sx, SXTmpStateData *tsd)
Calculates the next occurrence of the given SX and stores that occurrence in the remporalStateDate.
gboolean xaccSchedXactionHasOccurDef(const SchedXaction *sx)
Returns true if the scheduled transaction has a defined number of occurrences, false if not...

◆ gnc_sx_get_schedule()

GList* gnc_sx_get_schedule ( const SchedXaction *  sx)
Returns
GList<Recurrence*>

Definition at line 524 of file SchedXaction.cpp.

525 {
526  return sx->schedule;
527 }

◆ gnc_sx_get_sxes_referencing_account()

GList* gnc_sx_get_sxes_referencing_account ( QofBook *  book,
Account acct 
)
Returns
The list of SXes which reference the given Account. Caller should free this list.

Definition at line 365 of file SX-book.cpp.

366 {
367  GList *rtn = NULL;
368  const GncGUID *acct_guid = qof_entity_get_guid(QOF_INSTANCE(acct));
369  GList *sx_list;
370  SchedXactions *sxactions = gnc_book_get_schedxactions(book);
371  g_return_val_if_fail( sxactions != NULL, rtn);
372  for (sx_list = sxactions->sx_list; sx_list != NULL; sx_list = sx_list->next)
373  {
374  SchedXaction *sx = (SchedXaction*)sx_list->data;
375  GList *splits = xaccSchedXactionGetSplits(sx);
376  for (GList *node = splits; node; node = node->next)
377  {
378  Split *s = (Split*)node->data;
379  GncGUID *guid = NULL;
380  qof_instance_get (QOF_INSTANCE (s), "sx-account", &guid, NULL);
381  if (guid_equal(acct_guid, guid))
382  rtn = g_list_prepend (rtn, sx);
383 
384  guid_free (guid);
385  }
386  g_list_free (splits);
387  }
388  return g_list_reverse (rtn);
389 }
void qof_instance_get(const QofInstance *inst, const gchar *first_prop,...)
Wrapper for g_object_get.
gboolean guid_equal(const GncGUID *guid_1, const GncGUID *guid_2)
Given two GUIDs, return TRUE if they are non-NULL and equal.
Definition: guid.cpp:204
const GncGUID * qof_entity_get_guid(gconstpointer ent)
The type used to store guids in C.
Definition: guid.h:75

◆ gnc_sx_incr_temporal_state()

void gnc_sx_incr_temporal_state ( const SchedXaction *  sx,
SXTmpStateData stateData 
)

Calculates the next occurrence of the given SX and stores that occurrence in the remporalStateDate.

The SX is unchanged.

Definition at line 1045 of file SchedXaction.cpp.

1046 {
1047  g_return_if_fail(tsd != NULL);
1048  tsd->last_date = xaccSchedXactionGetNextInstance (sx, tsd);
1049  if (xaccSchedXactionHasOccurDef (sx))
1050  {
1051  --tsd->num_occur_rem;
1052  }
1053  ++tsd->num_inst;
1054 }
GDate xaccSchedXactionGetNextInstance(const SchedXaction *sx, SXTmpStateData *tsd)
Returns the next occurrence of a scheduled transaction.
gboolean xaccSchedXactionHasOccurDef(const SchedXaction *sx)
Returns true if the scheduled transaction has a defined number of occurrences, false if not...

◆ gnc_sx_remove_defer_instance()

void gnc_sx_remove_defer_instance ( SchedXaction *  sx,
void *  deferStateData 
)

Removes an instance from the deferred list.

If the instance is no longer useful; gnc_sx_destroy_temporal_state() it.

The saved SXTmpStateData existed for comparison only, so destroy it.

Definition at line 1111 of file SchedXaction.cpp.

1112 {
1113  GList *found_by_value;
1114 
1115  found_by_value = g_list_find_custom(
1116  sx->deferredList, deferStateData, _temporal_state_data_cmp);
1117  if (found_by_value == NULL)
1118  {
1119  g_warning("unable to find deferred instance");
1120  return;
1121  }
1122 
1123  g_free (found_by_value->data);
1124  sx->deferredList = g_list_delete_link(sx->deferredList, found_by_value);
1125 }

◆ gnc_sx_set_instance_count()

void gnc_sx_set_instance_count ( SchedXaction *  sx,
gint  instanceNum 
)

Sets the instance count to something other than the default.

As the default is the incorrect value '0', callers should DTRT here.

Definition at line 948 of file SchedXaction.cpp.

949 {
950  g_return_if_fail(sx);
951  if (sx->instance_num == instance_num)
952  return;
953  gnc_sx_begin_edit(sx);
954  sx->instance_num = instance_num;
955  qof_instance_set_dirty(&sx->inst);
956  gnc_sx_commit_edit(sx);
957 }

◆ gnc_sx_set_schedule()

void gnc_sx_set_schedule ( SchedXaction *  sx,
GList *  schedule 
)
Parameters
[in]scheduleA GList<Recurrence*>

Definition at line 530 of file SchedXaction.cpp.

531 {
532  g_return_if_fail(sx);
533  gnc_sx_begin_edit(sx);
534  sx->schedule = schedule;
535  qof_instance_set_dirty(&sx->inst);
536  gnc_sx_commit_edit(sx);
537 }

◆ SXRegister()

gboolean SXRegister ( void  )

QOF registration.

Definition at line 1191 of file SchedXaction.cpp.

1192 {
1193  static QofParam params[] =
1194  {
1195  {
1196  GNC_SX_NAME, QOF_TYPE_STRING, (QofAccessFunc)xaccSchedXactionGetName,
1198  },
1199  {
1200  GNC_SX_START_DATE, QOF_TYPE_DATE, (QofAccessFunc)xaccSchedXactionGetStartDateTT,
1201  (QofSetterFunc)xaccSchedXactionSetStartDateTT
1202  },
1203  {
1204  GNC_SX_LAST_DATE, QOF_TYPE_DATE, (QofAccessFunc)xaccSchedXactionGetLastOccurDateTT,
1205  (QofSetterFunc)xaccSchedXactionSetLastOccurDateTT
1206  },
1207  {
1208  GNC_SX_NUM_OCCUR, QOF_TYPE_INT64, (QofAccessFunc)xaccSchedXactionGetNumOccur,
1210  },
1211  {
1212  GNC_SX_REM_OCCUR, QOF_TYPE_INT64, (QofAccessFunc)xaccSchedXactionGetRemOccur,
1213  (QofSetterFunc)xaccSchedXactionSetRemOccur
1214  },
1215  { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL },
1216  { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL },
1217  { NULL },
1218  };
1219  qof_class_register(GNC_SX_ID, NULL, params);
1220  return qof_object_register(&SXDesc);
1221 }
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.
void xaccSchedXactionSetNumOccur(SchedXaction *sx, gint new_num)
Set to &#39;0&#39; to turn off number-of-occurrences definition.
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.
Definition: qofclass.cpp:86
#define QOF_PARAM_BOOK
"Known" Object Parameters – all objects must support these
Definition: qofquery.h:108
void(* QofSetterFunc)(gpointer, gpointer)
The QofSetterFunc defines an function pointer for parameter setters.
Definition: qofclass.h:185
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
The QofAccessFunc defines an arbitrary function pointer for access functions.
Definition: qofclass.h:178
void xaccSchedXactionSetName(SchedXaction *sx, const gchar *newName)
A copy of the name is made.
gboolean qof_object_register(const QofObject *object)
Register new types of object objects.
Definition: qofobject.cpp:299

◆ xaccSchedXactionGetNextInstance()

GDate xaccSchedXactionGetNextInstance ( const SchedXaction *  sx,
SXTmpStateData stateData 
)

Returns the next occurrence of a scheduled transaction.

If the transaction hasn't occurred, then it's based off the start date. Otherwise, it's based off the last-occurrence date.

If state data is NULL, the current value of the SX is used for computation. Otherwise, the values in the state data are used. This allows the caller to correctly create a set of instances into the future for possible action without modifying the SX state until action is actually taken.

Definition at line 886 of file SchedXaction.cpp.

887 {
888  GDate prev_occur, next_occur;
889 
890  g_date_clear( &prev_occur, 1 );
891  if ( tsd != NULL )
892  prev_occur = tsd->last_date;
893 
894  /* If prev_occur is in the "cleared" state and sx->start_date isn't, then
895  * we're at the beginning. We want to pretend prev_occur is the day before
896  * the start_date in case the start_date is today so that the SX will fire
897  * today. If start_date isn't valid either then the SX will fire anyway, no
898  * harm done. prev_occur cannot be before start_date either.
899  */
900  if (g_date_valid (&sx->start_date) && (!g_date_valid ( &prev_occur ) || g_date_compare (&prev_occur, &sx->start_date)<0))
901  {
902  /* We must be at the beginning. */
903  prev_occur = sx->start_date;
904  g_date_subtract_days (&prev_occur, 1 );
905  }
906 
907  recurrenceListNextInstance(sx->schedule, &prev_occur, &next_occur);
908 
909  if ( xaccSchedXactionHasEndDate( sx ) )
910  {
911  const GDate *end_date = xaccSchedXactionGetEndDate( sx );
912  if ( g_date_compare( &next_occur, end_date ) > 0 )
913  {
914  g_date_clear( &next_occur, 1 );
915  }
916  }
917  else if ( xaccSchedXactionHasOccurDef( sx ) )
918  {
919  if ((tsd && tsd->num_occur_rem == 0) ||
920  (!tsd && sx->num_occurances_remain == 0 ))
921  {
922  g_date_clear( &next_occur, 1 );
923  }
924  }
925  return next_occur;
926 }
const GDate * xaccSchedXactionGetEndDate(const SchedXaction *sx)
Returns invalid date when there is no end-date specified.
gboolean xaccSchedXactionHasOccurDef(const SchedXaction *sx)
Returns true if the scheduled transaction has a defined number of occurrences, false if not...