artfully_ose 1.2.0.pre.15 → 1.2.0.pre.16

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. checksums.yaml +8 -8
  2. data/app/assets/javascripts/application.js +22 -1
  3. data/app/assets/javascripts/bootstrap-wysihtml5.js +511 -0
  4. data/app/assets/javascripts/custom/prices.js +1 -0
  5. data/app/assets/javascripts/wysihtml5-0.3.0.min.js +261 -0
  6. data/app/assets/stylesheets/application.sass +25 -1
  7. data/app/assets/stylesheets/bootstrap-wysihtml5.css +102 -0
  8. data/app/assets/stylesheets/bootstrap.css +1 -0
  9. data/app/assets/stylesheets/sass/store.sass +22 -0
  10. data/app/assets/stylesheets/wysiwyg-color.css +67 -0
  11. data/app/controllers/exchanges_controller.rb +7 -1
  12. data/app/controllers/membership_kits_controller.rb +25 -0
  13. data/app/controllers/mobile/dashboard_controller.rb +17 -0
  14. data/app/controllers/mobile/events_controller.rb +16 -0
  15. data/app/controllers/mobile/orders_controller.rb +60 -0
  16. data/app/controllers/mobile/shows_controller.rb +33 -0
  17. data/app/controllers/mobile/tickets_controller.rb +85 -0
  18. data/app/controllers/mobile/users_controller.rb +32 -0
  19. data/app/controllers/people_controller.rb +8 -6
  20. data/app/controllers/refunds_controller.rb +7 -7
  21. data/app/controllers/searches_controller.rb +3 -4
  22. data/app/controllers/store/checkouts_controller.rb +4 -4
  23. data/app/controllers/store/events_controller.rb +14 -2
  24. data/app/controllers/store/memberships_controller.rb +2 -0
  25. data/app/controllers/store/orders_controller.rb +1 -1
  26. data/app/controllers/tickets_controller.rb +2 -2
  27. data/app/helpers/artfully_ose_helper.rb +21 -0
  28. data/app/mailers/order_mailer.rb +28 -1
  29. data/app/models/address.rb +1 -1
  30. data/app/models/checkout.rb +8 -14
  31. data/app/models/contribution.rb +1 -0
  32. data/app/models/event.rb +17 -6
  33. data/app/models/exchange.rb +7 -5
  34. data/app/models/ext/integrations.rb +8 -3
  35. data/app/models/item.rb +4 -0
  36. data/app/models/job/checkout_processor.rb +41 -0
  37. data/app/models/job/order_mailer_job.rb +8 -0
  38. data/app/models/job/order_processor.rb +50 -9
  39. data/app/models/kit.rb +1 -1
  40. data/app/models/kits/membership_kit.rb +55 -0
  41. data/app/models/member.rb +16 -4
  42. data/app/models/membership_type.rb +7 -0
  43. data/app/models/order_handler.rb +4 -3
  44. data/app/models/orders/imported_order.rb +4 -0
  45. data/app/models/orders/order.rb +16 -5
  46. data/app/models/orders/pdf_generation.rb +75 -0
  47. data/app/models/organization.rb +7 -0
  48. data/app/models/person.rb +15 -0
  49. data/app/models/refund.rb +5 -2
  50. data/app/models/section.rb +16 -2
  51. data/app/models/show.rb +2 -8
  52. data/app/models/show_stats_view.rb +10 -0
  53. data/app/models/ticket.rb +38 -15
  54. data/app/models/ticket/qr_code.rb +21 -0
  55. data/app/models/ticket/template.rb +1 -0
  56. data/app/models/ticket/transfers.rb +5 -1
  57. data/app/models/ticket_summary.rb +5 -2
  58. data/app/models/ticket_type.rb +42 -7
  59. data/app/models/user.rb +3 -0
  60. data/app/models/user_membership.rb +1 -0
  61. data/app/views/actions/get/_show.html.haml +1 -12
  62. data/app/views/contributions/_form.html.haml +1 -1
  63. data/app/views/events/_ticket_type_fields.html.haml +21 -0
  64. data/app/views/events/image.html.haml +1 -1
  65. data/app/views/exchanges/new.html.haml +51 -28
  66. data/app/views/layouts/_google_analytics.html.haml +5 -2
  67. data/app/views/layouts/members.html.haml +1 -1
  68. data/app/views/layouts/storefront.html.haml +1 -1
  69. data/app/views/members/invitations/edit.html.erb +14 -0
  70. data/app/views/members/invitations/new.html.erb +14 -0
  71. data/app/views/members/mailer/invitation_instructions.html.haml +11 -0
  72. data/app/views/membership_kits/edit.html.haml +68 -0
  73. data/app/views/membership_types/index.html.haml +7 -3
  74. data/app/views/order_mailer/confirmation_for_exchange.html.haml +34 -0
  75. data/app/views/order_mailer/confirmation_for_exchange.text.haml +26 -0
  76. data/app/views/order_mailer/confirmation_for_refund.html.haml +29 -0
  77. data/app/views/order_mailer/confirmation_for_refund.text.haml +22 -0
  78. data/app/views/organizations/_form.html.haml +1 -1
  79. data/app/views/people/_header.html.haml +4 -4
  80. data/app/views/people/index.html.haml +18 -6
  81. data/app/views/refunds/new.html.haml +41 -27
  82. data/app/views/store/checkouts/_membership_info.html.haml +11 -0
  83. data/app/views/store/checkouts/thanks.html.haml +2 -10
  84. data/app/views/store/events/_calendar.html.haml +1 -4
  85. data/app/views/store/events/calendar.html.haml +49 -0
  86. data/app/views/store/events/show.html.haml +3 -8
  87. data/app/views/store/events/single_show.html.haml +2 -2
  88. data/app/views/store/memberships/index.html.haml +3 -11
  89. data/app/views/store/shows/_show.html.haml +6 -6
  90. data/config/initializers/paperclip.rb +14 -0
  91. data/config/routes.rb +35 -0
  92. data/db/migrate/20130722153731_add_autentication_token_to_users.rb +5 -0
  93. data/db/migrate/20130723212712_add_qr_code_to_tickets.rb +9 -0
  94. data/db/migrate/20130820011240_add_uuid_to_tickets.rb +13 -0
  95. data/db/migrate/20130820025134_make_ticket_uuid_not_null.rb +11 -0
  96. data/db/migrate/20130823191625_add_pdf_to_orders.rb +5 -0
  97. data/db/migrate/20131127162818_add_buyer_id_index_to_tickets.rb +5 -0
  98. data/db/migrate/20131127164000_member_tickets.rb +9 -0
  99. data/lib/artfully_ose.rb +3 -1
  100. data/lib/artfully_ose/engine.rb +5 -4
  101. data/lib/artfully_ose/version.rb +1 -1
  102. metadata +51 -2
