e9_vendors 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.markdown +6 -0
- data/Rakefile +1 -0
- data/app/controllers/e9_vendors/settings_controller.rb +11 -0
- data/app/controllers/e9_vendors/vendor_categories_controller.rb +36 -0
- data/app/controllers/e9_vendors/vendor_members_controller.rb +61 -0
- data/app/controllers/e9_vendors/vendor_proxies_controller.rb +38 -0
- data/app/controllers/e9_vendors/vendors_controller.rb +22 -0
- data/app/decorators/vendor_category_decorator.rb +10 -0
- data/app/decorators/vendor_member_decorator.rb +55 -0
- data/app/decorators/vendor_proxy_decorator.rb +74 -0
- data/app/decorators/vendors_decorator.rb +27 -0
- data/app/models/vendor.rb +23 -0
- data/app/models/vendor_category.rb +17 -0
- data/app/models/vendor_member.rb +21 -0
- data/app/models/vendor_proxy.rb +39 -0
- data/app/observers/vendor_member_observer.rb +17 -0
- data/app/observers/vendor_observer.rb +18 -0
- data/app/uploaders/logo_uploader.rb +14 -0
- data/app/views/e9_vendors/settings/_form.html.haml +18 -0
- data/app/views/e9_vendors/settings/show.html.haml +2 -0
- data/app/views/e9_vendors/vendor_categories/_form.html.haml +7 -0
- data/app/views/e9_vendors/vendor_categories/_table.html.haml +21 -0
- data/app/views/e9_vendors/vendor_categories/destroy.js.erb +3 -0
- data/app/views/e9_vendors/vendor_categories/edit.html.haml +2 -0
- data/app/views/e9_vendors/vendor_categories/index.html.haml +4 -0
- data/app/views/e9_vendors/vendor_categories/index.js.erb +1 -0
- data/app/views/e9_vendors/vendor_categories/new.html.haml +2 -0
- data/app/views/e9_vendors/vendor_members/_form.html.haml +49 -0
- data/app/views/e9_vendors/vendor_members/_table.html.haml +21 -0
- data/app/views/e9_vendors/vendor_members/_vendors.html.haml +24 -0
- data/app/views/e9_vendors/vendor_members/destroy.js.erb +3 -0
- data/app/views/e9_vendors/vendor_members/edit.html.haml +2 -0
- data/app/views/e9_vendors/vendor_members/index.html.haml +4 -0
- data/app/views/e9_vendors/vendor_members/index.js.erb +1 -0
- data/app/views/e9_vendors/vendor_members/new.html.haml +2 -0
- data/app/views/e9_vendors/vendor_members/widget_code.html.haml +3 -0
- data/app/views/e9_vendors/vendor_proxies/_form.html.haml +28 -0
- data/app/views/e9_vendors/vendor_proxies/_table.html.haml +16 -0
- data/app/views/e9_vendors/vendor_proxies/_table_row.html.haml +11 -0
- data/app/views/e9_vendors/vendor_proxies/destroy.js.erb +3 -0
- data/app/views/e9_vendors/vendor_proxies/edit.html.haml +2 -0
- data/app/views/e9_vendors/vendor_proxies/index.html.haml +1 -0
- data/app/views/e9_vendors/vendor_proxies/index.js.erb +1 -0
- data/app/views/e9_vendors/vendor_proxies/new.html.haml +2 -0
- data/app/views/e9_vendors/vendor_proxies/update.js.erb +7 -0
- data/app/views/e9_vendors/vendors/_form.html.haml +91 -0
- data/app/views/e9_vendors/vendors/_table.html.haml +20 -0
- data/app/views/e9_vendors/vendors/destroy.js.erb +3 -0
- data/app/views/e9_vendors/vendors/edit.html.haml +2 -0
- data/app/views/e9_vendors/vendors/index.html.haml +4 -0
- data/app/views/e9_vendors/vendors/index.js.erb +1 -0
- data/app/views/e9_vendors/vendors/new.html.haml +2 -0
- data/config/locales/vendorboon.en.yml +61 -0
- data/config/routes.rb +38 -0
- data/e9_vendors.gemspec +20 -0
- data/lib/e9_vendors.rb +24 -0
- data/lib/e9_vendors/controller.rb +18 -0
- data/lib/e9_vendors/model.rb +13 -0
- data/lib/e9_vendors/version.rb +3 -0
- data/lib/generators/e9_vendors/install_generator.rb +31 -0
- data/lib/generators/e9_vendors/templates/javascript.js +16 -0
- data/lib/generators/e9_vendors/templates/migration.rb +84 -0
- data/lib/generators/e9_vendors/templates/stylesheets/vb-widget-ie.scss +21 -0
- data/lib/generators/e9_vendors/templates/stylesheets/vb-widget.scss +151 -0
- metadata +129 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
class VendorMemberObserver < ActiveRecord::Observer
|
2
|
+
observe :vendor_member
|
3
|
+
|
4
|
+
#
|
5
|
+
# Assign hash_id before save (for gets)
|
6
|
+
#
|
7
|
+
def before_save(record)
|
8
|
+
record.md5_hash = Digest::MD5.hexdigest("#{record.name}/#{DateTime.now}") if record.md5_hash.blank?
|
9
|
+
end
|
10
|
+
|
11
|
+
#
|
12
|
+
# build and assign a new set of vendor proxies after creation
|
13
|
+
#
|
14
|
+
def after_create(record)
|
15
|
+
record.vendor_proxies = Vendor.all_proxies
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class VendorObserver < ActiveRecord::Observer
|
2
|
+
observe :vendor
|
3
|
+
|
4
|
+
#
|
5
|
+
# On create, new VendorDetail joins are created for each existing member
|
6
|
+
#
|
7
|
+
def after_create(record)
|
8
|
+
VendorMember.add_vendor_proxy(record.vendor_proxies)
|
9
|
+
end
|
10
|
+
|
11
|
+
#
|
12
|
+
# On updates, all members are touched, ensuring that widget JSON requests
|
13
|
+
# for the members are pulling the most recent information
|
14
|
+
#
|
15
|
+
def after_update(record)
|
16
|
+
VendorMember.touch_all
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class LogoUploader < BaseUploader
|
2
|
+
self.specified_dimensions = proc { Array.new(2, E9::Config[:e9_vendors_logo_size]) }
|
3
|
+
|
4
|
+
process :convert => :png
|
5
|
+
process :resize_to_fill => specified_dimensions if specified_dimensions?
|
6
|
+
|
7
|
+
def filename
|
8
|
+
"#{model.class.to_s.underscore}_logo.png" if present?
|
9
|
+
end
|
10
|
+
|
11
|
+
def default_url
|
12
|
+
File.join(host, DEFAULTS_BASE_PATH, "upload_image_thumb.png")
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
= form_for resource, :url => e9_vendors_settings_path do |f|
|
2
|
+
.errors= resource_error_messages!
|
3
|
+
|
4
|
+
%fieldset#widget_settings
|
5
|
+
%legend
|
6
|
+
= help_label(:widget_settings, :e9_vendors_widget_settings, :key => :e9_vendors_widget_help, :header => 'Variable Help')
|
7
|
+
.field
|
8
|
+
= f.label :e9_vendors_widget_title, nil, :class => :req
|
9
|
+
= f.text_field :e9_vendors_widget_title
|
10
|
+
.field
|
11
|
+
= f.label :e9_vendors_widget_form_title, nil, :class => :req
|
12
|
+
= f.text_field :e9_vendors_widget_form_title
|
13
|
+
- if e9_user?
|
14
|
+
.field
|
15
|
+
= f.label :e9_vendors_logo_size, nil, :class => :req
|
16
|
+
= f.text_field :e9_vendors_logo_size
|
17
|
+
.actions
|
18
|
+
= f.submit
|
@@ -0,0 +1,21 @@
|
|
1
|
+
= form_tag polymorphic_path([:update_order, resource_class]) do
|
2
|
+
%table.records.sortable
|
3
|
+
%thead
|
4
|
+
%tr
|
5
|
+
%th= resource_humanize(:position)
|
6
|
+
%th= resource_humanize(:name)
|
7
|
+
%th= e9_t(:actions)
|
8
|
+
%tbody
|
9
|
+
- if collection.empty?
|
10
|
+
%tr
|
11
|
+
%td{:colspan => 3}= e9_t(:no_records_text)
|
12
|
+
- else
|
13
|
+
- collection.each do |record|
|
14
|
+
%tr{:id => "ids_#{record.id}", :class => cycle('odd', 'even')}
|
15
|
+
%td
|
16
|
+
.handle +++
|
17
|
+
%td.txt.wide
|
18
|
+
= record.name
|
19
|
+
%td.links
|
20
|
+
= link_to_edit_resource(record)
|
21
|
+
= link_to_destroy_resource(record)
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#records_table").html("<%= escape_javascript(render('table', :collection => collection)) %>");
|
@@ -0,0 +1,49 @@
|
|
1
|
+
= form_for resource do |f|
|
2
|
+
.errors= resource_error_messages!
|
3
|
+
.field
|
4
|
+
= f.label :name, nil, :class => :req
|
5
|
+
= f.text_field :name
|
6
|
+
.field
|
7
|
+
= upload_mount_field(resource.logo, :reset_path => true, :required => true)
|
8
|
+
.field
|
9
|
+
= f.label :nickname
|
10
|
+
= f.text_field :nickname
|
11
|
+
.field
|
12
|
+
= f.label :address_1
|
13
|
+
= f.text_field :address_1
|
14
|
+
.field
|
15
|
+
= f.label :address_2
|
16
|
+
= f.text_field :address_2
|
17
|
+
.field
|
18
|
+
= f.label :city
|
19
|
+
= f.text_field :city
|
20
|
+
.field
|
21
|
+
= f.label :state
|
22
|
+
= f.state_select :state
|
23
|
+
.field
|
24
|
+
= f.label :zipcode
|
25
|
+
= f.text_field :zipcode
|
26
|
+
.field
|
27
|
+
= f.label :country
|
28
|
+
= f.select :country, [["United States", "US"]]
|
29
|
+
.field
|
30
|
+
= f.label :website
|
31
|
+
= f.text_area :website
|
32
|
+
.field
|
33
|
+
= f.label :contact_email, nil, :class => :req
|
34
|
+
= f.text_field :contact_email
|
35
|
+
.field
|
36
|
+
= f.label :contact_full_name
|
37
|
+
= f.text_field :contact_full_name
|
38
|
+
.field
|
39
|
+
= f.label :contact_title
|
40
|
+
= f.text_field :contact_title
|
41
|
+
.field
|
42
|
+
= f.label :contact_phone
|
43
|
+
= f.text_field :contact_phone
|
44
|
+
.field
|
45
|
+
= f.label :admin_notes
|
46
|
+
= f.text_area :admin_notes
|
47
|
+
|
48
|
+
.actions
|
49
|
+
= f.submit
|
@@ -0,0 +1,21 @@
|
|
1
|
+
%table.records
|
2
|
+
%thead
|
3
|
+
%tr
|
4
|
+
%th= resource_humanize(:name)
|
5
|
+
%th= e9_t(:actions)
|
6
|
+
%tbody
|
7
|
+
- if collection.empty?
|
8
|
+
%tr
|
9
|
+
%td{:colspan => 2}= e9_t(:no_records_text)
|
10
|
+
- else
|
11
|
+
- collection.each do |record|
|
12
|
+
%tr{:id => "ids_#{record.id}", :class => cycle('odd', 'even')}
|
13
|
+
%td.txt.wide
|
14
|
+
= record.name
|
15
|
+
%td.links
|
16
|
+
= link_to e9_t(:manage), polymorphic_path([record, VendorProxy])
|
17
|
+
= link_to e9_t(:get_widget_code), polymorphic_path([:widget_code, record])
|
18
|
+
.tooltip
|
19
|
+
%pre #{record.widget_code}
|
20
|
+
= link_to_edit_resource(record)
|
21
|
+
= link_to_destroy_resource(record)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
%table.records
|
2
|
+
%thead
|
3
|
+
%tr
|
4
|
+
%th= resource_humanize(:select)
|
5
|
+
%th= resource_humanize(:vendor)
|
6
|
+
%th= resource_humanize(:discount_code)
|
7
|
+
%th= resource_humanize(:discount_percentage)
|
8
|
+
%th= resource_humanize(:sales_contact)
|
9
|
+
%th= e9_t(:actions)
|
10
|
+
%tbody
|
11
|
+
- if collection.empty?
|
12
|
+
%tr
|
13
|
+
%td{:colspan => 3}= e9_t(:no_records_text)
|
14
|
+
- else
|
15
|
+
- collection.each do |record|
|
16
|
+
%tr{:id => "ids_#{record.id}", :class => cycle('odd', 'even')}
|
17
|
+
%td= check_box record, :display_on_widget
|
18
|
+
%td= record.vendor.name
|
19
|
+
%td= record.discount_code
|
20
|
+
%td= record.discount_percentage
|
21
|
+
%td= record.sales_contact
|
22
|
+
%td.links
|
23
|
+
= vendor_landing_page_link(record)
|
24
|
+
= edit_admin_resource_link(record)
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#records_table").html("<%= escape_javascript(render('table', :collection => collection)) %>");
|
@@ -0,0 +1,28 @@
|
|
1
|
+
= form_for resource, :url => vendor_member_vendor_proxy_path(resource.vendor_member, resource), :remote => request.xhr? do |f|
|
2
|
+
.errors= resource_error_messages!
|
3
|
+
.field
|
4
|
+
= f.label :discount_code, nil, :class => :req
|
5
|
+
= f.text_field :discount_code
|
6
|
+
.instructions
|
7
|
+
= e9_t(:vendor_defaults_instructions)
|
8
|
+
.field
|
9
|
+
= f.label :discount_percentage, resource.label_with_default(:discount_percentage)
|
10
|
+
= f.text_field :discount_percentage, :value => resource.send(:read_attribute, :discount_percentage)
|
11
|
+
.field
|
12
|
+
= f.label :landing_page, resource.label_with_default(:landing_page)
|
13
|
+
= f.text_area :landing_page, :value => (resource.send(:read_attribute, :landing_page) || '')
|
14
|
+
.field
|
15
|
+
= f.label :sales_full_name, resource.label_with_default(:sales_full_name)
|
16
|
+
= f.text_field :sales_full_name, :value => resource.send(:read_attribute, :sales_full_name)
|
17
|
+
.field
|
18
|
+
= f.label :sales_title, resource.label_with_default(:sales_title)
|
19
|
+
= f.text_field :sales_title, :value => resource.send(:read_attribute, :sales_title)
|
20
|
+
.field
|
21
|
+
= f.label :sales_phone, resource.label_with_default(:sales_phone)
|
22
|
+
= f.text_field :sales_phone, :value => resource.send(:read_attribute, :sales_phone)
|
23
|
+
.field
|
24
|
+
= f.label :sales_email, resource.label_with_default(:sales_email)
|
25
|
+
= f.text_field :sales_email, :value => resource.send(:read_attribute, :sales_email)
|
26
|
+
|
27
|
+
.actions
|
28
|
+
= f.submit
|
@@ -0,0 +1,16 @@
|
|
1
|
+
%table.records
|
2
|
+
%thead
|
3
|
+
%tr
|
4
|
+
%th= resource_humanize(:select)
|
5
|
+
%th= resource_humanize(:vendor)
|
6
|
+
%th= resource_humanize(:discount_code)
|
7
|
+
%th= resource_humanize(:discount_percentage)
|
8
|
+
%th= resource_humanize(:sales_info)
|
9
|
+
%th= e9_t(:actions)
|
10
|
+
%tbody
|
11
|
+
- if collection.empty?
|
12
|
+
%tr
|
13
|
+
%td{:colspan => 6}= e9_t(:no_records_text)
|
14
|
+
- else
|
15
|
+
- collection.each do |record|
|
16
|
+
= render 'table_row', :record => record
|
@@ -0,0 +1,11 @@
|
|
1
|
+
%tr{:id => "ids_#{record.id}"}
|
2
|
+
%td
|
3
|
+
= form_for record, :url => vendor_member_vendor_proxy_path(record.vendor_member, record) do |f|
|
4
|
+
= f.check_box :display_on_widget, :class => 'vendor-proxy-widget-display'
|
5
|
+
%td= record.vendor_name
|
6
|
+
%td= record.discount_code
|
7
|
+
%td= record.discount_percentage
|
8
|
+
%td= record.sales_info_array.join('<br />').html_safe
|
9
|
+
%td.links
|
10
|
+
= link_to e9_t(:view_landing_page), record.landing_page_url, :rel => 'external', :class => 'landing-page'
|
11
|
+
= link_to e9_t(:edit), edit_vendor_member_vendor_proxy_path(record.vendor_member, record)
|
@@ -0,0 +1 @@
|
|
1
|
+
= render 'shared/admin/index', :collection => collection
|
@@ -0,0 +1 @@
|
|
1
|
+
$("#records_table").html("<%= escape_javascript(render('table', :collection => collection)) %>");
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<% if resource.errors.any? %>
|
2
|
+
$('form .errors').html("<%= escape_javascript(resource_error_messages!) %>");
|
3
|
+
$.fn.colorbox.resize();
|
4
|
+
<% else %>
|
5
|
+
$('#ids_<%= resource.id %>').replaceWith("<%= escape_javascript(render('table_row', :record => resource)) %>");
|
6
|
+
$.fn.colorbox.close();
|
7
|
+
<% end %>
|
@@ -0,0 +1,91 @@
|
|
1
|
+
= form_for resource do |f|
|
2
|
+
= resource_error_messages!
|
3
|
+
.field
|
4
|
+
= f.label :name, nil, :class => :req
|
5
|
+
= f.text_field :name
|
6
|
+
%fieldset.checkbox
|
7
|
+
%legend
|
8
|
+
= f.label :vendor_category_id, resource_class.human_attribute_name(:vendor_category), :class => :req
|
9
|
+
%ul
|
10
|
+
- VendorCategory.order(:name).each do |vc|
|
11
|
+
%li.checkbox
|
12
|
+
= check_box_tag 'vendor[vendor_category_ids][]', vc.id, resource.vendor_category_ids.member?(vc.id), :id => "vendor_category_#{vc.id}"
|
13
|
+
= label_tag "vendor_category_#{vc.id}", vc.name
|
14
|
+
.field
|
15
|
+
= upload_mount_field(resource.logo, :reset_path => true, :required => true)
|
16
|
+
.field
|
17
|
+
= f.label :nickname
|
18
|
+
= f.text_field :nickname
|
19
|
+
.field
|
20
|
+
= f.label :address_1
|
21
|
+
= f.text_field :address_1
|
22
|
+
.field
|
23
|
+
= f.label :address_2
|
24
|
+
= f.text_field :address_2
|
25
|
+
.field
|
26
|
+
= f.label :city
|
27
|
+
= f.text_field :city
|
28
|
+
.field
|
29
|
+
= f.label :state
|
30
|
+
= f.state_select :state
|
31
|
+
.field
|
32
|
+
= f.label :zipcode
|
33
|
+
= f.text_field :zipcode
|
34
|
+
.field
|
35
|
+
= f.label :country
|
36
|
+
= f.select :country, [["United States", "US"]]
|
37
|
+
.field
|
38
|
+
= f.label :website
|
39
|
+
= f.text_area :website
|
40
|
+
.field
|
41
|
+
= f.label :contact_email, nil, :class => :req
|
42
|
+
= f.text_field :contact_email
|
43
|
+
.field
|
44
|
+
= f.label :contact_full_name
|
45
|
+
= f.text_field :contact_full_name
|
46
|
+
.field
|
47
|
+
= f.label :contact_title
|
48
|
+
= f.text_field :contact_title
|
49
|
+
.field
|
50
|
+
= f.label :contact_phone
|
51
|
+
= f.text_field :contact_phone
|
52
|
+
|
53
|
+
%fieldset
|
54
|
+
%legend= e9_t(:widget_settings_legend)
|
55
|
+
.field.checkbox
|
56
|
+
= f.label :display_on_widget_contact_form
|
57
|
+
= f.check_box :display_on_widget_contact_form
|
58
|
+
.field
|
59
|
+
= f.label :sales_email, nil, :class => :req
|
60
|
+
= f.text_field :sales_email
|
61
|
+
.field
|
62
|
+
= f.label :sales_full_name
|
63
|
+
= f.text_field :sales_full_name
|
64
|
+
.field
|
65
|
+
= f.label :sales_title
|
66
|
+
= f.text_field :sales_title
|
67
|
+
.field
|
68
|
+
= f.label :sales_phone
|
69
|
+
= f.text_field :sales_phone
|
70
|
+
.field
|
71
|
+
= help_label(f, :short_description, :key => :interpolation_instructions, :header => 'Variable Help')
|
72
|
+
= f.text_area :short_description
|
73
|
+
.field
|
74
|
+
= help_label(f, :long_description, :key => :interpolation_instructions, :header => 'Variable Help')
|
75
|
+
= f.text_area :long_description
|
76
|
+
.field
|
77
|
+
= f.label :discount_percentage, nil, :class => :req
|
78
|
+
#{f.text_field :discount_percentage}%
|
79
|
+
.field
|
80
|
+
= f.label :member_compensation, nil, :class => :req
|
81
|
+
#{f.text_field :member_compensation}%
|
82
|
+
.field
|
83
|
+
= f.label :landing_page, nil, :class => :req
|
84
|
+
= f.text_area :landing_page
|
85
|
+
|
86
|
+
.field
|
87
|
+
= f.label :admin_notes
|
88
|
+
= f.text_area :admin_notes
|
89
|
+
|
90
|
+
.actions
|
91
|
+
= f.submit
|