Class: Backer
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Backer
- Includes:
- ActionView::Helpers::DateHelper, ActionView::Helpers::NumberHelper
- Defined in:
- app/models/backer.rb
Overview
coding: utf-8
Class Method Summary collapse
- .between_values(start_at, ends_at) ⇒ Object
- .send_credits_notification ⇒ Object
- .state_names ⇒ Object
Instance Method Summary collapse
- #after_transition_from_confirmed_to_canceled ⇒ Object
- #after_transition_from_confirmed_to_requested_refund ⇒ Object
- #available_rewards ⇒ Object
- #can_refund? ⇒ Boolean
- #change_reward!(reward) ⇒ Object
-
#define_key ⇒ Object
Used on before and after callbacks.
- #define_payment_method ⇒ Object
- #display_confirmed_at ⇒ Object
- #display_value ⇒ Object
-
#price_in_cents ⇒ Object
Used in payment engines.
- #project_should_be_online ⇒ Object
- #recommended_projects ⇒ Object
- #refund_deadline ⇒ Object
- #reward_must_be_from_project ⇒ Object
- #should_not_back_if_maximum_backers_been_reached ⇒ Object
- #update_current_billing_info ⇒ Object
- #update_user_billing_info ⇒ Object
- #value_must_be_at_least_rewards_value ⇒ Object
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_notification ⇒ Object
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_names ⇒ Object
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_canceled ⇒ Object
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_refund ⇒ Object
224 225 226 |
# File 'app/models/backer.rb', line 224 def after_transition_from_confirmed_to_requested_refund notify_observers :notify_backoffice end |
#available_rewards ⇒ Object
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
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_key ⇒ Object
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_method ⇒ Object
239 240 241 |
# File 'app/models/backer.rb', line 239 def define_payment_method self.update_attributes({ payment_method: 'MoIP' }) end |
#display_confirmed_at ⇒ Object
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_value ⇒ Object
136 137 138 |
# File 'app/models/backer.rb', line 136 def display_value number_to_currency value end |
#price_in_cents ⇒ Object
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_online ⇒ Object
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 |
#recommended_projects ⇒ Object
99 100 101 |
# File 'app/models/backer.rb', line 99 def recommended_projects user.recommended_projects.where("projects.id <> ?", project.id) end |
#refund_deadline ⇒ Object
103 104 105 |
# File 'app/models/backer.rb', line 103 def refund_deadline created_at + 180.days end |
#reward_must_be_from_project ⇒ Object
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_reached ⇒ Object
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_info ⇒ Object
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_info ⇒ Object
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_value ⇒ Object
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 |