array( 'className' => 'StatementEntry', 'conditions' => array('type' => 'CHARGE'), ), 'PaymentStatementEntry' => array( 'className' => 'StatementEntry', 'conditions' => array('type' => 'PAYMENT'), ), ); /************************************************************************** ************************************************************************** ************************************************************************** * function: findStatementEntries * - Returns an array of statement entries that belong to a given * statement. There is extra work done... see the StatementEntry model. */ function findStatementEntries($id, $cond = null, $link = null) { /* pr(array('function' => 'Statement::findStatementEntries', */ /* 'args' => compact('id', 'cond', 'link'), */ /* )); */ if (!isset($cond)) $cond = array(); $cond[] = array('Statement.id' => $id); $entries = $this->find('all', array('link' => $link, 'conditions' => $cond)); /* pr(array('function' => 'Statement::findStatementEntries', */ /* 'args' => compact('id', 'cond', 'link'), */ /* 'return' => compact('entries'), */ /* )); */ return $entries; } /************************************************************************** ************************************************************************** ************************************************************************** * function: findEntriesRelatedToAccount * - Returns an array of statement entries that belong to the given * account, and are related to a specific account. */ function findEntriesRelatedToAccount($id, $rel_ids, $cond = null, $link = null) { /* pr(array('function' => 'Statement::findEntriesRelatedToAccount', */ /* 'args' => compact('id', 'rel_ids', 'cond', 'link'), */ /* )); */ if (!isset($cond)) $cond = array(); if (!isset($link)) $link = array(); if (!is_array($rel_ids)) $rel_ids = array($rel_ids); $link['StatementEntry'] = array('LedgerEntry' => array('Ledger' => array('Account'))); $cond[] = array('Account.id' => $rel_ids); $entries = $this->findStatementEntries($id, $cond, $link); $stats = $this->stats($id, $cond, $link); $entries = array('Entries' => $entries, 'summary' => $stats); /* pr(array('function' => 'Statement::findEntriesRelatedToAccount', */ /* 'args' => compact('id', 'relid', 'cond', 'link'), */ /* 'return' => compact('entries'), */ /* )); */ return $entries; } /************************************************************************** ************************************************************************** ************************************************************************** * function: stats * - Returns summary data from the requested statement. */ function stats($id, $cond = null, $link = null) { if (!isset($cond)) $cond = array(); if (!isset($link)) $link = array(); if (!isset($link['StatementEntry'])) $link['StatementEntry'] = array('fields' => array()); $cond[] = array('Statement.id' => $id); $stats = $this->find ('first', array ('link' => $link, 'fields' => array("SUM(IF(StatementEntry.type = 'CHARGE', StatementEntry.amount, NULL)) AS charges", "SUM(IF(StatementEntry.type = 'PAYMENT', StatementEntry.amount, NULL)) AS payments", "SUM(IF(StatementEntry.type = 'CHARGE', 1, -1) * IF(StatementEntry.amount, StatementEntry.amount, 0) ) AS balance", "COUNT(StatementEntry.id) AS entries"), 'conditions' => $cond, 'group' => 'Statement.id', )); // The fields are all tucked into the [0] index, // and the rest of the array is useless (empty). return $stats[0]; } } ?>