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()); } }
/** * 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'); } }
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; }