From ece6647671f029cc5d20feec710c0ecbb6a22e73 Mon Sep 17 00:00:00 2001
From: meskio <meskio@sindominio.net>
Date: Tue, 16 Mar 2021 18:18:19 +0100
Subject: [PATCH] Don't assume product extists

---
 src/order/OrderEditor.js         |  3 ++-
 src/order/ShowOrder.js           | 13 ++++++++++---
 src/purchase/ShowPurchase.js     |  2 +-
 src/transaction/TransactionTr.js | 11 +++++++++--
 4 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/order/OrderEditor.js b/src/order/OrderEditor.js
index 66d263f..246f399 100644
--- a/src/order/OrderEditor.js
+++ b/src/order/OrderEditor.js
@@ -6,9 +6,10 @@ import { date2string, time2string, daysAfterNow } from "../util";
 
 function order2picks(order) {
   return order.products.map((p) => {
+    const name = p.product !== null ? p.product.name : p.code;
     return {
       code: p.code,
-      name: p.product.name,
+      name: name,
       price: p.price,
     };
   });
diff --git a/src/order/ShowOrder.js b/src/order/ShowOrder.js
index 72d8c40..75e3e11 100644
--- a/src/order/ShowOrder.js
+++ b/src/order/ShowOrder.js
@@ -16,10 +16,17 @@ import { printDate } from "../util";
 import AuthContext from "../AuthContext";
 import { printMoney, url } from "../util";
 
+function getName(order_product) {
+  if (order_product.product !== null) {
+    return order_product.product.name;
+  }
+  return order_product.code;
+}
+
 function ShowOrderTransaction(props) {
   const list = props.transaction.order_purchase.map((o) => (
     <li key={o.order_product.code}>
-      {o.order_product.product.name} ({o.order_product.code}): {o.amount}
+      {getName(o.order_product)} ({o.order_product.code}): {o.amount}
     </li>
   ));
   return (
@@ -48,7 +55,7 @@ function ShowOrderResults(props) {
           t.member.num.toString() + "-" + purchase.order_product_id.toString();
         return (
           <li key={key}>
-            {products[i].product.name} {purchase.amount}
+            {getName(products[i])} {purchase.amount}
           </li>
         );
       }
@@ -64,7 +71,7 @@ function ShowOrderResults(props) {
 
   const product_list = products.map((p) => (
     <li key={p.code}>
-      {p.product.name}: {p.total}
+      {getName(p)}: {p.total}
     </li>
   ));
   return (
diff --git a/src/purchase/ShowPurchase.js b/src/purchase/ShowPurchase.js
index 634cb75..d123967 100644
--- a/src/purchase/ShowPurchase.js
+++ b/src/purchase/ShowPurchase.js
@@ -7,7 +7,7 @@ function ShowPurchase(props) {
     return (
       <tr key={p.code}>
         <td>{p.code}</td>
-        <td>{p.product.name}</td>
+        <td>{p.product !== null ? p.product.name : p.code}</td>
         <td>{printMoney(p.price) + " €"}</td>
         <td>{p.amount}</td>
       </tr>
diff --git a/src/transaction/TransactionTr.js b/src/transaction/TransactionTr.js
index 8cffa39..ee5d5b8 100644
--- a/src/transaction/TransactionTr.js
+++ b/src/transaction/TransactionTr.js
@@ -8,7 +8,10 @@ function transactionOverlay(transaction) {
   switch (transaction.type) {
     case "purchase":
       title = "compra";
-      content = transaction.purchase.map((p) => p.product.name).join(",") + ".";
+      content =
+        transaction.purchase
+          .map((p) => (p.product !== null ? p.product.name : p.code))
+          .join(",") + ".";
       break;
     case "topup":
       if (transaction.total < 0) {
@@ -21,9 +24,13 @@ function transactionOverlay(transaction) {
     case "order":
       title = "pedido de " + transaction.order.name;
       content = transaction.order_purchase.map((p) => {
+        const name =
+          p.order_product.product !== null
+            ? p.order_product.product.name
+            : p.order_product.code;
         return (
           <div key={"O" + transaction.ID + "-" + p.order_product.ID}>
-            {p.order_product.product.name + ": " + p.amount}
+            {name + ": " + p.amount}
             <br />
           </div>
         );
-- 
GitLab