@@ -0,0 +1,21 @@
1
+ class Ticket::QRCode
2
+ def initialize(ticket, order = nil)
3
+ @ticket = ticket
4
+ @order = order
5
+ end
6
+
7
+ def text
8
+ ticket.uuid
9
+ end
10
+
11
+ def render(file)
12
+ png = RQRCode::QRCode.new(text.to_s, :size => 10, :level => :l).to_img
13
+ png.resize(150, 150).save(file)
14
+ end
15
+
16
+ private
17
+
18
+ delegate :event, :to => :ticket
19
+
20
+ attr_reader :ticket, :order
21
+ end
@@ -32,6 +32,7 @@ class Ticket::Template
32
32
  t = Ticket.new(attributes)
33
33
  t.organization_id = organization_id
34
34
  t.show_id = show_id
35
+ t.set_uuid
35
36
  tickets << t
36
37
  end
37
38
  tickets
@@ -5,6 +5,7 @@ module Ticket::Transfers
5
5
  begin
6
6
  self.buyer = buyer
7
7
  self.sold_at = time
8
+ generate_qr_code
8
9
  self.sell!
9
10
  rescue Transitions::InvalidTransition
10
11
  return false
@@ -18,6 +19,7 @@ module Ticket::Transfers
18
19
  begin
