artfully_ose 1.2.0.pre.27 → 1.2.0

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 (89) hide show
  1. checksums.yaml +8 -8
  2. data/README.md +4 -6
  3. data/app/assets/javascripts/application.js +39 -0
  4. data/app/assets/javascripts/boxoffice.js +558 -0
  5. data/app/assets/javascripts/custom/kits-config.js +33 -0
  6. data/app/assets/javascripts/sales-console.js +29 -24
  7. data/app/assets/javascripts/store/store.js +11 -0
  8. data/app/assets/stylesheets/application.sass +66 -52
  9. data/app/assets/stylesheets/bootstrap-overrides.css +1 -1
  10. data/app/assets/stylesheets/boxoffice.css.scss +258 -0
  11. data/app/assets/stylesheets/pages/bootstrap-responsive.css +1109 -0
  12. data/app/assets/stylesheets/sass/store.sass +52 -62
  13. data/app/assets/stylesheets/storefront.css +1 -1
  14. data/app/concerns/itemable.rb +1 -1
  15. data/app/concerns/pdf_generation.rb +1 -11
  16. data/app/concerns/search_by_dates.rb +20 -0
  17. data/app/controllers/events_controller.rb +1 -0
  18. data/app/controllers/export_controller.rb +11 -1
  19. data/app/controllers/imports_controller.rb +2 -3
  20. data/app/controllers/member_cards_controller.rb +2 -3
  21. data/app/controllers/orders_controller.rb +42 -0
  22. data/app/controllers/organizations_controller.rb +1 -0
  23. data/app/controllers/passes_reports_controller.rb +21 -1
  24. data/app/controllers/regular_donation_kits_controller.rb +32 -0
  25. data/app/controllers/store/donations_controller.rb +19 -1
  26. data/app/controllers/store/orders_controller.rb +15 -5
  27. data/app/helpers/artfully_ose_helper.rb +28 -18
  28. data/app/models/database_views/item_view.rb +41 -0
  29. data/app/models/event.rb +10 -2
  30. data/app/models/ext/integrations.rb +5 -0
  31. data/app/models/fee_strategy.rb +47 -1
  32. data/app/models/imports/events_import.rb +6 -7
  33. data/app/models/item.rb +4 -3
  34. data/app/models/job/order_processor.rb +4 -3
  35. data/app/models/kit.rb +18 -0
  36. data/app/models/kits/regular_donation_kit.rb +51 -9
  37. data/app/models/member.rb +4 -3
  38. data/app/models/membership.rb +1 -2
  39. data/app/models/membership_sale_search.rb +2 -20
  40. data/app/models/membership_type.rb +1 -2
  41. data/app/models/order.rb +29 -1
  42. data/app/models/order_handler.rb +4 -3
  43. data/app/models/organization.rb +17 -9
  44. data/app/models/pass.rb +18 -17
  45. data/app/models/pass_sale_search.rb +18 -0
  46. data/app/models/pass_type.rb +7 -2
  47. data/app/models/passes_report.rb +117 -0
  48. data/app/models/sale_search.rb +3 -21
  49. data/app/models/user.rb +1 -2
  50. data/app/serializers/show_serializer.rb +15 -0
  51. data/app/views/contributions/index.html.haml +2 -2
  52. data/app/views/events/_header.html.haml +1 -0
  53. data/app/views/events/_ticket_type_fields.html.haml +31 -15
  54. data/app/views/events/edit.html.haml +6 -1
  55. data/app/views/imports/_export_links.html.haml +3 -0
  56. data/app/views/imports/donations/_pending.html.haml +24 -6
  57. data/app/views/imports/events/_pending.html.haml +16 -5
  58. data/app/views/imports/index.html.haml +6 -4
  59. data/app/views/imports/people/_pending.html.haml +20 -25
  60. data/app/views/layouts/storefront.html.haml +9 -5
  61. data/app/views/order_mailer/confirmation_for.html.haml +11 -5
  62. data/app/views/order_mailer/confirmation_for_refund.html.haml +6 -2
  63. data/app/views/order_mailer/confirmation_for_refund.text.haml +4 -3
  64. data/app/views/orders/membership.html.haml +15 -19
  65. data/app/views/orders/passes.html.haml +97 -0
  66. data/app/views/orders/sales.html.haml +2 -2
  67. data/app/views/organizations/_form.html.haml +4 -37
  68. data/app/views/pass_types/index.html.haml +1 -1
  69. data/app/views/passes_reports/index.html.haml +79 -1
  70. data/app/views/people/show.html.haml +16 -15
  71. data/app/views/regular_donation_kits/edit.html.haml +140 -0
  72. data/app/views/store/checkouts/thanks.html.haml +14 -6
  73. data/app/views/store/donations/index.html.haml +19 -2
  74. data/app/views/store/events/calendar.html.haml +1 -0
  75. data/app/views/store/events/index.html.haml +1 -0
  76. data/app/views/store/events/show.html.haml +1 -0
  77. data/app/views/store/events/single_show.html.haml +2 -0
  78. data/app/views/store/orders/show.html.haml +10 -10
  79. data/app/views/store/passes/index.html.haml +2 -2
  80. data/app/views/store/shared/_donate_form.html.haml +31 -12
  81. data/app/views/store/shared/_small_donate_form.html.haml +22 -0
  82. data/app/views/users/invitations/edit.html.haml +3 -42
  83. data/config/locales/en.yml +3 -1
  84. data/config/routes.rb +4 -1
  85. data/db/migrate/20140603200735_add_subtitle_to_events.rb +5 -0
  86. data/lib/artfully_ose/version.rb +1 -1
  87. data/spec/factories/kit_factories.rb +5 -4
  88. metadata +25 -13
  89. data/app/assets/javascripts/box-office.js +0 -262
