示例#1
0
 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());
     }
 }
示例#4
0
 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;
     }
 }
示例#5
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');
     }
 }
示例#6
0
		<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);
    ?>
示例#7
0
 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;
 }
示例#8
0
 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;
 }