spree_suppliers 0.1.0 → 0.60.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +46 -0
- data/Rakefile +137 -0
- data/app/controllers/admin/pickup_locations_controller.rb +52 -0
- data/app/controllers/admin/pickups_controller.rb +84 -0
- data/app/controllers/admin/shipping_options_controller.rb +32 -0
- data/app/controllers/admin/supplier_taxons_controller.rb +65 -0
- data/app/controllers/admin/suppliers_controller.rb +203 -0
- data/app/controllers/admin/vendor_overview_controller.rb +18 -0
- data/app/controllers/dash/base_controller.rb +10 -0
- data/app/controllers/dash/overview_controller.rb +6 -0
- data/app/controllers/dash/pickup_locations_controller.rb +27 -0
- data/app/controllers/dash/pickups_controller.rb +40 -0
- data/app/controllers/dash/products_controller.rb +15 -0
- data/app/controllers/messages_controller.rb +17 -0
- data/app/controllers/suppliers_controller.rb +19 -0
- data/app/controllers/user_sessions_decorator.rb +39 -0
- data/app/helpers/admin/suppliers_helper.rb +21 -0
- data/app/helpers/cities_helper.rb +2 -0
- data/app/helpers/dragonfly_helper.rb +16 -0
- data/app/helpers/messages_helper.rb +2 -0
- data/app/helpers/suppliers_helper.rb +16 -0
- data/app/mailers/supplier_mailer.rb +11 -0
- data/app/models/ability_decorator.rb +19 -0
- data/app/models/delivery.rb +6 -0
- data/app/models/hour.rb +4 -0
- data/app/models/item.rb +5 -0
- data/app/models/message.rb +3 -0
- data/app/models/pickup.rb +10 -0
- data/app/models/pickup_date.rb +3 -0
- data/app/models/pickup_location.rb +7 -0
- data/app/models/supplier.rb +33 -0
- data/app/models/supplier_invoice.rb +5 -0
- data/app/views/admin/orders/index.html.erb +107 -0
- data/app/views/admin/orders/show.html.erb +35 -0
- data/app/views/admin/orders/user.html.erb +19 -0
- data/app/views/admin/pickup_locations/_pickup_location.html.erb +10 -0
- data/app/views/admin/pickup_locations/edit.html.erb +44 -0
- data/app/views/admin/pickup_locations/new.html.erb +48 -0
- data/app/views/admin/pickup_locations/show.html.erb +1 -0
- data/app/views/admin/pickups/_pickup.erb +0 -0
- data/app/views/admin/pickups/index.html.erb +44 -0
- data/app/views/admin/pickups/new.html.erb +33 -0
- data/app/views/admin/pickups/show.html.erb +42 -0
- data/app/views/admin/products/_suppliers_form.html.erb +5 -0
- data/app/views/admin/shared/_order_tabs_decide.html.erb +5 -0
- data/app/views/admin/shared/_vendor_order_tabs.html.erb +39 -0
- data/app/views/admin/shipping_options/edit.html.erb +38 -0
- data/app/views/admin/supplier_taxons/_form.html.erb +23 -0
- data/app/views/admin/supplier_taxons/_taxon_table.html.erb +23 -0
- data/app/views/admin/supplier_taxons/available.js.erb +33 -0
- data/app/views/admin/supplier_taxons/edit.html.erb +11 -0
- data/app/views/admin/supplier_taxons/remove.html.erb +1 -0
- data/app/views/admin/supplier_taxons/select.js.erb +2 -0
- data/app/views/admin/supplier_taxons/selected.html.erb +51 -0
- data/app/views/admin/suppliers/_edit_form.html.erb +75 -0
- data/app/views/admin/suppliers/_edit_hours_form.html.erb +18 -0
- data/app/views/admin/suppliers/_form.html.erb +72 -0
- data/app/views/admin/suppliers/_hours_form.html.erb +11 -0
- data/app/views/admin/suppliers/_image_form.html.erb +40 -0
- data/app/views/admin/suppliers/_supplier.html.erb +37 -0
- data/app/views/admin/suppliers/_supplier_tabs.html.erb +18 -0
- data/app/views/admin/suppliers/_suppliers_table.html.erb +25 -0
- data/app/views/admin/suppliers/_upload_image.html.erb +14 -0
- data/app/views/admin/suppliers/available.js.erb +34 -0
- data/app/views/admin/suppliers/edit.html.erb +20 -0
- data/app/views/admin/suppliers/index.html.erb +102 -0
- data/app/views/admin/suppliers/line_items.html.erb +20 -0
- data/app/views/admin/suppliers/new.html.erb +22 -0
- data/app/views/admin/suppliers/remove.html.erb +1 -0
- data/app/views/admin/suppliers/select.html.erb +1 -0
- data/app/views/admin/suppliers/selected.html.erb +40 -0
- data/app/views/admin/suppliers/show.html.erb +2 -0
- data/app/views/admin/users/_form.html.erb +40 -0
- data/app/views/admin/vendor_overview/index.html.erb +1 -0
- data/app/views/checkout/_delivery.html.erb +5 -0
- data/app/views/dash/overview/index.html.erb +58 -0
- data/app/views/dash/pickup_locations/_pickup_location.html.erb +3 -0
- data/app/views/dash/pickup_locations/new.html.erb +47 -0
- data/app/views/dash/pickups/_pickup.erb +3 -0
- data/app/views/dash/pickups/new.html.erb +24 -0
- data/app/views/dash/products/new.html.erb +38 -0
- data/app/views/layouts/admin.html.erb +81 -0
- data/app/views/messages/_message_form.html.erb +17 -0
- data/app/views/messages/create.html.erb +2 -0
- data/app/views/messages/destroy.html.erb +2 -0
- data/app/views/messages/new.html.erb +2 -0
- data/app/views/shared/_deliveries.html.erb +113 -0
- data/app/views/shared/_hours.html.erb +21 -0
- data/app/views/shared/_products_vendor.html.erb +49 -0
- data/app/views/shared/_supplier_invoices.html.erb +67 -0
- data/app/views/supplier_mailer/invoice_email.html.erb +72 -0
- data/app/views/suppliers/_supplier.html.erb +7 -0
- data/app/views/suppliers/_supplier_list.erb +20 -0
- data/app/views/suppliers/index.html.erb +17 -0
- data/app/views/suppliers/show.html.erb +106 -0
- data/app/views/suppliers/supplier_list.erb +14 -0
- data/config/initializers/dragonfly.rb +8 -0
- data/config/initializers/supplier_invoice_mailer.rb +10 -0
- data/config/locales/en-US.yml +13 -0
- data/config/routes.rb +48 -0
- data/db/migrate/20091209201716_supplier_setup.rb +36 -0
- data/db/migrate/20110922213437_create_messages.rb +18 -0
- data/db/migrate/20110928203155_create_hours.rb +21 -0
- data/db/migrate/20111006185052_create_pickups.rb +17 -0
- data/db/migrate/20111010191125_add_location_to_addresses.rb +9 -0
- data/db/migrate/20111010214313_create_pickup_dates.rb +14 -0
- data/db/migrate/20111011180211_add_supplier_id_to_user.rb +9 -0
- data/db/migrate/20111012211422_create_pickup_locations.rb +21 -0
- data/db/migrate/20111013155257_create_supplier_invoices.rb +16 -0
- data/db/migrate/20111013161225_create_items.rb +18 -0
- data/db/migrate/20111018133543_add_attributes_to_products.rb +17 -0
- data/db/migrate/20111028190454_add_attributes_to_assets.rb +11 -0
- data/db/migrate/20111029230805_create_suppliers_taxons.rb +16 -0
- data/db/migrate/20111101165933_create_deliveries.rb +17 -0
- data/db/migrate/20111108213108_create_shipping_methods_suppliers.rb +16 -0
- data/db/seeds.rb +14 -0
- data/lib/spree_suppliers.rb +411 -0
- data/lib/spree_suppliers_hooks.rb +40 -0
- data/lib/tasks/spree_suppliers.rake +27 -0
- data/public/javascripts/jquery-ui.js +312 -0
- data/public/javascripts/jquery-ui.multidatespicker.js +398 -0
- data/public/javascripts/jquery.ui.datepicker.js +1791 -0
- data/public/stylesheets/suppliers.css +676 -0
- data/spec/controllers/cities_controller_spec.rb +157 -0
- data/spec/controllers/shipping_options_controller_spec.rb +12 -0
- data/spec/helpers/cities_helper_spec.rb +15 -0
- data/spec/models/city_spec.rb +5 -0
- data/spec/models/comment_spec.rb +64 -0
- data/spec/models/item_spec.rb +5 -0
- data/spec/models/message_spec.rb +5 -0
- data/spec/models/pickup_date_spec.rb +5 -0
- data/spec/models/pickup_location_spec.rb +5 -0
- data/spec/models/pickup_spec.rb +5 -0
- data/spec/models/rating_spec.rb +24 -0
- data/spec/models/supplier_invoice_spec.rb +5 -0
- data/spec/models/supplier_spec.rb +11 -0
- data/spec/requests/cities_spec.rb +11 -0
- data/spec/routing/cities_routing_spec.rb +35 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/views/cities/edit.html.erb_spec.rb +22 -0
- data/spec/views/cities/index.html.erb_spec.rb +28 -0
- data/spec/views/cities/new.html.erb_spec.rb +22 -0
- data/spec/views/cities/show.html.erb_spec.rb +21 -0
- data/spec/views/shipping_options/edit.html.erb_spec.rb +5 -0
- data/spree_suppliers.gemspec +24 -0
- metadata +181 -14
@@ -0,0 +1,40 @@
|
|
1
|
+
class Dash::PickupsController < Dash::BaseController
|
2
|
+
def new
|
3
|
+
@pickups = current_user.supplier.pickups
|
4
|
+
@locations = (current_user.supplier.pickup_locations + PickupLocation.locate).uniq
|
5
|
+
end
|
6
|
+
|
7
|
+
def create_dates dates
|
8
|
+
dates = dates[0].split(',')
|
9
|
+
new_dates = []
|
10
|
+
dates.each do |d|
|
11
|
+
begin
|
12
|
+
new_dates.push(Date.strptime(d, "%m/%d/%Y"))
|
13
|
+
rescue
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
pickups = []
|
18
|
+
new_dates.each do |day|
|
19
|
+
pickups.push(PickupDate.new({:day => day}))
|
20
|
+
end
|
21
|
+
pickups
|
22
|
+
end
|
23
|
+
|
24
|
+
def create
|
25
|
+
@pickup = current_user.supplier.pickups.build ({:pickup_location_id => params[:locations]})
|
26
|
+
pickup_dates = create_dates(params[:dates])
|
27
|
+
if pickup_dates != false
|
28
|
+
@pickup.pickup_dates = pickup_dates
|
29
|
+
else
|
30
|
+
flash[:error] = "Errors in creating dates"
|
31
|
+
redirect_to dash_pickups_path and return
|
32
|
+
end
|
33
|
+
if @pickup.save
|
34
|
+
redirect_to new_dash_pickup_path, :message => "Successful creation"
|
35
|
+
else
|
36
|
+
redirect_to new_dash_pickup_path, :error => "Errors in creating dates"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Dash::ProductsController < Dash::BaseController
|
2
|
+
def new
|
3
|
+
@product = Product.new
|
4
|
+
@options = Taxon.all
|
5
|
+
end
|
6
|
+
def create
|
7
|
+
@product = current_user.supplier.products.build(params[:product])
|
8
|
+
Taxon.all.map {|m| @product.taxons.push(Taxon.find_by_id(params[m.name])) if params.member?(m.name) }
|
9
|
+
if @product.save
|
10
|
+
redirect_to dash_overview_index_path, :notice => "New product created"
|
11
|
+
else
|
12
|
+
render "new"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class MessagesController < ApplicationController
|
2
|
+
|
3
|
+
def create
|
4
|
+
@message = Message.new(params[:message])
|
5
|
+
if @message.save
|
6
|
+
flash[:notice] = "Message sent"
|
7
|
+
redirect_to :back
|
8
|
+
else
|
9
|
+
flash[:error] = @message.errors
|
10
|
+
redirect_to :back
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def destroy
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class SuppliersController < Spree::BaseController
|
2
|
+
helper :products
|
3
|
+
helper :dragonfly
|
4
|
+
respond_to :html
|
5
|
+
|
6
|
+
def index
|
7
|
+
@search = Supplier.search(params[:search])
|
8
|
+
### @suppliers = Supplier.where("name LIKE ?", "%#{params[:search]}%")
|
9
|
+
@suppliers = @search.all
|
10
|
+
respond_with(@suppliers)
|
11
|
+
end
|
12
|
+
|
13
|
+
def show
|
14
|
+
@supplier = Supplier.find_by_slug(params[:id]) || Supplier.find(params[:id])
|
15
|
+
@products = Product.find(:all, :conditions => { :supplier_id => @supplier.id , :deleted_at => nil }).paginate(:page => params[:page], :per_page => 12)
|
16
|
+
@json = @supplier.to_gmaps4rails
|
17
|
+
@message = Message.new
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
UserSessionsController.class_eval do
|
2
|
+
|
3
|
+
layout "sign_in"
|
4
|
+
|
5
|
+
# SSL is required in the Gem for new, create, update, and destroy
|
6
|
+
|
7
|
+
def destroy
|
8
|
+
session.clear
|
9
|
+
super
|
10
|
+
# added flash notice when users log out
|
11
|
+
flash[:notice] = I18n.t("logged_out")
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
authenticate_user!
|
16
|
+
if user_signed_in?
|
17
|
+
respond_to do |format|
|
18
|
+
format.html {
|
19
|
+
flash[:notice] = I18n.t("logged_in_succesfully")
|
20
|
+
if current_user.has_role?("vendor")
|
21
|
+
redirect_to admin_vendor_overview_index_path
|
22
|
+
elsif current_user.has_role?("admin")
|
23
|
+
redirect_to admin_overview_index_path
|
24
|
+
else
|
25
|
+
redirect_back_or_default(root_path)
|
26
|
+
end
|
27
|
+
}
|
28
|
+
format.js {
|
29
|
+
user = resource.record
|
30
|
+
render :json => {:ship_address => user.ship_address, :bill_address => user.bill_address}.to_json
|
31
|
+
}
|
32
|
+
end
|
33
|
+
else
|
34
|
+
flash[:error] = I18n.t("devise.failure.invalid")
|
35
|
+
render :new
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Admin::SuppliersHelper
|
2
|
+
def find_minutes outcome
|
3
|
+
minutes = outcome.scan(/:\d+/)
|
4
|
+
minutes.each do |s|
|
5
|
+
s.delete!(":")
|
6
|
+
end
|
7
|
+
minutes
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_periods outcome
|
11
|
+
periods = outcome.scan(/(AM|PM)/)
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_hours outcome
|
15
|
+
hours = outcome.scan(/\d+:/)
|
16
|
+
hours.each do | s|
|
17
|
+
s.delete!(":")
|
18
|
+
end
|
19
|
+
hours
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module DragonflyHelper
|
2
|
+
def dragonfly_app
|
3
|
+
Dragonfly[:images]
|
4
|
+
end
|
5
|
+
|
6
|
+
def sized_image(image, size)
|
7
|
+
if image != nil
|
8
|
+
if image.attachment.to_file != nil
|
9
|
+
image_tag(dragonfly_app.fetch_file(image.attachment.to_file.path).thumb(size).url)
|
10
|
+
end
|
11
|
+
else
|
12
|
+
noimage = File.open(File.join(Rails.root, "public", "images", "noimage", "product.jpg"))
|
13
|
+
image_tag(dragonfly_app.fetch_file(noimage.path).thumb(size).url)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module SuppliersHelper
|
2
|
+
def dragonfly_app
|
3
|
+
Dragonfly[:images]
|
4
|
+
end
|
5
|
+
|
6
|
+
def sized_image(image, size)
|
7
|
+
if image != nil
|
8
|
+
if image.attachment.to_file != nil
|
9
|
+
image_tag(dragonfly_app.fetch_file(image.attachment.to_file.path).thumb(size).url)
|
10
|
+
end
|
11
|
+
else
|
12
|
+
noimage = File.open(File.join(Rails.root, "public", "images", "noimage", "product.jpg"))
|
13
|
+
image_tag(dragonfly_app.fetch_file(noimage.path).thumb(size).url)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class SupplierMailer < ActionMailer::Base
|
2
|
+
|
3
|
+
def invoice_email(invoice)
|
4
|
+
@invoice = invoice
|
5
|
+
@supplier = @invoice.supplier
|
6
|
+
@fee = 0.14
|
7
|
+
@delivery = Delivery.find(:all, :conditions => { :order_id => @invoice.order.id, :supplier_id => @invoice.supplier_id})
|
8
|
+
mail(:to => @supplier.email, :subject => "Sale on Freshfully.com!", :from => "support@freshfully.com")
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class AbilityDecorator
|
2
|
+
include CanCan::Ability
|
3
|
+
def initialize(user)
|
4
|
+
if user.has_role? "vendor"
|
5
|
+
can :manage, Product
|
6
|
+
can :manage, Variant
|
7
|
+
can :manage, OptionType
|
8
|
+
can :manage, Property
|
9
|
+
can :manage, Prototype
|
10
|
+
can :manage, ProductGroup
|
11
|
+
can :manage, ProductProperty
|
12
|
+
can :manage, Taxon
|
13
|
+
can :manage, Pickup
|
14
|
+
can :manage, PickupLocation
|
15
|
+
can :manage, Order
|
16
|
+
can :manage, Supplier
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/app/models/hour.rb
ADDED
data/app/models/item.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
class Supplier < ActiveRecord::Base
|
2
|
+
validates :title, :presence => true
|
3
|
+
# scope :current_city, lambda {|id| where("city_id", id)}
|
4
|
+
acts_as_gmappable :check_process => false
|
5
|
+
acts_as_url :title, :url_attribute => :slug, :scope => :state_id
|
6
|
+
|
7
|
+
def gmaps4rails_address
|
8
|
+
country = State.find_by_id(self.state_id).country.name
|
9
|
+
"#{self.address1}, #{self.town}, #{self.state.name}, #{self.zip_code}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def gmaps4rails_title
|
13
|
+
self.name
|
14
|
+
end
|
15
|
+
|
16
|
+
def gmaps4rails_infowindow
|
17
|
+
"<a href='/#{self.state.abbr}/#{self.slug}'>#{self.title}</a>"
|
18
|
+
end
|
19
|
+
|
20
|
+
belongs_to :state
|
21
|
+
has_one :user
|
22
|
+
has_many :products
|
23
|
+
has_many :messages
|
24
|
+
has_many :hours
|
25
|
+
has_many :pickups
|
26
|
+
has_many :pickup_locations
|
27
|
+
has_many :images, :as => :viewable, :order => :position, :dependent => :destroy
|
28
|
+
accepts_nested_attributes_for :hours
|
29
|
+
has_many :supplier_invoices
|
30
|
+
has_and_belongs_to_many :taxons
|
31
|
+
has_and_belongs_to_many :shipping_methods
|
32
|
+
has_many :deliveries
|
33
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
|
2
|
+
<% if current_user.has_role?("admin") %>
|
3
|
+
<div class='toolbar order-links'>
|
4
|
+
<%= button_link_to t("new_order"), new_admin_order_url, :icon => 'add', :id => 'admin_new_order' %>
|
5
|
+
</div>
|
6
|
+
<% end %>
|
7
|
+
|
8
|
+
<%= render :partial => 'admin/shared/order_sub_menu' %>
|
9
|
+
|
10
|
+
<h1><%= t("listing_orders") %></h1>
|
11
|
+
|
12
|
+
<table class="index" id='listing_orders'>
|
13
|
+
<thead>
|
14
|
+
<tr>
|
15
|
+
<%= hook :admin_orders_index_headers do %>
|
16
|
+
<% if @show_only_completed %>
|
17
|
+
<th><%= sort_link @search, :completed_at, t("activerecord.attributes.order.completed_at") %></th>
|
18
|
+
<% else %>
|
19
|
+
<th><%= sort_link @search, :created_at, t("order_date") %></th>
|
20
|
+
<% end %>
|
21
|
+
<th><%= sort_link @search, :number, t("order_number") %></th>
|
22
|
+
<th><%= sort_link @search, :state, t("status") %></th>
|
23
|
+
<th><%= sort_link @search, :payment_state, t("payment_state") %></th>
|
24
|
+
<th><%= sort_link @search, :shipment_state, t("shipment_state") %></th>
|
25
|
+
<th><%= sort_link @search, :email, t("customer") %></th>
|
26
|
+
<th><%= sort_link @search, :total, t("total") %></th>
|
27
|
+
<% end %>
|
28
|
+
<th>
|
29
|
+
<%= hook :admin_orders_index_header_actions %>
|
30
|
+
</th>
|
31
|
+
</tr>
|
32
|
+
</thead>
|
33
|
+
|
34
|
+
<tbody>
|
35
|
+
<% @orders.each do |order| %>
|
36
|
+
<tr>
|
37
|
+
<%- locals = {:order => order} %>
|
38
|
+
<%= hook :admin_orders_index_rows, locals do %>
|
39
|
+
<td><%= (@show_only_completed ? order.completed_at : order.created_at).to_date %></td>
|
40
|
+
<td><%= link_to order.number, admin_order_path(order) %></td>
|
41
|
+
<td><%= t("order_state.#{order.state.downcase}") %></td>
|
42
|
+
<td><%= link_to t("payment_states.#{order.payment_state}"), admin_order_payments_path(order) if order.payment_state %></td>
|
43
|
+
<td><%= link_to t("shipment_states.#{order.shipment_state}"), admin_order_shipments_path(order) if order.shipment_state %></td>
|
44
|
+
<td><%= order.email %></td>
|
45
|
+
<td><%= number_to_currency order.total %></td>
|
46
|
+
<% end %>
|
47
|
+
<td class='actions'>
|
48
|
+
<%= hook :admin_orders_index_row_actions, locals do %>
|
49
|
+
<%= link_to_edit_url edit_admin_order_path(order), :title => "admin_edit_#{dom_id(order)}" %>
|
50
|
+
<% end %>
|
51
|
+
</td>
|
52
|
+
</tr>
|
53
|
+
<% end %>
|
54
|
+
</tbody>
|
55
|
+
</table>
|
56
|
+
<%= will_paginate(@orders, :previous_label => "« #{t('previous')}", :next_label => "#{t('next')} »") %>
|
57
|
+
|
58
|
+
|
59
|
+
<% content_for :sidebar do %>
|
60
|
+
<div class="box">
|
61
|
+
<h3><%= t(:search) %></h3>
|
62
|
+
<%= form_for [:admin, @search] do |f| %>
|
63
|
+
<%- locals = {:f => f} %>
|
64
|
+
<%= hook :admin_orders_index_search, locals do %>
|
65
|
+
<label><%= t("date_range") %></label><br />
|
66
|
+
<div class="yui-g date-range-filter">
|
67
|
+
<div class="yui-u sub-field first">
|
68
|
+
<%= f.spree_date_picker :created_at_greater_than %><br />
|
69
|
+
<label class="sub"><%= t("start") %></label>
|
70
|
+
</div>
|
71
|
+
<div class="yui-u sub-field">
|
72
|
+
<%= f.spree_date_picker :created_at_less_than %><br />
|
73
|
+
<label><%= t("stop") %></label>
|
74
|
+
</div>
|
75
|
+
</div>
|
76
|
+
|
77
|
+
<p><label><%= t("status") %></label><br />
|
78
|
+
<%= f.select :state_equals, Order.state_machines[:state].states.collect {|s| [t("order_state.#{s.name}"), s.value]}, {:include_blank => true} %></p>
|
79
|
+
|
80
|
+
<p><label><%= t 'order_number' %></label><br />
|
81
|
+
<%= f.text_field :number_like, :size=>25 %></p>
|
82
|
+
|
83
|
+
<p>
|
84
|
+
<label><%= t 'email' %></label><br />
|
85
|
+
<%= f.text_field :email_like, :size=>25 %>
|
86
|
+
</p>
|
87
|
+
<p>
|
88
|
+
<label><%= t 'first_name_begins_with' %></label><br />
|
89
|
+
<%= f.text_field :bill_address_firstname_starts_with, :size=>25 %>
|
90
|
+
</p>
|
91
|
+
<p>
|
92
|
+
<label><%= t 'last_name_begins_with' %></label><br />
|
93
|
+
<%= f.text_field :bill_address_lastname_starts_with, :size=>25 %>
|
94
|
+
</p>
|
95
|
+
<p>
|
96
|
+
<%= f.check_box :completed_at_is_not_null, {:checked => @show_only_completed}, "1", "" %>
|
97
|
+
<label>
|
98
|
+
<%= t("show_only_complete_orders") %>
|
99
|
+
</label>
|
100
|
+
</p>
|
101
|
+
<% end %>
|
102
|
+
<%= hook :admin_orders_index_search_buttons, locals do %>
|
103
|
+
<p><%= button t("search") %></p>
|
104
|
+
<% end %>
|
105
|
+
<% end %>
|
106
|
+
</div>
|
107
|
+
<% end %>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
<div class='toolbar order-links'>
|
3
|
+
<%= hook :admin_order_show_buttons do %>
|
4
|
+
<% if !current_user.has_role?("vendor") %>
|
5
|
+
<%= button_link_to t("cancel"), fire_admin_order_url(@order.number, {:e => "cancel"}), :icon => 'delete', :confirm => t('are_you_sure') if @order.can_cancel? %>
|
6
|
+
<%= button_link_to t("edit"), edit_admin_order_url(@order.number), :icon => 'edit' %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<% render :partial => 'admin/shared/order_tabs_decide', :locals => {:current => "Order Details"} %>
|
12
|
+
<%= hook :admin_order_show_addresses do %>
|
13
|
+
<% if @order.bill_address %>
|
14
|
+
<div class='adr'>
|
15
|
+
<h4><%= t("bill_address") %></h4>
|
16
|
+
<%= render :partial => 'admin/shared/address', :locals => {:address => @order.bill_address} %>
|
17
|
+
</div>
|
18
|
+
<% end %>
|
19
|
+
<% if @order.ship_address %>
|
20
|
+
<div class='adr'>
|
21
|
+
<h4><%= t("ship_address") %></h4>
|
22
|
+
<%= render :partial => 'admin/shared/address', :locals => {:address => @order.ship_address} %>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
25
|
+
<hr />
|
26
|
+
<% end %>
|
27
|
+
<% if !current_user.has_role?("vendor") %>
|
28
|
+
<%= hook :admin_order_show_details do %>
|
29
|
+
<%= render :partial => 'admin/shared/order_details', :locals => {:order => @order} %>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
<% end %>
|
33
|
+
<h3><%= t("Supplier_Invoices") %></h3>
|
34
|
+
<%= render :partial => 'shared/supplier_invoices', :locals => {:order => @order} %>
|
35
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%= render :partial => 'admin/shared/order_tabs_decide', :locals => {:current => "Customer Details"} %>
|
2
|
+
<%= csrf_meta_tag %>
|
3
|
+
|
4
|
+
<% if @order.cart? %>
|
5
|
+
<div id="add-line-item" data-hook>
|
6
|
+
<fieldset>
|
7
|
+
<legend><%= t(:customer_search) %></legend>
|
8
|
+
<%= label_tag :customer_search, t(:enter_at_least_five_letters) %>
|
9
|
+
<%= text_field_tag :customer_search, nil, :class => 'fullwidth title' %>
|
10
|
+
</fieldset>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<%= render 'shared/error_messages', :target => @order %>
|
15
|
+
|
16
|
+
<%= form_for @order, :url => admin_order_url(@order), :html => { :method => :put} do |f| %>
|
17
|
+
<%= f.hidden_field :number %>
|
18
|
+
<%= render :partial => 'user_form', :locals => {:f => f} %>
|
19
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<ul>
|
2
|
+
<li><b>Location Name:</b><%= @location.location_name %></li>
|
3
|
+
<li><b>Address1:</b> <%= @location.address1 %></li>
|
4
|
+
<li><b>Address2:</b> <%= @location.address2 %></li>
|
5
|
+
<li><b>City:</b> <%= @location.city %></li>
|
6
|
+
<li><b>State:</b> <%= State.find_by_id(@location.state_id).name %></li>
|
7
|
+
<li><b>Zipcode:</b> <%= @location.zipcode %></li>
|
8
|
+
<li><b>Country:</b> <%= Country.find_by_id(@location.country_id) %></li>
|
9
|
+
<li><b>Supplier:</b> <%= Supplier.find_by_id(@location.supplier).name %></li>
|
10
|
+
</ul>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<h3>Edit Location</h3>
|
2
|
+
<%= form_for [:admin, @pickup_location] do |f| %>
|
3
|
+
<ul>
|
4
|
+
<li>
|
5
|
+
<%= f.label :location_name %>:
|
6
|
+
<br />
|
7
|
+
<%= f.text_field :location_name %>
|
8
|
+
</li>
|
9
|
+
<li>
|
10
|
+
<%= f.label :address1 %>:
|
11
|
+
<br />
|
12
|
+
<%= f.text_field :address1 %>
|
13
|
+
</li>
|
14
|
+
<li>
|
15
|
+
<%= f.label :address2 %>
|
16
|
+
<br />
|
17
|
+
<%= f.text_field :address2 %>
|
18
|
+
</li>
|
19
|
+
<li>
|
20
|
+
<%= f.label :city %>
|
21
|
+
<br />
|
22
|
+
<%= f.text_field :city %>
|
23
|
+
</li>
|
24
|
+
<li>
|
25
|
+
<%= f.label :state %>
|
26
|
+
<br />
|
27
|
+
<%= f.collection_select(:state_id, Country.find_by_name("United States").states.sort, :id, :name) %>
|
28
|
+
</li>
|
29
|
+
<li>
|
30
|
+
<%= f.label :zipcode %>
|
31
|
+
<br />
|
32
|
+
<%= f.text_field :zipcode %>
|
33
|
+
</li>
|
34
|
+
</ul>
|
35
|
+
<table id="hours">
|
36
|
+
<%= f.fields_for @pickup_location.hours.new do |f| %>
|
37
|
+
<% ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"].each do |day| %>
|
38
|
+
<%= render :partial => "admin/suppliers/hours_form", :locals => { :day => day, :f => f } %>
|
39
|
+
<% end %>
|
40
|
+
<% end %>
|
41
|
+
</table>
|
42
|
+
<%= f.submit "Update" %>
|
43
|
+
<%= t('or') %> <%= link_to t("cancel"), "#", :id => "cancel_link" %>
|
44
|
+
<% end %>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<h3>New Pickup Location</h3>
|
2
|
+
<%= form_for [:admin, @pickup_location] do |f| %>
|
3
|
+
<ul>
|
4
|
+
<li>
|
5
|
+
<%= f.label :location_name %>:
|
6
|
+
<br />
|
7
|
+
<%= f.text_field :location_name %>
|
8
|
+
</li>
|
9
|
+
<li>
|
10
|
+
<%= f.label :address1 %>:
|
11
|
+
<br />
|
12
|
+
<%= f.text_field :address1 %>
|
13
|
+
</li>
|
14
|
+
<li>
|
15
|
+
<%= f.label :address2 %>
|
16
|
+
<br />
|
17
|
+
<%= f.text_field :address2 %>
|
18
|
+
</li>
|
19
|
+
<li>
|
20
|
+
<%= f.label :city %>
|
21
|
+
<br />
|
22
|
+
<%= f.text_field :city %>
|
23
|
+
</li>
|
24
|
+
<li>
|
25
|
+
<%= f.label :state %>
|
26
|
+
<br />
|
27
|
+
<%= f.collection_select(:state_id, Country.find_by_name("United States").states.sort, :id, :name) %>
|
28
|
+
</li>
|
29
|
+
<li>
|
30
|
+
<%= f.label :zipcode %>
|
31
|
+
<br />
|
32
|
+
<%= f.text_field :zipcode %>
|
33
|
+
</li>
|
34
|
+
</ul>
|
35
|
+
|
36
|
+
<table id="hours">
|
37
|
+
<%= f.fields_for @pickup_location.hours.new do |f| %>
|
38
|
+
<% ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"].each do |day| %>
|
39
|
+
<%= render :partial => "admin/suppliers/hours_form", :locals => { :day => day, :f => f } %>
|
40
|
+
<% end %>
|
41
|
+
<% end %>
|
42
|
+
</table>
|
43
|
+
|
44
|
+
<%= f.submit "Save" %>
|
45
|
+
<%= t('or') %> <%= link_to t("cancel"), "#", :id => "cancel_link" %>
|
46
|
+
|
47
|
+
<% end %>
|
48
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render "pickup_location" %>
|
File without changes
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<h1>
|
2
|
+
<%= t("pickups") %>
|
3
|
+
</h1>
|
4
|
+
|
5
|
+
<% @suppliers.each do |supplier| %>
|
6
|
+
<table class="admin-report" width="545">
|
7
|
+
<thead>
|
8
|
+
<tr>
|
9
|
+
<th width="300px">
|
10
|
+
<%= supplier.title %>
|
11
|
+
</th>
|
12
|
+
<th width="600px">
|
13
|
+
<%= t("pickup_address") %>
|
14
|
+
</th>
|
15
|
+
<th width="300px">
|
16
|
+
<%= t("edit") %>
|
17
|
+
</th>
|
18
|
+
<th>
|
19
|
+
<%= t("delete") %>
|
20
|
+
</th>
|
21
|
+
</tr>
|
22
|
+
</thead>
|
23
|
+
<tbody>
|
24
|
+
<% supplier.pickups.each do |pickup| %>
|
25
|
+
<tr class="<%= cycle('even', 'odd') %>">
|
26
|
+
<td>
|
27
|
+
<%= link_to pickup.pickup_location.location_name, admin_pickup_location_path(pickup) %>
|
28
|
+
</td>
|
29
|
+
<td>
|
30
|
+
<%= pickup.pickup_location.address1 %>, <%= pickup.pickup_location.city %>, <%= State.find_by_id(pickup.pickup_location.state_id) %>
|
31
|
+
</td>
|
32
|
+
<td>
|
33
|
+
<%= link_to "edit", edit_admin_pickup_location_path(pickup.pickup_location) %>
|
34
|
+
</td>
|
35
|
+
<td>
|
36
|
+
<%= button_to "delete", admin_pickup_path(pickup), :method => :delete %>
|
37
|
+
</td>
|
38
|
+
</tr>
|
39
|
+
<% end %>
|
40
|
+
</tbody>
|
41
|
+
</table>
|
42
|
+
<% end %>
|
43
|
+
|
44
|
+
<%= link_to t("new_pickup"), new_admin_pickup_path %>
|