-- 045_work_order_source_product_rule.sql —— 记录工单的来源接单模板，支持后续按模板同步价格。

ALTER TABLE work_orders
  ADD COLUMN IF NOT EXISTS product_rule_id BIGINT
  REFERENCES work_product_rules(id) ON DELETE SET NULL;

CREATE INDEX IF NOT EXISTS idx_work_orders_product_rule_open
  ON work_orders(product_rule_id, id DESC)
  WHERE status = 'open';

-- 历史自动建单已在 source_synced 事件中记录 ruleKey，迁移时尽可能补齐关联。
UPDATE work_orders wo
SET product_rule_id = wpr.id
FROM work_product_rules wpr
WHERE wo.product_rule_id IS NULL
  AND EXISTS (
    SELECT 1
    FROM work_order_events event
    WHERE event.work_order_id = wo.id
      AND event.event_type = 'source_synced'
      AND event.payload_json ->> 'ruleKey' = wpr.rule_key
  );

COMMENT ON COLUMN work_orders.product_rule_id
  IS '自动建单时命中的接单模板；用于模板价格同步，删除模板后保留工单但置空';
