Module: SpreeCmCommissioner::OrderStateMachine

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/spree_cm_commissioner/order_state_machine.rb

Instance Method Summary collapse

Instance Method Details

#accepted_by(user) ⇒ Object

allow authorized user to accept all requested line items



110
111
112
113
114
115
116
117
118
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 110

def accepted_by(user)
  transaction do
    accept!

    line_items.each do |line_item|
      line_item.accepted_by(user)
    end
  end
end

#can_accept_all?Boolean

can_accepted? already use by ransack/visitor.rb

Returns:

  • (Boolean)


127
128
129
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 127

def can_accept_all?
  approved? && requested?
end

#can_alert_request_to_vendor?Boolean

Returns:

  • (Boolean)


135
136
137
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 135

def can_alert_request_to_vendor?
  !accepted? && approved? && need_confirmation?
end

#can_reject_all?Boolean

Returns:

  • (Boolean)


131
132
133
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 131

def can_reject_all?
  approved? && requested?
end

#confirmation_delivered?Boolean

overrided not to send email yet to user if order needs confirmation it will send after vendors accepted.

Returns:

  • (Boolean)


122
123
124
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 122

def confirmation_delivered?
  confirmation_delivered || need_confirmation?
end

#generate_bib_numberObject



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 70

def generate_bib_number
  line_items.find_each(&:generate_remaining_guests)

  line_items.with_bib_prefix.each do |line_item|
    line_item.guests.none_bib.each do |guest|
      guest.generate_bib
      next if guest.save

      guest.errors.each do |msg|
        errors.add(:guests, msg)
      end
    end
  end

  errors.empty?
end

#need_confirmation?Boolean

Returns:

  • (Boolean)


143
144
145
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 143

def need_confirmation?
  line_items.any?(&:need_confirmation)
end

#notify_order_complete_app_notification_to_userObject



160
161
162
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 160

def notify_order_complete_app_notification_to_user
  SpreeCmCommissioner::OrderCompleteNotificationSender.call(order: self)
end

#notify_order_complete_telegram_notification_to_userObject



164
165
166
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 164

def notify_order_complete_telegram_notification_to_user
  SpreeCmCommissioner::OrderCompleteTelegramSenderJob.perform_later(id) if user_id.present?
end

#precalculate_conversionObject



64
65
66
67
68
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 64

def precalculate_conversion
  line_items.each do |item|
    SpreeCmCommissioner::ConversionPreCalculatorJob.perform_later(item.product_id)
  end
end

#rejected_by(user) ⇒ Object



87
88
89
90
91
92
93
94
95
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 87

def rejected_by(user)
  transaction do
    reject!

    line_items.each do |line_item|
      line_item.rejected_by(user)
    end
  end
end

#requested_state?Boolean

Returns:

  • (Boolean)


139
140
141
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 139

def requested_state?
  request_state == 'requested'
end

#send_order_accepted_app_notification_to_userObject



172
173
174
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 172

def send_order_accepted_app_notification_to_user
  SpreeCmCommissioner::OrderAcceptedNotificationSender.call(order: self)
end

#send_order_accepted_telegram_alert_to_storeObject



187
188
189
190
191
192
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 187

def send_order_accepted_telegram_alert_to_store
  title = '✅ --- [ORDER ACCEPTED BY VENDOR] ---'
  chat_id = store.preferred_telegram_order_request_alert_chat_id
  factory = OrderTelegramMessageFactory.new(title: title, order: self)
  TelegramNotificationSenderJob.perform_later(chat_id: chat_id, message: factory.message, parse_mode: factory.parse_mode)
end

#send_order_complete_telegram_alert_to_storeObject



201
202
203
204
205
206
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 201

def send_order_complete_telegram_alert_to_store
  title = '🎫 --- [NEW ORDER] ---'
  chat_id = store.preferred_telegram_order_alert_chat_id
  factory = OrderTelegramMessageFactory.new(title: title, order: self)
  TelegramNotificationSenderJob.perform_later(chat_id: chat_id, message: factory.message, parse_mode: factory.parse_mode)
end

#send_order_complete_telegram_alert_to_vendorsObject



149
150
151
152
153
154
155
156
157
158
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 149

def send_order_complete_telegram_alert_to_vendors
  vendor_list.each do |vendor|
    title = '🎫 --- [NEW ORDER FROM BOOKME+] ---'
    chat_id = vendor.preferred_telegram_chat_id
    if chat_id.present?
      factory = OrderTelegramMessageFactory.new(title: title, order: self, vendor: vendor)
      TelegramNotificationSenderJob.perform_later(chat_id: chat_id, message: factory.message, parse_mode: factory.parse_mode)
    end
  end
end

#send_order_rejected_app_notification_to_userObject



176
177
178
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 176

def send_order_rejected_app_notification_to_user
  SpreeCmCommissioner::OrderRejectedNotificationSender.call(order: self)
end

#send_order_rejected_telegram_alert_to_storeObject



194
195
196
197
198
199
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 194

def send_order_rejected_telegram_alert_to_store
  title = '❌ --- [ORDER REJECTED BY VENDOR] ---'
  chat_id = store.preferred_telegram_order_request_alert_chat_id
  factory = OrderTelegramMessageFactory.new(title: title, order: self)
  TelegramNotificationSenderJob.perform_later(chat_id: chat_id, message: factory.message, parse_mode: factory.parse_mode)
end

#send_order_request_telegram_confirmation_alert_to_vendorObject



147
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 147

def send_order_request_telegram_confirmation_alert_to_vendor; end

#send_order_requested_app_notification_to_userObject



168
169
170
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 168

def send_order_requested_app_notification_to_user
  SpreeCmCommissioner::OrderRequestedNotificationSender.call(order: self)
end

#send_order_requested_telegram_alert_to_storeObject



180
181
182
183
184
185
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 180

def send_order_requested_telegram_alert_to_store
  title = '🔔 --- [NEW REQUESTED BY USER] ---'
  chat_id = store.preferred_telegram_order_request_alert_chat_id
  factory = OrderTelegramMessageFactory.new(title: title, order: self)
  TelegramNotificationSenderJob.perform_later(chat_id: chat_id, message: factory.message, parse_mode: factory.parse_mode)
end

#send_transaction_email_to_userObject



97
98
99
100
101
102
103
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 97

def send_transaction_email_to_user
  line_items.each do |line_item|
    next if line_item.event.nil?

    SpreeCmCommissioner::EventTransactionalMailer.send_to_participant(line_item.event_id, user.id).deliver_later
  end
end

#user_has_email?Boolean

Returns:

  • (Boolean)


105
106
107
# File 'app/models/concerns/spree_cm_commissioner/order_state_machine.rb', line 105

def user_has_email?
  user.present? && user.email.present?
end