c80_estate 0.1.0.26 → 0.1.0.27
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 +7 -1
- data/app/assets/javascript/c80_estate/backend/admin/src/areas.js +22 -17
- data/app/assets/javascript/c80_estate/backend/admin/src/pstats.js +25 -1
- data/app/assets/stylesheets/c80_estate/backend/admin_areas.scss +19 -0
- data/app/assets/stylesheets/c80_estate/backend/common.scss +9 -0
- data/app/assets/stylesheets/c80_estate/backend/shared/index_adds_like_pstats.scss +55 -0
- data/app/helpers/c80_estate/areas_helper.rb +1 -1
- data/app/models/c80_estate/area.rb +45 -3
- data/app/models/c80_estate/property.rb +59 -28
- data/app/models/c80_estate/pstat.rb +20 -8
- data/lib/c80_estate/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 186988e51e84d02566e306dad6bd211623c76def
|
|
4
|
+
data.tar.gz: b14d9a239cb9905b2d772a8a718944acd434a9c6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cfd7e1d00a68415b299011611d8a9bb0400006b63b9ab15e1ba3b40df10f9e9cd67eff45079386b8a1575e91533fa332ded19a807ede05329003f5a892f6d1bd
|
|
7
|
+
data.tar.gz: 3d69dc9df0d4b2d148cce2b7c5e88a3d56288ff1d59580002f35f4a8830704f91934e86f22b62725185bcc8a0cc4029c8331b659da22235422e2717b39fc9365
|
|
@@ -151,7 +151,13 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
|
|
|
151
151
|
"#{area.price_value.to_s(:rounded, :precision => 2)} руб"
|
|
152
152
|
end
|
|
153
153
|
column '<abbr title="Стоимость всей площади в месяц. Число PxS, где P - цена за м.кв. в месяц, S - метраж площади в м.кв.">Цена площади</abbr>'.html_safe do |area|
|
|
154
|
-
|
|
154
|
+
klass = ''
|
|
155
|
+
title = 'Цена за площадь рассчитана'
|
|
156
|
+
if area.is_locked_area_price?
|
|
157
|
+
klass = 'locked'
|
|
158
|
+
title = 'Явно указана цена за площадь, цена за метр рассчитана от этого числа'
|
|
159
|
+
end
|
|
160
|
+
"<span title='#{title}' class='#{klass}'>#{area.power_price_value.to_s(:rounded, :precision => 2)} руб</span>".html_safe
|
|
155
161
|
end
|
|
156
162
|
column 'Метраж' do |area|
|
|
157
163
|
"#{area.square_value.to_s(:rounded, :precision => 2)} м<sup>2</sup>".html_safe
|
|
@@ -195,11 +195,11 @@ var jsinit = {
|
|
|
195
195
|
$iselprop.attr("disabled", true); // NOTE:: но в момент нажатия кнопки "Отправить" мы "разлачиваем" селект, чтобы параметры формы "правильно" отправлялись;
|
|
196
196
|
|
|
197
197
|
// в input "производитель" - ставим "-1" и прячем его от пользователя
|
|
198
|
-
if (ielem["id"] == 36) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
|
|
198
|
+
//if (ielem["id"] == 36) {
|
|
199
|
+
// $iinputprop.val("-1");
|
|
200
|
+
// $ifs.css("display",'none');
|
|
201
|
+
//}
|
|
202
|
+
$ifs.find("> ol").addClass('v_' + ielem["id"]);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
fLoadingHide();
|
|
@@ -309,6 +309,7 @@ var fEdit = function () {
|
|
|
309
309
|
//console.log(this);
|
|
310
310
|
return $(this).val() == ielem["id"]; //return $(this).text() == ielem["title"];
|
|
311
311
|
}).prop('selected', true);
|
|
312
|
+
//$ifs.addClass('v_'+ielem["id"]);
|
|
312
313
|
$iselprop.attr("disabled", true); // NOTE:: но в момент нажатия кнопки "Отправить" мы "разлачиваем" селект, чтобы параметры формы "правильно" отправлялись
|
|
313
314
|
|
|
314
315
|
}
|
|
@@ -338,22 +339,26 @@ var fEdit = function () {
|
|
|
338
339
|
return t;
|
|
339
340
|
});
|
|
340
341
|
|
|
342
|
+
// находим опцию id=36 селекта "имя свойства"
|
|
343
|
+
var $opt = $iselprop.find("option").filter(function () {
|
|
344
|
+
var $t = $(this);
|
|
345
|
+
//return $t.val() == 36 && $t.prop('selected');
|
|
346
|
+
return $t.val() == ielem["id"] && $t.prop('selected');
|
|
347
|
+
});
|
|
348
|
+
// из этой опции добираемся до fieldset, который её содержит
|
|
349
|
+
var $fieldset = $opt.parent().parent().parent();
|
|
350
|
+
|
|
351
|
+
//console.log($fieldset);
|
|
352
|
+
|
|
341
353
|
// в input "производитель" - ставим "-1" и прячем весь fieldset от пользователя
|
|
342
|
-
if (ielem["id"] == 36) {
|
|
343
|
-
// находим опцию id=36 селекта "имя свойства"
|
|
344
|
-
var $opt = $iselprop.find("option").filter(function () {
|
|
345
|
-
var $t = $(this);
|
|
346
|
-
return $t.val() == 36 && $t.prop('selected');
|
|
347
|
-
});
|
|
348
|
-
// из этой опции добираемся до fieldset, который её содержит
|
|
349
|
-
var $fieldset = $opt.parent().parent().parent();
|
|
354
|
+
//if (ielem["id"] == 36) {
|
|
350
355
|
// а затем уже находим input
|
|
351
|
-
|
|
356
|
+
//$fieldset.find("input").val("-1");
|
|
352
357
|
// прячем
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
}
|
|
358
|
+
//$fieldset.css('display','none');
|
|
359
|
+
//}
|
|
356
360
|
|
|
361
|
+
$fieldset.addClass('v_'+ielem["id"]);
|
|
357
362
|
}
|
|
358
363
|
|
|
359
364
|
fLoadingHide();
|
|
@@ -41,6 +41,11 @@ var fPstatsIndex = function () {
|
|
|
41
41
|
|
|
42
42
|
var $ajax_div, $ajax_div2;
|
|
43
43
|
|
|
44
|
+
// здесь живут средние арендные ставки: по всем, и по занятым
|
|
45
|
+
var $div_row_average_prices,
|
|
46
|
+
$p_average_price,
|
|
47
|
+
$p_average_price_busy;
|
|
48
|
+
|
|
44
49
|
var fBuild = function () {
|
|
45
50
|
|
|
46
51
|
// зафиксируем html элементы
|
|
@@ -57,6 +62,17 @@ var fPstatsIndex = function () {
|
|
|
57
62
|
// построим компонент "над таблицей"
|
|
58
63
|
$div_index_adds = $("<div class='index_adds_like_pstats'></div>");
|
|
59
64
|
|
|
65
|
+
// строка со средними ценами
|
|
66
|
+
$div_row_average_prices = $("<div id='div_row_average_prices'></div>").appendTo($div_index_adds);
|
|
67
|
+
var $div_average_price = $('<div class="average_price"></div>').appendTo($div_row_average_prices);
|
|
68
|
+
$p_average_price = $('<p class="val"></p>').appendTo($div_average_price);
|
|
69
|
+
var $average_price_comment = $('<p class="abbr"><abbr title="Суммируем все средние ставки всех объектов и делим на кол-во объектов. Если в фильтрах указан тип - то вычисления проводятся относительно указанного типа.">Средняя ставка</abbr></p>').appendTo($div_average_price);
|
|
70
|
+
|
|
71
|
+
var $div_average_price_busy = $('<div class="average_price_busy"></div>').appendTo($div_row_average_prices);
|
|
72
|
+
$p_average_price_busy = $('<p class="val"></p>').appendTo($div_average_price_busy);
|
|
73
|
+
var $average_price_comment_busy = $('<p class="abbr"><abbr title="Суммируем все средние ставки по занятым всех объектов и делим на кол-во объектов. Если в фильтрах указан тип - то вычисления проводятся относительно указанного типа.">Средняя ставка по занятым</abbr></p>').appendTo($div_average_price_busy);
|
|
74
|
+
|
|
75
|
+
// коэф-ты занятости
|
|
60
76
|
$div_busy_coef = $("<div id='coef'></div>").appendTo($div_index_adds);
|
|
61
77
|
$p_busy_coef = $("<p class='val'></p>").appendTo($div_busy_coef);
|
|
62
78
|
$p_busy_coef_mess = $("<p class='title'><abbr class='abbr_busy_coef' title='TITLE'>Занятость</abbr></p>").appendTo($div_busy_coef);
|
|
@@ -164,7 +180,15 @@ var fPstatsIndex = function () {
|
|
|
164
180
|
fDrawChartRadialSq(data["graph_radial_sq"]);
|
|
165
181
|
}
|
|
166
182
|
|
|
167
|
-
|
|
183
|
+
if (data["average_price"] != undefined && data["average_price_busy"] != undefined) {
|
|
184
|
+
$p_average_price.text(data["average_price"]);
|
|
185
|
+
$p_average_price_busy.text(data["average_price_busy"]);
|
|
186
|
+
$div_row_average_prices.css('opacity','1.0');
|
|
187
|
+
} else {
|
|
188
|
+
$div_row_average_prices.css('display','none');
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
$h2_page_title.html(data["title"]);
|
|
168
192
|
$h2_page_title.css('opacity', '1.0');
|
|
169
193
|
$(document).attr('title', data["title"]);
|
|
170
194
|
|
|
@@ -109,9 +109,24 @@ body.admin_areas {
|
|
|
109
109
|
.fieldset_item_props {
|
|
110
110
|
background-color: white !important;
|
|
111
111
|
box-shadow: none !important;
|
|
112
|
+
|
|
112
113
|
legend {
|
|
113
114
|
display: none !important;
|
|
114
115
|
}
|
|
116
|
+
|
|
117
|
+
fieldset.has_many_fields {
|
|
118
|
+
background-color: transparent !important;
|
|
119
|
+
box-shadow: none !important;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
ol.v_1, ol.v_9, ol.v_14 {
|
|
123
|
+
li.input.optional {
|
|
124
|
+
input {
|
|
125
|
+
background-color: rgba(255, 200, 127, 0.26) !important;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
115
130
|
}
|
|
116
131
|
|
|
117
132
|
}
|
|
@@ -160,6 +175,10 @@ body.admin_areas {
|
|
|
160
175
|
|
|
161
176
|
}
|
|
162
177
|
|
|
178
|
+
span.locked {
|
|
179
|
+
font-weight: bold;
|
|
180
|
+
}
|
|
181
|
+
|
|
163
182
|
}
|
|
164
183
|
|
|
165
184
|
&.show {
|
|
@@ -127,5 +127,60 @@ div.index_adds_like_pstats {
|
|
|
127
127
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
+
&#div_row_average_prices {
|
|
131
|
+
width:100%;
|
|
132
|
+
clear: both;
|
|
133
|
+
border: none;
|
|
134
|
+
height: auto;
|
|
135
|
+
margin-bottom: 15px;
|
|
136
|
+
padding: 0;
|
|
137
|
+
opacity: 0;
|
|
138
|
+
-webkit-transition: opacity .2s ease-in;
|
|
139
|
+
-moz-transition: opacity .2s ease-in;
|
|
140
|
+
-ms-transition: opacity .2s ease-in;
|
|
141
|
+
-o-transition: opacity .2s ease-in;
|
|
142
|
+
transition: opacity .2s ease-in;
|
|
143
|
+
|
|
144
|
+
> div {
|
|
145
|
+
border: none !important;
|
|
146
|
+
border-radius: 3px;
|
|
147
|
+
float: left;
|
|
148
|
+
padding: 10px;
|
|
149
|
+
color: white !important;
|
|
150
|
+
|
|
151
|
+
&.average_price {
|
|
152
|
+
width: calc(50% - 8px);
|
|
153
|
+
margin-right: 8px;
|
|
154
|
+
background: #A0DBE3;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
&.average_price_busy {
|
|
158
|
+
width: calc(50% - 19px);
|
|
159
|
+
margin-left: 7px;
|
|
160
|
+
background: #F7B6B0;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
> p {
|
|
164
|
+
float: left;
|
|
165
|
+
width: 50%;
|
|
166
|
+
white-space: nowrap;
|
|
167
|
+
font-size: 24px;
|
|
168
|
+
margin:0;
|
|
169
|
+
|
|
170
|
+
&.val {
|
|
171
|
+
padding: 0 0 0 15px;
|
|
172
|
+
font-weight: bold;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
&.abbr {
|
|
176
|
+
margin-top: -4px;
|
|
177
|
+
abbr {
|
|
178
|
+
border-bottom: 1px dotted white;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
130
185
|
}
|
|
131
186
|
}
|
|
@@ -23,7 +23,7 @@ module C80Estate
|
|
|
23
23
|
|
|
24
24
|
area.atype.prop_names.each do |atype_propname|
|
|
25
25
|
title = atype_propname.title
|
|
26
|
-
if atype_propname.id == 1 || atype_propname.id == 9
|
|
26
|
+
if atype_propname.id == 1 || atype_propname.id == 9 || atype_propname.id == 14
|
|
27
27
|
next
|
|
28
28
|
end
|
|
29
29
|
# value = prop.value
|
|
@@ -259,12 +259,41 @@ module C80Estate
|
|
|
259
259
|
sevents.last.auser.email
|
|
260
260
|
end
|
|
261
261
|
|
|
262
|
+
# выдать цену за м.кв. в месяц
|
|
262
263
|
def price_value
|
|
264
|
+
|
|
263
265
|
res = 0.0
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
266
|
+
mark_use_usual_price = false
|
|
267
|
+
|
|
268
|
+
# если указана "цена за площадь",
|
|
269
|
+
# то цену за м кв. в месяц высчитываем
|
|
270
|
+
pa = item_props.where(:prop_name_id => 14)
|
|
271
|
+
if pa.count > 0
|
|
272
|
+
pa_val = pa.first.value.to_f
|
|
273
|
+
|
|
274
|
+
if pa_val == 0
|
|
275
|
+
# если руками было проставлено 0 - т.е. свойство как бы было удалено, выключено
|
|
276
|
+
mark_use_usual_price = true
|
|
277
|
+
else
|
|
278
|
+
if square_value != 0
|
|
279
|
+
# результат получаем только тогда, когда указана площадь и когда указана цена за площадь
|
|
280
|
+
res = pa_val / square_value
|
|
281
|
+
else
|
|
282
|
+
# если не указана площадь - то берём обычную цену
|
|
283
|
+
mark_use_usual_price = true
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
else
|
|
287
|
+
mark_use_usual_price = true
|
|
267
288
|
end
|
|
289
|
+
|
|
290
|
+
if mark_use_usual_price
|
|
291
|
+
p = item_props.where(:prop_name_id => 1)
|
|
292
|
+
if p.count > 0
|
|
293
|
+
res = p.first.value.to_f
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
268
297
|
res
|
|
269
298
|
end
|
|
270
299
|
|
|
@@ -290,6 +319,19 @@ module C80Estate
|
|
|
290
319
|
url
|
|
291
320
|
end
|
|
292
321
|
|
|
322
|
+
# вернёт true, если вручную указана цена за всю площадь
|
|
323
|
+
def is_locked_area_price?
|
|
324
|
+
res = false
|
|
325
|
+
pa = item_props.where(:prop_name_id => 14)
|
|
326
|
+
if pa.count > 0
|
|
327
|
+
pa_val = pa.first.value.to_f
|
|
328
|
+
if pa_val > 0
|
|
329
|
+
res = true
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
res
|
|
333
|
+
end
|
|
334
|
+
|
|
293
335
|
ransacker :item_prop_price_val,
|
|
294
336
|
formatter: proc { |price_range| # 10,156
|
|
295
337
|
results = C80Estate::Area.where_price_range(price_range).map(&:id)
|
|
@@ -4,13 +4,13 @@ module C80Estate
|
|
|
4
4
|
belongs_to :owner, :polymorphic => true
|
|
5
5
|
belongs_to :assigned_person, :polymorphic => true
|
|
6
6
|
# has_many :item_props, :dependent => :destroy
|
|
7
|
-
has_many :pphotos, :dependent => :destroy
|
|
7
|
+
has_many :pphotos, :dependent => :destroy # одна или несколько фоток
|
|
8
8
|
accepts_nested_attributes_for :pphotos,
|
|
9
9
|
:reject_if => lambda { |attributes|
|
|
10
10
|
!attributes.present?
|
|
11
11
|
},
|
|
12
12
|
:allow_destroy => true
|
|
13
|
-
has_many :plogos, :dependent => :destroy
|
|
13
|
+
has_many :plogos, :dependent => :destroy # одна или несколько фоток
|
|
14
14
|
accepts_nested_attributes_for :plogos,
|
|
15
15
|
:reject_if => lambda { |attributes|
|
|
16
16
|
!attributes.present?
|
|
@@ -41,46 +41,77 @@ module C80Estate
|
|
|
41
41
|
ac
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
#
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
|
|
64
|
-
|
|
44
|
+
# посчитает среднее значение средних цен по коллекции
|
|
45
|
+
def self.average_price(atype_id: nil)
|
|
46
|
+
|
|
47
|
+
res = 0.0
|
|
48
|
+
sum = 0.0
|
|
49
|
+
|
|
50
|
+
c = self.all.count
|
|
51
|
+
if c > 0
|
|
52
|
+
self.all.each do |prop|
|
|
53
|
+
sum += prop.average_price(atype_id:atype_id)
|
|
54
|
+
end
|
|
55
|
+
res = sum / c
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
res
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# посчитает среднее значение средних цен ЗАНЯТЫХ ПЛОЩАДЕЙ по коллекции
|
|
62
|
+
# можно указать тип
|
|
63
|
+
def self.average_price_busy(atype_id: nil)
|
|
64
|
+
|
|
65
|
+
res = 0.0
|
|
66
|
+
sum = 0.0
|
|
67
|
+
|
|
68
|
+
c = self.all.count
|
|
69
|
+
if c > 0
|
|
70
|
+
self.all.each do |prop|
|
|
71
|
+
sum += prop.average_price_busy(atype_id:atype_id)
|
|
72
|
+
end
|
|
73
|
+
res = sum / c
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
res
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def average_price(atype_id: nil)
|
|
80
|
+
|
|
81
|
+
if atype_id.nil?
|
|
82
|
+
ars = areas.all
|
|
83
|
+
else
|
|
84
|
+
ars = areas.where_atype(atype_id)
|
|
85
|
+
end
|
|
86
|
+
|
|
65
87
|
price_sum = 0.0
|
|
66
|
-
|
|
88
|
+
|
|
89
|
+
ars.each do |area|
|
|
67
90
|
price_sum += area.price_value
|
|
68
91
|
end
|
|
69
92
|
|
|
70
|
-
if
|
|
71
|
-
price_sum*1.0 /
|
|
93
|
+
if ars.count != 0
|
|
94
|
+
price_sum*1.0 / ars.count
|
|
72
95
|
else
|
|
73
96
|
0.0
|
|
74
97
|
end
|
|
75
98
|
|
|
76
99
|
end
|
|
77
100
|
|
|
78
|
-
|
|
101
|
+
# рассчитать среднюю цену среди занятых у конкретного объекта
|
|
102
|
+
# можно указать дополнительно тип
|
|
103
|
+
def average_price_busy(atype_id: nil)
|
|
104
|
+
|
|
105
|
+
if atype_id.nil?
|
|
106
|
+
ars = areas.all
|
|
107
|
+
else
|
|
108
|
+
ars = areas.where_atype(atype_id)
|
|
109
|
+
end
|
|
79
110
|
|
|
80
111
|
busy_areas_count = 0
|
|
81
112
|
price_sum = 0.0
|
|
82
113
|
|
|
83
|
-
|
|
114
|
+
ars.each do |area|
|
|
84
115
|
if area.is_busy?
|
|
85
116
|
busy_areas_count += 1
|
|
86
117
|
price_sum += area.price_value
|
|
@@ -137,6 +137,8 @@ module C80Estate
|
|
|
137
137
|
|
|
138
138
|
# common
|
|
139
139
|
|
|
140
|
+
result[:average_price] = "#{Property.all.average_price.to_s(:rounded, :precision => 2)} руб" #'123,50 руб'
|
|
141
|
+
result[:average_price_busy] = "#{Property.all.average_price_busy.to_s(:rounded, :precision => 2)} руб" # '73,50 руб'
|
|
140
142
|
result[:title] = 'Статистика - Все объекты недвижимости'
|
|
141
143
|
# Rails.logger.debug "result ============= #{result}"
|
|
142
144
|
|
|
@@ -301,8 +303,12 @@ module C80Estate
|
|
|
301
303
|
result[:raw_props_sq][:busy_areas_atnow_sq] = busy_areas_atnow_sq
|
|
302
304
|
|
|
303
305
|
# common
|
|
304
|
-
|
|
306
|
+
result[:average_price] = "#{property.average_price(atype_id:atype_id).to_s(:rounded, :precision => 2)} руб" #'123,50 руб'
|
|
307
|
+
result[:average_price_busy] = "#{property.average_price_busy(atype_id:atype_id).to_s(:rounded, :precision => 2)} руб" #'73,50 руб'
|
|
305
308
|
result[:title] = "Статистика - Объект - #{property.title}"
|
|
309
|
+
if atype_id.present?
|
|
310
|
+
result[:title] += " <span class='h2_title_span'>// фильтр по типу: #{Atype.find(atype_id).title}</span>"
|
|
311
|
+
end
|
|
306
312
|
# result[:graph] = _parse_for_js_radial_graph(free_areas_atnow,busy_areas_atnow)
|
|
307
313
|
|
|
308
314
|
|
|
@@ -390,14 +396,19 @@ module C80Estate
|
|
|
390
396
|
|
|
391
397
|
# Занятость
|
|
392
398
|
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
399
|
+
=begin
|
|
400
|
+
# tt = _calc_free_busy_areas(pstats)
|
|
401
|
+
#
|
|
402
|
+
# free_areas_atnow = tt[:sum_free_areas] #*1.0/all_props.count #pstats.last.free_areas
|
|
403
|
+
# busy_areas_atnow = tt[:sum_busy_areas] #*1.0/all_props.count #pstats.last.busy_areas
|
|
404
|
+
#
|
|
398
405
|
# Rails.logger.debug("\t\t atype_id = #{atype_id}")
|
|
399
406
|
# Rails.logger.debug("\t\t free_areas_atnow = #{free_areas_atnow}")
|
|
400
407
|
# Rails.logger.debug("\t\t busy_areas_atnow = #{busy_areas_atnow}")
|
|
408
|
+
=end
|
|
409
|
+
|
|
410
|
+
free_areas_atnow = pstats.last.free_areas
|
|
411
|
+
busy_areas_atnow = pstats.last.busy_areas
|
|
401
412
|
|
|
402
413
|
# защищаемся от деления на ноль
|
|
403
414
|
if free_areas_atnow + busy_areas_atnow == 0
|
|
@@ -456,8 +467,9 @@ module C80Estate
|
|
|
456
467
|
result[:raw_props_sq][:busy_areas_atnow_sq] = busy_areas_atnow_sq
|
|
457
468
|
|
|
458
469
|
# common
|
|
459
|
-
|
|
460
|
-
result[:
|
|
470
|
+
result[:average_price] = "#{Property.all.average_price(atype_id: atype_id).to_s(:rounded, :precision => 2)} руб" #'123,50 руб'
|
|
471
|
+
result[:average_price_busy] = "#{Property.all.average_price_busy(atype_id: atype_id).to_s(:rounded, :precision => 2)} руб" # '73,50 руб'
|
|
472
|
+
result[:title] = "Статистика - Все объекты <span class='h2_title_span'>// фильтр по типу: #{Atype.find(atype_id).title}</span>"
|
|
461
473
|
|
|
462
474
|
# if atype_id.present?
|
|
463
475
|
# result[:title] += " (#{Atype.find(atype_id).title})"
|
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.27
|
|
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-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|