encapsulate Barcode Operations [OOP]

This commit is contained in:
Thanakorn S
2026-05-07 08:41:08 +07:00
parent 2eb6a1a315
commit 47cc2819d3
8 changed files with 810 additions and 643 deletions
+16 -98
View File
@@ -1,30 +1,7 @@
<?php
session_start();
require '../../../assets/utils/db_auth.php';
function validateLocation(PDO $pdo, int $company_id, int $warehouse_id, string $zone, string $aisle, string $rack): void {
$sth = $pdo->prepare(
"SELECT 1 FROM md_rack
WHERE company_id = :company_id
AND warehouse = :warehouse
AND zone = :zone
AND aisle = :aisle
AND rack = :rack
LIMIT 1"
);
$sth->execute([
':company_id' => $company_id,
':warehouse' => $warehouse_id,
':zone' => $zone,
':aisle' => $aisle,
':rack' => $rack,
]);
if (!$sth->fetchColumn()) {
$answer = ['success' => 0, 'message' => 'Location not found.'];
http_response_code(404);
exit(json_encode($answer));
}
}
require '../../../assets/utils/classes/BarcodeManager.php';
$label_action = $data['label_action'] ?? 'create';
$barcode = trim($data['barcode'] ?? '');
@@ -37,17 +14,11 @@
require_role($user_role, ['owner', 'admin', 'staff']);
}
if ($label_action === 'list') {
$sth = $pdo2->prepare(
"SELECT barcode, warehouse_id, zone, aisle, rack, status, print_count, last_printed_dt
FROM md_barcode
WHERE company_id = :company_id
AND barcode_type = 'loc'"
);
$sth->execute([':company_id' => $company_id]);
$bm = new BarcodeManager($pdo2, $company_id);
if ($label_action === 'list') {
$answer['success'] = 1;
$answer['output'] = $sth->fetchAll(PDO::FETCH_ASSOC);
$answer['output'] = $bm->listLocationLabels();
exit(json_encode($answer));
}
@@ -57,18 +28,7 @@
http_response_code(400);
exit(json_encode($answer));
}
$sth = $pdo2->prepare(
"UPDATE md_barcode
SET print_count = print_count + 1,
last_printed_dt = NOW()
WHERE company_id = :company_id
AND barcode = :barcode
AND barcode_type = 'loc'
AND status = 1"
);
$sth->execute([':company_id' => $company_id, ':barcode' => $barcode]);
$bm->recordPrint($barcode, 'loc');
$answer['success'] = 1;
exit(json_encode($answer));
}
@@ -79,17 +39,7 @@
http_response_code(400);
exit(json_encode($answer));
}
$sth = $pdo2->prepare(
"UPDATE md_barcode
SET status = 0
WHERE company_id = :company_id
AND barcode = :barcode
AND barcode_type = 'loc'
AND status = 1"
);
$sth->execute([':company_id' => $company_id, ':barcode' => $barcode]);
$bm->setStatus($barcode, 'loc', 0);
$answer['success'] = 1;
exit(json_encode($answer));
}
@@ -100,58 +50,26 @@
http_response_code(400);
exit(json_encode($answer));
}
$sth = $pdo2->prepare(
"UPDATE md_barcode
SET status = 1
WHERE company_id = :company_id
AND barcode = :barcode
AND barcode_type = 'loc'
AND status <> 1"
);
$sth->execute([':company_id' => $company_id, ':barcode' => $barcode]);
$bm->setStatus($barcode, 'loc', 1);
$answer['success'] = 1;
exit(json_encode($answer));
}
// Default: create
if ($barcode === '' || !$warehouse_id || $zone === '' || $aisle === '' || $rack === '') {
$answer['message'] = 'Location barcode data is incomplete.';
http_response_code(400);
exit(json_encode($answer));
}
validateLocation($pdo2, $company_id, $warehouse_id, $zone, $aisle, $rack);
try {
$output = $bm->createLocationLabel($barcode, $warehouse_id, $zone, $aisle, $rack);
$answer['success'] = 1;
$answer['output'] = $output;
} catch (Exception $e) {
$answer['message'] = $e->getMessage();
http_response_code($e->getMessage() === 'Location not found.' ? 404 : 400);
}
$sth = $pdo2->prepare(
"INSERT INTO md_barcode
(company_id, barcode_type, barcode, warehouse_id, zone, aisle, rack)
VALUES
(:company_id, 'loc', :barcode, :warehouse_id, :zone, :aisle, :rack)
ON DUPLICATE KEY UPDATE
barcode_type = VALUES(barcode_type),
warehouse_id = VALUES(warehouse_id),
zone = VALUES(zone),
aisle = VALUES(aisle),
rack = VALUES(rack),
status = 1"
);
$sth->execute([
':company_id' => $company_id,
':barcode' => $barcode,
':warehouse_id' => $warehouse_id,
':zone' => $zone,
':aisle' => $aisle,
':rack' => $rack,
]);
$answer['success'] = 1;
$answer['output'] = [
'barcode' => $barcode,
'warehouse_id' => $warehouse_id,
'zone' => $zone,
'aisle' => $aisle,
'rack' => $rack,
];
exit(json_encode($answer));
?>