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 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