2013-08-01 10:33:49 +08:00
|
|
|
####by fq
|
|
|
|
class Bid < ActiveRecord::Base
|
|
|
|
#attr_accessible :author_id, :budget, :deadline, :name, :description
|
2013-08-05 22:47:01 +08:00
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
belongs_to :author, :class_name => 'User', :foreign_key => :author_id
|
|
|
|
has_many :biding_projects, :dependent => :destroy
|
|
|
|
has_many :projects, :through => :biding_projects
|
|
|
|
has_many :journals_for_messages, :as => :jour, :dependent => :destroy
|
2013-08-05 22:47:01 +08:00
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
NAME_LENGTH_LIMIT = 60
|
|
|
|
DESCRIPTION_LENGTH_LIMIT = 250
|
2013-08-05 22:47:01 +08:00
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
validates_length_of :name, :maximum => NAME_LENGTH_LIMIT
|
|
|
|
validates_length_of :description, :maximum => DESCRIPTION_LENGTH_LIMIT
|
2013-08-04 10:11:38 +08:00
|
|
|
validates_presence_of :author_id, :name, :deadline
|
2013-08-05 22:47:01 +08:00
|
|
|
# validates_format_of :deadline, :with =>
|
2013-08-01 10:33:49 +08:00
|
|
|
validate :validate_user
|
|
|
|
|
2013-08-05 22:47:01 +08:00
|
|
|
scope :visible, lambda {|*args|
|
|
|
|
nil
|
|
|
|
}
|
|
|
|
|
|
|
|
scope :like, lambda {|arg|
|
|
|
|
if arg.blank?
|
|
|
|
where(nil)
|
|
|
|
else
|
|
|
|
pattern = "%#{arg.to_s.strip.downcase}%"
|
|
|
|
where("LOWER(identifier) LIKE :p OR LOWER(name) LIKE :p OR LOWER(description) LIKE :p", :p => pattern)
|
|
|
|
end
|
|
|
|
}
|
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
acts_as_watchable
|
|
|
|
acts_as_taggable
|
|
|
|
|
2013-08-05 22:47:01 +08:00
|
|
|
acts_as_event :title => Proc.new {|o| "#{l(:label_requirement)} ##{o.id}: #{o.name}" },
|
|
|
|
:description => :description,
|
|
|
|
:author => :author,
|
|
|
|
:url => Proc.new {|o| {:controller => 'bids', :action => 'show', :id => o.id}}
|
|
|
|
|
|
|
|
acts_as_activity_provider :find_options => {:include => [:author]},
|
|
|
|
:author_key => :author_id
|
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
def add_jour(user, notes)
|
|
|
|
self.journals_for_messages << JournalsForMessage.new(:user_id => user.id, :notes => notes)
|
|
|
|
end
|
2013-08-05 22:47:01 +08:00
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
def self.creat_bids(budget, deadline, name, description=nil)
|
|
|
|
self.create(:author_id => User.current.id, :budget => budget,
|
2013-08-05 22:47:01 +08:00
|
|
|
:deadline => deadline, :name => name, :description => description, :commit => 0)
|
2013-08-01 10:33:49 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def update_bids(budget, deadline, name, description=nil)
|
|
|
|
if(User.current.id == self.author_id)
|
2013-08-05 22:47:01 +08:00
|
|
|
self.name = name
|
|
|
|
self.budget = budget
|
|
|
|
self.deadline = deadline
|
|
|
|
self.description = description
|
|
|
|
self.save
|
|
|
|
end
|
2013-08-01 10:33:49 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def delete_bids
|
|
|
|
unless self.nil?
|
|
|
|
if User.current.id == self.author_id
|
2013-08-05 22:47:01 +08:00
|
|
|
self.destroy
|
|
|
|
end
|
|
|
|
end
|
2013-08-01 10:33:49 +08:00
|
|
|
end
|
2013-08-05 22:47:01 +08:00
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
def set_commit(commit)
|
2013-08-05 22:47:01 +08:00
|
|
|
self.update_attribute(:commit, commit)
|
2013-08-01 10:33:49 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
2013-08-05 22:47:01 +08:00
|
|
|
|
2013-08-01 10:33:49 +08:00
|
|
|
def validate_user
|
|
|
|
errors.add :author_id, :invalid if author.nil? || !author.active?
|
|
|
|
end
|
|
|
|
end
|