Production Reports
Pick a date range and instantly read three roll-up tables — order status, finished-goods output, and component consumption — all summarised from your Manufacturing Orders on one read-only page.
production/Production_reports) never creates, edits, or deletes anything. It only
summarises data that comes from the
Manufacturing Orders workflow. For an at-a-glance,
all-time snapshot of the whole module instead, see the
Production Overview dashboard.
What this page gives you
The page renders one filter form and three report tables, each in its own section. When you open it, the reports load automatically; when you change the dates and click Generate Report, all three refresh together.
Order counts plus total planned vs. produced quantity for every status in the range, with a grand-total footer.
Finished goods actually produced by completed orders whose completion date falls inside the range.
Raw materials / components actually consumed by those same completed orders.
production_report permission — distinct
from the base production permission that controls the
Overview and the dashboard widgets. A user can have one without the other.
The Production module must also be enabled in Settings → Manage Modules.
The date-range filter
At the top of the page is a single inline filter form (production-report-filter) with two
date inputs and one button. The range you choose is applied to all three reports at once.
| Field | Meaning | Required | Notes |
|---|---|---|---|
report_start_date — Planned Start |
Lower bound of the reporting date range. For the MO Status Summary it filters on the
order's planned_start_date; for Output by Period and
Component Consumption it filters on the completed order's actual_end_date. |
Required | HTML date input. Defaults to the first day of the current month
(date('Y-m-01')). |
report_end_date — Planned End |
Upper bound of the reporting date range (same column per report as Planned Start above). | Required | HTML date input. Defaults to the last day of the current month
(date('Y-m-t')). |
| Generate Report button | Re-reads both date inputs and reloads all three report tables. | Action | Primary button (generate-report-btn) with a refresh icon. |
BETWEEN). If
either field is blank, the filter is skipped entirely and the report returns all-time
data — not an empty result. Always set both ends of the range for a scoped report.
Reports auto-load when you open the page
You do not have to click anything to see numbers. On page load the page immediately runs its
loadReports() routine, which fires all three POST requests once for the default
current-month range. A global loading overlay (appLoader) is shown while the three
requests run and hides once they all settle.
-
Open Production Reports
Navigate to Production → Production Reports (
production/Production_reports). The date range is pre-filled to this calendar month (1st → last day). -
The three reports load automatically
All three AJAX calls fire once immediately for the default range, so you see current-month figures before touching anything.
-
Adjust the dates if needed
Set Planned Start and Planned End to the window you want. Remember: leave both set — clearing one turns the range off and returns all-time data.
-
Click Generate Report
All three tables refresh together. The loader shows while they fetch and hides when done.
1. Manufacturing Order Status Summary
Rendered into #report-mo-summary from
production/Production_reports/mo_summary. This table rolls up your Manufacturing Orders by
status, filtered by planned_start_date falling between the two dates. It shows one
row per status in a fixed order, followed by a grand-total footer.
| Column | Meaning | Required | Notes |
|---|---|---|---|
status — Status |
The MO lifecycle state for the row. | Display | Rendered as a coloured status label; all five statuses are always shown. |
total — Total Orders |
Number of MOs in that status within the date range. | Display | Plain integer count. |
quantity_planned — Total Planned Qty |
Sum of quantity_planned across the MOs in that status. |
Display | Decimal-formatted (convert_number_to_decimal). |
quantity_produced — Total Produced Qty |
Sum of quantity_produced across the MOs in that status. |
Display | Decimal-formatted (convert_number_to_decimal). |
Fixed row order and the Total footer
The five status rows always appear in this order, seeded from the module's status list, so the layout is stable from month to month:
A Total footer row (tfoot) sums Total Orders, Total Planned Qty, and
Total Produced Qty across all five statuses.
0. Because every status is seeded up front, this table never shows a
“No record found” empty state (unlike the other two reports below).
2. Output by Period
Rendered into #report-output from
production/Production_reports/output_report. This report answers “what did we actually
make?” — it lists finished goods produced by orders that are complete
(status = 'done') and whose actual_end_date falls inside the date range,
aggregated by finished-good item.
| Column | Meaning | Required | Notes |
|---|---|---|---|
item_title — Finished Good |
The finished-good item produced by completed orders. | Display | Resolved from the item's default variant title; shows - when null. |
order_count — Total Orders |
Number of completed (done) MOs that produced this item in the range. | Display | Integer count. |
total_produced — Total Produced Qty |
Sum of quantity_produced for this item across completed orders. |
Display | Decimal-formatted; rows are ordered by this value, descending. |
unit_title — Unit |
Unit of measure of the finished good. | Display | Shows - when null. |
status = 'done'. Orders that are draft, confirmed, or in progress never contribute to
this report — even if some quantity has already been produced against them.
3. Component Consumption
Rendered into #report-consumption from
production/Production_reports/component_consumption. This report answers “what did we
actually use?” — it lists the components / raw materials consumed by the same set of completed
orders (status = 'done', actual_end_date in range), aggregated by component
item and drawn from the order's consumed-component lines.
| Column | Meaning | Required | Notes |
|---|---|---|---|
item_title — Component |
The component / raw-material item consumed by completed orders. | Display | Resolved from the item's default variant title; shows - when null. |
order_count — Total Orders |
Distinct count of completed (done) MOs that consumed this component in the range. | Display | Counts distinct manufacturing orders (COUNT(DISTINCT mo.id)). |
total_consumed — Consumed Quantity |
Sum of quantity_consumed for this component across completed orders. |
Display | Decimal-formatted; rows are ordered by this value, descending. |
unit_title — Unit |
Unit of measure of the component. | Display | Shows - when null. |
Why the three tables can disagree
The single most important thing to understand about this page is that the three reports do not all filter on the same date column. The same date range can therefore produce numbers that look inconsistent — and that is by design.
| Report | Which orders | Date column filtered |
|---|---|---|
| MO Status Summary | All statuses (Draft → Cancelled) | planned_start_date BETWEEN start and end |
| Output by Period | Only Done orders | actual_end_date BETWEEN start and end |
| Component Consumption | Only Done orders | actual_end_date BETWEEN start and end |
planned_start_date, yet in Output / Consumption for the
month of its actual_end_date. Expect the totals across the three tables to differ for
the same range.
Manufacturing Order status legend
Every status in the reports (and in the recent-orders table on the Overview) is rendered as a coloured label. Here is the full lifecycle and what each colour means.
SOP — running the monthly production report
-
Check your access
You need the
production_reportpermission and the Production module must be enabled in Settings → Manage Modules. -
Open the page
Go to Production → Production Reports. The date range defaults to the current calendar month (1st → last day) and the three tables load automatically.
-
Set your window
Adjust Planned Start and Planned End if you need a different period. Keep both filled so the range actually applies.
-
Generate
Click Generate Report. All three tables refresh together while the loader is shown.
-
Read the big picture first
Start with Manufacturing Order Status Summary — counts and planned-vs-produced quantities per status, plus the grand-total row.
-
Read actual output
Move to Output by Period for the finished goods actually produced by completed orders in the range (top rows = highest volume).
-
Read actual consumption
Finish with Component Consumption for the materials actually consumed by those completed orders.
-
Mind the date columns
Remember the Status Summary filters on
planned_start_date, while Output and Consumption filter on theactual_end_dateof DONE orders — so a done order can appear in one report and not another depending on its dates.