Class: Backer

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
ActionView::Helpers::DateHelper, ActionView::Helpers::NumberHelper
Defined in:
app/models/backer.rb

Overview

coding: utf-8

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.between_values(start_at, ends_at) ⇒ Object



75
76
77
78
# File 'app/models/backer.rb', line 75

def self.between_values(start_at, ends_at)
  return scoped unless start_at.present? && ends_at.present?
  where("value between ? and ?", start_at, ends_at)
end

.send_credits_notificationObject



86
87
88
89
90
91
92
93
94
95
96
97
# File 'app/models/backer.rb', line 86

def self.send_credits_notification
  confirmed.joins(:project).joins(:user).find_each do |backer|
    if backer.project.state == 'failed' && ((backer.project.expires_at + 1.month) < Time.now) && backer.user.credits >= backer.value
      Notification.create_notification_once(:credits_warning,
        backer.user,
        {backer_id: backer.id},
        backer: backer,
        amount: backer.user.credits
                                           )
    end
  end
end

.state_namesObject



80
81
82
83
84
# File 'app/models/backer.rb', line 80

def self.state_names
  self.state_machine.states.map do |state|
    state.name if state.name != :deleted
  end.compact!
end

Instance Method Details

#after_transition_from_confirmed_to_canceledObject



220
221
222
# File 'app/models/backer.rb', line 220

def after_transition_from_confirmed_to_canceled
  notify_observers :notify_backoffice_about_canceled
end

#after_transition_from_confirmed_to_requested_refundObject



224
225
226
# File 'app/models/backer.rb', line 224

def after_transition_from_confirmed_to_requested_refund
  notify_observers :notify_backoffice
end

#available_rewardsObject



140
141
142
# File 'app/models/backer.rb', line 140

def available_rewards
  Reward.where(project_id: self.project_id).where('minimum_value <= ?', self.value).order(:minimum_value)
end

#can_refund?Boolean

Returns:

  • (Boolean)


112
113
114
# File 'app/models/backer.rb', line 112

def can_refund?
  confirmed? && project.finished? && !project.successful?
end

#change_reward!(reward) ⇒ Object



107
108
109
110
# File 'app/models/backer.rb', line 107

def change_reward! reward
  self.reward_id = reward
  self.save
end

#define_keyObject

Used on before and after callbacks



235
236
237
# File 'app/models/backer.rb', line 235

def define_key
  self.update_attributes({ key: Digest::MD5.new.update("#{self.id}###{self.created_at}###{Kernel.rand}").to_s })
end

#define_payment_methodObject



239
240
241
# File 'app/models/backer.rb', line 239

def define_payment_method
  self.update_attributes({ payment_method: 'MoIP' })
end

#display_confirmed_atObject



144
145
146
# File 'app/models/backer.rb', line 144

def display_confirmed_at
  I18n.l(confirmed_at.to_date) if confirmed_at
end

#display_valueObject



136
137
138
# File 'app/models/backer.rb', line 136

def display_value
  number_to_currency value
end

#price_in_centsObject

Used in payment engines



229
230
231
# File 'app/models/backer.rb', line 229

def price_in_cents
  (self.value * 100).round
end

#project_should_be_onlineObject



131
132
133
134
# File 'app/models/backer.rb', line 131

def project_should_be_online
  return if project && project.online?
  errors.add(:project, I18n.t('backer.project_should_be_online'))
end


99
100
101
# File 'app/models/backer.rb', line 99

def recommended_projects
  user.recommended_projects.where("projects.id <> ?", project.id)
end

#refund_deadlineObject



103
104
105
# File 'app/models/backer.rb', line 103

def refund_deadline
  created_at + 180.days
end

#reward_must_be_from_projectObject



116
117
118
119
# File 'app/models/backer.rb', line 116

def reward_must_be_from_project
  return unless reward
  errors.add(:reward, I18n.t('backer.reward_must_be_from_project')) unless reward.project == project
end

#should_not_back_if_maximum_backers_been_reachedObject



126
127
128
129
# File 'app/models/backer.rb', line 126

def should_not_back_if_maximum_backers_been_reached
  return unless reward && reward.maximum_backers && reward.maximum_backers > 0
  errors.add(:reward, I18n.t('backer.should_not_back_if_maximum_backers_been_reached')) if reward.sold_out?
end

#update_current_billing_infoObject



148
149
150
151
152
153
154
155
156
157
# File 'app/models/backer.rb', line 148

def update_current_billing_info
  self.address_street = user.address_street
  self.address_number = user.address_number
  self.address_neighbourhood = user.address_neighbourhood
  self.address_zip_code = user.address_zip_code
  self.address_city = user.address_city
  self.address_state = user.address_state
  self.address_phone_number = user.phone_number
  self.payer_document = user.cpf
end

#update_user_billing_infoObject



159
160
161
162
163
164
165
166
167
168
169
170
# File 'app/models/backer.rb', line 159

def update_user_billing_info
  user.update_attributes({
    address_street: address_street,
    address_number: address_number,
    address_neighbourhood: address_neighbourhood,
    address_zip_code: address_zip_code,
    address_city: address_city,
    address_state: address_state,
    phone_number: address_phone_number,
    cpf: payer_document
  })
end

#value_must_be_at_least_rewards_valueObject



121
122
123
124
# File 'app/models/backer.rb', line 121

def value_must_be_at_least_rewards_value
  return unless reward
  errors.add(:value, I18n.t('backer.value_must_be_at_least_rewards_value', minimum_value: reward.display_minimum)) unless value.to_f >= reward.minimum_value
end