artfully_ose 1.2.0.pre.24 → 1.2.0.pre.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +9 -9
  2. data/app/assets/fonts/FontAwesome.otf +0 -0
  3. data/app/assets/fonts/fontawesome-webfont.eot +0 -0
  4. data/app/assets/fonts/fontawesome-webfont.svg +504 -0
  5. data/app/assets/fonts/fontawesome-webfont.ttf +0 -0
  6. data/app/assets/fonts/fontawesome-webfont.woff +0 -0
  7. data/app/assets/javascripts/application.js +5 -0
  8. data/app/assets/javascripts/custom/people.js +68 -5
  9. data/app/assets/javascripts/sales-console.js +153 -0
  10. data/app/assets/javascripts/store/jquery.validate.additional-methods.js +476 -159
  11. data/app/assets/javascripts/store/jquery.validate.js +449 -406
  12. data/app/assets/stylesheets/application.sass +49 -0
  13. data/app/assets/stylesheets/font-awesome.css.scss +1566 -0
  14. data/app/concerns/cart_finder.rb +5 -0
  15. data/app/controllers/console_sales_controller.rb +182 -0
  16. data/app/controllers/events_controller.rb +1 -1
  17. data/app/controllers/events_pass_types_controller.rb +10 -0
  18. data/app/controllers/memberships_controller.rb +3 -3
  19. data/app/controllers/people_controller.rb +2 -1
  20. data/app/controllers/sales_controller.rb +51 -13
  21. data/app/controllers/shows_controller.rb +2 -2
  22. data/app/controllers/store/orders_controller.rb +0 -9
  23. data/app/helpers/artfully_ose_helper.rb +4 -2
  24. data/app/helpers/sales_helper.rb +29 -0
  25. data/app/models/cart.rb +6 -1
  26. data/app/models/checkout.rb +20 -13
  27. data/app/models/comp.rb +13 -16
  28. data/app/models/console_sale.rb +30 -0
  29. data/app/models/database_views/item_view.rb +3 -0
  30. data/app/models/job/checkout_processor.rb +10 -5
  31. data/app/models/kits/mailchimp_kit.rb +2 -1
  32. data/app/models/kits/passes_kit.rb +1 -1
  33. data/app/models/kits/scannable_tickets_kit.rb +3 -4
  34. data/app/models/membership.rb +18 -3
  35. data/app/models/membership_change.rb +1 -1
  36. data/app/models/membership_type.rb +2 -3
  37. data/app/models/order.rb +20 -17
  38. data/app/models/order_handler.rb +21 -0
  39. data/app/models/orders/comp_order.rb +1 -1
  40. data/app/models/parsed_row.rb +45 -2
  41. data/app/models/pass.rb +13 -0
  42. data/app/models/pass_type.rb +16 -0
  43. data/app/models/payment.rb +17 -0
  44. data/app/models/payments/cash_payment.rb +3 -1
  45. data/app/models/payments/check_payment.rb +33 -0
  46. data/app/models/payments/comp_payment.rb +3 -1
  47. data/app/models/payments/credit_card_payment.rb +8 -18
  48. data/app/models/person.rb +27 -3
  49. data/app/models/sale.rb +13 -10
  50. data/app/models/ticket.rb +1 -1
  51. data/app/views/console_sales/_aloha.html.haml +26 -0
  52. data/app/views/console_sales/_cart.html.haml +60 -0
  53. data/app/views/console_sales/_payment.html.haml +111 -0
  54. data/app/views/console_sales/_shows.html.haml +24 -0
  55. data/app/views/console_sales/new.html.haml +143 -0
  56. data/app/views/events/_day_date_show.html.haml +2 -2
  57. data/app/views/events/_ticket_type_fields.html.haml +1 -1
  58. data/app/views/events_pass_types/_form.html.haml +1 -1
  59. data/app/views/events_pass_types/index.html.haml +2 -1
  60. data/app/views/exchanges/new.html.haml +1 -1
  61. data/app/views/imports/people/_new.html.haml +12 -0
  62. data/app/views/kits/_list.html.haml +2 -1
  63. data/app/views/layouts/_menu.html.haml +0 -3
  64. data/app/views/membership_comps/create.html.haml +3 -1
  65. data/app/views/membership_types/_form.html.haml +0 -1
  66. data/app/views/orders/_item_table.haml +5 -3
  67. data/app/views/passes/index.html.haml +2 -2
  68. data/app/views/people/_edit_modal.html.haml +7 -0
  69. data/app/views/people/_work_with_menu.html.haml +4 -1
  70. data/app/views/people/show.html.haml +13 -4
  71. data/app/views/refunds/new.html.haml +1 -1
  72. data/app/views/sales/_boxoffice.html.haml +141 -0
  73. data/app/views/sales/_doorlist.html.haml +79 -0
  74. data/app/views/sales/new.html.haml +33 -125
  75. data/app/views/searches/show.html.haml +1 -1
  76. data/app/views/segments/show.html.haml +1 -1
  77. data/app/views/shows/_ticket_table.html.haml +1 -1
  78. data/app/views/shows/_work_with.html.haml +1 -1
  79. data/app/views/shows/index.html.haml +5 -6
  80. data/app/views/shows/show.html.haml +2 -2
  81. data/config/initializers/devise.rb +1 -1
  82. data/config/initializers/paperclip.rb +16 -0
  83. data/config/routes.rb +10 -1
  84. data/db/migrate/20140507184646_add_bday_attributes_to_person.rb +7 -0
  85. data/db/migrate/20140507201048_add_check_number_to_orders.rb +5 -0
  86. data/db/migrate/20140619194127_add_do_not_call_to_people.artfully_ose_engine.rb +5 -0
  87. data/db/migrate/20140623160543_add_index_to_items.rb +7 -0
  88. data/lib/artfully_ose/engine.rb +5 -4
  89. data/lib/artfully_ose/version.rb +1 -1
  90. data/spec/factories/person_factories.rb +3 -0
  91. metadata +43 -20
