-- 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; -- Clamp at MySQL DATE/DATETIME max so sentinel 9999-12-31 lots do not Error 1441. UPDATE inventory_lot SET expiryDate = IF( expiryDate > DATE_SUB('9999-12-31', INTERVAL @day_delta DAY), '9999-12-31', 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 = IF( estimatedArrivalDate > DATE_SUB('9999-12-31 23:59:59', INTERVAL @day_delta DAY), '9999-12-31 23:59:59', 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 = IF( estimatedArrivalDate > DATE_SUB('9999-12-31 23:59:59', INTERVAL @day_delta DAY), '9999-12-31 23:59:59', 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';