Class: SpreeCmCommissioner::OrderTelegramMessageFactory
- Inherits:
-
TelegramMessageFactory
- Object
- TelegramMessageFactory
- SpreeCmCommissioner::OrderTelegramMessageFactory
- Defined in:
- app/factory/spree_cm_commissioner/order_telegram_message_factory.rb
Instance Attribute Summary collapse
-
#order ⇒ Object
readonly
Returns the value of attribute order.
-
#show_details_link ⇒ Object
readonly
Returns the value of attribute show_details_link.
-
#vendor ⇒ Object
readonly
Returns the value of attribute vendor.
Attributes inherited from TelegramMessageFactory
Instance Method Summary collapse
-
#body ⇒ Object
override.
-
#footer ⇒ Object
override.
- #formatted_shipping_address ⇒ Object
-
#generate_guests_links(guests, guests_per_row = 2) ⇒ Object
Result: | No.
-
#initialize(title:, order:, subtitle: nil, show_details_link: nil, vendor: nil) ⇒ OrderTelegramMessageFactory
constructor
A new instance of OrderTelegramMessageFactory.
- #line_item_content(line_item) ⇒ Object
- #pretty_date_for(line_item) ⇒ Object
- #selected_line_items ⇒ Object
Methods inherited from TelegramMessageFactory
#bold, #header, #inline_code, #italic, #message, #parse_mode, #pretty_date
Constructor Details
#initialize(title:, order:, subtitle: nil, show_details_link: nil, vendor: nil) ⇒ OrderTelegramMessageFactory
Returns a new instance of OrderTelegramMessageFactory.
28 29 30 31 32 33 34 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 28 def initialize(title:, order:, subtitle: nil, show_details_link: nil, vendor: nil) @order = order @vendor = vendor @show_details_link = show_details_link || false super(title: title, subtitle: subtitle) end |
Instance Attribute Details
#order ⇒ Object (readonly)
Returns the value of attribute order.
26 27 28 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 26 def order @order end |
#show_details_link ⇒ Object (readonly)
Returns the value of attribute show_details_link.
26 27 28 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 26 def show_details_link @show_details_link end |
#vendor ⇒ Object (readonly)
Returns the value of attribute vendor.
26 27 28 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 26 def vendor @vendor end |
Instance Method Details
#body ⇒ Object
override
43 44 45 46 47 48 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 43 def body text = [] text << "Order Number:\n#{inline_code(order.number)}\n" text << selected_line_items.map { |item| line_item_content(item) }.compact.join("\n\n") text.compact.join("\n") end |
#footer ⇒ Object
override
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 76 def text = [] text << bold('🙍 Customer Info') text << "Name: #{order.name}" text << "Tel: #{inline_code(order.intel_phone_number || order.phone_number)}" text << "Email: #{inline_code(order.email)}" if order.email.present? text << "Delivery Address: #{formatted_shipping_address.presence || 'N/A'}" if order.delivery_required? if show_details_link && order.guests.any? text << '' text << 'View Tickets:' text += generate_guests_links(order.guests) end text.compact.join("\n") end |
#formatted_shipping_address ⇒ Object
94 95 96 97 98 99 100 101 102 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 94 def formatted_shipping_address return 'N/A' if order.shipping_address.blank? @formatted_shipping_address ||= [ order.shipping_address.address1, order.shipping_address.address2, order.shipping_address.state&.name ].compact.compact_blank.join(', ') end |
#generate_guests_links(guests, guests_per_row = 2) ⇒ Object
Result: | No. A24 | No. A24 | | No. A24 | No. A24 | | No. A24 | No. A24 | | No. A24 | No. A24 | | No. A24 | No. A24 | | No. A24 |
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 111 def generate_guests_links(guests, guests_per_row = 2) rows = (guests.size.to_f / guests_per_row).ceil formatted_rows = [] rows.times do |i| row_guests = guests.slice(i * guests_per_row, guests_per_row) formatted_row = row_guests.map do |guest| = guest.seat_number.present? ? "No. #{guest.seat_number}" : "No. #{guest.formatted_bib_number || 'N/A'}" link = Rails.application.routes.url_helpers.guest_cards_url(guest.token) "| <a href='#{link}'>#{}</a>" end.join(' ') formatted_rows << ("#{formatted_row} |") end formatted_rows end |
#line_item_content(line_item) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 50 def line_item_content(line_item) text = [] text << bold(line_item.product.name.to_s) text << "Quantity: #{line_item.quantity}" text << italic("👉 #{line_item.}") if line_item..present? text << italic(pretty_date_for(line_item)) if pretty_date_for(line_item).present? text << italic("🏪 #{line_item.vendor.name}") if line_item.vendor&.name.present? && vendor.blank? text.compact.join("\n") end |
#pretty_date_for(line_item) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 62 def pretty_date_for(line_item) return nil unless line_item.date_present? from_date = pretty_date(line_item.from_date) to_date = pretty_date(line_item.to_date) if from_date == to_date "🗓️ #{from_date}" else "🗓️ #{from_date} -> #{to_date}" end end |
#selected_line_items ⇒ Object
36 37 38 39 40 |
# File 'app/factory/spree_cm_commissioner/order_telegram_message_factory.rb', line 36 def selected_line_items return order.line_items.for_vendor(vendor) if vendor.present? order.line_items end |