Sprankelprachtig aan/afmeldsysteem

groups_controller.rb 4.8KB

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