@@ -12,5 +12,5 @@
12
12
  %strong=link_to show.datetime_local_to_event.strftime('%l:%M %P'), event_show_path(@event, show)
13
13
  #available="#{show.glance.available_total} tickets available"
14
14
  #show-links
15
- %p=icon_link_to("Door List", door_list_event_show_path(@event, show), 'fa-list', 'btn', '')
16
- %p=icon_link_to("Box Office", new_event_show_sales_path(@event, show), 'fa-shopping-cart', 'btn', '')
15
+ %p=icon_link_to("Door List", new_event_show_sales_path(@event, show, :render => 'doorlist'), 'fa-list', 'btn', '')
16
+ %p=icon_link_to("Box Office", new_event_show_sales_path(@event, show, :render => 'boxoffice'), 'fa-shopping-cart', 'btn', '')
@@ -57,7 +57,7 @@
57
57
  This description will appear on your storefront as well as on patron receipts.
58
58
 
59
59
  .control-group
60
- =f.label :availablity, "Availablity", :class => 'control-label'
60
+ =f.label :visibility, "Visibility", :class => 'control-label'
61
61
  .controls
62
62
  - TicketType.channels_for(current_user.current_organization).each do |channel, icon|
63
63
  =f.check_box channel
@@ -15,7 +15,7 @@
15
15
  .control-group
16
16
  = f.label :ticket_types, "Allowed Ticket Types", :class => 'control-label'
17
17
  .controls
18
- = f.select :ticket_types, options_for_select(@ticket_type_names, @events_pass_type.ticket_types.to_a), {}, {'data-placeholder' => "All Prices", :class => 'input chosen', :multiple => true}
18
+ = f.select :ticket_types, options_for_select(@ticket_type_names, @events_pass_type.ticket_types.to_a), {}, {'data-placeholder' => "Select a Ticket Type", :class => 'input chosen', :multiple => true}
19
19
  .control-group
20
20
  = f.label :excluded_shows, "Excluded Shows", :class => 'control-label'
21
21
  .controls
@@ -33,7 +33,8 @@
33
33
  =link_to ept.pass_type.name, edit_event_events_pass_type_path(@event, ept)
34
34
  %td
35
35
  -if ept.ticket_types.empty?
36
- All Ticket Types
36
+ %strong
37
+ No Ticket Types
37
38
  -else
38
39
  - ept.ticket_types.each do |ticket_type|
39
40
  =ticket_type
@@ -75,7 +75,7 @@
75
75
 
76
76
  - unless @ticket_type.nil?
77
77
  .center
78
- = submit_tag "Confirm Exchange", :class => "btn btn-large btn-primary"
78
+ = submit_tag "Confirm Exchange", :class => "btn btn-large btn-primary", :disable_with => "Exchanging..."
79
79
 
80
80
  - content_for :custom_js do
