diff options
Diffstat (limited to 'lib/stif/reflex_synchronization.rb')
| -rw-r--r-- | lib/stif/reflex_synchronization.rb | 69 | 
1 files changed, 69 insertions, 0 deletions
| diff --git a/lib/stif/reflex_synchronization.rb b/lib/stif/reflex_synchronization.rb new file mode 100644 index 000000000..ce663396b --- /dev/null +++ b/lib/stif/reflex_synchronization.rb @@ -0,0 +1,69 @@ +module Stif +  module ReflexSynchronization +    class << self +      def defaut_referential +        StopAreaReferential.find_by(name: "Reflex") +      end + +      # Todo remove dummy objectid +      def find_by_object_id objectid +        Chouette::StopArea.find_by(objectid: "dummy:StopArea:#{objectid.tr(':', '')}") +      end + +      def synchronize_stop_area +        client = Reflex::API.new +        ['getOR', 'getOP'].each do |method| +          results = client.process method +          results = results[:Quay].merge(results[:StopPlace]) + +          processed = [] +          results.each do |id, entry| +            Rails.logger.debug "Reflex - Processing - #{entry.id}" +            processed << self.create_or_update_stop_area(entry) +          end +          processed.each do |entry| +            Rails.logger.debug "Reflex - Set parent for - #{entry.id}" +            self.set_parent entry +          end +        end +      end + +      def set_parent entry +        return false unless entry.try(:parent_site_ref) || entry.try(:quays) +        stop = self.find_by_object_id entry.id + +        if entry.try(:parent_site_ref) +          stop.parent = self.find_by_object_id entry.parent_site_ref +          stop.save! if stop.changed +        end + +        if entry.try(:quays) +          entry.quays.each do |quay| +            children = self.find_by_object_id(quay[:ref]) +            next unless children +            children.parent = stop +            children.save! if children.changed? +          end +        end +      end + +      def create_or_update_stop_area entry +        stop = Chouette::StopArea.find_or_create_by(objectid: "dummy:StopArea:#{entry.id.tr(':', '')}") +        stop.stop_area_referential = self.defaut_referential + +        stop.name          = entry.name +        stop.creation_time = entry.created +        stop.area_type     = entry.area_type +        # stop.object_version = entry.version +        stop.zip_code  = entry.postal_code +        stop.city_name = entry.city + +        if stop.changed? +          Rails.logger.debug "Reflex - Updating - #{entry.id}" +          stop.save! +          stop +        end +      end +    end +  end +end | 
