LCOV - code coverage report
Current view: top level - libgnucash/app-utils - gnc-sx-instance-model.h (source / functions) Coverage Total Hit
Test: gnucash.info Lines: 0.0 % 1 0
Test Date: 2025-02-07 16:25:45 Functions: 0.0 % 1 0
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /*
       2                 :             :  * gnc-sx-instance-model.h
       3                 :             :  *
       4                 :             :  * Copyright (C) 2006 Josh Sled <jsled@asynchronous.org>
       5                 :             :  *
       6                 :             :  * This program is free software; you can redistribute it and/or
       7                 :             :  * modify it under the terms of version 2 and/or version 3 of the GNU General Public
       8                 :             :  * License as published by the Free Software Foundation.
       9                 :             :  *
      10                 :             :  * This program is distributed in the hope that it will be useful,
      11                 :             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      12                 :             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13                 :             :  * GNU General Public License for more details.
      14                 :             :  *
      15                 :             :  * You should have received a copy of the GNU General Public License
      16                 :             :  * along with this program; if not, contact:
      17                 :             :  *
      18                 :             :  * Free Software Foundation           Voice:  +1-617-542-5942
      19                 :             :  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652
      20                 :             :  * Boston, MA  02110-1301,  USA       gnu@gnu.org
      21                 :             :  */
      22                 :             : 
      23                 :             : /** \file
      24                 :             :  */
      25                 :             : 
      26                 :             : #ifndef _GNC_SX_INSTANCE_MODEL_H
      27                 :             : #define _GNC_SX_INSTANCE_MODEL_H
      28                 :             : 
      29                 :             : #include <config.h>
      30                 :             : #include <glib.h>
      31                 :             : #include <glib-object.h>
      32                 :             : #include "gnc-numeric.h"
      33                 :             : #include "SchedXaction.h"
      34                 :             : 
      35                 :             : G_BEGIN_DECLS
      36                 :             : 
      37                 :             : #define GNC_TYPE_SX_INSTANCE_MODEL            (gnc_sx_instance_model_get_type ())
      38                 :           0 : G_DECLARE_FINAL_TYPE (GncSxInstanceModel, gnc_sx_instance_model, GNC, SX_INSTANCE_MODEL, GObject)
      39                 :             : 
      40                 :             : typedef struct _GncSxInstances
      41                 :             : {
      42                 :             :     SchedXaction *sx;
      43                 :             :     GHashTable /** <name:char*,GncSxVariable*> **/ *variable_names;
      44                 :             :     gboolean variable_names_parsed;
      45                 :             : 
      46                 :             :     GDate next_instance_date;
      47                 :             : 
      48                 :             :     /** GList<GncSxInstance*> **/
      49                 :             :     GList *instance_list;
      50                 :             : } GncSxInstances;
      51                 :             : 
      52                 :             : typedef enum
      53                 :             : {
      54                 :             :     SX_INSTANCE_STATE_IGNORED,
      55                 :             :     SX_INSTANCE_STATE_POSTPONED,
      56                 :             :     SX_INSTANCE_STATE_TO_CREATE,
      57                 :             :     SX_INSTANCE_STATE_REMINDER,
      58                 :             :     SX_INSTANCE_STATE_CREATED,
      59                 :             :     SX_INSTANCE_STATE_MAX_STATE
      60                 :             : } GncSxInstanceState;
      61                 :             : 
      62                 :             : typedef struct _GncSxVariable
      63                 :             : {
      64                 :             :     gchar *name;
      65                 :             :     gnc_numeric value; /**< only numeric values are supported. **/
      66                 :             :     gboolean editable;
      67                 :             : } GncSxVariable;
      68                 :             : 
      69                 :             : typedef struct _GncSxInstance
      70                 :             : {
      71                 :             :     GncSxInstances *parent; /**< the parent instances collection. **/
      72                 :             :     SXTmpStateData *temporal_state; /**< the sx creation temporal state. **/
      73                 :             :     GncSxInstanceState orig_state; /**< the original state at generation time. **/
      74                 :             :     GncSxInstanceState state; /**< the current state of the instance (during editing) **/
      75                 :             :     GDate date; /**< the instance date. **/
      76                 :             :     GHashTable *variable_bindings; /**< variable bindings. **/
      77                 :             : } GncSxInstance;
      78                 :             : 
      79                 :             : typedef struct _GncSxVariableNeeded
      80                 :             : {
      81                 :             :     GncSxInstance *instance;
      82                 :             :     GncSxVariable *variable;
      83                 :             : } GncSxVariableNeeded;
      84                 :             : 
      85                 :             : /** Shorthand for get_instances(now, FALSE); */
      86                 :             : GncSxInstanceModel* gnc_sx_get_current_instances(void);
      87                 :             : 
      88                 :             : /** Allocates a new SxInstanceModel and fills it with generated
      89                 :             :  * instances for all scheduled transactions up to the given range_end
      90                 :             :  * date.
      91                 :             :  *
      92                 :             :  * The caller must unref the returned object by
      93                 :             :  * g_object_unref(G_OBJECT(inst_model)); when no longer in use. */
      94                 :             : GncSxInstanceModel* gnc_sx_get_instances(const GDate *range_end, gboolean include_disabled);
      95                 :             : 
      96                 :             : /**
      97                 :             :  * Regenerates and updates the GncSxInstances* for the given SX.  Model
      98                 :             :  * consumers are probably going to call this in response to seeing the
      99                 :             :  * "update" signal, unless they need to be doing something else like
     100                 :             :  * finishing an iteration over an existing GncSxInstances*.
     101                 :             :  **/
     102                 :             : void gnc_sx_instance_model_update_sx_instances(GncSxInstanceModel *model, SchedXaction *sx);
     103                 :             : void gnc_sx_instance_model_remove_sx_instances(GncSxInstanceModel *model, SchedXaction *sx);
     104                 :             : 
     105                 :             : /** Fix up numerics where they've gotten out-of-sync with the formulas.
     106                 :             :  *
     107                 :             :  * Ideally this would be done at load time, but it requires gnc_exp_parser to
     108                 :             :  * work and neither engine nor the backends can depend on it.
     109                 :             :  */
     110                 :             : void gnc_sx_scrub_split_numerics (gpointer psplit, gpointer user);
     111                 :             : 
     112                 :             : /** @return GList<GncSxVariable*>. Caller owns the list, but not the items. **/
     113                 :             : GList *gnc_sx_instance_get_variables(GncSxInstance *inst);
     114                 :             : 
     115                 :             : Account* gnc_sx_get_template_transaction_account(const SchedXaction *sx);
     116                 :             : 
     117                 :             : /**
     118                 :             :  * @return caller-owned data struct.
     119                 :             :  **/
     120                 :             : GHashTable* gnc_sx_instance_get_variables_for_parser(GHashTable *instance_var_hash);
     121                 :             : 
     122                 :             : GncSxVariable* gnc_sx_variable_new_full(gchar *name, gnc_numeric value, gboolean editable);
     123                 :             : void gnc_sx_variable_free(GncSxVariable *var);
     124                 :             : 
     125                 :             : /**
     126                 :             :  * There is a constraint around a sequence of upcoming instance states.  In
     127                 :             :  * short: the last-created state and a list of postponed instances are modeled,
     128                 :             :  * but upcoming reminders are not.  As such, a reminder can never be before any
     129                 :             :  * other (modeled) instance type.  For instance, the following sequences are
     130                 :             :  * disallowed:
     131                 :             :  *
     132                 :             :  * [...]
     133                 :             :  * remind    <- will be lost/skipped over; must be converted to `postponed`.
     134                 :             :  * to-create <- this will be the last-recorded state.
     135                 :             :  * [...]
     136                 :             :  *
     137                 :             :  * [...]
     138                 :             :  * remind    <- same as previous; will be lost/skipped; must be `postponed`.
     139                 :             :  * postponed
     140                 :             :  * [...]
     141                 :             :  *
     142                 :             :  * remind    <- same...
     143                 :             :  * ignore
     144                 :             :  * [...]
     145                 :             :  *
     146                 :             :  *
     147                 :             :  * As such, the SinceLastRun model will enforce that there are no previous
     148                 :             :  * `remind` instances at every state change.  They will be silently converted to
     149                 :             :  * `postponed`-state transactions.
     150                 :             :  **/
     151                 :             : void gnc_sx_instance_model_change_instance_state(GncSxInstanceModel *model,
     152                 :             :         GncSxInstance *instance,
     153                 :             :         GncSxInstanceState new_state);
     154                 :             : 
     155                 :             : void gnc_sx_instance_model_set_variable(GncSxInstanceModel *model,
     156                 :             :                                         GncSxInstance *instance,
     157                 :             :                                         GncSxVariable *variable,
     158                 :             :                                         gnc_numeric *new_value);
     159                 :             : 
     160                 :             : /**
     161                 :             :  * @return List<GncSxVariableNeeded> of unbound {instance,variable} pairs;
     162                 :             :  * the caller owns the list and the items.
     163                 :             :  **/
     164                 :             : GList* gnc_sx_instance_model_check_variables(GncSxInstanceModel *model);
     165                 :             : 
     166                 :             : /** Really ("effectively") create the transactions from the SX
     167                 :             :  * instances in the given model. */
     168                 :             : void gnc_sx_instance_model_effect_change(GncSxInstanceModel *model,
     169                 :             :         gboolean auto_create_only,
     170                 :             :         GList **created_transaction_guids,
     171                 :             :         GList **creation_errors);
     172                 :             : 
     173                 :             : typedef struct _GncSxSummary
     174                 :             : {
     175                 :             :     gboolean need_dialog; /**< If the dialog needs to be displayed. **/
     176                 :             : 
     177                 :             :     gint num_instances; /**< The number of total instances (in any state). **/
     178                 :             :     gint num_to_create_instances; /**< The number of (not-auto-create) to-create instances. **/
     179                 :             :     gint num_auto_create_instances;  /**< The total number of auto-create instances. **/
     180                 :             :     gint num_auto_create_no_notify_instances; /**< The number of automatically-created instances that do no request notification. **/
     181                 :             : } GncSxSummary;
     182                 :             : 
     183                 :             : /**
     184                 :             :  * @param summary Caller-provided, populated with a summarization of the
     185                 :             :  * state of the model.  Specifically, used to determine if there are SLR SXes
     186                 :             :  * that need either auto-creation or user-interaction.
     187                 :             :  **/
     188                 :             : void gnc_sx_instance_model_summarize(GncSxInstanceModel *model, GncSxSummary *summary);
     189                 :             : 
     190                 :             : /** Debug output to trace file */
     191                 :             : void gnc_sx_summary_print(const GncSxSummary *summary);
     192                 :             : 
     193                 :             : void gnc_sx_get_variables(SchedXaction *sx, GHashTable *var_hash);
     194                 :             : int gnc_sx_parse_vars_from_formula(const char *formula, GHashTable *var_hash, gnc_numeric *result);
     195                 :             : void gnc_sx_randomize_variables(GHashTable *vars);
     196                 :             : 
     197                 :             : /** Returns a GHashTable<GUID*, gnc_numeric*> with no destructor for
     198                 :             :  * the key, but a destructor for the value set.
     199                 :             :  *
     200                 :             :  * The returned value must be free'd with g_hash_table_destroy or
     201                 :             :  * g_hash_table_unref. */
     202                 :             : GHashTable* gnc_g_hash_new_guid_numeric(void);
     203                 :             : 
     204                 :             : /** Instantiates the cash flow of all given SXs (in the given
     205                 :             :  * GList<SchedXAction*>) into the GHashTable<GUID*, gnc_numeric*> for the
     206                 :             :  * given date range. Each SX is counted with multiplicity as it has
     207                 :             :  * occurrences in the given date range.
     208                 :             :  *
     209                 :             :  * The creation_errors list, if non-NULL, receive any errors that
     210                 :             :  * occurred during creation, similar as in
     211                 :             :  * gnc_sx_instance_model_effect_change(). */
     212                 :             : void gnc_sx_all_instantiate_cashflow(GList *all_sxes,
     213                 :             :                                      const GDate *range_start, const GDate *range_end,
     214                 :             :                                      GHashTable* map, GList **creation_errors);
     215                 :             : 
     216                 :             : /** Simplified wrapper around gnc_sx_all_instantiate_cashflow(): Run
     217                 :             :  * that function on all SX of the current book for the given date
     218                 :             :  * range. Ignore any potential error messages. Returns a newly
     219                 :             :  * allocated GHashTable with the result, which is a GHashTable<GUID*,
     220                 :             :  * gnc_numeric*>, identical to what gnc_g_hash_new_guid_numeric()
     221                 :             :  * would return. The returned value must be free'd with
     222                 :             :  * g_hash_table_destroy. */
     223                 :             : GHashTable* gnc_sx_all_instantiate_cashflow_all(GDate range_start, GDate range_end);
     224                 :             : 
     225                 :             : /** Returns the list of GncSxInstances in the model
     226                 :             :  * (Each element in the list has type GncSxInstances)
     227                 :             :  *
     228                 :             :  * The returned list is owned by the model
     229                 :             :  */
     230                 :             : GList *gnc_sx_instance_model_get_sx_instances_list (GncSxInstanceModel *model);
     231                 :             : 
     232                 :             : G_END_DECLS
     233                 :             : 
     234                 :             : 
     235                 :             : #endif // _GNC_SX_INSTANCE_MODEL_H
        

Generated by: LCOV version 2.0-1