function show_all_exp($template) { global $TPL; global $expenseForm; global $db; global $transaction_to_edit; if ($expenseForm->get_id()) { if ($_POST["transactionID"] && ($_POST["edit"] || is_object($transaction_to_edit) && $transaction_to_edit->get_id())) { // if edit is clicked OR if we've rejected changes made to something so are still editing it $query = prepare("SELECT * FROM transaction WHERE expenseFormID=%d AND transactionID<>%d ORDER BY transactionID DESC", $expenseForm->get_id(), $_POST["transactionID"]); } else { $query = prepare("SELECT * FROM transaction WHERE expenseFormID=%d ORDER BY transactionID DESC", $expenseForm->get_id()); } $db->query($query); while ($db->next_record()) { $transaction = new transaction(); $transaction->read_db_record($db); $transaction->set_values(); $transaction->get_value("quantity") and $TPL["amount"] = $transaction->get_value("amount") / $transaction->get_value("quantity"); $TPL["lineTotal"] = $TPL["amount"] * $transaction->get_value("quantity"); $tf = new tf(); $tf->set_id($transaction->get_value("fromTfID")); $tf->select(); $TPL["fromTfIDLink"] = $tf->get_link(); $tf = new tf(); $tf->set_id($transaction->get_value("tfID")); $tf->select(); $TPL["tfIDLink"] = $tf->get_link(); $projectID = $transaction->get_value("projectID"); if ($projectID) { $project = new project(); $project->set_id($transaction->get_value("projectID")); $project->select(); $TPL["projectName"] = $project->get_value("projectName"); } if ($transaction->get_value("fromTfID") == config::get_config_item("expenseFormTfID")) { $TPL['expense_class'] = "loud"; } else { $TPL['expense_class'] = ""; } include_template($template); } } }
function is_owner($person = "") { $current_user =& singleton("current_user"); if ($person == "") { $person = $current_user; } $db = new db_alloc(); $q = prepare("SELECT * FROM transaction WHERE invoiceItemID = %d OR transactionID = %d", $this->get_id(), $this->get_value("transactionID")); $db->query($q); while ($db->next_record()) { $transaction = new transaction(); $transaction->read_db_record($db); if ($transaction->is_owner($person)) { return true; } } if ($this->get_value("timeSheetID")) { $q = prepare("SELECT * FROM timeSheet WHERE timeSheetID = %d", $this->get_value("timeSheetID")); $db->query($q); while ($db->next_record()) { $timeSheet = new timeSheet(); $timeSheet->read_db_record($db); if ($timeSheet->is_owner($person)) { return true; } } } if ($this->get_value("expenseFormID")) { $q = prepare("SELECT * FROM expenseForm WHERE expenseFormID = %d", $this->get_value("expenseFormID")); $db->query($q); while ($db->next_record()) { $expenseForm = new expenseForm(); $expenseForm->read_db_record($db); if ($expenseForm->is_owner($person)) { return true; } } } return false; }
function show_transaction($template) { global $db; global $TPL; global $projectID; $current_user =& singleton("current_user"); $transaction = new transaction(); if (isset($projectID) && $projectID) { $query = prepare("SELECT transaction.*\n FROM transaction\n WHERE transaction.projectID = %d\n ORDER BY transactionModifiedTime desc\n ", $projectID); $db->query($query); while ($db->next_record()) { $transaction = new transaction(); $transaction->read_db_record($db); $transaction->set_values("transaction_"); $tf = $transaction->get_foreign_object("tf"); $tf->set_values(); $tf->set_values("tf_"); $TPL["transaction_username"] = $db->f("username"); $TPL["transaction_amount"] = page::money($TPL["transaction_currenyTypeID"], $TPL["transaction_amount"], "%s%mo"); $TPL["transaction_type_link"] = $transaction->get_transaction_type_link() or $TPL["transaction_link"] = $transaction->get_value("transactionType"); include_template($template); } } }
function show_transaction_listR($template_name) { global $timeSheet; global $TPL; $current_user =& singleton("current_user"); global $percent_array; $db = new db_alloc(); $db->query("SELECT * FROM transaction WHERE timeSheetID = %d", $timeSheet->get_id()); if ($db->next_record() || $timeSheet->get_value("status") == "invoiced" || $timeSheet->get_value("status") == "finished") { $db->query("SELECT * \n FROM tf \n WHERE tfActive = 1\n OR tfID = %d \n OR tfID = %d \n ORDER BY tfName", $db->f("tfID"), $db->f("fromTfID")); while ($db->row()) { $tf_array[$db->f("tfID")] = $db->f("tfName"); } $status_options = array("pending" => "Pending", "approved" => "Approved", "rejected" => "Rejected"); $transactionType_options = transaction::get_transactionTypes(); if ($timeSheet->have_perm(PERM_TIME_INVOICE_TIMESHEETS) && $timeSheet->get_value("status") == "invoiced") { $db->query("SELECT * FROM transaction WHERE timeSheetID = %d ORDER BY transactionID", $timeSheet->get_id()); while ($db->next_record()) { $transaction = new transaction(); $transaction->read_db_record($db); $transaction->set_tpl_values("transaction_"); $TPL["currency"] = page::money($transaction->get_value("currencyTypeID"), '', "%S"); $TPL["currency_code"] = page::money($transaction->get_value("currencyTypeID"), '', "%C"); $TPL["tf_options"] = page::select_options($tf_array, $TPL["transaction_tfID"]); $TPL["from_tf_options"] = page::select_options($tf_array, $TPL["transaction_fromTfID"]); $TPL["status_options"] = page::select_options($status_options, $transaction->get_value("status")); $TPL["transactionType_options"] = page::select_options($transactionType_options, $transaction->get_value("transactionType")); $TPL["percent_dropdown"] = page::select_options($percent_array, $empty); $TPL["transaction_buttons"] = ' <button type="submit" name="transaction_delete" value="1" class="delete_button">Delete<i class="icon-trash"></i></button> <button type="submit" name="transaction_save" value="1" class="save_button">Save<i class="icon-ok-sign"></i></button> '; if ($transaction->get_value("transactionType") == "invoice") { $TPL["transaction_transactionType"] = $transaction->get_transaction_type_link(); $TPL["transaction_fromTfID"] = tf::get_name($transaction->get_value("fromTfID")); $TPL["transaction_tfID"] = tf::get_name($transaction->get_value("tfID")); $TPL["currency_amount"] = page::money($transaction->get_value("currencyTypeID"), $transaction->get_value("amount"), "%S%mo %c"); include_template("templates/timeSheetTransactionListViewR.tpl"); } else { include_template($template_name); } } } else { // If you don't have perm INVOICE TIMESHEETS then only select // transactions which you have permissions to see. $query = prepare("SELECT * \n FROM transaction \n WHERE timeSheetID = %d\n ORDER BY transactionID", $timeSheet->get_id()); $db->query($query); while ($db->next_record()) { $transaction = new transaction(); $transaction->read_db_record($db); $transaction->set_tpl_values("transaction_"); unset($TPL["transaction_amount_pos"]); unset($TPL["transaction_amount_neg"]); $TPL["currency_amount"] = page::money($transaction->get_value("currencyTypeID"), $transaction->get_value("amount"), "%S%mo %c"); $TPL["transaction_fromTfID"] = tf::get_name($transaction->get_value("fromTfID")); $TPL["transaction_tfID"] = tf::get_name($transaction->get_value("tfID")); $TPL["transaction_transactionType"] = $transactionType_options[$transaction->get_value("transactionType")]; include_template("templates/timeSheetTransactionListViewR.tpl"); } } } }
function show_invoiceItem_list() { global $invoiceID; global $TPL; global $invoice; $current_user =& singleton("current_user"); $template = "templates/invoiceItemListR.tpl"; $db = new db_alloc(); $db2 = new db_alloc(); $q = prepare("SELECT *\n FROM invoiceItem \n WHERE invoiceItem.invoiceID = %d \n ORDER BY iiDate,invoiceItem.invoiceItemID", $invoiceID); $db->query($q); while ($db->next_record()) { $invoiceItem = new invoiceItem(); $invoiceItem->currency = $invoice->get_value("currencyTypeID"); if (!$invoiceItem->read_db_record($db)) { continue; } $invoiceItem->set_tpl_values("invoiceItem_"); unset($transaction_sum); unset($transaction_info); unset($transaction_statii); unset($one_approved); unset($one_rejected); unset($one_pending); unset($br); unset($sel); unset($amount); unset($TPL["invoiceItem_buttons_top"], $TPL["invoiceItem_buttons"], $TPL["transaction_info"], $TPL["status_label"]); // If editing a invoiceItem then don't display it in the list if (is_array($_POST["invoiceItem_edit"]) && key($_POST["invoiceItem_edit"]) == $invoiceItem->get_id()) { continue; } $q = prepare("SELECT *\n , transaction.amount * pow(10,-currencyType.numberToBasic) AS transaction_amount\n , transaction.tfID AS transaction_tfID\n , transaction.fromTfID AS transaction_fromTfID\n , transaction.status AS transaction_status \n , transaction.currencyTypeID\n FROM transaction \n LEFT JOIN currencyType on transaction.currencyTypeID = currencyType.currencyTypeID\n WHERE transaction.invoiceItemID = %d", $invoiceItem->get_id()); $db2->query($q); while ($db2->next_record()) { $transaction = new transaction(); if (!$transaction->read_db_record($db2)) { $other_peoples_transactions .= "<br>Tansaction access denied for transaction #" . $db2->f("transactionID"); continue; } if ($db2->f("transaction_status") == "approved") { $one_approved = true; } if ($db2->f("transaction_status") == "rejected") { $one_rejected = true; } if ($db2->f("transaction_status") == "pending") { $one_pending = true; } $amounts[$invoiceItem->get_id()] += $db2->f("transaction_amount"); $db2->f("transaction_status") != "rejected" and $transaction_sum += $db2->f("transaction_amount"); $transaction_info .= $br . ucwords($db2->f("transaction_status")) . " Transaction "; $transaction_info .= "<a href=\"" . $TPL["url_alloc_transaction"] . "transactionID=" . $db2->f("transactionID") . "\">#" . $db2->f("transactionID") . "</a>"; $transaction_info .= " from "; $transaction_info .= "<a href=\"" . $TPL["url_alloc_transactionList"] . "tfID=" . $db2->f("transaction_fromTfID") . "\">" . tf::get_name($db2->f("transaction_fromTfID")) . "</a>"; $transaction_info .= " to <a href=\"" . $TPL["url_alloc_transactionList"] . "tfID=" . $db2->f("transaction_tfID") . "\">" . tf::get_name($db2->f("transaction_tfID")) . "</a>"; $transaction_info .= " for <b>" . page::money($db2->f("currencyTypeID"), $db2->f("transaction_amount"), "%s%m") . "</b>"; $br = "<br>"; } $TPL["transaction_info"] = $transaction_info; $TPL["transaction_info"] .= $other_peoples_transactions; // Sets the background colour of the invoice item boxes based on transaction.status if (!$one_rejected && !$one_pending && $one_approved) { $TPL["box_class"] = " approved"; $transaction_status = "approved"; } else { if ($one_rejected) { $TPL["box_class"] = " rejected"; $transaction_status = "rejected"; } else { if ($one_pending) { $transaction_status = "pending"; $TPL["box_class"] = " warn"; } else { $TPL["box_class"] = " pending"; $transaction_status = ""; } } } $sel[$transaction_status] = " checked"; if ($sel["rejected"]) { $TPL["status_label"] = "<b>[Not Going To Be Paid]</b>"; } else { if ($sel["pending"]) { $TPL["status_label"] = "<b>[Pending]</b>"; } else { if ($sel["approved"]) { $TPL["status_label"] = "<b>[Paid]</b>"; } } } if ($transaction_sum > 0 && $transaction_sum < $invoiceItem->get_value("iiAmount", DST_HTML_DISPLAY)) { $TPL["status_label"] = "<b>[Paid in part]</b>"; $TPL["box_class"] = " warn"; } else { if ($transaction_sum > $invoiceItem->get_value("iiAmount")) { $TPL["status_label"] = "<b>[Overpaid]</b>"; } } $TPL["status_label"] or $TPL["status_label"] = "<b>[No Transactions Created]</b>"; if ($invoice->get_value("invoiceStatus") == "reconcile") { if ($amounts[$invoiceItem->get_id()] === null) { $amount = $invoiceItem->get_value("iiAmount", DST_HTML_DISPLAY); if (config::get_config_item("taxPercent") && $invoiceItem->get_value("iiTax") == 0) { $amount = page::money($invoice->get_value("currencyTypeID"), $amount * (config::get_config_item("taxPercent") / 100 + 1), "%m"); } } else { $amount = page::money($invoice->get_value("currencyTypeID"), $amounts[$invoiceItem->get_id()], "%m"); } $selected_tfID = $db2->f("transaction_tfID"); if (!$selected_tfID && $invoiceItem->get_value("timeSheetID")) { $timeSheet = $invoiceItem->get_foreign_object("timeSheet"); $project = $timeSheet->get_foreign_object("project"); $selected_tfID = $project->get_value("cost_centre_tfID"); } else { if (!$selected_tfID && $invoiceItem->get_value("transactionID")) { $transaction = $invoiceItem->get_foreign_object("transaction"); $project = $transaction->get_foreign_object("project"); $selected_tfID = $project->get_value("cost_centre_tfID"); $selected_tfID or $selected_tfID = $transaction->get_value("tfID"); } } $selected_tfID or $selected_tfID = config::get_config_item("mainTfID"); #$tf_options = page::select_options($tf_array, $selected_tfID); #$tf_options = "<select name=\"invoiceItemAmountPaidTfID[".$invoiceItem->get_id()."]\">".$tf_options."</select>"; #$TPL["invoiceItem_buttons"] = "<input size=\"8\" type=\"text\" id=\"ap_".$invoiceItem->get_id()."\" name=\"invoiceItemAmountPaid[".$invoiceItem->get_id()."]\" value=\"".$amount."\">"; #$TPL["invoiceItem_buttons"].= $tf_options; unset($radio_buttons); if ($current_user->have_role('admin')) { $radio_buttons = "<label class='radio corner' for=\"invoiceItemStatus_rejected_" . $invoiceItem->get_id() . "\">Not Going To Be Paid"; $radio_buttons .= "<input type=\"radio\" id=\"invoiceItemStatus_rejected_" . $invoiceItem->get_id() . "\" name=\"invoiceItemStatus[" . $invoiceItem->get_id() . "]\""; $radio_buttons .= " value=\"rejected\"" . $sel["rejected"] . ">"; $radio_buttons .= "</label>"; $radio_buttons .= " "; $radio_buttons .= "<label class='radio corner' for=\"invoiceItemStatus_pending_" . $invoiceItem->get_id() . "\">Pending"; $radio_buttons .= "<input type=\"radio\" id=\"invoiceItemStatus_pending_" . $invoiceItem->get_id() . "\" name=\"invoiceItemStatus[" . $invoiceItem->get_id() . "]\""; $radio_buttons .= " value=\"pending\"" . $sel["pending"] . ">"; $radio_buttons .= "</label>"; $radio_buttons .= " "; $radio_buttons .= "<label class='radio corner' for=\"invoiceItemStatus_approved_" . $invoiceItem->get_id() . "\">Paid"; $radio_buttons .= "<input type=\"radio\" id=\"invoiceItemStatus_approved_" . $invoiceItem->get_id() . "\" name=\"invoiceItemStatus[" . $invoiceItem->get_id() . "]\""; $radio_buttons .= " value=\"approved\"" . $sel["approved"] . ">"; $radio_buttons .= "</label>"; $TPL["invoiceItem_buttons_top"] = $radio_buttons; $TPL["invoiceItem_buttons_top"] .= " <input type=\"text\" size=\"7\" name=\"invoiceItemAmountPaid[" . $invoiceItem->get_id() . "]\" value=\"" . $amount . "\">"; $TPL["invoiceItem_buttons_top"] .= "<input type=\"hidden\" name=\"invoiceItemAmountPaidTfID[" . $invoiceItem->get_id() . "]\" value=\"" . $selected_tfID . "\">"; } unset($TPL["invoiceItem_buttons"]); } else { if ($invoice->get_value("invoiceStatus") == "finished") { } else { if (is_object($invoice) && $invoice->get_value("invoiceStatus") == "edit") { $TPL["invoiceItem_buttons"] = ' <button type="submit" name="invoiceItem_delete[' . $invoiceItem->get_id() . ']" value="1" class="delete_button">Delete<i class="icon-trash"></i></button> <button type="submit" name="invoiceItem_edit[' . $invoiceItem->get_id() . ']" value="1">Edit<i class="icon-edit"></i></button> '; } } } if ($invoiceItem->get_value("timeSheetID")) { $t = new timeSheet(); $t->set_id($invoiceItem->get_value("timeSheetID")); $t->select(); $t->load_pay_info(); $amount = $t->pay_info["total_customerBilledDollars"] or $amount = $t->pay_info["total_dollars"]; $TPL["invoiceItem_iiMemo"] = "<a href=\"" . $TPL["url_alloc_timeSheet"] . "timeSheetID=" . $invoiceItem->get_value("timeSheetID") . "\">" . $invoiceItem->get_value("iiMemo") . " (Currently: \$" . $amount . ", Status: " . $t->get_timeSheet_status() . ")</a>"; } else { if ($invoiceItem->get_value("expenseFormID")) { $ep = $invoiceItem->get_foreign_object("expenseForm"); $total = $ep->get_abs_sum_transactions(); $TPL["invoiceItem_iiMemo"] = "<a href=\"" . $TPL["url_alloc_expenseForm"] . "expenseFormID=" . $invoiceItem->get_value("expenseFormID") . "\">" . $invoiceItem->get_value("iiMemo") . " (Currently: " . page::money(config::get_config_item("currency"), $total, "%s%m %c") . ", Status: " . $ep->get_status() . ")</a>"; } } $TPL["currency"] = $invoice->get_value("currencyTypeID"); include_template($template); } }
function delete_transactions() { $q = prepare("SELECT * FROM transaction WHERE productSaleItemID = %d", $this->get_id()); $db = new db_alloc(); $db->query($q); while ($db->row()) { $transaction = new transaction(); $transaction->read_db_record($db); $transaction->delete(); } }
function get_pending_repeat_transaction_list() { global $TPL; $transactionTypes = transaction::get_transactionTypes(); $q = "SELECT * FROM transaction \n LEFT JOIN transactionRepeat on transactionRepeat.transactionRepeatID = transaction.transactionRepeatID \n WHERE transaction.transactionRepeatID IS NOT NULL AND transaction.status = 'pending'"; $db = new db_alloc(); $db->query($q); while ($row = $db->row()) { $transaction = new transaction(); $transaction->read_db_record($db); $transaction->set_values(); $transactionRepeat = new transactionRepeat(); $transactionRepeat->read_db_record($db); $transactionRepeat->set_values(); $row["transactionType"] = $transactionTypes[$transaction->get_value("transactionType")]; $row["formTotal"] = $db->f("amount"); $row["transactionModifiedTime"] = $transaction->get_value("transactionModifiedTime"); $row["transactionCreatedTime"] = $transaction->get_value("transactionCreatedTime"); $row["transactionCreatedUser"] = person::get_fullname($transaction->get_value("transactionCreatedUser")); $rows[] = $row; } return (array) $rows; }
public static function get_list($_FORM) { $current_user =& singleton("current_user"); global $TPL; /* * This is the definitive method of getting a list of transactions that need a sophisticated level of filtering * */ $_FORM["tfIDs"] = transaction::reduce_tfs($_FORM); // Non-admin users must specify a valid TF if (!$current_user->have_role("admin") && !$_FORM["tfIDs"]) { return; } $filter = transaction::get_list_filter($_FORM); $debug = $_FORM["debug"]; $debug and print "\n<pre>_FORM: " . print_r($_FORM, 1) . "</pre>"; $debug and print "\n<pre>filter: " . print_r($filter, 1) . "</pre>"; $_FORM["return"] or $_FORM["return"] = "html"; $filter["prevBalance"] and $filter2[] = $filter["prevBalance"]; $filter["tfIDs"] and $filter2[] = $filter["tfIDs"]; $filter2 and $filter2[] = " (status = 'approved') "; unset($filter["prevBalance"]); if (is_array($filter2) && count($filter2)) { $filter2 = " WHERE " . implode(" AND ", $filter2); } if (is_array($filter) && count($filter)) { $filter = " WHERE " . implode(" AND ", $filter); } $_FORM["sortTransactions"] or $_FORM["sortTransactions"] = "transactionDate"; $order_by = "ORDER BY " . $_FORM["sortTransactions"]; // Determine opening balance if (is_array($_FORM['tfIDs']) && count($_FORM['tfIDs'])) { $q = prepare("SELECT SUM( IF(fromTfID IN (%s),-amount,amount) * pow(10,-currencyType.numberToBasic) * exchangeRate) AS balance\n FROM transaction \n LEFT JOIN currencyType ON currencyType.currencyTypeID = transaction.currencyTypeID\n " . $filter2, $_FORM['tfIDs']); $debug and print "\n<br>QUERY: " . $q; $db = new db_alloc(); $db->query($q); $db->row(); $_FORM["opening_balance"] = $db->f("balance"); $running_balance = $db->f("balance"); } $q = "SELECT *, \n (amount * pow(10,-currencyType.numberToBasic)) as amount1,\n (amount * pow(10,-currencyType.numberToBasic) * exchangeRate) as amount2,\n if(transactionModifiedTime,transactionModifiedTime,transactionCreatedTime) AS transactionSortDate,\n tf1.tfName as fromTfName,\n tf2.tfName as tfName\n FROM transaction \n LEFT JOIN currencyType ON currencyType.currencyTypeID = transaction.currencyTypeID\n LEFT JOIN tf tf1 ON transaction.fromTfID = tf1.tfID\n LEFT JOIN tf tf2 ON transaction.tfID = tf2.tfID\n " . $filter . " \n " . $order_by; $debug and print "\n<br>QUERY2: " . $q; $db = new db_alloc(); $db->query($q); $for_cyber = config::for_cyber(); while ($row = $db->next_record()) { #echo "<pre>".print_r($row,1)."</pre>"; $i++; $t = new transaction(); if (!$t->read_db_record($db)) { continue; } $print = true; // If the destination of this TF is not the current TfID, then invert the $amount $amount = $row["amount2"]; if (!in_array($row["tfID"], (array) $_FORM["tfIDs"])) { $amount = -$amount; $row["amount1"] = -$row["amount1"]; } $row["amount"] = $amount; $row["transactionURL"] = $t->get_url(); $row["transactionName"] = $t->get_name($_FORM); $row["transactionLink"] = $t->get_transaction_link($_FORM); $row["transactionTypeLink"] = $t->get_transaction_type_link() or $row["transactionTypeLink"] = $row["transactionType"]; $row["transactionSortDate"] = format_date("Y-m-d", $row["transactionSortDate"]); $row["fromTfIDLink"] = "<a href=\"" . $TPL["url_alloc_transactionList"] . "tfID=" . $row["fromTfID"] . "\">" . page::htmlentities($row["fromTfName"]) . "</a>"; $row["tfIDLink"] = "<a href=\"" . $TPL["url_alloc_transactionList"] . "tfID=" . $row["tfID"] . "\">" . page::htmlentities($row["tfName"]) . "</a>"; if ($t->get_value("status") == "approved") { $running_balance += $amount; $row["running_balance"] = page::money(config::get_config_item("currency"), $running_balance, "%m %c"); } if ($amount > 0) { $row["amount_positive"] = page::money($row["currencyTypeID"], $row["amount1"], "%m %c"); $total_amount_positive += $amount; } else { $row["amount_negative"] = page::money($row["currencyTypeID"], $row["amount1"], "%m %c"); $total_amount_negative += $amount; } // Cyber only hackery for ext ref field on product sales if ($for_cyber && $row["productSaleID"]) { $ps = new productSale(); $ps->set_id($row["productSaleID"]); if ($ps->select()) { $ps->get_value("extRef") and $row["product"] .= " (Ext ref: " . $ps->get_value("extRef") . ")"; } } $transactions[$row["transactionID"]] = $row; } $_FORM["total_amount_positive"] = page::money(config::get_config_item("currency"), $total_amount_positive, "%s%m %c"); $_FORM["total_amount_negative"] = page::money(config::get_config_item("currency"), $total_amount_negative, "%s%m %c"); $_FORM["running_balance"] = page::money(config::get_config_item("currency"), $running_balance, "%s%m %c"); return array("totals" => $_FORM, "rows" => (array) $transactions); }