get type > sells migration mostly working

This commit is contained in:
Rafael Schouten
2014-09-27 15:21:27 +10:00
parent 299b0fe5be
commit beb85e862a
11 changed files with 71 additions and 56 deletions

View File

@@ -3,8 +3,8 @@ module Admin
before_filter :load_enterprise_set, :only => :index
before_filter :load_countries, :except => :index
before_filter :load_methods_and_fees, :only => [:new, :edit, :update, :create]
before_filter :check_type, only: :update
before_filter :check_bulk_type, only: :bulk_update
before_filter :check_sells, only: :update
before_filter :check_bulk_sells, only: :bulk_update
before_filter :override_owner, only: :create
before_filter :check_owner, only: :update
before_filter :check_bulk_owner, only: :bulk_update
@@ -50,7 +50,8 @@ module Admin
end
def collection
Enterprise.managed_by(spree_current_user).order('is_distributor DESC, is_primary_producer ASC, name')
# TODO is_distributor DESC,
Enterprise.managed_by(spree_current_user).order('is_primary_producer ASC, name')
end
def collection_actions
@@ -63,16 +64,16 @@ module Admin
@enterprise_fees = EnterpriseFee.managed_by(spree_current_user).for_enterprise(@enterprise).order(:fee_type, :name).all
end
def check_bulk_type
def check_bulk_sells
unless spree_current_user.admin?
params[:enterprise_set][:collection_attributes].each do |i, enterprise_params|
enterprise_params.delete :type
enterprise_params.delete :sells
end
end
end
def check_type
params[:enterprise].delete :type unless spree_current_user.admin?
def check_sells
params[:enterprise].delete :sells unless spree_current_user.admin?
end
def override_owner

View File

@@ -1,6 +1,7 @@
Spree::Admin::OverviewController.class_eval do
def index
@enterprises = Enterprise.managed_by(spree_current_user).order('is_distributor DESC, is_primary_producer ASC, name')
# TODO is_distributor DESC,
@enterprises = Enterprise.managed_by(spree_current_user).order('is_primary_producer ASC, name')
@product_count = Spree::Product.active.managed_by(spree_current_user).count
@order_cycle_count = OrderCycle.active.managed_by(spree_current_user).count
end

View File