@@ -1,7 +1,7 @@
1
1
  class SaleSearch
2
-
3
- attr_reader :start, :stop
4
- attr_reader :organization, :event, :show
2
+ include SearchByDates
3
+
4
+ attr_reader :event, :show
5
5
 
6
6
  def initialize(terms)
7
7
  @organization = terms[:organization]
@@ -16,22 +16,4 @@ class SaleSearch
16
16
  def results
17
17
  @results ||= Order.sale_search(self).select(&:has_ticket?)
18
18
  end
19
-
20
- private
21
-
22
- def start_with(start)
23
- start.present? ? DateTime.parse(start) : default_start
24
- end
25
-
26
- def stop_with(stop)
27
- stop.present? ? Sundial.midnightish(@organization, stop) : default_stop
28
- end
29
-
30
- def default_start
31
- DateTime.now.in_time_zone(@organization.time_zone).beginning_of_month
32
- end
33
-
34
- def default_stop
35
- DateTime.now.in_time_zone(@organization.time_zone).end_of_day
36
- end
37
19
  end
@@ -3,8 +3,7 @@ class User < ActiveRecord::Base
3
3
  include Ext::DeviseConfiguration
4
4
  include Ext::Integrations::User
5
5
 
6
- devise :token_authenticatable,
7
- :registerable
6
+ devise :token_authenticatable
8
7
  before_save :ensure_authentication_token
9
8
 
10
9
  has_many :shows
@@ -0,0 +1,15 @@
1
+ class ShowSerializer < ActiveModel::Serializer
2
+ attributes :id, :uuid, :state, :show_time, :event, :tickets_validated, :tickets_sold, :time_zone, :iana_time_zone, :offset, :datetime
3
+
4
+ def tickets_sold
5
+ object.sold || 0
6
+ end
7
+
8
+ def event
9
+ EventSerializer.new(object.event, @options)
10
+ end
11
+
12
+ def include_event?
13
+ @options[:event]
14
+ end
15
+ end
@@ -6,9 +6,9 @@
6
6
  = form_tag contributions_path, :method => :get, :class => 'well form-inline' do
7
7
  .pull-left
