diff options
| -rw-r--r-- | app/controllers/calendars_controller.rb | 25 | ||||
| -rw-r--r-- | app/controllers/concerns/workgroup_support.rb | 12 | ||||
| -rw-r--r-- | app/helpers/table_builder_helper/url.rb | 4 | ||||
| -rw-r--r-- | app/models/calendar.rb | 2 | ||||
| -rw-r--r-- | app/views/calendars/_form.html.slim | 2 | ||||
| -rw-r--r-- | app/views/calendars/edit.html.slim | 2 | ||||
| -rw-r--r-- | app/views/calendars/index.html.slim | 2 | ||||
| -rw-r--r-- | app/views/calendars/new.html.slim | 2 | ||||
| -rw-r--r-- | app/views/calendars/show.html.slim | 4 | ||||
| -rw-r--r-- | config/breadcrumbs.rb | 10 | ||||
| -rw-r--r-- | lib/stif/dashboard.rb | 6 | 
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 | 
