2004-11-23 20:04:44 -05:00
class Company < ActiveRecord :: Base
attr_protected :rating
2005-07-24 10:01:35 -04:00
set_sequence_name :companies_nonstd_seq
2005-01-15 12:45:16 -05:00
validates_presence_of :name
2004-11-23 20:04:44 -05:00
end
class Firm < Company
2005-03-06 06:53:49 -05:00
has_many :clients , :order = > " id " , :dependent = > true , :counter_sql = > " SELECT COUNT(*) FROM companies WHERE firm_id = 1 AND (type = 'Client' OR type = 'SpecialClient' OR type = 'VerySpecialClient' ) "
2004-11-23 20:04:44 -05:00
has_many :clients_sorted_desc , :class_name = > " Client " , :order = > " id DESC "
has_many :clients_of_firm , :foreign_key = > " client_of " , :class_name = > " Client " , :order = > " id "
2005-09-27 23:52:57 -04:00
has_many :dependent_clients_of_firm , :foreign_key = > " client_of " , :class_name = > " Client " , :order = > " id " , :dependent = > true
has_many :exclusively_dependent_clients_of_firm , :foreign_key = > " client_of " , :class_name = > " Client " , :order = > " id " , :exclusively_dependent = > true
2004-11-23 20:04:44 -05:00
has_many :clients_like_ms , :conditions = > " name = 'Microsoft' " , :class_name = > " Client " , :order = > " id "
has_many :clients_using_sql , :class_name = > " Client " , :finder_sql = > 'SELECT * FROM companies WHERE client_of = #{id}'
2004-12-07 07:25:01 -05:00
has_many :clients_using_counter_sql , :class_name = > " Client " ,
2005-01-25 13:45:06 -05:00
:finder_sql = > 'SELECT * FROM companies WHERE client_of = #{id}' ,
2004-12-07 07:25:01 -05:00
:counter_sql = > 'SELECT COUNT(*) FROM companies WHERE client_of = #{id}'
has_many :clients_using_zero_counter_sql , :class_name = > " Client " ,
2005-01-25 13:45:06 -05:00
:finder_sql = > 'SELECT * FROM companies WHERE client_of = #{id}' ,
2004-12-07 07:25:01 -05:00
:counter_sql = > 'SELECT 0 FROM companies WHERE client_of = #{id}'
2005-04-07 02:29:31 -04:00
has_many :no_clients_using_counter_sql , :class_name = > " Client " ,
:finder_sql = > 'SELECT * FROM companies WHERE client_of = 1000' ,
:counter_sql = > 'SELECT COUNT(*) FROM companies WHERE client_of = 1000'
2004-11-23 20:04:44 -05:00
2005-06-10 09:54:58 -04:00
has_one :account , :foreign_key = > " firm_id " , :dependent = > true
2004-11-23 20:04:44 -05:00
end
2005-10-14 20:46:55 -04:00
class DependentFirm < Company
has_one :account , :foreign_key = > " firm_id " , :dependent = > :nullify
has_many :companies , :foreign_key = > 'client_of' , :order = > " id " , :dependent = > :nullify
end
2004-11-23 20:04:44 -05:00
class Client < Company
belongs_to :firm , :foreign_key = > " client_of "
belongs_to :firm_with_basic_id , :class_name = > " Firm " , :foreign_key = > " firm_id "
belongs_to :firm_with_other_name , :class_name = > " Firm " , :foreign_key = > " client_of "
belongs_to :firm_with_condition , :class_name = > " Firm " , :foreign_key = > " client_of " , :conditions = > " 1 = 1 "
2005-09-27 23:52:57 -04:00
# Record destruction so we can test whether firm.clients.clear has
# is calling client.destroy, deleting from the database, or setting
# foreign keys to NULL.
def self . destroyed_client_ids
@destroyed_client_ids || = Hash . new { | h , k | h [ k ] = [ ] }
end
before_destroy do | client |
if client . firm
Client . destroyed_client_ids [ client . firm . id ] << client . id
end
true
end
2004-11-23 20:04:44 -05:00
end
class SpecialClient < Client
end
class VerySpecialClient < SpecialClient
end
class Account < ActiveRecord :: Base
belongs_to :firm
protected
def validate
errors . add_on_empty " credit_limit "
end
2005-10-14 20:46:55 -04:00
end