c80_estate 0.1.0.35 → 0.1.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|