diff --git a/Gemfile.lock b/Gemfile.lock
index 4951b40..c9c353d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -46,6 +46,19 @@ GEM
builder
builder (2.1.2)
cancan (1.6.4)
+ capybara (0.4.1.2)
+ celerity (>= 0.7.9)
+ culerity (>= 0.2.4)
+ mime-types (>= 1.16)
+ nokogiri (>= 1.3.3)
+ rack (>= 1.0.0)
+ rack-test (>= 0.5.4)
+ selenium-webdriver (>= 0.0.27)
+ xpath (~> 0.1.3)
+ celerity (0.8.9)
+ childprocess (0.1.9)
+ ffi (~> 1.0.6)
+ culerity (0.2.15)
devise (1.3.3)
bcrypt-ruby (~> 2.1.2)
orm_adapter (~> 0.0.3)
@@ -54,13 +67,16 @@ GEM
rails (>= 3.0.0)
erubis (2.6.6)
abstract (>= 1.0.0)
+ factory_girl (2.0.0.beta2)
faker (0.9.5)
i18n (~> 0.4)
+ ffi (1.0.8)
highline (1.5.1)
i18n (0.5.0)
jquery-rails (0.2.6)
rails (~> 3.0)
thor (~> 0.14.4)
+ json_pure (1.5.1)
mail (2.2.19)
activesupport (>= 2.3.6)
i18n (>= 0.4.0)
@@ -75,6 +91,7 @@ GEM
nested_set (1.6.4)
activerecord (>= 3.0.0)
railties (>= 3.0.0)
+ nokogiri (1.4.4)
orm_adapter (0.0.5)
paperclip (2.3.8)
activerecord
@@ -104,6 +121,12 @@ GEM
activesupport (~> 3.0)
rd_resource_controller (1.0.1)
rd_unobtrusive_date_picker (0.1.0)
+ rubyzip (0.9.4)
+ selenium-webdriver (0.2.0)
+ childprocess (>= 0.1.7)
+ ffi (>= 1.0.7)
+ json_pure
+ rubyzip
shoulda (2.11.3)
spork (0.9.0.rc7)
spork-testunit (0.0.5)
@@ -140,13 +163,18 @@ GEM
warden (1.0.4)
rack (>= 1.0)
will_paginate (3.0.pre2)
+ xpath (0.1.4)
+ nokogiri (~> 1.3)
PLATFORMS
ruby
DEPENDENCIES
+ capybara (>= 0.4.1)
dummier (>= 0.1.0)
+ factory_girl (>= 2.0.0.beta2)
faker (>= 0.9.5)
+ selenium-webdriver (>= 0.2.0)
shoulda (>= 2.11.3)
spork (>= 0.9.0.rc5)
spork-testunit (>= 0.0.5)
diff --git a/app/controllers/admin/wholesaler_states_controller.rb b/app/controllers/admin/wholesaler_states_controller.rb
new file mode 100644
index 0000000..1e1a03a
--- /dev/null
+++ b/app/controllers/admin/wholesaler_states_controller.rb
@@ -0,0 +1,13 @@
+class Admin::WholesalerStatesController < Admin::BaseController
+
+ def index
+ #params[:prefix] = params[:prefix].to_s.downcase
+ #prefix = %w(bill ship).include?(params[:prefix]) ? params[:prefix] : "bill"
+ if params[:country_id]
+ @country = Country.includes(:states).find(params[:country_id]) rescue nil
+ @states = @country.states.order(:name).all if @country
+ end
+ render :partial => "admin/wholesalers/state_field", :locals => { :states => @states }
+ end
+
+end
diff --git a/app/controllers/admin/wholesalers_controller.rb b/app/controllers/admin/wholesalers_controller.rb
index 475fbbc..f04f347 100644
--- a/app/controllers/admin/wholesalers_controller.rb
+++ b/app/controllers/admin/wholesalers_controller.rb
@@ -1,22 +1,19 @@
-class Admin::WholesalersController < Admin::BaseController
-
- resource_controller
+class Admin::WholesalersController < Admin::ResourceController
include SpreeWholesale::WholesalerController
- #before_filter :check_json_authenticity, :only => :index
+ before_filter :approval_setup, :only => [ :approve, :reject ]
- index.response do |wants|
- wants.html { render :action => :index }
- wants.json { render :json => json_data }
+ def after_wholesaler_create
+ flash[:notice] = t('admin.wholesalers.success')
+ redirect_to admin_wholesalers_path
end
-
- destroy.success.wants.js { render_js_for_destroy }
-
-
- before_filter :approval_setup, :only => [ :approve, :reject ]
-
-
+
+ def after_wholesaler_failed_create
+ flash[:error] = t('admin.wholesalers.failed')
+ render :action => :new
+ end
+
def approve
return redirect_to request.referer, :flash => { :error => "Wholesaler is already active." } if @wholesaler.active?
@wholesaler.activate!
@@ -33,47 +30,14 @@ def approval_setup
@wholesaler = Wholesaler.find(params[:id])
@role = Role.find_by_name("wholesaler")
end
-
-
+
private
def collection
params[:search] ||= {}
params[:search][:meta_sort] ||= "company.asc"
- @search = end_of_association_chain.metasearch(params[:search])
+ @search = Wholesaler.search(params[:search])
@collection = @search.paginate(:per_page => Spree::Config[:admin_products_per_page], :page => params[:page])
end
end
-
- ## Allow different formats of json data to suit different ajax calls
- #def json_data
- # json_format = params[:json_format] or 'default'
- # case json_format
- # when 'basic'
- # collection.map {|u| {'id' => u.id, 'name' => u.email}}.to_json
- # else
- # collection.to_json(:include =>
- # {:bill_address => {:include => [:state, :country]},
- # :ship_address => {:include => [:state, :country]}})
- # end
- #end
-
- #def collection
- # return @collection if @collection.present?
- # unless request.xhr?
- # @search = Wholesaler.searchlogic(params[:search])
- #
- # #set order by to default or form result
- # @search.order ||= "ascend_by_email"
- #
- # @collection = @search.do_search.includes(:user => [:roles]).paginate(:per_page => Spree::Config[:admin_products_per_page], :page => params[:page])
- #
- # #scope = scope.conditions "lower(email) = ?", @filter.email.downcase unless @filter.email.blank?
- # else
- # @collection = Wholesaler.includes(:user => [:roles], :bill_address => [:state, :country],
- # :ship_address => [:state, :country]).where("wholesalers.company like :search",
- # {:search => "#{params[:q].strip}%"}).limit(params[:limit] || 100)
- # end
- #end
-#end
diff --git a/app/models/order_decorator.rb b/app/models/order_decorator.rb
index c5ae796..d5ba3fe 100644
--- a/app/models/order_decorator.rb
+++ b/app/models/order_decorator.rb
@@ -27,6 +27,12 @@ def to_fullsale!
end
def to_wholesale!
+
+ puts "user.wholesaler"
+ puts user.wholesaler
+
+
+ return false unless user.wholesaler.present?
self.wholesale = true
set_line_item_prices(:wholesale_price)
update!
diff --git a/app/models/user_decorator.rb b/app/models/user_decorator.rb
index 4ffc4b1..501bbb0 100644
--- a/app/models/user_decorator.rb
+++ b/app/models/user_decorator.rb
@@ -7,7 +7,7 @@
User.class_eval do
def wholesaler?
- has_role?("wholesaler")
+ has_role?("wholesaler") && !wholesaler.nil?
end
end
\ No newline at end of file
diff --git a/app/models/wholesaler.rb b/app/models/wholesaler.rb
index bc1feb9..b8a89e2 100644
--- a/app/models/wholesaler.rb
+++ b/app/models/wholesaler.rb
@@ -1,21 +1,22 @@
class Wholesaler < ActiveRecord::Base
- belongs_to :user
+ partial_updates = false
- belongs_to :ship_address, :foreign_key => "shipping_address_id", :class_name => "Address"
- belongs_to :bill_address, :foreign_key => "billing_address_id", :class_name => "Address"
-
- validates_presence_of [ :company, :buyer_contact, :manager_contact, :phone, :taxid ]
-
- validates_each :user_id, :billing_address_id, :shipping_address_id do |record,attr,value|
- record.errors.add attr, 'must not contain any errors.' if value.to_i == 0
- end
+ belongs_to :user, :dependent => :destroy
+ belongs_to :bill_address, :foreign_key => "billing_address_id", :class_name => "Address", :dependent => :destroy
+ belongs_to :ship_address, :foreign_key => "shipping_address_id", :class_name => "Address", :dependent => :destroy
+ validates :company, :buyer_contact, :manager_contact, :phone, :taxid, :presence => true
+ validate :validate_parts
+
delegate_belongs_to :user, :roles
delegate_belongs_to :user, :email
-
- def self.term_options
- %(Net 10, Net 15, Net 30, COD, Credit Card).split(", ")
+
+ def validate_parts
+ uv = user && user.valid?
+ bv = bill_address && bill_address.valid?
+ sv = ship_address && ship_address.valid?
+ self.errors.add(:base, I18n.t("wholesaler.parts_error_message")) unless uv && bv && sv
end
def activate!
@@ -36,6 +37,10 @@ def active?
user && user.has_role?("wholesaler")
end
+ def self.term_options
+ %(Net 10, Net 15, Net 30, COD, Credit Card).split(", ")
+ end
+
private
def get_wholesale_role
diff --git a/app/views/admin/wholesalers/_form.html.erb b/app/views/admin/wholesalers/_form.html.erb
index 20a21e9..a1ee40f 100644
--- a/app/views/admin/wholesalers/_form.html.erb
+++ b/app/views/admin/wholesalers/_form.html.erb
@@ -4,8 +4,29 @@
<%= hook :admin_wholesaler_form_fields, locals do %>
<%= render "shared/error_messages", :target => @wholesaler %>
+
-