Actions and results

What each Projects button and automatic behaviour does, with worked numbers and what the system refuses.

On this page (36)

All Projects

ActionWhenWhat you doWhat happens
First use seeds the configurationA company that never opened ProjectsOpen Projects > All Projects; then open Configuration > Project Types and Cost Codes3 profiles, 24 types, cost codes 01-07, all lookups and 8 templates exist; Project Settings row exists (prefix PRJ, recognition On invoice). Opening twice creates nothing twice
KPI row and status tabsProjects in Planning, In Progress, Approved, At Risk, On Hold, Completed, CancelledCompare each KPI and tab count with the list filtered by that statusActive tile and tab = In Progress + Approved + At Risk; Planning tile = Planning + Draft; Completed tile = Completed + Closed finished this year; Total Contract Value sums non-cancelled projects; Billed % = invoiced / contract; archived projects are not counted
Search, filters, sort, paging25 test projectsSearch part of a code; filter Type, Customer, Project Manager; More Filters: billing method, Starts from / Ends by; sort Contract Value; Load moreRows match; first window 20, Load more shows 'Load more (20 / 25)' then all 25; Clear filters resets all
Card / list / calendar viewsSwitch views, reload the pageView choice remembered; list shows Code, Project, Status, Type, Customer, PM, Start, End, Progress, Contract Value, Margin; calendar shows starts, ends and milestones of the month
Favourite and archiveA projectCard menu > Favorite; title menu > Favourites; card menu > Archive; title menu > Archived; RestoreStar shows on the card and the project is in Favourites (per user). Archived project leaves All Projects and KPI totals, appears in Archived; Restore brings it back
Export CSVFiltered listExportCSV of the loaded rows: Code, Project, Status, Type, Customer, Project Manager, Start, End, Progress %, Contract Value, Profit Margin %
Duplicate a projectA project with phases, tasks, milestones, team and a posted timesheetCard menu > DuplicateNew project '<name> (copy)' with a new code; same phases, tasks (all Not started), milestones (pending), team and manager; no timesheets, expenses, invoices, budgets or documents copied

Create Project

