sideplace_app/app/models/annonce.rb

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