function create_portfolio($form) { # extract and clean all the data global $pdo; $pf_desc = $pdo->quote($form['pf_desc']); $uid = $_SESSION['uid']; $exchange = new exchange($form['exchange']); $exch = $exchange->getID(); $parcel = $pdo->quote($form['parcel']); $start_date = sprintf("%04d-%02d-%02d", $form['start_date']['Y'], $form['start_date']['M'], $form['start_date']['d']); $opening_balance = $pdo->quote($form['opening']); if (isset($form['hide'])) { $hide = 't'; } else { $hide = 'f'; } if (isset($form['auto'])) { $auto = 't'; } else { $auto = 'f'; } $stop_loss = $form['stop_loss']; $tax_rate = $form['tax_rate']; $commission = $form['commission']; $start_date = $exchange->nearestTradeDay($start_date); try { $query = "select nextval('portfolios_pfid_seq') as pfid;"; $result = $pdo->query($query); $row = $result->fetch(PDO::FETCH_ASSOC); $next_pfid = $row['pfid']; } catch (PDOException $e) { tr_warn('sell_stock:' . $query . ':' . $e->getMessage()); return false; } // need to create the portfolio and add the first entry into summary as a transaction so that if one fails both do try { $pdo->beginTransaction(); $query = "insert into portfolios (pfid, name, uid, exch, opening_balance, parcel, working_date, hide_names, stop_loss, auto_stop_loss, tax_rate, commission) values ({$next_pfid}, {$pf_desc}, '{$uid}', '{$exch}', {$opening_balance}, {$parcel}, '{$start_date}', '{$hide}', '{$stop_loss}', '{$auto}', '{$tax_rate}', '{$commission}');"; $pdo->exec($query); $query = "insert into pf_summary (pfid, date, cash_in_hand, holdings) values ({$next_pfid}, '{$start_date}', {$opening_balance}, 0);"; $pdo->exec($query); $pdo->commit(); } catch (PDOException $e) { $pdo->rollBack(); tr_warn('create_portfolio:' . $query . ':' . $e->getMessage()); } }