e9_vendors 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/README.markdown +6 -0
  4. data/Rakefile +1 -0
  5. data/app/controllers/e9_vendors/settings_controller.rb +11 -0
  6. data/app/controllers/e9_vendors/vendor_categories_controller.rb +36 -0
  7. data/app/controllers/e9_vendors/vendor_members_controller.rb +61 -0
  8. data/app/controllers/e9_vendors/vendor_proxies_controller.rb +38 -0
  9. data/app/controllers/e9_vendors/vendors_controller.rb +22 -0
  10. data/app/decorators/vendor_category_decorator.rb +10 -0
  11. data/app/decorators/vendor_member_decorator.rb +55 -0
  12. data/app/decorators/vendor_proxy_decorator.rb +74 -0
  13. data/app/decorators/vendors_decorator.rb +27 -0
  14. data/app/models/vendor.rb +23 -0
  15. data/app/models/vendor_category.rb +17 -0
  16. data/app/models/vendor_member.rb +21 -0
  17. data/app/models/vendor_proxy.rb +39 -0
  18. data/app/observers/vendor_member_observer.rb +17 -0
  19. data/app/observers/vendor_observer.rb +18 -0
  20. data/app/uploaders/logo_uploader.rb +14 -0
  21. data/app/views/e9_vendors/settings/_form.html.haml +18 -0
  22. data/app/views/e9_vendors/settings/show.html.haml +2 -0
  23. data/app/views/e9_vendors/vendor_categories/_form.html.haml +7 -0
  24. data/app/views/e9_vendors/vendor_categories/_table.html.haml +21 -0
  25. data/app/views/e9_vendors/vendor_categories/destroy.js.erb +3 -0
  26. data/app/views/e9_vendors/vendor_categories/edit.html.haml +2 -0
  27. data/app/views/e9_vendors/vendor_categories/index.html.haml +4 -0
  28. data/app/views/e9_vendors/vendor_categories/index.js.erb +1 -0
  29. data/app/views/e9_vendors/vendor_categories/new.html.haml +2 -0
  30. data/app/views/e9_vendors/vendor_members/_form.html.haml +49 -0
  31. data/app/views/e9_vendors/vendor_members/_table.html.haml +21 -0
  32. data/app/views/e9_vendors/vendor_members/_vendors.html.haml +24 -0
  33. data/app/views/e9_vendors/vendor_members/destroy.js.erb +3 -0
  34. data/app/views/e9_vendors/vendor_members/edit.html.haml +2 -0
  35. data/app/views/e9_vendors/vendor_members/index.html.haml +4 -0
  36. data/app/views/e9_vendors/vendor_members/index.js.erb +1 -0
  37. data/app/views/e9_vendors/vendor_members/new.html.haml +2 -0
  38. data/app/views/e9_vendors/vendor_members/widget_code.html.haml +3 -0
  39. data/app/views/e9_vendors/vendor_proxies/_form.html.haml +28 -0
  40. data/app/views/e9_vendors/vendor_proxies/_table.html.haml +16 -0
  41. data/app/views/e9_vendors/vendor_proxies/_table_row.html.haml +11 -0
  42. data/app/views/e9_vendors/vendor_proxies/destroy.js.erb +3 -0
  43. data/app/views/e9_vendors/vendor_proxies/edit.html.haml +2 -0
  44. data/app/views/e9_vendors/vendor_proxies/index.html.haml +1 -0
  45. data/app/views/e9_vendors/vendor_proxies/index.js.erb +1 -0
  46. data/app/views/e9_vendors/vendor_proxies/new.html.haml +2 -0
  47. data/app/views/e9_vendors/vendor_proxies/update.js.erb +7 -0
  48. data/app/views/e9_vendors/vendors/_form.html.haml +91 -0
  49. data/app/views/e9_vendors/vendors/_table.html.haml +20 -0
  50. data/app/views/e9_vendors/vendors/destroy.js.erb +3 -0
  51. data/app/views/e9_vendors/vendors/edit.html.haml +2 -0
  52. data/app/views/e9_vendors/vendors/index.html.haml +4 -0
  53. data/app/views/e9_vendors/vendors/index.js.erb +1 -0
  54. data/app/views/e9_vendors/vendors/new.html.haml +2 -0
  55. data/config/locales/vendorboon.en.yml +61 -0
  56. data/config/routes.rb +38 -0
  57. data/e9_vendors.gemspec +20 -0
  58. data/lib/e9_vendors.rb +24 -0
  59. data/lib/e9_vendors/controller.rb +18 -0
  60. data/lib/e9_vendors/model.rb +13 -0
  61. data/lib/e9_vendors/version.rb +3 -0
  62. data/lib/generators/e9_vendors/install_generator.rb +31 -0
  63. data/lib/generators/e9_vendors/templates/javascript.js +16 -0
  64. data/lib/generators/e9_vendors/templates/migration.rb +84 -0
  65. data/lib/generators/e9_vendors/templates/stylesheets/vb-widget-ie.scss +21 -0
  66. data/lib/generators/e9_vendors/templates/stylesheets/vb-widget.scss +151 -0
  67. 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,2 @@
1
+ = title e9_t(:index_title)
2
+ = render_admin_form
@@ -0,0 +1,7 @@
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
+ .actions
7
+ = 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,3 @@
1
+ <% if !resource.errors.any? %>
2
+ $("#ids_<%= resource.id %>").fadeOut(function() { $(this).remove(); });
3
+ <% end %>
@@ -0,0 +1,2 @@
1
+ = title e9_t(:edit_title)
2
+ = render_admin_form
@@ -0,0 +1,4 @@
1
+ - content_for :toolbar_right do
2
+ = link_to_new_resource resource_class
3
+
4
+ = render 'shared/admin/index', :collection => collection
@@ -0,0 +1 @@
1
+ $("#records_table").html("<%= escape_javascript(render('table', :collection => collection)) %>");
@@ -0,0 +1,2 @@
1
+ = title e9_t(:new_title)
2
+ = render_admin_form
@@ -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,3 @@
1
+ <% if !resource.errors.any? %>
2
+ $("#ids_<%= resource.id %>").fadeOut(function() { $(this).remove(); });
3
+ <% end %>
@@ -0,0 +1,2 @@
1
+ = title e9_t(:edit_title)
2
+ = render_admin_form
@@ -0,0 +1,4 @@
1
+ - content_for :toolbar_right do
2
+ = link_to_new_resource(resource_class)
3
+
4
+ = render 'shared/admin/index', :collection => collection
@@ -0,0 +1 @@
1
+ $("#records_table").html("<%= escape_javascript(render('table', :collection => collection)) %>");
@@ -0,0 +1,2 @@
1
+ = title e9_t(:new_title)
2
+ = render_admin_form
@@ -0,0 +1,3 @@
1
+ = title e9_t(:widget_code_title)
2
+ %code
3
+ = resource.widget_code
@@ -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,3 @@
1
+ <% if !resource.errors.any? %>
2
+ $("#ids_<%= resource.id %>").fadeOut();
3
+ <% end %>
@@ -0,0 +1,2 @@
1
+ = title e9_t(:edit_title)
2
+ = render_admin_form
@@ -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,2 @@
1
+ = title e9_t(:new_title)
2
+ = render_admin_form
@@ -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