if ($in + $in2 != $originalIn) {
            throw new Exception("new amounts are not equal to original total amount of '" . $originalIn . "'");
        }
        if ($out + $out2 != $originalOut) {
            throw new Exception("new amounts are not equal to original total amount of '" . $originalOut . "'");
        }
        $insert = new MySqlInsert();
        $insert->INTO(tbl_transactions::tableName());
        $insert->COLUMNS(array(tbl_transactions::$tdate, tbl_transactions::$in_amount, tbl_transactions::$out_amount, tbl_transactions::$category, tbl_transactions::$description, tbl_transactions::$ttype, tbl_transactions::$tyear, tbl_transactions::$tmonth, tbl_transactions::$tday, tbl_transactions::$tag_id, tbl_transactions::$store_id));
        $insert->ADD_ROW(array($date, $in2, $out2, $cat2, $desc2, $type, $year, $month, $day, $tag2, $store2));
        Debug($insert->toString());
    }
    $update = new MySqlUpdate();
    $update->TABLE(tbl_transactions::tableName());
    $update->ADD_COLUMN_VALUE_PAIR(tbl_transactions::$in_amount, $in);
    $update->ADD_COLUMN_VALUE_PAIR(tbl_transactions::$out_amount, $out);
    $update->ADD_COLUMN_VALUE_PAIR(tbl_transactions::$category, $cat);
    $update->ADD_COLUMN_VALUE_PAIR(tbl_transactions::$description, $desc);
    $update->ADD_COLUMN_VALUE_PAIR(tbl_transactions::$tag_id, $tag);
    $update->ADD_COLUMN_VALUE_PAIR(tbl_transactions::$store_id, $store);
    $update->ADD_CONDITION(tbl_transactions::getPrimaryKeyField() . "=" . $id);
    Debug($update->toString());
    if ($insert) {
        db::MySqlSubmitTransaction(array($update->toString(), $insert->toString()));
    } else {
        db::MySqlSubmitQuery($update->toString());
    }
    echo "Success.";
} catch (Exception $e) {
    echo $e->getMessage();
}
if (!empty($valueCondition)) {
    $q->ADD_CONDITION($valueCondition);
}
$q->ADD_CONDITION("tdate BETWEEN " . $fromDate . " AND " . $toDate);
if (!empty($searchCondition)) {
    $q->ADD_CONDITION($searchCondition);
}
$q->ADD_CONDITION(tbl_transactions::$istransfer . "='0'");
$q->ADD_CONDITION(tbl_transactions::tableName() . "." . tbl_transactions::$store_id . "=" . tbl_stores::tableName() . "." . tbl_stores::getPrimaryKeyField());
$q->ADD_CONDITION(tbl_transactions::tableName() . "." . tbl_transactions::$tag_id . "=" . tbl_tags::tableName() . "." . tbl_tags::getPrimaryKeyField());
//Debug($q->toString());
$results = db::MySqlSubmitQuery($q->toString());
if ($results) {
    $resultRow = mysql_fetch_assoc($results);
    $total = $resultRow["total"];
    $inTotal = $resultRow["inTotal"];
    $outTotal = $resultRow["outTotal"];
    //reset columns and add paging and sorting
    $q->COLUMNS(tbl_transactions::tableName() . "." . tbl_transactions::getPrimaryKeyField() . "," . tbl_transactions::tableName() . "." . tbl_transactions::$tdate . "," . tbl_transactions::tableName() . "." . tbl_transactions::$in_amount . "," . tbl_transactions::tableName() . "." . tbl_transactions::$out_amount . "," . tbl_transactions::tableName() . "." . tbl_transactions::$category . "," . tbl_transactions::tableName() . "." . tbl_transactions::$description . "," . tbl_transactions::tableName() . "." . tbl_transactions::$ttype . "," . tbl_transactions::tableName() . "." . tbl_transactions::$tmonth . "," . tbl_transactions::tableName() . "." . tbl_transactions::$tyear . "," . tbl_transactions::tableName() . "." . tbl_transactions::$tday . "," . tbl_transactions::tableName() . "." . tbl_transactions::$istransfer . "," . tbl_transactions::tableName() . "." . tbl_transactions::$tag_id . "," . tbl_transactions::tableName() . "." . tbl_transactions::$store_id . "," . tbl_stores::tableName() . "." . tbl_stores::$store_name . "," . tbl_tags::tableName() . "." . tbl_tags::$tag_name . "");
    $q->ADD_SORT($sortName, $sortOrder);
    $q->LIMIT($offset, $recordsPerPage);
    Debug($q->toString());
    $pagedResults = db::MySqlSubmitQuery($q->toString());
    if ($pagedResults) {
        while ($row = mysql_fetch_array($pagedResults, MYSQL_ASSOC)) {
            $cell = array($row[tbl_transactions::$tdate], $row[tbl_transactions::$in_amount], $row[tbl_transactions::$out_amount], $row[tbl_transactions::$ttype], $row[tbl_transactions::$category], $row[tbl_transactions::$description], $row[tbl_tags::$tag_name], $row[tbl_transactions::$tag_id], $row[tbl_stores::$store_name], $row[tbl_transactions::$store_id]);
            array_push($rows, array("id" => $row["id"], "cell" => $cell));
        }
    }
}
echo json_encode(array(inTotal => $inTotal, outTotal => $outTotal, page => $pageNumber, total => $total . '', rows => $rows));