diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/calendars_controller.rb | 24 | ||||
| -rw-r--r-- | app/controllers/concerns/workgroup_support.rb | 12 | ||||
| -rw-r--r-- | app/helpers/table_builder_helper.rb | 8 | ||||
| -rw-r--r-- | app/helpers/table_builder_helper/custom_links.rb | 7 | ||||
| -rw-r--r-- | app/helpers/table_builder_helper/url.rb | 3 | ||||
| -rw-r--r-- | app/models/calendar.rb | 3 | ||||
| -rw-r--r-- | app/models/workgroup.rb | 1 | ||||
| -rw-r--r-- | app/views/calendars/_filters.html.slim | 4 | ||||
| -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 | 4 | ||||
| -rw-r--r-- | app/views/calendars/new.html.slim | 2 | ||||
| -rw-r--r-- | app/views/calendars/show.html.slim | 2 | ||||
| -rw-r--r-- | app/views/dashboards/_dashboard.html.slim | 6 | ||||
| -rw-r--r-- | app/views/layouts/navigation/_main_nav_left_content_stif.html.slim | 2 | ||||
| -rw-r--r-- | app/views/stif/dashboards/_dashboard.html.slim | 4 | 
16 files changed, 63 insertions, 23 deletions
| diff --git a/app/controllers/calendars_controller.rb b/app/controllers/calendars_controller.rb index de8f9d10c..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,14 +8,30 @@ class CalendarsController < ChouetteController    def index      index! do -      @calendars = CalendarDecorator.decorate(@calendars) +      @calendars = decorate_calendars(@calendars)      end    end    def show +    show! do +      @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? @@ -31,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]).decorate +    @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.rb b/app/helpers/table_builder_helper.rb index 9a255e757..f48075ed9 100644 --- a/app/helpers/table_builder_helper.rb +++ b/app/helpers/table_builder_helper.rb @@ -330,7 +330,7 @@ module TableBuilderHelper      else        menu = content_tag :ul, class: 'dropdown-menu' do          ( -          CustomLinks.new(item, pundit_user, links, referential).links + +          CustomLinks.new(item, pundit_user, links, referential, workgroup).links +            action_links.select { |link| link.is_a?(Link) }          ).map do |link|            gear_menu_link(link) @@ -414,4 +414,10 @@ module TableBuilderHelper      # cases, avoid a `NoMethodError`.      @__referential__ ||= try(:current_referential)    end + +  def workgroup +    # Certain controllers don't define a `#current_referential`. In these +    # cases, avoid a `NoMethodError`. +    @__workgroup__ ||= try(:current_workgroup) +  end  end diff --git a/app/helpers/table_builder_helper/custom_links.rb b/app/helpers/table_builder_helper/custom_links.rb index b1bb11f10..e09078be0 100644 --- a/app/helpers/table_builder_helper/custom_links.rb +++ b/app/helpers/table_builder_helper/custom_links.rb @@ -8,13 +8,14 @@ module TableBuilderHelper        unarchive: :put      } -    attr_reader :actions, :object, :user_context, :referential +    attr_reader :actions, :object, :user_context, :referential, :workgroup -    def initialize(object, user_context, actions, referential = nil) +    def initialize(object, user_context, actions, referential = nil, workgroup = nil)        @object       = object        @user_context = user_context        @actions      = actions        @referential  = referential +      @workgroup  = workgroup      end      def links @@ -34,7 +35,7 @@ module TableBuilderHelper          polymorph_url << action        end -      polymorph_url += URL.polymorphic_url_parts(object, referential) +      polymorph_url += URL.polymorphic_url_parts(object, referential, workgroup)      end      def method_for_action(action) diff --git a/app/helpers/table_builder_helper/url.rb b/app/helpers/table_builder_helper/url.rb index 28f1ade76..0e3dce0aa 100644 --- a/app/helpers/table_builder_helper/url.rb +++ b/app/helpers/table_builder_helper/url.rb @@ -1,6 +1,6 @@  module TableBuilderHelper    class URL -    def self.polymorphic_url_parts(item, referential) +    def self.polymorphic_url_parts(item, referential, workgroup)        polymorph_url = []        unless item.is_a?(Calendar) || item.is_a?(Referential) || item.is_a?(ComplianceControlSet) @@ -20,6 +20,7 @@ module TableBuilderHelper            end          end        else +        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 a7fd9220c..d93532908 100644 --- a/app/models/calendar.rb +++ b/app/models/calendar.rb @@ -8,8 +8,9 @@ class Calendar < ActiveRecord::Base    has_paper_trail class_name: 'PublicVersion'    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/models/workgroup.rb b/app/models/workgroup.rb index 3d761e81f..3af20ae23 100644 --- a/app/models/workgroup.rb +++ b/app/models/workgroup.rb @@ -3,6 +3,7 @@ class Workgroup < ActiveRecord::Base    belongs_to :stop_area_referential    has_many :workbenches +  has_many :calendars    has_many :organisations, through: :workbenches    has_many :referentials, through: :workbenches diff --git a/app/views/calendars/_filters.html.slim b/app/views/calendars/_filters.html.slim index b5283c1e8..c1d8c47f7 100644 --- a/app/views/calendars/_filters.html.slim +++ b/app/views/calendars/_filters.html.slim @@ -1,4 +1,4 @@ -= search_form_for @q, url: calendars_path, builder: SimpleForm::FormBuilder, html: { method: :get, class: 'form form-filter' } do |f| += search_form_for @q, url: workgroup_calendars_path(current_workgroup), builder: SimpleForm::FormBuilder, html: { method: :get, class: 'form form-filter' } do |f|    .ffg-row      .input-group.search_bar        = f.search_field :name_or_short_name_cont, class: 'form-control', placeholder: 'Indiquez un nom/nom court de calendrier...' @@ -18,5 +18,5 @@        = f.input :contains_date, as: :date, label: false, wrapper_html: { class: 'date smart_date' }, class: 'form-control', include_blank: true    .actions -    = link_to 'Effacer', calendars_path, class: 'btn btn-link' +    = link_to 'Effacer', workgroup_calendars_path(current_workgroup), class: 'btn btn-link'      = f.submit 'Filtrer', id: 'calendar_filter_btn', class: 'btn btn-default' 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 92c24be5b..309f0e6f9 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  .page_content    .container-fluid @@ -16,7 +16,7 @@                  key: :name, \                  attribute: 'name', \                  link_to: lambda do |calendar| \ -                  calendar_path(calendar) \ +                  workgroup_calendar_path(current_workgroup, calendar) \                  end \                ), \                TableBuilderHelper::Column.new( \ 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 8eb66dc60..cd2be2bd1 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  .page_content diff --git a/app/views/dashboards/_dashboard.html.slim b/app/views/dashboards/_dashboard.html.slim index 075b94ddc..58cfcc542 100644 --- a/app/views/dashboards/_dashboard.html.slim +++ b/app/views/dashboards/_dashboard.html.slim @@ -22,13 +22,13 @@      .panel.panel-default        .panel-heading          h3.panel-title.with_actions -          = link_to I18n.t("activerecord.models.calendar", count: @dashboard.current_organisation.calendars.size), calendars_path +          = link_to I18n.t("activerecord.models.calendar", count: @dashboard.current_organisation.calendars.size), workgroup_calendars_path(current_workgroup)            div -            = link_to '', calendars_path, class: ' fa fa-chevron-right pull-right' +            = link_to '', workgroup_calendars_path(current_workgroup), class: ' fa fa-chevron-right pull-right'        - if @dashboard.current_organisation.calendars.present?          .list-group            - @dashboard.current_organisation.calendars.order("updated_at desc").limit(5).each do |calendar| -            = link_to calendar.name, calendar_path(calendar), class: 'list-group-item' +            = link_to calendar.name, workgroup_calendars_path(current_workgroup, calendar), class: 'list-group-item'        - else          .panel-body            em.small.text-muted diff --git a/app/views/layouts/navigation/_main_nav_left_content_stif.html.slim b/app/views/layouts/navigation/_main_nav_left_content_stif.html.slim index 3963d4cd4..1b7293d21 100644 --- a/app/views/layouts/navigation/_main_nav_left_content_stif.html.slim +++ b/app/views/layouts/navigation/_main_nav_left_content_stif.html.slim @@ -29,7 +29,7 @@              span Jeux de données            = link_to workbench_imports_path(current_offer_workbench), class: "list-group-item #{(params[:controller] == 'imports') ? 'active' : ''}" do              span Import -          = link_to calendars_path, class: 'list-group-item' do +          = link_to workgroup_calendars_path(current_workgroup), class: 'list-group-item' do              span Modèles de calendrier            = link_to workbench_compliance_check_sets_path(current_offer_workbench), class: 'list-group-item' do              span Rapport de contrôle diff --git a/app/views/stif/dashboards/_dashboard.html.slim b/app/views/stif/dashboards/_dashboard.html.slim index 64e7d4f96..c28696a94 100644 --- a/app/views/stif/dashboards/_dashboard.html.slim +++ b/app/views/stif/dashboards/_dashboard.html.slim @@ -60,12 +60,12 @@            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') +            = link_to '', workgroup_calendars_path(current_workgroup), class: ' fa fa-chevron-right pull-right', title: t('.see')        - if @dashboard.calendars.present?          .list-group            - @dashboard.calendars.first(5).each_with_index do |calendar, i| -            = link_to calendar.name, calendar_path(calendar), class: 'list-group-item' if i < 6 +            = link_to calendar.name, workgroup_calendar_path(current_workgroup, calendar), class: 'list-group-item' if i < 6        - else          .panel-body | 
