Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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