@@ -1,5 +1,5 @@
class Enterprise < ActiveRecord::Base
TYPES = %w(full single profile)
SELLS = %w(none own any)
ENTERPRISE_SEARCH_RADIUS = 100
self.inheritance_column = nil
@@ -47,7 +47,7 @@ class Enterprise < ActiveRecord::Base
validates :name, presence: true
validates :type, presence: true, inclusion: {in: TYPES}
validates :sells, presence: true, inclusion: {in: SELLS}
validates :address, presence: true, associated: true
validates_presence_of :owner
validate :enforce_ownership_limit, if: lambda { owner_id_changed? }
@@ -59,7 +59,7 @@ class Enterprise < ActiveRecord::Base
scope :by_name, order('name')
scope :visible, where(:visible => true)
scope :is_primary_producer, where(:is_primary_producer => true)
scope :is_distributor, where(:is_distributor => true)
scope :is_distributor, where('sells != ?', 'none')
scope :supplying_variant_in, lambda { |variants| joins(:supplied_products => :variants_including_master).where('spree_variants.id IN (?)', variants).select('DISTINCT enterprises.*') }
scope :with_supplied_active_products_on_hand, lambda {
joins(:supplied_products)
@@ -210,13 +210,8 @@ class Enterprise < ActiveRecord::Base
Spree::Variant.joins(:product => :product_distributions).where('product_distributions.distributor_id=?', self.id)
end
# Replaces currententerprse type field.
def sells
# Type: full - single - profile becomes Sells: all - own - none
# Remove this return later.
return "none" if !is_distributor || type == "profile"
return "own" if type == "single" || suppliers == [self]
"all"
def is_distributor
not self.sells == "none"
end
# Simplify enterprise categories for frontend logic and icons, and maybe other things.
@@ -224,21 +219,21 @@ class Enterprise < ActiveRecord::Base
# Make this crazy logic human readable so we can argue about it sanely.
# This can be simplified later, it's like this for readablitlty during changes.
category = is_primary_producer ? "producer_" : "non_producer_"
category << "sell_" + sells
category << "sells_" + sells
# Map backend cases to front end cases.
case category
when "producer_sell_all"
when "producer_sells_any"
"producer_hub" # Producer hub who sells own and others produce and supplies other hubs.
when "producer_sell_own"
when "producer_sells_own"
"producer_shop" # Producer with shopfront and supplies other hubs.
when "producer_sell_none"
when "producer_sells_none"
"producer" # Producer only supplies through others.
when "non_producer_sell_all"
when "non_producer_sells_any"
"hub" # Hub selling others products in order cycles.
when "non_producer_sell_own"
when "non_producer_sells_own"
"hub" # Wholesaler selling through own shopfront?
when "non_producer_sell_none"
when "non_producer_sells_none"
"hub_profile" # Hub selling outside the system.
end
end

View File

@@ -73,7 +73,7 @@ class AbilityDecorator
# during the order creation process from the admin backend
order.distributor.nil? || user.enterprises.include?(order.distributor)
end
can [:admin, :bulk_management], Spree::Order if user.admin? || user.enterprises.any?(&:is_distributor?)
can [:admin, :bulk_management], Spree::Order if user.admin? || user.enterprises.any?(&:is_distributor)
can [:admin, :create], Spree::LineItem
can [:admin, :index, :read, :create, :edit, :update, :fire], Spree::Payment

View File

@@ -17,8 +17,7 @@ end
class Api::UncachedEnterpriseSerializer < ActiveModel::Serializer
attributes :orders_close_at, :active
#TODO: Remove these later
attributes :icon, :icon_font, :producer_icon_font, :has_shopfront, :has_hub_listing, :enterprise_category
attributes :icon, :icon_font, :producer_icon_font, :has_shopfront, :has_hub_listing, :enterprise_category, :is_distributor
def orders_close_at
OrderCycle.first_closing_for(object).andand.orders_close_at
@@ -33,12 +32,16 @@ class Api::UncachedEnterpriseSerializer < ActiveModel::Serializer
end
def has_shopfront
object.is_distributor && object.type != 'profile'
object.is_distributor
end
def is_distributor
object.is_distributor
end
# Used to select enterprises for hub listing
def has_hub_listing
has_shopfront || object.enterprise_category == "hub_profile"
object.is_distributor || object.enterprise_category == "hub_profile"
end
# Map svg icons.

View File

@@ -33,12 +33,8 @@
.row
.three.columns.alpha
%label Enterprise Type(s)
.with-tip{'data-powertip' => "Select 'Producer' if you are a primary producer of food. Select 'Hub' if you want a shop-front. You can choose either or both."}
.with-tip{'data-powertip' => "Select 'Producer' if you are a primary producer of food."}
%a What's this?
.two.columns
= f.check_box :is_distributor, 'ng-model' => 'Enterprise.is_distributor'
&nbsp;
= f.label :is_distributor, 'Hub'
.five.columns.omega
= f.check_box :is_primary_producer, 'ng-model' => 'Enterprise.is_primary_producer'
&nbsp;
@@ -47,21 +43,21 @@
.row
.alpha.eleven.columns
.three.columns.alpha
= f.label :type, 'Profile type'
.with-tip{'data-powertip' => "Full - enterprise may have products and relationships.<br />Single - enterprise may have products but no relationships.<br />Profile - enterprise has a profile but no products or relationships.<br />"}
= f.label :sells, 'Sells'
.with-tip{'data-powertip' => "None - enterprise does not sell to customers directly.<br />Own - Enterprise sells own products to customers.<br />Any - Enterprise can sell own or other enterprises products.<br />"}
%a What's this?
.two.columns
= f.radio_button :type, "full"
= f.radio_button :sells, "none"
&nbsp;
= f.label :type, "Full", value: "full"
= f.label :sells, "None", value: "none"
.two.columns
= f.radio_button :type, "single"
= f.radio_button :sells, "own"
&nbsp;
= f.label :type, "Single", value: "single"
= f.label :sells, "Own", value: "own"
.four.columns.omega
= f.radio_button :type, "profile"
= f.radio_button :sells, "any"
&nbsp;
= f.label :type, "Profile", value: "profile"
= f.label :sells, "Any", value: "any"
.row
.three.columns.alpha
%label Visible in search?

View File

@@ -37,12 +37,9 @@
%td
= enterprise_form.check_box :is_primary_producer
Producer
%br/
= enterprise_form.check_box :is_distributor
Hub
%td= enterprise_form.check_box :visible
- if spree_current_user.admin?
%td= enterprise_form.select :type, Enterprise::TYPES, {}, class: 'select2 fullwidth'
%td= enterprise_form.select :sells, Enterprise::SELLS, {}, class: 'select2 fullwidth'
- if spree_current_user.admin?
%td= enterprise_form.select :owner_id, enterprise.users.map{ |e| [ e.email, e.id ] }, {}, class: "select2 fullwidth"
%td{"data-hook" => "admin_users_index_row_actions"}

View File

@@ -21,9 +21,9 @@ node :promo_image do |enterprise|
end
node :icon do |e|
if e.is_primary_producer? and e.is_distributor?
if e.is_primary_producer and e.is_distributor
image_path "map_003-producer-shop.svg"
elsif e.is_primary_producer?
elsif e.is_primary_producer
image_path "map_001-producer-only.svg"
else
image_path "map_005-hub.svg"

View File

@@ -8,7 +8,7 @@
- if can? :admin, EnterpriseFee
%span.centered.three.columns Enterprise Fees
%div.sixteen.columns.alpha.list
- @enterprises.is_distributor.each do |enterprise|
- @enterprises.each do |enterprise|
%a.sixteen.columns.alpha.list-item{ class: "#{cycle('odd','even')}", href: "#{main_app.edit_admin_enterprise_path(enterprise)}" }
%span.five.columns.alpha
= enterprise.name

View File

@@ -0,0 +1,23 @@
class EnterpriseConfigRefactor < ActiveRecord::Migration
def up
add_column :enterprises, :sells, :string, null: false, default: 'none'
Enterprise.all do |enterprise|
enterprise.sells = sells_what?(enterprise)
enterprise.save!
end
remove_column :enterprises, :type
remove_column :enterprises, :is_distributor
end
def down
end
#TODO make this work
def sells_what?(enterprise)
return "none" if !enterprise.is_distributor || enterprise.type == "profile"
return "own" if enterprise.type == "single" || enterprise.suppliers == [enterprise]
return "any"
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 => 20140904003026) do
ActiveRecord::Schema.define(:version => 20140927005043) do
create_table "adjustment_metadata", :force => true do |t|
t.integer "adjustment_id"
@@ -238,7 +238,6 @@ ActiveRecord::Schema.define(:version => 20140904003026) do
t.string "description"
t.text "long_description"
t.boolean "is_primary_producer"
t.boolean "is_distributor"
t.string "contact"
t.string "phone"
t.string "email"
@@ -249,8 +248,8 @@ ActiveRecord::Schema.define(:version => 20140904003026) do
t.integer "address_id"
t.string "pickup_times"
t.string "next_collection_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.text "distributor_info"
t.string "logo_file_name"
t.string "logo_content_type"
@@ -264,8 +263,8 @@ ActiveRecord::Schema.define(:version => 20140904003026) do
t.string "facebook"
t.string "instagram"
t.string "linkedin"
t.string "type", :default => "profile", :null => false
t.integer "owner_id", :null => false
t.integer "owner_id", :null => false
t.string "sells", :default => "none", :null => false
end
add_index "enterprises", ["address_id"], :name => "index_enterprises_on_address_id"