43 lines
1.2 KiB
SQL
43 lines
1.2 KiB
SQL
-- TRIGGER untuk otomatis menghitung waktu_dasar sebelum INSERT
|
|
DELIMITER //
|
|
CREATE TRIGGER IF NOT EXISTS trg_calculate_waktu_dasar_insert
|
|
BEFORE INSERT ON routes
|
|
FOR EACH ROW
|
|
BEGIN
|
|
DECLARE speed FLOAT DEFAULT 21;
|
|
|
|
IF NEW.kondisi_medan = 'Medan Beraspal' THEN
|
|
SET speed = 26;
|
|
ELSEIF NEW.kondisi_medan = 'Medan Berkerikil' THEN
|
|
SET speed = 17.5;
|
|
ELSE
|
|
SET speed = 21; -- Default / Medan Campuran
|
|
END IF;
|
|
|
|
SET NEW.waktu_dasar = ROUND((NEW.jarak / speed) * 60);
|
|
END;
|
|
//
|
|
|
|
-- TRIGGER untuk otomatis menghitung waktu_dasar sebelum UPDATE
|
|
CREATE TRIGGER IF NOT EXISTS trg_calculate_waktu_dasar_update
|
|
BEFORE UPDATE ON routes
|
|
FOR EACH ROW
|
|
BEGIN
|
|
DECLARE speed FLOAT DEFAULT 21;
|
|
|
|
-- Hanya hitung ulang jika medan atau jarak berubah
|
|
IF NEW.kondisi_medan != OLD.kondisi_medan OR NEW.jarak != OLD.jarak OR NEW.waktu_dasar = 0 THEN
|
|
IF NEW.kondisi_medan = 'Medan Beraspal' THEN
|
|
SET speed = 26;
|
|
ELSEIF NEW.kondisi_medan = 'Medan Berkerikil' THEN
|
|
SET speed = 17.5;
|
|
ELSE
|
|
SET speed = 21; -- Default / Medan Campuran
|
|
END IF;
|
|
|
|
SET NEW.waktu_dasar = ROUND((NEW.jarak / speed) * 60);
|
|
END IF;
|
|
END;
|
|
//
|
|
DELIMITER ;
|