From 058ad7792a6a50821865184978d0d9dfe09f963c Mon Sep 17 00:00:00 2001
From: meskio <meskio@sindominio.net>
Date: Tue, 16 Mar 2021 19:05:22 +0100
Subject: [PATCH] List past orders

---
 src/Dashboard.js               |  4 +--
 src/Head.js                    | 24 +++++++++++---
 src/Panel.js                   |  4 +++
 src/inventary/InventaryList.js |  2 +-
 src/order/OrderCards.js        | 26 +++++++++++++++
 src/order/OrderList.js         | 58 ++++++++++++++++++++++++++--------
 6 files changed, 97 insertions(+), 21 deletions(-)
 create mode 100644 src/order/OrderCards.js

diff --git a/src/Dashboard.js b/src/Dashboard.js
index ac17ef6..e87613c 100644
--- a/src/Dashboard.js
+++ b/src/Dashboard.js
@@ -3,7 +3,7 @@ import { Row, Col, Button } from "react-bootstrap";
 import { LinkContainer } from "react-router-bootstrap";
 import AuthContext from "./AuthContext";
 import Fetcher from "./Fetcher";
-import OrderList from "./order/OrderList";
+import OrderCards from "./order/OrderCards";
 import MyTransactions from "./transaction/MyTransactions";
 import { printMoney } from "./util";
 
@@ -40,7 +40,7 @@ class Dashboard extends React.Component {
             </LinkContainer>
           </Col>
         </Row>
-        <OrderList />
+        <OrderCards />
         <MyTransactions />
       </Fetcher>
     );
diff --git a/src/Head.js b/src/Head.js
index 54a32fb..9934e1f 100644
--- a/src/Head.js
+++ b/src/Head.js
@@ -56,6 +56,24 @@ function Head(props) {
     );
   }
 