19
20
  self.buyer = buyer
20
21
  self.sold_at = time
22
+ generate_qr_code
21
23
  self.exchange!
22
24
  rescue Transitions::InvalidTransition => e
23
25
  puts e
@@ -30,6 +32,7 @@ module Ticket::Transfers
30
32
  self.buyer = buyer
31
33
  self.sold_price = 0
32
34
  self.sold_at = time
35
+ generate_qr_code
33
36
  self.comp!
34
37
  rescue Transitions::InvalidTransition => e
35
38
  puts e
@@ -43,9 +46,10 @@ module Ticket::Transfers
43
46
  self.buyer = nil
44
47
  self.sold_at = nil
45
48
  self.buyer_id = nil
49
+ self.qr_code = nil
46
50
  Rails.logger.debug(self.inspect)
47
51
  self.reset_price!
48
52
  save
49
53
  end
50
54
 
51
- end
55
+ end
@@ -23,8 +23,11 @@ class TicketSummary
23
23
 
24
24
  def <<(ticket)
25
25
  @tickets << ticket
26
- @ticket_type_hash[ticket.ticket_type] ||= []
27
- @ticket_type_hash[ticket.ticket_type] << tickets
26
+ if @ticket_type_hash[ticket.ticket_type].nil?
27
+ @ticket_type_hash[ticket.ticket_type] = []
28
+ end
29
+
30
+ @ticket_type_hash[ticket.ticket_type] << ticket
28
31
  @show = ticket.show
29
32
  self
30
33
  end
@@ -1,9 +1,15 @@
1
1
  class TicketType < ActiveRecord::Base
2
2
  belongs_to :section
3
3
  belongs_to :show
4
+ belongs_to :membership_type
4
5
  delegate :chart, :to => :section
5
6
  has_many :tickets
6
- attr_accessible :name, :price, :limit, :description, :storefront, :box_office, :members
7
+ attr_accessible :name, :price, :limit, :description, :storefront, :box_office, :members,
8
+ :membership_type_id, :tickets_per_membership, :member_ticket
9
+
10
+ before_save :clear_membership_type_id
11
+
12
+ validates :membership_type_id, :presence => true, :if => "member_ticket?"
7
13
 
8
14
  def as_json(options = {})
9
15
  {
@@ -17,21 +23,45 @@ class TicketType < ActiveRecord::Base
17
23
  end
18
24
 
19
25
  #
20
- # Returns tickets
26
+ # Returns Tickets
21
27
  #
22
- def available_tickets(ticket_limit = 4)
28
+ def available_tickets(ticket_limit = 4, member = nil)
23
29
  Ticket.available({:section_id => self.section.id,
24
30
  :ticket_type_id => nil },
25
- [ticket_limit, self.available].min)
31
+ [ticket_limit, self.available(member)].min)
26
32
  end
27
33
 
28
34
  #
29
35
  # Returns an integer number of tickets available
30
36
  #
31
- def available
37
+ def available(member = nil)
32
38
  available_in_section = Ticket.where(:section_id => self.section, :state => :on_sale, :cart_id => nil, :ticket_type_id => nil).count
33
- return available_in_section if unlimited?
34
- [ [limit - committed.length - locked.length, available_in_section].min, 0].max
39
+
40
+ return available_in_section if unlimited? && !self.member_ticket?
41
+
42
+ available_measures = []
43
+ available_measures << limit - committed.length - locked.length unless limit.nil?
44
+ available_measures << available_in_section
45
+ available_measures << available_to(member, available_in_section) if self.member_ticket?
46
+
47
+ [ available_measures.min, 0].max
48
+ end
49
+
50
+ def available_to(member, limit = 0)
51
+ if member.nil?
52
+ return 0 if self.member_ticket?
53
+ elsif self.tickets_per_membership.nil?
54
+ return limit
55
+ else
56
+ #how many member tickets has this member purchased for this show?
57
+ member_tickets_purchased = member.member_tickets_purchased_for(self.show.event).count
58
+
59
+ #how many tickets this member entitled to?
60
+ tickets_entitled_to = member.memberships.current.where(:membership_type_id => self.membership_type_id).count * self.tickets_per_membership
61
+
62
+ member_tickets_available = tickets_entitled_to - member_tickets_purchased
63
+ member_tickets_available
64
+ end
35
65
  end
