Consolidated Lists
The repository contains four source-declared consolidated-list variants: standard, modal, backup, and PPMP. They define list producers and presentation templates, but no caller, registration, or dispatch boundary was returned for this run. Treat them as implementation surfaces, not confirmed runtime screens.
Compare the list variants
| Variant | Source surface | Selection contract | Population boundary | Material limitation |
|---|---|---|---|---|
| Standard | imspr/novusoft/include/consolidation/custom/consolidate-list.php and imspr/novusoft/include/consolidation/view/consolidate-list.php |
account contains dept|account_code|year|dbm, with an optional fifth PR-ID field |
Approved, non-deleted, unconsolidated item-catalog records | The view expects $account_list, but the inspected producer does not assign it. The optional dbm filter is concatenated into SQL without source-proven validation or parameterization. |
| Modal | imspr/novusoft/include/consolidation/custom/consolidate-list-modal.php and imspr/novusoft/include/consolidation/view/consolidate-list-modal.php |
Account options encode dept|account_code|year|dbm, optionally followed by grouped PR IDs |
Four account-record queries cover 2023, post-2023, and corresponding unconsolidated records | No variant-specific limitation identified in the inspected source. |
| Backup | imspr/novusoft/include/consolidation/custom/consolidate-list-backup.php and imspr/novusoft/include/consolidation/view/consolidate-list-backup.php |
A simple account_code selector |
Distinct account codes from unconsolidated item-catalog records | The view exposes an account-code selector, but the producer does not read arranged POST data or a selected account_code; its item query selects all rows where consolidated = 0, so the source does not establish selector-driven filtering of the constructed item rows. The generated table assignment is commented out. The active table response is Please Select Account Code. |
| PPMP | imspr/novusoft/include/ppmp-consolidate/custom/consolidate-list.php |
account contains dept|account_code|year|modepro, with an optional fifth PR-ID field |
Approved, unconsolidated PPMP catalog items matching account, department, year, and mode of procurement | No variant-specific limitation identified in the inspected source. |
Inspect variant details
[
{
"title": "Standard list",
"body": "The producer reads arranged POST data through **arrangePost** and splits `account` with `explode('|', ...)`. The positional values supply department, account, year, and DBM mode; a fifth value is split into PR catalog IDs. When the fourth value is `2`, the source adds an alternative DBM predicate written as `b.dbm = null`; otherwise it matches the requested DBM value. Without the fifth field, the query requires `b.consolidated = 'FOR CONSOLIDATE'`; with it, the query filters `b.pr_catalog_id in ?`. The query joins `tbl_bmct_pr_item_catalog` to `tbl_bmct_pr_catalog`, requires `b.deleted = 0`, `a.consolidated = 0`, and `b.pr_status = 'APPROVED'`, groups by item code, and orders by item description. A non-empty result is converted into checked item selectors, monthly quantities, price-change markers, totals, earmarks, variance values, and summary fields. An empty result assigns `NO PR LIST APPROVED`. The companion view is an `Item List` modal with account description, budget, total, variance, remarks, status, and Consolidate and Close controls. The optional POST `dbm` value is concatenated into an `a.item_code like '<value>%'` predicate; this boundary shows no validation or parameterization in the inspected source."
},
{
"title": "Modal account list",
"body": "The modal producer runs four source-defined account queries and combines them with `array_merge($record_new, $record, $record_unconsolidated, $record_new_unconsolidated)`. The 2023 pending query joins `tbl_bmct_pr_catalog` to `tbl_dept_map`; the post-2023 pending query joins it to `tbl_ppmp`. Both require approved catalogs with `FOR CONSOLIDATE` status. The corresponding unconsolidated queries require approved catalogs whose status is `CONSOLIDATED` or `TRANSFER`, unconsolidated items, and grouped PR catalog IDs. Each option carries `dept|account_code|year|dbm`, and unconsolidated records append a fifth PR-ID field. The view also provides DBM and NON-DBM selection, empty `cons_header` and `consolidated` containers, and Unapproved, Consolidate, and Close controls."
},
{
"title": "Backup list",
"body": "The backup producer assigns `$data['account_list']` from distinct account codes in `tbl_bmct_pr_item_catalog` where `consolidated = 0`. It also queries unconsolidated rows, groups them by item code, and constructs row data. The backup view contains an `Item List` modal with account code, account description, budget, total, variance, remarks, status, and Consolidate and Close controls."
},
{
"title": "PPMP consolidation list",
"body": "The PPMP producer parses arranged POST `account` data into department, account, year, and mode-of-procurement fields, with an optional fifth comma-separated PR-ID filter. Its query joins `tbl_ppmp_catalog_item` to `tbl_ppmp_catalog` and `tbl_ppmp`, requires `a.consolidated = 0` and `b.pr_status = 'APPROVED'`, and matches account, department, year, and `modepro`. Non-empty results produce checked item selectors, item details, unit prices, total quantities, total prices, monthly quantities, PPMP header data, a generated table, a total, and a remarks field. The empty branch assigns `NO PPMP LIST APPROVED`; the source also contains a **jsonexit** response handoff."
}
]
Trace the source-defined handoffs
flowchart TD
modalProducer["consolidate-list-modal.php<br/>account_list"] --> modalView["consolidate-list-modal.php view<br/>encoded account option"]
modalView --> standardProducer["consolidate-list.php<br/>account POST value"]
standardProducer --> standardResponse["consolidate-list.php<br/>table response"]
standardResponse --> standardView["consolidate-list.php view<br/>table insertion"]
backupProducer["consolidate-list-backup.php<br/>fallback table response"] --> backupView["consolidate-list-backup.php view<br/>table insertion"]
Updated