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.
Files changed (147) hide show
  1. data/README +46 -0
  2. data/Rakefile +137 -0
  3. data/app/controllers/admin/pickup_locations_controller.rb +52 -0
  4. data/app/controllers/admin/pickups_controller.rb +84 -0
  5. data/app/controllers/admin/shipping_options_controller.rb +32 -0
  6. data/app/controllers/admin/supplier_taxons_controller.rb +65 -0
  7. data/app/controllers/admin/suppliers_controller.rb +203 -0
  8. data/app/controllers/admin/vendor_overview_controller.rb +18 -0
  9. data/app/controllers/dash/base_controller.rb +10 -0
  10. data/app/controllers/dash/overview_controller.rb +6 -0
  11. data/app/controllers/dash/pickup_locations_controller.rb +27 -0
  12. data/app/controllers/dash/pickups_controller.rb +40 -0
  13. data/app/controllers/dash/products_controller.rb +15 -0
  14. data/app/controllers/messages_controller.rb +17 -0
  15. data/app/controllers/suppliers_controller.rb +19 -0
  16. data/app/controllers/user_sessions_decorator.rb +39 -0
  17. data/app/helpers/admin/suppliers_helper.rb +21 -0
  18. data/app/helpers/cities_helper.rb +2 -0
  19. data/app/helpers/dragonfly_helper.rb +16 -0
  20. data/app/helpers/messages_helper.rb +2 -0
  21. data/app/helpers/suppliers_helper.rb +16 -0
  22. data/app/mailers/supplier_mailer.rb +11 -0
  23. data/app/models/ability_decorator.rb +19 -0
  24. data/app/models/delivery.rb +6 -0
  25. data/app/models/hour.rb +4 -0
  26. data/app/models/item.rb +5 -0
  27. data/app/models/message.rb +3 -0
  28. data/app/models/pickup.rb +10 -0
  29. data/app/models/pickup_date.rb +3 -0
  30. data/app/models/pickup_location.rb +7 -0
  31. data/app/models/supplier.rb +33 -0
  32. data/app/models/supplier_invoice.rb +5 -0
  33. data/app/views/admin/orders/index.html.erb +107 -0
  34. data/app/views/admin/orders/show.html.erb +35 -0
  35. data/app/views/admin/orders/user.html.erb +19 -0
  36. data/app/views/admin/pickup_locations/_pickup_location.html.erb +10 -0
  37. data/app/views/admin/pickup_locations/edit.html.erb +44 -0
  38. data/app/views/admin/pickup_locations/new.html.erb +48 -0
  39. data/app/views/admin/pickup_locations/show.html.erb +1 -0
  40. data/app/views/admin/pickups/_pickup.erb +0 -0
  41. data/app/views/admin/pickups/index.html.erb +44 -0
  42. data/app/views/admin/pickups/new.html.erb +33 -0
  43. data/app/views/admin/pickups/show.html.erb +42 -0
  44. data/app/views/admin/products/_suppliers_form.html.erb +5 -0
  45. data/app/views/admin/shared/_order_tabs_decide.html.erb +5 -0
  46. data/app/views/admin/shared/_vendor_order_tabs.html.erb +39 -0
  47. data/app/views/admin/shipping_options/edit.html.erb +38 -0
  48. data/app/views/admin/supplier_taxons/_form.html.erb +23 -0
  49. data/app/views/admin/supplier_taxons/_taxon_table.html.erb +23 -0
  50. data/app/views/admin/supplier_taxons/available.js.erb +33 -0
  51. data/app/views/admin/supplier_taxons/edit.html.erb +11 -0
  52. data/app/views/admin/supplier_taxons/remove.html.erb +1 -0
  53. data/app/views/admin/supplier_taxons/select.js.erb +2 -0
  54. data/app/views/admin/supplier_taxons/selected.html.erb +51 -0
  55. data/app/views/admin/suppliers/_edit_form.html.erb +75 -0
  56. data/app/views/admin/suppliers/_edit_hours_form.html.erb +18 -0
  57. data/app/views/admin/suppliers/_form.html.erb +72 -0
  58. data/app/views/admin/suppliers/_hours_form.html.erb +11 -0
  59. data/app/views/admin/suppliers/_image_form.html.erb +40 -0
  60. data/app/views/admin/suppliers/_supplier.html.erb +37 -0
  61. data/app/views/admin/suppliers/_supplier_tabs.html.erb +18 -0
  62. data/app/views/admin/suppliers/_suppliers_table.html.erb +25 -0
  63. data/app/views/admin/suppliers/_upload_image.html.erb +14 -0
  64. data/app/views/admin/suppliers/available.js.erb +34 -0
  65. data/app/views/admin/suppliers/edit.html.erb +20 -0
  66. data/app/views/admin/suppliers/index.html.erb +102 -0
  67. data/app/views/admin/suppliers/line_items.html.erb +20 -0
  68. data/app/views/admin/suppliers/new.html.erb +22 -0
  69. data/app/views/admin/suppliers/remove.html.erb +1 -0
  70. data/app/views/admin/suppliers/select.html.erb +1 -0
  71. data/app/views/admin/suppliers/selected.html.erb +40 -0
  72. data/app/views/admin/suppliers/show.html.erb +2 -0
  73. data/app/views/admin/users/_form.html.erb +40 -0
  74. data/app/views/admin/vendor_overview/index.html.erb +1 -0
  75. data/app/views/checkout/_delivery.html.erb +5 -0
  76. data/app/views/dash/overview/index.html.erb +58 -0
  77. data/app/views/dash/pickup_locations/_pickup_location.html.erb +3 -0
  78. data/app/views/dash/pickup_locations/new.html.erb +47 -0
  79. data/app/views/dash/pickups/_pickup.erb +3 -0
  80. data/app/views/dash/pickups/new.html.erb +24 -0
  81. data/app/views/dash/products/new.html.erb +38 -0
  82. data/app/views/layouts/admin.html.erb +81 -0
  83. data/app/views/messages/_message_form.html.erb +17 -0
  84. data/app/views/messages/create.html.erb +2 -0
  85. data/app/views/messages/destroy.html.erb +2 -0
  86. data/app/views/messages/new.html.erb +2 -0
  87. data/app/views/shared/_deliveries.html.erb +113 -0
  88. data/app/views/shared/_hours.html.erb +21 -0
  89. data/app/views/shared/_products_vendor.html.erb +49 -0
  90. data/app/views/shared/_supplier_invoices.html.erb +67 -0
  91. data/app/views/supplier_mailer/invoice_email.html.erb +72 -0
  92. data/app/views/suppliers/_supplier.html.erb +7 -0
  93. data/app/views/suppliers/_supplier_list.erb +20 -0
  94. data/app/views/suppliers/index.html.erb +17 -0
  95. data/app/views/suppliers/show.html.erb +106 -0
  96. data/app/views/suppliers/supplier_list.erb +14 -0
  97. data/config/initializers/dragonfly.rb +8 -0
  98. data/config/initializers/supplier_invoice_mailer.rb +10 -0
  99. data/config/locales/en-US.yml +13 -0
  100. data/config/routes.rb +48 -0
  101. data/db/migrate/20091209201716_supplier_setup.rb +36 -0
  102. data/db/migrate/20110922213437_create_messages.rb +18 -0
  103. data/db/migrate/20110928203155_create_hours.rb +21 -0
  104. data/db/migrate/20111006185052_create_pickups.rb +17 -0
  105. data/db/migrate/20111010191125_add_location_to_addresses.rb +9 -0
  106. data/db/migrate/20111010214313_create_pickup_dates.rb +14 -0
  107. data/db/migrate/20111011180211_add_supplier_id_to_user.rb +9 -0
  108. data/db/migrate/20111012211422_create_pickup_locations.rb +21 -0
  109. data/db/migrate/20111013155257_create_supplier_invoices.rb +16 -0
  110. data/db/migrate/20111013161225_create_items.rb +18 -0
  111. data/db/migrate/20111018133543_add_attributes_to_products.rb +17 -0
  112. data/db/migrate/20111028190454_add_attributes_to_assets.rb +11 -0
  113. data/db/migrate/20111029230805_create_suppliers_taxons.rb +16 -0
  114. data/db/migrate/20111101165933_create_deliveries.rb +17 -0
  115. data/db/migrate/20111108213108_create_shipping_methods_suppliers.rb +16 -0
  116. data/db/seeds.rb +14 -0
  117. data/lib/spree_suppliers.rb +411 -0
  118. data/lib/spree_suppliers_hooks.rb +40 -0
  119. data/lib/tasks/spree_suppliers.rake +27 -0
  120. data/public/javascripts/jquery-ui.js +312 -0
  121. data/public/javascripts/jquery-ui.multidatespicker.js +398 -0
  122. data/public/javascripts/jquery.ui.datepicker.js +1791 -0
  123. data/public/stylesheets/suppliers.css +676 -0
  124. data/spec/controllers/cities_controller_spec.rb +157 -0
  125. data/spec/controllers/shipping_options_controller_spec.rb +12 -0
  126. data/spec/helpers/cities_helper_spec.rb +15 -0
  127. data/spec/models/city_spec.rb +5 -0
  128. data/spec/models/comment_spec.rb +64 -0
  129. data/spec/models/item_spec.rb +5 -0
  130. data/spec/models/message_spec.rb +5 -0
  131. data/spec/models/pickup_date_spec.rb +5 -0
  132. data/spec/models/pickup_location_spec.rb +5 -0
  133. data/spec/models/pickup_spec.rb +5 -0
  134. data/spec/models/rating_spec.rb +24 -0
  135. data/spec/models/supplier_invoice_spec.rb +5 -0
  136. data/spec/models/supplier_spec.rb +11 -0
  137. data/spec/requests/cities_spec.rb +11 -0
  138. data/spec/routing/cities_routing_spec.rb +35 -0
  139. data/spec/spec.opts +6 -0
  140. data/spec/spec_helper.rb +37 -0
  141. data/spec/views/cities/edit.html.erb_spec.rb +22 -0
  142. data/spec/views/cities/index.html.erb_spec.rb +28 -0
  143. data/spec/views/cities/new.html.erb_spec.rb +22 -0
  144. data/spec/views/cities/show.html.erb_spec.rb +21 -0
  145. data/spec/views/shipping_options/edit.html.erb_spec.rb +5 -0
  146. data/spree_suppliers.gemspec +24 -0
  147. 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,2 @@
