$app->post("/orders/{client}/create", \Shop\Controller\ClientCreate::class . ':createPost'); | $app->post("/orders/{client}/create", \Shop\Controller\ClientCreate::class . ':createPost'); | ||||
// Route with optional params, see https://www.slimframework.com/docs/v4/objects/routing.html#how-to-create-routes section Optional segments | // 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->get('/orders', \Shop\Controller\Orders::class . ':orders'); | |||||
$app->get('/orders/{client}', \Shop\Controller\Orders::class . ':ordersArgs'); | |||||
$app->get("/order/{id}/create", \Shop\Controller\OrderCreate::class . ':createGet'); | $app->get("/order/{id}/create", \Shop\Controller\OrderCreate::class . ':createGet'); | ||||
$app->post("/order/{id}/create", \Shop\Controller\OrderCreate::class . ':createPost'); | $app->post("/order/{id}/create", \Shop\Controller\OrderCreate::class . ':createPost'); |
<?php | |||||
namespace Shop\Controller; | |||||
use Psr\Http\Message\ResponseInterface; | |||||
use Psr\Http\Message\ServerRequestInterface; | |||||
use Psr\Container\ContainerInterface; | |||||
use Shop\DB\Orders as OrderDB; | |||||
class Orders | |||||
{ | |||||
protected $container; | |||||
public function __construct(ContainerInterface $container) | |||||
{ | |||||
$this->container = $container; | |||||
} | |||||
public function orders(ServerRequestInterface $request, ResponseInterface $response, array $args) | |||||
{ | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$db = new OrderDB($this->container); | |||||
$orders = $db->getOrders(); | |||||
$vars = ["orders" => $orders]; | |||||
$a = $twig->render('orders.html.twig', $vars); | |||||
$response->getBody()->write($a); | |||||
return $response; | |||||
} | |||||
public function ordersArgs(ServerRequestInterface $request, ResponseInterface $response, array $args) | |||||
{ | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$db = new OrderDB($this->container); | |||||
$orders = $db->getOrdersArgs($args['client']); | |||||
$vars = ["orders" => $orders]; | |||||
$a = $twig->render('ordersargs.html.twig', $vars); | |||||
$response->getBody()->write($a); | |||||
return $response; | |||||
} | |||||
} |
<?php | |||||
namespace Shop\DB; | |||||
use Shop\Model\Orders as OrdersModel; | |||||
class Orders | |||||
{ | |||||
protected $container; | |||||
protected $orderArr = []; | |||||
protected $clientArr = []; | |||||
protected $totalArr; | |||||
public function __construct($container) | |||||
{ | |||||
$this->container = $container; | |||||
} | |||||
public function getOrders() { | |||||
$db = $this->container->get('db'); | |||||
$sql = "SELECT o.* FROM orders o LEFT JOIN clients c on o.customer_id = c.id;"; | |||||
$stmt = $db->prepare($sql); | |||||
$res = $stmt->execute(); | |||||
while($result = $res->fetchArray(SQLITE3_ASSOC)) { | |||||
$order = new OrdersModel($this->container); | |||||
$order->setId($result['name']); | |||||
$order->setReference($result['reference']); | |||||
$order->setSubtotal($result['subtotal']); | |||||
$order->setVat($result['vat']); | |||||
$order->setTotal($result['total']); | |||||
$this->orderArr[] = $order; | |||||
} | |||||
return $this->orderArr; | |||||
} | |||||
public function getOrdersArgs($id) { | |||||
$db = $this->container->get('db'); | |||||
$stmt2 = $db->prepare("SELECT * FROM clients WHERE id = :id;"); | |||||
$stmt2->bindValue(':id', $id, SQLITE3_INTEGER); | |||||
$res2 = $stmt2->execute(); | |||||
while($result = $res2->fetchArray(SQLITE3_ASSOC)) { | |||||
$order = new OrdersModel($this->container); | |||||
$order->setFirstname($result['firstname']); | |||||
$order->setLastname($result['lastname']); | |||||
$this->clientArr[] = $order; | |||||
} | |||||
$sql = "SELECT o.* FROM orders o LEFT JOIN clients c on o.customer_id = c.id;"; | |||||
$stmt = $db->prepare($sql); | |||||
$res = $stmt->execute(); | |||||
while($result = $res->fetchArray(SQLITE3_ASSOC)) { | |||||
$order->setId($result['name']); | |||||
$order->setReference($result['reference']); | |||||
$order->setSubtotal($result['subtotal']); | |||||
$order->setVat($result['vat']); | |||||
$order->setTotal($result['total']); | |||||
$this->orderArr[] = $order; | |||||
} | |||||
$this->totalArr = array_merge($this->clientArr, $this->orderArr); | |||||
return $this->totalArr; | |||||
} | |||||
} |
<?php | |||||
namespace Shop\Model; | |||||
use Shop\DB\Orders as OrdersDB; | |||||
class Orders | |||||
{ | |||||
protected $container; | |||||
protected $id; | |||||
protected $reference; | |||||
protected $subtotal; | |||||
protected $vat; | |||||
protected $total; | |||||
protected $firstname; | |||||
protected $lastname; | |||||
public function __construct($container) | |||||
{ | |||||
$this->container = $container; | |||||
} | |||||
public function setId($value) { | |||||
$this->id = $value; | |||||
} | |||||
public function setReference($value) { | |||||
$this->reference = $value; | |||||
} | |||||
public function setSubtotal($value) { | |||||
$this->subtotal = $value; | |||||
} | |||||
public function setVat($value) { | |||||
$this->vat = $value; | |||||
} | |||||
public function setTotal($value) { | |||||
$this->total = $value; | |||||
} | |||||
public function setFirstname($value) { | |||||
$this->firstname = $value; | |||||
} | |||||
public function setLastname($value) { | |||||
$this->lastname = $value; | |||||
} | |||||
} |
{% extends "base.html.twig" %} {% block main %} | |||||
<h1>Create orderline for {{ order.reference }}</h1> | |||||
<hr /> | |||||
<form action="/order/{{ args }}/create" method="post"> | |||||
<label for="id">product: </label> | |||||
<input type="text" name="id" /> | |||||
<label for="qty">qty: </label> | |||||
<input type="text" name="qty" /> | |||||
<input type="submit" /> | |||||
</form> | |||||
<hr /> | |||||
<a href="/customers">Back to customer list</a> | |||||
<a href="/orders">Back to order list</a> | |||||
{% endblock %} | |||||
<html> | |||||
<body> | |||||
<h1>Create orderline for {{ order.reference }}</h1> | |||||
<hr /> | |||||
<form action="/order/{{ args }}/create" method="post"> | |||||
<label for="id">product: </label> | |||||
<input type="text" name="id" /> | |||||
<label for="qty">qty: </label> | |||||
<input type="text" name="qty" /> | |||||
<input type="submit" /> | |||||
</form> | |||||
<hr /> | |||||
<a href="/customers">Back to customer list</a> | |||||
<a href="/orders">Back to order list</a> | |||||
</body> | |||||
</html> |
{% extends "base.html.twig" %} {% block main %} | |||||
<h1>ORDERS LIST FOR ALL CLIENTS</h1> | |||||
<hr /> | |||||
<table> | |||||
{% for orders in orders %} | |||||
<tr> | |||||
<td><a href=\"/order/{{orders.id}}">{{orders.reference}}</a> {{orders.subtotal}} {{orders.vat}} {{orders.total}}</td> | |||||
</tr> | |||||
{% endfor %} | |||||
</table> | |||||
{% endblock %} |
{% extends "base.html.twig" %} {% block main %} | |||||
<h1>ORDERS LIST FOR {{orders.firstname}} {{orders.lastname}}</h1> | |||||
<hr /> | |||||
<table> | |||||
{% for orders in orders %} | |||||
<tr> | |||||
<td><a href=\"/order/{{orders.id}}">{{orders.reference}}</a> {{orders.subtotal}} {{orders.vat}} {{orders.total}}</td> | |||||
</tr> | |||||
{% endfor %} | |||||
</table> | |||||
{% endblock %} |