Switched to Slim PHP microframework.

This commit is contained in:
Alexis Lahouze
2013-01-13 20:57:48 +01:00
parent ba4073f407
commit c189e0948b
23 changed files with 5529 additions and 203 deletions

View File

@ -1,114 +1,169 @@
<?php
require_once('rest.inc.php');
require_once('slim/Slim.php');
\Slim\Slim::registerAutoloader();
class EntryAPI extends RestAPI {
public function __contruct() {
parent::__construct();
}
$app=new \Slim\Slim();
protected function get_entries() {
$connection=$this->get_db_connection();
$app->get('/entries/:account_id/:year/:month', 'get_entries');
$app->get('/accounts', 'get_accounts');
$app->get('/accounts/:account_id/months', 'get_months');
$app->delete('/entries/:id', 'remove_entry');
$app->post('/entries/add', 'add_entry');
$app->put('/entries/save/:id', 'save_entry');
if(array_key_exists("month", $this->_request) && array_key_exists("year", $this->_request)) {
$day=$this->_request['year']."-".$this->_request['month']."-01";
} else {
$day=date("Y-m-01");
}
$app->run();
$account=$this->_request['account'];
function get_connection() {
$db=new PDO("pgsql:host=localhost;dbname=accountant", "accountant", "accountant");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement=$connection->prepare("select id, value_date, operation_date, label, value, account_id, sold, pointedsold, category from (select *, sum(value) over(order by value_date, operation_date, label desc, value desc) as sold, sum(value) over(partition by operation_date is not null order by value_date, operation_date, label desc, value desc) as pointedSold from entry where account_id=:account order by value_date desc, operation_date desc, label, value) as e where date_trunc('month', e.value_date) = :day ");
$statement->bindParam("day", $day);
$statement->bindParam("account", $account);
$return=$statement->execute();
if($return) {
$this->response($statement->fetchAll(PDO::FETCH_ASSOC));
} else {
$this->response($statement->errorInfo()[2], 500);
}
}
protected function save_entry() {
$entry=$this->_request['entry'];
$connection=$this->get_db_connection();
if($entry['id'] != null) {
$statement=$connection->prepare("update entry set value_date=:value_date, operation_date=:operation_date, label=:label, value=:value, account_id=:account_id, category=:category where id=:id");
} else {
$statement=$connection->prepare("insert into entry (value_date, operation_date, label, value, account_id, category) values (:value_date, :operation_date, :label, :value, :account_id, :category)");
}
$statement->bindParam("value_date", $entry['value_date']);
$statement->bindParam("operation_date", $entry['operation_date'] == '' ? null : $entry['operation_date']);
$statement->bindParam("label", $entry['label']);
$statement->bindParam("value", $entry['value']);
$statement->bindParam("account_id", $entry['account_id']);
$statement->bindParam("id", $entry['id']);
$statement->bindParam("category", $entry['category']);
$return=$statement->execute();
if($return) {
$this->response(array("status"=>1, "message" => $entry['id'] . " saved."));
} else {
$this->response($statement->errorInfo()[2], 500);
}
}
protected function remove_entry() {
$entry=$this->_request['entry'];
$connection=$this->get_db_connection();
$statement=$connection->prepare("delete from entry where id=:id");
$statement->bindParam("id", $entry['id']);
$return=$statement->execute();
if($return) {
$this->response(array("status"=>1, "message"=>"Entry #" . $entry['id'] . " removed."));
} else {
$this->response($statement->errorInfo()[2], 500);
}
}
protected function get_accounts() {
$connection=$this->get_db_connection();
$statement=$connection->prepare("select account.id, account.name, sum(entry.value) as future, sum(case when entry.operation_date is not null then entry.value else cast(0 as numeric) end) as pointed, sum(case when entry.value_date <= now() then entry.value else cast(0 as numeric) end) as current from account join entry on (account.id = entry.account_id) group by account.id order by account.name");
$return=$statement->execute();
if($return) {
$result=$statement->fetchAll(PDO::FETCH_ASSOC);
$this->response($result);
} else {
$this->response($statement->errorInfo()[2], 500);
}
}
protected function get_months() {
$account=$this->_request['account'];
$connection=$this->get_db_connection();
$statement=$connection->prepare("select distinct extract(year from value_date) as year, extract(month from value_date) as month from entry where account_id = :account order by year, month");
$statement->bindParam("account", $account);
$return=$statement->execute();
if($return) {
$this->response($statement->fetchAll(PDO::FETCH_ASSOC));
} else {
$this->response($statement->errorInfo()[2], 500);
}
}
return $db;
}
$entryApi = new EntryAPI();
$entryApi->process_api();
// Return the entries
function get_entries($account_id, $year, $month) {
$day=$year."-".$month."-01";
$connection=get_connection();
$sql = <<<EOF
select
id,
value_date,
operation_date,
label,
value,
account_id,
sold,
pointedsold,
category
from (
select
*,
sum(value) over(order by value_date, operation_date, label desc, value desc) as sold,
sum(value) over(partition by operation_date is not null order by value_date, operation_date, label desc, value desc) as pointedSold
from entry
where account_id=:account_id
order by value_date desc, operation_date desc, label, value) as e
where
date_trunc('month', e.value_date) = :day
EOF;
$statement=$connection->prepare($sql);
$statement->bindParam("day", $day);
$statement->bindParam("account_id", $account_id);
$return=$statement->execute();
echo(json_encode($statement->fetchAll(PDO::FETCH_ASSOC)));
}
// Add an entry
function add_entry() {
$request = \Slim\Slim::getInstance()->request();
$entry = json_decode($request->getBody(), true);
$connection=get_connection();
$statement=$connection->prepare("insert into entry (value_date, operation_date, label, value, account_id, category) values (:value_date, :operation_date, :label, :value, :account_id, :category)");
$statement->bindParam("value_date", $entry['value_date']);
$statement->bindParam("operation_date", array_key_exists("operation_date", $entry) ? $entry['operation_date'] : null);
$statement->bindParam("label", $entry['label']);
$statement->bindParam("value", $entry['value']);
$statement->bindParam("account_id", $entry['account_id']);
$statement->bindParam("category", array_key_exists("category", $entry) ? $entry["category"] : null);
$return=$statement->execute();
echo("Entry saved.");
}
// Saves an entry
function save_entry($id) {
$request = \Slim\Slim::getInstance()->request();
$entry = json_decode($request->getBody(), true);
$connection=get_connection();
$statement=$connection->prepare("update entry set value_date=:value_date, operation_date=:operation_date, label=:label, value=:value, account_id=:account_id, category=:category where id=:id");
$statement->bindParam("value_date", $entry['value_date']);
$statement->bindParam("operation_date", array_key_exists("operation_date", $entry) ? $entry['operation_date'] : null);
$statement->bindParam("label", $entry['label']);
$statement->bindParam("value", $entry['value']);
$statement->bindParam("account_id", $entry['account_id']);
$statement->bindParam("id", $entry['id']);
$statement->bindParam("category", array_key_exists("category", $entry) ? $entry["category"] : null);
$return=$statement->execute();
echo($entry['id'] . " saved.");
}
// Remove an entry
function remove_entry($id) {
$connection=get_connection();
$statement=$connection->prepare("delete from entry where id=:id");
$statement->bindParam("id", $id);
$return=$statement->execute();
echo("Entry #" . $id . " removed.");
}
// Return the accounts with their solds.
function get_accounts() {
$connection=get_connection();
$sql = <<<EOF
select
account.id,
account.name,
sum(entry.value) as future,
sum(case when entry.operation_date is not null then entry.value else cast(0 as numeric) end) as pointed,
sum(case when entry.value_date <= now() then entry.value else cast(0 as numeric) end) as current
from
account
join entry on (account.id = entry.account_id)
group by
account.id
order by
account.name
EOF;
$statement=$connection->prepare($sql);
$return=$statement->execute();
echo(json_encode($statement->fetchAll(PDO::FETCH_ASSOC)));
}
// Returns the months for an account.
function get_months($account_id) {
$connection=get_connection();
$sql = <<<EOF
select
distinct extract(year from value_date) as year,
extract(month from value_date) as month
from
entry
where
account_id = :account_id
order by
year,
month
EOF;
$statement=$connection->prepare($sql);
$statement->bindParam("account_id", $account_id);
$return=$statement->execute();
echo(json_encode($statement->fetchAll(PDO::FETCH_ASSOC)));
}
?>