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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a63ef92bdfb5688fb9a777edb2f0fe55a1853b60
4
- data.tar.gz: 0e6a05f89a444b4bb1c1bf0ccb0426519f152310
3
+ metadata.gz: 435903a0873c24883172c8042bb12baf1af863f1
4
+ data.tar.gz: fcf87d83628c514dfa64818ecdf15ecc6cff4646
5
5
  SHA512:
6
- metadata.gz: 719fa3098fdf9b9b50fbea6ee3ef9ef1bee4d006e6a147e09d9c81132acfc2c9750890916684dcad83914d263dce79e04af487bd34f4da7aa7eea6cec6c36c47
7
- data.tar.gz: 42254bee3a70f7aae32832c2115a04b5d07f8d15d6a86dc3a65596e8f7fed264f7f5ba60f233b46405c38a7aec221fb94892be32915e6940d79b4318239010ad
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
- column '<abbr title="Стоимость всей площади в месяц. Число PxS, где P - цена за м.кв. в месяц, S - метраж площади в м.кв.">Цена площади</abbr>'.html_safe do |area|
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
- column 'Метраж' do |area|
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
@@ -0,0 +1,5 @@
1
+ class AddPowerPriceValueToC80EstateAreas < ActiveRecord::Migration
2
+ def change
3
+ add_column :c80_estate_areas, :power_price_value, :float
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module C80Estate
2
- VERSION = '0.1.0.35'
2
+ VERSION = '0.1.0.36'
3
3
  end
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.35
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-10 00:00:00.000000000 Z
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