forked from fatfreecrm/fat_free_crm
-
Notifications
You must be signed in to change notification settings - Fork 1
/
account.rb
104 lines (93 loc) · 4 KB
/
account.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# Fat Free CRM
# Copyright (C) 2008-2009 by Michael Dvorkin
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#------------------------------------------------------------------------------
# == Schema Information
# Schema version: 23
#
# Table name: accounts
#
# id :integer(4) not null, primary key
# user_id :integer(4)
# assigned_to :integer(4)
# name :string(64) default(""), not null
# access :string(8) default("Private")
# website :string(64)
# toll_free_phone :string(32)
# phone :string(32)
# fax :string(32)
# billing_address :string(255)
# shipping_address :string(255)
# deleted_at :datetime
# created_at :datetime
# updated_at :datetime
#
class Account < ActiveRecord::Base
belongs_to :user
belongs_to :assignee, :class_name => "User", :foreign_key => :assigned_to
has_many :account_contacts, :dependent => :destroy
has_many :contacts, :through => :account_contacts, :uniq => true
has_many :account_opportunities, :dependent => :destroy
has_many :opportunities, :through => :account_opportunities, :uniq => true, :order => "opportunities.id DESC"
has_many :tasks, :as => :asset, :dependent => :destroy, :order => 'created_at DESC'
has_many :activities, :as => :subject, :order => 'created_at DESC'
named_scope :created_by, lambda { |user| { :conditions => "user_id = #{user.id}" } }
named_scope :assigned_to, lambda { |user| { :conditions => "assigned_to = #{user.id}" } }
simple_column_search :name, :match => :middle, :escape => lambda { |query| query.gsub(/[^\w\s\-\.']/, "").strip }
uses_user_permissions
acts_as_commentable
acts_as_paranoid
validates_presence_of :name, :message => "^Please specify account name."
validates_uniqueness_of :name
validate :users_for_shared_access
SORT_BY = {
"name" => "accounts.name ASC",
"date created" => "accounts.created_at DESC",
"date updated" => "accounts.updated_at DESC"
}
# Default values provided through class methods.
#----------------------------------------------------------------------------
def self.per_page ; 20 ; end
def self.outline ; "long" ; end
def self.sort_by ; "accounts.created_at DESC" ; end
# Extract last line of billing address and get rid of numeric zipcode.
#----------------------------------------------------------------------------
def location
return "" unless self[:billing_address]
location = self[:billing_address].strip.split("\n").last
location.gsub(/(^|\s+)\d+(:?\s+|$)/, " ").strip if location
end
# Class methods.
#----------------------------------------------------------------------------
def self.create_or_select_for(model, params, users)
if params[:id]
account = Account.find(params[:id])
else
account = Account.new(params)
if account.access != "Lead" || model.nil?
account.save_with_permissions(users)
else
account.save_with_model_permissions(model)
end
end
account
end
private
# Make sure at least one user has been selected if the account is being shared.
#----------------------------------------------------------------------------
def users_for_shared_access
errors.add(:access, "^Please specify users to share the account with.") if self[:access] == "Shared" && !self.permissions.any?
end
end