aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/calendars_controller.rb25
-rw-r--r--app/controllers/concerns/workgroup_support.rb12
-rw-r--r--app/helpers/table_builder_helper/url.rb4
-rw-r--r--app/models/calendar.rb2
-rw-r--r--app/views/calendars/_form.html.slim2
-rw-r--r--app/views/calendars/edit.html.slim2
-rw-r--r--app/views/calendars/index.html.slim2
-rw-r--r--app/views/calendars/new.html.slim2
-rw-r--r--app/views/calendars/show.html.slim4
-rw-r--r--config/breadcrumbs.rb10
-rw-r--r--lib/stif/dashboard.rb6
11 files changed, 50 insertions, 21 deletions
diff --git a/app/controllers/calendars_controller.rb b/app/controllers/calendars_controller.rb
index 72d213953..27c944f5f 100644
--- a/app/controllers/calendars_controller.rb
+++ b/app/controllers/calendars_controller.rb
@@ -1,4 +1,5 @@
class CalendarsController < ChouetteController
+ include WorkgroupSupport
include PolicyChecker
defaults resource_class: Calendar
before_action :ransack_contains_date, only: [:index]
@@ -7,19 +8,30 @@ class CalendarsController < ChouetteController
def index
index! do
- @calendars = ModelDecorator.decorate(@calendars, with: CalendarDecorator, context: {
- workgroup: current_workgroup
- })
+ @calendars = decorate_calendars(@calendars)
end
end
def show
show! do
- @calendar = @calendar.decorate
+ @calendar = @calendar.decorate(context: {
+ workgroup: current_workgroup
+ })
end
end
private
+
+ def decorate_calendars(calendars)
+ ModelDecorator.decorate(
+ calendars,
+ with: CalendarDecorator,
+ context: {
+ workgroup: current_workgroup
+ }
+ )
+ end
+
def calendar_params
permitted_params = [:id, :name, :short_name, :shared, periods_attributes: [:id, :begin, :end, :_destroy], date_values_attributes: [:id, :value, :_destroy]]
permitted_params << :shared if policy(Calendar).share?
@@ -36,18 +48,19 @@ class CalendarsController < ChouetteController
protected
def resource
- @calendar = Calendar.where('organisation_id = ? OR shared = true', current_organisation.id).find_by_id(params[:id])
+ @calendar = Calendar.where('(organisation_id = ? OR shared = ?) AND workgroup_id = ?', current_organisation.id).find_by_id(params[:id], true, @workgroup.id)
end
def build_resource
super.tap do |calendar|
+ calendar.workgroup = current_workgroup
calendar.organisation = current_organisation
end
end
def collection
return @calendars if @calendars
- scope = Calendar.where('organisation_id = ? OR shared = ?', current_organisation.id, true)
+ scope = Calendar.where('(organisation_id = ? OR shared = ?) AND workgroup_id = ?', current_organisation.id, true, @workgroup.id)
scope = shared_scope(scope)
@q = scope.ransack(params[:q])
diff --git a/app/controllers/concerns/workgroup_support.rb b/app/controllers/concerns/workgroup_support.rb
new file mode 100644
index 000000000..a3b49bb12
--- /dev/null
+++ b/app/controllers/concerns/workgroup_support.rb
@@ -0,0 +1,12 @@
+module WorkgroupSupport
+ extend ActiveSupport::Concern
+
+ included do
+ before_action :find_workgroup
+ end
+
+ def find_workgroup
+ @workgroup ||= Workgroup.find params[:workgroup_id]
+ end
+
+end
diff --git a/app/helpers/table_builder_helper/url.rb b/app/helpers/table_builder_helper/url.rb
index 40e1f839f..0e3dce0aa 100644
--- a/app/helpers/table_builder_helper/url.rb
+++ b/app/helpers/table_builder_helper/url.rb
@@ -3,7 +3,7 @@ module TableBuilderHelper
def self.polymorphic_url_parts(item, referential, workgroup)
polymorph_url = []
- unless item.is_a?(Referential) || item.is_a?(ComplianceControlSet)
+ unless item.is_a?(Calendar) || item.is_a?(Referential) || item.is_a?(ComplianceControlSet)
if referential
polymorph_url << referential
polymorph_url << item.line if item.respond_to? :line
@@ -20,7 +20,7 @@ module TableBuilderHelper
end
end
else
- polymorph_url << item.workgroup if item.is_a?(Calendar)
+ polymorph_url << item.workgroup if item.respond_to? :workgroup
polymorph_url << item
end
diff --git a/app/models/calendar.rb b/app/models/calendar.rb
index 236223892..d93532908 100644
--- a/app/models/calendar.rb
+++ b/app/models/calendar.rb
@@ -10,7 +10,7 @@ class Calendar < ActiveRecord::Base
belongs_to :organisation
belongs_to :workgroup
- validates_presence_of :name, :short_name, :organisation
+ validates_presence_of :name, :short_name, :organisation, :workgroup
validates_uniqueness_of :short_name
has_many :time_tables
diff --git a/app/views/calendars/_form.html.slim b/app/views/calendars/_form.html.slim
index 3c152c61d..bf9f4f3a7 100644
--- a/app/views/calendars/_form.html.slim
+++ b/app/views/calendars/_form.html.slim
@@ -1,4 +1,4 @@
-= simple_form_for @calendar, html: { class: 'form-horizontal', id: 'calendar_form' }, wrapper: :horizontal_form do |f|
+= simple_form_for [@workgroup, @calendar], html: { class: 'form-horizontal', id: 'calendar_form' }, wrapper: :horizontal_form do |f|
.row
.col-lg-12
= f.input :name
diff --git a/app/views/calendars/edit.html.slim b/app/views/calendars/edit.html.slim
index e806fc94b..a1af5e257 100644
--- a/app/views/calendars/edit.html.slim
+++ b/app/views/calendars/edit.html.slim
@@ -1,4 +1,4 @@
-- breadcrumb :calendar, @calendar
+- breadcrumb :calendar, @workgroup, @calendar
- page_header_content_for @calendar
.page_content
.container-fluid
diff --git a/app/views/calendars/index.html.slim b/app/views/calendars/index.html.slim
index d0544856d..60bc9793d 100644
--- a/app/views/calendars/index.html.slim
+++ b/app/views/calendars/index.html.slim
@@ -1,4 +1,4 @@
-- breadcrumb :calendars
+- breadcrumb :calendars, current_workgroup
- content_for :page_header_actions do
- if policy(Calendar).create?
= link_to(t('actions.add'), new_workgroup_calendar_path(current_workgroup), class: 'btn btn-default')
diff --git a/app/views/calendars/new.html.slim b/app/views/calendars/new.html.slim
index ce8b6a036..c1e084913 100644
--- a/app/views/calendars/new.html.slim
+++ b/app/views/calendars/new.html.slim
@@ -1,4 +1,4 @@
-- breadcrumb :calendars
+- breadcrumb :calendars, @workgroup
.page_content
.container-fluid
.row
diff --git a/app/views/calendars/show.html.slim b/app/views/calendars/show.html.slim
index da4afa3e6..9f7512173 100644
--- a/app/views/calendars/show.html.slim
+++ b/app/views/calendars/show.html.slim
@@ -1,4 +1,4 @@
-- breadcrumb :calendar, @calendar
+- breadcrumb :calendar, @workgroup, @calendar
- page_header_content_for @calendar
- content_for :page_header_content do
.row.mb-sm
@@ -11,7 +11,7 @@
= link.content
- if policy(@calendar).edit?
- content_for :page_header_actions do
- = link_to(t('actions.edit'), edit_calendar_path(@calendar), class: 'btn btn-default')
+ = link_to(t('actions.edit'), edit_workgroup_calendar_path(@workgroup, @calendar), class: 'btn btn-default')
.page_content
.container-fluid
diff --git a/config/breadcrumbs.rb b/config/breadcrumbs.rb
index 6da96d73a..2772895fe 100644
--- a/config/breadcrumbs.rb
+++ b/config/breadcrumbs.rb
@@ -202,13 +202,13 @@ crumb :purchase_window do |referential, purchase_window|
parent :purchase_windows, referential
end
-crumb :calendars do
- link I18n.t('calendars.index.title'), calendars_path
+crumb :calendars do |workgroup|
+ link I18n.t('calendars.index.title'), workgroup_calendars_path(workgroup)
end
-crumb :calendar do |calendar|
- link breadcrumb_name(calendar), calendar_path(calendar)
- parent :calendars
+crumb :calendar do |workgroup, calendar|
+ link breadcrumb_name(calendar), workgroup_calendar_path(workgroup, calendar)
+ parent :calendars, workgroup
end
crumb :referential_line do |referential, line|
diff --git a/lib/stif/dashboard.rb b/lib/stif/dashboard.rb
index 7dd83efbc..46c635091 100644
--- a/lib/stif/dashboard.rb
+++ b/lib/stif/dashboard.rb
@@ -4,12 +4,16 @@ module Stif
@workbench ||= current_organisation.workbenches.find_by(name: "Gestion de l'offre")
end
+ def workgroup
+ workbench.workgroup
+ end
+
def referentials
@referentials ||= self.workbench.all_referentials
end
def calendars
- @calendars ||= Calendar.where('workgroup_id = ? OR shared = ?', @workbench.workgroup_id, true)
+ @calendars ||= Calendar.where('(organisation_id = ? OR shared = ?) AND workgroup_id = ?', current_organisation.id, true, workgroup.id)
end
end
end