cmc-sales/go/sql/queries/enquiries.sql

191 lines
6.4 KiB
SQL

-- name: GetEnquiry :one
SELECT e.*,
u.first_name as user_first_name,
u.last_name as user_last_name,
c.name as customer_name,
contact.first_name as contact_first_name,
contact.last_name as contact_last_name,
contact.email as contact_email,
contact.mobile as contact_mobile,
contact.direct_phone as contact_direct_phone,
contact.phone as contact_phone,
contact.phone_extension as contact_phone_extension,
s.name as status_name,
p.name as principle_name,
p.short_name as principle_short_name,
st.name as state_name,
st.shortform as state_shortform,
co.name as country_name
FROM enquiries e
LEFT JOIN users u ON e.user_id = u.id
LEFT JOIN customers c ON e.customer_id = c.id
LEFT JOIN users contact ON e.contact_user_id = contact.id
LEFT JOIN statuses s ON e.status_id = s.id
LEFT JOIN principles p ON e.principle_id = p.id
LEFT JOIN states st ON e.state_id = st.id
LEFT JOIN countries co ON e.country_id = co.id
WHERE e.id = ?;
-- name: ListEnquiries :many
SELECT e.*,
u.first_name as user_first_name,
u.last_name as user_last_name,
c.name as customer_name,
contact.first_name as contact_first_name,
contact.last_name as contact_last_name,
contact.email as contact_email,
contact.mobile as contact_mobile,
contact.direct_phone as contact_direct_phone,
contact.phone as contact_phone,
contact.phone_extension as contact_phone_extension,
s.name as status_name,
p.name as principle_name,
p.short_name as principle_short_name
FROM enquiries e
LEFT JOIN users u ON e.user_id = u.id
LEFT JOIN customers c ON e.customer_id = c.id
LEFT JOIN users contact ON e.contact_user_id = contact.id
LEFT JOIN statuses s ON e.status_id = s.id
LEFT JOIN principles p ON e.principle_id = p.id
WHERE e.archived = 0
ORDER BY e.id DESC
LIMIT ? OFFSET ?;
-- name: ListArchivedEnquiries :many
SELECT e.*,
u.first_name as user_first_name,
u.last_name as user_last_name,
c.name as customer_name,
contact.first_name as contact_first_name,
contact.last_name as contact_last_name,
s.name as status_name,
p.name as principle_name,
p.short_name as principle_short_name
FROM enquiries e
LEFT JOIN users u ON e.user_id = u.id
LEFT JOIN customers c ON e.customer_id = c.id
LEFT JOIN users contact ON e.contact_user_id = contact.id
LEFT JOIN statuses s ON e.status_id = s.id
LEFT JOIN principles p ON e.principle_id = p.id
WHERE e.archived = 1
ORDER BY e.id DESC
LIMIT ? OFFSET ?;
-- name: CreateEnquiry :execresult
INSERT INTO enquiries (
created, title, user_id, customer_id, contact_id, contact_user_id,
state_id, country_id, principle_id, status_id, comments,
principle_code, gst, billing_address_id, shipping_address_id,
posted, archived
) VALUES (
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
);
-- name: UpdateEnquiry :exec
UPDATE enquiries
SET title = ?, user_id = ?, customer_id = ?, contact_id = ?, contact_user_id = ?,
state_id = ?, country_id = ?, principle_id = ?, status_id = ?, comments = ?,
principle_code = ?, gst = ?, billing_address_id = ?, shipping_address_id = ?,
posted = ?, submitted = ?
WHERE id = ?;
-- name: UpdateEnquiryStatus :exec
UPDATE enquiries SET status_id = ? WHERE id = ?;
-- name: ArchiveEnquiry :exec
UPDATE enquiries SET archived = 1 WHERE id = ?;
-- name: UnarchiveEnquiry :exec
UPDATE enquiries SET archived = 0 WHERE id = ?;
-- name: MarkEnquirySubmitted :exec
UPDATE enquiries SET submitted = ? WHERE id = ?;
-- name: SearchEnquiries :many
SELECT e.*,
u.first_name as user_first_name,
u.last_name as user_last_name,
c.name as customer_name,
contact.first_name as contact_first_name,
contact.last_name as contact_last_name,
s.name as status_name,
p.name as principle_name,
p.short_name as principle_short_name
FROM enquiries e
LEFT JOIN users u ON e.user_id = u.id
LEFT JOIN customers c ON e.customer_id = c.id
LEFT JOIN users contact ON e.contact_user_id = contact.id
LEFT JOIN statuses s ON e.status_id = s.id
LEFT JOIN principles p ON e.principle_id = p.id
WHERE e.archived = 0
AND (
e.title LIKE CONCAT('%', ?, '%') OR
c.name LIKE CONCAT('%', ?, '%') OR
CONCAT(contact.first_name, ' ', contact.last_name) LIKE CONCAT('%', ?, '%')
)
ORDER BY e.id DESC
LIMIT ? OFFSET ?;
-- name: GetEnquiriesByUser :many
SELECT e.*,
u.first_name as user_first_name,
u.last_name as user_last_name,
c.name as customer_name,
contact.first_name as contact_first_name,
contact.last_name as contact_last_name,
s.name as status_name,
p.name as principle_name,
p.short_name as principle_short_name
FROM enquiries e
LEFT JOIN users u ON e.user_id = u.id
LEFT JOIN customers c ON e.customer_id = c.id
LEFT JOIN users contact ON e.contact_user_id = contact.id
LEFT JOIN statuses s ON e.status_id = s.id
LEFT JOIN principles p ON e.principle_id = p.id
WHERE e.user_id = ? AND e.archived = 0
ORDER BY e.id DESC
LIMIT ? OFFSET ?;
-- name: GetEnquiriesByCustomer :many
SELECT e.*,
u.first_name as user_first_name,
u.last_name as user_last_name,
c.name as customer_name,
contact.first_name as contact_first_name,
contact.last_name as contact_last_name,
s.name as status_name,
p.name as principle_name,
p.short_name as principle_short_name
FROM enquiries e
LEFT JOIN users u ON e.user_id = u.id
LEFT JOIN customers c ON e.customer_id = c.id
LEFT JOIN users contact ON e.contact_user_id = contact.id
LEFT JOIN statuses s ON e.status_id = s.id
LEFT JOIN principles p ON e.principle_id = p.id
WHERE e.customer_id = ? AND e.archived = 0
ORDER BY e.id DESC
LIMIT ? OFFSET ?;
-- name: CountEnquiries :one
SELECT COUNT(*) FROM enquiries WHERE archived = 0;
-- name: CountEnquiriesByStatus :one
SELECT COUNT(*) FROM enquiries WHERE status_id = ? AND archived = 0;
-- name: CountEnquiriesByPrinciple :one
SELECT COUNT(*) FROM enquiries WHERE principle_code = ?;
-- name: CountEnquiriesByPrincipleAndState :one
SELECT COUNT(*) FROM enquiries WHERE principle_code = ? AND state_id = ?;
-- name: GetAllStatuses :many
SELECT id, name FROM statuses ORDER BY name;
-- name: GetAllPrinciples :many
SELECT id, name, short_name, code FROM principles ORDER BY name;
-- name: GetAllStates :many
SELECT id, name, shortform, enqform FROM states ORDER BY name;
-- name: GetAllCountries :many
SELECT id, name FROM countries ORDER BY name;