8
8
  = label_tag :start, "From", :class => "control-label"
9
- = text_field_tag :start,"#{l @search.start, :format => :date_for_input}", :readonly => true, :class => 'datepicker input-small'
9
+ = text_field_tag :start,"#{l @search.start, :format => :date_for_input}", :class => 'datepicker input-small'
10
10
  = label_tag :stop, "To", :class => "control-label"
11
- = text_field_tag :stop, "#{l @search.stop, :format => :date_for_input}", :readonly => true, :class => 'datepicker input-small'
11
+ = text_field_tag :stop, "#{l @search.stop, :format => :date_for_input}", :class => 'datepicker input-small'
12
12
  .pull-right
13
13
  = submit_tag "Search", :class => "btn"
14
14
  = submit_tag "Download", :class => "btn"
@@ -1,6 +1,7 @@
1
1
  .row
2
2
  .span8
3
3
  %h1= @event.name
4
+ %h3.subtitle= @event.subtitle if @event.subtitle.present?
4
5
  .span4#event-header-logo-container
5
6
  -if @event.image?
6
7
  =image_tag(@event.image.url(:thumb), :id => 'event-header-logo', :width => 75, :height => 75)
@@ -6,26 +6,42 @@
6
6
  =f.text_field :name, :class => 'span4'
7
7
 
8
8
  -with_kit :membership do
9
- .control-group
10
- =label_tag "Member ticket?", "Member ticket?", :class => 'control-label'
11
- .controls
12
- %label.radio.inline
13
- = f.radio_button :member_ticket, true, :class => "member-ticket-yes"
14
- Yes
15
- %label.radio.inline
16
- = f.radio_button :member_ticket, false, :class => "member-ticket-no"
17
- No
18
-
19
- .membership-fields{:style => "display: none"}
9
+ - if current_user.current_organization.membership_types.empty?
20
10
  .control-group
21
- =f.label :membership_type_id, "Membership", :class => 'control-label'
11
+ =label_tag "Member ticket?", "Member ticket?", :class => 'control-label'
22
12
  .controls
23
- =f.select :membership_type_id, options_from_collection_for_select(MembershipType.in_play(current_user.current_organization), 'id', 'name', f.object.membership_type_id), {}, :class => 'span4'
13
+ %label.radio.inline
14
+ = f.radio_button :member_ticket, true, :class => "member-ticket-yes", :disabled => "true"
15
+ Yes
16
+ %label.radio.inline
17
+ = f.radio_button :member_ticket, false, :class => "member-ticket-no", :disabled => "true"
18
+ No
19
+ %p.muted
20
+ You need to create a membership before you can sell member tickets.
21
+ =link_to "Get started here.", new_membership_type_path
24
22
 
23
+ - else
25
24
  .control-group
26
- =f.label :tickets_per_membership, "Tickets per Membership", :class => 'control-label'
25
+ =label_tag "Member ticket?", "Member ticket?", :class => 'control-label'
27
26
  .controls
28
- =f.text_field :tickets_per_membership, :class => 'input-small'
27
+ %label.radio.inline
28
+ = f.radio_button :member_ticket, true, :class => "member-ticket-yes"
29
+ Yes
30
+ %label.radio.inline
31
+ = f.radio_button :member_ticket, false, :class => "member-ticket-no"
32
+ No
33
+
34
+ .membership-fields{:style => "display: none"}
35
+ .control-group
36
+ =f.label :membership_type_id, "Membership", :class => 'control-label'
37
+ .controls
38
+ =f.select :membership_type_id, options_from_collection_for_select(MembershipType.in_play(current_user.current_organization), 'id', 'name', f.object.membership_type_id), {}, :class => 'span4'
39
+
40
+ .control-group
41
+ =f.label :tickets_per_membership, "Tickets per Membership", :class => 'control-label'
42
+ .controls
43
+ =f.text_field :tickets_per_membership, :class => 'input-small'
44
+ %p.muted Leave blank for unlimited.
29
45
 