36
66
 
37
67
  def self.price_to_cents(price_in_dollars)
@@ -82,4 +112,9 @@ class TicketType < ActiveRecord::Base
82
112
  def self.set_show(show)
83
113
  TicketType.joins(:section => :chart).where('charts.id = ?', show.chart_id).update_all(:show_id => show.id)
84
114
  end
115
+
116
+ private
117
+ def clear_membership_type_id
118
+ self.membership_type_id = nil unless self.member_ticket?
119
+ end
85
120
  end
data/app/models/user.rb CHANGED
@@ -3,6 +3,9 @@ class User < ActiveRecord::Base
3
3
  include Ext::DeviseConfiguration
4
4
  include Ext::Integrations::User
5
5
 
6
+ devise :token_authenticatable
7
+ before_save :ensure_authentication_token
8
+
6
9
  has_many :shows
7
10
  has_many :orders
8
11
  has_many :imports
@@ -20,6 +20,7 @@ class UserMembership < ActiveRecord::Base
20
20
 
21
21
  @user_membership.transaction do
22
22
  UserMembership.where(:organization_id => organization.id).update_all(:owner => false)
23
+ @user_membership.reload
23
24
  @user_membership.owner = true
24
25
  return @user_membership.save
25
26
  end
@@ -1,14 +1,3 @@
1
- %p
2
- =render :partial => "actions/shared/show", :locals => { :action => action }
1
+ =render :partial => "actions/shared/show", :locals => { :action => action }
3
2
 
4
-
5
- %ul
6
- - action.subject.items.each do |item|
7
- %li #{number_as_cents(item.price)} - #{item.order_summary_description}
8
- %li
9
- %strong #{number_as_cents(action.subject.total||0)} - Total
10
- - if action.subject.notes.present?
11
- %li
12
- %strong Note:
13
- = action.subject.notes
14
3
  %p= link_to "View order details <i class='icon-share-alt'></i>".html_safe, order_path(action.subject)
@@ -33,7 +33,7 @@
33
33
  .control-group
34
34
  = form.label :details, "Notes", :class => 'control-label'
35
35
  .controls
36
- = form.text_area :details, :size => "20x5"
36
+ = form.text_area :details, :size => "20x3"
37
37
 
38
38
  .form-actions
39
39
  = submit_tag "Save", :class => "btn"
@@ -5,6 +5,27 @@
5
5
  .controls
6
6
  =f.text_field :name, :class => 'span4'
7
7
 
8
+ .control-group
9
+ =label_tag "Member ticket?", "Member ticket?", :class => 'control-label'
10
+ .controls
11
+ %label.radio.inline
12
+ = f.radio_button :member_ticket, true, :class => "member-ticket-yes"
13
+ Yes
14
+ %label.radio.inline
15
+ = f.radio_button :member_ticket, false, :class => "member-ticket-no"
16
+ No
17
+
18
+ .membership-fields{:style => "display: none"}
19
+ .control-group
20
+ =f.label :membership_type_id, "Membership", :class => 'control-label'
21
+ .controls
22
+ =f.select :membership_type_id, options_from_collection_for_select(MembershipType.in_play, 'id', 'name', f.object.membership_type_id), {}, :class => 'span4'
23
+
24
+ .control-group
25
+ =f.label :tickets_per_membership, "Tickets per Membership", :class => 'control-label'
26
+ .controls
27
+ =f.text_field :tickets_per_membership, :class => 'input-small'
28
+
8
29
  .control-group
9
30
  =f.label :price, "Price", :class => 'control-label'
10
31
  .controls
@@ -16,7 +16,7 @@
16
16
  =icon_tag('266-upload@2x', {:alt => "instructions", :align => "left"})
17
17
  .span10
18
18
  %p
