public static function roi_with_timeline($isin, $username, $month_from, $month_to) { $conn = Db::get_connection(); $stock = new Stock(); if (!$stock->find_by_id($isin)) { return; } $portfolio_stock_factory = new PortfolioStock(); $portfolio_stocks = $portfolio_stock_factory->find_all(array('where_clause' => "`isin` = '{$conn->escape($isin)}' " . "AND `utente` = '{$conn->escape($username)}'")); if (count($portfolio_stocks) == 0) { return; } $portfolio_stock = $portfolio_stocks[0]; $quantita = self::quantita_history($isin, $username, $month_from); switch ($stock->tipo) { case 'obbligazione': $investito = $portfolio_stock->prezzo * $portfolio_stock->quantita / 100; break; default: $investito = $portfolio_stock->prezzo * $portfolio_stock->quantita; } $investito = Change::convert($investito, $stock->divisa); $roi = PianificatoreHelper::roi_with_timeline($isin, $quantita, $month_from, $month_to, $investito); foreach ($roi->payments as $payment) { $payment->portfolio_stock = $portfolio_stock; } // print_r($roi); return $roi; }
public function by_day() { $conn = $this->get_connection(); $cedola_factory = new Cedola(); $month_start = date('Y-m-d', mktime(0, 0, 0, $_REQUEST['id'], 1, date('Y'))); $next_month = date('Y-m-d', mktime(0, 0, 0, $_REQUEST['id'] + 1, 1, date('Y'))); $cedole = $cedola_factory->find_all(array('where_clause' => "`stacco` >= '{$month_start}' AND `stacco` < '{$next_month}'", 'order_by' => '`tasso` DESC, `stacco` ASC')); $portfolio_stock_factory = new PortfolioStock(); $portfolio_stocks = $portfolio_stock_factory->find_all(array(`where_clause` => "`utente` = '{$conn->escape($_COOKIE['username'])}'")); $in_portfolio = []; foreach ($portfolio_stocks as $portfolio_stock) { $in_portfolio[] = $portfolio_stock->isin; } // print_r($cedole); $this->cedole = []; foreach ($cedole as $cedola) { $cedola->stock = new Stock(); $cedola->stock->find_by_id($cedola->isin); $cedola->in_portfolio = in_array($cedola->isin, $in_portfolio); $this->cedole[] = $cedola; } // print_r($this->cedole); $this->cedole_by_day = array(); foreach ($this->cedole as $cedola) { $s = strtotime($cedola->stacco); $d = date('d', $s); if (!isset($this->cedole_by_month[$d])) { $this->cedole_by_month[$d] = array(); } $this->cedole_by_day[$d][] = $cedola; } ksort($this->cedole_by_day); // print_r($this->cedole_by_day); }
function index() { $conn = $this->get_connection(); if (empty($_REQUEST['month-from'])) { $_REQUEST['month-from'] = date('Y-m-00'); } if (empty($_REQUEST['month-to'])) { $_REQUEST['month-to'] = date('Y-m-d', mktime(0, 0, 0, date('m') + self::DEFAULT_PLANNER_HORIZON_MONTHS, 0, date('Y'))); } $portfolio_stock_factory = new PortfolioStock(); $stock_factory = new Stock(); $portfolio_stocks = $portfolio_stock_factory->find_by_query('SELECT `creso_portfolio`.`id`, `creso_portfolio`.`quantita`, `creso_portfolio`.`isin`, `creso_titoli`.`tipo`, `creso_titoli`.`title` ' . 'FROM `creso_portfolio` ' . 'LEFT JOIN `creso_titoli` ON `creso_portfolio`.`isin` = `creso_titoli`.`isin` ' . "WHERE `utente` = '{$conn->escape($_COOKIE['username'])}' " . 'ORDER BY ' . sprintf('`%s` %s ', $this->get_sort('isin'), $this->get_dir()) . "LIMIT {$conn->escape($this->get_start())}, {$conn->escape($this->get_limit())}"); $this->rimborsi = array(); if (count($portfolio_stocks) > 0) { $bond_factory = new Bond(); foreach ($portfolio_stocks as $item) { $item->stock = new Stock(); $item->stock->find_by_id($item->isin); switch ($item->stock->tipo) { case 'azione': continue; case 'obbligazione': $bonds = $bond_factory->find_all(array('where_clause' => "`isin` = '{$item->isin}' " . "AND `scadenza` >= '{$conn->escape($_REQUEST['month-from'])}' " . "AND `scadenza` <= '{$conn->escape($_REQUEST['month-to'])}' ")); if (count($bonds) > 0) { $item->bond = $bonds[0]; $this->rimborsi[] = clone $item; } break; } } uasort($this->rimborsi, $this->get_sorter_order_by_timestamp_asc()); } }
function check_in_portfolio() { $isin = isset($_REQUEST['isin']) ? $_REQUEST['isin'] : $_REQUEST['id']; if ($isin) { $conn = $this->get_connection(); $portfolio_stock = new PortfolioStock(); $this->is_in_portfolio = count($portfolio_stock->find_all(array('where_clause' => "`utente` = '{$conn->escape($_COOKIE['username'])}' " . "AND `isin` = '{$conn->escape($isin)}'"))) > 0; } }
/** * Action methods */ public function index() { $conn = $this->get_connection(); if (empty($_REQUEST['month-from'])) { $_REQUEST['month-from'] = date('Y-m-00'); } if (empty($_REQUEST['month-to'])) { // Default horizon is 6 months $_REQUEST['month-to'] = date('Y-m-d', mktime(0, 0, 0, date('m') + 6, 0, date('Y'))); } $portfolio_stock_factory = new PortfolioStock(); $stock_factory = new Stock(); $portfolio_stocks = $portfolio_stock_factory->find_by_query('SELECT `creso_portfolio`.`id`, `creso_portfolio`.`quantita`, `creso_portfolio`.`isin`, `creso_titoli`.`tipo`, `creso_titoli`.`title` ' . 'FROM `creso_portfolio` ' . 'LEFT JOIN `creso_titoli` ON `creso_portfolio`.`isin` = `creso_titoli`.`isin` ' . "WHERE `utente` = '{$conn->escape($_COOKIE['username'])}' " . (!empty($_REQUEST['mercato']) ? "AND `mercato` = '{$conn->escape($_REQUEST['mercato'])}' " : '') . (!empty($_REQUEST['tipo']) ? "AND `tipo` = '{$conn->escape($_REQUEST['tipo'])}' " : '') . (!empty($_REQUEST['divisa']) ? "AND `divisa` = '{$conn->escape($_REQUEST['divisa'])}' " : '') . 'ORDER BY ' . sprintf('`%s` %s ', $this->get_sort('isin'), $this->get_dir()) . "LIMIT {$conn->escape($this->get_start())}, {$conn->escape($this->get_limit())}"); $this->rimborsi = array(); if (count($portfolio_stocks) > 0) { $bond_factory = new Bond(); foreach ($portfolio_stocks as $item) { $item->stock = new Stock(); $item->stock->find_by_id($item->isin); switch ($item->stock->tipo) { case 'azione': break; case 'obbligazione': $bonds = $bond_factory->find_all(array('where_clause' => "`isin` = '{$item->isin}' " . "AND `scadenza` >= '{$conn->escape($_REQUEST['month-from'])}' " . "AND `scadenza` <= '{$conn->escape($_REQUEST['month-to'])}' ")); if (count($bonds) > 0) { $item->bond = $bonds[0]; $this->rimborsi[] = clone $item; } break; } } if (!function_exists('cmp_stock')) { function cmp_stock($a, $b) { return $a->bond->scadenza - $b->bond->scadenza; } } uasort($this->rimborsi, 'cmp_stock'); } }
<th></th> <th>Evento</th> <th>Data</th> <th>Importo lordo</th> <th>Importo unitario</th> </tr> <tr class="row0"> <td class="cell10"><div class="vstrut17"></div></td> <td class="cell10">Dividendo</td> <td class="cell10"><b><?php print $dividend->pretty_date(); ?> </b></td> <td class="cell10"><?php $portfolio = new PortfolioStock(); $ports = $portfolio->find_all(array('where_clause' => "`isin` = '{$this->stock->isin}'")); if (count($ports) > 0) { $port = $ports[0]; $revenue = $port->quantita * $dividend->importo; printf('%.2f %s', $revenue, $this->stock->divisa); if ($this->stock->divisa != 'EUR') { $revenue /= $this->stock->divisa == 'USD' ? Change::usd2eur() : 1; printf(' (%.2f EUR)', $revenue); } } ?> <?php printf('(%.2f%%)', $dividend->importo / $this->stock->last->quotazione * 100); ?>
private function get_rimborsi() { $payments = array(); $conn = $this->get_connection(); $portfolio_stock_factory = new PortfolioStock(); $portfolio_stocks = $portfolio_stock_factory->find_by_query('SELECT `creso_portfolio`.`id`, `creso_portfolio`.`quantita`, `creso_portfolio`.`isin`, `creso_titoli`.`tipo`, `creso_titoli`.`title` ' . 'FROM `creso_portfolio` ' . 'LEFT JOIN `creso_titoli` ON `creso_portfolio`.`isin` = `creso_titoli`.`isin` ' . "WHERE `utente` = '{$conn->escape($_COOKIE['username'])}' " . (!empty($_REQUEST['mercato']) ? "AND `mercato` = '{$conn->escape($_REQUEST['mercato'])}' " : '') . (!empty($_REQUEST['tipo']) ? "AND `tipo` = '{$conn->escape($_REQUEST['tipo'])}' " : '') . (!empty($_REQUEST['divisa']) ? "AND `divisa` = '{$conn->escape($_REQUEST['divisa'])}' " : '') . (!empty($_REQUEST['isin']) ? "AND `creso_portfolio`.`isin` = '{$conn->escape($_REQUEST['isin'])}' " : '') . 'ORDER BY ' . sprintf('`%s` %s ', $this->get_sort('isin'), $this->get_dir()) . "LIMIT {$conn->escape($this->get_start())}, {$conn->escape($this->get_limit())}"); if (count($portfolio_stocks) == 0 && !empty($_REQUEST['isin'])) { $portfolio_stocks = $this->synthesize_portfolio_stocks(); } if (count($portfolio_stocks) > 0) { foreach ($portfolio_stocks as $portfolio_stock) { $stock = new Stock(); $stock->find_by_id($portfolio_stock->isin); if ($this->historiful) { $quantita_history = $this->backfill_with_historical_data($portfolio_stock); } switch ($stock->tipo) { case 'azione': break; case 'obbligazione': $bond_factory = new Bond(); $bonds = $bond_factory->find_all(array('where_clause' => "`isin` = '{$portfolio_stock->isin}' " . "AND `scadenza` >= '{$conn->escape($_REQUEST['month-from'])}' " . "AND `scadenza` <= '{$conn->escape($_REQUEST['month-to'])}' ")); if (count($bonds) > 0) { $bond = $bonds[0]; $payment = new Payment(); $q = $portfolio_stock->quantita; foreach ($quantita_history as $date => $quantita) { if ($date < $bond->scadenza) { break; } $q = $quantita; } $payment->stock = $stock; $payment->portfolio_stock = $portfolio_stock; $payment->bond = $bond; $payment->timestamp = strtotime($bond->scadenza); $payment->importo = $payment->bond->prezzo_rimborso * $q / 100; $payment->quantita = $q; $payment->tipo = 'rimborso'; $payments[] = $payment; } break; } } } return $payments; }
private function get_portfolio_stocks() { $conn = $this->get_connection(); $stock_factory = new PortfolioStock(); $portfolio_stocks = $stock_factory->find_by_query('SELECT `creso_portfolio`.`id`, `creso_portfolio`.`quantita`, `creso_portfolio`.`prezzo`, `creso_portfolio`.`isin`, `creso_titoli`.`title` ' . 'FROM `creso_portfolio` ' . 'LEFT JOIN `creso_titoli` ON `creso_portfolio`.`isin` = `creso_titoli`.`isin` ' . "WHERE `utente` = '{$conn->escape($_COOKIE['username'])}' " . (!empty($_REQUEST['mercato']) ? "AND `mercato` = '{$conn->escape($_REQUEST['mercato'])}' " : '') . (!empty($_REQUEST['tipo']) ? "AND `tipo` = '{$conn->escape($_REQUEST['tipo'])}' " : '') . (!empty($_REQUEST['divisa']) ? "AND `divisa` = '{$conn->escape($_REQUEST['divisa'])}' " : '') . 'ORDER BY ' . sprintf('`%s` %s ', $this->get_sort('isin'), $this->get_dir()) . "LIMIT {$conn->escape($this->get_start())}, {$conn->escape($this->get_limit())}"); return $portfolio_stocks; }