Skip to content

Commit cb18458

Browse files
committed
Implement tagging items with partner groups
1 parent e433eeb commit cb18458

File tree

8 files changed

+127
-1
lines changed

8 files changed

+127
-1
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class PartnerGroupItemsController < ApplicationController
2+
def create
3+
@partner_group = current_organization.partner_groups.find(params[:partner_group_id])
4+
@item = current_organization.items.find(params[:item_id])
5+
if @partner_group.partner_group_items.create(item: @item)
6+
redirect_to partner_group_path(@partner_group), notice: "Item #{@item.name} added to group!"
7+
else
8+
flash[:error] = "Something didn't work quite right -- try again?"
9+
redirect_to partner_group_path(@partner_group)
10+
end
11+
end
12+
13+
def destroy
14+
@partner_group = current_organization.partner_groups.find(params[:partner_group_id])
15+
@partner_group.partner_group_items.find(params[:id]).destroy
16+
redirect_to partner_group_path(@partner_group)
17+
end
18+
end

app/controllers/partner_groups_controller.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def show
1111
@partner_group = current_organization.partner_groups.find(params[:id])
1212

1313
@partners_not_in_group = current_organization.partners.alphabetized - @partner_group.partners
14+
@items_not_in_group = current_organization.items.alphabetized - @partner_group.items
1415

1516
respond_to do |format|
1617
format.html

app/models/partner_group.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@
1010
#
1111
class PartnerGroup < ApplicationRecord
1212
belongs_to :organization
13-
has_many :partner_group_memberships
13+
has_many :partner_group_memberships, dependent: :destroy
1414
has_many :partners, through: :partner_group_memberships
1515

16+
has_many :partner_group_items, dependent: :destroy
17+
has_many :items, through: :partner_group_items
18+
1619
validates :organization, presence: true
1720
validates :name, presence: true, uniqueness: { scope: :organization }
1821
end

app/models/partner_group_item.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# == Schema Information
2+
#
3+
# Table name: partner_group_items
4+
#
5+
# id :bigint not null, primary key
6+
# created_at :datetime not null
7+
# updated_at :datetime not null
8+
# item_id :bigint not null
9+
# partner_group_id :bigint not null
10+
#
11+
class PartnerGroupItem < ApplicationRecord
12+
belongs_to :partner_group
13+
belongs_to :item
14+
end

app/views/partner_groups/show.html.erb

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,74 @@
3838
</div>
3939
</section>
4040

41+
<section class="content">
42+
<div class="container-fluid">
43+
<div class="row">
44+
<div class="col-12">
45+
<!-- Default box -->
46+
<div class="card card-primary card-outline">
47+
<div class="card-header">
48+
<h2 class="card-title mr-2">Items requestable by this partner group</h2>
49+
<%= modal_button_to("#addItemModal", {text: "Add Item to group", size: "xs"}) if can_administrate? %>
50+
</div>
51+
<div class="card-body p-0">
52+
<div class="tab-content" id="custom-tabs-three-tabContent">
53+
<table class="table">
54+
<thead>
55+
<tr>
56+
<th>Item name</th>
57+
<th>Base item name</th>
58+
<th></th>
59+
</thead>
60+
<tbody>
61+
<% @partner_group.partner_group_items.each do |partner_group_item| %>
62+
<% item = partner_group_item.item %>
63+
<tr>
64+
<td><%= item.name %></td>
65+
<td><%= item.base_item.name %></td>
66+
<td><%= delete_button_to(
67+
partner_group_item_path(partner_group_id: @partner_group.id, id: partner_group_item.id),
68+
{confirm: confirm_delete_msg("#{item.name} from this group")}
69+
) %>
70+
</td>
71+
</tr>
72+
<% end %>
73+
</table>
74+
</div><!-- /.box-body.table-responsive -->
75+
</div>
76+
</div>
77+
</div>
78+
</div>
79+
</div>
80+
<div id="addItemModal" class="modal fade">
81+
<div class="modal-dialog">
82+
<!-- Modal content-->
83+
<div class="modal-content">
84+
<div class="modal-header">
85+
<h4 class="modal-title">Add an item to <%= @partner_group.name %></h4>
86+
</div><!-- modal-header -->
87+
<div class="modal-body">
88+
<div class="box-body">
89+
<p>
90+
This item can be requested by members of this group.
91+
</p>
92+
<br/>
93+
<%= form_tag partner_group_items_path(@partner_group.id) do %>
94+
95+
<%= label_tag 'Item: ' %>
96+
<%= select_tag :item_id,
97+
options_from_collection_for_select(@items_not_in_group, :id, :name)
98+
%>
99+
<br>
100+
<%= submit_button({text: "Add Item", icon: "plus"}) %>
101+
<% end # form %>
102+
</div><!-- box-body -->
103+
</div><!-- modal-body -->
104+
</div><!-- modal-content -->
105+
</div><!-- modal-dialog -->
106+
</div><!-- addItemModal-->
107+
</section>
108+
41109
<section class="content">
42110
<div class="container-fluid">
43111
<div class="row">

config/routes.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ def set_up_flipper
144144

145145
resources :partner_groups do
146146
resources :memberships, controller: :partner_group_memberships, only: %i(create destroy)
147+
resources :items, controller: :partner_group_items, only: %i(create destroy)
147148
end
148149

149150
resources :diaper_drives
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class CreatePartnerGroupItems < ActiveRecord::Migration[6.0]
2+
def change
3+
create_table :partner_group_items do |t|
4+
t.references :partner_group, foreign_key: true, null: false
5+
t.references :item, foreign_key: true, null: false
6+
7+
t.timestamps
8+
end
9+
end
10+
end

db/schema.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,15 @@
290290
t.index ["short_name"], name: "index_organizations_on_short_name"
291291
end
292292

293+
create_table "partner_group_items", force: :cascade do |t|
294+
t.bigint "partner_group_id", null: false
295+
t.bigint "item_id", null: false
296+
t.datetime "created_at", precision: 6, null: false
297+
t.datetime "updated_at", precision: 6, null: false
298+
t.index ["item_id"], name: "index_partner_group_items_on_item_id"
299+
t.index ["partner_group_id"], name: "index_partner_group_items_on_partner_group_id"
300+
end
301+
293302
create_table "partner_group_memberships", force: :cascade do |t|
294303
t.bigint "partner_group_id"
295304
t.bigint "partner_id"
@@ -436,6 +445,8 @@
436445
add_foreign_key "kits", "organizations"
437446
add_foreign_key "manufacturers", "organizations"
438447
add_foreign_key "organizations", "account_requests"
448+
add_foreign_key "partner_group_items", "items"
449+
add_foreign_key "partner_group_items", "partner_groups"
439450
add_foreign_key "partner_group_memberships", "partner_groups"
440451
add_foreign_key "partner_group_memberships", "partners"
441452
add_foreign_key "partner_groups", "organizations"

0 commit comments

Comments
 (0)