30
46
  .control-group
31
47
  =f.label :price, "Price", :class => 'control-label'
@@ -13,7 +13,12 @@
13
13
  =form.label :name, "Event name", :class => 'control-label'
14
14
  .controls
15
15
  =form.text_field :name, :class => 'input-xlarge', :placeholder=>"Event name"
16
-
16
+
17
+ .control-group
18
+ =form.label :subtitle, :class => 'control-label'
19
+ .controls
20
+ = form.text_field :subtitle, :class => 'input-xlarge', :placeholder=>"Event subtitle"
21
+
17
22
  .control-group
18
23
  =form.label :producer, "Producer", :class => 'control-label'
19
24
  .controls
@@ -0,0 +1,3 @@
1
+ %p= link_to "Export People", contacts_export_index_path, :class => "btn btn3"
2
+ %p= link_to "Export Donations", donations_export_index_path, :class => "btn btn3"
3
+ %p= link_to "Export Sales", ticket_sales_export_index_path, :class => "btn btn3"
@@ -17,9 +17,27 @@
17
17
  Click "Approve" to import this data into Artful.ly
18
18
  .span3
19
19
  = link_to "Approve", approve_import_path(import), :data => {:confirm => "Are you sure you want to approve this import?"}, :class => "btn btn-success btn-large"
20
-
21
- %center
22
- .alert.alert-info
23
- Import previews are temporarily not available.
24
- %br
25
- You can still apporve your import by clicking the green "Approve" button above.
20
+
21
+ %table.table.table-bordered.table-striped
22
+ %tr
23
+ %th Email
24
+ %th First
25
+ %th Last
26
+ %th Date
27
+ %th Amount
28
+ %th Type
29
+ %th
30
+
31
+ - @imported_rows.each_with_index do |imported_row, index|
32
+ - row = ParsedRow.new(@import.headers, imported_row.content)
33
+ %tr
34
+ %td=row.email
35
+ %td=row.first
36
+ %td=row.last
37
+ %td=row.donation_date
38
+ %td=number_as_cents row.amount
39
+ %td=row.donation_type
40
+ %td
41
+ =icon_link_to("", "#row#{index}", 'fa-search-plus', '', '', {'data-toggle' => 'modal'})
42
+ =render :partial => "imports/shared/inspect_modal", :locals => {:row => row, :index => index, :keys => ParsedRow::DONATION_FIELDS.keys }
43
+ = will_paginate @imported_rows
@@ -17,8 +17,19 @@
17
17
  .span3
18
18
  = link_to "Approve", approve_import_path(import), :data => {:confirm => "Are you sure you want to approve this import?"}, :class => "btn btn-success btn-large"
19
19
 
20
- %center
21
- .alert.alert-info
22
- Import previews are temporarily not available.
23
- %br
24
- You can still apporve your import by clicking the green "Approve" button above.
20
+ - @import.parse_and_hash(@imported_rows).each_with_index do |(event_key, event_rows), event_index|
21
+ %table.table.table-bordered.table-striped.table-topper
22
+ %tr
23
+ %th{:colspan => "3", :style => 'width: 400px'}
24
+ =event_rows.first.event_name
25
+ %br
26
+ =event_rows.first.venue_name
27
+ %br
28
+ =l DateTime.parse(@import.eight_pm?(event_rows.first.show_date)), :format => :short
29
+ -event_rows.each_with_index do |row, index|
30
+ %tr
31
+ %td="#{row.first} #{row.last}"
32
+ %td{:style => 'width:100px'}=number_as_cents row.amount
33
+ %td{:style => 'width:50px'}
34
+ =icon_link_to("", "#row#{event_index}_#{index}", 'fa-search-plus', '', '', {'data-toggle' => 'modal'})
35
+ =render :partial => "imports/shared/inspect_modal", :locals => {:row => row, :index => "#{event_index}_#{index}", :keys => ParsedRow::EVENT_FIELDS.keys }
@@ -41,7 +41,9 @@
41
41
  .span3
