|
- -- 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';
|