From 5f50f76341bc0d3ef291a5de2354a8b84e3557f1 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:05:02 +0200 Subject: [PATCH 01/13] Add the published scope en Procedure --- app/controllers/admin/procedures_controller.rb | 2 +- app/controllers/demo_controller.rb | 2 +- app/controllers/stats_controller.rb | 2 +- app/controllers/users/dossiers_controller.rb | 2 +- app/models/gestionnaire.rb | 2 +- app/models/procedure.rb | 3 ++- app/views/administrations/_list.html.haml | 2 +- .../_left_panel_admin_procedurescontroller_index.html.haml | 2 +- app/views/root/landing.html.haml | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index 5f7731658..242cc7085 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -6,7 +6,7 @@ class Admin::ProceduresController < AdminController def index @procedures = smart_listing_create :procedures, - current_administrateur.procedures.where(published: true, archived: false).order(created_at: :desc), + current_administrateur.procedures.published.where(archived: false).order(created_at: :desc), partial: "admin/procedures/list", array: true diff --git a/app/controllers/demo_controller.rb b/app/controllers/demo_controller.rb index 54f45464d..59b784814 100644 --- a/app/controllers/demo_controller.rb +++ b/app/controllers/demo_controller.rb @@ -6,7 +6,7 @@ class DemoController < ApplicationController return redirect_to root_path if Rails.env.production? smart_listing_create :procedures, - Procedure.where(archived: false, published: true).order("id DESC"), + Procedure.published.where(archived: false).order("id DESC"), partial: "demo/list", array: true end diff --git a/app/controllers/stats_controller.rb b/app/controllers/stats_controller.rb index a4ac3cbb1..5eec020c7 100644 --- a/app/controllers/stats_controller.rb +++ b/app/controllers/stats_controller.rb @@ -4,7 +4,7 @@ class StatsController < ApplicationController MEAN_NUMBER_OF_CHAMPS_IN_A_FORM = 24.0 def index - procedures = Procedure.where(:published => true) + procedures = Procedure.published dossiers = Dossier.where.not(:state => :draft) @procedures_count = procedures.count diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 85209ca1e..1109f7dcd 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -60,7 +60,7 @@ class Users::DossiersController < UsersController end def new - procedure = Procedure.where(archived: false, published: true).find(params[:procedure_id]) + procedure = Procedure.where(archived: false).published.find(params[:procedure_id]) dossier = Dossier.create(procedure: procedure, user: current_user, state: 'draft') siret = params[:siret] || current_user.siret diff --git a/app/models/gestionnaire.rb b/app/models/gestionnaire.rb index 30185d0a2..b60f26353 100644 --- a/app/models/gestionnaire.rb +++ b/app/models/gestionnaire.rb @@ -108,7 +108,7 @@ class Gestionnaire < ActiveRecord::Base start_date = DateTime.now.beginning_of_week active_procedure_overviews = procedures - .where(published: true) + .published .all .map { |procedure| procedure.procedure_overview(start_date) } .select(&:had_some_activities?) diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 83e88b823..c447138c9 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -32,6 +32,7 @@ class Procedure < ActiveRecord::Base mount_uploader :logo, ProcedureLogoUploader default_scope { where(hidden_at: nil) } + scope :published, -> { where(published: true) } scope :not_archived, -> { where(archived: false) } scope :by_libelle, -> { order(libelle: :asc) } @@ -61,7 +62,7 @@ class Procedure < ActiveRecord::Base end def self.active id - not_archived.where(published: true).find(id) + not_archived.published.find(id) end def switch_types_de_champ index_of_first_element diff --git a/app/views/administrations/_list.html.haml b/app/views/administrations/_list.html.haml index 91020b530..09950f13d 100644 --- a/app/views/administrations/_list.html.haml +++ b/app/views/administrations/_list.html.haml @@ -18,7 +18,7 @@ = admin.last_sign_in_at.localtime.strftime('%d/%m/%Y') ) %td - = admin.procedures.where(published: true).count + = admin.procedures.published.count %td - total_dossier = 0 - admin.procedures.each do |procedure| total_dossier += procedure.dossiers.where.not(state: :draft).count end diff --git a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml index 385a0f38d..4d9a9a115 100644 --- a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml +++ b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml @@ -19,7 +19,7 @@ .procedure-list-element{ class: @active_class } Actives .badge.progress-bar-success - = current_administrateur.procedures.where(published: true, archived: false).count + = current_administrateur.procedures.published.where(archived: false).count %a#archived-procedures{ :href => "#{url_for :admin_procedures_archived}" } .procedure-list-element{ class: @archived_class } diff --git a/app/views/root/landing.html.haml b/app/views/root/landing.html.haml index 875e9d908..8eee9d51b 100644 --- a/app/views/root/landing.html.haml +++ b/app/views/root/landing.html.haml @@ -80,7 +80,7 @@ %ul.numbers %li.number .number-value - = number_with_delimiter(Procedure.where(:published => true).count, :locale => :fr) + = number_with_delimiter(Procedure.published.count, :locale => :fr) .number-label< procédures %br<> From 09d596eec13c9317d7af4b38eb9bd013a33136a6 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:05:32 +0200 Subject: [PATCH 02/13] Remove a useless call to all --- app/models/gestionnaire.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/gestionnaire.rb b/app/models/gestionnaire.rb index b60f26353..4b65d0941 100644 --- a/app/models/gestionnaire.rb +++ b/app/models/gestionnaire.rb @@ -109,7 +109,6 @@ class Gestionnaire < ActiveRecord::Base active_procedure_overviews = procedures .published - .all .map { |procedure| procedure.procedure_overview(start_date) } .select(&:had_some_activities?) From f480f26bd4d586e2f6cdba3d74f8828e253242d7 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:11:12 +0200 Subject: [PATCH 03/13] Use the state_not_brouillon Dossier scope --- app/controllers/api/statistiques_controller.rb | 4 ++-- app/controllers/api/v1/dossiers_controller.rb | 2 +- app/facades/admin_procedures_show_facades.rb | 4 ++-- app/models/gestionnaire.rb | 2 +- app/models/procedure.rb | 2 +- app/models/search.rb | 2 +- app/views/administrations/_list.html.haml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/controllers/api/statistiques_controller.rb b/app/controllers/api/statistiques_controller.rb index fe12ffa2a..2300337f9 100644 --- a/app/controllers/api/statistiques_controller.rb +++ b/app/controllers/api/statistiques_controller.rb @@ -9,10 +9,10 @@ class API::StatistiquesController < ApplicationController private def total_dossiers - Dossier.where.not(state: :draft).size + Dossier.state_not_brouillon.size end def dossiers_mois - Dossier.where.not(state: :draft).where(created_at: (1.month.ago)..Time.now).size + Dossier.state_not_brouillon.where(created_at: (1.month.ago)..Time.now).size end end diff --git a/app/controllers/api/v1/dossiers_controller.rb b/app/controllers/api/v1/dossiers_controller.rb index ddafcf82c..b144148b0 100644 --- a/app/controllers/api/v1/dossiers_controller.rb +++ b/app/controllers/api/v1/dossiers_controller.rb @@ -7,7 +7,7 @@ class API::V1::DossiersController < APIController def index procedure = current_administrateur.procedures.find(params[:procedure_id]) - dossiers = procedure.dossiers.where.not(state: :draft).paginate(page: params[:page]) + dossiers = procedure.dossiers.state_not_brouillon.paginate(page: params[:page]) render json: { dossiers: dossiers.map{ |dossier| DossiersSerializer.new(dossier) }, pagination: pagination(dossiers) }, status: 200 rescue ActiveRecord::RecordNotFound diff --git a/app/facades/admin_procedures_show_facades.rb b/app/facades/admin_procedures_show_facades.rb index 650959746..98b51f669 100644 --- a/app/facades/admin_procedures_show_facades.rb +++ b/app/facades/admin_procedures_show_facades.rb @@ -8,11 +8,11 @@ class AdminProceduresShowFacades end def dossiers - @procedure.dossiers.where.not(state: :draft) + @procedure.dossiers.state_not_brouillon end def dossiers_for_pie_highchart - dossiers.where.not(state: :draft, archived: true).group(:state).count + dossiers.state_not_brouillon.where.not(archived: true).group(:state).count .reduce({}) do |acc, (key, val)| translated_key = DossierDecorator.case_state_fr(key) acc[translated_key].nil? ? acc[translated_key] = val : acc[translated_key] += val diff --git a/app/models/gestionnaire.rb b/app/models/gestionnaire.rb index 4b65d0941..dddc94685 100644 --- a/app/models/gestionnaire.rb +++ b/app/models/gestionnaire.rb @@ -8,7 +8,7 @@ class Gestionnaire < ActiveRecord::Base has_many :assign_to, dependent: :destroy has_many :procedures, through: :assign_to - has_many :dossiers, -> { where.not(state: :draft) }, through: :procedures + has_many :dossiers, -> { state_not_brouillon }, through: :procedures has_many :followed_dossiers, through: :follows, source: :dossier has_many :follows has_many :preference_list_dossiers diff --git a/app/models/procedure.rb b/app/models/procedure.rb index c447138c9..c82aec9ca 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -128,7 +128,7 @@ class Procedure < ActiveRecord::Base end def total_dossier - self.dossiers.where.not(state: :draft).size + self.dossiers.state_not_brouillon.size end def generate_export diff --git a/app/models/search.rb b/app/models/search.rb index 6b4557677..17ead5d94 100644 --- a/app/models/search.rb +++ b/app/models/search.rb @@ -47,7 +47,7 @@ class Search < ActiveRecord::Base dossier_ids = @gestionnaire.dossiers .select(:id) .where(archived: false) - .where.not(state: "draft") + .state_not_brouillon q = Search .select("DISTINCT(searches.dossier_id)") diff --git a/app/views/administrations/_list.html.haml b/app/views/administrations/_list.html.haml index 09950f13d..aab406cf6 100644 --- a/app/views/administrations/_list.html.haml +++ b/app/views/administrations/_list.html.haml @@ -21,7 +21,7 @@ = admin.procedures.published.count %td - total_dossier = 0 - - admin.procedures.each do |procedure| total_dossier += procedure.dossiers.where.not(state: :draft).count end + - admin.procedures.each do |procedure| total_dossier += procedure.dossiers.where.state_not_brouillon.count end = total_dossier = smart_listing.paginate = smart_listing.pagination_per_page_links From 3a602b05a432d12e65eb32b8b9c8490026e1bec8 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:15:09 +0200 Subject: [PATCH 04/13] Use the archived and not_archived Dossier scopes --- app/facades/admin_procedures_show_facades.rb | 6 +++--- app/facades/dossiers_list_facades.rb | 6 +++--- app/models/search.rb | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/facades/admin_procedures_show_facades.rb b/app/facades/admin_procedures_show_facades.rb index 98b51f669..297f74358 100644 --- a/app/facades/admin_procedures_show_facades.rb +++ b/app/facades/admin_procedures_show_facades.rb @@ -12,7 +12,7 @@ class AdminProceduresShowFacades end def dossiers_for_pie_highchart - dossiers.state_not_brouillon.where.not(archived: true).group(:state).count + dossiers.state_not_brouillon.not_archived.group(:state).count .reduce({}) do |acc, (key, val)| translated_key = DossierDecorator.case_state_fr(key) acc[translated_key].nil? ? acc[translated_key] = val : acc[translated_key] += val @@ -21,11 +21,11 @@ class AdminProceduresShowFacades end def dossiers_archived_by_state_total - dossiers.select('state, count(*) as total').where(archived: true).where.not(state: :termine).group(:state).order(:state).decorate + dossiers.select('state, count(*) as total').archived.where.not(state: :termine).group(:state).order(:state).decorate end def dossiers_archived_total - dossiers.where(archived: true).where.not(state: :termine).size + dossiers.archived.where.not(state: :termine).size end def dossiers_total diff --git a/app/facades/dossiers_list_facades.rb b/app/facades/dossiers_list_facades.rb index ac9cc952c..5f18c6a67 100644 --- a/app/facades/dossiers_list_facades.rb +++ b/app/facades/dossiers_list_facades.rb @@ -14,7 +14,7 @@ class DossiersListFacades end def total_dossier - current_devise_profil.dossiers.where(archived: false).count + current_devise_profil.dossiers.not_archived.count end def total_dossier_follow @@ -22,11 +22,11 @@ class DossiersListFacades end def total_new_dossier - current_devise_profil.dossiers.where(state: :initiated, archived: false).count + current_devise_profil.dossiers.where(state: :initiated).not_archived.count end def new_dossier_number procedure_id - current_devise_profil.dossiers.where(state: :initiated, archived: false, procedure_id: procedure_id).count + current_devise_profil.dossiers.where(state: :initiated).not_archived.where(procedure_id: procedure_id).count end def gestionnaire_procedures_name_and_id_list diff --git a/app/models/search.rb b/app/models/search.rb index 17ead5d94..ba5698aef 100644 --- a/app/models/search.rb +++ b/app/models/search.rb @@ -46,7 +46,7 @@ class Search < ActiveRecord::Base dossier_ids = @gestionnaire.dossiers .select(:id) - .where(archived: false) + .not_archived .state_not_brouillon q = Search From 811723e5fb708321b5e2ad42258078406a5113ff Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:27:53 +0200 Subject: [PATCH 05/13] Use the state_nouveaux Dossier scope --- app/facades/dossiers_list_facades.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/facades/dossiers_list_facades.rb b/app/facades/dossiers_list_facades.rb index 5f18c6a67..9f2b556b7 100644 --- a/app/facades/dossiers_list_facades.rb +++ b/app/facades/dossiers_list_facades.rb @@ -22,11 +22,11 @@ class DossiersListFacades end def total_new_dossier - current_devise_profil.dossiers.where(state: :initiated).not_archived.count + current_devise_profil.dossiers.state_nouveaux.not_archived.count end def new_dossier_number procedure_id - current_devise_profil.dossiers.where(state: :initiated).not_archived.where(procedure_id: procedure_id).count + current_devise_profil.dossiers.state_nouveaux.not_archived.where(procedure_id: procedure_id).count end def gestionnaire_procedures_name_and_id_list From 31b23ac74ed72d7562c8a6789ab0ff6b3cfae267 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:46:37 +0200 Subject: [PATCH 06/13] Add the not_published Procedure scope --- app/controllers/admin/procedures_controller.rb | 2 +- app/models/procedure.rb | 1 + .../_left_panel_admin_procedurescontroller_index.html.haml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index 242cc7085..dbcdc8d88 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -26,7 +26,7 @@ class Admin::ProceduresController < AdminController def draft @procedures = smart_listing_create :procedures, - current_administrateur.procedures.where(published: false, archived: false).order(created_at: :desc), + current_administrateur.procedures.not_published.where(archived: false).order(created_at: :desc), partial: "admin/procedures/list", array: true diff --git a/app/models/procedure.rb b/app/models/procedure.rb index c82aec9ca..0b374fe30 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -33,6 +33,7 @@ class Procedure < ActiveRecord::Base default_scope { where(hidden_at: nil) } scope :published, -> { where(published: true) } + scope :not_published, -> { where(published: false) } scope :not_archived, -> { where(archived: false) } scope :by_libelle, -> { order(libelle: :asc) } diff --git a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml index 4d9a9a115..5b3a10fac 100644 --- a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml +++ b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml @@ -13,7 +13,7 @@ .procedure-list-element{ class: @draft_class } Brouillons .badge.progress-bar-default - = current_administrateur.procedures.where(published: false, archived: false).count + = current_administrateur.procedures.not_published.where(archived: false).count %a#active-procedures{ :href => "#{url_for :admin_procedures}" } .procedure-list-element{ class: @active_class } From 411c5791c82bc9231d3a04bb8085a31f8a457b9f Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:48:32 +0200 Subject: [PATCH 07/13] Use the not_archived Procedure scope --- app/controllers/admin/procedures_controller.rb | 4 ++-- app/controllers/demo_controller.rb | 2 +- app/controllers/users/dossiers_controller.rb | 2 +- .../_left_panel_admin_procedurescontroller_index.html.haml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index dbcdc8d88..82819d1dc 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -6,7 +6,7 @@ class Admin::ProceduresController < AdminController def index @procedures = smart_listing_create :procedures, - current_administrateur.procedures.published.where(archived: false).order(created_at: :desc), + current_administrateur.procedures.published.not_archived.order(created_at: :desc), partial: "admin/procedures/list", array: true @@ -26,7 +26,7 @@ class Admin::ProceduresController < AdminController def draft @procedures = smart_listing_create :procedures, - current_administrateur.procedures.not_published.where(archived: false).order(created_at: :desc), + current_administrateur.procedures.not_published.not_archived.order(created_at: :desc), partial: "admin/procedures/list", array: true diff --git a/app/controllers/demo_controller.rb b/app/controllers/demo_controller.rb index 59b784814..4773628e3 100644 --- a/app/controllers/demo_controller.rb +++ b/app/controllers/demo_controller.rb @@ -6,7 +6,7 @@ class DemoController < ApplicationController return redirect_to root_path if Rails.env.production? smart_listing_create :procedures, - Procedure.published.where(archived: false).order("id DESC"), + Procedure.published.not_archived.order("id DESC"), partial: "demo/list", array: true end diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 1109f7dcd..ec7147da2 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -60,7 +60,7 @@ class Users::DossiersController < UsersController end def new - procedure = Procedure.where(archived: false).published.find(params[:procedure_id]) + procedure = Procedure.not_archived.published.find(params[:procedure_id]) dossier = Dossier.create(procedure: procedure, user: current_user, state: 'draft') siret = params[:siret] || current_user.siret diff --git a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml index 5b3a10fac..4ffada454 100644 --- a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml +++ b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml @@ -13,13 +13,13 @@ .procedure-list-element{ class: @draft_class } Brouillons .badge.progress-bar-default - = current_administrateur.procedures.not_published.where(archived: false).count + = current_administrateur.procedures.not_published.not_archived.count %a#active-procedures{ :href => "#{url_for :admin_procedures}" } .procedure-list-element{ class: @active_class } Actives .badge.progress-bar-success - = current_administrateur.procedures.published.where(archived: false).count + = current_administrateur.procedures.published.not_archived.count %a#archived-procedures{ :href => "#{url_for :admin_procedures_archived}" } .procedure-list-element{ class: @archived_class } From 6a381caaee0d989cb8fb757c4aa69ba82b955645 Mon Sep 17 00:00:00 2001 From: gregoirenovel Date: Mon, 10 Jul 2017 16:52:59 +0200 Subject: [PATCH 08/13] Add the archived scope to Procedure --- app/controllers/admin/procedures_controller.rb | 2 +- app/models/procedure.rb | 1 + .../_left_panel_admin_procedurescontroller_index.html.haml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/procedures_controller.rb b/app/controllers/admin/procedures_controller.rb index 82819d1dc..bc1f3f50f 100644 --- a/app/controllers/admin/procedures_controller.rb +++ b/app/controllers/admin/procedures_controller.rb @@ -15,7 +15,7 @@ class Admin::ProceduresController < AdminController def archived @procedures = smart_listing_create :procedures, - current_administrateur.procedures.where(archived: true).order(created_at: :desc), + current_administrateur.procedures.archived.order(created_at: :desc), partial: "admin/procedures/list", array: true diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 0b374fe30..f0053a361 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -34,6 +34,7 @@ class Procedure < ActiveRecord::Base default_scope { where(hidden_at: nil) } scope :published, -> { where(published: true) } scope :not_published, -> { where(published: false) } + scope :archived, -> { where(archived: true) } scope :not_archived, -> { where(archived: false) } scope :by_libelle, -> { order(libelle: :asc) } diff --git a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml index 4ffada454..c4fd6ccfd 100644 --- a/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml +++ b/app/views/layouts/left_panels/_left_panel_admin_procedurescontroller_index.html.haml @@ -25,7 +25,7 @@ .procedure-list-element{ class: @archived_class } Archivées .badge.progress-bar-purple - = current_administrateur.procedures.where(archived: true).count + = current_administrateur.procedures.archived.count .split-hr-left From 27cd42a1006243403116e5475b0078e750bc3809 Mon Sep 17 00:00:00 2001 From: Simon Lehericey Date: Tue, 11 Jul 2017 09:09:20 +0200 Subject: [PATCH 09/13] fix administration view --- app/views/administrations/_list.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/administrations/_list.html.haml b/app/views/administrations/_list.html.haml index aab406cf6..81df10248 100644 --- a/app/views/administrations/_list.html.haml +++ b/app/views/administrations/_list.html.haml @@ -21,7 +21,7 @@ = admin.procedures.published.count %td - total_dossier = 0 - - admin.procedures.each do |procedure| total_dossier += procedure.dossiers.where.state_not_brouillon.count end + - admin.procedures.each do |procedure| total_dossier += procedure.dossiers.state_not_brouillon.count end = total_dossier = smart_listing.paginate = smart_listing.pagination_per_page_links From b2e99dd7551ab8a71ebca54cc81aab435b5d7868 Mon Sep 17 00:00:00 2001 From: Simon Lehericey Date: Tue, 11 Jul 2017 09:04:41 +0200 Subject: [PATCH 10/13] Turbolinks: do not reload application js on every page --- app/views/layouts/new_application.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/new_application.html.haml b/app/views/layouts/new_application.html.haml index 799b9f413..4db03ec7d 100644 --- a/app/views/layouts/new_application.html.haml +++ b/app/views/layouts/new_application.html.haml @@ -35,7 +35,7 @@ = render partial: "layouts/mailjet_newsletter" = render partial: "layouts/crisp" - = javascript_include_tag "new_design/application", "data-turbolinks-track": true + = javascript_include_tag "new_design/application", "data-turbolinks-eval": false = yield :charts_js - if Rails.env == "test" %script{ type: "text/javascript" } From 831ccac685fd319f27b53e221e629897f9e7ac73 Mon Sep 17 00:00:00 2001 From: Simon Lehericey Date: Tue, 11 Jul 2017 09:05:10 +0200 Subject: [PATCH 11/13] Turbolinks: do not reload mailjet js on every page --- app/views/layouts/_mailjet_newsletter.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/_mailjet_newsletter.html.haml b/app/views/layouts/_mailjet_newsletter.html.haml index e887f5217..ef5de8af3 100644 --- a/app/views/layouts/_mailjet_newsletter.html.haml +++ b/app/views/layouts/_mailjet_newsletter.html.haml @@ -1,2 +1,2 @@ %data.mj-w-data{ "data-apikey" => "1v5T", "data-base" => "https://app.mailjet.com", "data-height" => "328", "data-lang" => "fr_FR", "data-statics" => "statics", "data-token" => "11c89e7ddb46fbcdcb7f8fe5fdfca818", "data-w-id" => "39b", "data-width" => "640" } -%script{ src: 'https://app.mailjet.com/statics/js/widget.modal.js' } +%script{ src: 'https://app.mailjet.com/statics/js/widget.modal.js', 'data-turbolinks-eval': 'false' } From 065719ea06d34c2e1ce9da7072fcf14710acb481 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Mon, 10 Jul 2017 14:44:26 +0200 Subject: [PATCH 12/13] [Fix #576] When user or gestionnaire has no access to dossier, he cannot create an invitation --- app/controllers/invites_controller.rb | 3 +- spec/controllers/invites_controller_spec.rb | 176 +++++++++++++------- 2 files changed, 116 insertions(+), 63 deletions(-) diff --git a/app/controllers/invites_controller.rb b/app/controllers/invites_controller.rb index 9f8cfbfe7..18bcf43ad 100644 --- a/app/controllers/invites_controller.rb +++ b/app/controllers/invites_controller.rb @@ -5,11 +5,12 @@ class InvitesController < ApplicationController email_sender = @current_devise_profil.email class_var = @current_devise_profil.class == User ? InviteUser : InviteGestionnaire + dossier = @current_devise_profil.dossiers.find(params[:dossier_id]) email = params[:email].downcase user = User.find_by_email(email) - invite = class_var.create(dossier_id: params[:dossier_id], user: user, email: email, email_sender: email_sender) + invite = class_var.create(dossier: dossier, user: user, email: email, email_sender: email_sender) if invite.valid? InviteMailer.invite_user(invite).deliver_now! unless invite.user.nil? diff --git a/spec/controllers/invites_controller_spec.rb b/spec/controllers/invites_controller_spec.rb index 9577aca7c..952e10e42 100644 --- a/spec/controllers/invites_controller_spec.rb +++ b/spec/controllers/invites_controller_spec.rb @@ -1,102 +1,154 @@ require 'spec_helper' describe InvitesController, type: :controller do - let(:dossier) { create(:dossier) } + let(:dossier) { create(:dossier, :replied) } let(:email) { 'plop@octo.com' } describe '#POST create' do let(:invite) { Invite.last } before do - sign_in create(:gestionnaire) + sign_in signed_in_profile end subject { post :create, params: {dossier_id: dossier.id, email: email} } - it { expect { subject }.to change(InviteGestionnaire, :count).by(1) } + context "when gestionnaire is signed_in" do + let(:signed_in_profile) { create(:gestionnaire) } - context 'when is a user who is loged' do - before do - sign_in create(:user) + shared_examples_for "he can not create invitation" do + it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } + it { expect { subject rescue nil }.to change(InviteGestionnaire, :count).by(0) } end - it { expect { subject }.to change(InviteGestionnaire, :count).by(1) } - end - - context 'when email is assign to an user' do - let! (:user) { create(:user, email: email) } - - before do - subject + context 'when gestionnaire has no access to dossier' do + it_behaves_like "he can not create invitation" end - describe 'Invite information' do - let(:email) { 'PLIP@octo.com' } - let(:invite) { Invite.last } + context 'when gestionnaire is invited for avis on dossier' do + before { Avis.create(gestionnaire: signed_in_profile, claimant: create(:gestionnaire), dossier: dossier) } - it 'email is on lower case' do - expect(invite.email).to eq 'plip@octo.com' - end + it_behaves_like "he can not create invitation" end - it { expect(invite.user).to eq user } - it { expect(flash[:notice]).to be_present } - end - - context 'when email is not assign to an user' do - before do - subject - end - - it { expect(invite.user).to be_nil } - it { expect(flash[:notice]).to be_present } - end - - describe 'not an email' do - context 'when email is not valid' do - let(:email) { 'plip.com' } - + context 'when gestionnaire has access to dossier' do before do - subject + signed_in_profile.procedures << dossier.procedure end - it { expect { subject }.not_to change(Invite, :count) } - it { expect(flash[:alert]).to be_present } - end + it { expect { subject }.to change(InviteGestionnaire, :count).by(1) } - context 'when email is already used' do - let!(:invite) { create(:invite, dossier: dossier) } + context 'when is a user who is loged' do + before do + sign_in create(:user) + end - before do - subject + it { expect { subject }.to change(InviteGestionnaire, :count).by(1) } end - it { expect { subject }.not_to change(Invite, :count) } - it { expect(flash[:alert]).to be_present } + context 'when email is assign to an user' do + let! (:user) { create(:user, email: email) } + + before do + subject + end + + describe 'Invite information' do + let(:email) { 'PLIP@octo.com' } + let(:invite) { Invite.last } + + it 'email is on lower case' do + expect(invite.email).to eq 'plip@octo.com' + end + end + + it { expect(invite.user).to eq user } + it { expect(flash[:notice]).to be_present } + end + + context 'when email is not assign to an user' do + before do + subject + end + + it { expect(invite.user).to be_nil } + it { expect(flash[:notice]).to be_present } + end + + describe 'not an email' do + context 'when email is not valid' do + let(:email) { 'plip.com' } + + before do + subject + end + + it { expect { subject }.not_to change(Invite, :count) } + it { expect(flash[:alert]).to be_present } + end + + context 'when email is already used' do + let!(:invite) { create(:invite, dossier: dossier) } + + before do + subject + end + + it { expect { subject }.not_to change(Invite, :count) } + it { expect(flash[:alert]).to be_present } + end + end + + describe 'send invitation email' do + context 'when user does not exist' do + it 'send email' do + expect(InviteMailer).to receive(:invite_guest).and_return(InviteMailer) + expect(InviteMailer).to receive(:deliver_now!) + + subject + end + end + + context 'when user exist' do + before do + create :user, email: email + end + + it 'send email' do + expect(InviteMailer).to receive(:invite_user).and_return(InviteMailer) + expect(InviteMailer).to receive(:deliver_now!) + + subject + end + end + end end end - describe 'send invitation email' do - context 'when user does not exist' do - it 'send email' do - expect(InviteMailer).to receive(:invite_guest).and_return(InviteMailer) - expect(InviteMailer).to receive(:deliver_now!) + context "when user is signed_in" do + let(:signed_in_profile) { create(:user) } - subject - end + shared_examples_for "he can not create a invite" do + it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } + it { expect { subject rescue nil }.to change(InviteUser, :count).by(0) } end - context 'when user exist' do + context 'when user has no access to dossier' do + it_behaves_like "he can not create a invite" + end + + context 'when user is invited on dossier' do + before { Invite.create(user: signed_in_profile, email: signed_in_profile.email, dossier: dossier) } + + it_behaves_like "he can not create a invite" + end + + context 'when user has access to dossier' do before do - create :user, email: email + dossier.update_attributes(user: signed_in_profile) end - it 'send email' do - expect(InviteMailer).to receive(:invite_user).and_return(InviteMailer) - expect(InviteMailer).to receive(:deliver_now!) - - subject - end + it { expect { subject }.to change(InviteUser, :count).by(1) } end end end From c3fa1e01b9f928c74a3eac45a78f1523bc36f104 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Mon, 10 Jul 2017 17:11:55 +0200 Subject: [PATCH 13/13] [Fix #577] Restrict comment creation to Users/Gestionnaires allowed on dossier --- app/controllers/commentaires_controller.rb | 4 +- .../commentaires_controller_spec.rb | 200 ++++++++++-------- .../users/commentaires_controller_spec.rb | 22 ++ 3 files changed, 135 insertions(+), 91 deletions(-) diff --git a/app/controllers/commentaires_controller.rb b/app/controllers/commentaires_controller.rb index 7a4dcc8db..fbbca630e 100644 --- a/app/controllers/commentaires_controller.rb +++ b/app/controllers/commentaires_controller.rb @@ -13,14 +13,16 @@ class CommentairesController < ApplicationController def create @commentaire = Commentaire.new - @commentaire.dossier = Dossier.find(params['dossier_id']) @commentaire.champ = @commentaire.dossier.champs.find(params[:champ_id]) if params[:champ_id] + dossier_id = params['dossier_id'] if is_gestionnaire? @commentaire.email = current_gestionnaire.email + @commentaire.dossier = current_gestionnaire.dossiers.find_by(id: dossier_id) || current_gestionnaire.avis.find_by!(dossier_id: dossier_id).dossier @commentaire.dossier.next_step! 'gestionnaire', 'comment' else @commentaire.email = current_user.email + @commentaire.dossier = current_user.dossiers.find_by(id: dossier_id) || current_user.invites.find_by!(dossier_id: dossier_id).dossier @commentaire.dossier.next_step! 'user', 'comment' if current_user.email == @commentaire.dossier.user.email end diff --git a/spec/controllers/backoffice/commentaires_controller_spec.rb b/spec/controllers/backoffice/commentaires_controller_spec.rb index 2fccafe5e..a491df621 100644 --- a/spec/controllers/backoffice/commentaires_controller_spec.rb +++ b/spec/controllers/backoffice/commentaires_controller_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe Backoffice::CommentairesController, type: :controller do - let(:dossier) { create(:dossier) } + let(:dossier) { create(:dossier, :replied) } let(:dossier_id) { dossier.id } let(:email_commentaire) { 'test@test.com' } let(:texte_commentaire) { 'Commentaire de test' } @@ -16,116 +16,136 @@ describe Backoffice::CommentairesController, type: :controller do sign_in gestionnaire end - context "création correct d'un commentaire" do - subject { post :create, params: {dossier_id: dossier_id, email_commentaire: email_commentaire, texte_commentaire: texte_commentaire} } + context "when gestionnaire has no access to dossier" do + subject { post :create, params: { dossier_id: dossier_id, texte_commentaire: texte_commentaire } } - it 'depuis la page admin' do - expect(subject).to redirect_to("/backoffice/dossiers/#{dossier_id}") + it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } + it { expect { subject rescue nil }.to change(Commentaire, :count).by(0) } + end + + context "when gestionnaire is invited for avis on dossier" do + subject { post :create, params: { dossier_id: dossier_id, texte_commentaire: texte_commentaire } } + before { Avis.create(dossier: dossier, gestionnaire: gestionnaire, claimant: create(:gestionnaire)) } + + it { expect{ subject }.to change(Commentaire, :count).by(1) } + end + + context "when gestionnaire has access to dossier" do + before do + gestionnaire.procedures << dossier.procedure end - it 'gestionnaire is automatically affect to follow the dossier' do - expect { subject }.to change(Follow, :count).by(1) - end + context "création correct d'un commentaire" do + subject { post :create, params: {dossier_id: dossier_id, email_commentaire: email_commentaire, texte_commentaire: texte_commentaire} } - context 'when gestionnaire already follow dossier' do - before do - create :follow, gestionnaire_id: gestionnaire.id, dossier_id: dossier_id + it 'depuis la page admin' do + expect(subject).to redirect_to("/backoffice/dossiers/#{dossier_id}") end it 'gestionnaire is automatically affect to follow the dossier' do - expect { subject }.to change(Follow, :count).by(0) - end - end - - it 'Internal notification is not create' do - expect { subject }.to change(Notification, :count).by (0) - end - end - - context 'when document is upload whith a commentaire', vcr: {cassette_name: 'controllers_backoffice_commentaires_controller_doc_upload_with_comment'} do - let(:document_upload) { Rack::Test::UploadedFile.new("./spec/support/files/piece_justificative_0.pdf", 'application/pdf') } - - subject do - post :create, params: {dossier_id: dossier_id, email_commentaire: email_commentaire, texte_commentaire: texte_commentaire, piece_justificative: {content: document_upload}} - end - - it 'create a new piece justificative' do - expect { subject }.to change(PieceJustificative, :count).by(1) - end - - it 'clamav check the pj' do - expect(ClamavService).to receive(:safe_file?) - subject - end - - it 'Internal notification is not create' do - expect { subject }.to change(Notification, :count).by (0) - end - - describe 'piece justificative created' do - let(:pj) { PieceJustificative.last } - - before do - subject + expect { subject }.to change(Follow, :count).by(1) end - it 'not have a type de pj' do - expect(pj.type_de_piece_justificative).to be_nil - end - - it 'content not be nil' do - expect(pj.content).not_to be_nil - end - end - - describe 'commentaire created' do - let(:commentaire) { Commentaire.last } - - before do - subject - end - - it 'have a piece justificative reference' do - expect(commentaire.piece_justificative).not_to be_nil - expect(commentaire.piece_justificative).to eq PieceJustificative.last - end - end - end - - describe 'change dossier state after post a comment' do - context 'gestionnaire is connected' do - context 'when dossier is at state updated' do + context 'when gestionnaire already follow dossier' do before do - sign_in create(:gestionnaire) - dossier.updated! - - post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} - dossier.reload + create :follow, gestionnaire_id: gestionnaire.id, dossier_id: dossier_id end - subject { dossier.state } + it 'gestionnaire is automatically affect to follow the dossier' do + expect { subject }.to change(Follow, :count).by(0) + end + end - it { is_expected.to eq('replied') } + it 'Internal notification is not create' do + expect { subject }.to change(Notification, :count).by (0) + end + end - it 'Notification email is send' do - expect(NotificationMailer).to receive(:new_answer).and_return(NotificationMailer) - expect(NotificationMailer).to receive(:deliver_now!) + context 'when document is upload whith a commentaire', vcr: {cassette_name: 'controllers_backoffice_commentaires_controller_doc_upload_with_comment'} do + let(:document_upload) { Rack::Test::UploadedFile.new("./spec/support/files/piece_justificative_0.pdf", 'application/pdf') } - post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} + subject do + post :create, params: {dossier_id: dossier_id, email_commentaire: email_commentaire, texte_commentaire: texte_commentaire, piece_justificative: {content: document_upload}} + end + + it 'create a new piece justificative' do + expect { subject }.to change(PieceJustificative, :count).by(1) + end + + it 'clamav check the pj' do + expect(ClamavService).to receive(:safe_file?) + subject + end + + it 'Internal notification is created' do + expect { subject }.to change(Notification, :count).by (1) + end + + describe 'piece justificative created' do + let(:pj) { PieceJustificative.last } + + before do + subject + end + + it 'not have a type de pj' do + expect(pj.type_de_piece_justificative).to be_nil + end + + it 'content not be nil' do + expect(pj.content).not_to be_nil + end + end + + describe 'commentaire created' do + let(:commentaire) { Commentaire.last } + + before do + subject + end + + it 'have a piece justificative reference' do + expect(commentaire.piece_justificative).not_to be_nil + expect(commentaire.piece_justificative).to eq PieceJustificative.last end end end - end - describe 'comment cannot be saved' do - before do - allow_any_instance_of(Commentaire).to receive(:save).and_return(false) + describe 'change dossier state after post a comment' do + context 'gestionnaire is connected' do + context 'when dossier is at state updated' do + before do + sign_in gestionnaire + dossier.updated! + + post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} + dossier.reload + end + + subject { dossier.state } + + it { is_expected.to eq('replied') } + + it 'Notification email is send' do + expect(NotificationMailer).to receive(:new_answer).and_return(NotificationMailer) + expect(NotificationMailer).to receive(:deliver_now!) + + post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} + end + end + end end - it 'Notification email is not sent' do - expect(NotificationMailer).not_to receive(:new_answer) - expect(NotificationMailer).not_to receive(:deliver_now!) - post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} + describe 'comment cannot be saved' do + before do + allow_any_instance_of(Commentaire).to receive(:save).and_return(false) + end + it 'Notification email is not sent' do + expect(NotificationMailer).not_to receive(:new_answer) + expect(NotificationMailer).not_to receive(:deliver_now!) + + post :create, params: {dossier_id: dossier_id, texte_commentaire: texte_commentaire} + end end end end diff --git a/spec/controllers/users/commentaires_controller_spec.rb b/spec/controllers/users/commentaires_controller_spec.rb index b6d2f0f60..1be0021cf 100644 --- a/spec/controllers/users/commentaires_controller_spec.rb +++ b/spec/controllers/users/commentaires_controller_spec.rb @@ -11,6 +11,28 @@ describe Users::CommentairesController, type: :controller do end describe '#POST create' do + context "when user has no access to dossier" do + before do + sign_in create(:user) + end + subject { post :create, params: { dossier_id: dossier_id, texte_commentaire: texte_commentaire } } + + it { expect { subject }.to raise_error(ActiveRecord::RecordNotFound) } + it { expect { subject rescue nil }.to change(Commentaire, :count).by(0) } + end + + context "when user is invited on dossier" do + let(:user) { create(:user) } + subject { post :create, params: { dossier_id: dossier_id, texte_commentaire: texte_commentaire } } + + before do + sign_in user + InviteUser.create(dossier: dossier, user: user, email: user.email, email_sender: "test@test.com") + end + + it { expect{ subject }.to change(Commentaire, :count).by(1) } + end + context 'création correct d\'un commentaire' do subject do sign_in dossier.user