artfully_ose 1.2.0.pre.19 → 1.2.0.pre.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +28 -0
- data/app/assets/javascripts/change-membership.js +66 -16
- data/app/assets/javascripts/store/store.js +4 -0
- data/app/assets/stylesheets/sass/store.sass +2 -0
- data/app/{models/carts → concerns}/cart_finder.rb +0 -0
- data/app/{models/actions → concerns}/immutable_action.rb +0 -0
- data/app/concerns/pdf_generation.rb +71 -0
- data/app/{models/orders → concerns}/unrefundable.rb +0 -0
- data/app/controllers/export_controller.rb +1 -5
- data/app/controllers/imports_controller.rb +12 -0
- data/app/controllers/members/index_controller.rb +1 -1
- data/app/controllers/members/members_controller.rb +6 -1
- data/app/controllers/members/passwords_controller.rb +10 -0
- data/app/controllers/members/people_controller.rb +17 -0
- data/app/controllers/membership_cancellations_controller.rb +46 -0
- data/app/controllers/membership_comps_controller.rb +97 -0
- data/app/controllers/membership_types_controller.rb +6 -2
- data/app/controllers/people_controller.rb +15 -3
- data/app/controllers/sales_controller.rb +4 -0
- data/app/controllers/searches_controller.rb +2 -2
- data/app/controllers/sections_controller.rb +1 -1
- data/app/controllers/shows_controller.rb +52 -3
- data/app/controllers/store/checkouts_controller.rb +2 -7
- data/app/controllers/store/memberships_controller.rb +2 -1
- data/app/helpers/artfully_ose_helper.rb +4 -3
- data/app/mailers/order_mailer.rb +3 -3
- data/app/models/actions/comp_action.rb +15 -0
- data/app/models/address.rb +7 -0
- data/app/models/{carts/cart.rb → cart.rb} +0 -19
- data/app/models/checkout.rb +53 -15
- data/app/models/comp.rb +21 -11
- data/app/models/database_views/item_view.rb +4 -0
- data/app/models/event.rb +1 -0
- data/app/models/{ext/ext.rb → ext.rb} +14 -1
- data/app/models/ext/preprocessor.rb +6 -0
- data/app/models/job/order_processor.rb +6 -3
- data/app/models/job/show_creator.rb +6 -2
- data/app/models/kit.rb +1 -1
- data/app/models/kits/membership_kit.rb +8 -1
- data/app/models/kits/scannable_tickets_kit.rb +24 -0
- data/app/models/member.rb +59 -13
- data/app/models/membership.rb +2 -14
- data/app/models/membership_cancellation.rb +80 -0
- data/app/models/membership_comp.rb +103 -0
- data/app/models/membership_comp_job.rb +32 -0
- data/app/models/membership_type.rb +3 -3
- data/app/models/{orders/order.rb → order.rb} +8 -2
- data/app/models/orders/comp_order.rb +4 -0
- data/app/models/organization.rb +5 -1
- data/app/models/{payments/payment.rb → payment.rb} +12 -1
- data/app/models/payments/credit_card_payment.rb +36 -5
- data/app/models/person.rb +11 -1
- data/app/models/rolling_membership_type.rb +3 -1
- data/app/models/sale.rb +1 -1
- data/app/models/search.rb +1 -6
- data/app/models/seasonal_membership_type.rb +1 -0
- data/app/models/ticket.rb +2 -0
- data/app/models/ticket/qr_code.rb +1 -1
- data/app/models/ticket/transfers.rb +6 -3
- data/app/models/ticket_type.rb +6 -0
- data/app/models/user.rb +2 -1
- data/app/views/addresses/_address.html.haml +7 -6
- data/app/views/events/_ticket_type_fields.html.haml +2 -2
- data/app/views/imports/index.html.haml +2 -1
- data/app/views/layouts/_menu.html.haml +3 -2
- data/app/views/layouts/storefront.html.haml +17 -13
- data/app/views/members/index/index.html.haml +5 -11
- data/app/views/members/invitations/edit.html.haml +17 -0
- data/app/views/members/mailer/_invitation_body.html.haml +18 -0
- data/app/views/members/mailer/invitation_instructions.html.haml +6 -12
- data/app/views/members/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/members/passwords/edit.html.haml +18 -0
- data/app/views/members/sessions/new.html.haml +19 -0
- data/app/views/membership_cancellations/_form.html.haml +39 -0
- data/app/views/membership_cancellations/_modal.html.haml +2 -0
- data/app/views/membership_cancellations/_processing.html.haml +14 -0
- data/app/views/membership_cancellations/create.js.erb +3 -0
- data/app/views/membership_cancellations/new.js.erb +3 -0
- data/app/views/membership_comps/confirm.html.haml +85 -0
- data/app/views/membership_comps/create.html.haml +18 -0
- data/app/views/membership_comps/new.html.haml +82 -0
- data/app/views/membership_mailer/cancellation_confirmation.html.haml +9 -0
- data/app/views/membership_mailer/cancellation_confirmation.text.haml +6 -0
- data/app/views/membership_mailer/refund_problem.html.haml +18 -0
- data/app/views/membership_mailer/refund_problem.text.haml +14 -0
- data/app/views/membership_types/_form.html.haml +18 -53
- data/app/views/membership_types/_membership_type_fees.html.haml +0 -0
- data/app/views/membership_types/index.html.haml +1 -5
- data/app/views/memberships/_membership_scripts.js.erb +15 -0
- data/app/views/memberships/index.html.haml +18 -17
- data/app/views/order_mailer/confirmation_for.html.haml +8 -0
- data/app/views/orders/_order_sidebar.html.haml +1 -3
- data/app/views/organizations/_form.html.haml +6 -0
- data/app/views/pdfs/member.html.haml +66 -0
- data/app/views/pdfs/order.html.haml +84 -0
- data/app/views/people/_comp_membership.html.haml +23 -0
- data/app/views/people/_edit_modal.html.haml +6 -3
- data/app/views/people/show.html.haml +1 -2
- data/app/views/searches/_form.html.haml +34 -33
- data/app/views/searches/show.html.haml +4 -1
- data/app/views/segments/show.html.haml +4 -1
- data/app/views/shows/_ticket_table.html.haml +1 -1
- data/app/views/shows/index.html.haml +8 -2
- data/app/views/store/checkouts/_membership_info.html.haml +1 -0
- data/app/views/store/checkouts/thanks.html.haml +7 -3
- data/app/views/store/events/index.html.haml +9 -3
- data/app/views/store/events/single_show.html.haml +4 -1
- data/app/views/store/memberships/index.html.haml +2 -1
- data/app/views/store/orders/show.html.haml +2 -2
- data/config/initializers/devise.rb +1 -1
- data/config/initializers/paperclip.rb +39 -0
- data/config/locales/devise_invitable.en.yml +1 -1
- data/config/locales/en.yml +9 -0
- data/config/routes.rb +14 -7
- data/db/migrate/20131223215615_goodbye_order_view.rb +6 -0
- data/db/migrate/20140114011856_add_welcome_message_to_memberships.rb +5 -0
- data/db/migrate/20140114212127_add_send_email_to_memberships.rb +5 -0
- data/db/migrate/20140125183606_index_memberships_and_types.rb +6 -0
- data/db/migrate/20140128213101_add_pdf_to_members.rb +5 -0
- data/db/migrate/20140128223140_add_uuid_to_member.rb +6 -0
- data/db/migrate/20140128223948_add_qr_code_to_member.rb +9 -0
- data/lib/artfully_ose/common_abilities.rb +1 -1
- data/lib/artfully_ose/engine.rb +23 -2
- data/lib/artfully_ose/version.rb +1 -1
- data/spec/factories/action_factories.rb +19 -0
- data/spec/factories/address_factories.rb +11 -0
- data/spec/factories/cart_factories.rb +26 -0
- data/spec/factories/chart_factories.rb +52 -0
- data/spec/factories/discount_factories.rb +11 -0
- data/spec/factories/donation_factories.rb +14 -0
- data/spec/factories/event_factories.rb +29 -0
- data/spec/factories/import_factories.rb +61 -0
- data/spec/factories/item_factories.rb +51 -0
- data/spec/factories/kit_factories.rb +27 -0
- data/spec/factories/member_factories.rb +19 -0
- data/spec/factories/membership_factories.rb +8 -0
- data/spec/factories/membership_type_factories.rb +18 -0
- data/spec/factories/order_factories.rb +40 -0
- data/spec/factories/organization_factories.rb +44 -0
- data/spec/factories/payments_factories.rb +97 -0
- data/spec/factories/person_factories.rb +44 -0
- data/spec/factories/phone_factories.rb +6 -0
- data/spec/factories/section_factories.rb +21 -0
- data/spec/factories/segment_factories.rb +6 -0
- data/spec/factories/show_factories.rb +33 -0
- data/spec/factories/ticket_factories.rb +57 -0
- data/spec/factories/ticket_offer_factories.rb +16 -0
- data/spec/factories/ticket_type_factories.rb +8 -0
- data/spec/factories/user_factories.rb +24 -0
- metadata +75 -17
- data/app/controllers/membership_awards_controller.rb +0 -60
- data/app/models/database_views/order_view.rb +0 -34
- data/app/models/membership_award.rb +0 -24
- data/app/models/orders/pdf_generation.rb +0 -75
- data/app/views/members/invitations/edit.html.erb +0 -14
- data/app/views/membership_awards/confirm.html.haml +0 -105
- data/app/views/membership_awards/create.html.haml +0 -1
- data/app/views/membership_awards/new.html.haml +0 -79
@@ -0,0 +1,14 @@
|
|
1
|
+
="Refund Failed"
|
2
|
+
="-------------"
|
3
|
+
|
4
|
+
Order number: #{@order.id}
|
5
|
+
Refund total: -$#{format("%.2f", @amount)}
|
6
|
+
|
7
|
+
- unless @items.empty?
|
8
|
+
There was a problem while attempting to issue a refund for these memberships:
|
9
|
+
|
10
|
+
- @items.each do |item|
|
11
|
+
=" * #{item.product.membership_type.name}"
|
12
|
+
|
13
|
+
Message:
|
14
|
+
=" #{@message}"
|
@@ -5,12 +5,12 @@
|
|
5
5
|
.control-group
|
6
6
|
= f.label :name, "Name", :class => 'control-label'
|
7
7
|
.controls
|
8
|
-
= f.text_field :name, :class => 'input'
|
8
|
+
= f.text_field :name, :class => 'input span6'
|
9
9
|
.control-group
|
10
10
|
= f.label :description, "Description", :class => 'control-label'
|
11
11
|
.controls
|
12
|
-
= f.text_area :description, :rows => "5"
|
13
|
-
.control-group
|
12
|
+
= f.text_area :description, :rows => "5", :class => "span6"
|
13
|
+
.control-group{:style => "display: none"}
|
14
14
|
= f.label :number_of_tickets, "Number of Tickets", :class => 'control-label'
|
15
15
|
.controls
|
16
16
|
= f.text_field :number_of_tickets, :class => "span1"
|
@@ -21,14 +21,7 @@
|
|
21
21
|
.control-group
|
22
22
|
= f.label :price, "Price", :class => 'control-label'
|
23
23
|
.controls
|
24
|
-
= f.text_field :price, :class => '
|
25
|
-
|
26
|
-
.control-group
|
27
|
-
=f.label :hide_fee, "Hide service fee?", :class => 'control-label'
|
28
|
-
.controls
|
29
|
-
= f.select :hide_fee, options_for_select([["Yes", true], ["No", false]]), {}, :class => 'span1'
|
30
|
-
%br
|
31
|
-
=link_to "Learn more", "#pricing-example", "data-toggle" => "modal"
|
24
|
+
= f.text_field :price, :class => 'span2 section-price currency'
|
32
25
|
|
33
26
|
.control-group
|
34
27
|
= f.label :offer_renewal, "Offer renewal price?", :class => 'control-label'
|
@@ -39,55 +32,24 @@
|
|
39
32
|
.control-group#renewal-price-group
|
40
33
|
= f.label :renewal_price, "Renewal Price", :class => 'control-label'
|
41
34
|
.controls
|
42
|
-
= f.text_field :renewal_price, :class => '
|
43
|
-
|
44
|
-
#pricing-example.modal
|
45
|
-
.modal-header
|
46
|
-
.close{'data-dismiss'=>'modal'} x
|
47
|
-
%h3 Pricing Example
|
48
|
-
.modal-body
|
49
|
-
%table.table.table-compact
|
50
|
-
%tr
|
51
|
-
%th
|
52
|
-
%th.right Hidden fee
|
53
|
-
%th.right Shown fee
|
54
|
-
%tr
|
55
|
-
%td Membership price
|
56
|
-
%td.right $100
|
57
|
-
%td.right $100
|
58
|
-
%tr
|
59
|
-
%td Patron pays
|
60
|
-
%td.right $100
|
61
|
-
%td.right $100 + 5% service = $105
|
62
|
-
%tr
|
63
|
-
%td You receive
|
64
|
-
%td.right
|
65
|
-
$100
|
66
|
-
%br
|
67
|
-
="- 5% service"
|
68
|
-
%br
|
69
|
-
="- 3.5% processing"
|
70
|
-
%br
|
71
|
-
="$91.68"
|
72
|
-
%td.right $100 - 3.5% processing = $96.5
|
73
|
-
.modal-footer
|
74
|
-
= button_tag "Close", :class => "btn", 'data-dismiss' => 'modal'
|
35
|
+
= f.text_field :renewal_price, :class => 'span2 section-price currency'
|
75
36
|
|
37
|
+
=render :partial => "membership_type_fees", :locals => {:f => f}
|
76
38
|
|
77
|
-
/ .control-group
|
78
|
-
/ = f.label :fee, "Member Fee", :class => 'control-label'
|
79
|
-
/ .controls
|
80
|
-
/ = f.text_field :fee, :class => 'input-small section-price currency'
|
81
39
|
%fieldset
|
82
40
|
%legend Storefront Copy
|
83
41
|
.control-group
|
84
|
-
= f.label :thanks_copy,
|
42
|
+
= f.label :thanks_copy, :class => 'control-label' do
|
43
|
+
Thanks Message
|
44
|
+
.tip.muted Thanks message will appear on the confirmation page after the patron completes purchase of the membership
|
85
45
|
.controls
|
86
|
-
= f.text_area :thanks_copy, :rows => "5"
|
46
|
+
= f.text_area :thanks_copy, :rows => "5", :class => "span6"
|
87
47
|
.control-group
|
88
|
-
= f.label :invitation_email_text_copy,
|
48
|
+
= f.label :invitation_email_text_copy, :class => 'control-label' do
|
49
|
+
Email Message
|
50
|
+
.tip.muted Email message will appear in the email confirming the patron's membership
|
89
51
|
.controls
|
90
|
-
= f.text_area :invitation_email_text_copy, :rows => "5"
|
52
|
+
= f.text_area :invitation_email_text_copy, :rows => "5", :class => "span6"
|
91
53
|
|
92
54
|
%fieldset
|
93
55
|
%legend Sales
|
@@ -101,7 +63,10 @@
|
|
101
63
|
= f.text_field :sales_end_at, :value => "#{(l @membership_type.sales_end_at, :format => :date_for_input) unless @membership_type.sales_end_at.nil?}", :class => :datepicker
|
102
64
|
|
103
65
|
.control-group
|
104
|
-
= f.label :on_sale,
|
66
|
+
= f.label :on_sale, :class => 'control-label' do
|
67
|
+
Show On Storefront
|
68
|
+
.tip.muted If checked, this will be available on your
|
69
|
+
=link_to "Membership Storefront", store_memberships_path(current_user.current_organization.cached_slug), :target => "_blank"
|
105
70
|
.controls
|
106
71
|
%label
|
107
72
|
= f.check_box :on_sale
|
File without changes
|
@@ -6,14 +6,12 @@
|
|
6
6
|
=icon_link_to("New Membership Type", new_membership_type_path, 'icon-plus', 'btn','')
|
7
7
|
=link_to "Download CSV", membership_types_path(:format => "csv"), :class => "btn"
|
8
8
|
|
9
|
-
%table.table
|
9
|
+
%table.table#membership-types-table
|
10
10
|
%tr
|
11
11
|
%th Name
|
12
12
|
%th.right # Sold
|
13
13
|
%th.right Members
|
14
|
-
%th.right Tickets
|
15
14
|
%th.right Price
|
16
|
-
%th.right Fee
|
17
15
|
%th.right Visibility
|
18
16
|
%th.right
|
19
17
|
-@membership_types.each do |membership_type|
|
@@ -21,9 +19,7 @@
|
|
21
19
|
%td=link_to membership_type.name, edit_membership_type_path(membership_type)
|
22
20
|
%td.right=membership_type.memberships.count
|
23
21
|
%td.right=link_to membership_type.members.count, segment_path(membership_type.segment)
|
24
|
-
%td.right=membership_type.number_of_tickets || "unlimited"
|
25
22
|
%td.right=number_as_cents membership_type.price
|
26
|
-
%td.right=number_as_cents membership_type.fee
|
27
23
|
%td.right
|
28
24
|
%a{:href => "#", :class => "artfully-tooltip", :rel => "tooltip", "data-original-title" => "This membership is currently #{"not" unless membership_type.on_sale?} visible in your online Storefront.", "data-trigger" => "hover"}
|
29
25
|
%span.badge{:class => "#{'badge-success' if membership_type.on_sale?}"}="S"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% content_for :custom_js do %>
|
2
|
+
<script type="text/javascript" charset="utf-8">
|
3
|
+
angular.module('artfully').factory('Memberships', function() {
|
4
|
+
var self = this;
|
5
|
+
|
6
|
+
this.personId = function() {
|
7
|
+
return <%= j(@person.id.to_s) %>;
|
8
|
+
};
|
9
|
+
|
10
|
+
return {
|
11
|
+
personId: this.personId
|
12
|
+
}
|
13
|
+
});
|
14
|
+
</script>
|
15
|
+
<% end %>
|
@@ -8,24 +8,27 @@
|
|
8
8
|
.span12
|
9
9
|
.row-fluid
|
10
10
|
.span6
|
11
|
-
%ul.in-table
|
11
|
+
%ul.in-table{'ng-controller' => 'MembershipActionsCtrl'}
|
12
12
|
%li.dropdown{:id => "#menu#bulkactions"}
|
13
13
|
=icon_link_to('Work with...', "#menu#bulkactions", 'icon-asterisk', 'dropdown-toggle dropdown btn', '')
|
14
|
+
=image_tag "loading.gif", :class => 'loading-indicator', 'ng-show' => 'loading'
|
15
|
+
.alert{'ng-show' => 'error'}
|
16
|
+
%button.close{'ng-click' => 'error = false'}
|
17
|
+
×
|
18
|
+
='{{errorMessage}}'
|
14
19
|
%ul.dropdown-menu
|
15
|
-
%li
|
16
|
-
|
17
|
-
%li
|
18
|
-
= link_to "Partial Refund", "#partial-refund", 'data-toggle' => 'modal'
|
20
|
+
-# %li= link_to "Full Refund", "#full-refund", 'data-toggle' => 'modal'
|
21
|
+
-# %li= link_to "Partial Refund", "#partial-refund", 'data-toggle' => 'modal'
|
19
22
|
%li
|
20
23
|
= link_to "Change Expiration", "#extend", 'data-toggle' => 'modal'
|
21
24
|
%li
|
22
|
-
= link_to "Change Membership Type", "#change", 'ng-
|
25
|
+
= link_to "Change Membership Type", "#change", 'ng-click' => 'change($event)'
|
23
26
|
%li
|
24
|
-
= link_to "Cancel Membership", "#cancel", '
|
27
|
+
= link_to "Cancel Membership", "#cancel", 'ng-click' => 'cancel($event)'
|
25
28
|
.span6.right
|
26
29
|
= icon_link_to("View Record", person_path(@person), 'icon-share-alt', 'btn', '')
|
27
|
-
= link_to "Log In", "#", 'data-toggle' => 'modal', :class => 'btn'
|
28
|
-
= link_to "Reset Password", "#", 'data-toggle' => 'modal', :class => 'btn btn-danger'
|
30
|
+
-# = link_to "Log In", "#", 'data-toggle' => 'modal', :class => 'btn'
|
31
|
+
= link_to "Reset Password", "#reset-password-modal", 'data-toggle' => 'modal', :class => 'btn btn-danger'
|
29
32
|
|
30
33
|
=form_tag bulk_update_person_memberships_path(@person), :method => :post do
|
31
34
|
#items
|
@@ -37,7 +40,6 @@
|
|
37
40
|
%th Starts
|
38
41
|
%th Expires
|
39
42
|
%th.right Price Paid
|
40
|
-
%th.right Fee
|
41
43
|
%tbody
|
42
44
|
- @person.memberships.each do |membership|
|
43
45
|
- if membership.expired?
|
@@ -47,7 +49,6 @@
|
|
47
49
|
%td.starts-at=l membership.starts_at, :format => :slashed_date
|
48
50
|
%td.ends-at=l membership.ends_at, :format => :slashed_date
|
49
51
|
%td.price.right=number_as_cents membership.sold_price
|
50
|
-
%td.fee.right TODO
|
51
52
|
- else
|
52
53
|
%tr
|
53
54
|
%td.grouped-checkbox= check_box_tag "membership_ids[]", membership.id, false, :id => "membership_id_#{membership.id}"
|
@@ -55,7 +56,6 @@
|
|
55
56
|
%td.starts-at=l membership.starts_at, :format => :slashed_date
|
56
57
|
%td.ends-at=l membership.ends_at, :format => :slashed_date
|
57
58
|
%td.price.right=number_as_cents membership.sold_price
|
58
|
-
%td.fee.right TODO
|
59
59
|
|
60
60
|
- if @expired_count > 0
|
61
61
|
= link_to "See #{@expired_count} lapsed & expired memberships", '#', 'ng-show' => '!scope.showExpired', 'ng-click' => 'scope.showExpired = true'
|
@@ -157,12 +157,13 @@
|
|
157
157
|
=link_to "Process Refund", "#", :class => "btn btn-success", 'data-dismiss'=>'modal'
|
158
158
|
=link_to "Cancel", "#", :class => "btn btn-danger", 'data-dismiss'=>'modal'
|
159
159
|
|
160
|
-
#
|
160
|
+
#reset-password-modal.modal
|
161
161
|
.modal-header
|
162
162
|
.close{'data-dismiss'=>'modal'} x
|
163
|
-
%h3
|
163
|
+
%h3 Reset Password
|
164
164
|
.modal-body
|
165
|
-
%p="
|
165
|
+
%p="This member will receive an email with a link to reset their password so they can log in to their member dashboard."
|
166
166
|
.modal-footer
|
167
|
-
=link_to "
|
168
|
-
=link_to "Cancel", "#", :class => "btn
|
167
|
+
=link_to "Send Password Reset", reset_password_person_path(@person), :class => "btn btn-primary", 'data-dismiss'=>'modal', :method => :post
|
168
|
+
=link_to "Cancel", "#", :class => "btn", 'data-dismiss'=>'modal'
|
169
|
+
= render partial: 'membership_scripts.js'
|
@@ -52,3 +52,11 @@
|
|
52
52
|
%span.price= "$#{format("%.2f", (item.price/100.00))}:"
|
53
53
|
%span.name= "Donation to #{@order.organization.name_for_donations}"
|
54
54
|
|
55
|
+
- unless @order.memberships.empty?
|
56
|
+
%h4 Memberships
|
57
|
+
%ul.donation-list
|
58
|
+
- @order.memberships.each do |item|
|
59
|
+
%li
|
60
|
+
%span.price= "$#{format("%.2f", (item.price/100.00))}:"
|
61
|
+
%span.name= "#{item.product.membership_type.membershipize}"
|
62
|
+
|
@@ -12,6 +12,12 @@
|
|
12
12
|
= form.email_field :email, :placeholder => 'contact@organization.org', :required => true, :class => 'input-xlarge email-popup', "data-content" => "Your patrons will be able to respond to this email address when receiving ticket/donation receipts. You can change this at any time."
|
13
13
|
%span.help-inline (default contact for your patrons)
|
14
14
|
|
15
|
+
- unless @organization.new_record?
|
16
|
+
.control-group
|
17
|
+
= form.label :cached_slug, 'Storefront URL', :class=>'control-label'
|
18
|
+
.controls
|
19
|
+
= form.text_field :cached_slug, :placeholder => @organization.cached_slug, :required => true, :class => 'input-xlarge'
|
20
|
+
|
15
21
|
%fieldset
|
16
22
|
%legend Details
|
17
23
|
.control-group
|
@@ -0,0 +1,66 @@
|
|
1
|
+
:plain
|
2
|
+
<style>
|
3
|
+
@import http://artfully-pdf-css.s3.amazonaws.com/helvetica.css;
|
4
|
+
|
5
|
+
body {
|
6
|
+
padding: 0;
|
7
|
+
margin: 0;
|
8
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
9
|
+
font-size: 13px;
|
10
|
+
line-height: 18px;
|
11
|
+
color: #000;
|
12
|
+
}
|
13
|
+
.card {
|
14
|
+
width: 3.5in;
|
15
|
+
height: 2in;
|
16
|
+
border: 1px solid #000;
|
17
|
+
clear: both;
|
18
|
+
margin-bottom: 1in;
|
19
|
+
}
|
20
|
+
.qr-code img {
|
21
|
+
margin-left: 1px;
|
22
|
+
margin-top: 1px;
|
23
|
+
width: 150px;
|
24
|
+
height: 150px;
|
25
|
+
}
|
26
|
+
.left-side {
|
27
|
+
float: left
|
28
|
+
}
|
29
|
+
.right-side {
|
30
|
+
margin-top: 10px;
|
31
|
+
}
|
32
|
+
.organization-name {
|
33
|
+
font-weight: bold;
|
34
|
+
}
|
35
|
+
.membership {
|
36
|
+
margin-bottom: 10px;
|
37
|
+
}
|
38
|
+
.person-name {
|
39
|
+
font-weight: bold;
|
40
|
+
}
|
41
|
+
.membership-number {
|
42
|
+
margin-bottom: 10px;
|
43
|
+
}
|
44
|
+
.expiration {
|
45
|
+
font-size: 11px;
|
46
|
+
}
|
47
|
+
</style>
|
48
|
+
|
49
|
+
:ruby
|
50
|
+
member = pdfable
|
51
|
+
membership = member.memberships.current.first
|
52
|
+
person = member.person
|
53
|
+
|
54
|
+
.card
|
55
|
+
.left-side
|
56
|
+
.qr-code
|
57
|
+
%img{:src => (member.download_link_for(:qr_code) rescue 'http://placehold.it/150/ffffff.png&text=No+QR+Code')}
|
58
|
+
|
59
|
+
.right-side
|
60
|
+
.organization-name #{member.organization.name}
|
61
|
+
.membership Member: #{membership.membership_type.name}
|
62
|
+
|
63
|
+
.person-name #{person.first_name} #{person.last_name}
|
64
|
+
.membership-number Member ##{member.member_number}
|
65
|
+
|
66
|
+
.expiration Valid until #{I18n.localize membership.ends_at, :format => :date}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
:plain
|
2
|
+
<style>
|
3
|
+
@import http://artfully-pdf-css.s3.amazonaws.com/helvetica.css;
|
4
|
+
|
5
|
+
body {
|
6
|
+
padding: 0;
|
7
|
+
margin: 0;
|
8
|
+
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
9
|
+
font-size: 13px;
|
10
|
+
line-height: 18px;
|
11
|
+
color: #000;
|
12
|
+
}
|
13
|
+
.ticket {
|
14
|
+
width: 5.5in;
|
15
|
+
height: 2in;
|
16
|
+
border: 1px solid #000;
|
17
|
+
clear: both;
|
18
|
+
margin-bottom: 20px;
|
19
|
+
box-sizing: border-box;
|
20
|
+
}
|
21
|
+
.ticket:nth-child(4n+4) {
|
22
|
+
margin-bottom: 1.1in;
|
23
|
+
}
|
24
|
+
.qr-code img {
|
25
|
+
margin-left: 1px;
|
26
|
+
margin-top: 1px;
|
27
|
+
width: 150px;
|
28
|
+
height: 150px;
|
29
|
+
}
|
30
|
+
.left-side {
|
31
|
+
margin-left: 10px;
|
32
|
+
margin-top: 10px;
|
33
|
+
}
|
34
|
+
.show-name {
|
35
|
+
font-weight: bold;
|
36
|
+
}
|
37
|
+
.show-time {
|
38
|
+
margin-bottom: 10px;
|
39
|
+
}
|
40
|
+
.right-side {
|
41
|
+
float: right;
|
42
|
+
}
|
43
|
+
.order-number {
|
44
|
+
margin-left: 10px;
|
45
|
+
}
|
46
|
+
.venue {
|
47
|
+
margin-bottom: 10px;
|
48
|
+
}
|
49
|
+
.person-name {
|
50
|
+
font-weight: bold;
|
51
|
+
}
|
52
|
+
</style>
|
53
|
+
|
54
|
+
- pdfable.tickets.each do |item|
|
55
|
+
:ruby
|
56
|
+
order = pdfable
|
57
|
+
person = order.person
|
58
|
+
organization = order.organization
|
59
|
+
product = item.product
|
60
|
+
event = product.event
|
61
|
+
show = product.show
|
62
|
+
venue = event.venue
|
63
|
+
|
64
|
+
.ticket
|
65
|
+
.right-side
|
66
|
+
.qr-code
|
67
|
+
%img{:src => (product.qr_code_url rescue 'http://placehold.it/150/ffffff.png&text=No+QR+Code')}
|
68
|
+
.order-number Order ##{order.id}
|
69
|
+
|
70
|
+
.left-side
|
71
|
+
.organization-name= organization.name
|
72
|
+
.show-name= event.name
|
73
|
+
.show-time= I18n.localize show.datetime_local_to_event
|
74
|
+
|
75
|
+
.venue
|
76
|
+
#{venue.name} <br />
|
77
|
+
- if venue.address1.present?
|
78
|
+
#{venue.address1} <br />
|
79
|
+
- if venue.address2.present?
|
80
|
+
#{venue.address2} <br />
|
81
|
+
#{[venue.city,venue.state].select {|s| s.present?}.join(',')} #{venue.zip}
|
82
|
+
|
83
|
+
.person-name #{person.first_name} #{person.last_name}
|
84
|
+
.product #{product.ticket_type.name} #{number_as_cents product.price}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
-with_kit (:membership) do
|
2
|
+
-if person.email.blank?
|
3
|
+
%p= link_to "Comp Membership", "#comp-membership", 'data-toggle' => 'modal'
|
4
|
+
#comp-membership.modal
|
5
|
+
.modal-header
|
6
|
+
.close{'data-dismiss'=>'modal'} x
|
7
|
+
%h3 Comp Membership
|
8
|
+
.modal-body
|
9
|
+
Sorry! We can't comp memberships to patrons who don't have an email.
|
10
|
+
.modal-footer
|
11
|
+
= button_tag "Close", :class => "btn", 'data-dismiss' => 'modal'
|
12
|
+
-elsif person.company?
|
13
|
+
%p= link_to "Comp Membership", "#comp-membership", 'data-toggle' => 'modal'
|
14
|
+
#comp-membership.modal
|
15
|
+
.modal-header
|
16
|
+
.close{'data-dismiss'=>'modal'} x
|
17
|
+
%h3 Comp Membership
|
18
|
+
.modal-body
|
19
|
+
Sorry! We can't comp memberships to companies or institutions.
|
20
|
+
.modal-footer
|
21
|
+
= button_tag "Close", :class => "btn", 'data-dismiss' => 'modal'
|
22
|
+
-else
|
23
|
+
%p= link_to "Comp Membership", new_person_membership_comp_path(person)
|