42
42
  .well{:style => "text-align: center"}
43
43
  %h3 Exports
44
- %p= link_to "Export People", contacts_export_index_path, :class => "btn btn3"
45
- %p= link_to "Export Donations", @donations_csv_download_link, :class => "btn btn3"
46
- %p= link_to "Export Sales", @sales_csv_download_link, :class => "btn btn3"
47
- %p Sales and Donations exports are prepared nightly and will not reflect sales made today.
44
+ =render :partial => "export_links"
45
+ %div{:style => 'font-weight:bold; text-align:left; font-size:.9em;'}
46
+ = "Need something more specific?"
47
+ %br
48
+ ="Export from"
49
+ =link_to("Advanced Search", new_search_path)
@@ -17,29 +17,24 @@
17
17
  Click "Approve" to import this data into Artful.ly
18
18
  .span3
19
19
  = link_to "Approve", approve_import_path(import), :data => {:confirm => "Are you sure you want to approve this import?"}, :class => "btn btn-success btn-large"
20
- -if @under_limit
21
- %table.table.table-bordered.table-striped
20
+
21
+ %table.table.table-bordered.table-striped
22
+ %tr
23
+ %th Email
24
+ %th First
25
+ %th Last
26
+ %th Company
27
+ %th Website
28
+ %th
29
+ - @imported_rows.each_with_index do |imported_row, index|
30
+ - row = ParsedRow.new(@import.headers, imported_row.content)
22
31
  %tr
23
- %th Email
24
- %th First
25
- %th Last
26
- %th Company
27
- %th Website
28
- %th
29
- - @parsed_rows.each_with_index do |row, index|
30
- %tr
31
- %td=row.email
32
- %td=row.first
33
- %td=row.last
34
- %td=row.company
35
- %td=row.website
36
- %td
37
- =icon_link_to("", "#row#{index}", ' fa-search-plus', '', '', {'data-toggle' => 'modal'})
38
- =render :partial => "imports/shared/inspect_modal", :locals => {:row => row, :index => index, :keys => ParsedRow::PEOPLE_FIELDS.merge(ParsedRow::ADDRESS_FIELDS).keys}
39
- = will_paginate @parsed_rows
40
- -else
41
- %center
42
- .alert.alert-info
43
- Import previews are temporarily not available.
44
- %br
45
- You can still apporve your import by clicking the green "Approve" button above.
32
+ %td=row.email
33
+ %td=row.first
34
+ %td=row.last
35
+ %td=row.company
36
+ %td=row.website
37
+ %td
38
+ =icon_link_to("", "#row#{index}", ' fa-search-plus', '', '', {'data-toggle' => 'modal'})
39
+ =render :partial => "imports/shared/inspect_modal", :locals => {:row => row, :index => index, :keys => ParsedRow::PEOPLE_FIELDS.merge(ParsedRow::ADDRESS_FIELDS).keys}
40
+ = will_paginate @imported_rows
@@ -7,19 +7,23 @@
7
7
  %body
8
8
  .navbar.navbar-fixed-top
9
9
  .navbar-inner
10
- .container
10
+ .container
11
11
  = link_to @store_organization.name, store_organization_events_url(@store_organization.cached_slug), :class => 'brand'
12
12
  %ul.nav#main-menu-options
13
13
  %li= link_to "Buy Tickets", store_events_path(@store_organization.cached_slug)
14
- -with_kit(:passes) do
14
+ - if @store_organization.has_kit?(:passes)
15
15
  %li= link_to "Buy Passes", store_passes_path(@store_organization.cached_slug)
16
- -with_kit(:membership) do
16
+ - if @store_organization.has_kit?(:membership)
17
17
  -if member_signed_in?
18
18
  %li= link_to "Buy Memberships", store_memberships_path(@store_organization.cached_slug)
19
19
  -else
20
20
  %li= link_to "Become a Member", store_memberships_path(@store_organization.cached_slug)
