diff --git a/.gitignore b/.gitignore index 9b7818561..dc45b1263 100644 --- a/.gitignore +++ b/.gitignore @@ -28,5 +28,7 @@ config/initializers/token.rb doc/*.svg rubocop.html config/france_connect.yml +config/initializers/mailjet.rb +config/fog_credentials.yml uploads/* coverage/**/* diff --git a/Gemfile b/Gemfile index 378447a6f..5bd2a237d 100644 --- a/Gemfile +++ b/Gemfile @@ -56,6 +56,8 @@ gem 'rest-client' gem 'clamav-client', require: 'clamav/client' gem 'carrierwave' +gem 'fog' +gem 'fog-openstack' gem 'pg' @@ -99,6 +101,7 @@ group :test do gem 'guard' gem 'guard-rspec', require: false gem 'guard-livereload', '~> 2.4', require: false + gem 'vcr' end group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index f21a7f26f..21f55c50e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -9,6 +9,7 @@ GIT GEM remote: https://rubygems.org/ specs: + CFPropertyList (2.3.2) actionmailer (4.2.5.2) actionpack (= 4.2.5.2) actionview (= 4.2.5.2) @@ -139,6 +140,7 @@ GEM http_parser.rb (~> 0.6.0) erubis (2.7.0) eventmachine (1.0.8) + excon (0.49.0) execjs (2.5.2) factory_girl (4.5.0) activesupport (>= 3.0.0) @@ -146,6 +148,135 @@ GEM multipart-post (>= 1.2, < 3) fastercsv (1.5.5) ffi (1.9.6) + fission (0.5.0) + CFPropertyList (~> 2.2) + fog (1.38.0) + fog-aliyun (>= 0.1.0) + fog-atmos + fog-aws (>= 0.6.0) + fog-brightbox (~> 0.4) + fog-cloudatcost (~> 0.1.0) + fog-core (~> 1.32) + fog-dynect (~> 0.0.2) + fog-ecloud (~> 0.1) + fog-google (<= 0.1.0) + fog-json + fog-local + fog-openstack + fog-powerdns (>= 0.1.1) + fog-profitbricks + fog-rackspace + fog-radosgw (>= 0.0.2) + fog-riakcs + fog-sakuracloud (>= 0.0.4) + fog-serverlove + fog-softlayer + fog-storm_on_demand + fog-terremark + fog-vmfusion + fog-voxel + fog-vsphere (>= 0.4.0) + fog-xenserver + fog-xml (~> 0.1.1) + ipaddress (~> 0.5) + fog-aliyun (0.1.0) + fog-core (~> 1.27) + fog-json (~> 1.0) + ipaddress (~> 0.8) + xml-simple (~> 1.1) + fog-atmos (0.1.0) + fog-core + fog-xml + fog-aws (0.9.2) + fog-core (~> 1.27) + fog-json (~> 1.0) + fog-xml (~> 0.1) + ipaddress (~> 0.8) + fog-brightbox (0.10.1) + fog-core (~> 1.22) + fog-json + inflecto (~> 0.0.2) + fog-cloudatcost (0.1.2) + fog-core (~> 1.36) + fog-json (~> 1.0) + fog-xml (~> 0.1) + ipaddress (~> 0.8) + fog-core (1.38.0) + builder + excon (~> 0.49) + formatador (~> 0.2) + fog-dynect (0.0.3) + fog-core + fog-json + fog-xml + fog-ecloud (0.3.0) + fog-core + fog-xml + fog-google (0.1.0) + fog-core + fog-json + fog-xml + fog-json (1.0.2) + fog-core (~> 1.0) + multi_json (~> 1.10) + fog-local (0.3.0) + fog-core (~> 1.27) + fog-openstack (0.1.5) + fog-core (>= 1.38) + fog-json (>= 1.0) + fog-xml (>= 0.1) + ipaddress (>= 0.8) + fog-powerdns (0.1.1) + fog-core (~> 1.27) + fog-json (~> 1.0) + fog-xml (~> 0.1) + fog-profitbricks (0.0.5) + fog-core + fog-xml + nokogiri + fog-rackspace (0.1.1) + fog-core (>= 1.35) + fog-json (>= 1.0) + fog-xml (>= 0.1) + ipaddress (>= 0.8) + fog-radosgw (0.0.5) + fog-core (>= 1.21.0) + fog-json + fog-xml (>= 0.0.1) + fog-riakcs (0.1.0) + fog-core + fog-json + fog-xml + fog-sakuracloud (1.7.5) + fog-core + fog-json + fog-serverlove (0.1.2) + fog-core + fog-json + fog-softlayer (1.1.1) + fog-core + fog-json + fog-storm_on_demand (0.1.1) + fog-core + fog-json + fog-terremark (0.1.0) + fog-core + fog-xml + fog-vmfusion (0.1.0) + fission + fog-core + fog-voxel (0.1.0) + fog-core + fog-xml + fog-vsphere (0.6.4) + fog-core + rbvmomi (~> 1.8) + fog-xenserver (0.2.3) + fog-core + fog-xml + fog-xml (0.1.2) + fog-core + nokogiri (~> 1.5, >= 1.5.11) font-awesome-rails (4.4.0.0) railties (>= 3.2, < 5.0) formatador (0.2.5) @@ -189,6 +320,8 @@ GEM http_parser.rb (0.6.0) httpclient (2.6.0.1) i18n (0.7.0) + inflecto (0.0.2) + ipaddress (0.8.3) jbuilder (2.3.1) activesupport (>= 3.0.0, < 5) multi_json (~> 1.2) @@ -316,6 +449,10 @@ GEM rb-fsevent (0.9.6) rb-inotify (0.9.5) ffi (>= 0.5.0) + rbvmomi (1.8.2) + builder + nokogiri (>= 1.4.1) + trollop rdoc (4.2.0) json (~> 1.4) ref (2.0.0) @@ -430,6 +567,7 @@ GEM thread_safe (0.3.5) tilt (1.4.1) timecop (0.7.3) + trollop (2.1.2) turbolinks (2.5.3) coffee-rails tzinfo (1.2.2) @@ -451,6 +589,7 @@ GEM validate_url (1.0.2) activemodel (>= 3.0.0) addressable + vcr (3.0.1) warden (1.2.3) rack (>= 1.0) web-console (2.2.1) @@ -472,6 +611,7 @@ GEM will_paginate (3.0.7) will_paginate-bootstrap (1.0.1) will_paginate (>= 3.0.3) + xml-simple (1.1.5) xpath (2.0.0) nokogiri (~> 1.3) @@ -497,6 +637,8 @@ DEPENDENCIES devise draper factory_girl + fog + fog-openstack font-awesome-rails guard guard-livereload (~> 2.4) @@ -542,6 +684,7 @@ DEPENDENCIES turbolinks uglifier (>= 1.3.0) unicorn + vcr web-console (~> 2.0) webmock will_paginate-bootstrap diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 007634297..5ec3d6999 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -31,6 +31,7 @@ //= require bootstrap-wysihtml5/locales/fr-FR + $(document).on('page:load', scroll_to); $(document).ready(scroll_to); diff --git a/app/controllers/admin/accompagnateurs_controller.rb b/app/controllers/admin/accompagnateurs_controller.rb new file mode 100644 index 000000000..584c80f68 --- /dev/null +++ b/app/controllers/admin/accompagnateurs_controller.rb @@ -0,0 +1,30 @@ +class Admin::AccompagnateursController < AdminController + include SmartListing::Helper::ControllerExtensions + helper SmartListing::Helper + + before_action :retrieve_procedure + + def show + assign_scope = @procedure.gestionnaires + @accompagnateurs_assign = smart_listing_create :accompagnateurs_assign, + assign_scope, + partial: "admin/accompagnateurs/list_assign", + array: true + + not_assign_scope = current_administrateur.gestionnaires.where.not(id: assign_scope.ids) + not_assign_scope = not_assign_scope.where("email LIKE '%#{params[:filter]}%'") if params[:filter] + + @accompagnateurs_not_assign = smart_listing_create :accompagnateurs_not_assign, + not_assign_scope, + partial: "admin/accompagnateurs/list_not_assign", + array: true + + end + + def update + AccompagnateurService.change_assignement! Gestionnaire.find(params[:accompagnateur_id]), Procedure.find(params[:procedure_id]), params[:to] + + flash.notice = "Assignement effectué" + redirect_to admin_procedure_accompagnateurs_path, procedure_id: params[:procedure_id] + end +end \ No newline at end of file diff --git a/app/controllers/admin/gestionnaires_controller.rb b/app/controllers/admin/gestionnaires_controller.rb index 6d7f34cd5..651d22f38 100644 --- a/app/controllers/admin/gestionnaires_controller.rb +++ b/app/controllers/admin/gestionnaires_controller.rb @@ -4,37 +4,59 @@ class Admin::GestionnairesController < AdminController def index @gestionnaires = smart_listing_create :gestionnaires, - current_administrateur.gestionnaires, - partial: "admin/gestionnaires/list", - array: true + current_administrateur.gestionnaires, + partial: "admin/gestionnaires/list", + array: true @gestionnaire ||= Gestionnaire.new end def create - @gestionnaire = Gestionnaire.create(create_gestionnaire_params) + @gestionnaire = Gestionnaire.find_by_email(params[:gestionnaire][:email]) - if @gestionnaire.errors.messages.empty? - flash.notice = 'Gestionnaire ajouté' - GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_now! + if @gestionnaire.nil? + new_gestionnaire! else - flash.alert = @gestionnaire.errors.full_messages.join('
').html_safe + assign_gestionnaire! end redirect_to admin_gestionnaires_path end - def destroy - Gestionnaire.find(params[:id]).destroy + Gestionnaire.find(params[:id]).administrateurs.delete current_administrateur redirect_to admin_gestionnaires_path end def create_gestionnaire_params params.require(:gestionnaire).permit(:email) - .merge(administrateur_id: current_administrateur.id) - .merge(password: SecureRandom.hex(5)) + .merge(password: SecureRandom.hex(5)) + .merge(administrateurs: [current_administrateur]) end + private + + def new_gestionnaire! + @gestionnaire = Gestionnaire.create(create_gestionnaire_params) + + if @gestionnaire.errors.messages.empty? + flash.notice = 'Accompagnateur ajouté' + GestionnaireMailer.new_gestionnaire(@gestionnaire.email, @gestionnaire.password).deliver_now! + GestionnaireMailer.new_assignement(@gestionnaire.email, current_administrateur.email).deliver_now! + else + flash.alert = @gestionnaire.errors.full_messages.join('
').html_safe + end + end + + def assign_gestionnaire! + if current_administrateur.gestionnaires.include? @gestionnaire + flash.alert = 'Accompagnateur déjà ajouté' + else + GestionnaireMailer.new_assignement(@gestionnaire.email, current_administrateur.email).deliver_now! + @gestionnaire.administrateurs.push current_administrateur + flash.notice = 'Accompagnateur ajouté' + #TODO Mailer no assign_to + end + end end \ No newline at end of file diff --git a/app/mailers/gestionnaire_mailer.rb b/app/mailers/gestionnaire_mailer.rb index 86339a022..74765352b 100644 --- a/app/mailers/gestionnaire_mailer.rb +++ b/app/mailers/gestionnaire_mailer.rb @@ -4,15 +4,19 @@ class GestionnaireMailer < ApplicationMailer send_mail email, password, "Vous avez été nommé accompagnateur sur la plateforme TPS" end + def new_assignement email, email_admin + send_mail email, email_admin, "Vous avez été assigné à un nouvel administrateur sur la plateforme TPS" + end + private - def vars_mailer email, password - @password = password + def vars_mailer email, args + @args = args @email = email end - def send_mail email, password, subject - vars_mailer email, password + def send_mail email, args, subject + vars_mailer email, args mail(from: "tps@apientreprise.fr", to: email, subject: subject) diff --git a/app/models/administrateur.rb b/app/models/administrateur.rb index af04114c3..5cb4723bf 100644 --- a/app/models/administrateur.rb +++ b/app/models/administrateur.rb @@ -1,10 +1,8 @@ class Administrateur < ActiveRecord::Base - # Include default devise modules. Others available are: - # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable - has_many :gestionnaires + has_and_belongs_to_many :gestionnaires has_many :procedures before_save :ensure_api_token diff --git a/app/models/assign_to.rb b/app/models/assign_to.rb new file mode 100644 index 000000000..64e2f5e30 --- /dev/null +++ b/app/models/assign_to.rb @@ -0,0 +1,4 @@ +class AssignTo < ActiveRecord::Base + belongs_to :procedure + belongs_to :gestionnaire +end \ No newline at end of file diff --git a/app/models/cerfa.rb b/app/models/cerfa.rb index 7dc020acb..40fdd8cdf 100644 --- a/app/models/cerfa.rb +++ b/app/models/cerfa.rb @@ -11,7 +11,11 @@ class Cerfa < ActiveRecord::Base def content_url unless content.url.nil? - (Downloader.new content, 'CERFA').url + if Features.remote_storage + (RemoteDownloader.new content.filename).url + else + (LocalDownloader.new content.path, 'CERFA').url + end end end end \ No newline at end of file diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 6bb913e25..900b71fcb 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -190,7 +190,7 @@ class Dossier < ActiveRecord::Base def as_csv(options={}) dossier_attr = DossierSerializer.new(self).attributes - etablissement_attr = EtablissementSerializer.new(self.etablissement).attributes.map {|k, v| ["etablissement.#{k}", v] }.to_h + etablissement_attr = EtablissementCsvSerializer.new(self.etablissement).attributes.map {|k, v| ["etablissement.#{k}", v] }.to_h entreprise_attr = EntrepriseSerializer.new(self.entreprise).attributes.map {|k, v| ["entreprise.#{k}", v] }.to_h dossier_attr.merge(etablissement_attr).merge(entreprise_attr) end diff --git a/app/models/gestionnaire.rb b/app/models/gestionnaire.rb index 49e3249f6..94ee10e21 100644 --- a/app/models/gestionnaire.rb +++ b/app/models/gestionnaire.rb @@ -1,12 +1,11 @@ class Gestionnaire < ActiveRecord::Base - # Include default devise modules. Others available are: - # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable - belongs_to :administrateur + has_and_belongs_to_many :administrateurs - has_many :procedures, through: :administrateur + has_many :assign_to + has_many :procedures, through: :assign_to has_many :dossiers, through: :procedures def dossiers_filter diff --git a/app/models/piece_justificative.rb b/app/models/piece_justificative.rb index 3b29561ba..7bb2cdb34 100644 --- a/app/models/piece_justificative.rb +++ b/app/models/piece_justificative.rb @@ -19,8 +19,12 @@ class PieceJustificative < ActiveRecord::Base def content_url unless content.url.nil? - (Downloader.new content, - (type_de_piece_justificative.nil? ? content.file.original_filename : type_de_piece_justificative.libelle)).url + if Features.remote_storage + (RemoteDownloader.new content.filename).url + else + (LocalDownloader.new content.path, + (type_de_piece_justificative.nil? ? content.original_filename : type_de_piece_justificative.libelle)).url + end end end diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 1e6cac78f..8f3fa1eef 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -7,6 +7,9 @@ class Procedure < ActiveRecord::Base belongs_to :administrateur + has_many :assign_to + has_many :gestionnaires, through: :assign_to + delegate :use_api_carto, to: :module_api_carto accepts_nested_attributes_for :types_de_champ,:reject_if => proc { |attributes| attributes['libelle'].blank? }, :allow_destroy => true diff --git a/app/models/siret.rb b/app/models/siret.rb index de274b5a1..8196a223d 100644 --- a/app/models/siret.rb +++ b/app/models/siret.rb @@ -1,7 +1,15 @@ class Siret include ActiveModel::Model + include ActiveModel::Validations::Callbacks + attr_accessor :siret validates_presence_of :siret validates :siret, siret_format: true + + before_validation :remove_whitespace + + def remove_whitespace + siret.delete!(' ') unless siret.nil? + end end diff --git a/app/serializers/etablissement_csv_serializer.rb b/app/serializers/etablissement_csv_serializer.rb new file mode 100644 index 000000000..ec33919bd --- /dev/null +++ b/app/serializers/etablissement_csv_serializer.rb @@ -0,0 +1,5 @@ +class EtablissementCsvSerializer < EtablissementSerializer + def adresse + object.adresse.chomp.gsub("\r\n", ' ').gsub("\r", '') + end +end \ No newline at end of file diff --git a/app/serializers/etablissement_serializer.rb b/app/serializers/etablissement_serializer.rb index 30a66065e..b0bcd0c19 100644 --- a/app/serializers/etablissement_serializer.rb +++ b/app/serializers/etablissement_serializer.rb @@ -11,4 +11,5 @@ class EtablissementSerializer < ActiveModel::Serializer :code_postal, :localite, :code_insee_localite + end \ No newline at end of file diff --git a/app/services/accompagnateur_service.rb b/app/services/accompagnateur_service.rb new file mode 100644 index 000000000..119560418 --- /dev/null +++ b/app/services/accompagnateur_service.rb @@ -0,0 +1,12 @@ +class AccompagnateurService + ASSIGN = 'assign' + NOT_ASSIGN = 'not_assign' + + def self.change_assignement! accompagnateur, procedure, to + if to == ASSIGN + AssignTo.create(gestionnaire: accompagnateur, procedure: procedure) + elsif to == NOT_ASSIGN + AssignTo.delete_all(gestionnaire: accompagnateur, procedure: procedure) + end + end +end \ No newline at end of file diff --git a/app/uploaders/cerfa_uploader.rb b/app/uploaders/cerfa_uploader.rb index a0fe6b7d5..c69dcbac8 100644 --- a/app/uploaders/cerfa_uploader.rb +++ b/app/uploaders/cerfa_uploader.rb @@ -1,40 +1,26 @@ # encoding: utf-8 class CerfaUploader < CarrierWave::Uploader::Base + before :cache, :set_original_filename - # Include RMagick or MiniMagick support: - # include CarrierWave::RMagick - # include CarrierWave::MiniMagick - - # Choose what kind of storage to use for this uploader: - storage :file - # storage :fog +# Choose what kind of storage to use for this uploader: + if Features.remote_storage + storage :fog + else + storage :file + end # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir - "../uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + unless Features.remote_storage + "./uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end end - # Provide a default URL as a default if there hasn't been a file uploaded: - # def default_url - # # For Rails 3.1+ asset pipeline compatibility: - # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) - # - # "/images/fallback/" + [version_name, "default.png"].compact.join('_') - # end - - # Process files as they are uploaded: - # process :scale => [200, 300] - # - # def scale(width, height) - # # do something - # end - - # Create different versions of your uploaded files: - # version :thumb do - # process :resize_to_fit => [50, 50] - # end + def cache_dir + '/tmp/tps-cache' + end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: @@ -42,10 +28,28 @@ class CerfaUploader < CarrierWave::Uploader::Base %w(pdf doc docx xls xlsx ppt pptx odt ods odp) end - # Override the filename of the uploaded files: - # Avoid using model.id or version_name here, see uploader/store.rb for details. - # def filename - # "something.jpg" if original_filename - # end + def filename + if original_filename.present? || model.content_secure_token + if Features.remote_storage + filename = "#{model.class.to_s.underscore}-#{secure_token}.#{file.extension.downcase}" + else + filename = "#{model.class.to_s.underscore}.#{file.extension.downcase}" + end + end + filename + end + private + + def secure_token + model.content_secure_token ||= generate_secure_token + end + + def generate_secure_token + SecureRandom.uuid + end + + def set_original_filename(file) + model.original_filename ||= file.original_filename if file.respond_to?(:original_filename) + end end diff --git a/app/uploaders/downloader.rb b/app/uploaders/local_downloader.rb similarity index 97% rename from app/uploaders/downloader.rb rename to app/uploaders/local_downloader.rb index c6e5da35a..d83fab129 100644 --- a/app/uploaders/downloader.rb +++ b/app/uploaders/local_downloader.rb @@ -1,6 +1,6 @@ require 'securerandom' -class Downloader +class LocalDownloader BASE_PATH_DISK = File.join(Rails.root, "public/downloads/") def initialize(filename, filename_suffix = '') diff --git a/app/uploaders/piece_justificative_uploader.rb b/app/uploaders/piece_justificative_uploader.rb index 76a1269e4..ce446eb0a 100644 --- a/app/uploaders/piece_justificative_uploader.rb +++ b/app/uploaders/piece_justificative_uploader.rb @@ -1,40 +1,26 @@ # encoding: utf-8 class PieceJustificativeUploader < CarrierWave::Uploader::Base - - # Include RMagick or MiniMagick support: - # include CarrierWave::RMagick - # include CarrierWave::MiniMagick + before :cache, :set_original_filename # Choose what kind of storage to use for this uploader: - storage :file - # storage :fog + if Features.remote_storage + storage :fog + else + storage :file + end # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir - "../uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + unless Features.remote_storage + "./uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end end - # Provide a default URL as a default if there hasn't been a file uploaded: - # def default_url - # # For Rails 3.1+ asset pipeline compatibility: - # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) - # - # "/images/fallback/" + [version_name, "default.png"].compact.join('_') - # end - - # Process files as they are uploaded: - # process :scale => [200, 300] - # - # def scale(width, height) - # # do something - # end - - # Create different versions of your uploaded files: - # version :thumb do - # process :resize_to_fit => [50, 50] - # end + def cache_dir + '/tmp/tps-cache' + end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: @@ -42,10 +28,32 @@ class PieceJustificativeUploader < CarrierWave::Uploader::Base %w(pdf doc docx xls xlsx ppt pptx odt ods odp) end - # Override the filename of the uploaded files: - # Avoid using model.id or version_name here, see uploader/store.rb for details. - # def filename - # "something.jpg" if original_filename - # end + def filename + if original_filename.present? || model.content_secure_token + if Features.remote_storage + filename = "#{model.class.to_s.underscore}-#{secure_token}.#{file.extension.downcase}" + else original_filename + filename = "#{model.class.to_s.underscore}.#{file.extension.downcase}" + end + end + filename + end + def original_filename + model.original_filename + end + + private + + def secure_token + model.content_secure_token ||= generate_secure_token + end + + def generate_secure_token + SecureRandom.uuid + end + + def set_original_filename(file) + model.original_filename ||= file.original_filename if file.respond_to?(:original_filename) + end end diff --git a/app/uploaders/procedure_logo_uploader.rb b/app/uploaders/procedure_logo_uploader.rb index 70787d524..1199b32fa 100644 --- a/app/uploaders/procedure_logo_uploader.rb +++ b/app/uploaders/procedure_logo_uploader.rb @@ -2,39 +2,28 @@ class ProcedureLogoUploader < CarrierWave::Uploader::Base - # Include RMagick or MiniMagick support: - # include CarrierWave::RMagick - # include CarrierWave::MiniMagick + def root + File.join(Rails.root, "public") + end # Choose what kind of storage to use for this uploader: - storage :file - # storage :fog + if Features.remote_storage + storage :fog + else + storage :file + end # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir - "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + unless Features.remote_storage + "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" + end end - # Provide a default URL as a default if there hasn't been a file uploaded: - # def default_url - # # For Rails 3.1+ asset pipeline compatibility: - # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) - # - # "/images/fallback/" + [version_name, "default.png"].compact.join('_') - # end - - # Process files as they are uploaded: - # process :scale => [200, 300] - # - # def scale(width, height) - # # do something - # end - - # Create different versions of your uploaded files: - # version :thumb do - # process :resize_to_fit => [50, 50] - # end + def cache_dir + '/tmp/tps-cache' + end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: @@ -42,10 +31,25 @@ class ProcedureLogoUploader < CarrierWave::Uploader::Base %w(jpg jpeg png) end - # Override the filename of the uploaded files: - # Avoid using model.id or version_name here, see uploader/store.rb for details. - # def filename - # "something.jpg" if original_filename - # end + def filename + if original_filename.present? || model.logo_secure_token + if Features.remote_storage + filename = "#{model.class.to_s.underscore}-#{secure_token}.#{file.extension.downcase}" + else + filename = "logo.#{file.extension.downcase}" + end + end + filename + end + + private + + def secure_token + model.logo_secure_token ||= generate_secure_token + end + + def generate_secure_token + SecureRandom.uuid + end end diff --git a/app/uploaders/remote_downloader.rb b/app/uploaders/remote_downloader.rb new file mode 100644 index 000000000..987971f86 --- /dev/null +++ b/app/uploaders/remote_downloader.rb @@ -0,0 +1,11 @@ +class RemoteDownloader + DEST_URL = "https://storage.apientreprise.fr/" + CarrierWave::Uploader::Base.fog_directory + '/' + + def initialize(filename) + @filename = filename + end + + def url + @url ||= File.join(DEST_URL, @filename) + end +end diff --git a/app/views/admin/accompagnateurs/_list_assign.html.haml b/app/views/admin/accompagnateurs/_list_assign.html.haml new file mode 100644 index 000000000..e83b58d21 --- /dev/null +++ b/app/views/admin/accompagnateurs/_list_assign.html.haml @@ -0,0 +1,20 @@ +.row{style:'height: 34px'} + +- unless smart_listing.empty? + %table.table#liste_gestionnaire + %thead + %th Enlever + %th#email{style:'text-align: right'} Email + + - @accompagnateurs_assign.each do |accompagnateur| + %tr + %td.col-md-1.col-lg-1.center + %a.btn.btn-primary{href: "#{admin_procedure_accompagnateurs_path(procedure_id: @procedure.id, accompagnateur_id: accompagnateur.id, to: AccompagnateurService::NOT_ASSIGN)}", 'data-method' => 'put'} + .fa.fa-arrow-left + %td{style:'padding-top: 11px; font-size:15px; text-align:right'}= accompagnateur.email + + = smart_listing.paginate + = smart_listing.pagination_per_page_links +- else + %h4.center + Aucun d'affecté diff --git a/app/views/admin/accompagnateurs/_list_not_assign.html.haml b/app/views/admin/accompagnateurs/_list_not_assign.html.haml new file mode 100644 index 000000000..8d036f9ae --- /dev/null +++ b/app/views/admin/accompagnateurs/_list_not_assign.html.haml @@ -0,0 +1,27 @@ += smart_listing_controls_for(:accompagnateurs_not_assign, {class: "form-inline text-right"}) do + .form-group.filter.input-append + = text_field_tag :filter, '', class: "search form-control", + placeholder: "Recherche...", autocomplete: :off + %button.btn.btn-primary{type: :submit} + %span.glyphicon.glyphicon-search + +- unless smart_listing.empty? + + %table.table#liste_gestionnaire + %thead + %th#email Email + %th Ajouter + + - @accompagnateurs_not_assign.each do |accompagnateur| + %tr + %td.col-md-11.col-lg-11{style:'padding-top: 11px; font-size:15px'}= accompagnateur.email + %td.center + %a.btn.btn-success{href: "#{admin_procedure_accompagnateurs_path(procedure_id: @procedure.id, accompagnateur_id: accompagnateur.id, to: AccompagnateurService::ASSIGN)}", 'data-method' => 'put'} + .fa.fa-arrow-right + + + = smart_listing.paginate + = smart_listing.pagination_per_page_links +- else + %h4.center + Aucun de disponible diff --git a/app/views/admin/accompagnateurs/show.html.haml b/app/views/admin/accompagnateurs/show.html.haml new file mode 100644 index 000000000..1c82ecc96 --- /dev/null +++ b/app/views/admin/accompagnateurs/show.html.haml @@ -0,0 +1,19 @@ +%h2.text-info + =@procedure.libelle +%br + +%ul.nav.nav-tabs + = render partial: 'admin/procedures/navbar', locals: {active: 'Accompagnateurs'} + +#accompagnateur_form + .row + .col-md-6.col-lg-6 + %h3.text-info Disponibles + = smart_listing_render :accompagnateurs_not_assign + + .col-md-6.col-lg-6 + %h3.text-success Affectés + + = smart_listing_render :accompagnateurs_assign + + diff --git a/app/views/admin/accompagnateurs/show.js.erb b/app/views/admin/accompagnateurs/show.js.erb new file mode 100644 index 000000000..197a811b4 --- /dev/null +++ b/app/views/admin/accompagnateurs/show.js.erb @@ -0,0 +1,3 @@ +<%= smart_listing_update :accompagnateurs_not_assign %> + +<%= smart_listing_update :accompagnateurs_assign %> diff --git a/app/views/admin/pieces_justificatives/show.html.haml b/app/views/admin/pieces_justificatives/show.html.haml index 079c6289d..6fdc68a99 100644 --- a/app/views/admin/pieces_justificatives/show.html.haml +++ b/app/views/admin/pieces_justificatives/show.html.haml @@ -3,14 +3,7 @@ %br %ul.nav.nav-tabs - %li - = link_to('Informations', admin_procedure_path(@procedure)) - %li - = link_to('Description', edit_admin_procedure_path(@procedure)) - %li - = link_to('Champs', admin_procedure_types_de_champ_path(@procedure)) - %li.active - = link_to('Pièces justificatives', admin_procedure_pieces_justificatives_path(@procedure)) + = render partial: 'admin/procedures/navbar', locals: {active: 'Pieces'} #piece_justificative_form = render 'form' \ No newline at end of file diff --git a/app/views/admin/procedures/_navbar.html.haml b/app/views/admin/procedures/_navbar.html.haml new file mode 100644 index 000000000..10bbe3d66 --- /dev/null +++ b/app/views/admin/procedures/_navbar.html.haml @@ -0,0 +1,17 @@ +%li{ class: ('active' if active == 'Informations') } + = link_to('Informations', admin_procedure_path(@procedure)) + +%li{ class: ('active' if active == 'Accompagnateurs') } + = link_to('Accompagnateurs', admin_procedure_accompagnateurs_path(@procedure)) + +%li{ class: ('disabled' if @procedure.locked?) || ('active' if active == 'Description') } + = link_to_unless(@procedure.locked?, 'Description', edit_admin_procedure_path(@procedure)) do + = link_to('Description', '#') + +%li{ class: ('disabled' if @procedure.locked?) || ('active' if active == 'Champs') } + = link_to_unless(@procedure.locked?, 'Champs', admin_procedure_types_de_champ_path(@procedure)) do + = link_to('Champs', '#') + +%li{ class: ('disabled' if @procedure.locked?) || ('active' if active == 'Pieces') } + = link_to_unless(@procedure.locked?, 'Pièces justificatives', admin_procedure_pieces_justificatives_path(@procedure)) do + = link_to('Pièces justificatives', '#') \ No newline at end of file diff --git a/app/views/admin/procedures/edit.html.haml b/app/views/admin/procedures/edit.html.haml index 9d3dd28e7..cc799d336 100644 --- a/app/views/admin/procedures/edit.html.haml +++ b/app/views/admin/procedures/edit.html.haml @@ -3,14 +3,7 @@ %br %ul.nav.nav-tabs - %li - = link_to('Informations', admin_procedure_path(@procedure)) - %li.active - = link_to('Description', edit_admin_procedure_path(@procedure)) - %li - = link_to('Champs', admin_procedure_types_de_champ_path(@procedure)) - %li - = link_to('Pièces justificatives', admin_procedure_pieces_justificatives_path(@procedure)) + = render partial: 'navbar', locals: {active: 'Description'} #procedure_new.section.section-label = form_for @procedure, url: url_for({controller: 'admin/procedures', action: :update, id: @procedure.id}), multipart: true do |f| diff --git a/app/views/admin/procedures/show.html.haml b/app/views/admin/procedures/show.html.haml index 3dc75cd8a..efb1d9e10 100644 --- a/app/views/admin/procedures/show.html.haml +++ b/app/views/admin/procedures/show.html.haml @@ -4,21 +4,7 @@ %br %ul.nav.nav-tabs - %li.active - = link_to('Informations', admin_procedure_path(@facade.procedure)) - - %li{ class: ('disabled' if @facade.procedure.locked?) } - = link_to_unless(@facade.procedure.locked?, 'Description', edit_admin_procedure_path(@facade.procedure)) do - = link_to('Description', '#') - - %li{ class: ('disabled' if @facade.procedure.locked?) } - = link_to_unless(@facade.procedure.locked?, 'Champs', admin_procedure_types_de_champ_path(@facade.procedure)) do - = link_to('Champs', '#') - - %li{ class: ('disabled' if @facade.procedure.locked?) } - = link_to_unless(@facade.procedure.locked?, 'Pièces justificatives', admin_procedure_pieces_justificatives_path(@facade.procedure)) do - = link_to('Pièces justificatives', '#') - + = render partial: 'navbar', locals: {active: 'Informations'} %li{style:'float:right'} = form_tag admin_procedure_archive_path(procedure_id: @facade.procedure.id, archive: !@facade.procedure.archived?), method: :put do diff --git a/app/views/admin/types_de_champ/show.html.haml b/app/views/admin/types_de_champ/show.html.haml index afe5a07de..a89627788 100644 --- a/app/views/admin/types_de_champ/show.html.haml +++ b/app/views/admin/types_de_champ/show.html.haml @@ -3,14 +3,7 @@ %br %ul.nav.nav-tabs - %li - = link_to('Informations', admin_procedure_path(@procedure)) - %li - = link_to('Description', edit_admin_procedure_path(@procedure)) - %li.active - = link_to('Champs', admin_procedure_types_de_champ_path(@procedure)) - %li - = link_to('Pièces justificatives', admin_procedure_pieces_justificatives_path(@procedure)) + = render partial: 'admin/procedures/navbar', locals: {active: 'Champs'} #liste_champ = render partial: 'form' \ No newline at end of file diff --git a/app/views/administrateurs/_login_banner.html.haml b/app/views/administrateurs/_login_banner.html.haml index 6b38f4867..0d6c464da 100644 --- a/app/views/administrateurs/_login_banner.html.haml +++ b/app/views/administrateurs/_login_banner.html.haml @@ -13,7 +13,7 @@ %li = link_to(admin_gestionnaires_path) do %i.fa.fa-user -  Gestionnaires +  Accompagnateur %li.divider{ role: :separator} %li = link_to(admin_profile_path, id: :profile) do diff --git a/app/views/gestionnaire_mailer/new_assignement.text.erb b/app/views/gestionnaire_mailer/new_assignement.text.erb new file mode 100644 index 000000000..b4bfa57e4 --- /dev/null +++ b/app/views/gestionnaire_mailer/new_assignement.text.erb @@ -0,0 +1,11 @@ +Bienvenue sur la plateforme TPS + +Vous venez d'être assigné à un administrateur sur la plateforme TPS. Voici quelques informations utiles : + + URL : https://tps.apientreprise.fr/gestionnaires/sign_in + Email administrateur : <%= @args %> + +Bonne journée, + +--- +L'équipe TPS - tps@apientreprise.fr \ No newline at end of file diff --git a/app/views/gestionnaire_mailer/new_gestionnaire.text.erb b/app/views/gestionnaire_mailer/new_gestionnaire.text.erb index 29ea6fd04..c68a7ae98 100644 --- a/app/views/gestionnaire_mailer/new_gestionnaire.text.erb +++ b/app/views/gestionnaire_mailer/new_gestionnaire.text.erb @@ -2,9 +2,9 @@ Bienvenue sur la plateforme TPS Vous venez d'être nommé accompagnateur sur la plateforme TPS. Pour mémoire, voici quelques informations utiles : - URL : https://tps.apientreprise.fr/gestionnaires/sign_in + URL : <%= new_gestionnaire_session_url %> Login : <%= @email %> - Mot de passe : <%= @password %> + Mot de passe : <%= @args %> Bonne journée, diff --git a/app/views/users/recapitulatif/_commentaires_flux.html.haml b/app/views/users/recapitulatif/_commentaires_flux.html.haml index f666e066d..ef9404be1 100644 --- a/app/views/users/recapitulatif/_commentaires_flux.html.haml +++ b/app/views/users/recapitulatif/_commentaires_flux.html.haml @@ -16,7 +16,7 @@ \- %span#piece_justificative %b - = link_to com.piece_justificative.content.file.original_filename, com.piece_justificative.content_url, style:'color: green', target: '_blank' + = link_to com.piece_justificative.original_filename, com.piece_justificative.content_url, style:'color: green', target: '_blank' %br .description#body diff --git a/config/initializers/carrierwave.rb b/config/initializers/carrierwave.rb new file mode 100644 index 000000000..35813733a --- /dev/null +++ b/config/initializers/carrierwave.rb @@ -0,0 +1,32 @@ +require_relative 'features' + +if Rails.env.test? + Fog.credentials_path = Rails.root.join('config/fog_credentials.test.yml') +else + Fog.credentials_path = Rails.root.join('config/fog_credentials.yml') +end + +CarrierWave.configure do |config| + # These permissions will make dir and files available only to the user running + # the servers + config.permissions = 0664 + config.directory_permissions = 0775 + + if Features.remote_storage and not Rails.env.test? + config.fog_credentials = { provider: 'OpenStack' } + end + + # This avoids uploaded files from saving to public/ and so + # they will not be available for public (non-authenticated) downloading + config.root = Rails.root + + config.cache_dir = "#{Rails.root}/uploads" + + config.fog_public = true + + if Rails.env.production? + config.fog_directory = "tps" + else + config.fog_directory = "tps_dev" + end +end diff --git a/config/initializers/features.rb b/config/initializers/features.rb new file mode 100644 index 000000000..286132103 --- /dev/null +++ b/config/initializers/features.rb @@ -0,0 +1,26 @@ +require 'yaml' +# this class manage features +# Features must be added in file config/initializers/features.yml : +# feature_name: true +# other_feature: false +# +# this file is templated by ansible for staging and production so don't forget to add your features in +# ansible config +class Features + class << self + if File.exist?(File.dirname(__FILE__) + '/features.yml') + features_map = YAML.load_file(File.dirname(__FILE__) + '/features.yml') + if features_map + features_map.each do |feature, is_active| + define_method("#{feature}") do + is_active + end + end + end + + def method_missing(method, *args) + false + end + end + end +end diff --git a/config/initializers/features.yml b/config/initializers/features.yml new file mode 100644 index 000000000..e91fb5346 --- /dev/null +++ b/config/initializers/features.yml @@ -0,0 +1 @@ +remote_storage: false diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index 08b296997..1e5e84144 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -13,6 +13,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.irregular 'piece_justificative', 'pieces_justificatives' inflect.irregular 'type_de_piece_justificative', 'types_de_piece_justificative' inflect.irregular 'type_de_champ', 'types_de_champ' + inflect.irregular 'assign_to', 'assign_tos' end # These inflection rules are supported but not enabled by default: diff --git a/config/routes.rb b/config/routes.rb index 5da3ac7ac..06c348e58 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -80,6 +80,7 @@ Rails.application.routes.draw do get 'sign_in' => '/administrateurs/sessions#new' get 'procedures/archived' => 'procedures#archived' get 'profile' => 'profile#show', as: :profile + resources :procedures do resource :types_de_champ, only: [:show, :update] do post '/:index/move_up' => 'types_de_champ#move_up', as: :move_up @@ -88,10 +89,18 @@ Rails.application.routes.draw do put 'archive' => 'procedures#archive', as: :archive + resource :accompagnateurs, only: [:show, :update] + + resources :types_de_champ, only: [:destroy] resource :pieces_justificatives, only: [:show, :update] resources :pieces_justificatives, only: :destroy end + + namespace :accompagnateurs do + get 'show' #delete after fixed tests admin/accompagnateurs/show_spec without this line + end + resources :gestionnaires, only: [:index, :create, :destroy] end diff --git a/db/migrate/20160512160602_add_original_filename_to_pieces_justificatives.rb b/db/migrate/20160512160602_add_original_filename_to_pieces_justificatives.rb new file mode 100644 index 000000000..49b136ba3 --- /dev/null +++ b/db/migrate/20160512160602_add_original_filename_to_pieces_justificatives.rb @@ -0,0 +1,5 @@ +class AddOriginalFilenameToPiecesJustificatives < ActiveRecord::Migration + def change + add_column :pieces_justificatives, :original_filename, :string + end +end diff --git a/db/migrate/20160512160658_add_original_filename_to_cerfas.rb b/db/migrate/20160512160658_add_original_filename_to_cerfas.rb new file mode 100644 index 000000000..e12e86f52 --- /dev/null +++ b/db/migrate/20160512160658_add_original_filename_to_cerfas.rb @@ -0,0 +1,5 @@ +class AddOriginalFilenameToCerfas < ActiveRecord::Migration + def change + add_column :cerfas, :original_filename, :string + end +end diff --git a/db/migrate/20160512160824_add_content_secure_token_to_cerfas.rb b/db/migrate/20160512160824_add_content_secure_token_to_cerfas.rb new file mode 100644 index 000000000..1453eded5 --- /dev/null +++ b/db/migrate/20160512160824_add_content_secure_token_to_cerfas.rb @@ -0,0 +1,5 @@ +class AddContentSecureTokenToCerfas < ActiveRecord::Migration + def change + add_column :cerfas, :content_secure_token, :string + end +end diff --git a/db/migrate/20160512160836_add_content_secure_token_to_pieces_justificatives.rb b/db/migrate/20160512160836_add_content_secure_token_to_pieces_justificatives.rb new file mode 100644 index 000000000..1b256c74b --- /dev/null +++ b/db/migrate/20160512160836_add_content_secure_token_to_pieces_justificatives.rb @@ -0,0 +1,5 @@ +class AddContentSecureTokenToPiecesJustificatives < ActiveRecord::Migration + def change + add_column :pieces_justificatives, :content_secure_token, :string + end +end diff --git a/db/migrate/20160513093425_add_logo_secure_token_to_procedures.rb b/db/migrate/20160513093425_add_logo_secure_token_to_procedures.rb new file mode 100644 index 000000000..359771b96 --- /dev/null +++ b/db/migrate/20160513093425_add_logo_secure_token_to_procedures.rb @@ -0,0 +1,5 @@ +class AddLogoSecureTokenToProcedures < ActiveRecord::Migration + def change + add_column :procedures, :logo_secure_token, :string + end +end diff --git a/db/migrate/20160519100904_admin_has_and_belong_gestionnaire.rb b/db/migrate/20160519100904_admin_has_and_belong_gestionnaire.rb new file mode 100644 index 000000000..9eb2bc05b --- /dev/null +++ b/db/migrate/20160519100904_admin_has_and_belong_gestionnaire.rb @@ -0,0 +1,32 @@ +class AdminHasAndBelongGestionnaire < ActiveRecord::Migration + class Gestionnaire < ActiveRecord::Base + end + + class AdministrateursGestionnaire < ActiveRecord::Base + end + + def up + create_table :administrateurs_gestionnaires, id: false do |t| + t.belongs_to :administrateur, index: true + t.belongs_to :gestionnaire, index: true + end + + Gestionnaire.all.each do |gestionnaire| + execute "insert into administrateurs_gestionnaires (gestionnaire_id, administrateur_id) values (#{gestionnaire.id}, #{gestionnaire.administrateur_id}) " + end + + remove_column :gestionnaires, :administrateur_id + end + + def down + add_column :gestionnaires, :administrateur_id, :integer + + AdministrateursGestionnaire.all.each do |ag| + gestionnaire = Gestionnaire.find(ag.gestionnaire_id) + gestionnaire.administrateur_id = ag.administrateur_id + gestionnaire.save + end + + drop_table :administrateurs_gestionnaires + end +end diff --git a/db/migrate/20160519101018_gestionnaire_is_assign_to_procedure.rb b/db/migrate/20160519101018_gestionnaire_is_assign_to_procedure.rb new file mode 100644 index 000000000..120245803 --- /dev/null +++ b/db/migrate/20160519101018_gestionnaire_is_assign_to_procedure.rb @@ -0,0 +1,36 @@ +class GestionnaireIsAssignToProcedure < ActiveRecord::Migration + class AssignTo < ActiveRecord::Base + belongs_to :gestionnaire + belongs_to :procedure + end + + class Gestionnaire < ActiveRecord::Base + has_and_belongs_to_many :administrateurs + has_many :procedures, through: :assign_to + end + + class Administrateur < ActiveRecord::Base + has_and_belongs_to_many :gestionnaires + has_many :procedures + end + + class Procedure < ActiveRecord::Base + belongs_to :administrateur + has_many :gestionnaires, through: :assign_to + end + + def change + create_table :assign_tos, id: false do |t| + t.belongs_to :gestionnaire, index: true + t.belongs_to :procedure, index: true + end + + Administrateur.all.each do |administrateur| + administrateur.gestionnaires.each do |gestionnaire| + administrateur.procedures.each do |procedure| + AssignTo.create gestionnaire: gestionnaire, procedure: procedure + end + end + end + end +end diff --git a/db/migrate/20160523163054_add_foreign_key_admnistrateur_gestionnaire.rb b/db/migrate/20160523163054_add_foreign_key_admnistrateur_gestionnaire.rb new file mode 100644 index 000000000..61bbb4424 --- /dev/null +++ b/db/migrate/20160523163054_add_foreign_key_admnistrateur_gestionnaire.rb @@ -0,0 +1,5 @@ +class AddForeignKeyAdmnistrateurGestionnaire < ActiveRecord::Migration + def change + add_index :administrateurs_gestionnaires, [:gestionnaire_id, :administrateur_id], unique: true, name: 'unique_couple_administrateur_gestionnaire' + end +end diff --git a/db/migrate/20160524093540_set_original_filename_for_uploaders.rb b/db/migrate/20160524093540_set_original_filename_for_uploaders.rb new file mode 100644 index 000000000..d9d6306c6 --- /dev/null +++ b/db/migrate/20160524093540_set_original_filename_for_uploaders.rb @@ -0,0 +1,25 @@ +class SetOriginalFilenameForUploaders < ActiveRecord::Migration + class PieceJustificative < ActiveRecord::Base + + end + + class Cerfa < ActiveRecord::Base + + end + + def change + PieceJustificative.all.each do |pj| + if pj.original_filename.nil? + pj.original_filename = pj.content + pj.save! + end + end + + Cerfa.all.each do |cerfa| + if cerfa.original_filename.nil? + cerfa.original_filename = cerfa.content + cerfa.save! + end + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 0aaefd46e..1c61d1297 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20160419142017) do +ActiveRecord::Schema.define(version: 20160524093540) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -35,6 +35,15 @@ ActiveRecord::Schema.define(version: 20160419142017) do add_index "administrateurs", ["email"], name: "index_administrateurs_on_email", unique: true, using: :btree add_index "administrateurs", ["reset_password_token"], name: "index_administrateurs_on_reset_password_token", unique: true, using: :btree + create_table "administrateurs_gestionnaires", id: false, force: :cascade do |t| + t.integer "administrateur_id" + t.integer "gestionnaire_id" + end + + add_index "administrateurs_gestionnaires", ["administrateur_id"], name: "index_administrateurs_gestionnaires_on_administrateur_id", using: :btree + add_index "administrateurs_gestionnaires", ["gestionnaire_id", "administrateur_id"], name: "unique_couple_administrateur_gestionnaire", unique: true, using: :btree + add_index "administrateurs_gestionnaires", ["gestionnaire_id"], name: "index_administrateurs_gestionnaires_on_gestionnaire_id", using: :btree + create_table "administrations", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false @@ -53,6 +62,14 @@ ActiveRecord::Schema.define(version: 20160419142017) do add_index "administrations", ["email"], name: "index_administrations_on_email", unique: true, using: :btree add_index "administrations", ["reset_password_token"], name: "index_administrations_on_reset_password_token", unique: true, using: :btree + create_table "assign_tos", id: false, force: :cascade do |t| + t.integer "gestionnaire_id" + t.integer "procedure_id" + end + + add_index "assign_tos", ["gestionnaire_id"], name: "index_assign_tos_on_gestionnaire_id", using: :btree + add_index "assign_tos", ["procedure_id"], name: "index_assign_tos_on_procedure_id", using: :btree + create_table "cadastres", force: :cascade do |t| t.string "surface_intersection" t.float "surface_parcelle" @@ -72,6 +89,8 @@ ActiveRecord::Schema.define(version: 20160419142017) do t.integer "dossier_id" t.datetime "created_at" t.integer "user_id" + t.string "original_filename" + t.string "content_secure_token" end add_index "cerfas", ["dossier_id"], name: "index_cerfas_on_dossier_id", using: :btree @@ -174,7 +193,6 @@ ActiveRecord::Schema.define(version: 20160419142017) do t.inet "last_sign_in_ip" t.datetime "created_at" t.datetime "updated_at" - t.integer "administrateur_id" t.integer "procedure_filter", default: [], array: true end @@ -203,6 +221,8 @@ ActiveRecord::Schema.define(version: 20160419142017) do t.integer "type_de_piece_justificative_id" t.datetime "created_at" t.integer "user_id" + t.string "original_filename" + t.string "content_secure_token" end add_index "pieces_justificatives", ["type_de_piece_justificative_id"], name: "index_pieces_justificatives_on_type_de_piece_justificative_id", using: :btree @@ -221,6 +241,7 @@ ActiveRecord::Schema.define(version: 20160419142017) do t.boolean "euro_flag", default: false t.string "logo" t.boolean "cerfa_flag", default: false + t.string "logo_secure_token" end create_table "quartier_prioritaires", force: :cascade do |t| diff --git a/lib/tasks/dev.rake b/lib/tasks/dev.rake index 77bd09d6a..3373efb79 100644 --- a/lib/tasks/dev.rake +++ b/lib/tasks/dev.rake @@ -4,6 +4,8 @@ namespace :dev do puts 'start initialisation' Rake::Task['dev:generate_token_file'].invoke Rake::Task['dev:generate_franceconnect_file'].invoke + Rake::Task['dev:generate_fog_credentials_file'].invoke + Rake::Task['dev:generate_features_file'].invoke puts 'end initialisation' end @@ -35,4 +37,29 @@ EOF file.write(comment) file.close end + + task :generate_fog_credentials_file do + puts 'creating fog_credentials.test.yml file' + content = <