19
- ="Spruce up this event with an image! This image will be displayed on both #{link_to "your Storefront", store_event_url(@event)} (where patrons will purchase tickets) and within your Artful.ly management pages.".html_safe
19
+ ="Spruce up this event with an image! This image will be displayed on both your #{link_to "Storefront", store_old_storefront_event_path(@event)} (where patrons will purchase tickets) and within your Artful.ly management pages.".html_safe
20
20
  %ul{:style => "list-style-type: circle;"}
21
21
  %li Image size is limited to 1 MB
22
22
  %li We recommend your image be at least 300 pixels wide
@@ -3,11 +3,11 @@
3
3
  %h1 Exchanging Tickets
4
4
 
5
5
  .row
6
- .span4
6
+ .span4#event-select-container
7
7
  %h3 1. Choose an Event
8
8
  = select_tag "event_selector", options_for_select(@events.collect{ |e| [e.name, url_for(params.merge({:event_id => e.id, :show_id => nil, :ticket_type_id => nil}))] }, url_for(params.merge({:event_id => @event.try(:id), :show_id => nil, :ticket_type_id => nil}))), include_blank: true, class: "visit-on-select span4"
9
9
 
10
- .span4
10
+ .span4#show-select-container
11
11
  - unless @shows.nil?
12
12
  %h3 2. Choose a Show
13
13
  - if @shows.empty?
@@ -15,7 +15,7 @@
15
15
  - else
16
16
  = select_tag "show_selector", options_for_select(@shows.collect{ |show| [l(show.datetime_local_to_event, :format => :short), url_for(params.merge({:show_id => show.id, :ticket_type_id => nil}))] }, url_for(params.merge({:show_id => @show.try(:id), :ticket_type_id => nil}))), include_blank: true, class: "visit-on-select span4"
17
17
 
18
- .span4
18
+ .span4#ticket-type-select-container
19
19
  - unless @show.nil?
20
20
  %h3 3. Choose a Ticket Type
21
21
  = select_tag "ticket_type_selector", options_for_select(@show.chart.ticket_types.collect{ |ticket_type| [(truncate(ticket_type.name, :length => 20, :separator => ' ', :omission => '...') + ' ' + number_as_cents(ticket_type.price)), url_for(params.merge({:ticket_type_id => ticket_type.id}))] }, url_for(params.merge({:ticket_type_id => @ticket_type.try(:id)}))), include_blank: true, class: "visit-on-select ticket-type-select span4"
@@ -27,32 +27,55 @@
27
27
  = hidden_field_tag :ticket_type_id, params[:ticket_type_id]
28
28
  - params[:items].each do |item_id|
29
29
  = hidden_field_tag "items[]", item_id
30
- #exchange-details.row
30
+ #exchange-details
31
31
  - unless @num_available_tickets < @items.length
