LCOV - code coverage report
Current view: top level - libgnucash/engine - SX-ttinfo.hpp (source / functions) Coverage Total Hit
Test: gnucash.info Lines: 39.3 % 28 11
Test Date: 2026-11-02 18:19:43 Functions: 44.0 % 25 11
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /********************************************************************\
       2              :  * SX-ttinfo.h -- Template Transaction manipulation functions       *
       3              :  *               for scheduled transactions                         *
       4              :  * Copyright (C) 2001 Robert Merkel <rgmerk@mira.net>               *
       5              :  *                                                                  *
       6              :  * This program is free software; you can redistribute it and/or    *
       7              :  * modify it under the terms of the GNU General Public License as   *
       8              :  * published by the Free Software Foundation; either version 2 of   *
       9              :  * the License, or (at your option) any later version.              *
      10              :  *                                                                  *
      11              :  * This program is distributed in the hope that it will be useful,  *
      12              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of   *
      13              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    *
      14              :  * GNU General Public License for more details.                     *
      15              :  *                                                                  *
      16              :  * You should have received a copy of the GNU General Public License*
      17              :  * along with this program; if not, contact:                        *
      18              :  *                                                                  *
      19              :  * Free Software Foundation           Voice:  +1-617-542-5942       *
      20              :  * 51 Franklin Street, Fifth Floor    Fax:    +1-617-542-2652       *
      21              :  * Boston, MA  02110-1301,  USA       gnu@gnu.org                   *
      22              :  *                                                                  *
      23              : \********************************************************************/
      24              : 
      25              : #ifndef GNC_SX_TTINFO_H
      26              : #define GNC_SX_TTINFO_H
      27              : 
      28              : #include <glib.h>
      29              : #include "qof.h"
      30              : #include "SchedXaction.h"
      31              : #include "Account.h"
      32              : #include "gnc-commodity.h"
      33              : #include "gnc-numeric.hpp"
      34              : 
      35              : #include <vector>
      36              : #include <optional>
      37              : #include <string>
      38              : #include <algorithm>
      39              : #include <memory>
      40              : 
      41              : struct OptionalString
      42              : {
      43           44 :     const char* operator* () const { return m_str ? m_str->c_str() : nullptr; };
      44            0 :     void operator= (const char* str) { if (str) m_str = str; else reset(); };
      45            0 :     void reset () { m_str = std::nullopt; };
      46              : protected:
      47              :     std::optional<std::string> m_str;
      48              : };
      49              : 
      50              : struct OptionalStringFromNumeric : public OptionalString
      51              : {
      52              :     using OptionalString::operator=;
      53              :     void operator= (std::optional<gnc_numeric> num)
      54              :     { if (num) m_str = GncNumeric (*num).to_string(); else reset(); }
      55              : };
      56              : 
      57              : struct TTSplitInfo
      58              : {
      59              :     OptionalString m_action;
      60              :     OptionalString m_memo;
      61              :     OptionalStringFromNumeric m_credit_formula, m_debit_formula;
      62              :     Account *m_acc = nullptr;
      63              : 
      64            8 :     const char* get_action () const { return *m_action; };
      65            8 :     const char* get_memo () const { return *m_memo; };
      66            8 :     const Account* get_account () const { return m_acc; };
      67            8 :     const char* get_credit_formula () const { return *m_credit_formula; };
      68            8 :     const char* get_debit_formula () const { return *m_debit_formula; };
      69              : 
      70            0 :     void set_action (const char *action) { m_action = action; };
      71            0 :     void set_memo (const char *memo) { m_memo = memo; };
      72            0 :     void set_account (Account *acc) { m_acc = acc; };
      73            0 :     void set_credit_formula (const char *credit_formula) { set_formulas (nullptr, credit_formula); };
      74            0 :     void set_debit_formula (const char *debit_formula) { set_formulas (debit_formula, nullptr); };
      75              :     void set_credit_formula_numeric (gnc_numeric num) { set_formulas_numeric ({}, num); };
      76              :     void set_debit_formula_numeric (gnc_numeric num) { set_formulas_numeric (num, {}); };
      77              : 
      78              : private:
      79            0 :     void set_formulas (const char* debit, const char *credit)
      80              :     {
      81            0 :         m_debit_formula = debit;
      82            0 :         m_credit_formula = credit;
      83            0 :     }
      84              :     void set_formulas_numeric (std::optional<gnc_numeric> debit, std::optional<gnc_numeric> credit)
      85              :     {
      86              :         m_debit_formula = debit;
      87              :         m_credit_formula = credit;
      88              :     }
      89              : };
      90              : 
      91              : using TTSplitInfoPtr = std::shared_ptr<TTSplitInfo>;
      92              : using TTSplitInfoVec = std::vector<TTSplitInfoPtr>;
      93              : 
      94              : struct TTInfo
      95              : {
      96              :     OptionalString m_description;
      97              :     OptionalString m_num;
      98              :     OptionalString m_notes;
      99              :     gnc_commodity *m_common_currency = nullptr;
     100              :     TTSplitInfoVec m_splits;
     101              : 
     102            4 :     const char* get_description () const { return *m_description; };
     103            4 :     const char* get_num () const { return *m_num; };
     104            4 :     const char* get_notes () const { return *m_notes; };
     105            4 :     gnc_commodity* get_currency () const { return m_common_currency; };
     106            4 :     const TTSplitInfoVec& get_template_splits () const { return m_splits; };
     107              : 
     108            0 :     void set_description (const char *description) { m_description = description; };
     109            0 :     void set_num (const char *num) { m_num = num; };
     110            0 :     void set_notes (const char *notes) { m_notes = notes; };
     111            0 :     void set_currency (gnc_commodity *currency) { m_common_currency = currency; };
     112            0 :     void clear_template_splits () { m_splits.clear(); };
     113            0 :     void append_template_split (TTSplitInfoPtr& ttsi) { m_splits.push_back (ttsi); };
     114              : ;
     115              : };
     116              : 
     117              : using TTInfoPtr = std::shared_ptr<TTInfo>;
     118              : using TTInfoVec = std::vector<TTInfoPtr>;
     119              : 
     120              : #endif
        

Generated by: LCOV version 2.0-1