mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
get type > sells migration mostly working
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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'
|
||||
|
||||
= f.label :is_distributor, 'Hub'
|
||||
.five.columns.omega
|
||||
= f.check_box :is_primary_producer, 'ng-model' => 'Enterprise.is_primary_producer'
|
||||
|
||||
@@ -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"
|
||||
|
||||
= f.label :type, "Full", value: "full"
|
||||
= f.label :sells, "None", value: "none"
|
||||
.two.columns
|
||||
= f.radio_button :type, "single"
|
||||
= f.radio_button :sells, "own"
|
||||
|
||||
= 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"
|
||||
|
||||
= f.label :type, "Profile", value: "profile"
|
||||
= f.label :sells, "Any", value: "any"
|
||||
.row
|
||||
.three.columns.alpha
|
||||
%label Visible in search?
|
||||
|
||||
@@ -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"}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
23
db/migrate/20140927005043_enterprise_config_refactor.rb
Normal file
23
db/migrate/20140927005043_enterprise_config_refactor.rb
Normal 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
|
||||
11
db/schema.rb
11
db/schema.rb
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user