public function Transactions()
 {
     $GnuCashTransactions = GnuCashTransactionObject::get()->filter(array('SourceAccount' => $this->Title))->sort('Index', 'DESC');
     $transactions = new ArrayList();
     foreach ($GnuCashTransactions as $GnuCashTransaction) {
         $transactions->add(new ArrayData(['Date' => $GnuCashTransaction->Date, 'Description' => $GnuCashTransaction->Description, 'DestinationAccount' => $GnuCashTransaction->DestinationAccount, 'Amount' => $GnuCashTransaction->Amount, 'AmountNice' => number_format($GnuCashTransaction->Amount, 2) . ' ' . $this->CurrencySymbol, 'Balance' => $GnuCashTransaction->Balance, 'BalanceNice' => number_format($GnuCashTransaction->Balance, 2) . ' ' . $this->CurrencySymbol]));
     }
     return $transactions;
 }
Example #2
0
 public function recalc()
 {
     // delete all GnuCashTransactionObject DataObjects
     $GnuCashTransactions = GnuCashTransactionObject::get();
     foreach ($GnuCashTransactions as $GnuCashTransaction) {
         $GnuCashTransaction->delete();
     }
     // reset all account page balances
     foreach (GnuCashAccountPage::get()->filter(array('ParentID' => $this->ID)) as $Account) {
         $Account->Balance = 0.0;
         $Account->write();
     }
     // calculate running balances and create transaction DataObjects
     $runningBalances = array();
     $index = 0;
     foreach (explode("\n", $this->TransactionsCSV) as &$line) {
         $line = str_getcsv($line);
         // filter out splits from transaction lines
         if ($line[7] == 'T') {
             $GnuCashTransaction = GnuCashTransactionObject::create();
             $GnuCashTransaction->Page = $this->ID;
             $GnuCashTransaction->Index = $index++;
             $GnuCashTransaction->Date = $line[0];
             $GnuCashTransaction->Description = $line[3];
             $GnuCashTransaction->SourceAccount = $line[1];
             $GnuCashTransaction->DestinationAccount = $line[6];
             //
             // Parse decimal and thousands separators
             //
             // Remove commas (,)
             $line[12] = str_replace(',', '', $line[12]);
             $GnuCashTransaction->Amount = $line[12];
             if (!array_key_exists($GnuCashTransaction->SourceAccount, $runningBalances)) {
                 $runningBalances[$GnuCashTransaction->SourceAccount] = 0.0;
             }
             $runningBalances[$GnuCashTransaction->SourceAccount] += $GnuCashTransaction->Amount;
             $GnuCashTransaction->Balance = $runningBalances[$GnuCashTransaction->SourceAccount];
             $GnuCashTransaction->write();
         }
     }
     foreach ($runningBalances as $accountName => $balance) {
         $account = GnuCashAccountPage::get()->filter(array('Title' => $accountName, 'ParentID' => $this->ID));
         foreach ($account as $a) {
             $a->Balance = $balance;
             $a->write();
         }
     }
     $this::redirectBack();
 }