examen MVC (model view controller)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. namespace Shop;
  3. session_start();
  4. use Psr\Http\Message\ResponseInterface as Response;
  5. use Psr\Http\Message\ServerRequestInterface as Request;
  6. use Slim\Factory\AppFactory;
  7. Use Shop\DB\DB;
  8. use DI\Container;
  9. use Shop\View\Twig;
  10. require __DIR__ . '/../vendor/autoload.php';
  11. $container = new Container();
  12. AppFactory::setContainer($container);
  13. $app = AppFactory::create();
  14. $container->set('twig', function () {
  15. $twig = new Twig('../templates');
  16. return $twig;
  17. });
  18. $container->set(
  19. 'db',
  20. function () {
  21. $db = new DB();
  22. return $db;
  23. }
  24. );
  25. $app->map(['GET', 'POST'], "/orders/{client}/create", function (Request $request, Response $response, array $args) {
  26. if ($request->getMethod() == "GET") {
  27. $db2 = new DB();
  28. $stmt2 = $db2->prepare("SELECT * FROM clients WHERE id = " . $args['client']);
  29. $res2 = $stmt2->execute();
  30. $a = $res2->fetchArray(SQLITE3_ASSOC);
  31. $response->getBody()->write("<h1>Create order for" . $a['firstname'] . " " . $a['lastname'] . "</h1><hr/>");
  32. $response->getBody()->write('<form action="/orders/' . $args['client'] . '/create" method="post">');
  33. $response->getBody()->write('<label for="id">Reference: </label>');
  34. $response->getBody()->write('<input type="text" name="reference">');
  35. $response->getBody()->write('<input type="submit">');
  36. $response->getBody()->write('</form>');
  37. return $response;
  38. } else {
  39. $ref = $request->getParsedBody()['reference'];
  40. $db2 = new DB();
  41. $sql = "insert into orders (reference, customer_id, vat, subtotal, total) values ('" . $ref . "', " . $args['client'] . ",0,0,0)";
  42. $db2->exec($sql);
  43. return $response->withHeader('Location', '/orders/' . $args['client']);
  44. };
  45. });
  46. // Route with optional params, see https://www.slimframework.com/docs/v4/objects/routing.html#how-to-create-routes section Optional segments
  47. $app->get('/orders[/{client}]',\Shop\Controller\Shop::class . ':customerOrders'); /*function (Request $request, Response $response, array $args) {
  48. $db = new DB();
  49. if ($args['client']) {
  50. // orders 1 client
  51. $sql = "SELECT o.* FROM orders o LEFT JOIN clients c on o.customer_id = c.id where c.id = " . $args['client'];
  52. $stmt = $db->prepare($sql);
  53. $res = $stmt->execute();
  54. // naam van de klant
  55. $db2 = new DB();
  56. $stmt2 = $db2->prepare("SELECT * FROM clients WHERE id = " . $args['client']);
  57. $res2 = $stmt2->execute();
  58. $a = $res2->fetchArray(SQLITE3_ASSOC);
  59. $response->getBody()->write('<a href="/orders/' . $args['client'] . '/create">Create order</a>');
  60. $response->getBody()->write("<h1>ORDERS LIST FOR CLIENT " . $a['firstname'] . " " . $a['lastname'] . "</h1>");
  61. $response->getBody()->write('<hr/>');
  62. $response->getBody()->write("<table>");
  63. } else {
  64. // alle klanten
  65. $response->getBody()->write("<h1>ORDERS LIST FOR ALL CLIENTS </h1>");
  66. $response->getBody()->write('<hr/>');
  67. $response->getBody()->write("<table>");
  68. $sql = "SELECT o.* FROM orders o LEFT JOIN clients c on o.customer_id = c.id";
  69. $stmt = $db->prepare($sql);
  70. $res = $stmt->execute();
  71. }
  72. // toon de orders van 1 of alle klanten
  73. while ($row = $res->fetchArray(SQLITE3_ASSOC)) {
  74. // maak hier een deftige tabel van
  75. $response->getBody()->write("<tr><td>" . " <a href=\"/order/" . $row['id'] . "\">" . $row["reference"] . "</a> " . $row['subtotal'] . " " . $row['vat'] . " " . $row['total'] . "</td></tr>");
  76. }
  77. $response->getBody()->write("</table>");
  78. $response->getBody()->write('<hr/>');
  79. $response->getBody()->write('<a href="/customers">Back to customer list</a> <a href="/orders">Back to order list</a>');
  80. return $response;
  81. });*/
  82. $app->map(['GET', 'POST'], "/order/{id}/create", function (Request $request, Response $response, array $args) {
  83. if ($request->getMethod() == "GET") {
  84. $db2 = new DB();
  85. $stmt2 = $db2->prepare("SELECT * FROM orders WHERE id = " . $args['id']);
  86. $res2 = $stmt2->execute();
  87. $a = $res2->fetchArray(SQLITE3_ASSOC);
  88. $response->getBody()->write("<h1>Create orderline for" . $a['reference'] . "</h1><hr/>");
  89. $response->getBody()->write('<form action="/order/' . $args['id'] . '/create" method="post">');
  90. $response->getBody()->write('<label for="id">product: </label>');
  91. $response->getBody()->write('<input type="text" name="id">');
  92. $response->getBody()->write('<label for="qty">qty: </label>');
  93. $response->getBody()->write('<input type="text" name="qty">');
  94. $response->getBody()->write('<input type="submit">');
  95. $response->getBody()->write('</form>');
  96. $response->getBody()->write('<hr/>');
  97. $response->getBody()->write('<a href="/customers">Back to customer list</a> <a href="/orders">Back to order list</a>');
  98. return $response;
  99. } else {
  100. $productid = $request->getParsedBody()['id'];
  101. $qty = $request->getParsedBody()['qty'];
  102. $db2 = new DB();
  103. // vraag details van het product op
  104. $sqlproduct = "select * from products where id = " . $productid;
  105. $stmtproduct = $db2->prepare($sqlproduct);
  106. $resproduct = $stmtproduct->execute();
  107. $product = $resproduct->fetchArray(SQLITE3_ASSOC);
  108. $order_id = $args['id'];
  109. $unitprice = $product['unitprice'];
  110. $vatperc = $product['vatperc'];
  111. // bereken de prijs van de lijn
  112. $subtotal = $qty * $unitprice;
  113. $vat = $subtotal * $vatperc / 100;
  114. $total = $subtotal + $vat;
  115. // voeg orderlijn toe
  116. $sql = "insert into order_lines (order_id, product_id, qty, subtotal, vat, total) values ($order_id, $productid, $qty, $subtotal, $vat, $total)";
  117. $db2->exec($sql);
  118. // update het order met nieuwe totalen
  119. $sql = "update orders set total = total + $total, subtotal = subtotal + $subtotal, vat = vat + $vat where id = $order_id";
  120. $db2->exec($sql);
  121. return $response->withHeader('Location', '/order/' . $args['id'] . '/create');
  122. };
  123. });
  124. $app->get('/order/{id}', function (Request $request, Response $response, array $args) {
  125. $db = new DB();
  126. // detail orderlijnen, steek in src
  127. $sql = "SELECT * FROM order_lines o LEFT JOIN products p on o.product_id = p.id where o.order_id = " . $args['id'];
  128. $stmt = $db->prepare($sql);
  129. $res = $stmt->execute();
  130. // detail order
  131. $db2 = new DB();
  132. $stmt = $db2->prepare("SELECT * FROM orders WHERE id = " . $args['id']);
  133. $res2 = $stmt->execute();
  134. $a = $res2->fetchArray(SQLITE3_ASSOC);
  135. $response->getBody()->write('<a href="/order/' . $args['id'] . '/create">Add orderline</a>');
  136. $response->getBody()->write("<h1>ORDER DETAILS FOR ORDER " . $a['reference'] . "</h1>");
  137. $response->getBody()->write('<hr/>');
  138. $response->getBody()->write("<table>");
  139. while ($row = $res->fetchArray(SQLITE3_ASSOC)) {
  140. // maak hier een deftige tabel van
  141. $response->getBody()->write("<tr><td>" . " " . $row['id'] . " " . $row["itemnumber"] . " " . $row['name'] . " " . $row['qty'] . " " . $row['subtotal'] . " " . $row['vat'] . " " . $row['total'] . "</td></tr>");
  142. }
  143. $response->getBody()->write("</table>");
  144. $response->getBody()->write('<hr/>');
  145. $response->getBody()->write('<a href="/customers">Back to customer list</a> <a href="/orders">Back to order list</a>');
  146. return $response;
  147. });
  148. // put this in src db
  149. $app->get('/customers',\Shop\Controller\Shop::class . ':customers');/*function (Request $request, Response $response, array $args*/
  150. /*$db = new DB();
  151. $sql = "SELECT * FROM clients";
  152. $stmt = $db->prepare($sql);
  153. $res = $stmt->execute();
  154. $response->getBody()->write("<h1>CUSTOMERS LIST </h1>");
  155. $response->getBody()->write('<hr/>');
  156. $response->getBody()->write("<table>");
  157. while ($row = $res->fetchArray(SQLITE3_ASSOC)) {
  158. // maak hier een deftige tabel van; maak twig template.
  159. $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>");
  160. }
  161. $response->getBody()->write("</table>");
  162. return $response;*/
  163. $app->run();