# Features — eitaws (eIT)

Evidence date: 2026-10-15. Source: `git@bitbucket.org:overdrive/eitaws.git`.

Status words used here:

- **Current on `master`** — present at `9dc596e` (2020-07-02). This is the tree that was read.
- **Present, not on the live include path** — files exist, and `sheet.php` does not include them as the primary path.
- **Later branch, not read** — a remote branch tip is newer than `master`. The files on that branch were not inspected.
- **Deprecated in comments** — a comment or a commented-out block says the path was replaced. The code may still be reachable.

"Current" means current in `master`, not proven production. The README (31 Mar 2020) says the working version is on AWS. The pipeline deploys `development`. Which tree staff use is **Unknown / Requires Confirmation**.

## Current on `master`

### Access

| Feature | Location | Notes |
|---|---|---|
| Login | `index.php` | Username, password, external PIN. Password is MD5'd in the browser |
| Cookie session | `includes/system.php` | `myCookie` = level digit + user id. Lifetime 14370 seconds |
| Logout link | `includes/menu.php` | Navigates to `index.php`. No `setcookie` expiry in that page |
| Silicon request flag | `index.php` | `overdrive=silicon` copies `username` and `password` into the login check |
| No-index | `header.php`, `robots.txt` | `noindex,nofollow` added 2018-10-18. `robots.txt` disallows `/` |
| HR feedback link on login | `index.php` | Points at `entities/feedback/view_feedback_form.php`. Copy says the post is anonymous |

### Shell

| Feature | Location | Notes |
|---|---|---|
| Application shell | `sheet.php` | About 3800 lines. Entity router plus legacy button dispatcher |
| Top menu | `includes/menu.php` | Year, month, module buttons, Requests, logout |
| Default screen | `sheet.php` | Empty request opens Billing |
| Secondary menu | `includes/menu.php` calls `Menu()` | Function body was not extracted |

### Billing and invoicing

| Feature | Location | Notes |
|---|---|---|
| Billing list and detail | `entities/billing/` | Save, save-and-new, copy, delete, list save |
| Work locations | `entities/billing/view_details.php` | ON-SITE, OFF-SITE, ON-SITE and OFF-SITE, ON-SITE (No Mileage) |
| Transit checkbox | same | Driven by client `blnTransitCharge` and location |
| Contact report popup | `includes/mail_report.php` | From the billing detail script |
| Order-number email popup | `includes/mail_order_num_report.php` | From the billing detail script |
| Month End Invoice | `entities/billing/view_list.php`, `_controller.php`, `action_iif_export.php` | Builds `tmpBilling`, then QuickBooks Online handoff. Comment dates the button to 2015-12-17 and the Online API to March/April 2020 |
| QuickBooks auth URL | `entities/billing/action_iif_export.php` | `https://qb.overdrive.co.za/auth/`, `app=eit`. This is the "API URL" commit |
| Invoice number write-back | `sheet.php` `QBAPI` | Updates `tblBilling.strInvoice` |
| Uninvoiced list action | `entities/billing/_controller.php` `btnUninvoiced` | Comment 2014-10-06. Fills `tmpBilling` |
| File upload on popup save | `entities/billing/action_file_upload.php` | Included when `PopUpSaveButton` is set |

### Work tracking

| Feature | Location | Notes |
|---|---|---|
| To-do list | `entities/todo/`, legacy buttons in `sheet.php` | Create, update, delete, colour, copy, raise billing |
| To-do email | `includes/system.php` `sendTodoEmail()` | Only if `blnEmailToDo` is 1. Optional manager Cc |
| Clients | `entities/client/` | Name, transit km, notes, flags, lock |
| Client domains | `entities/clientdomains/` | Linked from System when support-contract edit is allowed |
| Contacts | used from billing and batch tools | Batch move of a contact's billing and to-do |
| Machine tracking | `entities/tracking/` | Supplier, OS, Office, antivirus, disk, memory, motherboard |
| Tracking Excel export | `sheet.php` and `entities/tracking/action_export.php` | HTML table with an Excel content type |
| MLPA register | `entities/mlpa/` | `tblMLPA`. Warranty filters, mark inactive, export |
| MLPA PDF | `entities/mlpa/_controller.php` | Heading "IT Asset & License Register". Empty PDO DSN in the lines read |
| Insurance | `entities/insurance/` | Menu added 2019-10-01. Save, delete, PDF |
| SLA | `entities/sla/` | Linked from System for support-contract editors |
| Stock | `includes/stock_*.php` | Menu button only when `blnEditStock` is 1 |
| Company vehicles | `includes/vehicle.list.php` | System menu |
| Labour fault and fix codes | `entities/labourcodefault/`, `entities/labourcodefix/` | System menu, level 7 or 9 |

### Reports

Opened from `includes/report_console.php`.

| Report | Form action |
|---|---|
| Billing detail | `report_view_billing.php` |
| Billing summary | `report_view_billing2.php` |
| Billing consolidated | `report_view_daily_billing.php` |
| Client report by selector | `report_view_blacklisted_by_client.php` |
| Client report by technician | `report_view_by_technician.php` |
| Client mileage by technician | `report_view_clients_mileage_by_tech.php` |
| Tools assigned | `report_tools_assigned.php` |
| eIT data export | `report_data_export.php` |
| SLA detail | `report_slaReport_export.php` |
| No billing | `report_no_billing.php` |
| No contacts | `report_view_no_contacts.php` |
| Client timesheet | `report_client_timesheet.php` |
| Software expiry | `includes/software_expiry_report.php` (wired from the console script) |

Mileage, contact-receiver, and accounts-receiver actions are set in the same console script. Each query was not read.

### System, HR, requests

