|
| 1 | +# frozen_string_literal: true |
| 2 | + |
1 | 3 | class RemoveFareCodeFromStopAreas < ActiveRecord::Migration[5.2] |
2 | 4 | def change |
3 | 5 | on_public_schema_only do |
4 | | - Chouette::StopArea.where.not(fare_code: nil).includes(stop_area_provider: {workbench: :workgroup}).find_each do |stop_area| |
5 | | - stop_area_provider = stop_area.stop_area_provider |
6 | | - workbench = stop_area_provider.workbench |
7 | | - workgroup = workbench.workgroup |
| 6 | + impacted_workgroup_ids = Chouette::StopArea.where.not(fare_code: nil).joins(stop_area_provider: :workbench).distinct.pluck(:workgroup_id) |
| 7 | + # Load every impacted Workgroup |
| 8 | + impacted_workgroups = Workgroup.where(id: impacted_workgroup_ids) |
8 | 9 |
|
9 | | - fare_provider = workbench.default_fare_provider |
10 | | - code_space = workgroup.code_spaces.default |
11 | | - value = stop_area.fare_code |
| 10 | + impacted_workgroups.each do |workgroup| |
| 11 | + # .. to avoid Workgroup loading in loop :( |
| 12 | + CustomFieldsSupport.within_workgroup(workgroup) do |
| 13 | + code_space = workgroup.code_spaces.default |
| 14 | + stop_areas_with_fare_code = workgroup.stop_area_referential.stop_areas |
| 15 | + .where.not(fare_code: nil).includes(stop_area_provider: :workbench) |
12 | 16 |
|
13 | | - zone = fare_provider.fare_zones.first_or_create_by_code(code_space, value) do |zone| |
14 | | - zone.name = value |
15 | | - end |
| 17 | + # Migrate all Workgroup StopAreas |
| 18 | + stop_areas_with_fare_code.find_each do |stop_area| |
| 19 | + stop_area_provider = stop_area.stop_area_provider |
| 20 | + workbench = stop_area_provider.workbench |
| 21 | + fare_provider = workbench.default_fare_provider |
| 22 | + |
| 23 | + value = stop_area.fare_code |
16 | 24 |
|
17 | | - stop_area.stop_area_zones.create(zone: zone) |
| 25 | + zone = fare_provider.fare_zones.first_or_create_by_code(code_space, value) do |zone| |
| 26 | + zone.name = value |
| 27 | + end |
| 28 | + |
| 29 | + stop_area.stop_area_zones.create(zone: zone) |
| 30 | + end |
| 31 | + end |
18 | 32 | end |
19 | 33 |
|
20 | 34 | remove_column :stop_areas, :fare_code |
|
0 commit comments