code audit fixes: require_once, issue flow, role guards

- Upgraded all plain `require` to `require_once` across 172 api/engine
  and api/engine_report files to prevent class-redeclaration errors
- Added issue button, issue_invoice() with GL toastr, and delete_invoice()
  to expense/manage_purchase_invoice.php, bringing it in line with
  po/manage_purchase_invoice.php
- Added can_delete role guard (admin/owner only) to trash icons on
  revenue/invoice.php and expense/purchase_invoice.php, matching the
  existing pattern in finance/receipt.php and finance/payment.php

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Thanakorn S
2026-05-23 17:06:08 +07:00
co-authored by Claude Sonnet 4.6
parent eddb10aa22
commit b07882e3f4
191 changed files with 534 additions and 464 deletions
+3 -3
View File
@@ -12,9 +12,9 @@
* type string 'in' | 'out' | 'transfer'
*/
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockManager.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_role($user_role, ['owner', 'admin']);
+2 -2
View File
@@ -1,8 +1,8 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/CompanySettingManager.php';
require '../../../assets/utils/classes/BarcodeManager.php';
require_once '../../../assets/utils/classes/BarcodeManager.php';
$barcode = trim($data['barcode'] ?? '');
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ContactManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ContactManager.php';
$contact = new ContactManager($pdo2, $company_id);
$answer['result'] = $contact->searchContact($data['keyword'] ?? '');
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_role($user_role, ['owner', 'admin']);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_role($user_role, ['owner', 'admin']);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_role($user_role, ['owner', 'admin']);
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/BarcodeManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/BarcodeManager.php';
$label_action = $data['label_action'] ?? 'create';
$barcode = trim($data['barcode'] ?? '');
+4 -4
View File
@@ -1,9 +1,9 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/UsageGuard.php';
require '../../../assets/utils/classes/StockManager.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/UsageGuard.php';
require_once '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/classes/CompanySettingManager.php';
require_role($user_role, ['owner', 'admin', 'staff']);
+4 -4
View File
@@ -1,9 +1,9 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/UsageGuard.php';
require '../../../assets/utils/classes/StockManager.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/UsageGuard.php';
require_once '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/classes/CompanySettingManager.php';
require_role($user_role, ['owner', 'admin', 'staff']);
+4 -4
View File
@@ -1,9 +1,9 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/UsageGuard.php';
require '../../../assets/utils/classes/StockManager.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/UsageGuard.php';
require_once '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/classes/CompanySettingManager.php';
require_role($user_role, ['owner', 'admin', 'staff']);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ProductManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ProductManager.php';
$product = new ProductManager($pdo2, $company_id);
$answer['result'] = $product->searchProduct($data['keyword'] ?? '');
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
$product_sku = $data['product_sku'] ?? '';
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
$product_sku = $data['product_sku'] ?? '';
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
$type = $data['type'] ?? '';
$whMgmt = new WarehouseManager($pdo2, $company_id);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
$wh = new WarehouseManager($pdo2, $company_id);
$answer['result'] = $wh->getLotList(
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
$type = $data['type'] ?? '';
$whMgmt = new WarehouseManager($pdo2, $company_id);
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockSourceManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockSourceManager.php';
try {
$mgr = new StockSourceManager($pdo2, $company_id);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockManager.php';
$stock = new StockManager($pdo2, $company_id);
$answer['output'] = $stock->getStockInById((int)$data['wh'], (int)$data['id']);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockManager.php';
$stock = new StockManager($pdo2, $company_id);
$answer['output'] = $stock->getStockOutById((int)$data['wh'], (int)$data['id']);
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockManager.php';
$stock = new StockManager($pdo2, $company_id);
$answer['output'] = $stock->getTransferById((int)$data['wh'], (int)$data['id']);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
$wh = new WarehouseManager($pdo2, $company_id);
$type = $data['type'] ?? '';
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
$type = $data['type'] ?? '';
$whMgmt = new WarehouseManager($pdo2, $company_id);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/BarcodeManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/BarcodeManager.php';
$label_action = $data['label_action'] ?? 'read';
$product_sku = trim($data['product_sku'] ?? '');
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/BarcodeManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/BarcodeManager.php';
$bm = new BarcodeManager($pdo2, $company_id);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/BarcodeManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/BarcodeManager.php';
$bm = new BarcodeManager($pdo2, $company_id);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockManager.php';
$stock = new StockManager($pdo2, $company_id);
$answer['output'] = $stock->getStockList((int)$data['warehouse'], 'in');
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockManager.php';
$stock = new StockManager($pdo2, $company_id);
$answer['output'] = $stock->getStockList((int)$data['warehouse'], 'out');
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/StockManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/StockManager.php';
$stock = new StockManager($pdo2, $company_id);
$answer['output'] = $stock->getStockList((int)$data['warehouse'], 'transfer');
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/WarehouseManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/WarehouseManager.php';
require_role($user_role, ['owner', 'admin', 'staff']);
+2 -2
View File
@@ -1,8 +1,8 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ReportManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ReportManager.php';
$report = new ReportManager($pdo2, $company_id);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ReportManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ReportManager.php';
$report = new ReportManager($pdo2, $company_id);
$answer['output'] = $report->getWarehouseActivity((int)$data['warehouse']);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ReportManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ReportManager.php';
$report = new ReportManager($pdo2, $company_id);
$answer['output'] = $report->getWarehouseStockMovement((int)$data['warehouse']);
+2 -2
View File
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ReportManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ReportManager.php';
$report = new ReportManager($pdo2, $company_id);
$answer['output'] = $report->getWarehouseStockTrend((int)$data['warehouse']);
@@ -1,7 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ReportManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ReportManager.php';
$report = new ReportManager($pdo2, $company_id);
$answer['output'] = $report->getWarehouseBalanceSummary();
@@ -1,8 +1,8 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ReportManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ReportManager.php';
$warehouse_id = (int)($data['warehouse'] ?? 0);
@@ -1,8 +1,8 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
require '../../../assets/utils/classes/ReportManager.php';
require_once '../../../assets/utils/db_auth.php';
require_once '../../../assets/utils/classes/ReportManager.php';
$report = new ReportManager($pdo2, $company_id);