-- Move demo dates forward to the real UTC+8 today. -- Run this on the morning of a demo when that day is later than -- settings DEMO.dateAnchor. Safe to run again on the same day. -- -- Adds the same number of days to: -- inventory_lot.expiryDate -- delivery_order.estimatedArrivalDate -- purchase_order.estimatedArrivalDate -- Quantities, statuses, and lot numbers stay. Already-expired lots stay expired. -- -- Does not anonymize. Run scripts/anonymize_demo_copy.sql once first. -- Only updates when DATABASE() is fpsms_demo and the guards below are ok. -- -- Workbench: select fpsms_demo, File → Open SQL Script, run the whole file. -- No DELIMITER / procedure (Workbench File → Run friendly). -- -- mysql -h127.0.0.1 -P3306 -uroot -p fpsms_demo < scripts/refresh_demo_dates.sql SET NAMES utf8mb4; SET SESSION time_zone = '+08:00'; SET SESSION sql_safe_updates = 0; SET SESSION net_read_timeout = 7200; SET SESSION net_write_timeout = 7200; SET SESSION wait_timeout = 28800; SELECT CASE WHEN DATABASE() IS NULL OR DATABASE() <> 'fpsms_demo' THEN CONCAT('FAIL: current database is ', IFNULL(DATABASE(), 'NULL'), ' — select fpsms_demo') WHEN (SELECT COUNT(*) FROM settings WHERE name = 'DEMO.anonymized.v1') = 0 THEN 'FAIL: run anonymize_demo_copy.sql first' WHEN (SELECT COUNT(*) FROM settings WHERE name = 'DEMO.dateAnchor') <> 1 THEN 'FAIL: DEMO.dateAnchor must exist exactly once' WHEN ( SELECT STR_TO_DATE(value, '%Y-%m-%d') FROM settings WHERE name = 'DEMO.dateAnchor' ) IS NULL THEN 'FAIL: DEMO.dateAnchor is not YYYY-MM-DD' ELSE 'ok' END AS refresh_guard INTO @refresh_guard; SET @day_delta = IF( @refresh_guard = 'ok', ( SELECT DATEDIFF(CURDATE(), STR_TO_DATE(value, '%Y-%m-%d')) FROM settings WHERE name = 'DEMO.dateAnchor' ), NULL ); START TRANSACTION; UPDATE inventory_lot SET expiryDate = DATE_ADD(expiryDate, INTERVAL @day_delta DAY) WHERE @refresh_guard = 'ok' AND @day_delta > 0 AND expiryDate IS NOT NULL; UPDATE delivery_order SET estimatedArrivalDate = DATE_ADD(estimatedArrivalDate, INTERVAL @day_delta DAY) WHERE @refresh_guard = 'ok' AND @day_delta > 0 AND estimatedArrivalDate IS NOT NULL; UPDATE purchase_order SET estimatedArrivalDate = DATE_ADD(estimatedArrivalDate, INTERVAL @day_delta DAY) WHERE @refresh_guard = 'ok' AND @day_delta > 0 AND estimatedArrivalDate IS NOT NULL; UPDATE settings SET value = DATE_FORMAT(CURDATE(), '%Y-%m-%d') WHERE @refresh_guard = 'ok' AND @day_delta > 0 AND name = 'DEMO.dateAnchor'; COMMIT; SELECT @refresh_guard AS refresh_guard, @day_delta AS days_added, name, value FROM settings WHERE name = 'DEMO.dateAnchor';