Class: Contact

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/entities/contact.rb

Overview

Copyright © 2008-2013 Michael Dvorkin and contributors.

Fat Free CRM is freely distributable under the terms of MIT license. See MIT-LICENSE file or www.opensource.org/licenses/mit-license.php


Schema Information

Table name: contacts

id              :integer         not null, primary key
user_id         :integer
lead_id         :integer
assigned_to     :integer
reports_to      :integer
first_name      :string(64)      default(""), not null
last_name       :string(64)      default(""), not null
access          :string(8)       default("Public")
title           :string(64)
department      :string(64)
source          :string(32)
email           :string(64)
alt_email       :string(64)
phone           :string(32)
mobile          :string(32)
fax             :string(32)
blog            :string(128)
linkedin        :string(128)
facebook        :string(128)
twitter         :string(128)
born_on         :date
do_not_call     :boolean         default(FALSE), not null
deleted_at      :datetime
created_at      :datetime
updated_at      :datetime
background_info :string(255)
skype           :string(128)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create_for(model, account, opportunity, params) ⇒ Object

Class methods.




150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'app/models/entities/contact.rb', line 150

def self.create_for(model, , opportunity, params)
  attributes = {
    :lead_id     => model.id,
    :user_id     => params[:account][:user_id],
    :assigned_to => params[:account][:assigned_to],
    :access      => params[:access]
  }
  %w(first_name last_name title source email alt_email phone mobile blog linkedin facebook twitter skype do_not_call background_info).each do |name|
    attributes[name] = model.send(name.intern)
  end

  contact = Contact.new(attributes)

  # Set custom fields.
  if model.class.respond_to?(:fields)
    model.class.fields.each do |field|
      if contact.respond_to?(field.name)
        contact.send "#{field.name}=", model.send(field.name)
      end
    end
  end

  contact.business_address = Address.new(:street1 => model.business_address.street1, :street2 => model.business_address.street2, :city => model.business_address.city, :state => model.business_address.state, :zipcode => model.business_address.zipcode, :country => model.business_address.country, :full_address => model.business_address.full_address, :address_type => "Business") unless model.business_address.nil?

  # Save the contact only if the account and the opportunity have no errors.
  if .errors.empty? && opportunity.errors.empty?
    # Note: contact.account = account doesn't seem to work here.
    contact. = AccountContact.new(:account => , :contact => contact) unless .id.blank?
    if contact.access != "Lead" || model.nil?
      contact.save
    else
      contact.save_with_model_permissions(model)
    end
    contact.opportunities << opportunity unless opportunity.id.blank? # must happen after contact is saved
  end
  contact
end

.first_name_positionObject



99
# File 'app/models/entities/contact.rb', line 99

def self.first_name_position ; "before" ; end

.per_pageObject

Default values provided through class methods.




98
# File 'app/models/entities/contact.rb', line 98

def self.per_page ; 20                  ; end

Instance Method Details

#attach!(attachment) ⇒ Object

Attach given attachment to the contact if it hasn’t been attached already.




132
133
134
135
136
# File 'app/models/entities/contact.rb', line 132

def attach!(attachment)
  unless self.send("#{attachment.class.name.downcase}_ids").include?(attachment.id)
    self.send(attachment.class.name.tableize) << attachment
  end
end

#discard!(attachment) ⇒ Object

Discard given attachment from the contact.




140
141
142
143
144
145
146
# File 'app/models/entities/contact.rb', line 140

def discard!(attachment)
  if attachment.is_a?(Task)
    attachment.update_attribute(:asset, nil)
  else # Opportunities
    self.send(attachment.class.name.tableize).delete(attachment)
  end
end

#full_name(format = nil) ⇒ Object Also known as: name




102
103
104
105
106
107
108
# File 'app/models/entities/contact.rb', line 102

def full_name(format = nil)
  if format.nil? || format == "before"
    "#{self.first_name} #{self.last_name}"
  else
    "#{self.last_name}, #{self.first_name}"
  end
end

#save_with_account_and_permissions(params) ⇒ Object

Backend handler for [Create New Contact] form (see contact/create).




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

def (params)
  (params)
  result = self.save
  self.opportunities << Opportunity.find(params[:opportunity]) unless params[:opportunity].blank?
  result
end

#update_with_account_and_permissions(params) ⇒ Object

Backend handler for [Update Contact] form (see contact/update).




122
123
124
125
126
127
128
# File 'app/models/entities/contact.rb', line 122

def (params)
  (params)
  # Must set access before user_ids, because user_ids= method depends on access value.
  self.access = params[:contact][:access] if params[:contact][:access]
  self.attributes = params[:contact]
  self.save
end