diff options
Diffstat (limited to 'app/models/import/gtfs.rb')
| -rw-r--r-- | app/models/import/gtfs.rb | 36 | 
1 files changed, 35 insertions, 1 deletions
| diff --git a/app/models/import/gtfs.rb b/app/models/import/gtfs.rb index ceb849bd8..e1bac36a6 100644 --- a/app/models/import/gtfs.rb +++ b/app/models/import/gtfs.rb @@ -1,10 +1,28 @@  class Import::Gtfs < Import::Base    after_commit :launch_worker, :on => :create +  after_commit do +    main_resource.update_status_from_importer self.status +    true +  end +    def launch_worker      GtfsImportWorker.perform_async id    end +  def main_resource +    @resource ||= parent.resources.find_or_create_by(name: self.name, resource_type: "referential", reference: self.name) +  end + +  def notify_parent +    super +    main_resource.update_status_from_importer self.status +  end + +  def create_message args +    main_resource.messages.create args +  end +    def import      update status: 'running', started_at: Time.now @@ -35,6 +53,7 @@ class Import::Gtfs < Import::Base        workbench_id: workbench.id,        metadatas: [referential_metadata]      ) +    main_resource.update referential: referential    end    def referential_metadata @@ -131,17 +150,21 @@ class Import::Gtfs < Import::Base    end    def import_agencies +    count = 0      Chouette::Company.transaction do        source.agencies.each do |agency|          company = line_referential.companies.find_or_initialize_by(registration_number: agency.id)          company.attributes = { name: agency.name }          save_model company +        count += 1        end      end +    create_message criticity: "info", message_key: "gtfs.agencies.imported", message_attributes: {count: count}    end    def import_stops +    count = 0      Chouette::StopArea.transaction do        source.stops.each do |stop|          stop_area = stop_area_referential.stop_areas.find_or_initialize_by(registration_number: stop.id) @@ -155,11 +178,14 @@ class Import::Gtfs < Import::Base          # TODO correct default timezone          save_model stop_area +        count += 1        end +      create_message criticity: "info", message_key: "gtfs.stops.imported", message_attributes: {count: count}      end    end    def import_routes +    count = 0      Chouette::Line.transaction do        source.routes.each do |route|          line = line_referential.lines.find_or_initialize_by(registration_number: route.id) @@ -178,7 +204,9 @@ class Import::Gtfs < Import::Base          line.url = route.url          save_model line +        count += 1        end +      create_message criticity: "info", message_key: "gtfs.routes.imported", message_attributes: {count: count}      end    end @@ -187,6 +215,7 @@ class Import::Gtfs < Import::Base    end    def import_trips +    count = 0      source.trips.each_slice(100) do |slice|        slice.each do |trip|          Chouette::Route.transaction do @@ -205,18 +234,20 @@ class Import::Gtfs < Import::Base            vehicle_journey = journey_pattern.vehicle_journeys.build route: route            vehicle_journey.published_journey_name = trip.headsign.presence || trip.id            save_model vehicle_journey +          count += 1            time_table = referential.time_tables.find_by(id: time_tables_by_service_id[trip.service_id]) if time_tables_by_service_id[trip.service_id]            if time_table              vehicle_journey.time_tables << time_table            else -            messages.create! criticity: "warning", message_key: "gtfs.trips.unkown_service_id", message_attributes: {service_id: trip.service_id} +            create_message criticity: "warning", message_key: "gtfs.trips.unkown_service_id", message_attributes: {service_id: trip.service_id}            end            vehicle_journey_by_trip_id[trip.id] = vehicle_journey.id          end        end      end +    create_message criticity: "info", message_key: "gtfs.trips.imported", message_attributes: {count: count}    end    def import_stop_times @@ -262,6 +293,7 @@ class Import::Gtfs < Import::Base    end    def import_calendars +    count = 0      source.calendars.each_slice(500) do |slice|        Chouette::TimeTable.transaction do          slice.each do |calendar| @@ -272,11 +304,13 @@ class Import::Gtfs < Import::Base            time_table.periods.build period_start: calendar.start_date, period_end: calendar.end_date            save_model time_table +          count += 1            time_tables_by_service_id[calendar.service_id] = time_table.id          end        end      end +    create_message criticity: "info", message_key: "gtfs.calendars.imported", message_attributes: {count: count}    end    def import_calendar_dates | 
