cmc-sales/go-app/sql/queries/quotes.sql

141 lines
4 KiB
SQL

-- name: GetExpiringSoonQuotes :many
SELECT
d.id AS document_id,
u.username,
e.id AS enquiry_id,
e.title as enquiry_ref,
q.date_issued,
q.valid_until,
COALESCE(qr_latest.reminder_type, 0) AS latest_reminder_type,
COALESCE(qr_latest.date_sent, CAST('1970-01-01 00:00:00' AS DATETIME)) AS latest_reminder_sent_time
FROM quotes q
JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
LEFT JOIN (
SELECT qr1.quote_id, qr1.reminder_type, qr1.date_sent
FROM quote_reminders qr1
JOIN (
SELECT quote_id, MAX(reminder_type) AS max_type
FROM quote_reminders
GROUP BY quote_id
) qr2 ON qr1.quote_id = qr2.quote_id AND qr1.reminder_type = qr2.max_type
) qr_latest ON qr_latest.quote_id = d.id
WHERE
q.valid_until >= CURRENT_DATE
AND q.valid_until <= DATE_ADD(CURRENT_DATE, INTERVAL ? DAY)
AND e.status_id = 5
ORDER BY q.valid_until;
-- name: GetExpiringSoonQuotesOnDay :many
SELECT
d.id AS document_id,
u.username,
e.id AS enquiry_id,
e.title as enquiry_ref,
q.date_issued,
q.valid_until,
COALESCE(qr_latest.reminder_type, 0) AS latest_reminder_type,
COALESCE(qr_latest.date_sent, CAST('1970-01-01 00:00:00' AS DATETIME)) AS latest_reminder_sent_time
FROM quotes q
JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
LEFT JOIN (
SELECT qr1.quote_id, qr1.reminder_type, qr1.date_sent
FROM quote_reminders qr1
JOIN (
SELECT quote_id, MAX(reminder_type) AS max_type
FROM quote_reminders
GROUP BY quote_id
) qr2 ON qr1.quote_id = qr2.quote_id AND qr1.reminder_type = qr2.max_type
) qr_latest ON qr_latest.quote_id = d.id
WHERE
q.valid_until >= CURRENT_DATE
AND q.valid_until = DATE_ADD(CURRENT_DATE, INTERVAL ? DAY)
AND e.status_id = 5
ORDER BY q.valid_until;
-- name: GetRecentlyExpiredQuotes :many
SELECT
d.id AS document_id,
u.username,
e.id AS enquiry_id,
e.title as enquiry_ref,
q.date_issued,
q.valid_until,
COALESCE(qr_latest.reminder_type, 0) AS latest_reminder_type,
COALESCE(qr_latest.date_sent, CAST('1970-01-01 00:00:00' AS DATETIME)) AS latest_reminder_sent_time
FROM quotes q
JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
LEFT JOIN (
SELECT qr1.quote_id, qr1.reminder_type, qr1.date_sent
FROM quote_reminders qr1
JOIN (
SELECT quote_id, MAX(reminder_type) AS max_type
FROM quote_reminders
GROUP BY quote_id
) qr2 ON qr1.quote_id = qr2.quote_id AND qr1.reminder_type = qr2.max_type
) qr_latest ON qr_latest.quote_id = d.id
WHERE
q.valid_until < CURRENT_DATE
AND valid_until >= DATE_SUB(CURRENT_DATE, INTERVAL ? DAY)
AND e.status_id = 5
ORDER BY q.valid_until DESC;
-- name: GetRecentlyExpiredQuotesOnDay :many
SELECT
d.id AS document_id,
u.username,
e.id AS enquiry_id,
e.title as enquiry_ref,
q.date_issued,
q.valid_until,
COALESCE(qr_latest.reminder_type, 0) AS latest_reminder_type,
COALESCE(qr_latest.date_sent, CAST('1970-01-01 00:00:00' AS DATETIME)) AS latest_reminder_sent_time
FROM quotes q
JOIN documents d ON d.id = q.document_id
JOIN users u ON u.id = d.user_id
JOIN enquiries e ON e.id = q.enquiry_id
LEFT JOIN (
SELECT qr1.quote_id, qr1.reminder_type, qr1.date_sent
FROM quote_reminders qr1
JOIN (
SELECT quote_id, MAX(reminder_type) AS max_type
FROM quote_reminders
GROUP BY quote_id
) qr2 ON qr1.quote_id = qr2.quote_id AND qr1.reminder_type = qr2.max_type
) qr_latest ON qr_latest.quote_id = d.id
WHERE
q.valid_until < CURRENT_DATE
AND valid_until = DATE_SUB(CURRENT_DATE, INTERVAL ? DAY)
AND e.status_id = 5
ORDER BY q.valid_until DESC;
-- name: GetQuoteRemindersByType :many
SELECT id, quote_id, reminder_type, date_sent, username
FROM quote_reminders
WHERE quote_id = ? AND reminder_type = ?
ORDER BY date_sent;
-- name: InsertQuoteReminder :execresult
INSERT INTO quote_reminders (quote_id, reminder_type, date_sent, username)
VALUES (?, ?, ?, ?);