ActionWhenWhat you doWhat happens
Create a blank projectCreate Project; name 'Test Blank A'; no template; start 2026-10-01; no finish; CreateCode PRJ-2026-001 (next free), status Planning, planned and expected finish 2026-12-30 (start + 90 days), currency = company currency (AED), retention = company default, a 'project' analytic dimension value with the code is made; Project 360 opens; activity 'Project created ... from scratch'
Create from the Construction template fitted to datesTemplate Construction Project; start 2026-10-01; planned finish 2027-03-29; contract value 1,000,000; manager 'Test PM'; CreateTemplate is 300 days, the dates give 180 so every duration is x0.6: phase 1 Design & Engineering 36 days (2026-10-01 to 2026-11-05) ... last phase ends 2027-03-29. 11 tasks, 5 milestones; billing plan lines for the 5 billing milestones (10%, 10%, 30%, 20%, 10%); draft budget 'Original budget' = 85% of contract split Labor 297,500, Material 255,000, Subcontract 170,000, Expenses 85,000, Overhead 42,500 (total 850,000); documents Contract, Project plan, Meeting minutes; team member 'Test PM' role Project Manager set as manager
Template without a planned finishTemplate Software Implementation; start 2026-10-01; no finish; contract 400,000; CreatePhases follow the template days (14+14+30+20+10 = 88, last phase ends 2026-12-27); planned finish stays start + 90 = 2026-12-30 (a template longer than 90 days, e.g. Construction's 300, moves the finish to its last phase end); billing lines 10/20/40/30% of 400,000 = 40,000 / 80,000 / 160,000 / 120,000
Field settings on createFields: Customer PO = Required, Location = HiddenOpen Create Project; try to create without a Customer POLocation input is gone; Customer PO marked *; create refused 'Customer PO is required by this company.'; with a PO it creates

Import projects

ActionWhenWhat you doWhat happens
Import a CSVCSV with 3 rows: 2 valid, 1 without a nameImport; choose file; Import (3); DoneLog: '<name>: created' twice and 'Skipped a row without a name.'; 2 new projects in the list

Project Portfolio

ActionWhenWhat you doWhat happens
Group the portfolioProjects with different managers and marginsGroup by Status, Project manager, Customer, Type, Region, ProfitabilityTotals per group; Profitability bands Loss / Below 10% / 10-20% / Above 20%; Region = text after the last comma of the location ('Al Barsha, Dubai' -> Dubai); groups without a value: Unassigned / Internal / Unclassified / Unspecified

Project 360

ActionWhenWhat you doWhat happens
Header and KPI cardsA project with budget, costs and invoicesOpen the project; compare the 8 KPI cards with Budget, Costs and Billing tabsContract value includes approved change orders; Approved Budget = approved version + approved budget changes; Actual % of budget shown; Days Remaining to expected finish (negative shows 'n Days Overdue')
Tabs follow the feature profileA Light-profile project and a Construction-profile projectOpen bothLight: Overview, Tasks, Costs, Billing, Documents, Issues, Reports only; Construction: also Gantt, Budget, BOQ, Resources, Procurement, Changes, Risks
Health strip and alertsTask finished 20 days ago still open; budget 100,000; actual 60,000; progress 30%Open OverviewSchedule 'Behind 20 days' red (over 14); Budget 'Within Budget'; alert 'Budget burning faster than progress' with evidence '60.0% of budget spent at 30.00% progress' (30 < 60 - 15); '1 task(s) overdue' with the task code and due date
Change statusProject in PlanningActions > In Progress; then Completed; then Closed (checklist not done)Moves allowed only along the status map; Completed sets the actual finish (today); Closed refused 'Finish the close checklist first: ...' listing the unticked items; every move is on the activity feed 'Status changed to ...'
Reopen a closed projectA closed projectActions > CompletedStatus Completed; edits work again; audit 'project.status' before closed after completed

Close checklist

ActionWhenWhat you doWhat happens
Close a projectCompleted projectActions > Close checklist; tick all 11; Save checklist; Actions > ClosedStatus Closed; project becomes read-only: any edit, task, time, invoice refused 'A closed or cancelled project is read-only. Reopen it through an authorised correction first.'

Edit Project

ActionWhenWhat you doWhat happens
Edit with revision checkTwo browsers on the same projectBrowser A saves a new name; browser B (not reloaded) savesB refused 'Somebody else changed this project. Reload it and try again.'; after reload B saves; activity 'Project updated - name'
Manual progressProgress from = Entered manually; Progress 40; Save; then change a task's progressHeader shows 40%; task changes no longer move the project progress (phases still roll up)

Project 360 header

ActionWhenWhat you doWhat happens
Change the project imageClick the image; choose a 400 KB JPGImage replaced on Project 360 and the card (new version in the address)

Overview

ActionWhenWhat you doWhat happens
Add a team memberTest employee with a user loginAdd Team Member; choose the employee; allocation 50; cost 75; bill 150; AddMember listed with role and '50%' and availability ('n% free', 'On leave' when on approved leave today, 'Overallocated (n%)' over 100 across active projects)
Add a note / meetingNote (+); Kind Meeting; Title 'Kick-off'; SaveActivity shows 'Meeting completed - Kick-off' with the details and your name

Tasks

ActionWhenWhat you doWhat happens
Create a taskProject with phase 3New Task; name; phase 3; start 2026-10-05; duration 10; planned hours 40; SaveCode 3.<n>; finish 2026-10-14; Days 10; activity 'Task created - ...'
Progress rolls up by planned hoursPhase with task A (40 h) and task B (10 h)Set A 50%, B 100%B becomes Completed with actual finish today; A In progress with actual start today; phase progress = (50x40 + 100x10) / 50 = 60%; project progress likewise across all non-cancelled tasks (tasks with no hours are averaged equally)
Kanban moveTasks in several statusesKanban; drag a card from Not started to CompletedTask Completed, progress 100, actual finish today
Delete rulesTask with time logged; task with a sub-task; plain taskDelete eachWith time: 'Time is logged on this task. Cancel it instead of deleting it.'; with sub-task: 'Move or delete its sub-tasks first.'; plain task deleted with its links and progress entries

Phases / WBS

ActionWhenWhat you doWhat happens
Add, rename, delete phasesAdd phase code 5 'Snagging'; rename it; delete a phase that has tasksAdded and renamed; delete refused 'Move or delete the phase's tasks first.'

Gantt

ActionWhenWhat you doWhat happens
Dependencies and the critical pathTasks A (5 days), B (3 days), C (2 days) all starting 2026-10-01Link A FS B, B FS C (lag 0); open Gantt; Critical path onlyEarly start of B = after A, C after B; A, B, C have float 0 and are critical; 'Critical path finishes 2026-10-10'; a parallel 2-day task D unlinked has float 8
Loop refusedA FS B and B FS C existLink C FS ARefused 'That link would make a loop in the schedule.'
Baseline and varianceTasks plannedSave baseline; a second user approves it; move a task's finish 3 days laterBaseline #1 'original' draft -> approved; tasks carry baseline dates; bars show baseline; variance table finish var. +3 (red); approving baseline #2 supersedes #1

Milestones

ActionWhenWhat you doWhat happens
Completing a billing milestoneMilestone 'Design Approval' with billing line (planned)Set milestone Completed; open BillingCompleted on = today; activity 'Milestone completed - Design Approval'; its billing step changes Planned -> Ready (Create Invoice shown)
Delete an invoiced milestoneMilestone whose billing step is invoicedDeleteRefused 'This milestone has been invoiced; it cannot be deleted.'

Daily progress

ActionWhenWhat you doWhat happens
Record quantitiesTask planned 250 m2Record 100 yesterday, 50 todayPlanned 250, Previous 100, Today 50, Cumulative 150, Balance 100, Progress 60%; task In progress (actual start = first entry date); at 250 the task is Completed

Configuration > Project Types

ActionWhenWhat you doWhat happens
Built-in recordsOpen a built-in type; change its code; then DeleteCode change refused 'The code of a built-in record stays; rename it instead.'; delete refused 'Built-in records are switched off, not deleted.' (untick Active instead)

Configuration > Cost Codes

ActionWhenWhat you doWhat happens
Delete switches offOwn cost code used on a budgetDeleteCode becomes inactive (kept for history); no longer offered on new budget lines

Configuration > Project Templates

ActionWhenWhat you doWhat happens
Own template used on createTemplate with 2 phases and a milestone billing 50%Create a project from itPhases, tasks, milestone and a 50% billing line created as defined

Project Settings

ActionWhenWhat you doWhat happens
Code prefixPrefix 'dxb'; Save; create a project starting 2027-01-10Prefix stored DXB; new code DXB-2027-001
Automatic accountsChart without a 'Retention Receivable' accountOpen Project SettingsEach empty account shows 'Automatic (<code>)'; the first retention posting creates 'Retention Receivable' (محتجزات مستحقة القبض) beside the receivable account

Features

ActionWhenWhat you doWhat happens
Switch off Change ordersCompany adminApplications > Project Management > Features: Change orders off; open the projects menu and a project's Changes tab; create a change orderCommercial > Change Orders leaves the menu; existing change orders still readable; create / move refused 'Change orders is disabled for this company.'
Switch off BOQ / procurement / subcontracts / earned value / recognitionSwitch each off in turn and try the matching write (save BOQ lines, purchase request, subcontract claim, save baseline, post recognition)Each refused '<Feature name> is disabled for this company.'; reads still work; menus Planning > BOQ, Commercial > Procurement / Commitments / Subcontracts go

Budget

ActionWhenWhat you doWhat happens
Draft, submit, approve (maker-checker)Draft budget with lines totalling 850,000; users A (edit) and B (approve)A: Save lines, Submit for approval; A tries Approve; B: ApproveSubmit notifies budget approvers except A; A refused 'Somebody other than who submitted it must approve it.'; B approves: state Approved, activity 'Budget approved - ...', KPI Approved Budget 850,000, the notice is cleared
Draft rulesA draft or submitted version existsNew revision; Submit an empty draft; edit lines of an approved version (API)'Finish the draft budget first.'; 'Add budget lines first.'; 'Only a draft budget can be edited; revise the approved one instead.'
Revision supersedesApproved version #1 (850,000)New revision (copies #1 lines); raise Material by 20,000; submit; B approves#2 Approved, #1 Revised; grid Original Budget still from #1 (850,000), Current Budget 870,000, Approved Changes 20,000 on Material
Reject and freezeSubmitted versionB: Reject; A resubmits; B approves; B: FreezeReject returns it to Draft; Freeze sets Frozen (still the current budget); freezing a non-approved one -> 'Only the approved budget can be frozen.'
Budget from an approved estimateApproved estimate: material 2,100 + labour 1,500New version 'From estimate'Draft lines per cost code/category: material 2,100.00, labour 1,500.00 ('From estimate n'); without an approved estimate -> 'Approve an estimate first.'
Budget vs actual grid arithmeticMaterial: current 255,000, actual 100,000, committed 180,000Open Budget vs ActualForecast Remaining = max(0, 255,000 - 100,000, 180,000) = 180,000; Forecast Final 280,000; Variance 255,000 - 280,000 = -25,000

Budget changes

ActionWhenWhat you doWhat happens
Transfer between cost codesApproved budget: Material 255,000, Subcontract 170,000A raises Transfer 10,000 Material -> Subcontract, reason; A tries Approve; B approvesRaised as Submitted BC-001; A refused 'Somebody other than who asked for it must decide it.'; after B: Material current 245,000, Subcontract 180,000, total unchanged; deciding again -> 'Only a submitted change can be decided.'
Increase / decreaseApproved budget 850,000Increase 15,000 on 03 Equipment (approved); Decrease 5,000 on 05 Expenses (approved)Current budget 860,000; changes approved before the current version's approval date are not counted twice after a new revision

Estimation

ActionWhenWhat you doWhat happens
Line cost and priceDraft estimateLine: material 'Concrete', qty 100, rate 20, waste 5, productivity 1, markup 10; Save linesCost = 100 x 1.05 x 20 / 1 = 2,100.00; price = 2,310.00; summary by category and Margin = (2,310 - 2,100) / 2,310 = 9.1%
Productivity divides the costSame line with productivity 2Server cost 1,050.00
Expand an assemblyAssembly CONC-C40 (waste 5%): Cement | material | 7 | bag | 18.5; Labour | labor | 0.5 | h | 40Line with assembly CONC-C40, qty 10; Expand assembliesExpected: the line becomes 'Concrete C40 per m3 - Cement' qty 70 rate 18.50 and '... - Labour' qty 5 rate 40, waste 5%. Record what happens
Submit, approve, copyDraft estimate with linesSubmit; approve (user B); Copy as new estimateApproved (older approved one becomes Superseded); the copy is a new Draft with the same lines; editing an approved one -> 'Only a draft estimate can be edited; make a new revision.'

BOQ

ActionWhenWhat you doWhat happens
Build a BOQ hierarchyNew contract BOQLines: Section A 'Substructure'; item A.1 Excavation 500 m3 x 25 (cost 18); item A.2 Blockwork 500 m2 x 120 (cost 90), tax 5; Save linesItems: 12,500 / 60,000; section A shows 72,500 and cost 54,000; KPI BOQ value 72,500, Estimated cost 54,000, Margin 18,500; tax total 3,625 (5% of items)
Approve and reviseDraft contract BOQ with linesApprove; try to edit; New version kind Revised copying itApproved; editing refused 'An approved BOQ is never edited; make a revised version.'; the revised draft carries lines and certified quantities; approving it supersedes the older approved one of the same kind
AI BOQ importCSV: 'Item No,Description,Unit,Qty,Amount' with a heading row 'Substructure' (no numbers) and '1.1,Excavation,m3,500,12500'AI BOQ import; review the preview; Use these lines; Save linesDetected columns code <- item no, description <- description, uom <- unit, quantity <- qty, amount <- amount; 1 section, 1 item; rate 25.00 derived from 12,500 / 500; nothing saved until Save lines

Resources

ActionWhenWhat you doWhat happens
Over-allocation refusedResource R booked 60% on project A 2026-10-01 to 10-31On project B add an assignment for R 50% 2026-10-15 to 11-15Refused 'The resource would be 110% allocated. Reduce the allocation or move the dates.'; 40% saves

Resource Planning

ActionWhenWhat you doWhat happens
Heatmap load and leaveR capacity 8 h/day assigned 50% this week; another resource on approved annual leave Mon-FriOpen Planning > Resource PlanningR week: capacity 40 h (Mon-Fri; Sat/Sun skipped), allocated 20 h, 50% Partial; the person on leave shows Leave (5 leave days); >100% shows Over

Timesheets

ActionWhenWhat you doWhat happens
Log, submit, approve by anotherMember M (cost 75 / bill 150) linked to user U; approver VU logs 8 h billable; Submit; U tries Approve; V approvesEntry draft -> submitted (approvers with project.resource.assign notified except U); U refused 'Somebody else approves your time.'; V approves: state Approved, cost 600.00 and value 1,200.00 count in actual cost (labour) immediately; notice resolved
Edit lockSubmitted entryU edits hours (API PATCH)Refused 'Submitted time is changed by its approver only.'; after Reject -> Back to draft U can edit again
Rate fallback from the employment contractMember with no cost rate, no pool resource, active contract gross 13,000/month, 8 h x 5 daysLog 8 hCost rate = 13,000 / (8 x 5 x 52 / 12 = 173.33 h) = 75.00; entry cost 600.00
Bulk approve3 submitted entries of other peopleTick them; Approve selectedAll 3 Approved; any entry of your own in the selection is refused 'Somebody else approves your time.'
Post labourApproved entry 8 h x 75Post (row action)Journal (source project, key project:time:<id>): Dr Labour cost 600.00 / Cr Project Cost Clearing 600.00 with project, branch, department, cost centre; state Posted; with 'Post time and expenses when approved' on, approval posts at once

Expenses

ActionWhenWhat you doWhat happens
Expense approve and postExpense 1,250 permits by U; approver V (project.budget.approve)U submits; U tries Approve; V approves; V postsU refused 'Somebody else approves your expense.'; Approved counts 1,250 as actual (expense, or the cost code's category); Post: Dr cost code GL account (if its prefix is a posting account) else Project expense / Cr Project Cost Clearing 1,250.00

Cost summary

ActionWhenWhat you doWhat happens
Post approved time & expenses2 approved entries and 1 approved expenseCosts > Post approved time & expenses; press again'2 timesheets and 1 expenses posted to the ledger.'; second press refused 'There is no approved time or expense waiting to post.'
Actual cost sourcesPosted vendor bill 40,000 on the project's analytic value; approved time 600; certified subcontract claim 50,000 not yet billedOpen Cost summaryActual = 40,000 + 600 + 50,000; when the claim's bill posts the claim stops counting (bill counted once); the project's own 'project:' journals are not read again from the GL

Forecast

ActionWhenWhat you doWhat happens
Revise ETCMaterial actual 100,000, system remaining 180,000Revise ETC Material 50,000, note; Save forecastEAC Material = 150,000; history row (manual, today); the project manager gets 'PRJ-...: forecast revised YYYY-MM-DD'

Project P&L

ActionWhenWhat you doWhat happens
P&L by percentage of completionContract 1,000,000, approved variation +12,000, progress 40%, direct cost 300,000, overhead rate 8%Costs > Project P&LRecognised = 1,012,000 x 40% = 404,800; gross profit 104,800; overhead 24,000 (8% of direct); project profit 80,800; Unbilled = recognised - invoiced
Other recognition methodsSame projectSwitch Revenue recognition to Cost to cost (actual 300,000, EAC 900,000), Milestone (completed milestones 30%), On invoiceCost to cost: 1,012,000 x 300,000/900,000 = 337,333.33; Milestone: 1,012,000 x 30% = 303,600; On invoice: recognised = invoiced

Revenue recognition

ActionWhenWhat you doWhat happens
Post unbilled revenuePercentage of completion, recognised 400,000, invoiced 300,000, no earlier runRecognise to today; Post 100,000.00; open the card againJournal key project:recognition:<run>: Dr Unbilled Revenue (Contract Asset) 100,000 / Cr Project revenue 100,000; run listed; button now 'The ledger matches'; posting again -> 'Nothing to recognise: the ledger already matches the project.'
Loss provisionEAC 1,100,000, contract 1,000,000, actual 450,000, recognised 400,000Open the card; PostForecast loss 100,000; already shown in P&L 50,000 (actual - recognised); provision 50,000: Dr Loss provision expense / Cr Project Loss Provision 50,000

Earned value

ActionWhenWhat you doWhat happens
EV indicesBAC 100,000, one task with baseline over 30 days, today half-way, progress 40%, actual 45,000Costs > Earned valuePV 50,000; EV 40,000; AC 45,000; CPI 0.89 (red), SPI 0.80 (red); CV -5,000; SV -10,000; EAC = 100,000 / 0.889 = 112,500; ETC 67,500; VAC -12,500

Cash flow

ActionWhenWhat you doWhat happens
Monthly plan and actualApproved budget 300,000 undated, project Oct-Dec 2026; billing plan 40% due in Nov of contract 500,000; customer receipt 100,000 in NovCosts > Cash flowPlanned cost 100,000 each month; planned revenue Nov 200,000; Cash in Nov 100,000; Net and Cumulative per month

Procurement

ActionWhenWhat you doWhat happens
Purchase request to draft POUser A (project.edit), approver BA: request 120 m3 x 310 with vendor; Submit; A tries Approve; B approves; A: Create Purchase OrderEstimated 37,200.00; A refused 'Somebody other than who asked must decide it.'; Approved request counts 37,200 as committed (material); Create PO makes a DRAFT purchase order in Purchasing (product 'Project services' PRJ-SERVICES when a line has none) with project / branch / department / cost centre; activity 'Purchase Order created - <number>'; state Ordered
Commitment hand-overOrdered request 37,200 with draft POConfirm the PO in Purchasing; post a vendor bill of 37,200While the PO is draft the request counts; once confirmed the PO net counts instead (never both); after the bill posts committed drops by the billed amount and actual rises
Request rulesSubmit a request without lines; order a submitted request; edit a submitted request'Add lines to a draft request, then submit it.'; 'Only an approved request can be ordered.'; 'Only a draft request can be changed.'

Material plan

ActionWhenWhat you doWhat happens
Track material quantitiesAdd Rebar 16 mm planned 40 t, purchased 40, received 40, issued 30, consumed 28, returned 1Saved; the procurement answer shows balance 40 - 28 + 1 = 13

Subcontracts

ActionWhenWhat you doWhat happens
Claim to certified netSubcontract value 200,000, retention 10%, advance 10% (vendor advance 20,000)New claim 50,000; reviewed; verified; certified (by a user with project.budget.approve)Certified 50,000; retention 5,000; advance recovery min(5,000, 20,000) = 5,000; net 40,000; committed falls to 150,000; certified counts as subcontract actual cost
Raise the vendor billCertified claim aboveRaise vendor billVendor bill for 45,000 (certified - recovery) carrying the project dimension, posted at once when possible; then Dr Accounts payable 5,000 / Cr Retention Payable 5,000. If posting is refused the bill stays draft and 'Post retention' appears; pressing it before the bill posts -> 'Post the claim's vendor bill first.'
Claim flow rulesClaim in ClaimedTry to certify directly (API); certify 60,000 after verifying 50,000'A claimed claim cannot be certified.'; 'Cannot certify more than was verified.'