81
81
  :javascript
@@ -92,9 +92,21 @@
92
92
  %tr
93
93
  %td.field-slim LinkedIn
94
94
  %td The person's web address on LinkedIn
95
+ %tr
96
+ %td.field-slim Birth month
97
+ %td The person's birth month (April, Apr, or 4)
98
+ %tr
99
+ %td.field-slim Birth day
100
+ %td The person's birth day
101
+ %tr
102
+ %td.field-slim Birth year
103
+ %td The person's birth year
95
104
  %tr
96
105
  %td.field-slim Do Not Email
97
106
  %td Indicate that this person is not to receive email communication from your organization. Use "true" in this column if the person should not be emailed. This is for your organization's internal use only. The person will still receive purchase and donation receipts from Artful.ly.
107
+ %tr
108
+ %td.field-slim Do Not Call
109
+ %td Indicate that this person is not to receive phone communication from your organization. Use "true" in this column if the person should not be called. This is for your organization's internal use only.
98
110
  %tr
99
111
  %td.field-slim Tags
100
112
  %td
@@ -5,4 +5,5 @@
5
5
  %ul
6
6
  %li Paid Ticketing
7
7
  %li People
8
- %li= link_to "Membership", [:edit, @organization.membership_kit], :id => "configure_#{@organization.membership_kit.type.underscore}"
8
+ %li= link_to "Membership", [:edit, @organization.membership_kit], :id => "configure_#{@organization.membership_kit.type.underscore}"
9
+ %li= link_to "Passes", [:edit, @organization.passes_kit], :id => "configure_#{@organization.passes_kit.type.underscore}"
@@ -20,15 +20,12 @@
20
20
  %li= link_to "List Segments", segments_path
21
21
  %li= link_to "Import", new_import_path(:type => :people)
22
22
  %li= link_to "Export", imports_path
23
- %li= link_to "Suggested Households", suggested_households_path
24
23
 
25
24
  %li{ :class => "dropdown #{active?(:reports)}" }
26
25
  = nav_dropdown "Reports"
27
26
  %ul.dropdown-menu
28
27
  %li= link_to "Statements", statements_path
29
28
  %li= link_to "Discounts", discounts_reports_path
30
- %li= link_to "Members", "#"
31
- %li= link_to "Passes", passes_reports_path
32
29
  %li= link_to "Imports / Exports", imports_path
33
30
 
34
31
  %li{ :class => "dropdown #{active?(:transactions)}"}
@@ -13,6 +13,8 @@
13
13
  .center
14
14
  .bottom-room
15
15
  %h3 Where to?
16
- .bottom-room=link_to "Member Dashboard", "#", :class => "btn btn-large", :style => "Width: 200px"
16
+ -if @membership_comp.people.length == 1
17
+ .bottom-room=link_to "View This Patron", person_path(@membership_comp.people.first), :class => "btn btn-large", :style => "Width: 200px"
17
18
  .bottom-room=link_to "Home Dashboard", root_path, :class => "btn btn-large", :style => "Width: 200px"
19
+ .bottom-room=link_to "People Search", people_path, :class => "btn btn-large", :style => "Width: 200px"
18
20
  .bottom-room=link_to "Advanced Search", new_search_path, :class => "btn btn-large", :style => "Width: 200px"
@@ -78,7 +78,6 @@
78
78
  %span.label.label-success
79
79
  Advanced
80
80
  This is the number of memberships a patron can purchase in a single transaction. If you're not sure what this means, leave it set to 1.
81
- =link_to "More", "https://artfully.zendesk.com/entries/64035707-How-many-memberships-should-I-allow-a-patron-to-buy", :target => "_blank"
82
81
  .span9
83
82
  = f.select :limit_per_transaction, (1..10), {}, :class => "span2"
84
83
  .form-actions
@@ -14,8 +14,8 @@
14
14
  %th Event
15
15
  %th Show Date
16
16
  %th Price Paid
17
- %th Discount / Pass
18
- %th
17
+ %th Discount/Pass
18
+ %th Status
19
19
  %tbody
20
20
  - order.all_items.each do |item|
21
21
  %tr{:id => "row_item_#{item.id}", :class => item.state}
@@ -37,8 +37,10 @@
37
37
  %span Donation
38
38
  - if item.product_type.eql?("Membership")
39
39
  %span=item.product.membership_type.name