21
- -# %li= link_to "Donate Now", store_donate_path(@store_organization.cached_slug), :class => "btn btn-small btn-warning primary"
22
- -with_kit(:membership) do
21
+ - if @store_organization.has_active_donation_only_storefront?
22
+ -if @store_organization.kit(:regular_donation).donate_now_text.present?
23
+ %li= link_to @store_organization.kit(:regular_donation).donate_now_text, store_donate_path(@store_organization.cached_slug), :class => "btn btn-small btn-warning primary"
24
+ -else
25
+ %li= link_to "Donate Now", store_donate_path(@store_organization.cached_slug), :class => "btn btn-small btn-warning primary"
26
+ - if @store_organization.has_kit?(:membership)
23
27
  %ul.nav.pull-right#menu-member-login
24
28
  -if member_signed_in?
25
29
  %li.dropdown
@@ -14,8 +14,6 @@
14
14
  %br
15
15
  = "Payment method: #{@order.payment_method}"
16
16
  %br
17
- = "Service fee: $#{format("%.2f", (@order.service_fee.to_i/100.0))}"
18
- %br
19
17
 
20
18
  - unless @order.tickets.empty?
21
19
  - @order.ticket_summary.rows.each do |row|
@@ -29,9 +27,9 @@
29
27
  -unless row.show.event.contact_phone.blank?
30
28
  ="Event contact phone: #{row.show.event.contact_phone}"
31
29
  %br
32
- -row.ticket_type_hash.keys.each do |ticket_type|
30
+ -row.ticket_type_hash.each do |ticket_type, tickets|
33
31
  %ul.ticket-list
34
- -ticket_type.tickets.each do |ticket|
32
+ -tickets.each do |ticket|
35
33
  %li
36
34
  %span.price= "#{ticket.ticket_type.name}: $#{format("%.2f", (ticket.sold_price/100.0))}"
37
35
  %li{:style => 'list-style-type:none'}=ticket_type.description
@@ -52,9 +50,17 @@
52
50
  %span.price= "$#{format("%.2f", (item.price/100.00))}:"
53
51
  %span.name= "Donation to #{@order.organization.name_for_donations}"
54
52
 
53
+ - unless @order.passes.empty?
54
+ %h4 Passes
55
+ %ul.pass-list
56
+ - @order.passes.each do |item|
57
+ %li
58
+ %span.price= "$#{format("%.2f", (item.price/100.00))}:"
59
+ %span.name= "#{item.product.pass_type.passerize}: #{item.product.pass_code}"
60
+
55
61
  - unless @order.memberships.empty?
56
62
  %h4 Memberships
57
- %ul.donation-list
63
+ %ul.membership-list
58
64
  - @order.memberships.each do |item|
59
65
  %li
60
66
  %span.price= "$#{format("%.2f", (item.price/100.00))}:"
@@ -1,11 +1,15 @@
1
1
  %h1 Refund Confirmation
2
2
 
3
3
  %p
4
- Order number: #{@order.id}
4
+ Order Number: #{@order.id}
5
5
  %br
6
6
  Refund Date: #{l(@order.created_at_local_to_organization)}
7
7
  %br
8
- Refund total: -$#{format("%.2f", (@order.total.abs/100.0))}
8
+ Item Total: -$#{format("%.2f", (@order.total.abs/100.0))}
9
+ %br
10
+ Service Fees: -$#{format("%.2f", (@order.service_fee.abs.to_i/100.0))}
11
+ %br
12
+ Refund Total: -$#{format("%.2f", (@order.total_with_service_fee.abs/100.0))}
9
13
  %br
10
14
  %br
11
15
  -if @order.original_order.credit?
@@ -1,9 +1,10 @@
1
1
  Refund Confirmation
2
2
 
3
-
4
- Order number: #{@order.id}
3
+ Order Number: #{@order.id}
5
4
  Refund Date: #{l(@order.created_at_local_to_organization)}
