# MJPOS Dubai Shop - Fixes Applied

## Critical fixes
- Fixed Settings save failures by replacing update-then-insert logic with atomic `INSERT ... ON DUPLICATE KEY UPDATE` upserts.
- Added transaction-safe error handling and user-friendly redirect on save failure.
- Fixed logo, favicon, and login-background uploads to use the same safe upsert logic.
- Added MIME-to-extension handling and upload-directory validation.
- Fixed `SmsService` autoload failure caused by hidden trailing spaces in its filename.

## Missing page fixes
- Added product single barcode label view.
- Added barcode product picker view.
- Added printable bulk barcode label sheet view.
- Added STI report hub view.
- Added STI JSON report viewer fallback.
- Fixed payroll payslip filename case mismatch (`Payslip.php` -> `payslip.php`) for Linux hosting.
- Fixed barcode print route used by the picker.

## Verification
- All PHP files pass `php -l` syntax validation.
- Static scan found no missing `APP_PATH/views/*.php` includes.
