diff --git a/app/controllers/petitions_controller.rb b/app/controllers/petitions_controller.rb new file mode 100644 index 000000000..c19ccea57 --- /dev/null +++ b/app/controllers/petitions_controller.rb @@ -0,0 +1,38 @@ +class PetitionsController < ApplicationController + def create + petition = Petition.new petition_params + + if petition.save + flash[:notice] = 'Application sent' + else + flash[:error] = 'Something went wrong' + end + + redirect_to organizations_path + end + + def update + petition = Petition.find params[:id] + status = params[:status] + + if petition.update(status: status) + User.find(params[:user_id]).add_to_organization(current_organization) if status == 'accepted' + flash[:notice] = "Application #{status}" + else + flash[:error] = 'Something went wrong' + end + + redirect_to manage_petitions_path + end + + def manage + @status = params[:status] || 'pending' + @users = User.joins(:petitions).where(petitions: { organization_id: current_organization.id, status: @status }).page(params[:page]).per(20) + end + + private + + def petition_params + params.permit(%i[organization_id user_id status]) + end +end diff --git a/app/controllers/terms_controller.rb b/app/controllers/terms_controller.rb index ecf1ce81e..456c919f5 100644 --- a/app/controllers/terms_controller.rb +++ b/app/controllers/terms_controller.rb @@ -8,6 +8,6 @@ def show def accept current_user.touch :terms_accepted_at - redirect_to root_path + redirect_to(current_user.organizations.empty? ? organizations_path : root_path) end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 79e48b807..46d4b5074 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,5 +1,5 @@ class UsersController < ApplicationController - before_action :authenticate_user!, :member_should_be_active + before_action :authenticate_user!, :member_should_be_active, except: [:signup, :create] has_scope :tagged_with, as: :tag @@ -41,8 +41,10 @@ def create @user.setup_and_save_user if @user.persisted? - @user.tune_after_persisted(current_organization) - @user.add_tags(current_organization, params[:tag_list] || []) + unless request.referer.include?(signup_users_path) + @user.tune_after_persisted(current_organization) + @user.add_tags(current_organization, params[:tag_list] || []) + end redirect_to_after_create else @@ -65,6 +67,10 @@ def update end end + def signup + @user = User.new + end + def update_avatar operation = AvatarGenerator.new(current_user, params) @@ -102,6 +108,7 @@ def user_params fields_to_permit += %w"admin registration_number registration_date" if admin? fields_to_permit += %w"organization_id superadmin" if superadmin? + fields_to_permit += %w"password" if request.referer.include?(signup_users_path) params.require(:user).permit *fields_to_permit end @@ -115,17 +122,22 @@ def find_user end def redirect_to_after_create - id = @user.member(current_organization).member_uid - if params[:more] - redirect_to new_user_path, - notice: I18n.t("users.new.user_created_add", - uid: id, - name: @user.username) + if request.referer.include?(signup_users_path) + sign_in(@user) + redirect_to terms_path else - redirect_to users_path, - notice: I18n.t("users.index.user_created", - uid: id, - name: @user.username) + id = @user.member(current_organization).member_uid + if params[:more] + redirect_to new_user_path, + notice: I18n.t("users.new.user_created_add", + uid: id, + name: @user.username) + else + redirect_to users_path, + notice: I18n.t("users.index.user_created", + uid: id, + name: @user.username) + end end end end diff --git a/app/models/organization.rb b/app/models/organization.rb index dfc7a4b00..2b6cef8ac 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -21,6 +21,7 @@ class Organization < ApplicationRecord has_many :offers has_many :inquiries has_many :documents, as: :documentable, dependent: :destroy + has_many :petitions, dependent: :delete_all validates :name, presence: true, uniqueness: true diff --git a/app/models/petition.rb b/app/models/petition.rb new file mode 100644 index 000000000..24ad28376 --- /dev/null +++ b/app/models/petition.rb @@ -0,0 +1,6 @@ +class Petition < ApplicationRecord + enum status: %i[pending accepted declined] + + belongs_to :user + belongs_to :organization +end diff --git a/app/models/user.rb b/app/models/user.rb index 4f3e006c8..d14700328 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -27,6 +27,7 @@ class User < ApplicationRecord has_many :offers has_many :inquiries has_many :device_tokens + has_many :petitions, dependent: :delete_all accepts_nested_attributes_for :members diff --git a/app/policies/user_policy.rb b/app/policies/user_policy.rb index 43682895f..d65f899f9 100644 --- a/app/policies/user_policy.rb +++ b/app/policies/user_policy.rb @@ -1,6 +1,6 @@ class UserPolicy < ApplicationPolicy def create? - user.admins?(organization) + !user || user.admins?(organization) end def update? diff --git a/app/views/application/menus/_organization_listings_menu.html.erb b/app/views/application/menus/_organization_listings_menu.html.erb index 83c90dcc6..57b3ccdeb 100644 --- a/app/views/application/menus/_organization_listings_menu.html.erb +++ b/app/views/application/menus/_organization_listings_menu.html.erb @@ -11,6 +11,12 @@ <%= t "application.navbar.users" %> <% end %> +