diff options
| author | Zog | 2018-04-18 13:19:18 +0200 |
|---|---|---|
| committer | Johan Van Ryseghem | 2018-04-27 11:17:19 +0200 |
| commit | f7fe4c24e29ceb517abdda66899952a5d6aa73bf (patch) | |
| tree | 7fdd8323e8e5a0189771976878310167b6cdac49 /app | |
| parent | 0046e5a01cb08c10118b01c50f3c52d159854ef0 (diff) | |
| download | chouette-core-f7fe4c24e29ceb517abdda66899952a5d6aa73bf.tar.bz2 | |
Refs #6572; New Referential#Show for noredy referentials
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/clean_ups_controller.rb | 2 | ||||
| -rw-r--r-- | app/controllers/concerns/referential_support.rb | 1 | ||||
| -rw-r--r-- | app/helpers/referentials_helper.rb | 10 | ||||
| -rw-r--r-- | app/models/clean_up.rb | 4 | ||||
| -rw-r--r-- | app/models/concerns/iev_interfaces/task.rb | 4 | ||||
| -rw-r--r-- | app/models/referential.rb | 30 | ||||
| -rw-r--r-- | app/policies/referential_policy.rb | 4 | ||||
| -rw-r--r-- | app/views/layouts/navigation/_page_header.html.slim | 1 | ||||
| -rw-r--r-- | app/views/referentials/show.html.slim | 154 |
9 files changed, 134 insertions, 76 deletions
diff --git a/app/controllers/clean_ups_controller.rb b/app/controllers/clean_ups_controller.rb index c25df1a00..350f9ae87 100644 --- a/app/controllers/clean_ups_controller.rb +++ b/app/controllers/clean_ups_controller.rb @@ -3,6 +3,8 @@ class CleanUpsController < ChouetteController respond_to :html, :only => [:create] belongs_to :referential + defaults :resource_class => CleanUp + def create @clean_up = CleanUp.new(clean_up_params) @clean_up.referential = @referential diff --git a/app/controllers/concerns/referential_support.rb b/app/controllers/concerns/referential_support.rb index fe75e3579..f606e0e63 100644 --- a/app/controllers/concerns/referential_support.rb +++ b/app/controllers/concerns/referential_support.rb @@ -8,6 +8,7 @@ module ReferentialSupport end def switch_referential + authorize referential, :browse? Apartment::Tenant.switch!(referential.slug) end diff --git a/app/helpers/referentials_helper.rb b/app/helpers/referentials_helper.rb index 9b5b13ace..ef8831cdc 100644 --- a/app/helpers/referentials_helper.rb +++ b/app/helpers/referentials_helper.rb @@ -12,6 +12,16 @@ module ReferentialsHelper end end + def referential_state referential + out = if referential.archived? + "<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>" + else + "<div class='td-block'>#{"referentials.states.#{referential.state}".t}</div>" + end + + out.html_safe + end + def referential_overview referential service = ReferentialOverview.new referential, self render partial: "referentials/overview", locals: {referential: referential, overview: service} diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb index ca4f6312b..0f73e07b2 100644 --- a/app/models/clean_up.rb +++ b/app/models/clean_up.rb @@ -12,6 +12,10 @@ class CleanUp < ApplicationModel validate :end_date_must_be_greater_that_begin_date after_commit :perform_cleanup, :on => :create + scope :for_referential, ->(referential) do + where(referential_id: referential.id) + end + def end_date_must_be_greater_that_begin_date if self.end_date && self.date_type == 'between' && self.begin_date >= self.end_date errors.add(:base, I18n.t('activerecord.errors.models.clean_up.invalid_period')) diff --git a/app/models/concerns/iev_interfaces/task.rb b/app/models/concerns/iev_interfaces/task.rb index f052b3a8f..6be33734b 100644 --- a/app/models/concerns/iev_interfaces/task.rb +++ b/app/models/concerns/iev_interfaces/task.rb @@ -23,6 +23,10 @@ module IevInterfaces::Task where('started_at BETWEEN :begin AND :end', begin: period_range.begin, end: period_range.end) end + scope :for_referential, ->(referential) do + where(referential_id: referential.id) + end + scope :blocked, -> { where('created_at < ? AND status = ?', 4.hours.ago, 'running') } before_save :initialize_fields, on: :create diff --git a/app/models/referential.rb b/app/models/referential.rb index c7c22604d..2449d767d 100644 --- a/app/models/referential.rb +++ b/app/models/referential.rb @@ -59,12 +59,12 @@ class Referential < ApplicationModel scope :pending, -> { where(ready: false, failed_at: nil, archived_at: nil) } - scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) } + scope :active, -> { where(ready: true, failed_at: nil, archived_at: nil) } scope :failed, -> { where.not(failed_at: nil) } scope :archived, -> { where.not(archived_at: nil) } - scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) } - scope :ready, -> { where(ready: true, failed_at: nil, archived_at: nil) } + scope :ready, -> { where(ready: true) } + scope :in_periode, ->(periode) { where(id: referential_ids_in_periode(periode)) } scope :include_metadatas_lines, ->(line_ids) { where('referential_metadata.line_ids && ARRAY[?]::bigint[]', line_ids) } scope :order_by_validity_period, ->(dir) { joins(:metadatas).order("unnest(periodes) #{dir}") } @@ -122,6 +122,20 @@ class Referential < ApplicationModel @_models_with_checksum || [] end + OPERATIONS = [Import::Netex, Import::Gtfs, CleanUp] + + def last_operation + operations = [] + Referential::OPERATIONS.each do |klass| + operations << klass.for_referential(self).limit(1).select("'#{klass.name}' as kind, id, created_at").order('created_at DESC').to_sql + end + sql = "SELECT * FROM ((#{operations.join(') UNION (')})) AS subquery ORDER BY subquery.created_at DESC" + res = ActiveRecord::Base.connection.execute(sql).first + if res + res["kind"].constantize.find(res["id"]) + end + end + def lines if metadatas.blank? workbench ? workbench.lines : associated_lines @@ -538,7 +552,7 @@ class Referential < ApplicationModel def state return :failed if failed_at.present? return :archived if archived_at.present? - ready ? :ready : :pending + ready? ? :active : :pending end def pending! @@ -549,7 +563,7 @@ class Referential < ApplicationModel update ready: false, failed_at: Time.now, archived_at: nil end - def ready! + def active! update ready: true, failed_at: nil, archived_at: nil end @@ -557,6 +571,12 @@ class Referential < ApplicationModel update failed_at: nil, archived_at: Time.now end + %i(pending active failed archived).each do |s| + define_method "#{s}?" do + state == s + end + end + def pending_while vals = attributes.slice(*%w(ready archived_at failed_at)) pending! diff --git a/app/policies/referential_policy.rb b/app/policies/referential_policy.rb index f5c2d7c08..e86da7c35 100644 --- a/app/policies/referential_policy.rb +++ b/app/policies/referential_policy.rb @@ -5,6 +5,10 @@ class ReferentialPolicy < ApplicationPolicy end end + def browse? + record.ready? || record.archived? + end + def create? user.has_permission?('referentials.create') end diff --git a/app/views/layouts/navigation/_page_header.html.slim b/app/views/layouts/navigation/_page_header.html.slim index bdc4bdfed..1cac86c4a 100644 --- a/app/views/layouts/navigation/_page_header.html.slim +++ b/app/views/layouts/navigation/_page_header.html.slim @@ -1,5 +1,6 @@ - action_links = resource.action_links(params[:action]) rescue nil - action_links ||= decorated_collection.action_links(params[:action]) rescue nil +- action_links = nil if response.status != 200 .page_header .container-fluid .row diff --git a/app/views/referentials/show.html.slim b/app/views/referentials/show.html.slim index 3cdcff63b..5849bc582 100644 --- a/app/views/referentials/show.html.slim +++ b/app/views/referentials/show.html.slim @@ -6,88 +6,100 @@ .row .col-lg-6.col-md-6.col-sm-12.col-xs-12 - attributes = {} - - attributes[@referential.human_attribute_name(:status)] = @referential.referential_read_only? ? "<div class='td-block'><span class='fa fa-archive'></span><span>#{t('activerecord.attributes.referential.archived_at')}</span></div>".html_safe : "<div class='td-block'><span class='sb sb-lg sb-preparing'></span><span>#{t('activerecord.attributes.referential.archived_at_null')}</span></div>".html_safe unless @referential.in_referential_suite? + - attributes[@referential.human_attribute_name(:state)] = referential_state(@referential) unless @referential.in_referential_suite? - attributes[@referential.human_attribute_name(:validity_period)] = (@referential.validity_period.present? ? t('validity_range', debut: l(@referential.try(:validity_period).try(:begin), format: :short), end: l(@referential.try(:validity_period).try(:end), format: :short)) : '-') - attributes[@referential.human_attribute_name(:organisation)] = @referential.organisation.name - attributes[@referential.human_attribute_name(:merged_at)] = @referential.merged_at ? l(@referential.merged_at, format: :short) : '-' unless @referential.in_referential_suite? = definition_list t('metadatas'), attributes - - if params[:q].present? or @reflines.any? - .row - .col-lg-12 - = render 'filters' + - unless @referential.ready? + - operation = @referential.last_operation + .jumbotron + = import_status(operation.status) + - url = operation.is_a?(Import::Base) ? [operation.workbench, operation.parent || operation] : [@referential, operation] + = link_to url do + | + span + strong= operation.try(:name) || operation.created_at.l(format: :short) + | + span= "(#{operation.class.ts})" - - if @reflines.any? - .row - .col-lg-12 - / ID Codif, nom court, nom de la ligne, réseau, mode, transporteur principal, actions = [show, edit_notes] - = table_builder_2 @reflines, - [ \ - TableBuilderHelper::Column.new( \ - name: t('id_codif'), \ - attribute: Proc.new { |n| n.get_objectid.short_id }, \ - sortable: false \ - ), \ - TableBuilderHelper::Column.new( \ - key: :number, \ - attribute: 'number' \ - ), \ - TableBuilderHelper::Column.new( \ - key: :name, \ - attribute: 'name', \ - link_to: lambda do |line| \ - referential_line_path(@referential, line) \ - end \ - ), \ - TableBuilderHelper::Column.new( \ - key: :status, \ - attribute: Proc.new { |n| line_status(n.status) } \ - ), \ - TableBuilderHelper::Column.new( \ - key: :transport_mode, \ - attribute: Proc.new { |n| n.transport_mode ? t("enumerize.transport_mode.#{n.transport_mode}") : '' }, \ - ), \ - TableBuilderHelper::Column.new( \ - key: 'networks.name', \ - attribute: Proc.new { |n| n.try(:network).try(:name) } \ - ), \ - TableBuilderHelper::Column.new( \ - key: 'companies.name', \ - attribute: Proc.new { |n| n&.company&.name || "-" } \ - ) \ - ], - cls: 'table has-filter has-search', - action: :index + - else + - if params[:q].present? or @reflines.any? + .row + .col-lg-12 + = render 'filters' + - if @reflines.any? + .row + .col-lg-12 + / ID Codif, nom court, nom de la ligne, réseau, mode, transporteur principal, actions = [show, edit_notes] + = table_builder_2 @reflines, + [ \ + TableBuilderHelper::Column.new( \ + name: t('id_codif'), \ + attribute: Proc.new { |n| n.get_objectid.short_id }, \ + sortable: false \ + ), \ + TableBuilderHelper::Column.new( \ + key: :number, \ + attribute: 'number' \ + ), \ + TableBuilderHelper::Column.new( \ + key: :name, \ + attribute: 'name', \ + link_to: lambda do |line| \ + referential_line_path(@referential, line) \ + end \ + ), \ + TableBuilderHelper::Column.new( \ + key: :status, \ + attribute: Proc.new { |n| line_status(n.status) } \ + ), \ + TableBuilderHelper::Column.new( \ + key: :transport_mode, \ + attribute: Proc.new { |n| n.transport_mode ? t("enumerize.transport_mode.#{n.transport_mode}") : '' }, \ + ), \ + TableBuilderHelper::Column.new( \ + key: 'networks.name', \ + attribute: Proc.new { |n| n.try(:network).try(:name) } \ + ), \ + TableBuilderHelper::Column.new( \ + key: 'companies.name', \ + attribute: Proc.new { |n| n&.company&.name || "-" } \ + ) \ + ], + cls: 'table has-filter has-search', + action: :index - = new_pagination @reflines, 'pull-right' + = new_pagination @reflines, 'pull-right' - - unless @reflines.any? - .row.mt-xs - .col-lg-12 - = replacement_msg t('referential_lines.search_no_results') + - unless @reflines.any? + .row.mt-xs + .col-lg-12 + = replacement_msg t('referential_lines.search_no_results') - = referential_overview resource + = referential_overview resource -/ Modal(s) -= modalbox 'purgeModal' do - = simple_form_for [@referential, CleanUp.new] do |f| - .modal-header - h4.modal-title #{t('simple_form.labels.clean_up.title')} - .modal-body - .container-fluid - .row - .col-lg-8.col-ld-offset-2.col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2.col-xs-12 - = f.input :date_type, as: :radio_buttons, label: false + / Modal(s) + = modalbox 'purgeModal' do + = simple_form_for [@referential, CleanUp.new] do |f| + .modal-header + h4.modal-title #{t('simple_form.labels.clean_up.title')} + .modal-body + .container-fluid + .row + .col-lg-8.col-ld-offset-2.col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2.col-xs-12 + = f.input :date_type, as: :radio_buttons, label: false - .col-lg-8.col-ld-offset-2.col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2.col-xs-12 - label.control-label.begin_date = t('titles.clean_up.begin_date') - label.control-label.end_date.hidden = t('titles.clean_up.end_date') - = f.input :begin_date, as: :date, label: false, wrapper_html: { class: 'date smart_date' } + .col-lg-8.col-ld-offset-2.col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2.col-xs-12 + label.control-label.begin_date = t('titles.clean_up.begin_date') + label.control-label.end_date.hidden = t('titles.clean_up.end_date') + = f.input :begin_date, as: :date, label: false, wrapper_html: { class: 'date smart_date' } - = f.input :end_date, as: :date, label: t('titles.clean_up.end_date'), wrapper_html: { class: 'date cleanup_end_date_wrapper smart_date', id: "end_date" } + = f.input :end_date, as: :date, label: t('titles.clean_up.end_date'), wrapper_html: { class: 'date cleanup_end_date_wrapper smart_date', id: "end_date" } - .modal-footer - button.btn.btn-link type='button' data-dismiss='modal' #{t('cancel')} - - unless policy(@referential).referential_read_only? - = f.button :submit, t('actions.clean_up') , class: 'btn btn-primary' + .modal-footer + button.btn.btn-link type='button' data-dismiss='modal' #{t('cancel')} + - unless policy(@referential).referential_read_only? + = f.button :submit, t('actions.clean_up') , class: 'btn btn-primary' |
