c80_estate 0.1.0.35 → 0.1.0.36
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/admin/c80_estate/areas.rb +5 -3
- data/app/models/c80_estate/area.rb +100 -61
- data/db/migrate/20160815053333_add_price_value_to_c80_estate_areas.rb +9 -0
- data/db/migrate/20160815053334_add_square_value_to_c80_estate_areas.rb +7 -0
- data/db/migrate/20160815053335_add_power_price_value_to_c80_estate_areas.rb +5 -0
- data/lib/c80_estate/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 435903a0873c24883172c8042bb12baf1af863f1
|
4
|
+
data.tar.gz: fcf87d83628c514dfa64818ecdf15ecc6cff4646
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2922b5ac250f0d0bade3de2f30f1db73c87c5ba329fd315b72a74ba4efbd21868e16b74c12672f636269fccdf97ba35dd957cea6e257436292252933baac55e2
|
7
|
+
data.tar.gz: 63a195068b68d986d0547e5b4f724dfb9d8eff24115a4040cfc96dfe160e4f978cdc16877a687b57147904e7ca17995c82b545c19c0fc4f69da2cb92ec8627c6
|
@@ -178,10 +178,11 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
|
|
178
178
|
column :atype do |area|
|
179
179
|
area.atype.title
|
180
180
|
end
|
181
|
-
column '<abbr title="За м.кв. в месяц">Цена м.кв.</abbr>'.html_safe do |area|
|
181
|
+
column '<abbr title="За м.кв. в месяц">Цена м.кв.</abbr>'.html_safe, sortable: :price_value do |area|
|
182
182
|
"#{area.price_value.to_s(:rounded, :precision => 2)} руб"
|
183
183
|
end
|
184
|
-
|
184
|
+
|
185
|
+
column '<abbr title="Стоимость всей площади в месяц. Число PxS, где P - цена за м.кв. в месяц, S - метраж площади в м.кв.">Цена площади</abbr>'.html_safe, sortable: :power_price_value do |area|
|
185
186
|
klass = ''
|
186
187
|
title = 'Цена за площадь рассчитана'
|
187
188
|
if area.is_locked_area_price?
|
@@ -190,7 +191,8 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
|
|
190
191
|
end
|
191
192
|
"<span title='#{title}' class='#{klass}'>#{area.power_price_value.to_s(:rounded, :precision => 2)} руб</span>".html_safe
|
192
193
|
end
|
193
|
-
|
194
|
+
|
195
|
+
column 'Метраж', sortable: :square_value do |area|
|
194
196
|
"#{area.square_value.to_s(:rounded, :precision => 2)} м<sup>2</sup>".html_safe
|
195
197
|
end
|
196
198
|
column :property do |area|
|
@@ -32,6 +32,9 @@ module C80Estate
|
|
32
32
|
validate :has_astatus?
|
33
33
|
|
34
34
|
after_create :create_initial_sevent
|
35
|
+
after_update :calc_square_value
|
36
|
+
after_update :calc_price_value
|
37
|
+
after_update :calc_power_price_value
|
35
38
|
after_update :check_and_remove_item_props, :if => :atype_id_changed?
|
36
39
|
after_update :check_and_generate_sevent
|
37
40
|
|
@@ -319,61 +322,6 @@ module C80Estate
|
|
319
322
|
end
|
320
323
|
end
|
321
324
|
|
322
|
-
# выдать цену за м.кв. в месяц
|
323
|
-
# TODO_MY:: добавить модели Area столбец price_value и before_update метод, который высчитывал бы значение
|
324
|
-
def price_value
|
325
|
-
|
326
|
-
res = 0.0
|
327
|
-
mark_use_usual_price = false
|
328
|
-
|
329
|
-
# если указана "цена за площадь",
|
330
|
-
# то цену за м кв. в месяц высчитываем
|
331
|
-
pa = item_props.where(:prop_name_id => 14)
|
332
|
-
if pa.count > 0
|
333
|
-
pa_val = pa.first.value.to_f
|
334
|
-
|
335
|
-
if pa_val == 0
|
336
|
-
# если руками было проставлено 0 - т.е. свойство как бы было удалено, выключено
|
337
|
-
mark_use_usual_price = true
|
338
|
-
else
|
339
|
-
if square_value != 0
|
340
|
-
# результат получаем только тогда, когда указана площадь и когда указана цена за площадь
|
341
|
-
res = pa_val / square_value
|
342
|
-
else
|
343
|
-
# если не указана площадь - то берём обычную цену
|
344
|
-
mark_use_usual_price = true
|
345
|
-
end
|
346
|
-
end
|
347
|
-
else
|
348
|
-
mark_use_usual_price = true
|
349
|
-
end
|
350
|
-
|
351
|
-
if mark_use_usual_price
|
352
|
-
p = item_props.where(:prop_name_id => 1)
|
353
|
-
if p.count > 0
|
354
|
-
res = p.first.value.to_f
|
355
|
-
end
|
356
|
-
end
|
357
|
-
|
358
|
-
res
|
359
|
-
end
|
360
|
-
|
361
|
-
# TODO_MY:: добавить модели Area столбец square_value и before_update метод, который высчитывал бы значение
|
362
|
-
def square_value
|
363
|
-
res = 0.0
|
364
|
-
p = item_props.where(:prop_name_id => 9)
|
365
|
-
if p.count > 0
|
366
|
-
res = p.first.value.to_f
|
367
|
-
end
|
368
|
-
Rails.logger.debug "<Area.square_value> res = #{res}"
|
369
|
-
res
|
370
|
-
end
|
371
|
-
|
372
|
-
# TODO_MY:: добавить модели Area столбец power_price_value и before_update метод, который высчитывал бы значение
|
373
|
-
def power_price_value
|
374
|
-
price_value * 1.0 * square_value
|
375
|
-
end
|
376
|
-
|
377
325
|
def main_image_url
|
378
326
|
url = "no_thumb_#{atype.id}.jpg"
|
379
327
|
|
@@ -396,6 +344,31 @@ module C80Estate
|
|
396
344
|
res
|
397
345
|
end
|
398
346
|
|
347
|
+
# метод добавлен для того, чтобы можно было из консоли дёрнуть его и обновить поле с ценой
|
348
|
+
# сначала считаем площадь, затем цену (иначе, цена не посчитается)
|
349
|
+
def recalc_price
|
350
|
+
calc_price_value
|
351
|
+
end
|
352
|
+
|
353
|
+
# метод добавлен для того, чтобы можно было из консоли дёрнуть его и обновить поле с площадью
|
354
|
+
# сначала считаем площадь, затем цену (иначе, цена не посчитается)
|
355
|
+
def recalc_square
|
356
|
+
calc_square_value
|
357
|
+
end
|
358
|
+
|
359
|
+
# метод добавлен для того, чтобы можно было из консоли дёрнуть его и обновить поле с ценой за площадь
|
360
|
+
def recalc_power_price_value
|
361
|
+
calc_power_price_value
|
362
|
+
end
|
363
|
+
|
364
|
+
# перерассчитать все рассчитываемые переменные
|
365
|
+
# сначала считаем площадь, затем цену (иначе, цена не посчитается)
|
366
|
+
def recalc_all
|
367
|
+
recalc_square
|
368
|
+
recalc_price
|
369
|
+
recalc_power_price_value
|
370
|
+
end
|
371
|
+
|
399
372
|
ransacker :item_prop_price_val,
|
400
373
|
formatter: proc { |price_range| # 10,156
|
401
374
|
results = C80Estate::Area.where_price_range(price_range).map(&:id)
|
@@ -492,10 +465,10 @@ module C80Estate
|
|
492
465
|
|
493
466
|
# если статус этого события отличен
|
494
467
|
# от нового статуса - генерим события
|
495
|
-
Rails.logger.debug "<Area.check_and_generate_sevent> last_known_sevent = #{last_known_sevent}, self.astatuses.first.tag = #{self.astatuses.first.tag}"
|
468
|
+
Rails.logger.debug "[TRACE] <Area.check_and_generate_sevent> last_known_sevent = #{last_known_sevent}, self.astatuses.first.tag = #{self.astatuses.first.tag}"
|
496
469
|
|
497
470
|
if last_known_sevent != self.astatuses.first.tag
|
498
|
-
Rails.logger.debug "<Area.check_and_generate_sevent> [STATUS_CHANGED] self.last_updater_id = #{self.last_updater_id}"
|
471
|
+
Rails.logger.debug "[TRACE] <Area.check_and_generate_sevent> [STATUS_CHANGED] self.last_updater_id = #{self.last_updater_id}"
|
499
472
|
sparams = {
|
500
473
|
area_id: self.id,
|
501
474
|
atype_id: self.atype_id,
|
@@ -561,6 +534,8 @@ module C80Estate
|
|
561
534
|
end
|
562
535
|
|
563
536
|
def clean_unrelated_item_props
|
537
|
+
Rails.logger.debug "[TRACE] <Area.clean_unrelated_item_props>"
|
538
|
+
|
564
539
|
# item_props = [ {area,prop_name} ]
|
565
540
|
# item_props.delete_all
|
566
541
|
|
@@ -591,7 +566,7 @@ module C80Estate
|
|
591
566
|
item_props.each do |item_prop|
|
592
567
|
# Rails.logger.debug "<clean_unrelated_item_props> item_prop.prop_name.id = #{item_prop.prop_name.id}"
|
593
568
|
unless atype_prop_names_ids.include?(item_prop.prop_name.id.to_i)
|
594
|
-
Rails.logger.debug "<clean_unrelated_item_props> Удаляем '#{item_prop.prop_name.title}' из площади типа '#{atype.title}'."
|
569
|
+
Rails.logger.debug "[TRACE] <Area.clean_unrelated_item_props> Удаляем '#{item_prop.prop_name.title}' из площади типа '#{atype.title}'."
|
595
570
|
item_prop.destroy
|
596
571
|
end
|
597
572
|
end
|
@@ -600,20 +575,84 @@ module C80Estate
|
|
600
575
|
|
601
576
|
def clean_duplicated_item_props
|
602
577
|
# удаляем дубликаты
|
603
|
-
Rails.logger.debug "<clean_dublicated_item_props>"
|
578
|
+
Rails.logger.debug "[TRACE] <Area.clean_dublicated_item_props>"
|
579
|
+
|
604
580
|
item_props.each do |item_prop|
|
605
581
|
duplicates = item_props
|
606
582
|
.where(area_id: item_prop.area_id)
|
607
583
|
.where(prop_name_id: item_prop.prop_name_id)
|
608
584
|
.where.not(id: item_prop.id)
|
609
|
-
Rails.logger.debug "<clean_dublicated_item_props> #{item_prop.prop_name.title}: dublicates.count = #{duplicates.count}"
|
585
|
+
Rails.logger.debug "[TRACE] <Area.clean_dublicated_item_props> #{item_prop.prop_name.title}: dublicates.count = #{duplicates.count}"
|
610
586
|
|
611
587
|
if duplicates.count > 0
|
612
|
-
Rails.logger.debug "<clean_dublicated_item_props> delete '#{item_prop.prop_name.title}', val: #{item_prop.value}"
|
588
|
+
Rails.logger.debug "[TRACE] <Area.clean_dublicated_item_props> delete '#{item_prop.prop_name.title}', val: #{item_prop.value}"
|
613
589
|
duplicates.delete_all
|
614
590
|
end
|
615
591
|
end
|
616
592
|
end
|
617
593
|
|
594
|
+
# рассчитать цену за м.кв. в месяц
|
595
|
+
# updated_at Не изменится
|
596
|
+
def calc_price_value
|
597
|
+
# Rails.logger.debug '[TRACE] <Area.calc_price_value> begin...'
|
598
|
+
|
599
|
+
res = 0.0
|
600
|
+
mark_use_usual_price = false
|
601
|
+
|
602
|
+
# если указана "цена за площадь",
|
603
|
+
# то цену за м кв. в месяц высчитываем
|
604
|
+
pa = self.item_props.where(:prop_name_id => 14)
|
605
|
+
if pa.count > 0
|
606
|
+
pa_val = pa.first.value.to_f
|
607
|
+
|
608
|
+
if pa_val == 0
|
609
|
+
# если руками было проставлено 0 - т.е. свойство как бы было удалено, выключено
|
610
|
+
mark_use_usual_price = true
|
611
|
+
else
|
612
|
+
if self.square_value.present? && self.square_value != 0
|
613
|
+
# результат получаем только тогда, когда указана площадь и когда указана цена за площадь
|
614
|
+
res = pa_val / self.square_value
|
615
|
+
Rails.logger.debug '[TRACE] <Area.calc_price_value> Рассчитываем цену за метр из цены за площадь.'
|
616
|
+
else
|
617
|
+
# если не указана площадь - то берём обычную цену
|
618
|
+
mark_use_usual_price = true
|
619
|
+
end
|
620
|
+
end
|
621
|
+
else
|
622
|
+
mark_use_usual_price = true
|
623
|
+
end
|
624
|
+
|
625
|
+
if mark_use_usual_price
|
626
|
+
p = self.item_props.where(:prop_name_id => 1)
|
627
|
+
if p.count > 0
|
628
|
+
res = p.first.value.to_f
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
632
|
+
Rails.logger.debug "[TRACE] <Area.calc_price_value> end. result = #{res}."
|
633
|
+
# self.price_value = res
|
634
|
+
self.update_column(:price_value, res)
|
635
|
+
end
|
636
|
+
|
637
|
+
# добавляем модели Area столбец square_value и before_update метод, который высчитывает значение
|
638
|
+
# updated_at Не изменится
|
639
|
+
def calc_square_value
|
640
|
+
res = 0.0
|
641
|
+
p = item_props.where(:prop_name_id => 9)
|
642
|
+
if p.count > 0
|
643
|
+
res = p.first.value.to_f
|
644
|
+
end
|
645
|
+
Rails.logger.debug "[TRACE] <Area.square_value> res = #{res}"
|
646
|
+
# res
|
647
|
+
self.update_column(:square_value, res)
|
648
|
+
end
|
649
|
+
|
650
|
+
# добавляем модели Area столбец square_value и before_update метод, который высчитывает значение
|
651
|
+
# updated_at Не изменится
|
652
|
+
def calc_power_price_value
|
653
|
+
v = self.price_value * self.square_value
|
654
|
+
self.update_column(:power_price_value, v)
|
655
|
+
end
|
656
|
+
|
618
657
|
end
|
619
658
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# ради оптимизации вставляем в таблицу новый столбец "значение цены".
|
2
|
+
# также это нам позволит сотрировать в activeadmin таблице по этому значению
|
3
|
+
# Не забываем, что цена может быть либо указана явно, либо указана цена за площадь,
|
4
|
+
# а цена за метр рассчитывается
|
5
|
+
class AddPriceValueToC80EstateAreas < ActiveRecord::Migration
|
6
|
+
def change
|
7
|
+
add_column :c80_estate_areas, :price_value, :float
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# ради оптимизации вставляем в таблицу новый столбец "значение площади".
|
2
|
+
# также это нам позволит сотрировать в activeadmin таблице по этому значению
|
3
|
+
class AddSquareValueToC80EstateAreas < ActiveRecord::Migration
|
4
|
+
def change
|
5
|
+
add_column :c80_estate_areas, :square_value, :float
|
6
|
+
end
|
7
|
+
end
|
data/lib/c80_estate/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: c80_estate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.36
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C80609A
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -216,6 +216,9 @@ files:
|
|
216
216
|
- db/migrate/20160717094647_create_c80_estate_pstats.rb
|
217
217
|
- db/migrate/20160803093131_change_c80_estate_pstats_column_types.rb
|
218
218
|
- db/migrate/20160810064747_add_last_editor_to_c80_estate_areas.rb
|
219
|
+
- db/migrate/20160815053333_add_price_value_to_c80_estate_areas.rb
|
220
|
+
- db/migrate/20160815053334_add_square_value_to_c80_estate_areas.rb
|
221
|
+
- db/migrate/20160815053335_add_power_price_value_to_c80_estate_areas.rb
|
219
222
|
- db/seeds/50_fill_uoms.rb.example
|
220
223
|
- db/seeds/55_fill_prop_names.rb.example
|
221
224
|
- db/seeds/60_fill_atypes.rb.example
|