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 importo_eur() { if (!isset($this->importo_eur)) { $this->importo_eur = Change::convert($this->importo, $this->stock->divisa, date('Y-m-d', $this->timestamp)); } return $this->importo_eur; }
/** * Action methods */ public function index() { switch ($_REQUEST['evento']) { case 'cedola': $events = $this->get_cedole(); break; case 'dividendo': $events = $this->get_dividendi(); break; case 'rimborso': $events = $this->get_rimborsi(); break; default: if (isset($_REQUEST['isin']) && isset($_REQUEST['use_helper'])) { $this->roi = PortfolioHelper::roi_with_timeline($_REQUEST['isin'], $_COOKIE['username'], $_REQUEST['month-from'], $_REQUEST['month-to']); $events = $this->roi->payments; $this->investito = $this->roi->investito; $this->totale = $this->roi->totale; $this->plusminus = $this->roi->plusminus; } else { $events = array_merge($this->get_cedole(), $this->get_rimborsi(), $this->get_dividendi()); $this->investito = 0; $this->plusminus = 0; foreach ($events as $event) { $investito = $event->portfolio_stock->prezzo * $event->quantita / 100; $investito = Change::convert($investito, $event->stock->divisa); if ($event->tipo == 'rimborso') { $this->investito += $investito; } $plusminus = $event->importo_eur() - $investito; $this->plusminus += $plusminus; } } } $this->payments($events); $this->render(array('action' => 'payments')); }
?> </td> <td class="cell10r"> <?php printf("%.2f %s", $rimborso->importo, $rimborso->stock->divisa); ?> </td> <td class="cell10r"> <?php printf("%.2f EUR", $rimborso->importo_eur()); ?> </td> <td class="cell10r"> <?php $investito = $rimborso->portfolio_stock->prezzo * $rimborso->portfolio_stock->quantita / 100; $investito = Change::convert($investito, $rimborso->stock->divisa); $this->investito += $investito; printf("%.2f EUR", $investito); ?> </td> <td class="cell10r-lh"> <?php $plusminus = $rimborso->importo_eur() - $investito; $this->plusminus += $plusminus; print apple('%.2f EUR', $plusminus); ?> </td> <td class="cell10-rh"> (<?php $plusminus_pct = $plusminus / $investito * 100; print apple('%.2f%%', $plusminus_pct);
?> "> <td class="cell10"> <div class="vstrut17"></div> </td> <td class="cell10"> <?php echo $rimborso->bond->scadenza(); ?> ti verranno rimborsati <?php if ($rimborso->quantita > 0) { $importo = $rimborso->bond->prezzo_rimborso * $rimborso->quantita / 100; $importo_eur = Change::convert($importo, $rimborso->stock->divisa); printf('%.2f %s (%.2f EUR)', $importo, $rimborso->stock->divisa, $importo_eur); } ?> per la scadenza di <?php echo $rimborso->quantita; ?> <?php print $this->link_to($rimborso->stock->title, array('controller' => 'titoli', 'action' => 'browse', 'id' => $rimborso->stock->isin)); ?> . </td>
} $investito = Change::convert($investito, $stock->stock->divisa); $this->investito += $investito; printf('%.2f', $investito); ?> </td> <td class="cell10" align="right"><?php switch ($stock->stock->tipo) { case 'obbligazione': $attuale = $stock->quote->quotazione * $stock->quantita / 100; break; default: $attuale = $stock->quote->quotazione * $stock->quantita; break; } $attuale = Change::convert($attuale, $stock->stock->divisa); $this->attuale += $attuale; printf('%.2f', $attuale); ?> </td> <td class="cell10r-lh"> <?php $plusminus = $attuale - $investito; print apple('%.2f', $plusminus); ?> </td> <td class="cell10-rh"> (<?php $plusminus_pct = $plusminus / $investito * 100; print apple('%.2f%%', $plusminus_pct); ?>
<td align="right" width="100%"><?php echo $transaction->negot_id; ?> </td> <td> </td> <td align="right"><a href="<?php echo $this->url_to(array('action' => 'negot', 'id' => $transaction->negot_id)); ?> "><img src="/img/circled_arrow.png" alt="Negoziazione" /></a></td> </tr> </table> <?php } ?> </td> <td class="cell10" align="right"><?php $importo = Change::convert($transaction->quantita * $transaction->prezzo, $transaction->stock->divisa); $importo *= $transaction->azione == 'acquisto' ? -1 : 1; $importo /= $transaction->stock->tipo == 'obbligazione' ? 100 : 1; $comm = abs($importo) * $this->preference->comm_percent; if (strtotime($transaction->data) >= strtotime("2007-08-01")) { $comm = $comm > $this->preference->comm_percent_min ? $comm : $this->preference->comm_percent_min; } $importo -= $comm; $importo -= $this->preference->comm_fissa; $this->bilancio += $importo; print span(sprintf('%.2f', $importo), array('style' => 'color: ' . ($transaction->azione == 'acquisto' ? 'red' : 'green'))); ?> </td> </tr>
<?php printf("%.2f %s", $payment->importo, $payment->stock->divisa); ?> </td> <td class="cell10r"> <?php printf("%.2f EUR", $payment->importo_eur()); ?> </td> <td class="cell10r"> <?php if (isset($_REQUEST['use_helper'])) { $investito = $this->roi->investito; } else { $investito = $payment->portfolio_stock->prezzo * $payment->quantita / 100; $investito = Change::convert($investito, $payment->stock->divisa); // if ($payment->tipo == 'rimborso') // { // $this->investito += $investito; // } } if ($payment->tipo == 'rimborso') { printf("%.2f EUR", $investito); } ?> </td> <td class="cell10r-lh"> <?php if ($payment->tipo == 'rimborso') { $plusminus = $payment->importo_eur() - $investito; // if (!isset($_REQUEST['use_helper']))
</b></td> <td class="cell10">—</td> <td class="cell10">—%</td> </tr> <tr class="row0"> <td class="cell10"><div class="vstrut17"></div></td> <td class="cell10">Prossima cedola</td> <td class="cell10"><b><?php print $bond->next_coupon_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 = $bond->revenue($port->quantita); printf('%.2f %s', $revenue, $this->stock->divisa); if ($this->stock->divisa != 'EUR') { printf(' (%.2f EUR)', Change::convert($revenue, $this->stock->divisa)); } } ?> </td> <td class="cell10"><b><?php print $bond->rate(); ?> </b></td> </tr>
private function get_roi() { if (!isset($_REQUEST['base'])) { $_REQUEST['base'] = 1000; } if (!isset($_REQUEST['month-to'])) { $_REQUEST['month-to'] = date('Y-m-d', mktime(0, 0, 0, date('m') + self::DEFAULT_ROI_HORIZON_MONTHS, 0, date('Y'))); } $this->roi = array(); // $this->stocks = array(); // This to ensure we get latest quote from today $today = date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 1, date('Y'))); $last_month = date('Y-m-d', mktime(0, 0, 0, date('m') - 1, date('d'), date('Y'))); // print_r($_REQUEST['isin']); foreach ($this->isins as $isin) { $quote = QuoteHelper::latest_for_range($isin, $last_month, $today); // print_r($quote); $stock = new Stock(); if (!$stock->find_by_id($isin)) { continue; } // $this->stocks[$isin] = $stock; $investito = Change::convert($quote->quotazione * $_REQUEST['base'] / 100, $stock->divisa); $this->roi[$isin] = PianificatoreHelper::roi_with_timeline($isin, $_REQUEST['base'], $today, $_REQUEST['month-to'], $investito); unset($this->roi[$isin]->payments); $this->roi[$isin]->stock = $stock; } // print_r($this->roi); uasort($this->roi, $this->get_sorter()); }