182 lines
3.9 KiB
Go
182 lines
3.9 KiB
Go
package queries
|
|
|
|
const CREATE_ORDER = `
|
|
INSERT INTO order_record(user_id, orderer, date_due, date_placed) VALUES ($1, $2, $3, $4);
|
|
`
|
|
|
|
const SET_ORDER_FILLED = `
|
|
UPDATE order_record SET filled = $1 WHERE id = $2
|
|
`
|
|
|
|
const SET_ORDER_DELIVERED = `
|
|
UPDATE order_record SET delivered = $1 WHERE id = $2
|
|
`
|
|
|
|
const SET_ORDER_PAID = `
|
|
UPDATE order_record SET amount_paid = $1 WHERE id = $2
|
|
`
|
|
|
|
const GET_ORDER_TOTAL_AND_BALANCE = `
|
|
SELECT
|
|
orec.id,
|
|
order_total,
|
|
order_total - orec.amount_paid AS balance
|
|
FROM
|
|
order_record orec
|
|
INNER JOIN (
|
|
SELECT
|
|
orec.id,
|
|
SUM(quantity * price) AS order_total
|
|
FROM
|
|
order_record orec
|
|
INNER JOIN order_item oi ON oi.order_id = orec.id
|
|
INNER JOIN item i ON oi.item_id = i.id
|
|
AND oi.order_id = $1
|
|
INNER 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
|
|
`
|
|
|
|
const GET_TOTAL_ORDER_FROM_ORDER_INFORMATION = `
|
|
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)
|
|
WHERE
|
|
orec.user_id = $1
|
|
AND orec.orderer = $2
|
|
AND orec.date_placed = $3
|
|
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;
|
|
`
|
|
|
|
const GET_TOTAL_ORDER_FROM_ORDER_ID = `
|
|
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)
|
|
WHERE orec.id = $1
|
|
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;
|
|
`
|
|
|
|
const GET_ORDER_TABLE = `
|
|
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 BY date_due DESC
|
|
OFFSET $1
|
|
LIMIT $2;
|
|
`
|
|
|
|
const UPDATE_ORDER_FILLED = `UPDATE order_record
|
|
SET filled = (
|
|
SELECT order_filled
|
|
FROM order_record orec
|
|
INNER JOIN (SELECT
|
|
orec.id,
|
|
COALESCE(EVERY(made = quantity), false) AS order_filled
|
|
FROM
|
|
order_record orec
|
|
LEFT JOIN order_item oi ON oi.order_id = orec.id
|
|
GROUP BY
|
|
orec.id) orec_result ON orec.id = orec_result.id
|
|
AND orec.id = $1
|
|
) WHERE order_record.id = $1
|
|
`
|