123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <?php
-
- use Psr\Http\Message\ResponseInterface as Response;
- use Psr\Http\Message\ServerRequestInterface as Request;
- use Slim\Factory\AppFactory;
-
- require __DIR__ . '/../vendor/autoload.php';
-
- class myDB extends \SQLite3
- {
- public function __construct()
- {
- $this->open('./webshop.db');
- }
- }
-
- $app = AppFactory::create();
-
- $app->map(['GET', 'POST'], "/orders/{client}/create", function (Request $request, Response $response, array $args) {
- if ($request->getMethod() == "GET") {
- $db2 = new myDB();
- $stmt2 = $db2->prepare("SELECT * FROM clients WHERE id = " . $args['client']);
- $res2 = $stmt2->execute();
- $a = $res2->fetchArray(SQLITE3_ASSOC);
-
- $response->getBody()->write("<h1>Create order for" . $a['firstname'] . " " . $a['lastname'] . "</h1><hr/>");
- $response->getBody()->write('<form action="/orders/' . $args['client'] . '/create" method="post">');
- $response->getBody()->write('<label for="id">Reference: </label>');
- $response->getBody()->write('<input type="text" name="reference">');
- $response->getBody()->write('<input type="submit">');
- $response->getBody()->write('</form>');
-
- return $response;
- } else {
- $ref = $request->getParsedBody()['reference'];
- $db2 = new myDB();
- $sql = "insert into orders (reference, customer_id, vat, subtotal, total) values ('" . $ref . "', " . $args['client'] . ",0,0,0)";
- $db2->exec($sql);
- return $response->withHeader('Location', '/orders/' . $args['client']);
- };
- });
-
- // Route with optional params, see https://www.slimframework.com/docs/v4/objects/routing.html#how-to-create-routes section Optional segments
- $app->get('/orders[/{client}]', function (Request $request, Response $response, array $args) {
- $db = new myDB();
-
- if ($args['client']) {
- // orders 1 client
- $sql = "SELECT o.* FROM orders o LEFT JOIN clients c on o.customer_id = c.id where c.id = " . $args['client'];
- $stmt = $db->prepare($sql);
- $res = $stmt->execute();
-
- // naam van de klant
- $db2 = new myDB();
- $stmt2 = $db2->prepare("SELECT * FROM clients WHERE id = " . $args['client']);
- $res2 = $stmt2->execute();
- $a = $res2->fetchArray(SQLITE3_ASSOC);
- $response->getBody()->write('<a href="/orders/' . $args['client'] . '/create">Create order</a>');
- $response->getBody()->write("<h1>ORDERS LIST FOR CLIENT " . $a['firstname'] . " " . $a['lastname'] . "</h1>");
- $response->getBody()->write('<hr/>');
- $response->getBody()->write("<table>");
- } else {
- // alle klanten
- $response->getBody()->write("<h1>ORDERS LIST FOR ALL CLIENTS </h1>");
- $response->getBody()->write('<hr/>');
- $response->getBody()->write("<table>");
- $sql = "SELECT o.* FROM orders o LEFT JOIN clients c on o.customer_id = c.id";
- $stmt = $db->prepare($sql);
- $res = $stmt->execute();
- }
-
- // toon de orders van 1 of alle klanten
- while ($row = $res->fetchArray(SQLITE3_ASSOC)) {
- // maak hier een deftige tabel van
- $response->getBody()->write("<tr><td>" . " <a href=\"/order/" . $row['id'] . "\">" . $row["reference"] . "</a> " . $row['subtotal'] . " " . $row['vat'] . " " . $row['total'] . "</td></tr>");
- }
-
- $response->getBody()->write("</table>");
- $response->getBody()->write('<hr/>');
-
- $response->getBody()->write('<a href="/customers">Back to customer list</a> <a href="/orders">Back to order list</a>');
-
- return $response;
- });
-
- $app->map(['GET', 'POST'], "/order/{id}/create", function (Request $request, Response $response, array $args) {
-
- if ($request->getMethod() == "GET") {
- $db2 = new myDB();
- $stmt2 = $db2->prepare("SELECT * FROM orders WHERE id = " . $args['id']);
- $res2 = $stmt2->execute();
- $a = $res2->fetchArray(SQLITE3_ASSOC);
-
- $response->getBody()->write("<h1>Create orderline for" . $a['reference'] . "</h1><hr/>");
- $response->getBody()->write('<form action="/order/' . $args['id'] . '/create" method="post">');
- $response->getBody()->write('<label for="id">product: </label>');
- $response->getBody()->write('<input type="text" name="id">');
- $response->getBody()->write('<label for="qty">qty: </label>');
- $response->getBody()->write('<input type="text" name="qty">');
- $response->getBody()->write('<input type="submit">');
- $response->getBody()->write('</form>');
- $response->getBody()->write('<hr/>');
- $response->getBody()->write('<a href="/customers">Back to customer list</a> <a href="/orders">Back to order list</a>');
- return $response;
- } else {
- $productid = $request->getParsedBody()['id'];
- $qty = $request->getParsedBody()['qty'];
- $db2 = new myDB();
-
- // vraag details van het product op
- $sqlproduct = "select * from products where id = " . $productid;
- $stmtproduct = $db2->prepare($sqlproduct);
- $resproduct = $stmtproduct->execute();
- $product = $resproduct->fetchArray(SQLITE3_ASSOC);
- $order_id = $args['id'];
- $unitprice = $product['unitprice'];
- $vatperc = $product['vatperc'];
-
- // bereken de prijs van de lijn
- $subtotal = $qty * $unitprice;
- $vat = $subtotal * $vatperc / 100;
- $total = $subtotal + $vat;
-
- // voeg orderlijn toe
- $sql = "insert into order_lines (order_id, product_id, qty, subtotal, vat, total) values ($order_id, $productid, $qty, $subtotal, $vat, $total)";
- $db2->exec($sql);
-
- // update het order met nieuwe totalen
- $sql = "update orders set total = total + $total, subtotal = subtotal + $subtotal, vat = vat + $vat where id = $order_id";
- $db2->exec($sql);
-
- return $response->withHeader('Location', '/order/' . $args['id'] . '/create');
- };
- });
-
- $app->get('/order/{id}', function (Request $request, Response $response, array $args) {
-
- $db = new myDB();
-
- // detail orderlijnen
- $sql = "SELECT * FROM order_lines o LEFT JOIN products p on o.product_id = p.id where o.order_id = " . $args['id'];
- $stmt = $db->prepare($sql);
- $res = $stmt->execute();
-
- // detail order
- $db2 = new myDB();
- $stmt = $db2->prepare("SELECT * FROM orders WHERE id = " . $args['id']);
- $res2 = $stmt->execute();
- $a = $res2->fetchArray(SQLITE3_ASSOC);
- $response->getBody()->write('<a href="/order/' . $args['id'] . '/create">Add orderline</a>');
-
-
- $response->getBody()->write("<h1>ORDER DETAILS FOR ORDER " . $a['reference'] . "</h1>");
- $response->getBody()->write('<hr/>');
- $response->getBody()->write("<table>");
- while ($row = $res->fetchArray(SQLITE3_ASSOC)) {
- // maak hier een deftige tabel van
- $response->getBody()->write("<tr><td>" . " " . $row['id'] . " " . $row["itemnumber"] . " " . $row['name'] . " " . $row['qty'] . " " . $row['subtotal'] . " " . $row['vat'] . " " . $row['total'] . "</td></tr>");
- }
- $response->getBody()->write("</table>");
- $response->getBody()->write('<hr/>');
-
- $response->getBody()->write('<a href="/customers">Back to customer list</a> <a href="/orders">Back to order list</a>');
-
- return $response;
- });
-
-
- $app->get('/customers', function (Request $request, Response $response, array $args) {
- $db = new myDB();
- $sql = "SELECT * FROM clients";
- $stmt = $db->prepare($sql);
- $res = $stmt->execute();
-
- $response->getBody()->write("<h1>CUSTOMERS LIST </h1>");
- $response->getBody()->write('<hr/>');
- $response->getBody()->write("<table>");
- while ($row = $res->fetchArray(SQLITE3_ASSOC)) {
- // maak hier een deftige tabel van
- $response->getBody()->write("<tr><td>" . " " . " <a href=\"/orders/" . $row['id'] . "\">" . $row["id"] . "</a> " . " " . $row['firstname'] . " " . $row['lastname'] . " " . $row['street'] . " " . $row['street2'] . " " . $row['zipcode'] . " " . $row['city'] . " " . $row['country'] . "</td></tr>");
- }
- $response->getBody()->write("</table>");
-
- return $response;
- });
-
-
-
- $app->run();
|