Sprankelprachtig aan/afmeldsysteem

groups_controller.rb 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. class GroupsController < ApplicationController
  2. include GroupsHelper
  3. before_action :set_group, only: [:show, :edit, :update, :destroy, :create_default_subgroup, :update_default_subgroup, :destroy_default_subgroup]
  4. before_action :set_default_subgroup, only: [:update_default_subgroup, :destroy_default_subgroup]
  5. before_action :require_admin!, only: [:index, :process_mass_add_members, :mass_add_members]
  6. before_action :require_membership!, only: [:show]
  7. before_action :require_leader!, only: [:edit, :update, :destroy, :create_default_subgroup, :update_default_subgroup, :destroy_default_subgroup]
  8. # GET /groups
  9. # GET /groups.json
  10. def index
  11. @groups = Group.all
  12. end
  13. def user_groups
  14. @groups = current_person.groups
  15. end
  16. # GET /groups/1
  17. # GET /groups/1.json
  18. def show
  19. @organized_activities = current_person
  20. .organized_activities
  21. .joins(:activity)
  22. .where('activities.group_id': @group.id)
  23. .where('start > ?', Date.today)
  24. if @organized_activities.any?
  25. @groupmenu = 'col-md-6'
  26. else
  27. @groupmenu = 'col-md-12'
  28. end
  29. @upcoming = @group.activities
  30. .where('start > ?', Date.today)
  31. .order('start ASC')
  32. @upcoming_ps = Participant
  33. .where(person: current_person)
  34. .where(activity: @upcoming)
  35. .map{ |p| [p.activity_id, p]}
  36. .to_h
  37. end
  38. # GET /groups/new
  39. def new
  40. @group = Group.new
  41. end
  42. # GET /groups/1/edit
  43. def edit
  44. @defaultsubgroup = DefaultSubgroup.new
  45. end
  46. # POST /groups
  47. # POST /groups.json
  48. def create
  49. @group = Group.new(group_params)
  50. respond_to do |format|
  51. if @group.save
  52. format.html {
  53. redirect_to @group
  54. flash_message(:info, I18n.t('groups.created'))
  55. }
  56. format.json { render :show, status: :created, location: @group }
  57. else
  58. format.html { render :new }
  59. format.json { render json: @group.errors, status: :unprocessable_entity }
  60. end
  61. end
  62. end
  63. # PATCH/PUT /groups/1
  64. # PATCH/PUT /groups/1.json
  65. def update
  66. respond_to do |format|
  67. if @group.update(group_params)
  68. format.html {
  69. redirect_to @group
  70. flash_message(:info, I18n.t('groups.updated'))
  71. }
  72. format.json { render :show, status: :ok, location: @group }
  73. else
  74. @defaultsubgroup = DefaultSubgroup.new
  75. format.html { render :edit }
  76. format.json { render json: @group.errors, status: :unprocessable_entity }
  77. end
  78. end
  79. end
  80. # DELETE /groups/1
  81. # DELETE /groups/1.json
  82. def destroy
  83. @group.destroy
  84. respond_to do |format|
  85. format.html {
  86. redirect_to groups_url
  87. flash_message(:info, I18n.t('groups.destroyed'))
  88. }
  89. format.json { head :no_content }
  90. end
  91. end
  92. def mass_add_members
  93. @group = Group.find(params[:group_id])
  94. end
  95. def process_mass_add_members
  96. @group = Group.find(params[:group_id])
  97. require 'csv'
  98. uploaded_io = params[:spreadsheet]
  99. result = Person.from_csv(uploaded_io.read)
  100. result.each do |p|
  101. m = Member.find_by(person: p, group: @group)
  102. if not m
  103. m = Member.new(person: p, group: @group)
  104. m.save!
  105. end
  106. end
  107. flash_message(:success, "#{result.count} people added to group")
  108. redirect_to group_members_path(@group)
  109. end
  110. # POST /groups/:id/default_subgroups
  111. def create_default_subgroup
  112. @defaultsubgroup = DefaultSubgroup.new(default_subgroup_params)
  113. @defaultsubgroup.group = @group
  114. if @defaultsubgroup.save
  115. flash_message(:success, I18n.t('defaultsubgroups.created'))
  116. redirect_to edit_group_path(@group)
  117. else
  118. flash_message(:danger, I18n.t('defaultsubgroups.create_failed'))
  119. render :edit
  120. end
  121. end
  122. # PATCH /groups/:id/default_subgroups/:default_subgroup_id
  123. def update_default_subgroup
  124. if @defaultsubgroup.update(default_subgroup_params)
  125. flash_message(:success, I18n.t('defaultsubgroups.updated'))
  126. redirect_to edit_group_path(@group)
  127. else
  128. flash_message(:danger, I18n.t('defaultsubgroups.update_failed'))
  129. render :edit
  130. end
  131. end
  132. # DELETE /groups/:id/default_subgroups/:default_subgroup_id
  133. def destroy_default_subgroup
  134. @defaultsubgroup.destroy
  135. flash_message(:info, I18n.t('defaultsubgroups.destroyed'))
  136. redirect_to edit_group_path(@group)
  137. end
  138. private
  139. # Use callbacks to share common setup or constraints between actions.
  140. def set_group
  141. @group = Group.find(params[:group_id] || params[:id])
  142. end
  143. # Retrieve DefaultSubgroup to update or delete
  144. def set_default_subgroup
  145. @defaultsubgroup = DefaultSubgroup.find(params[:default_subgroup_id])
  146. end
  147. # Never trust parameters from the scary internet, only allow the white list through.
  148. def group_params
  149. params.require(:group).permit(:name)
  150. end
  151. def default_subgroup_params
  152. params.require(:default_subgroup).permit(:name, :is_assignable)
  153. end
  154. end