-- Manual rollback for migration 014. -- Refuses once real Booking Excel data exists because removing the pointer would aggregate full batches together. BEGIN; DO $$ BEGIN IF current_database() <> 'booking_test' THEN RAISE EXCEPTION 'ARR Booking current-source rollback is allowed only in booking_test'; END IF; IF to_regclass('booking.current_source_batch') IS NULL THEN RAISE EXCEPTION 'ARR Booking current-source migration is not applied'; END IF; IF EXISTS ( SELECT 1 FROM booking.source_batches WHERE source_kind = 'booking_excel' ) THEN RAISE EXCEPTION 'refusing rollback: Booking Excel source history exists'; END IF; IF ( SELECT count(*) FROM booking.source_batches WHERE batch_status = 'accepted' ) > 1 THEN RAISE EXCEPTION 'refusing rollback: multiple accepted Booking source batches exist'; END IF; END; $$; CREATE OR REPLACE VIEW booking.v_current_room_items AS SELECT source.id AS source_row_id, source.source_batch_id, source.source_worksheet, source.source_row_no, source.group_code_raw, source.group_code_key, source.type_of_room_raw, source.no_of_rooms AS source_no_of_rooms, parsed.id AS parse_version_id, parsed.version_no AS parse_version_no, item.item_no, item.room_type_raw, item.room_type_code, item.quantity, item.unit_price, item.currency_code, item.price_token_raw, item.source_fragment FROM booking.current_row_parses AS current_parse JOIN booking.parse_versions AS parsed ON parsed.id = current_parse.parse_version_id JOIN booking.source_rows AS source ON source.id = current_parse.source_row_id JOIN booking.source_batches AS batch ON batch.id = source.source_batch_id JOIN booking.room_items AS item ON item.parse_version_id = parsed.id WHERE batch.batch_status = 'accepted' AND parsed.parse_status = 'accepted'; DROP TRIGGER current_source_batch_acceptance_guard ON booking.current_source_batch; DROP FUNCTION booking.validate_current_source_batch(); DROP TABLE booking.current_source_batch; COMMIT;