40
+ - if item.product_type.eql?("Pass")
41
+ %span=item.product.pass_type.passerize
40
42
  %td= link_to item.product.event.name, event_path(item.product.event) if item.product_type.eql?("Ticket")
41
- %td= link_to item.product.show.datetime.strftime("%m/%d/%Y"), event_show_path(item.product.event, item.product.show) if item.product_type.eql?("Ticket")
43
+ %td= link_to item.product.show.parsed_local_datetime.strftime("%m/%d/%Y"), event_show_path(item.product.event, item.product.show) if item.product_type.eql?("Ticket")
42
44
  %td.price= amount_and_nongift item
43
45
  %td
44
46
  =item.discount.try(:code) || item.pass.try(:pass_type).try(:name)
@@ -46,8 +46,8 @@
46
46
  - if @expired_passes.length > 0
47
47
  %tr
48
48
  %td{:colspan => 7}
49
- = link_to "See #{@expired_count} lapsed & expired memberships", '#', 'ng-show' => '!scope.showExpired', 'ng-click' => 'scope.showExpired = true'
50
- = link_to "Hide #{@expired_count} lapsed & expired memberships", '#', 'ng-show' => 'scope.showExpired', 'ng-click' => 'scope.showExpired = false'
49
+ = link_to "See #{@expired_count} lapsed & expired passes", '#', 'ng-show' => '!scope.showExpired', 'ng-click' => 'scope.showExpired = true'
50
+ = link_to "Hide #{@expired_count} lapsed & expired passes", '#', 'ng-show' => 'scope.showExpired', 'ng-click' => 'scope.showExpired = false'
51
51
 
52
52
  - @expired_passes.each do |pass|
53
53
  %tr{'ng-show' => 'scope.showExpired', 'ng-style' => 'scope.expiredStyle'}
@@ -60,6 +60,13 @@
60
60
  .controls
61
61
  = form.label :email, :class => 'control-label'
62
62
  .control= form.text_field :email
63
+ .controls.control-label Birthday
64
+ .year{:data => { 'person-birth_year' => @person.birth_year }}
65
+ .day{:data => { 'person-birth_day' => @person.birth_day }}
66
+ .control
67
+ = form.select :birth_month, [["January", 1], ["February", 2], ["March", 3], ["April", 4], ["May", 5], ["June", 6], ["July", 7], ["August", 8], ["September", 9], ["October", 10], ["November", 11], ["December", 12]], { :include_blank => true }, { :class => 'span2', :id => 'birth_month' }
68
+ = form.select :birth_day, [], { :include_blank => true }, { :class => 'span1', :id => 'birth_day' }
69
+ = form.select :birth_year, [], { :include_blank => true }, { :class => 'span1', :id => 'birth_year' }
63
70
  - if @person.individual? && @person.member.nil?
64
71
  .controls
65
72
  - unless except.include? :convert
@@ -2,7 +2,7 @@
2
2
  =icon_link_to('Work with...', "#menu#bulkactions", 'fa-asterisk', 'dropdown-toggle dropdown btn', '')
3
3
 
4
4
  %ul.dropdown-menu
5
- %li= link_to "Edit #{@person.possessive} Info", '#edit-person', 'data-toggle' => 'modal'
5
+ %li= link_to "Edit #{@person.possessive} Info", '#edit-person', 'data-toggle' => 'modal', :id => "edit_link"
6
6
  -with_kit (:membership) do
7
7
  -if person.email.blank? || person.company?
8
8
  %li= link_to "Comp Membership", "#comp-membership", 'data-toggle' => 'modal'
@@ -17,9 +17,12 @@
17
17
  %li= link_to "View Passes", person_passes_path(@person)
18
18
 
19
19
  %li= link_to "Merge", new_merge_path(:loser => person.id)
20
+
20
21
  - if @person.destroyable?
21
22
  %li= link_to "Delete", @person, :method => :delete, :confirm => "Are you sure you want to delete #{@person}?"
22
23
 
24
+ %li= link_to "Sell To", new_console_sale_path(:person_id => person.id)
25
+
23
26
  -if person.email.blank? || person.company?
24
27
  -with_kit (:membership) do
25
28
  #comp-membership.modal
@@ -55,20 +55,29 @@
55
55
  %span.muted
56
56
  == #{Relation.find(group[:relation]).description.titleize.pluralize} (#{group[:count]}) #{link_to("View All", polymorphic_url([@person, :relationships], :relation_id => group[:relation]))} >
57
57
 