32
- .span3.offset2
33
- .well
34
- %ol.unstyled
35
- - @items.each do |item|
36
- %li
37
- %h6= item.show.event.name
38
- .lead=number_as_cents item.total_price
39
- = l(item.show.datetime_local_to_event, :format => :short)
40
- %br
41
- = item.product.ticket_type.name
42
- #exchange-arrow.span2
43
- %i.icon-arrow-right.icon-3x
44
- - unless @ticket_type.nil?
45
- = submit_tag "Confirm Exchange", :class => "btn btn-large btn-block btn-primary"
46
- .span3
47
- .well{class: ("negative" if @free_upgrade)}
48
- %ol.unstyled
49
- - @items.count.times do
50
- %li
51
- %h6= @event.name
52
- .lead=number_as_cents @ticket_type.price
53
- = l(@ticket_type.show.datetime_local_to_event, :format => :short)
54
- %br
55
- = @ticket_type.name
32
+ .row
33
+ .span3.offset2#outgoing-tickets
34
+ .well
35
+ %ol.unstyled
36
+ - @items.each do |item|
37
+ %li.ticket-detail
38
+ %h6= item.show.event.name
39
+ = l(item.show.datetime_local_to_event, :format => :short)
40
+ %br
41
+ = item.product.ticket_type.name
42
+ .lead=number_as_cents item.total_price
43
+ #exchange-arrow.span2
44
+ %i.icon-arrow-right.icon-3x
45
+
46
+ .span3#incoming-tickets
47
+ .well{class: ("negative" if @free_upgrade)}
48
+ %ol.unstyled
49
+ - @items.count.times do
50
+ %li.ticket-detail
51
+ %h6= @event.name
52
+ = l(@ticket_type.show.datetime_local_to_event, :format => :short)
53
+ %br
54
+ = @ticket_type.name
55
+ .lead=number_as_cents @ticket_type.price
56
+
57
+ .row
58
+ .span6.offset3
59
+ %p
60
+ When you click the "Confirm Exchange" button, The tickets on the left will be immediately exchanged for the tickets on the right. We'll update the show data and door list right away.
61
+
62
+ %p
63
+ Artful.ly will not refund or credit any accounts. If there is money to be collected from or refunded to a patron, please reconcile with the patron directly.
64
+
65
+
66
+ - if @order.skip_confirmation_email?
67
+ %p="We cannot send an email confirmation because we have no email address for #{@order.person}."
68
+ - else
69
+ .center
70
+ .control-group
71
+ .controls
72
+ %label.checkbox
73
+ = check_box_tag :send_email_confirmation, "1", "", :style => "float:none"
74
+ ="Also send an email confirmation to #{@order.person.email}."
75
+
76
+ - unless @ticket_type.nil?
77
+ .center
78
+ = submit_tag "Confirm Exchange", :class => "btn btn-large btn-primary"
56
79
 
57
80
  - content_for :custom_js do
58
81
  :javascript
@@ -1,7 +1,10 @@
1
- - if Rails.env.production? && !Rails.application.config.google_analytics.account.blank?
1
+ -if (Rails.env.production? || Rails.env.staging?) && !Rails.application.config.google_analytics.account.blank?
2
+ - segment = "" if local_assigns[:segment].nil?
3
+ - segment = (segment + "_") unless segment.blank?
4
+ - segment_account = segment + "account"
2
5
  :javascript
3
6
  var _gaq = _gaq || [];
4
- _gaq.push(['_setAccount', '#{h Rails.application.config.google_analytics.account}']);
7
+ _gaq.push(['_setAccount', '#{h Rails.application.config.google_analytics.send(segment_account)}']);
5
8
  _gaq.push(['_setDomainName', '#{h Rails.application.config.google_analytics.domain}']);
6
9
  _gaq.push(['_setAllowHash', false]);
7
10
  _gaq.push(['_setAllowLinker', true]);
@@ -3,7 +3,7 @@
3
3
  %head
4
4
  %title= "#{yield :title}"
5
5
  = stylesheet_link_tag :storefront
6
- = render :partial => 'layouts/google_analytics'
6
+ = render :partial => 'layouts/google_analytics', :locals => { :segment => "storefront" }
7
7
  %body
8
8
  .container
9
9
  = render :partial => 'layouts/flash.html', :locals => { :flash => flash }
@@ -3,7 +3,7 @@
3
3
  %head
4
4
  %title= "#{yield :title}"
5
5
  = stylesheet_link_tag :storefront
6
- = render :partial => 'layouts/google_analytics'
6
+ = render :partial => 'layouts/google_analytics', :locals => { :segment => "storefront" }
7
7
  %body
8
8
  .navbar.navbar-fixed-top
9
9
  .navbar-inner
