mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
Adding owner to groups
Groups have owners and users own groups. The owners are displayed and changable on the group's page by admin users.
This commit is contained in:
@@ -1 +1 @@
|
||||
angular.module("admin.enterprise_groups", ["admin.side_menu"])
|
||||
angular.module("admin.enterprise_groups", ["admin.side_menu", "admin.users"])
|
||||
|
||||
@@ -2,6 +2,7 @@ class EnterpriseGroup < ActiveRecord::Base
|
||||
acts_as_list
|
||||
|
||||
has_and_belongs_to_many :enterprises
|
||||
belongs_to :owner, class_name: 'Spree::User', foreign_key: :owner_id, inverse_of: :owned_groups
|
||||
belongs_to :address, :class_name => 'Spree::Address'
|
||||
accepts_nested_attributes_for :address
|
||||
validates :address, presence: true, associated: true
|
||||
@@ -11,6 +12,7 @@ class EnterpriseGroup < ActiveRecord::Base
|
||||
validates :description, presence: true
|
||||
|
||||
attr_accessible :name, :description, :long_description, :on_front_page, :enterprise_ids
|
||||
attr_accessible :owner_id
|
||||
attr_accessible :logo, :promo_image
|
||||
attr_accessible :address_attributes
|
||||
attr_accessible :email, :website, :facebook, :instagram, :linkedin, :twitter
|
||||
|
||||
@@ -2,6 +2,7 @@ Spree.user_class.class_eval do
|
||||
has_many :enterprise_roles, :dependent => :destroy
|
||||
has_many :enterprises, through: :enterprise_roles
|
||||
has_many :owned_enterprises, class_name: 'Enterprise', foreign_key: :owner_id, inverse_of: :owner
|
||||
has_many :owned_groups, class_name: 'EnterpriseGroup', foreign_key: :owner_id, inverse_of: :owner
|
||||
has_one :cart
|
||||
|
||||
accepts_nested_attributes_for :enterprise_roles, :allow_destroy => true
|
||||
|
||||
@@ -10,6 +10,16 @@
|
||||
%br/
|
||||
= f.text_field :description
|
||||
|
||||
- if spree_current_user.admin?
|
||||
.row
|
||||
.three.columns.alpha
|
||||
=f.label :owner_id, 'Owner'
|
||||
.with-tip{'data-powertip' => "The primary user responsible for this group."}
|
||||
%a What's this?
|
||||
.eight.columns.omega
|
||||
- owner_email = @enterprise_group.andand.owner.andand.email || ""
|
||||
= f.hidden_field :owner_id, class: "select2 fullwidth", 'ofn-user-autocomplete' => true, email: owner_email
|
||||
|
||||
= f.field_container :on_front_page do
|
||||
= f.label :on_front_page, 'On front page?'
|
||||
%br/
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
%thead
|
||||
%tr
|
||||
%th Name
|
||||
- if spree_current_user.admin?
|
||||
%th Owner
|
||||
%th On front page?
|
||||
%th Enterprises
|
||||
%th.actions
|
||||
@@ -17,6 +19,8 @@
|
||||
- @enterprise_groups.each do |enterprise_group|
|
||||
%tr
|
||||
%td.name= enterprise_group.name
|
||||
- if spree_current_user.admin?
|
||||
%td= enterprise_group.owner.andand.email || ""
|
||||
%td= enterprise_group.on_front_page ? 'Y' : 'N'
|
||||
%td= enterprise_group.enterprises.map(&:name).join ', '
|
||||
%td.actions
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class AddOwnerToEnterpriseGroups < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :enterprise_groups, :owner_id, :integer
|
||||
add_foreign_key :enterprise_groups, :spree_users, name: "enterprise_groups_owner_id_fk", column: "owner_id"
|
||||
end
|
||||
end
|
||||
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20150121030627) do
|
||||
ActiveRecord::Schema.define(:version => 20150202000203) do
|
||||
|
||||
create_table "adjustment_metadata", :force => true do |t|
|
||||
t.integer "adjustment_id"
|
||||
@@ -204,6 +204,7 @@ ActiveRecord::Schema.define(:version => 20150121030627) do
|
||||
t.string "instagram"
|
||||
t.string "linkedin"
|
||||
t.string "twitter"
|
||||
t.integer "owner_id"
|
||||
end
|
||||
|
||||
create_table "enterprise_groups_enterprises", :id => false, :force => true do |t|
|
||||
@@ -1085,6 +1086,7 @@ ActiveRecord::Schema.define(:version => 20150121030627) do
|
||||
add_foreign_key "enterprise_fees", "enterprises", name: "enterprise_fees_enterprise_id_fk"
|
||||
|
||||
add_foreign_key "enterprise_groups", "spree_addresses", name: "enterprise_groups_address_id_fk", column: "address_id"
|
||||
add_foreign_key "enterprise_groups", "spree_users", name: "enterprise_groups_owner_id_fk", column: "owner_id"
|
||||
|
||||
add_foreign_key "enterprise_groups_enterprises", "enterprise_groups", name: "enterprise_groups_enterprises_enterprise_group_id_fk"
|
||||
add_foreign_key "enterprise_groups_enterprises", "enterprises", name: "enterprise_groups_enterprises_enterprise_id_fk"
|
||||
|
||||
@@ -22,6 +22,18 @@ describe Spree.user_class do
|
||||
}.to raise_error ActiveRecord::RecordInvalid, "Validation failed: #{u2.email} is not permitted to own any more enterprises (limit is 1)."
|
||||
end
|
||||
end
|
||||
|
||||
describe "group ownership" do
|
||||
let(:u1) { create(:user) }
|
||||
let(:u2) { create(:user) }
|
||||
let!(:g1) { create(:enterprise_group, owner: u1) }
|
||||
let!(:g2) { create(:enterprise_group, owner: u1) }
|
||||
|
||||
it "provides access to owned groups" do
|
||||
expect(u1.owned_groups(:reload)).to include g1, g2
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
context "#create" do
|
||||
|
||||
Reference in New Issue
Block a user