58
- %section#email-subscription
59
- %h5 Email Lists
58
+ %h5 Preferences
59
+ %section#communication-preference
60
60
  = form_for @person do |form|
61
+ .do-not-call
62
+ = form.label :do_not_call, :class => "checkbox" do
63
+ = form.check_box :do_not_call
64
+ %span Do Not Call
61
65
  .do-not-email
62
66
  = form.label :do_not_email, :class => "checkbox" do
63
- = form.check_box :do_not_email, :class => "checkbox"
67
+ = form.check_box :do_not_email
64
68
  %span Do Not Email
69
+ = form.submit "Save", :class => 'btn btn-primary hidden'
70
+
71
+ %h5 Email Lists
72
+ %section#subscription-listing
73
+ = form_for @person do |form|
65
74
  - if @person.organization.kits.mailchimp
66
75
  .mailchimp-list
67
76
  - mailchimp_kit = @person.organization.kits.mailchimp
68
77
  = hidden_field_tag "person[subscribed_lists][]", nil, :id => "person_subscribed_lists_empty"
69
78
  - mailchimp_kit.attached_lists.each do |list|
70
79
  = label_tag "", :class => "checkbox" do
71
- = check_box_tag "person[subscribed_lists][]", list[:list_id], @person.subscribed_lists.include?(list[:list_id]), :class => "checkbox mail-chimp-list", :disabled => @person.do_not_email
80
+ = check_box_tag "person[subscribed_lists][]", list[:list_id], @person.subscribed_lists.include?(list[:list_id]), :class => "mail-chimp-list", :disabled => @person.do_not_email
72
81
  %span= list[:list_name]
73
82
  = form.submit "Save", :class => 'btn btn-primary hidden'
74
83
 
@@ -57,4 +57,4 @@
57
57
  ="Put these tickets back on sale."
58
58
 
59
59
  %p
