app/models/c80_estate/area.rb in c80_estate-0.1.0.33 vs app/models/c80_estate/area.rb in c80_estate-0.1.0.34

- old
+ new

@@ -40,10 +40,17 @@ def self.free_areas self.joins(:astatuses).where(:c80_estate_astatuses => {tag: 'free'}) end + # def self.my_areas + # self.joins(:property) + # .where(:c80_estate_properties => {assigned_person_id: current_admin_user.id}) + # end + + # scope :my_areas, lambda { |t| t.joins(:property).where(:c80_estate_properties => {assigned_person_id: current_admin_user.id}) } + # посчитает кол-во свободных метров def self.free_areas_sq Rails.logger.debug "<Area.free_areas_sq>" sum = 0.0 self.free_areas.each do |area| @@ -186,54 +193,103 @@ def self.where_atype(atype_id) self.where(:atype_id => atype_id) end + # Не отображать "чужие" занятые площади (для менеждеров) (задача №1748) + def self.all_except_busy_alien(admin_user) + if admin_user.can_view_statistics? + # админам покажем всё + self.all + else + + # http://stackoverflow.com/questions/9540801/combine-two-activerecordrelation-objects + # двумя независимыми запросами получим мои площади и немои свободные площади, сложим их, и отдадим + +=begin + # ВАРИАНТ 1 + + # извлечём немои свободные площади + # этот код я написал, смотря на уже существующий where_assigned_person_id + not_my_free_areas = self.free_areas + .joins(:property) + .where.not(:c80_estate_properties => {assigned_person_id: admin_user.id}) + + # извлечём все мои площади + all_my_areas = self.joins(:property) + .where(:c80_estate_properties => {assigned_person_id: admin_user.id}) + + # это вернёт только то, что находится в ПЕРЕСЕЧЕНИИ результатов, а нужен union + not_my_free_areas.merge(all_my_areas) +=end + +=begin + # ВАРИАНТ 2 + # http://stackoverflow.com/a/28358592 + # User.where( + # User.arel_table[:first_name].eq('Tobias').or( + # User.arel_table[:last_name].eq('Fünke') + # ) + # ) +=end + +=begin + # ВАРИАНТ 3 + # http://stackoverflow.com/a/31528499 + # first_name_relation = User.where(:first_name => 'Tobias') # ActiveRecord::Relation + # last_name_relation = User.where(:last_name => 'Fünke') # ActiveRecord::Relation + # + # all_name_relations = User.none + # first_name_relation.each do |ar| + # all_name_relations.new(ar) + # end + # last_name_relation.each do |ar| + # all_name_relations.new(ar) + # end +=end + + # попробуем 3-й вариант + not_my_free_areas = self.free_areas + .joins(:property) + .where.not(:c80_estate_properties => {assigned_person_id: admin_user.id}) + + all_my_areas = self.joins(:property) + .where(:c80_estate_properties => {assigned_person_id: admin_user.id}) + + all_my_areas.union(not_my_free_areas) + + end + end + def has_astatus? errors.add_to_base 'Укажите статус площади' if self.astatuses.blank? end + # -------- + def atype_title - res = "-" - if atype.present? - res = atype.title - end - res + atype.title end def property_title - res = "-" - if property.present? - res = property.title - end - res + property.title end def astatus_title - res = "-" - if astatuses.count > 0 - res = astatuses.first.title - end - res + astatuses.first.title end def astatus_id - res = -1 - if astatuses.count > 0 - res = astatuses.first.id - end - res + astatuses.first.id end def astatus_tag - res = -1 - if astatuses.count > 0 - res = astatuses.first.tag - end - res + astatuses.first.tag end + # -------- + def is_free? astatus_tag == 'free' end def is_busy? @@ -259,10 +315,11 @@ def last_updater sevents.last.auser.email end # выдать цену за м.кв. в месяц + # TODO_MY:: добавить модели Area столбец price_value и before_update метод, который высчитывал бы значение def price_value res = 0.0 mark_use_usual_price = false @@ -296,19 +353,21 @@ end res end + # TODO_MY:: добавить модели Area столбец square_value и before_update метод, который высчитывал бы значение def square_value res = 0.0 p = item_props.where(:prop_name_id => 9) if p.count > 0 res = p.first.value.to_f end Rails.logger.debug "<Area.square_value> res = #{res}" res end + # TODO_MY:: добавить модели Area столбец power_price_value и before_update метод, который высчитывал бы значение def power_price_value price_value * 1.0 * square_value end def main_image_url \ No newline at end of file