@@ -1,12 +1,16 @@ | |||
<?php | |||
namespace Store; | |||
namespace Shop; | |||
use Psr\Http\Message\ResponseInterface as Response; | |||
use Psr\Http\Message\ServerRequestInterface as Request; | |||
use Psr\Container\ContainerInterface; | |||
use Slim\Factory\AppFactory; | |||
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'; | |||
@@ -14,179 +18,33 @@ $container = new Container(); | |||
AppFactory::setContainer($container); | |||
$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(); |
@@ -0,0 +1,73 @@ | |||
<?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']); | |||
// }; |
@@ -0,0 +1,36 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,45 @@ | |||
<?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'); | |||
} | |||
} |
@@ -0,0 +1,36 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,49 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,39 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,98 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,60 @@ | |||
<?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; | |||
} | |||
} |
@@ -1,6 +1,6 @@ | |||
<?php | |||
namespace Store\DB; | |||
namespace Shop\DB; | |||
use SQLite3; | |||
@@ -0,0 +1,114 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,41 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,50 @@ | |||
<?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; | |||
} | |||
} |
@@ -0,0 +1,44 @@ | |||
<?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); | |||
} | |||
} |
@@ -0,0 +1,5 @@ | |||
<html> | |||
<body> | |||
<div id="main">{% block main %}{% endblock %}</div> | |||
</body> | |||
</html> |
@@ -0,0 +1,10 @@ | |||
{% 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 %} |
@@ -0,0 +1,37 @@ | |||
{% 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 %} |
@@ -0,0 +1,29 @@ | |||
{% 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 %} |
@@ -0,0 +1,16 @@ | |||
<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> |
@@ -0,0 +1,13 @@ | |||
{% 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 %} |
@@ -0,0 +1,13 @@ | |||
{% 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 %} |