01
About this report
One row per project not marked inactive, with its customer, status, start date, projected end date, hours logged in the last 30 days and to date, and the date of the most recent time entry.
The report opens with Closed projects filtered out. Clear the Status filter to see them. A project In Progress with no hours for several weeks may need a status update. The project name opens the project record.
02
Sample preview
Fictional figures in the shape you will see. Yours come from your account.
| Project | Customer | Status | Start date | Projected end | Hours, last 30 days | Hours to date | Last time entry |
|---|---|---|---|---|---|---|---|
| Harbor & Pine Co. : Retail rollout | Harbor & Pine Co. | In Progress | 2026-02-01 | 2026-12-15 | 212.50 | 1,480 | 2026-09-22 |
| Brightline Dental Group : Phase 2 | Brightline Dental Group | In Progress | 2026-05-12 | 2026-11-30 | 96 | 610 | 2026-09-22 |
| Maple Ridge Clinics : Support | Maple Ridge Clinics | In Progress | 2026-01-01 | 14 | 262.50 | 2026-09-18 | |
| Northgate Supply : Integration | Northgate Supply | Pending | 2026-10-01 | 2027-01-31 | 0 | 0 |
03
The SuiteQL
This is the query each report runs. Read it, copy it, or change it after import.
SELECT j.id AS project__id,
j.altname AS project,
NVL(cu.altname, cu.entityid) AS customer,
NVL(BUILTIN.DF(j.entitystatus), '(no status)') AS status,
TO_CHAR(j.startdate, 'YYYY-MM-DD') AS start_date,
TO_CHAR(j.projectedenddate, 'YYYY-MM-DD') AS projected_end,
NVL(h.hours_30, 0) AS hours_30,
NVL(h.hours_total, 0) AS hours_total,
TO_CHAR(h.last_entry, 'YYYY-MM-DD') AS last_time_entry
FROM job j
JOIN entity je ON je.id = j.id
LEFT JOIN entity cu ON cu.id = je.toplevelparent
LEFT JOIN (SELECT tb.customer,
SUM(CASE WHEN tb.trandate > TRUNC(SYSDATE) - 30 THEN tb.hours ELSE 0 END) AS hours_30,
SUM(tb.hours) AS hours_total,
MAX(tb.trandate) AS last_entry
FROM timebill tb
WHERE tb.trandate <= SYSDATE
GROUP BY tb.customer) h ON h.customer = j.id
WHERE j.isinactive = 'F'
ORDER BY customer, project04