6
- Refund total: -$#{format("%.2f", (@order.total.abs/100.0))}
5
+ Item Total: -$#{format("%.2f", (@order.total.abs/100.0))}
6
+ Service Fees: -$#{format("%.2f", (@order.service_fee.abs.to_i/100.0))}
7
+ Refund Total: -$#{format("%.2f", (@order.total_with_service_fee.abs/100.0))}
7
8
 
8
9
  -if @order.original_order.credit?
9
10
  This refund was credited to the credit card you used as payment for this order.
@@ -2,26 +2,16 @@
2
2
  - content_for :header do
3
3
  %h1 Membership Orders
4
4
 
5
- #print-cards.modal.hide.fade
6
- .modal-header
7
- .close{'data-dismiss'=>'modal'} x
8
- %h3 Generating Member Cards
9
- .modal-body
10
- %p
11
- A PDF is being generated and will automatically begin downloading when ready...
12
- .progress.progress-success.progress-striped.active
13
- .bar{:style => 'width: 90%'}
14
-
15
5
  #donations-search
16
6
 
17
7
  .control-group.well
18
- = form_tag membership_orders_path, :method => :get, :class => 'form-inline' do
8
+ = form_tag membership_orders_path, :method => :get, :id => 'memberships-date-search-form', :class => 'form-inline' do
19
9
  .pull-left
20
10
  = label_tag :start, "From", :class => "control-label"
21
- = text_field_tag :start,"#{l @search.start, :format => :date_for_input}", :readonly => true, :class => 'datepicker input-small'
11
+ = text_field_tag :start,"#{l @search.start, :format => :date_for_input}", :class => 'datepicker input-small'
22
12
 
23
13
  = label_tag :stop, "To", :class => "control-label"
24
- = text_field_tag :stop, "#{l @search.stop, :format => :date_for_input}", :readonly => true, :class => 'datepicker input-small'
14
+ = text_field_tag :stop, "#{l @search.stop, :format => :date_for_input}", :class => 'datepicker input-small'
25
15
 
26
16
  - if @membership_types.present?
27
17
  = label_tag :membership_type_id, nil, :class => "control-label"
@@ -41,7 +31,7 @@
41
31
  = link_to 'Export to CSV', params.merge(:format => 'csv').delete_if {|k,v| :commit == k.to_sym }
42
32
  - with_kit(:membership) do
43
33
  %li
44
- =link_to 'Print Member Cards', new_member_card_path({:start => @search.start, :stop => @search.stop, :membership_type_id => @search.membership_type.try(:id)}), :onclick => "$('#print-cards').modal();"
34
+ =link_to 'Print Member Cards', new_member_card_path({:start => @search.start, :stop => @search.stop, :membership_type_id => @search.membership_type.try(:id)})
45
35
 
46
36
 
47
37
  - if @search.results.present?
@@ -59,16 +49,22 @@
59
49
  %tbody
60
50
  - @search.results.each do |order|
61
51
  - order.items.select(&:membership?).each_with_index do |item, index|
62
- %tr
63
- - if index == 0
52
+ - if index == 0
53
+ %tr{:id => "order_#{order.id}"}
64
54
  - rowspan = order.items.select(&:membership?).size
65
55
  %td{:rowspan => rowspan}= link_to order.id, order_path(order.id)
66
56
  %td{:rowspan => rowspan}= l(order.created_at_local_to_organization, :format => :short)
67
57
  %td{:rowspan => rowspan}= link_to_person(order.person)
68
58
  %td{:rowspan => rowspan}= (order.payment_method || "")
69
- %td
70
- ="#{item.product.membership_type.name}"
71
- %td= number_as_cents item.price
59
+ %td
60
+ ="#{item.product.membership_type.name}"
61
+ %td= number_as_cents item.price
62
+ - else
63
+ %tr
64
+ %td
65
+ ="#{item.product.membership_type.name}"
66
+ %td= number_as_cents item.price
67
+
72
68
  = will_paginate(@search.results)
73
69
 
74
70
  - else