erp_base_erp_svcs 3.1.5 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/app/controllers/erp_base_erp_svcs/shared/units_of_measurement_controller.rb +32 -0
- data/app/models/compass_ae_instance.rb +2 -0
- data/app/models/contact.rb +4 -0
- data/app/models/email_address.rb +4 -1
- data/app/models/facility.rb +12 -0
- data/app/models/facility_type.rb +8 -0
- data/app/models/fixed_asset.rb +8 -0
- data/app/models/fixed_asset_party_role.rb +8 -0
- data/app/models/fixed_asset_type.rb +9 -0
- data/app/models/individual.rb +10 -14
- data/app/models/party.rb +138 -51
- data/app/models/party_unit_of_measurement.rb +6 -0
- data/app/models/phone_number.rb +5 -1
- data/app/models/postal_address.rb +5 -1
- data/app/models/unit_of_measurement.rb +16 -0
- data/config/initializers/root_loader.rb +9 -0
- data/config/routes.rb +5 -0
- data/db/migrate/20080805000020_base_erp_services.rb +1 -29
- data/db/migrate/20130522125404_create_facilities.rb +114 -0
- data/db/migrate/20130621182047_create_unit_of_measurements.rb +18 -0
- data/db/migrate/20130909163912_add_iid_index_to_role_types.rb +9 -0
- data/db/migrate/20130926023541_add_domain_to_unit_of_measure.rb +13 -0
- data/db/migrate/20130929025342_add_type_semantics_to_uom.rb +54 -0
- data/db/migrate/20131112013047_add_primary_to_contacts.rb +13 -0
- data/db/migrate/20131112013048_add_erp_base_erp_svcs_missing_indexes.rb +33 -0
- data/db/migrate/20131211180831_add_postal_address_to_facility.rb +5 -0
- data/db/migrate/20140102154311_create_fixed_asset_party_roles.rb +12 -0
- data/db/migrate/20140401072612_add_custom_fields_to_party.rb +12 -0
- data/lib/erp_base_erp_svcs.rb +5 -5
- data/lib/erp_base_erp_svcs/engine.rb +5 -3
- data/lib/erp_base_erp_svcs/extensions.rb +3 -0
- data/lib/erp_base_erp_svcs/extensions/active_record/acts_as_facility.rb +54 -0
- data/lib/erp_base_erp_svcs/extensions/active_record/acts_as_fixed_asset.rb +54 -0
- data/lib/erp_base_erp_svcs/extensions/active_record/has_contact.rb +25 -12
- data/lib/erp_base_erp_svcs/extensions/active_record/has_notes.rb +25 -2
- data/lib/erp_base_erp_svcs/extensions/active_record/has_tracked_status.rb +58 -6
- data/lib/erp_base_erp_svcs/extensions/active_record/to_hash.rb +12 -12
- data/lib/erp_base_erp_svcs/extensions/core/acts_as_aspector_on.rb +73 -0
- data/lib/erp_base_erp_svcs/extensions/core/object.rb +7 -0
- data/lib/erp_base_erp_svcs/version.rb +7 -3
- data/lib/tasks/compass_backup.rake +11 -6
- data/lib/tasks/erp_base_erp_svcs_tasks.rake +22 -9
- data/spec/models/party_spec.rb +9 -1
- metadata +80 -113
- data/app/assets/javascripts/erp_base_erp_svcs/application.js +0 -9
- data/app/assets/stylesheets/erp_base_erp_svcs/application.css +0 -7
- data/app/controllers/erp_base_erp_svcs/application_controller.rb +0 -4
- data/app/views/layouts/erp_base_erp_svcs/application.html.erb +0 -14
- data/spec/dummy/db/data_migrations/20110525001935_add_usd_currency.erp_base_erp_svcs.rb +0 -12
- data/spec/dummy/db/data_migrations/20110609150135_add_iso_codes.erp_base_erp_svcs.rb +0 -19
- data/spec/dummy/db/data_migrations/20110913145838_setup_compass_ae_instance.erp_base_erp_svcs.rb +0 -12
- data/spec/dummy/db/data_migrations/20130422154233_upgrade_compass_ae_instances_data.erp_base_erp_svcs.rb +0 -19
- data/spec/dummy/db/data_migrations/20130422154234_add_guid_to_instances.erp_base_erp_svcs.rb +0 -10
- data/spec/dummy/db/migrate/20130105143821_base_erp_services.erp_base_erp_svcs.rb +0 -461
- data/spec/dummy/db/migrate/20130422154229_add_txn_status.erp_base_erp_svcs.rb +0 -37
- data/spec/dummy/db/migrate/20130422154230_upgrade_compass_ae_instances.erp_base_erp_svcs.rb +0 -34
- data/spec/dummy/db/migrate/20130422154231_add_uuid_compass_ae_instance.erp_base_erp_svcs.rb +0 -17
- data/spec/dummy/db/migrate/20130422154232_add_long_lat_to_address.erp_base_erp_svcs.rb +0 -16
- data/spec/dummy/db/schema.rb +0 -435
- data/spec/dummy/db/spec.sqlite3 +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: dd247b66200f776ec62392398963b75b67626880
|
4
|
+
data.tar.gz: 176c47d90d2e3a9eb81c55f38b3a8846123eb394
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2472e8d50fda6d0985bda2a6667084c279aeb0c7e107f653741b3b063a69a64f70c3afd3bda3941ed042d964aa9335be6cfd8918bf7d03facad8b5f155bb2f18
|
7
|
+
data.tar.gz: a98dfed15080b6c737197eec3eae14fd7620a853a2fe1eb4e360a2fabdfc40d5fa23fd8a6591d0cd5fd177e42f5d0cc64a83c6e17e165f47c2c77a28da46e68b
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module ErpBaseErpSvcs
|
2
|
+
module Shared
|
3
|
+
class UnitsOfMeasurementController < ::ErpApp::Organizer::BaseController
|
4
|
+
|
5
|
+
def index
|
6
|
+
offset = params[:start] || 0
|
7
|
+
limit = params[:limit] || 25
|
8
|
+
query_filter = params[:query_filter].blank? ? nil : params[:query_filter].strip
|
9
|
+
|
10
|
+
uom_tbl = UnitOfMeasurement.arel_table
|
11
|
+
statement = UnitOfMeasurement.order('created_at asc')
|
12
|
+
|
13
|
+
unless query_filter.blank?
|
14
|
+
statement = statement.where(uom_tbl[:description].matches(query_filter + '%'))
|
15
|
+
end
|
16
|
+
|
17
|
+
# Get total count of records
|
18
|
+
total = statement.count
|
19
|
+
|
20
|
+
# Apply limit and offset
|
21
|
+
units_of_measurement = statement.offset(offset).limit(limit)
|
22
|
+
|
23
|
+
render :json => {:success => true, :total => total, :units_of_measurement => units_of_measurement.collect { |uom| uom.to_hash(:only => [:id, :description, :created_at, :updated_at]) }}
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
#TODO - implement show, update, delete
|
28
|
+
|
29
|
+
end #UnitsOfMeasurementController
|
30
|
+
end #Shared
|
31
|
+
end #ErpBaseErpSvcs
|
32
|
+
|
@@ -9,6 +9,7 @@ class CompassAeInstance < ActiveRecord::Base
|
|
9
9
|
where('role_type_id = ?', RoleType.compass_ae_instance_owner.id)
|
10
10
|
end
|
11
11
|
end
|
12
|
+
validates :guid, :uniqueness => true
|
12
13
|
validates :internal_identifier, :presence => {:message => 'internal_identifier cannot be blank'}, :uniqueness => {:case_sensitive => false}
|
13
14
|
|
14
15
|
def installed_engines
|
@@ -33,4 +34,5 @@ class CompassAeInstance < ActiveRecord::Base
|
|
33
34
|
set_guid(guid)
|
34
35
|
guid
|
35
36
|
end
|
37
|
+
|
36
38
|
end
|
data/app/models/contact.rb
CHANGED
data/app/models/email_address.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
class Facility < ActiveRecord::Base
|
2
|
+
attr_protected :created_at, :updated_at
|
3
|
+
|
4
|
+
acts_as_fixed_asset
|
5
|
+
|
6
|
+
#Allow for polymorphic associated subclsses of Facility
|
7
|
+
belongs_to :facility_record, :polymorphic => true
|
8
|
+
belongs_to :facility_type
|
9
|
+
|
10
|
+
belongs_to :postal_address
|
11
|
+
|
12
|
+
end
|
data/app/models/individual.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
class Individual < ActiveRecord::Base
|
2
2
|
attr_protected :created_at, :updated_at
|
3
|
-
|
3
|
+
|
4
4
|
require 'attr_encrypted'
|
5
|
-
|
6
|
-
after_create
|
7
|
-
after_save
|
5
|
+
|
6
|
+
after_create :create_party
|
7
|
+
after_save :save_party
|
8
8
|
after_destroy :destroy_party
|
9
9
|
|
10
10
|
has_one :party, :as => :business_party
|
@@ -32,13 +32,7 @@ class Individual < ActiveRecord::Base
|
|
32
32
|
(self.ssn_last_four.blank?) ? "" : "XXX-XX-#{self.ssn_last_four}"
|
33
33
|
end
|
34
34
|
|
35
|
-
def self.from_registered_user(
|
36
|
-
ind = Individual.new
|
37
|
-
ind.current_first_name = a_user.first_name
|
38
|
-
ind.current_last_name = a_user.last_name
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.from_registered_user( a_user )
|
35
|
+
def self.from_registered_user(a_user)
|
42
36
|
ind = Individual.new
|
43
37
|
ind.current_first_name = a_user.first_name
|
44
38
|
ind.current_last_name = a_user.last_name
|
@@ -55,15 +49,17 @@ class Individual < ActiveRecord::Base
|
|
55
49
|
|
56
50
|
def create_party
|
57
51
|
pty = Party.new
|
58
|
-
pty.description = [current_personal_title,current_first_name,current_last_name].join(' ').strip
|
52
|
+
pty.description = [current_personal_title, current_first_name, current_last_name].join(' ').strip
|
59
53
|
pty.business_party = self
|
60
54
|
pty.save
|
61
55
|
self.save
|
62
56
|
end
|
63
57
|
|
64
58
|
def save_party
|
65
|
-
self.party.description
|
66
|
-
|
59
|
+
if self.party.description.blank? && (!current_first_name.blank? && !current_last_name.blank?)
|
60
|
+
self.party.description = [current_personal_title, current_first_name, current_last_name].join(' ').strip
|
61
|
+
self.party.save
|
62
|
+
end
|
67
63
|
end
|
68
64
|
|
69
65
|
def destroy_party
|
data/app/models/party.rb
CHANGED
@@ -2,49 +2,69 @@ class Party < ActiveRecord::Base
|
|
2
2
|
attr_protected :created_at, :updated_at
|
3
3
|
|
4
4
|
has_notes
|
5
|
-
|
6
|
-
has_many
|
7
|
-
has_many
|
5
|
+
|
6
|
+
has_many :contacts, :dependent => :destroy
|
7
|
+
has_many :created_notes, :class_name => 'Note', :foreign_key => 'created_by_id'
|
8
8
|
belongs_to :business_party, :polymorphic => true
|
9
9
|
|
10
|
-
has_many
|
11
|
-
|
10
|
+
has_many :party_roles, :dependent => :destroy #role_types
|
11
|
+
has_many :role_types, :through => :party_roles
|
12
12
|
|
13
|
-
after_destroy :destroy_business_party
|
13
|
+
after_destroy :destroy_business_party, :destroy_party_relationships
|
14
14
|
|
15
|
-
|
15
|
+
attr_reader :relationships
|
16
16
|
attr_writer :create_relationship
|
17
17
|
|
18
|
+
# serialize ExtJs attributes
|
19
|
+
is_json :custom_fields
|
20
|
+
|
18
21
|
# Gathers all party relationships that contain this particular party id
|
19
22
|
# in either the from or to side of the relationship.
|
20
23
|
def relationships
|
21
24
|
@relationships ||= PartyRelationship.where('party_id_from = ? or party_id_to = ?', id, id)
|
22
25
|
end
|
23
26
|
|
27
|
+
def to_relationships
|
28
|
+
@relationships ||= PartyRelationship.where('party_id_to = ?', id)
|
29
|
+
end
|
30
|
+
|
31
|
+
def from_relationships
|
32
|
+
@relationships ||= PartyRelationship.where('party_id_from = ?', id)
|
33
|
+
end
|
34
|
+
|
24
35
|
def find_relationships_by_type(relationship_type_iid)
|
25
36
|
PartyRelationship.includes(:relationship_type).
|
26
|
-
|
27
|
-
|
37
|
+
where('party_id_from = ? or party_id_to = ?', id, id).
|
38
|
+
where('relationship_types.internal_identifier' => relationship_type_iid.to_s)
|
28
39
|
end
|
29
40
|
|
30
41
|
# Creates a new PartyRelationship for this particular
|
31
42
|
# party instance.
|
32
|
-
def create_relationship(description, to_party_id)
|
33
|
-
PartyRelationship.create(:description => description,
|
43
|
+
def create_relationship(description, to_party_id, reln_type)
|
44
|
+
PartyRelationship.create(:description => description,
|
45
|
+
:relationship_type => reln_type,
|
46
|
+
:party_id_from => id,
|
47
|
+
:from_role => reln_type.valid_from_role,
|
48
|
+
:party_id_to => to_party_id,
|
49
|
+
:to_role => reln_type.valid_to_role)
|
34
50
|
end
|
35
51
|
|
36
|
-
#
|
37
|
-
|
52
|
+
# Callbacks
|
53
|
+
def destroy_business_party
|
38
54
|
if self.business_party
|
39
55
|
self.business_party.destroy
|
40
56
|
end
|
41
|
-
|
57
|
+
end
|
58
|
+
|
59
|
+
def destroy_party_relationships
|
60
|
+
PartyRelationship.destroy_all("party_id_from = #{id} or party_id_to = #{id}")
|
61
|
+
end
|
42
62
|
|
43
63
|
def has_role_type?(*passed_roles)
|
44
64
|
result = false
|
45
65
|
passed_roles.flatten!
|
46
66
|
passed_roles.each do |role|
|
47
|
-
role_iid = role.is_a?(RoleType) ?
|
67
|
+
role_iid = role.is_a?(RoleType) ? role.internal_identifier : role.to_s
|
48
68
|
self.role_types.each do |this_role|
|
49
69
|
result = true if (this_role.internal_identifier == role_iid)
|
50
70
|
break if result
|
@@ -81,37 +101,101 @@ class Party < ActiveRecord::Base
|
|
81
101
|
# Alias for to_s
|
82
102
|
def to_label
|
83
103
|
to_s
|
84
|
-
|
104
|
+
end
|
85
105
|
|
86
|
-
|
106
|
+
def to_s
|
87
107
|
"#{description}"
|
88
|
-
|
89
|
-
|
108
|
+
end
|
90
109
|
|
91
110
|
#************************************************************************************************
|
92
111
|
#** Contact Methods
|
93
112
|
#************************************************************************************************
|
94
113
|
|
95
|
-
def
|
114
|
+
def primary_phone_number
|
96
115
|
contact_mechanism = nil
|
97
116
|
|
98
|
-
contact = self.
|
117
|
+
contact = self.get_primary_contact(PhoneNumber)
|
99
118
|
contact_mechanism = contact.contact_mechanism unless contact.nil?
|
100
119
|
|
101
120
|
contact_mechanism
|
102
121
|
end
|
103
122
|
|
104
|
-
|
105
|
-
|
123
|
+
alias primary_phone primary_phone_number
|
124
|
+
|
125
|
+
def primary_phone_number=(phone_number)
|
126
|
+
self.set_primary_contact(PhoneNumber, phone_number)
|
127
|
+
end
|
128
|
+
|
129
|
+
alias primary_phone= primary_phone_number=
|
130
|
+
|
131
|
+
def primary_email_address
|
132
|
+
contact_mechanism = nil
|
133
|
+
|
134
|
+
contact = self.get_primary_contact(EmailAddress)
|
135
|
+
contact_mechanism = contact.contact_mechanism unless contact.nil?
|
136
|
+
|
137
|
+
contact_mechanism
|
138
|
+
end
|
139
|
+
|
140
|
+
alias primary_email primary_email_address
|
141
|
+
|
142
|
+
def primary_email_address=(email_address)
|
143
|
+
self.set_primary_contact(EmailAddress, email_address)
|
144
|
+
end
|
145
|
+
|
146
|
+
alias primary_email= primary_email_address=
|
106
147
|
|
148
|
+
def primary_postal_address
|
149
|
+
contact_mechanism = nil
|
150
|
+
|
151
|
+
contact = self.get_primary_contact(PostalAddress)
|
152
|
+
contact_mechanism = contact.contact_mechanism unless contact.nil?
|
153
|
+
|
154
|
+
contact_mechanism
|
155
|
+
end
|
156
|
+
|
157
|
+
alias primary_address primary_postal_address
|
158
|
+
|
159
|
+
def primary_postal_address=(postal_address)
|
160
|
+
self.set_primary_contact(PostalAddress, postal_address)
|
161
|
+
end
|
162
|
+
|
163
|
+
alias primary_address= primary_postal_address=
|
164
|
+
|
165
|
+
def set_primary_contact(contact_mechanism_class, contact_mechanism_instance)
|
166
|
+
# set is_primary to false for any current primary contacts of this type
|
167
|
+
primary_contact_mechanism = get_primary_contact(contact_mechanism_class)
|
168
|
+
if primary_contact_mechanism
|
169
|
+
primary_contact_mechanism.is_primary = false
|
170
|
+
primary_contact_mechanism.save
|
171
|
+
end
|
172
|
+
|
173
|
+
contact_mechanism_instance.is_primary = true
|
174
|
+
contact_mechanism_instance.save
|
175
|
+
|
176
|
+
contact_mechanism_instance
|
177
|
+
end
|
178
|
+
|
179
|
+
def get_primary_contact(contact_mechanism_class)
|
180
|
+
table_name = contact_mechanism_class.name.tableize
|
181
|
+
|
182
|
+
self.contacts.joins("inner join #{table_name} on #{table_name}.id = contact_mechanism_id and contact_mechanism_type = '#{contact_mechanism_class.name}'")
|
183
|
+
.where('contacts.is_primary = ?', true).readonly(false).first
|
184
|
+
end
|
185
|
+
|
186
|
+
def find_contact_mechanism_with_purpose(contact_mechanism_class, contact_purpose)
|
187
|
+
contact = self.find_contact_with_purpose(contact_mechanism_class, contact_purpose)
|
188
|
+
|
189
|
+
contact.contact_mechanism unless contact.nil?
|
190
|
+
end
|
191
|
+
|
192
|
+
def find_contact_with_purpose(contact_mechanism_class, contact_purpose)
|
107
193
|
#if a symbol or string was passed get the model
|
108
194
|
unless contact_purpose.is_a? ContactPurpose
|
109
195
|
contact_purpose = ContactPurpose.find_by_internal_identifier(contact_purpose.to_s)
|
110
196
|
end
|
111
197
|
|
112
|
-
|
113
|
-
|
114
|
-
contact
|
198
|
+
self.find_contact(contact_mechanism_class, nil, [contact_purpose])
|
115
199
|
end
|
116
200
|
|
117
201
|
def find_all_contacts_by_contact_mechanism(contact_mechanism_class)
|
@@ -124,13 +208,13 @@ class Party < ActiveRecord::Base
|
|
124
208
|
|
125
209
|
def find_contact(contact_mechanism_class, contact_mechanism_args={}, contact_purposes=[])
|
126
210
|
table_name = contact_mechanism_class.name.tableize
|
127
|
-
|
211
|
+
|
128
212
|
query = self.contacts.joins("inner join #{table_name} on #{table_name}.id = contact_mechanism_id and contact_mechanism_type = '#{contact_mechanism_class.name}'
|
129
213
|
inner join contact_purposes_contacts on contact_purposes_contacts.contact_id = contacts.id
|
130
|
-
and contact_purposes_contacts.contact_purpose_id in (#{contact_purposes.collect{|item| item.attributes["id"]}.join(',')})")
|
131
|
-
|
214
|
+
and contact_purposes_contacts.contact_purpose_id in (#{contact_purposes.collect { |item| item.attributes["id"] }.join(',')})")
|
215
|
+
|
132
216
|
contact_mechanism_args.each do |key, value|
|
133
|
-
next if key == 'updated_at' or key == 'created_at' or key == 'id'
|
217
|
+
next if key == 'updated_at' or key == 'created_at' or key == 'id' or key == 'is_primary'
|
134
218
|
query = query.where("#{table_name}.#{key} = ?", value) unless value.nil?
|
135
219
|
end unless contact_mechanism_args.nil?
|
136
220
|
|
@@ -140,34 +224,33 @@ class Party < ActiveRecord::Base
|
|
140
224
|
# looks for contacts matching on value and purpose
|
141
225
|
# if a contact exists, it updates, if not, it adds it
|
142
226
|
def add_contact(contact_mechanism_class, contact_mechanism_args={}, contact_purposes=[])
|
227
|
+
is_primary = contact_mechanism_args['is_primary']
|
143
228
|
contact_purposes = [contact_purposes] if !contact_purposes.kind_of?(Array) # gracefully handle a single purpose not in an array
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
else
|
155
|
-
contact_mechanism = update_contact(contact_mechanism_class, contact, contact_mechanism_args)
|
156
|
-
end
|
157
|
-
|
229
|
+
|
230
|
+
contact_mechanism_args.delete_if { |k, v| ['created_at', 'updated_at', 'is_primary'].include? k.to_s }
|
231
|
+
contact_mechanism = contact_mechanism_class.new(contact_mechanism_args)
|
232
|
+
contact_mechanism.contact.party = self
|
233
|
+
contact_mechanism.contact.contact_purposes = contact_purposes
|
234
|
+
contact_mechanism.contact.save
|
235
|
+
contact_mechanism.save
|
236
|
+
|
237
|
+
set_primary_contact(contact_mechanism_class, contact_mechanism) if is_primary
|
238
|
+
|
158
239
|
contact_mechanism
|
159
240
|
end
|
160
241
|
|
161
242
|
# tries to update contact by purpose
|
162
243
|
# if contact doesn't exist, it adds it
|
163
244
|
def update_or_add_contact_with_purpose(contact_mechanism_class, contact_purpose, contact_mechanism_args)
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
add_contact(contact_mechanism_class, contact_mechanism_args, [contact_purpose])
|
245
|
+
contact_mechanism = update_contact_with_purpose(contact_mechanism_class, contact_purpose, contact_mechanism_args)
|
246
|
+
|
247
|
+
unless contact_mechanism
|
248
|
+
contact_mechanism = add_contact(contact_mechanism_class, contact_mechanism_args, [contact_purpose])
|
168
249
|
end
|
250
|
+
|
251
|
+
contact_mechanism
|
169
252
|
end
|
170
|
-
|
253
|
+
|
171
254
|
# looks for a contact matching on purpose
|
172
255
|
# if it exists, it updates it, if not returns false
|
173
256
|
def update_contact_with_purpose(contact_mechanism_class, contact_purpose, contact_mechanism_args)
|
@@ -176,7 +259,11 @@ class Party < ActiveRecord::Base
|
|
176
259
|
end
|
177
260
|
|
178
261
|
def update_contact(contact_mechanism_class, contact, contact_mechanism_args)
|
262
|
+
set_primary_contact(contact_mechanism_class, contact.contact_mechanism) if contact_mechanism_args[:is_primary] == true
|
263
|
+
|
179
264
|
contact_mechanism_class.update(contact.contact_mechanism, contact_mechanism_args)
|
265
|
+
|
266
|
+
contact.contact_mechanism
|
180
267
|
end
|
181
268
|
|
182
269
|
def get_contact_by_method(m)
|
@@ -210,7 +297,7 @@ class Party < ActiveRecord::Base
|
|
210
297
|
def respond_to?(m, include_private_methods = false)
|
211
298
|
(super ? true : get_contact_by_method(m.to_s)) rescue super
|
212
299
|
end
|
213
|
-
|
300
|
+
|
214
301
|
def method_missing(m, *args, &block)
|
215
302
|
if self.respond_to?(m)
|
216
303
|
value = get_contact_by_method(m.to_s)
|
@@ -219,7 +306,7 @@ class Party < ActiveRecord::Base
|
|
219
306
|
super
|
220
307
|
end
|
221
308
|
end
|
222
|
-
|
309
|
+
|
223
310
|
#************************************************************************************************
|
224
311
|
#** End
|
225
312
|
#************************************************************************************************
|