OEM lab refresh: fix id=0 seed issue (NO_AUTO_VALUE_ON_ZERO) and add one-shot refresh command
This commit is contained in:
parent
9d2f91e73a
commit
46a22f6e02
58
app/Commands/RefreshLabTemplates.php
Normal file
58
app/Commands/RefreshLabTemplates.php
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Commands;
|
||||||
|
|
||||||
|
use CodeIgniter\CLI\BaseCommand;
|
||||||
|
use CodeIgniter\CLI\CLI;
|
||||||
|
|
||||||
|
class RefreshLabTemplates extends BaseCommand
|
||||||
|
{
|
||||||
|
protected $group = 'OEM';
|
||||||
|
protected $name = 'oem:refresh-lab-templates';
|
||||||
|
protected $description = 'Rebuild pathology/radiology template tables from LabTemplateSeeder (without truncating hc_items).';
|
||||||
|
protected $usage = 'oem:refresh-lab-templates';
|
||||||
|
|
||||||
|
public function run(array $params): void
|
||||||
|
{
|
||||||
|
$db = \Config\Database::connect();
|
||||||
|
|
||||||
|
CLI::write('Refreshing lab template tables...', 'yellow');
|
||||||
|
CLI::write('This will truncate: lab_repotests, lab_tests_option, lab_tests, lab_repo, lab_rgroups, radiology_ultrasound_template', 'yellow');
|
||||||
|
CLI::write('hc_items will NOT be truncated.', 'yellow');
|
||||||
|
|
||||||
|
try {
|
||||||
|
$db->query('SET FOREIGN_KEY_CHECKS = 0');
|
||||||
|
|
||||||
|
// Order matters for dependent rows
|
||||||
|
$db->query('TRUNCATE TABLE lab_repotests');
|
||||||
|
$db->query('TRUNCATE TABLE lab_tests_option');
|
||||||
|
$db->query('TRUNCATE TABLE lab_tests');
|
||||||
|
$db->query('TRUNCATE TABLE lab_repo');
|
||||||
|
$db->query('TRUNCATE TABLE lab_rgroups');
|
||||||
|
$db->query('TRUNCATE TABLE radiology_ultrasound_template');
|
||||||
|
|
||||||
|
$db->query('SET FOREIGN_KEY_CHECKS = 1');
|
||||||
|
|
||||||
|
CLI::write('Template tables truncated. Running LabTemplateSeeder...', 'green');
|
||||||
|
|
||||||
|
$seeder = \Config\Database::seeder();
|
||||||
|
$seeder->call('App\\Database\\Seeds\\LabTemplateSeeder');
|
||||||
|
|
||||||
|
$cbc = $db->query("SELECT mstRepoKey, Title FROM lab_repo WHERE Title LIKE '%CBC%' LIMIT 1")->getRow();
|
||||||
|
|
||||||
|
if ($cbc) {
|
||||||
|
CLI::write('CBC template restored: #' . (string) $cbc->mstRepoKey . ' - ' . (string) $cbc->Title, 'green');
|
||||||
|
} else {
|
||||||
|
CLI::error('CBC template still not found after refresh. Check DB connection and seed files.');
|
||||||
|
}
|
||||||
|
|
||||||
|
CLI::write('Done.', 'green');
|
||||||
|
} catch (\Throwable $e) {
|
||||||
|
try {
|
||||||
|
$db->query('SET FOREIGN_KEY_CHECKS = 1');
|
||||||
|
} catch (\Throwable $ignored) {
|
||||||
|
}
|
||||||
|
CLI::error('Refresh failed: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -43,8 +43,9 @@ class LabTemplateSeeder extends Seeder
|
||||||
{
|
{
|
||||||
$sqlDir = __DIR__ . DIRECTORY_SEPARATOR . 'LabOemData' . DIRECTORY_SEPARATOR;
|
$sqlDir = __DIR__ . DIRECTORY_SEPARATOR . 'LabOemData' . DIRECTORY_SEPARATOR;
|
||||||
|
|
||||||
|
$this->db->query('SET @OLD_SQL_MODE = @@SESSION.sql_mode');
|
||||||
$this->db->query('SET FOREIGN_KEY_CHECKS = 0');
|
$this->db->query('SET FOREIGN_KEY_CHECKS = 0');
|
||||||
$this->db->query('SET SQL_MODE = ""'); // silence STRICT for legacy MyISAM data
|
$this->db->query('SET SESSION SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"');
|
||||||
|
|
||||||
foreach (self::SQL_FILES as $file) {
|
foreach (self::SQL_FILES as $file) {
|
||||||
$path = $sqlDir . $file;
|
$path = $sqlDir . $file;
|
||||||
|
|
@ -80,7 +81,7 @@ class LabTemplateSeeder extends Seeder
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->db->query('SET FOREIGN_KEY_CHECKS = 1');
|
$this->db->query('SET FOREIGN_KEY_CHECKS = 1');
|
||||||
$this->db->query('SET SQL_MODE = DEFAULT');
|
$this->db->query('SET SESSION SQL_MODE = @OLD_SQL_MODE');
|
||||||
|
|
||||||
CLI::write('Lab template seeder complete.', 'green');
|
CLI::write('Lab template seeder complete.', 'green');
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user