aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlban Peignier2017-09-30 14:17:28 +0200
committerAlban Peignier2017-09-30 14:46:09 +0200
commitfda2b7b07349fd20cc70d68bf1544a7f51841f70 (patch)
tree87772ddf673bcee1861ad5d54d9b26cfaed7fea9
parent1ae15e06f2a56f9a83d670ad9c785a74cb6af43e (diff)
downloadchouette-core-fda2b7b07349fd20cc70d68bf1544a7f51841f70.tar.bz2
Create DashboardController with STIF implementation. Refs #4655
-rw-r--r--app/controllers/dashboards_controller.rb8
-rw-r--r--app/controllers/workbenches_controller.rb5
-rw-r--r--app/models/dashboard.rb27
-rw-r--r--app/models/workbench.rb1
-rw-r--r--app/views/dashboards/show.html.slim15
-rw-r--r--app/views/stif/dashboards/_dashboard.html.slim73
-rw-r--r--config/initializers/stif.rb4
-rw-r--r--config/locales/dashboard.fr.yml4
-rw-r--r--config/locales/stif.fr.yml12
-rw-r--r--config/locales/workbenches.fr.yml11
-rw-r--r--config/routes.rb4
-rw-r--r--lib/stif/dashboard.rb15
12 files changed, 163 insertions, 16 deletions
diff --git a/app/controllers/dashboards_controller.rb b/app/controllers/dashboards_controller.rb
new file mode 100644
index 000000000..4c0042b67
--- /dev/null
+++ b/app/controllers/dashboards_controller.rb
@@ -0,0 +1,8 @@
+class DashboardsController < BreadcrumbController
+ respond_to :html, only: [:show]
+
+ def show
+ @dashboard = Dashboard.create self
+ end
+
+end
diff --git a/app/controllers/workbenches_controller.rb b/app/controllers/workbenches_controller.rb
index 54ddb8be1..d597ba371 100644
--- a/app/controllers/workbenches_controller.rb
+++ b/app/controllers/workbenches_controller.rb
@@ -5,10 +5,7 @@ class WorkbenchesController < BreadcrumbController
respond_to :html, only: [:show, :index]
def index
- # Only display Wb with selected name, according to #4108
- @workbench = current_organisation.workbenches.find_by(name: "Gestion de l'offre")
- @referentials = @workbench.all_referentials
- @calendars = Calendar.where('organisation_id = ? OR shared = ?', current_organisation.id, true)
+ redirect_to dashboard_path
end
def show
diff --git a/app/models/dashboard.rb b/app/models/dashboard.rb
new file mode 100644
index 000000000..a53267db5
--- /dev/null
+++ b/app/models/dashboard.rb
@@ -0,0 +1,27 @@
+#
+# The default Dashboard implementation can be customized in an initializer :
+#
+# Rails.application.config.to_prepare do
+# Dashboard.default_class = Custom::Dashboard
+# end
+#
+class Dashboard
+ include ActiveModel::Conversion
+
+ @@default_class = self
+ mattr_accessor :default_class
+
+ attr_reader :context
+
+ def initialize(context)
+ @context = context
+ end
+
+ def self.create(context)
+ default_class.new context
+ end
+
+ def current_organisation
+ context.send(:current_organisation)
+ end
+end
diff --git a/app/models/workbench.rb b/app/models/workbench.rb
index ae111a9c5..c304e8ba9 100644
--- a/app/models/workbench.rb
+++ b/app/models/workbench.rb
@@ -12,6 +12,7 @@ class Workbench < ActiveRecord::Base
has_many :imports
has_many :workbench_imports
has_many :compliance_check_sets
+ has_many :compliance_control_sets
validates :name, presence: true
validates :organisation, presence: true
diff --git a/app/views/dashboards/show.html.slim b/app/views/dashboards/show.html.slim
new file mode 100644
index 000000000..66154712d
--- /dev/null
+++ b/app/views/dashboards/show.html.slim
@@ -0,0 +1,15 @@
+/ PageHeader
+= pageheader 'tableau-de-bord',
+ t('.title', organisation: current_organisation.name)
+
+ / Below is secundary actions & optional contents (filters, ...)
+ .row.mb-sm
+ .col-lg-12.text-right
+ - if policy(Api::V1::ApiKey).create?
+ = link_to t('actions.create_api_key'), new_api_key_path, class: 'btn btn-primary'
+
+
+/ PageContent
+.page_content
+ .container-fluid
+ = render partial: @dashboard
diff --git a/app/views/stif/dashboards/_dashboard.html.slim b/app/views/stif/dashboards/_dashboard.html.slim
new file mode 100644
index 000000000..3142ecd5b
--- /dev/null
+++ b/app/views/stif/dashboards/_dashboard.html.slim
@@ -0,0 +1,73 @@
+.row
+ .col-lg-12
+ h2.content_header = t('.subtitle')
+
+.row
+ .col-lg-6.col-md-6.col-sm-6.col-xs-12
+ .panel.panel-default
+ .panel-heading
+ h3.panel-title
+ = t('.organisation')
+
+ .panel-body
+ em.small.text-muted = t('.no_content')
+
+ .panel.panel-default
+ .panel-heading
+ h3.panel-title
+ = t('.idf')
+
+ .panel-body
+ em.small.text-muted = t('.no_content')
+
+ .panel.panel-default
+ .panel-heading
+ h3.panel-title
+ = t('.api_keys')
+ span.badge.ml-xs = current_organisation.api_keys.count if current_organisation.api_keys.present?
+ - if current_organisation.api_keys.present?
+ - current_organisation.api_keys.each do |api_key|
+ .list-group
+ = policy(api_key).edit? ? link_to( "#{api_key.name} : #{api_key.token}", edit_api_key_path(api_key), class: 'list-group-item') : "#{api_key.name} : #{api_key.token}"
+ - else
+ .panel-body
+ em.small.text-muted = t('.no_content')
+
+ .col-lg-6.col-md-6.col-sm-6.col-xs-12
+ .panel.panel-default
+ .panel-heading
+ h3.panel-title.with_actions
+ div
+ = t('.referentials')
+ span.badge.ml-xs = @referentials.count if @referentials.present?
+
+ div
+ = link_to '', workbench_path(@dashboard.workbench), class: ' fa fa-chevron-right pull-right', title: t('.see')
+
+ - if @referentials.present?
+ .list-group
+ - @referentials.each_with_index do |referential, i|
+ = link_to referential.name, referential_path(referential, workbench_id: referential.workbench_id, current_workbench_id: @dashboard.workbench.id), class: 'list-group-item' if i < 6
+
+ - else
+ .panel-body
+ em.small.text-muted = t('.no_content')
+
+ .panel.panel-default
+ .panel-heading
+ h3.panel-title.with_actions
+ div
+ = t('.calendars')
+ span.badge.ml-xs = @dashboard.calendars.count if @dashboard.calendars.present?
+
+ div
+ = link_to '', calendars_path, class: ' fa fa-chevron-right pull-right', title: t('.see')
+
+ - if @dashboard.calendars.present?
+ .list-group
+ - @dashboard.calendars.each_with_index do |calendar, i|
+ = link_to calendar.name, calendar_path(calendar), class: 'list-group-item' if i < 6
+
+ - else
+ .panel-body
+ em.small.text-muted = t('.no_content')
diff --git a/config/initializers/stif.rb b/config/initializers/stif.rb
index 6a79cadc8..f20429575 100644
--- a/config/initializers/stif.rb
+++ b/config/initializers/stif.rb
@@ -11,3 +11,7 @@ Rails.application.config.to_prepare do
end
end
end unless Rails.env.test?
+
+Rails.application.config.to_prepare do
+ Dashboard.default_class = Stif::Dashboard
+end
diff --git a/config/locales/dashboard.fr.yml b/config/locales/dashboard.fr.yml
new file mode 100644
index 000000000..fffb36cd1
--- /dev/null
+++ b/config/locales/dashboard.fr.yml
@@ -0,0 +1,4 @@
+fr:
+ dashboards:
+ show:
+ title: "Tableau de bord %{organisation}"
diff --git a/config/locales/stif.fr.yml b/config/locales/stif.fr.yml
new file mode 100644
index 000000000..4c2ecc951
--- /dev/null
+++ b/config/locales/stif.fr.yml
@@ -0,0 +1,12 @@
+fr:
+ stif:
+ dashboards:
+ dashboard:
+ subtitle: "Offres de transport"
+ organisation: "Offres de mon organisation"
+ idf: "Offres IDF"
+ api_keys: "Clés d'API"
+ referentials: "Jeux de données"
+ calendars: "Calendriers"
+ see: "Voir la liste"
+ no_content: "Aucun contenu pour le moment"
diff --git a/config/locales/workbenches.fr.yml b/config/locales/workbenches.fr.yml
index f361251a0..7a614efc5 100644
--- a/config/locales/workbenches.fr.yml
+++ b/config/locales/workbenches.fr.yml
@@ -1,16 +1,5 @@
fr:
workbenches:
- index:
- title: "Tableau de bord %{organisation}"
- offers:
- title: "Offres de transport"
- organisation: "Offres de mon organisation"
- idf: "Offres IDF"
- api_keys: "Clés d'API"
- referentials: "Jeux de données"
- calendars: "Calendriers"
- see: "Voir la liste"
- no_content: "Aucun contenu pour le moment"
referential_count:
zero: "Aucun jeu de données à l'heure actuelle"
one: "1 jeu de données à l'heure actuelle"
diff --git a/config/routes.rb b/config/routes.rb
index cc3896da9..b9e318f91 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,6 +1,8 @@
require 'sidekiq/web'
ChouetteIhm::Application.routes.draw do
+ resource :dashboard
+
resources :workbenches, only: [:show, :index] do
delete :referentials, on: :member, action: :delete_referentials
resources :imports do
@@ -216,7 +218,7 @@ ChouetteIhm::Application.routes.draw do
end
end
- root :to => "workbenches#index"
+ root :to => "dashboards#show"
get '/help/(*slug)' => 'help#show'
diff --git a/lib/stif/dashboard.rb b/lib/stif/dashboard.rb
new file mode 100644
index 000000000..fafddec62
--- /dev/null
+++ b/lib/stif/dashboard.rb
@@ -0,0 +1,15 @@
+module Stif
+ class Dashboard < ::Dashboard
+ def workbench
+ @workbench ||= current_organisation.workbenches.find_by(name: "Gestion de l'offre")
+ end
+
+ def referentials
+ @referentials ||= @workbench.all_referentials
+ end
+
+ def calendars
+ @calendars ||= Calendar.where('organisation_id = ? OR shared = ?', current_organisation.id, true)
+ end
+ end
+end