diff --git a/app/Filament/Pages/LeakTestValidation.php b/app/Filament/Pages/LeakTestValidation.php
index d953cc79..706b1652 100644
--- a/app/Filament/Pages/LeakTestValidation.php
+++ b/app/Filament/Pages/LeakTestValidation.php
@@ -83,16 +83,55 @@ class LeakTestValidation extends Page
public function processQr($value)
{
$plantId = $this->plantId;
- $this->leakTestQr = $value;
+ $this->leakTestQr = trim($value);
$parts = explode('|', trim($value));
+ $validQr = false;
- if (! preg_match('/^[^|]+\|[^|]+\|?$/', trim($value))) {
+ if (! $plantId) {
+ Notification::make()
+ ->title('Please select a plant first!')
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } elseif (! $value) {
+ Notification::make()
+ ->title('Please scan the serial number!')
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } elseif (! preg_match('/^[^|]+\|[^|]+\|?$/', trim($value)) && count($parts) > 1) {
Notification::make()
->title('Invalid QR Format')
->body("Expected format: ItemCode|SerialNumber
Received Format '$value'")
->danger()
->duration(5000)
->send();
+ } elseif (count($parts) == 1) {
+ $sNumber = trim($value);
+ if (strlen($sNumber) < 9) {
+ Notification::make()
+ ->title('Invalid Serial Number')
+ ->body("Serial number '$sNumber' should contain minimum 9 digits!")
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } elseif (! ctype_alnum($sNumber)) {
+ Notification::make()
+ ->title('Invalid Serial Number')
+ ->body("Serial number '$sNumber' should contain only alpha numeric values!")
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } elseif (! preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $sNumber)) {
+ Notification::make()
+ ->title('Invalid Serial Number')
+ ->body("Serial number '{$sNumber}' should not begin with '0' or letter!")
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } else {
+ $validQr = true;
+ }
} else {
$iCode = trim($parts[0]);
$sNumber = isset($parts[1]) ? trim($parts[1]) : null;
@@ -103,10 +142,17 @@ class LeakTestValidation extends Page
->danger()
->duration(5000)
->send();
- } elseif (! preg_match('/^[a-zA-Z0-9]+$/', $iCode)) {
+ } elseif (! ctype_alnum($iCode)) {
Notification::make()
->title('Invalid Item Code')
- ->body("Item code '$iCode' should contain alpha numeric values!")
+ ->body("Item code '$iCode' should contain only alpha numeric values!")
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } elseif (! preg_match('/^[a-zA-Z1-9][a-zA-Z0-9]{5,}$/', $iCode)) {
+ Notification::make()
+ ->title('Invalid Item Code')
+ ->body("Item code '{$iCode}' should not begin with '0'!")
->danger()
->duration(5000)
->send();
@@ -117,22 +163,42 @@ class LeakTestValidation extends Page
->danger()
->duration(5000)
->send();
+ } elseif (! ctype_alnum($sNumber)) {
+ Notification::make()
+ ->title('Invalid Serial Number')
+ ->body("Serial number '$sNumber' should contain only alpha numeric values!")
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } elseif (! preg_match('/^[1-9][a-zA-Z0-9]{8,}$/', $sNumber)) {
+ Notification::make()
+ ->title('Invalid Serial Number')
+ ->body("Serial number '{$sNumber}' should not begin with '0' or letter!")
+ ->danger()
+ ->duration(5000)
+ ->send();
} else {
- $leakTestQrExists = LeakTestReading::where('plant_id', $plantId)->where('item_code', $iCode)->where('serial_number', $sNumber)->first();
+ $validQr = true;
+ }
+ }
- if (! $leakTestQrExists) {
- Notification::make()
- ->title('Leak Test QR Not Found')
- ->danger()
- ->duration(5000)
- ->send();
- } else {
- Notification::make()
- ->title('Leak Test QR Found')
- ->success()
- ->duration(5000)
- ->send();
- }
+ if ($validQr) {
+ $leakTestQrExists = LeakTestReading::where('plant_id', $plantId)->where('serial_number', $sNumber)->latest()->first();
+
+ if (! $leakTestQrExists) {
+ Notification::make()
+ ->title('No leak test readings found!')
+ ->danger()
+ ->duration(5000)
+ ->send();
+ } else {
+ $leakStat = ($leakTestQrExists->test_status == 'P') ? 'Pass' : 'Fail';
+ Notification::make()
+ ->title('Leak Test Readings Found')
+ ->body("Item Code : {$leakTestQrExists->item_code}
Serial Number : {$leakTestQrExists->serial_number}
Test Status : {$leakStat}
Created At : {$leakTestQrExists->created_at->format('d-m-Y H:i:s')}")
+ ->success()
+ ->duration(5000)
+ ->send();
}
}