@@ -0,0 +1,14 @@
1
+ <h2>Set your password</h2>
2
+
3
+ <%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => { :method => :put } do |f| %>
4
+ <%= devise_error_messages! %>
5
+ <%= f.hidden_field :invitation_token %>
6
+
7
+ <p><%= f.label :password %><br />
8
+ <%= f.password_field :password %></p>
9
+
10
+ <p><%= f.label :password_confirmation %><br />
11
+ <%= f.password_field :password_confirmation %></p>
12
+
13
+ <p><%= f.submit "Set my password" %></p>
14
+ <% end %>
@@ -0,0 +1,14 @@
1
+ <h2>Send invitation</h2>
2
+
3
+ <%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <% resource.class.invite_key_fields.each do |field| -%>
7
+ <p><%= f.label field %><br />
8
+ <%= f.text_field field %></p>
9
+ <% end -%>
10
+
11
+ <p><%= f.submit "Send an invitation" %></p>
12
+ <% end %>
13
+
14
+ <%= link_to "Home", after_sign_in_path_for(resource_name) %><br />
@@ -0,0 +1,11 @@
1
+ ="Hello #{@resource.person.first_name},"
2
+
3
+ %p
4
+ =@resource.organization.membership_kit.invitation_email_text_copy.html_safe
5
+
6
+ = link_to 'Setup your account now', accept_invitation_url(@resource, :invitation_token => @resource.invitation_token)
7
+
8
+ %p
9
+ ="Thanks!"
10
+ %br
11
+ =@resource.organization.name
@@ -0,0 +1,68 @@
1
+ - content_for :header do
2
+ %h1 Configure Membership Kit
3
+
4
+ #edit-membership-kit
5
+ =form_for @kit do |f|
6
+ .row-fluid.bottom-room
7
+ .span3
8
+ %strong= f.label :marketing_copy_heading, "Marketing Copy Top", :class => 'control-label'
9
+ .guide
10
+ %p
11
+ This text will appear at the top of your
12
+ =link_to "Membership Storefront", store_memberships_path(current_user.current_organization.cached_slug)
13
+ .span9
14
+ = f.text_area :marketing_copy_heading, :class => "input-xxlarge wysihtml5", :rows => "8"
15
+
16
+ .row-fluid.bottom-room
17
+ .span3
18
+ %strong= f.label :marketing_copy_sidebar, "Marketing Copy Sidebar", :class => 'control-label'
19
+ .guide
20
+ %p
21
+ This text will appear on the right sidebar of your
22
+ =link_to "Membership Storefront", store_memberships_path(current_user.current_organization.cached_slug)
23
+ .span9
24
+ = f.text_area :marketing_copy_sidebar, :class => "input-xxlarge wysihtml5", :rows => "8"
25
+
26
+ .row-fluid.bottom-room
27
+ .span3
28
+ %strong= f.label :thanks_copy, "Thanks Copy", :class => 'control-label'
29
+ .guide
30
+ Ut porta risus et lectus lobortis, vitae ultricies massa placerat. In non dapibus augue.
31
+ %p
32
+ =link_to "Preview", "#thanks-preview-modal", 'data-toggle' => 'modal'
33
+ .span9
34
+ = f.text_area :thanks_copy, :class => "input-xxlarge", :rows => "8"
35
+
36
+ .row-fluid.bottom-room
37
+ .span3
38
+ %strong= f.label :invitation_email_text_copy, "Welcome Email Copy", :class => 'control-label'
39
+ .guide
40
+ Ut porta risus et lectus lobortis, vitae ultricies massa placerat. In non dapibus augue.
41
+ %p
42
+ =link_to "Preview", "#invite-preview-modal", 'data-toggle' => 'modal'
43
+ .span9
44
+ = f.text_area :invitation_email_text_copy, :class => "input-xxlarge", :rows => "8"
45
+
46
+ =f.submit "Save", :class => "btn btn-primary"
47
+
48
+ #thanks-preview-modal.modal
49
+ .modal-header
50
+ .close{'data-dismiss'=>'modal'} x
51
+ %h3 Thanks Page Preview
52
+
53
+ .modal-body
54
+ #thanks-preview
55
+ (Thanks preview)
56
+ .modal-footer
57
+ = link_to "Close", "#", :class => "btn", 'data-dismiss'=>'modal'
58
+
59
+ #invite-preview-modal.modal
60
+ .modal-header
61
+ .close{'data-dismiss'=>'modal'} x
62
+ %h3 Invitation Email Preview
63
+
64
+ .modal-body
65
+ #email-preview
66
+ (Email preview)
67
+ .modal-footer
68
+ = link_to "Close", "#", :class => "btn", 'data-dismiss'=>'modal'