Class: Charity

Inherits:
ApplicationRecord show all
Includes:
Models::Auditable, PgSearch::Model
Defined in:
app/models/charity.rb

Overview

== Schema Information

Table name: charities
Database name: primary

id :integer not null, primary key
address :text
category :string
cause :text
efficiency :decimal(, )
fund :string
name :string
phone :string
status :enum default("active")
website :string
created_at :datetime not null
updated_at :datetime not null
company_id :integer
creator_id :integer
supplier_id :integer
updater_id :integer

Indexes

index_charities_on_supplier_id (supplier_id)

Foreign Keys

fk_rails_... (supplier_id => parties.id)

Constant Summary collapse

CATEGORIES =

Categories.

['Direct Relief',
'Health & Disease',
'Hunger',
'Homelessness',
'Environmental',
'Victims of Abuse',
'Animals',
'Community',
'Government Related',
'Youth',
'Global Aid'].sort
MATCH_FACTOR =

Match factor.

2
WITH_DONATION_TO_DATE_SQL =

With donation to date sql.

<<-SQL.squish.freeze
  select sum(ra.amount)*#{MATCH_FACTOR}
  from reward_allocations ra
  where ra.charity_id = charities.id
SQL
WITH_DONATION_PROCESS_REWARD_SQL =

With donation process reward sql.

<<-SQL.squish.freeze
  select sum(ra.amount)*#{MATCH_FACTOR}
  from reward_allocations ra
  inner join employee_reviews er on er.id = ra.employee_review_id
  where ra.charity_id = charities.id
    and er.state = 'process_reward'
SQL

Constants included from Models::Auditable

Models::Auditable::ALWAYS_IGNORED

Constants included from Models::Schedulable

Models::Schedulable::SIMPLE_FORM_OPTIONS

Instance Attribute Summary collapse

Has many collapse

Belongs to collapse

Methods included from Models::Auditable

#creator, #updater

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Models::Auditable

#all_skipped_columns, #audit_reference_data, #should_not_save_version, #stamp_record

Methods inherited from ApplicationRecord

ransackable_associations, ransackable_attributes, ransortable_attributes, #to_relation

Methods included from Models::Schedulable

config

Methods included from Models::AfterCommittable

#after_commit

Methods included from Models::EventPublishable

#publish_event

Instance Attribute Details

#categoryString (readonly)

Returns:

  • (String)


71
# File 'app/models/charity.rb', line 71

validates :category, inclusion: { in: CATEGORIES }, if: :category

#fundString (readonly)

Returns:

  • (String)


69
# File 'app/models/charity.rb', line 69

validates :fund, uniqueness: { scope: :name }, if: :fund

#nameString (readonly)

Returns:

  • (String)


67
# File 'app/models/charity.rb', line 67

validates :name, presence: true

#phoneString (readonly)

Returns:

  • (String)


73
# File 'app/models/charity.rb', line 73

validates :phone, phone_format: true, if: :phone

#websiteString (readonly)

Returns:

  • (String)


75
# File 'app/models/charity.rb', line 75

validates :website, format: ContactPoint::WEBSITE_REGEX, if: :website

Class Method Details

.categories_for_selectvoid

This method returns an undefined value.



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

def self.categories_for_select
  CATEGORIES
end

.ransackable_scopes(_auth_object = nil) ⇒ void

Parameters:

  • _auth_object (Object) (defaults to: nil)
  • _auth_object (Object) (defaults to: nil)

Returns:

  • (void)
  • (void)


105
106
107
# File 'app/models/charity.rb', line 105

def self.ransackable_scopes(_auth_object = nil)
  %i[search with_company_id]
end

.select_donations_to_dateActiveRecord::Relation<Charity>

A relation of Charities that are select donations to date. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Charity>)

See Also:



93
# File 'app/models/charity.rb', line 93

scope :select_donations_to_date, -> { select("charities.*,(#{WITH_DONATION_TO_DATE_SQL}) as donations_to_date") }

.select_donations_to_processActiveRecord::Relation<Charity>

A relation of Charities that are select donations to process. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Charity>)

See Also:



94
# File 'app/models/charity.rb', line 94

scope :select_donations_to_process, -> { select("charities.*, (#{WITH_DONATION_PROCESS_REWARD_SQL}) as donations_to_process") }

.top_charities(limit: 3) ⇒ void

Parameters:

  • limit (Object) (defaults to: 3)
  • limit (Object) (defaults to: 3)

Returns:

  • (void)
  • (void)


113
114
115
116
117
118
119
# File 'app/models/charity.rb', line 113

def self.top_charities(limit: 3)
  Charity.joins(:reward_allocations)
         .group(:name, :fund, :id)
         .select('name,fund,charities.id,count(reward_allocations.id),sum(amount)')
         .order('sum(amount) desc, count(reward_allocations.id) desc')
         .limit(limit)
end

.with_company_idActiveRecord::Relation<Charity>

A relation of Charities that are with company id. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Charity>)

See Also:



96
# File 'app/models/charity.rb', line 96

scope :with_company_id, ->(cid) { where('charities.company_id = ? or charities.company_id IS NULL', cid) }

.with_donations_to_processActiveRecord::Relation<Charity>

A relation of Charities that are with donations to process. Active Record Scope

Returns:

  • (ActiveRecord::Relation<Charity>)

See Also:



95
# File 'app/models/charity.rb', line 95

scope :with_donations_to_process, -> { where("(#{WITH_DONATION_PROCESS_REWARD_SQL}) > 0") }

Instance Method Details

#companyCompany?

Returns:



64
# File 'app/models/charity.rb', line 64

belongs_to :company, optional: true

#reward_allocationsActiveRecord::Relation<RewardAllocation>

Returns:



59
# File 'app/models/charity.rb', line 59

has_many :reward_allocations

#to_sString

Returns:

  • (String)


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

def to_s
  [try(:name), try(:fund)].compact.join(' - ')
end

#total_donations_process_rewardvoid

This method returns an undefined value.



137
138
139
# File 'app/models/charity.rb', line 137

def total_donations_process_reward
  reward_allocations.joins(:employee_review).where(employee_review: { state: 'process_reward' }).map(&:total_donation)
end

#total_donations_to_datevoid

This method returns an undefined value.



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

def total_donations_to_date
  reward_allocations.sum(&:total_donation)
end