1
+ module CitiesHelper
2
+ 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,2 @@
1
+ module MessagesHelper
2
+ 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
@@ -0,0 +1,6 @@
1
+ class Delivery < ActiveRecord::Base
2
+ belongs_to :order
3
+ belongs_to :supplier
4
+ has_one :pickup
5
+ belongs_to :shipping_method
6
+ end
@@ -0,0 +1,4 @@
1
+ class Hour < ActiveRecord::Base
2
+ belongs_to :supplier
3
+ belongs_to :pickup_location
4
+ end
@@ -0,0 +1,5 @@
1
+ class Item < ActiveRecord::Base
2
+ belongs_to :supplier_invoice
3
+ belongs_to :product
4
+ belongs_to :line_item
5
+ end
@@ -0,0 +1,3 @@
1
+ class Message < ActiveRecord::Base
2
+ belongs_to :supplier
3
+ end
@@ -0,0 +1,10 @@
1
+ class Pickup < ActiveRecord::Base
2
+ belongs_to :pickup_location
3
+ has_many :pickup_dates
4
+ belongs_to :supplier
5
+ belongs_to :delivery
6
+
7
+ def location_name
8
+ self.pickup_location.location_name
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ class PickupDate < ActiveRecord::Base
2
+ belongs_to :pickup
3
+ end
@@ -0,0 +1,7 @@
1
+ class PickupLocation < ActiveRecord::Base
2
+ has_many :pickups
3
+ belongs_to :supplier
4
+ scope :locate, :conditions => { :featured => true}
5
+ has_many :hours
6
+ accepts_nested_attributes_for :hours
7
+ end
@@ -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,5 @@
1
+ class SupplierInvoice < ActiveRecord::Base
2
+ has_many :items
3
+ belongs_to :order
4
+ belongs_to :supplier
5
+ 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 => "&#171; #{t('previous')}", :next_label => "#{t('next')} &#187;") %>
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 %>