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: 2025-02-07 16:25:45 Functions: 44.0 % 25 11
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     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