134 lines
4.0 KiB
Ruby
134 lines
4.0 KiB
Ruby
class Annonce < ActiveRecord::Base
|
|
|
|
has_many :annonce_account_favs
|
|
has_many :annonce_account_likes, :through => :annonce_account_favs
|
|
|
|
belongs_to :devise
|
|
belongs_to :annonce_account
|
|
belongs_to :annonce_cat
|
|
belongs_to :city
|
|
belongs_to :specific_annonce, :polymorphic => true
|
|
belongs_to :annonce_auto, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_carav, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_high, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_inf, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_moto, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_pdv, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_play, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_tel, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_util, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_camping, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_gite, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_hab, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_hotel, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_naut, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_num, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_office, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_pet, foreign_key: 'specific_annonce_id'
|
|
|
|
belongs_to :annonce_draw, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_antiquity, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_graphic, foreign_key: 'specific_annonce_id'
|
|
belongs_to :annonce_sculpture, foreign_key: 'specific_annonce_id'
|
|
|
|
|
|
|
|
has_many :annonce_tag_cats
|
|
has_many :tag_cats, :through => :annonce_tag_cats
|
|
|
|
accepts_nested_attributes_for :specific_annonce
|
|
|
|
|
|
has_many :annonce_photos
|
|
|
|
belongs_to :default_photo, :class_name => "AnnoncePhoto"
|
|
|
|
validates :title, :presence => true
|
|
|
|
validates :g_text, :presence => true, :if => :validate_localisation
|
|
|
|
before_validation do
|
|
|
|
if validate_localisation
|
|
if !(self.localisation_complete? and self.g_text?)
|
|
errors.add(:g_text, "Vous devez entrer le nom de votre ville et sélectionner un résultat")
|
|
|
|
|
|
end
|
|
|
|
else
|
|
self.g_postal_code = nil
|
|
self.g_city = nil
|
|
self.g_sub_state = nil
|
|
self.g_sub_state_code = nil
|
|
self.g_state = nil
|
|
self.g_state_code = nil
|
|
self.g_country = nil
|
|
self.g_country_code = nil
|
|
self.g_text = nil
|
|
self.g_latitude = nil
|
|
self.g_longitude = nil
|
|
|
|
end
|
|
end
|
|
|
|
def localisation_complete?
|
|
true if self.g_city? and self.g_country? and self.g_country_code? and self.g_latitude? and self.g_longitude? # self.g_postal_code? and self.g_sub_state? and self.g_sub_state_code? #and self.g_state? and self.g_state_code?
|
|
end
|
|
|
|
def validate_localisation
|
|
true #if !self.internet
|
|
end
|
|
|
|
validates :annonce_cat_id, :presence => true
|
|
validates :annonce_account_id, :presence => true
|
|
|
|
before_create do
|
|
self.nbr_photos = 5
|
|
self.list_head = Time.now
|
|
self.enabled = true
|
|
end
|
|
|
|
def nbr_photo_restantes
|
|
self.nbr_photos.to_i - self.annonce_photos.visibles.count
|
|
end
|
|
|
|
scope :with_img, lambda {
|
|
where("default_photo_id is not null")
|
|
|
|
}
|
|
|
|
scope :not_published, lambda {
|
|
where("published != 1 or published is null and enabled = 1")
|
|
}
|
|
|
|
scope :valid_to_show, lambda {
|
|
not_blocked.where(:enabled => true, :published => true).where("published_date <= ? and refused is null",Date.today )
|
|
}
|
|
|
|
scope :not_blocked, lambda {
|
|
joins(:annonce_account).where("annonce_accounts.deleted_at is null" ).where("annonce_accounts.blocked = 0 or annonce_accounts.blocked is NULL")
|
|
|
|
}
|
|
|
|
scope :refused, lambda {
|
|
where(:refused => true)
|
|
}
|
|
|
|
scope :desactived, lambda {
|
|
where(:enabled => false)
|
|
}
|
|
|
|
scope :moderated, lambda {
|
|
where(:moderated => true)
|
|
}
|
|
|
|
scope :not_moderated, lambda {
|
|
where("moderated != 1 or moderated is null")
|
|
}
|
|
|
|
reverse_geocoded_by :g_latitude, :g_longitude
|
|
|
|
|
|
end
|