feat: order get requests
This commit is contained in:
105
api/utils/consts.go
Normal file
105
api/utils/consts.go
Normal file
@@ -0,0 +1,105 @@
|
||||
package utils
|
||||
|
||||
const PAGE_SIZE = 10
|
||||
|
||||
const PAGE_SIZE_STRING = "10"
|
||||
|
||||
// order page filters
|
||||
const FUTURE_FILTER = 1
|
||||
const PAST_FILTER = 2
|
||||
const FILLED_FILTER = 4
|
||||
const UNFILLED_FILTER = 8
|
||||
const DELIVERED_FILTER = 16
|
||||
const UNDELIVERED_FILTER = 32
|
||||
const PAID_FILTER = 64
|
||||
const UNPAID_FILTER = 128
|
||||
const ASCEND_DATE_DUE = 256
|
||||
|
||||
func GetOrderTableQueryString(filter int64) string {
|
||||
query_string_first_part := `
|
||||
WITH order_bill AS (
|
||||
SELECT
|
||||
orec.id,
|
||||
COALESCE(order_total, 0) AS order_total,
|
||||
COALESCE(order_total - orec.amount_paid, 0) AS balance
|
||||
FROM
|
||||
order_record orec
|
||||
INNER JOIN (
|
||||
SELECT
|
||||
orec.id,
|
||||
SUM(quantity * price) AS order_total
|
||||
FROM
|
||||
order_record orec
|
||||
LEFT JOIN order_item oi ON oi.order_id = orec.id
|
||||
LEFT JOIN item i ON oi.item_id = i.id
|
||||
LEFT JOIN item_price_history iph ON iph.item_id = i.id
|
||||
AND iph.valid_from <= oi.created_at
|
||||
AND (iph.valid_to IS NULL OR iph.valid_to > oi.created_at)
|
||||
GROUP BY orec.id
|
||||
) totals ON orec.id = totals.id
|
||||
)
|
||||
|
||||
SELECT
|
||||
orec.id,
|
||||
user_id,
|
||||
orderer,
|
||||
date_due,
|
||||
date_placed,
|
||||
amount_paid,
|
||||
order_total,
|
||||
balance,
|
||||
filled,
|
||||
delivered
|
||||
FROM
|
||||
order_record orec
|
||||
INNER JOIN order_bill ON order_bill.id = orec.id
|
||||
`
|
||||
|
||||
order := "DESC"
|
||||
if filter&ASCEND_DATE_DUE > 0 {
|
||||
order = "ASC"
|
||||
}
|
||||
|
||||
query_string_second_part := `
|
||||
ORDER BY date_due ` + order + `
|
||||
OFFSET $1
|
||||
LIMIT $2;
|
||||
|
||||
`
|
||||
filter = filter & ^ASCEND_DATE_DUE
|
||||
|
||||
conditions := ""
|
||||
if filter > 0 {
|
||||
if filter&FUTURE_FILTER > 0 {
|
||||
conditions += "AND date_due > now()\n"
|
||||
}
|
||||
if filter&PAST_FILTER > 0 {
|
||||
conditions += "AND date_due < now()\n"
|
||||
}
|
||||
if filter&FILLED_FILTER > 0 {
|
||||
conditions += "AND filled = TRUE\n"
|
||||
}
|
||||
if filter&UNFILLED_FILTER > 0 {
|
||||
conditions += "AND filled = FALSE\n"
|
||||
}
|
||||
if filter&DELIVERED_FILTER > 0 {
|
||||
conditions += "AND delivered = TRUE\n"
|
||||
}
|
||||
if filter&UNDELIVERED_FILTER > 0 {
|
||||
conditions += "AND delivered = FALSE\n"
|
||||
}
|
||||
if filter&PAID_FILTER > 0 {
|
||||
conditions += "AND paid = TRUE\n"
|
||||
}
|
||||
if filter&UNPAID_FILTER > 0 {
|
||||
conditions += "AND paid = FALSE\n"
|
||||
}
|
||||
if len(conditions) > 0 {
|
||||
conditions = "WHERE " + conditions[4:]
|
||||
}
|
||||
}
|
||||
|
||||
query_string := query_string_first_part + conditions + query_string_second_part
|
||||
|
||||
return query_string
|
||||
}
|
||||
Reference in New Issue
Block a user