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:
Maikel Linke
2015-02-02 15:58:34 +11:00
parent 8d9f8beff3
commit 91b35d068c
8 changed files with 39 additions and 2 deletions

View File

@@ -1 +1 @@
angular.module("admin.enterprise_groups", ["admin.side_menu"])
angular.module("admin.enterprise_groups", ["admin.side_menu", "admin.users"])

View File

@@ -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

View File

@@ -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

View File

@@ -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/

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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