From 0f1989745ec26aa0dc286257003455627729e7d3 Mon Sep 17 00:00:00 2001
From: meskio <meskio@sindominio.net>
Date: Sun, 4 Jul 2021 18:46:58 +0200
Subject: [PATCH] List transactions by product

---
 api/db/transaction.go | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/api/db/transaction.go b/api/db/transaction.go
index 9756329..2ef9a38 100644
--- a/api/db/transaction.go
+++ b/api/db/transaction.go
@@ -4,6 +4,8 @@ import (
 	"errors"
 	"fmt"
 	"log"
+	"strconv"
+	"strings"
 	"time"
 
 	"gorm.io/gorm"
@@ -69,6 +71,22 @@ func (d *DB) ListTransactions(query map[string][]string) (transactions []Transac
 			tx = tx.Where("proxy in ?", v)
 		case "type":
 			tx = tx.Where("type in ?", v)
+		case "product":
+			var ids []interface{}
+			where := make([]string, len(v))
+			for i := range v {
+				var id int
+				id, err = strconv.Atoi(v[i])
+				if err != nil {
+					return
+				}
+				ids = append(ids, id, id)
+				where[i] = "purchases.product = ? OR order_products.product_code = ?"
+			}
+			tx = tx.Joins("left join purchases on purchases.`transaction` = transactions.id").
+				Joins("left join order_purchases on order_purchases.transaction_id = transactions.id").
+				Joins("left join order_products on order_products.id = order_purchases.order_product_id").
+				Where(strings.Join(where, " OR "), ids...)
 		default:
 			log.Printf("Unexpected transaction query: %s %v", k, v)
 		}
-- 
GitLab