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, :mass_add_members, :process_mass_add_members]
  4. before_action :set_default_subgroup, only: [:update_default_subgroup, :destroy_default_subgroup]
  5. before_action :require_admin!, only: [:index]
  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, :process_mass_add_members, :mass_add_members]
  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. end
  94. def process_mass_add_members
  95. require 'csv'
  96. uploaded_io = params[:spreadsheet]
  97. result = Person.from_csv(uploaded_io.read)
  98. result.each do |p|
  99. m = Member.find_by(person: p, group: @group)
  100. unless m
  101. m = Member.new(person: p, group: @group)
  102. m.save!
  103. end
  104. end
  105. flash_message(:success, I18n.t('groups.mass_add_success', count: result.count))
  106. redirect_to group_members_path(@group)
  107. end
  108. # POST /groups/:id/default_subgroups
  109. def create_default_subgroup
  110. @defaultsubgroup = DefaultSubgroup.new(default_subgroup_params)
  111. @defaultsubgroup.group = @group
  112. if @defaultsubgroup.save
  113. flash_message(:success, I18n.t('defaultsubgroups.created'))
  114. redirect_to edit_group_path(@group)
  115. else
  116. flash_message(:danger, I18n.t('defaultsubgroups.create_failed'))
  117. render :edit
  118. end
  119. end
  120. # PATCH /groups/:id/default_subgroups/:default_subgroup_id
  121. def update_default_subgroup
  122. if @defaultsubgroup.update(default_subgroup_params)
  123. flash_message(:success, I18n.t('defaultsubgroups.updated'))
  124. redirect_to edit_group_path(@group)
  125. else
  126. flash_message(:danger, I18n.t('defaultsubgroups.update_failed'))
  127. render :edit
  128. end
  129. end
  130. # DELETE /groups/:id/default_subgroups/:default_subgroup_id
  131. def destroy_default_subgroup
  132. @defaultsubgroup.destroy
  133. flash_message(:info, I18n.t('defaultsubgroups.destroyed'))
  134. redirect_to edit_group_path(@group)
  135. end
  136. private
  137. # Use callbacks to share common setup or constraints between actions.
  138. def set_group
  139. @group = Group.find(params[:group_id] || params[:id])
  140. end
  141. # Retrieve DefaultSubgroup to update or delete
  142. def set_default_subgroup
  143. @defaultsubgroup = DefaultSubgroup.find(params[:default_subgroup_id])
  144. end
  145. # Never trust parameters from the scary internet, only allow the white list through.
  146. def group_params
  147. params.require(:group).permit(:name)
  148. end
  149. def default_subgroup_params
  150. params.require(:default_subgroup).permit(:name, :is_assignable)
  151. end
  152. end