60
- = submit_tag "Issue Refund ", :class => "btn"
60
+ = submit_tag "Issue Refund", :class => "btn", :id => "issue-refund-button", :disable_with => "Refunding..."
@@ -0,0 +1,141 @@
1
+ = form_tag event_show_sales_path, :class => 'boxoffice-form' do |f|
2
+ .row
3
+ .span2
4
+ %h6.padded-left 1. Tickets
5
+ .span10
6
+ .ticket-list
7
+ // unavailable tickets at the bottom
8
+ - @sale.ticket_types.sort_by { |t| -@tickets_remaining[t.id] }.each do |ticket_type|
9
+ .ticket{:class => ('unavailable' if @tickets_remaining[ticket_type.id] < 1), 'data-ticket-id' => ticket_type.id}
10
+ %a.ticket-quantity-button.subtract -
11
+ = number_field_tag "quantities[#{ticket_type.id}]", 0, :class => 'ticket-quantity', 'data-remaining' => @tickets_remaining[ticket_type.id], 'data-ticket-price' => number_to_dollars(ticket_type.price), :disabled => (@tickets_remaining[ticket_type.id] < 1)
12
+ %a.ticket-quantity-button.add +
13
+ %span.lead.ticket-type
14
+ %strong= ticket_type.name
15
+ = number_as_cents(ticket_type.price, cents_if_needed:true)
16
+ %span.muted
17
+ (#{content_tag :span, @tickets_remaining[ticket_type.id], :class => 'remaining', 'data-ticket-id' => ticket_type.id} remaining)
18
+
19
+ - if @event.organization.authorization_hash[:authorized]
20
+ .ticket
21
+ .input-prepend
22
+ %span.add-on $
23
+ = number_field_tag 'donation', nil, :placeholder => '0.00', :id => 'order-donation', :class => 'order-donation'
24
+ %span.lead
25
+ %strong
26
+ Donation
27
+
28
+ - if Discount.where(event_id:@event.id).any?
29
+ .discount
30
+ .ticket
31
+ .input
32
+ = text_field_tag 'discount', nil, :id => 'order-discount', :class => 'order-discount'
33
+ %span.lead
34
+ %strong
35
+ Discount Code
36
+
37
+ .ticket
38
+ .input
39
+ %span.lead.message
40
+
41
+ #order-total
42
+ %h3
43
+ .loading.hide
44
+ #{image_tag('loading.gif')} calculating total...
45
+ .message
46
+ $0.00 Total
47
+ = hidden_field_tag 'total'
48
+ .row.row-blue-padded
49
+ .span2
50
+ .row-blue-padded-left
51
+ %h6 2. Payment
52
+ .span10
53
+ .control-group
54
+ .btn-toolbar.payment-select
55
+ .btn-group
56
+ %a.btn{'data-payment-select' => 'cash'}
57
+ Cash
58
+ %a.btn{'data-payment-select' => 'credit'}
59
+ Credit
60
+ %a.btn{'data-payment-select' => 'check'}
61
+ Check
62
+ %a.btn{'data-payment-select' => 'comp'}
63
+ Comp
64
+ = hidden_field_tag 'payment_method'
65
+ #credit-fields.payment-fields{:style => 'display:none;'}
66
+ .control-group
67
+ %label
68
+ Card Number
69
+ %span.muted.required (required)
70
+ .controls= text_field_tag("credit_card[number]", params[:credit_card][:card_number], :placeholder => "XXXX-XXXX-XXXX-XXXX", :class => 'input-medium credit_card_number')
71
+ .control-group
72
+ %label
73
+ Card Expiration
74
+ %span.muted.required (required)
75
+ .date_field.controls
76
+ = select_tag("credit_card[month]", options_for_select(1..12, params[:credit_card]["month"]), :class => 'input-small inline')
77
+ = select_tag("credit_card[year]", options_for_select(Time.now.year..Time.now.year + 10, params[:credit_card]["year"]), :class => 'input-small inline')
78
+ #check-fields.payment-fields{:style => 'display:none;'}
79
+ .control-group
80
+ = label_tag("check[number]", "Check Number")
81
+ .controls= text_field_tag("check[number]", params[:check].try([:number]), :class => 'input-medium')
82
+
83
+ .row
84
+ .span2
85
+ %h6.padded-left 3. Buyer Info
86
+ .span10
87
+ #user-info
88
+ #existing-user-popover
89
+ = hidden_field_tag(:person_id, "", :name => "person[id]")
90
+ .control-group
91
+ %label
92
+ First Name
93
+ %span.muted.required.name-required{:style => 'display:none;'} (required)
94
+ .controls
95
+ = text_field_tag(:person_first_name, "", :id => "person_first_name", :name => "person[first_name]", :placeholder => "First name", :class => 'person_first_name')
96
+ .control-group
97
+ %label
98
+ Last Name
99
+ %span.muted.required.name-required{:style => 'display:none;'} (required)
100
+ .controls
101
+ = text_field_tag(:person_last_name, "", :id => "person_last_name", :name => "person[last_name]", :placeholder => "Last name", :class => 'person_last_name')
102
+ .control-group
103
+ %label
104
+ Email
105
+ %span.muted.required.contact-required{:style => 'display:none;'} (required or phone)
106
+ .controls= email_field_tag(:person_email, "", :id => "person_email", :name => "person[email]", :placeholder => "example@email.com", :class => 'person_email')
107
+ .control-group
108
+ %label
109
+ Phone Number
110
+ %span.muted.required.contact-required{:style => 'display:none;'} (required or email)
111
+ .controls
112
+ = text_field_tag(:person_phone, "", :id => "person_phone", :name => "person[phones_attributes][][number]", :placeholder => "(XXX) XXX-XXXX", :class => 'person_phone')
113
+ .control-group
114
+ %label
115
+ Order Notes
116
+ %span.muted.required
117
+ .controls= text_area_tag(:order_notes, "", :id => "order_notes", :name => "order_notes")
118
+
119
+ .row.row-blue-padded
120
+ .span2
121
+ .row-blue-padded-left
122
+ %h6 4. Check in
123
+ .span10
124
+ .control-group
125
+ %label.checkbox
126
+ = check_box_tag "auto_check_in"
127
+ Mark tickets as received on doorlist.
128
+
129
+ .row
130
+ .span10.offset2
131
+ = submit_tag 'Checkout', :class => 'btn btn-large', :disabled => 'disabled', :id => 'checkout-now-button'
132
+
133
+ #submit-confirmation.modal.hide.fade
134
+ .modal-header
135
+ %button.close.modal-close.hide{'type' => 'button', 'data-dismiss' => 'modal'} x
136
+ %h3 Processing...
137
+ .modal-body
138
+ .loading= image_tag('loading.gif')
139
+ .content
140
+ .modal-footer
141
+ %button.btn.btn-primary.modal-close.hide{'data-dismiss' => 'modal'} Close
@@ -0,0 +1,79 @@
1
+ .row.row-blue-padded
2
+ .span4.relative
3
+ .row-blue-padded-left
4
+ .progress.progress-doorlist
5
+ .bar.bar-doorlist
6
+ .span8
7
+ .row-blue-padded-right
8
+ .btn-group.download-door-list
9
+ %a.btn.dropdown-toggle{'data-toggle' => 'dropdown', 'href' => '#'}
10
+ %i.fa.fa-arrow-circle-down
11
+ Download Door List
12
+ %ul.dropdown-menu
13
+ %li= link_to 'CSV Download', door_list_event_show_path(@event, @show, :format => :csv)
14
+ %li= link_to 'PDF Download', door_list_event_show_path(@event, @show, :format => :pdf)
15
+ %span.search-container
16
+ = search_field_tag :live_search, nil, :placeholder => 'Search Door List', :class => 'span7', :class => 'search-doorlist'
17
+
18
+ .row
19
+ .span4.relative
20
+ #buyer-details
21
+ .span8
22
+ #door-list-table
23
+ %table#door-list.table
24
+ %tbody
25
+ - tickets_grouped_by_buyer = @door_list.items.group_by {|i| i.buyer }.sort_by { |buyer, door_list_items| door_list_sort(buyer) }
26
+ - tickets_grouped_by_buyer.each do |buyer, door_list_items|
27
+ - special_instructions = door_list_grouped_attribute(door_list_items, :special_instructions)
28
+ - order_notes = door_list_grouped_attribute(door_list_items, :notes)
29
+ %tr.buyer{'data-buyer-id' => buyer.id, :id => "buyer-#{buyer.id}", 'data-search-blob' => "#{buyer.first_name} #{buyer.last_name} #{special_instructions} #{order_notes}"}
30
+ %td
31
+ %h4
32
+ - if door_list_items.select {|d| !d.ticket.validated? }.empty?
33
+ %i.remaining-ticket-indicator.fa.fa-circle
34
+ - elsif door_list_items.select {|d| d.ticket.validated? }.any?
35
+ %i.remaining-ticket-indicator.fa.fa-adjust
36
+ - else
37
+ %i.remaining-ticket-indicator.fa.fa-circle-o
38
+ = door_list_name_and_company(buyer)
39
+ - if special_instructions.present? || order_notes.present?
40
+ %i.fa.fa-file
41
+ %td.buyer-ticket-count
42
+ %strong= door_list_items.length
43
+ ticket#{'s' unless door_list_items.length == 1}
44
+ %td.buyer-total
45
+ - amount = door_list_items.map {|d| d.ticket.sold_price }.inject(:+)
46
+ = number_as_cents(amount, cents_if_needed:true)
47
+ %br
48
+ = door_list_items.map {|d| d.payment_method }.uniq.to_sentence
49
+ .buyer-details-hidden{:style => 'display:none;', :id => "buyer-details-#{buyer.id}"}
50
+ %h1= link_to buyer.to_s, buyer
51
+ .content
52
+ %ul
53
+ - door_list_items.sort_by {|d| d.ticket.ticket_type }.each do |door_list_item|
54
+ %li
55
+ %p
56
+ %label.lead
57
+ = check_box_tag "validated", "validated", door_list_item.ticket.validated, :class => 'door-list-checkbox', 'data-ticket-id' => door_list_item.ticket.id, 'data-buyer-id' => buyer.id
58
+ %strong
59
+ = door_list_item.ticket.ticket_type.name
60
+ = number_as_cents(door_list_item.ticket.sold_price, cents_if_needed:true)
61
+ = door_list_item.payment_method
62
+ %p
63
+ -# We don't modify tickets after the show date, so there's the posibility that the
64
+ -# ticket can be refunded after the show. The ticket remains "sold" but has no sold_item
65
+ -# and it appears to the door list that it has no order. This is why we
66
+ -# .select on the end of this statement.
67
+ - order_ids = door_list_items.collect(&:order_id).uniq.select{|order| order.present?}
68
+ %strong.muted Order#{'s' if order_ids.count > 1}:
69
+ = safe_join(order_ids.map{|o| link_to o, order_path(o)}, ', ')
70
+
71
+ - if special_instructions.present?
72
+ %p
73
+ %strong.muted Special Instructions:
74
+ = special_instructions
75
+
76
+ - if order_notes.present?
77
+ %p
78
+ %strong.muted Notes:
79
+ = order_notes