Fishbowl Query: QBO Invoice ID
SELECT DISTINCT
ps.extTxnID AS `QuickBooks Online Invoice ID`,
CASE
WHEN RIGHT(TRIM(s.num), 3) REGEXP '^-[0-9][0-9]$'
THEN LEFT(TRIM(s.num), CHAR_LENGTH(TRIM(s.num)) - 3)
ELSE TRIM(s.num)
END AS `Zoey Order Number`,
qbc.name AS `QuickBooks Class Name`
FROM postso ps
INNER JOIN so s
ON s.id = ps.soid
INNER JOIN qbclass qbc
ON qbc.id = s.qbClassId
CROSS JOIN (
SELECT
(
SELECT fsh1.lastRunTime
FROM fbschedule fs1
INNER JOIN fbschedulehistory fsh1
ON fsh1.scheduleId = fs1.id
WHERE TRIM(fs1.name) = 'Invoices to Zoey'
ORDER BY fsh1.lastRunTime DESC
LIMIT 1
) AS CurrentRunTime,
(
SELECT fsh2.lastRunTime
FROM fbschedule fs2
INNER JOIN fbschedulehistory fsh2
ON fsh2.scheduleId = fs2.id
WHERE TRIM(fs2.name) = 'Invoices to Zoey'
ORDER BY fsh2.lastRunTime DESC
LIMIT 1, 1
) AS PreviousRunTime
) cutoff
WHERE NULLIF(TRIM(ps.extTxnID), '') IS NOT NULL
AND UPPER(TRIM(qbc.name)) = 'ZOEY'
AND NOT EXISTS (
SELECT 1
FROM postorderstatus pos
WHERE pos.id = ps.statusId
AND (
UPPER(TRIM(pos.name)) LIKE '%VOID%'
OR UPPER(TRIM(pos.name)) LIKE '%DELET%'
OR UPPER(TRIM(pos.name)) LIKE '%CANCEL%'
)
)
AND NOT EXISTS (
SELECT 1
FROM sostatus sos
WHERE sos.id = s.statusId
AND (
UPPER(TRIM(sos.name)) LIKE '%VOID%'
OR UPPER(TRIM(sos.name)) LIKE '%DELET%'
OR UPPER(TRIM(sos.name)) LIKE '%CANCEL%'
)
)
AND cutoff.CurrentRunTime IS NOT NULL
AND cutoff.PreviousRunTime IS NOT NULL
/*
Capture invoices whose QBO ID record was updated between
the prior hourly run and the current hourly run.
*/
AND ps.dateLastModified > cutoff.PreviousRunTime
AND ps.dateLastModified <= cutoff.CurrentRunTime
ORDER BY
ps.extTxnID;Updated 11 days ago