+  let orderNav = (
+    <LinkContainer to="/orders">
+      <Nav.Link>Pedidos</Nav.Link>
+    </LinkContainer>
+  );
+  if (auth.role === "order" || auth.role === "admin") {
+    orderNav = (
+      <NavDropdown title="Pedidos" id="admin">
+        <LinkContainer to="/orders">
+          <NavDropdown.Item>Pedidos</NavDropdown.Item>
+        </LinkContainer>
+        <LinkContainer to="/order/create">
+          <NavDropdown.Item>Abrir pedido</NavDropdown.Item>
+        </LinkContainer>
+      </NavDropdown>
+    );
+  }
+
   return (
     <Navbar bg="light" expand="sm">
       <LinkContainer to="/">
@@ -76,11 +94,7 @@ function Head(props) {
             <Nav.Link>Comprar</Nav.Link>
           </LinkContainer>
           {productNav}
-          {(auth.role === "order" || auth.role === "admin") && (
-            <LinkContainer to="/order/create">
-              <Nav.Link>Abrir pedido</Nav.Link>
-            </LinkContainer>
-          )}
+          {orderNav}
         </Nav>
 
         <Nav className="ml-auto" activeKey={location.pathname}>
diff --git a/src/Panel.js b/src/Panel.js
index 1fce501..9a7e68f 100644
--- a/src/Panel.js
+++ b/src/Panel.js
@@ -18,6 +18,7 @@ import ShowTransaction from "./transaction/ShowTransaction";
 import TransactionList from "./transaction/TransactionList";
 import ShowOrder from "./order/ShowOrder";
 import CreateOrder from "./order/CreateOrder";
+import OrderList from "./order/OrderList";
 import EditOrder from "./order/EditOrder";
 import SignIn from "./SignIn";
 import ResetRequest from "./ResetRequest";
@@ -87,6 +88,9 @@ function LogedPanel(props) {
             <Route path="/topup">
               <Topup />
             </Route>
+            <Route path="/orders">
+              <OrderList />
+            </Route>
             <Route path="/order/create">
               <CreateOrder />
             </Route>
diff --git a/src/inventary/InventaryList.js b/src/inventary/InventaryList.js
index 80011f3..9a6fecf 100644
--- a/src/inventary/InventaryList.js
+++ b/src/inventary/InventaryList.js
@@ -1,4 +1,4 @@
-import React, { useState } from "react";
+import React from "react";
 import { Table, OverlayTrigger, Popover } from "react-bootstrap";
 import { LinkContainer } from "react-router-bootstrap";
 import { printDate, printMoney, printInventaryID } from "../util";
diff --git a/src/order/OrderCards.js b/src/order/OrderCards.js
new file mode 100644
index 0000000..3e38060
--- /dev/null
+++ b/src/order/OrderCards.js
@@ -0,0 +1,26 @@
+import React, { useState } from "react";
+import { Card, Row, Col, Button } from "react-bootstrap";
+import { LinkContainer } from "react-router-bootstrap";
+import Fetcher from "../Fetcher";
+
+function OrderCards() {
+  const [orders, setOrders] = useState([]);
+  const order_list = orders.map((o) => (
+    <Card key={o.ID} as={Col} sm={4}>
+      <Card.Body>
+        <Card.Title>{o.name}</Card.Title>
+        <Card.Text>{o.description}</Card.Text>
+        <LinkContainer to={"/order/" + o.ID}>
+          <Button>Realizar pedido</Button>
+        </LinkContainer>
+      </Card.Body>
+    </Card>
+  ));
+  return (
+    <Fetcher url={"/api/order/active"} onFetch={setOrders}>
+      <Row>{order_list}</Row>
+    </Fetcher>
+  );
+}
+
+export default OrderCards;
diff --git a/src/order/OrderList.js b/src/order/OrderList.js
index d7bd38f..b791b62 100644
--- a/src/order/OrderList.js
+++ b/src/order/OrderList.js
@@ -1,24 +1,56 @@
 import React, { useState } from "react";
-import { Card, Row, Col, Button } from "react-bootstrap";
+import { Table, OverlayTrigger, Popover } from "react-bootstrap";
 import { LinkContainer } from "react-router-bootstrap";
 import Fetcher from "../Fetcher";
+import { printDate } from "../util";
+
+function orderOverlay(order) {
+  const content = order.products.map((p) => {
+    if (p.product === null) {
+      return null;
+    }
+
+    return (
+      <div key={"OL" + order.ID + "-" + p.ID}>
+        {p.product.name}
+        <br />
+      </div>
+    );
+  });
+
+  return (
+    <Popover>
+      <Popover.Title>{order.description}</Popover.Title>
+      <Popover.Content>{content}</Popover.Content>
+    </Popover>
+  );
+}
 
 function OrderList() {
   const [orders, setOrders] = useState([]);
-  const order_list = orders.map((o) => (
-    <Card key={o.ID} as={Col} sm={4}>
-      <Card.Body>
-        <Card.Title>{o.name}</Card.Title>
-        <Card.Text>{o.description}</Card.Text>
-        <LinkContainer to={"/order/" + o.ID}>
-          <Button>Realizar pedido</Button>
-        </LinkContainer>
-      </Card.Body>
-    </Card>
+
+  const entries = orders.map((order) => (
+    <OverlayTrigger key={order.ID} overlay={orderOverlay(order)}>
+      <LinkContainer to={"/order/" + order.ID}>
+        <tr className={order.active ? "table-primary" : "table-secondary"}>
+          <td>{printDate(order.deadline)}</td>
+          <td>{order.name}</td>
+        </tr>
+      </LinkContainer>
+    </OverlayTrigger>
   ));
+
   return (
-    <Fetcher url={"/api/order/active"} onFetch={setOrders}>
-      <Row>{order_list}</Row>
+    <Fetcher url="/api/order" onFetch={setOrders}>
+      <Table className="text-center" responsive>
+        <thead>
+          <tr>
+            <th>Fecha</th>
+            <th>Nombre</th>
+          </tr>
+        </thead>
+        <tbody>{entries}</tbody>
+      </Table>
     </Fetcher>
   );
 }
-- 
GitLab