<?php | <?php | ||||
namespace Store; | |||||
namespace Shop; | |||||
use Psr\Http\Message\ResponseInterface as Response; | use Psr\Http\Message\ResponseInterface as Response; | ||||
use Psr\Http\Message\ServerRequestInterface as Request; | use Psr\Http\Message\ServerRequestInterface as Request; | ||||
use Psr\Container\ContainerInterface; | |||||
use Slim\Factory\AppFactory; | use Slim\Factory\AppFactory; | ||||
use DI\Container; | use DI\Container; | ||||
use Store\DB\myDB; | |||||
use Shop\DB\myDB; | |||||
use Shop\View\Twig; | |||||
use Shop\DB\Order; | |||||
use Shop\Model\Order as OrderModel; | |||||
require __DIR__ . '/../vendor/autoload.php'; | require __DIR__ . '/../vendor/autoload.php'; | ||||
AppFactory::setContainer($container); | AppFactory::setContainer($container); | ||||
$app = AppFactory::create(); | $app = AppFactory::create(); | ||||
// $container->set('db', function() { | |||||
// $db = new myDB(); | |||||
// return $db; | |||||
// }); | |||||
$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']); | |||||
}; | |||||
$container->set('twig', function () { | |||||
$twig = new Twig('../templates'); | |||||
return $twig; | |||||
}); | }); | ||||
// 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>"); | |||||
$container->set( | |||||
'db', | |||||
function () { | |||||
$db = new myDB(); | |||||
return $db; | |||||
} | } | ||||
); | |||||
$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); | |||||
$app->get("/orders/{client}/create", \Shop\Controller\ClientCreate::class . ':createGet'); | |||||
$app->post("/orders/{client}/create", \Shop\Controller\ClientCreate::class . ':createPost'); | |||||
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(); | |||||
// Route with optional params, see https://www.slimframework.com/docs/v4/objects/routing.html#how-to-create-routes section Optional segments | |||||
$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>"); | |||||
$app->get('/orders', \Shop\Controller\Orders::class . ':orders'); | |||||
$app->get('/orders/{client}', \Shop\Controller\Orders::class . ':ordersArgs'); | |||||
return $response; | |||||
}); | |||||
$app->get("/order/{id}/create", \Shop\Controller\OrderCreate::class . ':createGet'); | |||||
$app->post("/order/{id}/create", \Shop\Controller\OrderCreate::class . ':createPost'); | |||||
$app->get('/order/{id}', \Shop\Controller\OrderID::class . ':orderID'); | |||||
$app->get('/customers', \Shop\Controller\Clients::class . ':clients'); | |||||
$app->run(); | $app->run(); |
<?php | |||||
namespace Shop\Controller; | |||||
use Psr\Http\Message\ResponseInterface; | |||||
use Psr\Http\Message\ServerRequestInterface; | |||||
use Psr\Container\ContainerInterface; | |||||
use Shop\DB\Order; | |||||
class ClientCreate | |||||
{ | |||||
protected $container; | |||||
protected $twig; | |||||
protected $vars; | |||||
public function __construct(ContainerInterface $container) { | |||||
$this->container = $container; | |||||
} | |||||
public function createGet(ServerRequestInterface $request, ResponseInterface $response, array $args) { | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$db = new Order($this->container); | |||||
$client = $db->getClient($args['client']); | |||||
$vars = ["client" => $client, "args" => $args['client']]; | |||||
$a = $twig->render('clientcreate.html.twig', $vars); | |||||
$response->getBody()->write($a); | |||||
return $response; | |||||
} | |||||
public function createPost(ServerRequestInterface $request, ResponseInterface $response, array $args) { | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$ref = $request->getParsedBody()['reference']; | |||||
$db2 = $this->container->get('db'); | |||||
$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']); | |||||
} | |||||
} | |||||
// 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); | |||||
// $db2 = new Order($this->container); | |||||
// $res2 = $db2->getClient($args['client']); | |||||
// $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']); | |||||
// }; |
<?php | |||||
namespace Shop\Controller; | |||||
use Psr\Http\Message\ResponseInterface; | |||||
use Psr\Http\Message\ServerRequestInterface; | |||||
use Psr\Container\ContainerInterface; | |||||
use Shop\DB\Clients as ClientList; | |||||
class Clients | |||||
{ | |||||
protected $container; | |||||
protected $twig; | |||||
protected $vars; | |||||
public function __construct(ContainerInterface $container) | |||||
{ | |||||
$this->container = $container; | |||||
} | |||||
public function clients(ServerRequestInterface $request, ResponseInterface $response, array $args) | |||||
{ | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$db = new ClientList($this->container); | |||||
$clients = $db->getClients(); | |||||
$vars = ["clients" => $clients]; | |||||
$a = $twig->render('clients.html.twig', $vars); | |||||
$response->getBody()->write($a); | |||||
return $response; | |||||
} | |||||
} |
<?php | |||||
namespace Shop\Controller; | |||||
use Psr\Http\Message\ResponseInterface; | |||||
use Psr\Http\Message\ServerRequestInterface; | |||||
use Psr\Container\ContainerInterface; | |||||
use Shop\DB\Order; | |||||
class OrderCreate | |||||
{ | |||||
protected $container; | |||||
public function __construct(ContainerInterface $container){ | |||||
$this->container = $container; | |||||
} | |||||
public function createGet(ServerRequestInterface $request, ResponseInterface $response, array $args) | |||||
{ | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$db = new Order($container); | |||||
$order = $db->getOrderDetail($args['id']); | |||||
$vars = ["order" => $order, "args" => $args['id']]; | |||||
$a = $twig->render('ordercreate.html.twig', $vars); | |||||
$response->getBody()->write($a); | |||||
return $response; | |||||
} | |||||
public function createPost(ServerRequestInterface $request, ResponseInterface $response, array $args) | |||||
{ | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$db = new Order($container); | |||||
$productid = $request->getParsedBody()['id']; | |||||
$qty = $request->getParsedBody()['qty']; | |||||
$order = $db->getProductDetails($args['id'], $productid, $qty); | |||||
return $response->withHeader('Location', '/order/' . $args['id'] . '/create'); | |||||
} | |||||
} |
<?php | |||||
namespace Shop\Controller; | |||||
use Psr\Http\Message\ResponseInterface; | |||||
use Psr\Http\Message\ServerRequestInterface; | |||||
use Psr\Container\ContainerInterface; | |||||
use Shop\DB\Order; | |||||
class OrderID | |||||
{ | |||||
protected $container; | |||||
protected $twig; | |||||
public function __construct(ContainerInterface $container) | |||||
{ | |||||
$this->container = $container; | |||||
} | |||||
public function orderID(ServerRequestInterface $request, ResponseInterface $response, array $args) | |||||
{ | |||||
$container = $this->container; | |||||
$twig = $container->get('twig'); | |||||
$db = new Order($this->container); | |||||
$orderLines = $db->getOrderLines($args['id']); | |||||
$orderDetails = $db->getOrderDetail($args['id']); | |||||
$vars = ["orderlines" => $orderLines, "orderdetails" => $orderDetails, "custid" => $args['id']]; | |||||
$a = $twig->render('orderID.html.twig', $vars); | |||||
$response->getBody()->write($a); | |||||
return $response; | |||||
} | |||||
} |
<?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\DB\myDB; | |||||
use Shop\Model\Clients as ClientModel; | |||||
class Clients extends myDB | |||||
{ | |||||
protected $container; | |||||
protected $clients = []; | |||||
public function __construct($container) | |||||
{ | |||||
$this->container = $container; | |||||
} | |||||
public function getClients() | |||||
{ | |||||
$stmt = $this->container->get('db')->prepare("SELECT * FROM clients;"); | |||||
$res = $stmt->execute(); | |||||
while($result = $res->fetchArray(SQLITE3_ASSOC)) { | |||||
$client = new ClientModel($this->container); | |||||
$client->setId($result['id']); | |||||
$client->setFirstname($result['firstname']); | |||||
$client->setLastname($result['lastname']); | |||||
$client->setCompany($result['company']); | |||||
$client->setVatnumber($result['vatnumber']); | |||||
$client->setStreet($result['street']); | |||||
$client->setStreet2($result['street2']); | |||||
$client->setZipcode($result['zipcode']); | |||||
$client->setCity($result['city']); | |||||
$client->setState($result['state']); | |||||
$client->setCountry($result['country']); | |||||
$this->clients[] = $client; | |||||
} | |||||
return $this->clients; | |||||
} | |||||
} |
<?php | |||||
namespace Shop\DB; | |||||
use Shop\Model\Order as OrderModel; | |||||
use Shop\Model\OrderCreate as OrderCreate; | |||||
use Shop\DB\myDB; | |||||
class Order | |||||
{ | |||||
protected $container; | |||||
protected $orderlines = []; | |||||
protected $details = []; | |||||
protected $clients = []; | |||||
protected $product = []; | |||||
public function __construct($container) { | |||||
$this->container = $container; | |||||
} | |||||
public function getOrderLines($id) | |||||
{ | |||||
$db = $this->container->get('db'); | |||||
$sql = "SELECT * FROM order_lines o LEFT JOIN products p on o.product_id = p.id where o.order_id = :id;"; | |||||
$stmt = $db->prepare($sql); | |||||
$stmt->bindValue(':id', $id, SQLITE3_INTEGER); | |||||
$res = $stmt->execute(); | |||||
while ($result = $res->fetchArray(SQLITE3_ASSOC)) { | |||||
$orderLine = new OrderModel($this->container); | |||||
$orderLine->setId($result['id']); | |||||
$orderLine->setName($result['name']); | |||||
$orderLine->setItemnumber($result['itemnumber']); | |||||
$orderLine->setQty($result['qty']); | |||||
$orderLine->setSubtotal($result['subtotal']); | |||||
$orderLine->setVat($result['vat']); | |||||
$orderLine->setTotal($result['total']); | |||||
$this->orderlines[] = $orderLine; | |||||
} | |||||
return $this->orderlines; | |||||
} | |||||
public function getOrderDetail($id) { | |||||
$db = $this->container->get('db'); | |||||
$stmt = $db->prepare("SELECT * FROM orders WHERE id = :id"); | |||||
$stmt->bindValue(':id', $id, SQLITE3_INTEGER); | |||||
$res = $stmt->execute(); | |||||
while ($result = $res->fetchArray(SQLITE3_ASSOC)) { | |||||
$detail = new OrderModel($this->container); | |||||
$detail->setReference($result['reference']); | |||||
$this->details[] = $detail; | |||||
} | |||||
return $this->details; | |||||
} | |||||
public function getProductDetails($id, $productid, $qty) { | |||||
$db = $this->container->get('db'); | |||||
$sqlproduct = "select * from products where id = :id;"; | |||||
$stmtproduct = $db->prepare($sqlproduct); | |||||
$stmtproduct->bindValue(':id', $productid, SQLITE3_INTEGER); | |||||
$resproduct = $stmtproduct->execute(); | |||||
while ($product = $resproduct->fetchArray(SQLITE3_ASSOC)) { | |||||
$order = new OrderModel($this->container); | |||||
$order->setUnitprice($product['unitprice']); | |||||
$order->setVatperc($product['vatperc']); | |||||
$this->product[] = $order; | |||||
} | |||||
$order_id = $id; | |||||
$unitprice = $product['unitprice']; | |||||
$vatperc = $product['vatperc']; | |||||
$subtotal = $qty * $unitprice; | |||||
$vat = $subtotal * $vatperc / 100; | |||||
$total = $subtotal + $vat; | |||||
$sql = "insert into order_lines (order_id, product_id, qty, subtotal, vat, total) values ($order_id, $productid, $qty, $subtotal, $vat, $total)"; | |||||
$db->exec($sql); | |||||
$sql = "update orders set total = total + $total, subtotal = subtotal + $subtotal, vat = vat + $vat where id = $order_id"; | |||||
$db->exec($sql); | |||||
} | |||||
public function getClient($id) | |||||
{ | |||||
$db = $this->container->get('db'); | |||||
$sql = "SELECT * FROM clients WHERE id = :id;"; | |||||
$stmt = $db->prepare($sql); | |||||
$stmt->bindValue(':id', $id, SQLITE3_INTEGER); | |||||
$res = $stmt->execute(); | |||||
while ($result = $res->fetchArray(SQLITE3_ASSOC)) { | |||||
$client = new OrderCreate($this->container); | |||||
$client->setFirstname($result['firstname']); | |||||
$client->setLastname($result['lastname']); | |||||
$this->clients[] = $client; | |||||
} | |||||
return $this->clients; | |||||
} | |||||
} |
<?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 | <?php | ||||
namespace Store\DB; | |||||
namespace Shop\DB; | |||||
use SQLite3; | use SQLite3; | ||||
<?php | |||||
namespace Shop\Model; | |||||
use Shop\DB\myDB; | |||||
class Clients | |||||
{ | |||||
protected $id; | |||||
protected $firstname; | |||||
protected $lastname; | |||||
protected $company; | |||||
protected $vatnumber; | |||||
protected $street; | |||||
protected $street2; | |||||
protected $zipcode; | |||||
protected $city; | |||||
protected $state; | |||||
protected $country; | |||||
protected $container; | |||||
public function __construct($container) { | |||||
$this->container = $container; | |||||
} | |||||
public function setId($value) { | |||||
$this->id = $value; | |||||
} | |||||
public function getId() { | |||||
return $this->id; | |||||
} | |||||
public function setFirstname($value) { | |||||
$this->firstname = $value; | |||||
} | |||||
public function getFirstname() { | |||||
return $this->firstname; | |||||
} | |||||
public function setLastname($value) { | |||||
$this->lastname = $value; | |||||
} | |||||
public function getLastname() { | |||||
return $this->lastname; | |||||
} | |||||
public function setCompany($value) { | |||||
$this->company = $value; | |||||
} | |||||
public function getCompany() { | |||||
return $this->company; | |||||
} | |||||
public function setVatnumber($value) { | |||||
$this->vatnumber = $value; | |||||
} | |||||
public function getVatnumber() { | |||||
return $this->vatnumber; | |||||
} | |||||
public function setStreet($value) { | |||||
$this->street = $value; | |||||
} | |||||
public function getStreet() { | |||||
return $this->street; | |||||
} | |||||
public function setStreet2($value) { | |||||
$this->street2 = $value; | |||||
} | |||||
public function getStreet2() { | |||||
return $this->street2; | |||||
} | |||||
public function setZipcode($value) { | |||||
$this->zipcode = $value; | |||||
} | |||||
public function getZipcode() { | |||||
return $this->zipcode; | |||||
} | |||||
public function setCity($value) { | |||||
$this->city = $value; | |||||
} | |||||
public function getCity() { | |||||
return $this->city; | |||||
} | |||||
public function setState($value) { | |||||
$this->state = $value; | |||||
} | |||||
public function getState() { | |||||
return $this->state; | |||||
} | |||||
public function setCountry($value) { | |||||
$this->country = $value; | |||||
} | |||||
public function getCountry() { | |||||
return $this->country; | |||||
} | |||||
} |
<?php | |||||
namespace Shop\Model; | |||||
use Shop\DB\Order as DBOrder; | |||||
class Order | |||||
{ | |||||
protected $container; | |||||
protected $reference; | |||||
protected $id; | |||||
protected $itemnumber; | |||||
protected $name; | |||||
protected $qty; | |||||
protected $subtotal; | |||||
protected $vat; | |||||
protected $total; | |||||
protected $unitprice; | |||||
protected $vatperc; | |||||
public function __container($container) { | |||||
$this->container = $container; | |||||
} | |||||
public function setReference($value) | |||||
{ | |||||
$this->reference = $value; | |||||
} | |||||
public function setId($value) | |||||
{ | |||||
$this->id = $value; | |||||
} | |||||
public function setItemnumber($value) | |||||
{ | |||||
$this->itemnumber = $value; | |||||
} | |||||
public function setName($value) | |||||
{ | |||||
$this->name = $value; | |||||
} | |||||
public function setQty($value) | |||||
{ | |||||
$this->qty = $value; | |||||
} | |||||
public function setSubtotal($value) | |||||
{ | |||||
$this->subtotal = $value; | |||||
} | |||||
public function setVat($value) | |||||
{ | |||||
$this->vat = $value; | |||||
} | |||||
public function setTotal($value) | |||||
{ | |||||
$this->total = $value; | |||||
} | |||||
public function setUnitprice($value) { | |||||
$this->unitprice = $value; | |||||
} | |||||
public function setVatperc($value) { | |||||
$this->vatperc = $value; | |||||
} | |||||
} |
<?php | |||||
namespace Shop\Model; | |||||
class OrderCreate | |||||
{ | |||||
protected $container; | |||||
protected $firstname; | |||||
protected $lastname; | |||||
protected $reference; | |||||
public function __construct($container) | |||||
{ | |||||
$this->container = $container; | |||||
} | |||||
public function setFirstname($value) { | |||||
$this->firstname = $value; | |||||
} | |||||
public function getFirstname() { | |||||
return $this->firstname; | |||||
} | |||||
public function setLastname($value) { | |||||
$this->lastname = $value; | |||||
} | |||||
public function getLastname() { | |||||
return $this->lastname; | |||||
} | |||||
public function setReference($value) { | |||||
$this->reference = $value; | |||||
} | |||||
public function getReference() { | |||||
return $this->reference; | |||||
} | |||||
} |
<?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; | |||||
} | |||||
} |
<?php | |||||
namespace Shop\View; | |||||
use Twig\Loader\FilesystemLoader; | |||||
use Twig\Environment; | |||||
class Twig | |||||
{ | |||||
protected $twig; | |||||
protected $variables; | |||||
public function __construct($tmpl_folder) | |||||
{ | |||||
$loader = new FilesystemLoader($tmpl_folder); | |||||
$this->twig = new Environment($loader, []); | |||||
$this->variables = []; | |||||
} | |||||
protected function load($tmpl) | |||||
{ | |||||
return $this->twig->load($tmpl); | |||||
} | |||||
// add block variables to the global variable bag | |||||
// public function addBlockVariable($block, $data) | |||||
// { | |||||
// $current = $this->variables[$block]; | |||||
// if ($current) { | |||||
// $new = array_merge($current, $data); | |||||
// } else { | |||||
// $new = $data; | |||||
// } | |||||
// $this->variables[$block] = $new; | |||||
// } | |||||
public function render($tmpl, $vars) | |||||
{ | |||||
$template = $this->load($tmpl); | |||||
$variables = array_merge($this->variables, $vars); | |||||
return $template->render($variables); | |||||
} | |||||
} |
<html> | |||||
<body> | |||||
<div id="main">{% block main %}{% endblock %}</div> | |||||
</body> | |||||
</html> |
{% extends "base.html.twig" %} {% block main %} | |||||
<h1>Create order for {{ client.firstname }} {{ client.lastname }}</h1> | |||||
<hr /> | |||||
<form action="/orders/{{ args }}/create" method="post"> | |||||
<label for="id">Reference: </label> | |||||
<input type="text" name="reference" /> | |||||
<input type="submit" /> | |||||
</form> | |||||
{% endblock %} |
{% extends "base.html.twig" %} {% block main %} | |||||
<h1>CUSTOMER LIST</h1> | |||||
<hr /> | |||||
<table> | |||||
<tr> | |||||
<th>id</th> | |||||
<th>First Name</th> | |||||
<th>Last Name</th> | |||||
<th>Company</th> | |||||
<th>VAT Number</th> | |||||
<th>Street</th> | |||||
<th>Street 2</th> | |||||
<th>ZIP Code</th> | |||||
<th>City</th> | |||||
<th>State</th> | |||||
<th>Country</th> | |||||
</tr> | |||||
{% for clients in clients %} | |||||
<tr> | |||||
<td> | |||||
<a href="/orders/{{ clients.id }}">{{ clients.id }}</a> | |||||
</td> | |||||
<td>{{ clients.firstname }}</td> | |||||
<td>{{ clients.lastname }}</td> | |||||
<td>{{ clients.company }}</td> | |||||
<td>{{ clients.vatnumber }}</td> | |||||
<td>{{ clients.street }}</td> | |||||
<td>{{ clients.street2 }}</td> | |||||
<td>{{ clients.zipcode }}</td> | |||||
<td>{{ clients.city }}</td> | |||||
<td>{{ clients.state }}</td> | |||||
<td>{{ clients.country }}</td> | |||||
</tr> | |||||
{% endfor %} | |||||
</table> | |||||
{% endblock %} |
{% extends "base.html.twig" %} {% block main %} | |||||
<a href="/order/{{ custid }}/create">Add orderline</a> | |||||
<h1>ORDER DETAILS FOR ORDER {{ orderdetails.reference }}</h1> | |||||
<hr /> | |||||
<table> | |||||
<tr> | |||||
<th>id</th> | |||||
<th>Itemnumber</th> | |||||
<th>Name</th> | |||||
<th>Quantity</th> | |||||
<th>Subtotal</th> | |||||
<th>VAT</th> | |||||
<th>Total</th> | |||||
</tr> | |||||
{% for orderlines in orderlines %} | |||||
<tr> | |||||
<td>{{ orderlines.id }}</td> | |||||
<td>{{ orderlines.itemnumber }}</td> | |||||
<td>{{ orderlines.name }}</td> | |||||
<td>{{ orderlines.qty }}</td> | |||||
<td>{{ orderlines.subtotal }}</td> | |||||
<td>{{ orderlines.vat }}</td> | |||||
<td>{{ orderlines.total }}</td> | |||||
</tr> | |||||
{% endfor %} | |||||
</table> | |||||
<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 %} |