| Feature | Location | Notes |
|---|---|---|
| System settings home | `includes/settings_entry.php` | Lists, tracking lookups, support, email |
| Users | `entities/user/` | Levels 5, 7, 9 and the flag checkboxes |
| Batch contact move | `includes/settings_batch_move_billing.php` | Level 9 |
| Mark old-user contacts inactive | `includes/settings_batch_mark_as_inactive.php` | Level 9 |
| ADSL services | `includes/adsl_*.php` | Flag `blnADSLService` |
| Backup assessment | `entities/settingsbackupassessment/`, `includes/backup_clients_list.php` | Support flag |
| Public holidays | `includes/public_holidays_*.php` | HR menu. Copy-over and delete exist in `sheet.php` |
| Staff leave | `includes/staff_leave_*.php` | Duplicate date blocked |
| Staff cost | `includes/staff_cost_*.php`, `includes/cost_*` | Only `blnAccessStaffCost` |
| Responsibilities | `includes/responsibilities.php` | HR menu |
| Feedback admin | `entities/feedback/` | HR menu |
| Change requests | `entities/requests/`, `change_requests.php` | Table `tblX` |
| General email | `includes/send_general_email.php` | Flag `blnCanEmail` |
| File integrity scan | `fim_2.0/` | Class `NemoFIM`. Cron entry `fim.cron.php`. Not linked from the menu |

### Integrations present in the tree

| Feature | Location | Notes |
|---|---|---|
| QuickBooks Online handoff | `action_iif_export.php` | Browser call to `qb.overdrive.co.za` |
| QuickBooks Web Connector | `quickbooks_webservices/qbwc.php`, `qbwcEIT.php`, `qbwcTS.php` | Consolibyte framework. Separate database name `quickbook_webservice` |
| PDF | `fpdf/`, `mpdf/`, `html2pdf/`, `htmltopdf/` | Bundled |
| Spreadsheet | `PHPExcel/`, `plugins/SimpleXLSX.cls.php` | Bundled |
| Mail library | `PHPMailer-master/` | To-do mail uses PHP `mail()`, not this library, in the function that was read |
| OTP library | `vendor/wayne-oliver/otp` | Required by Composer. No application call site found |

## Present, not on the live include path

| Item | Why it is listed this way |
|---|---|
| `sheet_new.php` | Parallel shell. `index.php` redirects to `sheet.php` |
| `includes_new/` | Parallel include tree. `sheet.php` includes `includes/` |
| `entities/mlpa_20191210`, `mlpa_20191212`, `mlpa_new`, `mlpa_old` | Dated or named copies beside `entities/mlpa` |
| `entities/tracking_20191212`, `tracking_new` | Copies beside `entities/tracking` |
| `entities/todo_20191211`, `todo_new` | Copies beside `entities/todo` |
| `entities/user_20191210` | Copy beside `entities/user` |
| `entities/billingX_dwayne02102014` | Dated billing copy |
| `ajax.functions_old.php`, `ajax.functions_20191210.php` | Copies beside `ajax.functions.php` |
| `index.php.bak`, `index.php.bak.original`, `index.php.new`, `index2.php` | Login copies. `index2.php` uses the same PIN check |
| `quickbooks_webservices/Backup_20200129/` | Snapshot of the connector tree |
| Root `_nemo.*.cls.php` | Nemo framework classes. The front controller that was read does not boot them. `NemoFIM` is a separate class under `fim_2.0/` |

## Later branch, not read

| Branch | Tip | What the name and subject show |
|---|---|---|
| `development` | `b65353c` 2022-08-16 "sanitise special character function fix" | Pipeline target. Two years of commits after `master` were not read |
| `php8.2_upgrade` | `17740b0` 2024-03-08 merge of pull request #24 | Upgrade line |
| `php8.2_upgrade---Wessels` | `a02bca9` 2024-01-17 | Merge of `php8.2_upgrade` |
| `php8.2_upgrade_josh` | `00fb327` 2026-03-06 "Add trimming" | Newest tip in the remote list |

Treat these as **in development relative to `master`**. Do not treat them as documented behaviour until the files are read.

## Deprecated in comments

| Item | Evidence |
|---|---|
| IIF export buttons in the billing controller | Commented out. Replaced, in the same controller, by Month End Invoice calling `createQBInvoice()` |
| Monthly Target menu item | Assignment is commented. "20110803 - removed" |
| Open and closed SLA management views | HTML comment in `includes/settings_entry.php` |
| Client type table | Comment in `entities/client/view_details.php` (2012-11-19): the control remains, the table does not |
| Header cache and 4-hour refresh | Commented in `header.php` |

## Removed

Nothing was diffed off `master`, because the clone used for reading is a single commit. Features that exist only as dated copies are listed above. They were not deleted.

## Not a product feature

| Item | Note |
|---|---|
| `todo.txt` | 2005 sample support job (technician, fault, fix). Not a backlog |
| `Albert SQL statements.txt` | One `ALTER` adding `tblBilling.blnSLAClosed` |
| `DB changes.txt` | Three historical alters for client lock and tracking |
| `doc new iif export pseudocode 20121207` | Export rules note. See business rules |
| Access `.mdb` files and Windows shortcuts | Committed. The PHP that was read uses MySQL |
| `get-pip.py` | Python bootstrap script at the repo root. Not referenced by the app |
| `Euro_Appliances_*.xlsx`, `Techies.xls`, `Support Agreement 7.1 18 April 2005.doc` | Committed office files. Contents were not extracted |
| `billingdocuments/`, `backupscanfiles/` | Directories present. Not opened |
| IDE files | Sublime, Komodo, NetBeans (`nbproject/`) |
