Skip to content

Commit

Permalink
reworked wholesaler_controller, added some tests, locales and a bunch…
Browse files Browse the repository at this point in the history
… of other stuff
  • Loading branch information
citrus committed May 27, 2011
1 parent a43d887 commit 7df0c4d
Show file tree
Hide file tree
Showing 41 changed files with 983 additions and 364 deletions.
28 changes: 28 additions & 0 deletions Gemfile.lock
Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
13 changes: 13 additions & 0 deletions 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
62 changes: 13 additions & 49 deletions 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!
Expand All @@ -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
6 changes: 6 additions & 0 deletions app/models/order_decorator.rb
Expand Up @@ -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!
Expand Down
2 changes: 1 addition & 1 deletion app/models/user_decorator.rb
Expand Up @@ -7,7 +7,7 @@
User.class_eval do

def wholesaler?
has_role?("wholesaler")
has_role?("wholesaler") && !wholesaler.nil?
end

end
29 changes: 17 additions & 12 deletions 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!
Expand All @@ -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
Expand Down
66 changes: 28 additions & 38 deletions app/views/admin/wholesalers/_form.html.erb
Expand Up @@ -4,8 +4,29 @@
<%= hook :admin_wholesaler_form_fields, locals do %>
<%= render "shared/error_messages", :target => @wholesaler %>


<fieldset>
<fieldset class="user-details">
<legend>User Details:</legend>
<% if @user.new_record? %>
<%= fields_for :user, @user do |uf| %>
<%= render "shared/error_messages", :target => @user %>
<%= render 'admin/users/form', :f => uf %>
<% end %>
<% else %>
<p>
<b>User Id:</b>
<%= link_to @user.id, admin_user_path(@user) %>
<br/>
<%= link_to "view user", admin_user_path(@user) %> /
<%= link_to "edit user", edit_admin_user_path(@user) %> /
<%= render "user_options" %>
</p>
<% end %>
</fieldset>


<fieldset class="wholesaler-details">
<legend>Wholesaler Details:</legend>

<%= f.field_container :company do %>
Expand Down Expand Up @@ -71,32 +92,11 @@
</fieldset>
<% end %>


<fieldset>
<legend>User Details:</legend>
<% if @user.new_record? %>
<%= fields_for :user, @user do |uf| %>
<%= render "shared/error_messages", :target => @user %>
<%= render 'admin/users/form', :f => uf %>
<% end %>
<% else %>
<p>
<b>User Id:</b>
<%= link_to @user.id, admin_user_path(@user) %>
<br/>
<%= link_to "view user", admin_user_path(@user) %> /
<%= link_to "edit user", edit_admin_user_path(@user) %> /
<%= render "user_options" %>
</p>
<% end %>
</fieldset>


</div>

<div class="rightie">

<fieldset>
<fieldset class="billing-details">
<legend>Billing Address Details:</legend>
<%= fields_for :bill_address, @bill_address do |af| %>
<%= render "shared/error_messages", :target => @bill_address %>
Expand All @@ -105,29 +105,19 @@
</fieldset>


<fieldset id="fields_ship_address">
<fieldset class="shipping-details" id="fields_ship_address">
<legend>Shipping Address Details:</legend>
<%= fields_for :ship_address, @ship_address do |af| %>
<%= render "shared/error_messages", :target => @ship_address %>
<%= render 'shared/address_form', :form => af, :address => @ship_address %>
<%= render 'shared/address_form', :form => af, :address => @ship_address %>
<% end %>
</fieldset>

</div>
<script type="text/javascript">
//<![CDATA[

$('#wholesaler_use_billing').change(function(evt) {
$('#fields_ship_address').css('display', $(this).is(':checked') ? 'none' : 'block');
}).change();

<% unless @ship_address.new_record? || @bill_address != @ship_address %>
$('#wholesaler_use_billing').attr('checked', true);
<% end %>

//]]>
</script>


<% content_for :head do %>
<%= stylesheet_link_tag 'admin/wholesalers' %>
<% end %>
<%= javascript_include_tag 'admin/wholesaler_address' %>
<% end %>
8 changes: 8 additions & 0 deletions app/views/admin/wholesalers/_state_field.html.erb
@@ -0,0 +1,8 @@
<% states ||= [] %>
<% prefix ||= '' %>
<% value ||= '' %>
<% unless states.empty? %>
<%= select_tag "#{prefix}_address[state_id]", options_for_select(states.map{|s| [s.name, s.id]}, value.is_a?(Address) ? value.state.id : value), :class => 'required' %>
<% else %>
<%= text_field_tag "#{prefix}_address[state_name]", value.is_a?(Address) ? value.state_name : value, :class => 'text required' %>
<% end %>
2 changes: 1 addition & 1 deletion app/views/admin/wholesalers/edit.html.erb
Expand Up @@ -3,7 +3,7 @@
<% end %>
<%= hook :admin_wholesaler_edit_form do %>
<%= form_for(:wholesaler, :url => object_url, :html => { :method => :put }) do |f| %>
<%= form_for [:admin, @wholesaler], :html => { :class => "wholesaler-form" } do |f| %>
<%= render :partial => "form", :locals => { :f => f } %>
<%= hook :admin_wholesaler_edit_form_buttons do %>
Expand Down
2 changes: 1 addition & 1 deletion app/views/admin/wholesalers/new.html.erb
Expand Up @@ -3,7 +3,7 @@
<% end %>
<%= hook :admin_wholesaler_new_form do %>
<%= form_for(:wholesaler, :url => collection_url) do |f| %>
<%= form_for [:admin, @wholesaler], :html => { :class => "wholesaler-form" } do |f| %>
<%= render :partial => "form", :locals => { :f => f } %>
<%= hook :admin_wholesaler_new_form_buttons do %>
Expand Down
5 changes: 5 additions & 0 deletions app/views/hooks/_wholesale_customer.html.erb
@@ -0,0 +1,5 @@
<% if @user.wholesaler? %>
<h1>Wholesaler</h1>
<h4 class="wholesale-customer-id"><%= t('wholesale_customer', { :id => @user.id }) %></h4>
<h4 class="wholesale-customer-id"><%= t('wholesale_customer_since', { :time => @user.wholesaler.created_at }) %></h4>
<% end %>

0 comments on commit 7df0c4d

Please sign in to comment.