c80_estate 0.1.0.14 → 0.1.0.15

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.
Files changed (23) hide show
  1. checksums.yaml +4 -4
  2. data/app/admin/c80_estate/properties.rb +5 -0
  3. data/app/assets/javascript/c80_estate/backend/admin/shared/areas/gallery3.js +27 -26
  4. data/app/assets/javascript/c80_estate/backend/admin/shared/properties/property_show.js +480 -0
  5. data/app/assets/javascript/c80_estate/backend/admin/src/properties.js +5 -0
  6. data/app/assets/javascript/c80_estate/backend/admin/src/pstats.js +67 -3
  7. data/app/assets/javascript/c80_estate/lib/highstock.js +434 -0
  8. data/app/assets/stylesheets/c80_estate/backend/admin_pstats.scss +0 -132
  9. data/app/assets/stylesheets/c80_estate/backend/dashboard/prop_in_list.scss +1 -1
  10. data/app/assets/stylesheets/c80_estate/backend/shared/areas/stroitelnye_materialy_item/div_comments.scss +3 -1
  11. data/app/assets/stylesheets/c80_estate/backend/shared/areas/stroitelnye_materialy_item/div_main.scss +4 -2
  12. data/app/assets/stylesheets/c80_estate/backend/shared/index_adds_like_pstats.scss +131 -0
  13. data/app/helpers/c80_estate/app_helper.rb +38 -0
  14. data/app/helpers/c80_estate/properties_helper.rb +67 -0
  15. data/app/models/c80_estate/area.rb +15 -8
  16. data/app/models/c80_estate/property.rb +28 -0
  17. data/app/models/c80_estate/pstat.rb +96 -10
  18. data/app/uploaders/c80_estate/pphoto_uploader.rb +2 -2
  19. data/app/views/admin/properties/_show_property.html.erb +1 -0
  20. data/app/views/c80_estate/shared/areas/_single_area_on_page.html.erb +1 -1
  21. data/app/views/c80_estate/shared/properties/_single_property_on_page.html.erb +38 -0
  22. data/lib/c80_estate/version.rb +1 -1
  23. metadata +9 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 75d267cd0efbe038362a4b5430a210bcae3b4b8d
4
- data.tar.gz: ec12dcf5651824cf9aa505cf35bd03cbcbe07132
3
+ metadata.gz: 7ff0030c8aa2dd9f03a584c6e7455e1a607b2a31
4
+ data.tar.gz: bfd7c323f17f5dd8ddb90682ecf763c6babdaad1
5
5
  SHA512:
6
- metadata.gz: 468937264e5b532ae8edf00bb6320f975eddacafb5e9787c730d4781fd96593936375ffb009c16522e097d7a1b59f27db038f72972a64912bc4a6322d67f80a5
7
- data.tar.gz: bce7229fffd0536f1572596d1853a604a60e9c67954084e1ac6d9496ffa2d4ed294879725746f9a32d4d5bf609f120ea118e2a81609bf007a160855823990aa1
6
+ metadata.gz: b3f0b8bf0c793d4d833e61ecfec61cacb1ac1069a71e52d25eaba9b8a889efc048c4c531aa19c8a7832233026b180d2e3f31cbefad9b3ba0c23cf8ba68cc09d9
7
+ data.tar.gz: b44dd46af5e313164c43410b7811c28bdd9408366ca0dd99e18dfd3fba8fae8cdf5b941ab65747c5449c57feeceddbcfd6b2f270ab405279eda0188535ce8246
@@ -104,4 +104,9 @@ ActiveAdmin.register C80Estate::Property, as: 'Property' do
104
104
  f.actions
105
105
  end
106
106
 
107
+ show do
108
+ render partial: 'show_property', locals: { property:resource }
109
+ active_admin_comments
110
+ end
111
+
107
112
  end
@@ -1,5 +1,5 @@
1
1
  //
2
- $(document).ready(function(){
2
+ $(document).ready(function () {
3
3
 
4
4
  var $carousel_div = $('#gallery3');
5
5
 
@@ -7,36 +7,37 @@ $(document).ready(function(){
7
7
  slidesToShow: 1,
8
8
  slidesToScroll: 1,
9
9
  autoplay: false,
10
- fade:true,
11
- arrows:true,
10
+ fade: true,
11
+ arrows: true,
12
12
  speed: 200,
13
- dots:false,
13
+ dots: false,
14
14
  infinite: true,
15
15
  asNavFor: '#gallery3_nav'
16
16
  });
17
17
 
18
- $('#gallery3_nav').slick({
19
- slidesToShow: small_frames_slidesToShow,
20
- slidesToScroll: 1,
21
- asNavFor: '#gallery3',
22
- dots: small_frames_dots,
23
- //centerMode: true,
24
- arrows:false,
25
- focusOnSelect: true
26
- });
27
-
28
- setTimeout(function() {
29
- var $b = $("#gallery3_nav").find(".img-holder");
30
- //console.log($b);
31
- $b.bind({
32
- mouseenter: function() {
33
- $(this).addClass("plusOpacity");
34
- },
35
- mouseleave: function() {
36
- $(this).removeClass("plusOpacity");
37
- }
38
- })
39
- },100);
18
+ if (typeof(small_frames_dots) != 'undefined' && typeof(small_frames_slidesToShow) != 'undefined' && small_frames_dots !== undefined && small_frames_slidesToShow !== undefined) {
19
+ $('#gallery3_nav').slick({
20
+ slidesToShow: small_frames_slidesToShow,
21
+ slidesToScroll: 1,
22
+ asNavFor: '#gallery3',
23
+ dots: small_frames_dots,
24
+ //centerMode: true,
25
+ arrows: false,
26
+ focusOnSelect: true
27
+ });
40
28
 
29
+ setTimeout(function () {
30
+ var $b = $("#gallery3_nav").find(".img-holder");
31
+ //console.log($b);
32
+ $b.bind({
33
+ mouseenter: function () {
34
+ $(this).addClass("plusOpacity");
35
+ },
36
+ mouseleave: function () {
37
+ $(this).removeClass("plusOpacity");
38
+ }
39
+ })
40
+ }, 100);
41
+ }
41
42
 
42
43
  });
@@ -0,0 +1,480 @@
1
+ "use strict";
2
+
3
+ var fPropertiesShow_initRichShowPage = function () {
4
+
5
+ //fCommon();
6
+ fItemImageMagnificPopupStart();
7
+
8
+ // если нужна кнопка "заказать"
9
+ //var $b = $('.c80_order_invoking_btn');
10
+ //$b.click(function (e) {
11
+ // if (orderForm) {
12
+ // orderForm.afterShowForm = function () {
13
+ $("textarea#mess_comment").focus();
14
+ //
15
+ //var $t = $("textarea#mess_comment");
16
+ //$t.data('toggle', 'tooltip');
17
+ //$t.data('palacement', 'right');
18
+ //$t.data('title', 'Укажите желаемое количество.');
19
+ //$t.tooltip();
20
+ //
21
+ //var $f = $('#form_order');
22
+ //
23
+ //var $b = $f.find('.btn');
24
+ //$b.removeClass('btn');
25
+ //$b.removeClass('btn-primary');
26
+ //$b.addClass('red_button');
27
+ //$b.attr('style','line-height: 34px;font-size: 16px;color: white; text-transform: uppercase; border-radius: 4px !important;');
28
+ //
29
+ //var $c = $f.find('.actions');
30
+ //$c.css('margin-top','15px');
31
+ //};
32
+ //}
33
+ //});
34
+
35
+ };
36
+
37
+ var fPropertiesShow = function () {
38
+
39
+ // элементы html страницы
40
+ var $main_content; // правая сторона, там живёт таблица
41
+ //var $select_atype; // фильтр atype
42
+ //var $select_property; // фильтр property
43
+ //var $input_start_date; // фильтр "дата начала периода"
44
+ //var $input_end_date; // фильтр "дата конца периода"
45
+ //var $h2_page_title; // заголовок страницы
46
+
47
+ // компонент "над таблицей"
48
+ var $div_index_adds;
49
+
50
+ // блок ЗАНЯТОСТЬ
51
+ var $div_busy_coef,
52
+ $p_busy_coef, // здесь выводим число - занятость
53
+ $p_busy_coef_mess, // здесь вешаем hint на подпись "занятость"
54
+ $p_busy_coef_comment; // здесь выводим комментарий
55
+
56
+ // блок ЗАНЯТОСТЬ (В М.КВ)
57
+ var $div_busy_coef_sq,
58
+ $p_busy_coef_sq, // здесь выводим число - занятость в м.кв
59
+ $p_busy_coef_mess_sq, // здесь вешаем hint на подпись "занятость в м"
60
+ $p_busy_coef_comment_sq; // здесь выводим комментарий
61
+
62
+ var $div_area_text_stats,
63
+ $ul_props; // здесь выводим текстовые свойства
64
+
65
+ var $div_area_text_stats_sq,
66
+ $ul_props_sq; // здесь выводим текстовые свойства занятости в метрах
67
+
68
+ // тут живут круговые графики
69
+ var $div_graph_radial;
70
+ var $div_graph_radial_sq;
71
+
72
+ // тут живут динамические графики
73
+ var $div_graph_dynamic,
74
+ $div_graph_dynamic_sq;
75
+
76
+ var $ajax_div, $ajax_div2;
77
+
78
+ var fBuild = function () {
79
+
80
+ // зафиксируем html элементы
81
+ $main_content = $('#main_content');
82
+ //$select_atype = $("#q_atype_id");
83
+ //$select_property = $("#q_property_id");
84
+ //$input_start_date = $("#q_created_at_gteq");
85
+ //$input_end_date = $("#q_created_at_lteq");
86
+ //$h2_page_title = $("h2#page_title");
87
+ //
88
+
89
+ $ajax_div = $("<div id='ajax_div'></div>");
90
+ $ajax_div2 = $("<div id='ajax_div2'></div>");
91
+
92
+ // построим компонент "над таблицей"
93
+ $div_index_adds = $("<div class='index_adds_like_pstats'></div>");
94
+
95
+ $div_busy_coef = $("<div id='coef'></div>").appendTo($div_index_adds);
96
+ $p_busy_coef = $("<p class='val'></p>").appendTo($div_busy_coef);
97
+ $p_busy_coef_mess = $("<p class='title'><abbr class='abbr_busy_coef' title='TITLE'>Занятость</abbr></p>").appendTo($div_busy_coef);
98
+ $p_busy_coef_comment = $("<p class='comment'></p>").appendTo($div_busy_coef);
99
+
100
+ $div_area_text_stats = $("<div id='text_stats'></div>").appendTo($div_index_adds);
101
+ $ul_props = $("<ul><li id='title'></li><li id='born_date'></li><li id='atype_filter'></li><li id='all_areas_count'></li><li id='free_areas_count'></li><li id='busy_areas_count'></li></ul>");
102
+ $div_area_text_stats.append($ul_props);
103
+
104
+ $div_graph_radial = $("<div id='graph_radial'></div>").appendTo($div_index_adds);
105
+
106
+ $div_busy_coef_sq = $("<div id='coef_sq'></div>").appendTo($div_index_adds);
107
+ $p_busy_coef_sq = $("<p class='val'></p>").appendTo($div_busy_coef_sq);
108
+ $p_busy_coef_mess_sq = $("<p class='title'><abbr class='abbr_busy_coef_sq' title='TITLE'>Занятость (в м.кв.)</abbr></p>").appendTo($div_busy_coef_sq);
109
+ $p_busy_coef_comment_sq = $("<p class='comment'></p>").appendTo($div_busy_coef_sq);
110
+
111
+ $div_area_text_stats_sq = $("<div id='text_stats_sq'></div>").appendTo($div_index_adds);
112
+ $ul_props_sq = $("<ul><li id='all_areas_count_sq'></li><li id='free_areas_count_sq'></li><li id='busy_areas_count_sq'></li></ul>");
113
+ $div_area_text_stats_sq.append($ul_props_sq);
114
+
115
+ $div_graph_radial_sq = $("<div id='graph_radial_sq'></div>").appendTo($div_index_adds);
116
+
117
+ $div_graph_dynamic = $("<div id='graph2'></div>").appendTo($div_index_adds);
118
+
119
+ $div_graph_dynamic_sq = $("<div id='graph3'></div>").appendTo($div_index_adds);
120
+
121
+ $main_content.prepend($ajax_div2);
122
+ $main_content.prepend($ajax_div);
123
+ $main_content.prepend($div_index_adds);
124
+
125
+ $(".comments").before($('<h4 style="padding-top:15px;">Статистика</h4>'));
126
+ $(".comments").before($div_index_adds);
127
+
128
+ // теперь покажем
129
+ $main_content.css('opacity', '1.0');
130
+ };
131
+
132
+ // запросим коэф-ты и данные для построения графиков
133
+ var fRequestCoefs = function () {
134
+
135
+ //var atype_id = $select_atype.val();
136
+ //var property_id = $select_property.val();
137
+ //var start_date = $input_start_date.val();
138
+ //var end_date = $input_end_date.val();
139
+
140
+ var property_id = -1;
141
+ var url = unescape(window.location.href);
142
+ var match_res = url.match(/properties\/(\d{1,9})/);
143
+ if (match_res != null) {
144
+ property_id = Number(match_res[1]);
145
+ }
146
+
147
+ $.ajax({
148
+ url: '/estate/properties_busy_coef',
149
+ type: 'POST',
150
+ dataType: 'json',
151
+ data: {
152
+ prop_id: property_id
153
+ }
154
+ }).done(function (data, result) {
155
+ if (result == 'success') {
156
+
157
+ console.log(data);
158
+
159
+ var i, iob, itag, ival, $ili;
160
+
161
+ $p_busy_coef.text(data["busy_coef"]);
162
+ $p_busy_coef_comment.html(data["comment"]);
163
+ $p_busy_coef_mess.find('.abbr_busy_coef').attr('title', data["abbr"]);
164
+
165
+ $p_busy_coef_sq.text(data["busy_coef_sq"]);
166
+ $p_busy_coef_comment_sq.html(data["comment_sq"]);
167
+ $p_busy_coef_mess_sq.find('.abbr_busy_coef').attr('title', data["abbr_sq"]);
168
+
169
+ if (data["props"] != undefined) {
170
+
171
+ for (i = 0; i < data["props"].length; i++) {
172
+ iob = data["props"][i];
173
+ itag = iob["tag"];
174
+ ival = iob["val"];
175
+ $ili = $ul_props.find("#" + itag);
176
+ $ili.html(ival);
177
+ }
178
+
179
+ }
180
+
181
+ if (data["props_sq"] != undefined) {
182
+
183
+ for (i = 0; i < data["props_sq"].length; i++) {
184
+ iob = data["props_sq"][i];
185
+ itag = iob["tag"];
186
+ ival = iob["val"];
187
+ $ili = $ul_props_sq.find("#" + itag);
188
+ $ili.html(ival);
189
+ }
190
+
191
+ }
192
+
193
+ if (data["graph_radial"] != undefined) {
194
+ fDrawChartRadial(data["graph_radial"]);
195
+ }
196
+
197
+ if (data["graph_dynamic"] != undefined) {
198
+ fDrawChartDynamic(data["graph_dynamic"]);
199
+ }
200
+
201
+ if (data["graph_dynamic_sq"] != undefined) {
202
+ fDrawChartDynamicSq(data["graph_dynamic_sq"]);
203
+ }
204
+
205
+ if (data["graph_radial_sq"] != undefined) {
206
+ fDrawChartRadialSq(data["graph_radial_sq"]);
207
+ }
208
+
209
+ //$h2_page_title.text(data["title"]);
210
+ //$h2_page_title.css('opacity', '1.0');
211
+ //$(document).attr('title', data["title"]);
212
+
213
+ } else {
214
+ alert('fail: /estate/properties_busy_coef');
215
+ }
216
+ //fPreloaderHide();
217
+ });
218
+
219
+ //fPreloaderShow();
220
+ };
221
+
222
+ var fInit = function () {
223
+ fBuild();
224
+ fRequestCoefs();
225
+ fPropertiesShow_initRichShowPage();
226
+ };
227
+
228
+ // рисуем динамический график занятости
229
+ var fDrawChartDynamic = function (data) {
230
+ $div_graph_dynamic.css('opacity','1.0').css('display','block');
231
+ $('#graph2').highcharts('StockChart', {
232
+
233
+ yAxis: {
234
+ min:0,
235
+ max:120
236
+ },
237
+
238
+ plotOptions: {
239
+ line: {
240
+ linecap: 'square'
241
+ }
242
+ },
243
+
244
+ rangeSelector : {
245
+ selected : 1
246
+ },
247
+
248
+ title : {
249
+ text : 'Коэф-т занятости объекта за указанный период'
250
+ },
251
+
252
+ series : [{
253
+ name : 'Занятость',
254
+ data : data,
255
+ tooltip: {
256
+ valueDecimals: 2
257
+ }
258
+ }]
259
+ });
260
+ };
261
+ var fDrawChartDynamic_old = function (data_array_rows_dynamic) {
262
+
263
+ var dataPoints = [];
264
+ //[
265
+ // {x: new Date(2012,0), y: 8.3} ,
266
+ // {x: new Date(2012,1), y: 8.3} ,
267
+ // {x: new Date(2012,2), y: 8.2} ,
268
+ // {x: new Date(2012,3), y: 8.1} ,
269
+ // {x: new Date(2012,4), y: 8.2} ,
270
+ // {x: new Date(2012,5), y: 8.2} ,
271
+ // {x: new Date(2012,6), y: 8.2} ,
272
+ // {x: new Date(2012,7), y: 8.1} ,
273
+ // {x: new Date(2012,8), y: 7.8} ,
274
+ // {x: new Date(2012,9), y: 7.9} ,
275
+ // {x: new Date(2012,10), y:7.8} ,
276
+ // {x: new Date(2012,11), y:7.8} ,
277
+ // {x: new Date(2013,0), y:7.9} ,
278
+ // {x: new Date(2013,1), y:7.7} ,
279
+ // {x: new Date(2013,2), y:7.6} ,
280
+ // {x: new Date(2013,3), y:7.5}
281
+ //]
282
+
283
+ var i, iob;
284
+ for (i = 0; i < data_array_rows_dynamic.length; i ++) {
285
+ iob = data_array_rows_dynamic[i];
286
+ dataPoints.push({
287
+ x: new Date(iob["year"], iob["month"], iob["day"]),
288
+ y: iob["val"]
289
+ })
290
+ }
291
+
292
+ var chart = new CanvasJS.Chart("graph2",
293
+ {
294
+ title:{
295
+ text: "Занятость"
296
+ },
297
+ animationEnabled: true,
298
+ axisY:{
299
+ includeZero: false,
300
+ interval: 10,
301
+ valueFormatString: ""
302
+ },
303
+ data: [
304
+ {
305
+ type: "stepArea",
306
+ toolTipContent: "{x}: {y}%",
307
+ markerSize: 5,
308
+ dataPoints: dataPoints
309
+ }
310
+
311
+ ]
312
+ });
313
+
314
+ $div_graph_dynamic.css('opacity','1.0').css('display','block');
315
+ chart.render();
316
+
317
+ };
318
+
319
+ // рисуем динамический график занятости в м.кв.
320
+ var fDrawChartDynamicSq = function (data) {
321
+ $div_graph_dynamic_sq.css('opacity','1.0').css('display','block');
322
+ $('#graph3').highcharts('StockChart', {
323
+
324
+ yAxis: {
325
+ min:0,
326
+ max:120
327
+ },
328
+
329
+ plotOptions: {
330
+ line: {
331
+ linecap: 'square'
332
+ }
333
+ },
334
+
335
+ rangeSelector : {
336
+ selected : 1
337
+ },
338
+
339
+ title : {
340
+ text : 'Коэф-т занятости в м.кв.'
341
+ },
342
+
343
+ series : [{
344
+ name : 'Занятость в м.кв.',
345
+ data : data,
346
+ tooltip: {
347
+ valueDecimals: 2
348
+ }
349
+ }]
350
+ });
351
+ };
352
+ var fDrawChartDynamicSq_old = function (data) {
353
+
354
+ var dataPoints = [];
355
+ //[
356
+ // {x: new Date(2012,0), y: 8.3} ,
357
+ // {x: new Date(2012,1), y: 8.3} ,
358
+ // {x: new Date(2012,2), y: 8.2} ,
359
+ // {x: new Date(2012,3), y: 8.1} ,
360
+ // {x: new Date(2012,4), y: 8.2} ,
361
+ // {x: new Date(2012,5), y: 8.2} ,
362
+ // {x: new Date(2012,6), y: 8.2} ,
363
+ // {x: new Date(2012,7), y: 8.1} ,
364
+ // {x: new Date(2012,8), y: 7.8} ,
365
+ // {x: new Date(2012,9), y: 7.9} ,
366
+ // {x: new Date(2012,10), y:7.8} ,
367
+ // {x: new Date(2012,11), y:7.8} ,
368
+ // {x: new Date(2013,0), y:7.9} ,
369
+ // {x: new Date(2013,1), y:7.7} ,
370
+ // {x: new Date(2013,2), y:7.6} ,
371
+ // {x: new Date(2013,3), y:7.5}
372
+ //]
373
+
374
+ var i, iob;
375
+ for (i = 0; i < data.length; i ++) {
376
+ iob = data[i];
377
+ dataPoints.push({
378
+ x: new Date(iob["year"], iob["month"], iob["day"]),
379
+ y: iob["val"]
380
+ })
381
+ }
382
+
383
+ var chart = new CanvasJS.Chart("graph3",
384
+ {
385
+ title:{
386
+ text: "Занятость в м.кв."
387
+ },
388
+ animationEnabled: true,
389
+ axisY:{
390
+ includeZero: false,
391
+ interval: 10,
392
+ valueFormatString: ""
393
+ },
394
+ data: [
395
+ {
396
+ type: "stepArea",
397
+ toolTipContent: "{x}: {y}%",
398
+ markerSize: 5,
399
+ dataPoints: dataPoints
400
+ }
401
+
402
+ ]
403
+ });
404
+
405
+ $div_graph_dynamic_sq.css('opacity','1.0').css('display','block');
406
+ chart.render();
407
+
408
+ };
409
+
410
+ var fDrawChartRadial = function (data) {
411
+
412
+ // data:
413
+ // [
414
+ // { y: 6, legendText:"Свободно", label: "Площадей свободно" },
415
+ // { y: 4, legendText:"Занято", label: "Площадей занято" }
416
+ // ]
417
+
418
+ var chart = new CanvasJS.Chart("graph_radial",
419
+ {
420
+ animationEnabled: true,
421
+ legend:{
422
+ verticalAlign: "center",
423
+ horizontalAlign: "",
424
+ fontSize: 0,
425
+ fontFamily: "Open Sans"
426
+ },
427
+ theme: "theme",
428
+ data: [
429
+ {
430
+ type: "pie",
431
+ indexLabelFontFamily: "Open Sans",
432
+ indexLabelFontSize: 14,
433
+ indexLabel: "{label}: {y}",
434
+ startAngle:-10,
435
+ showInLegend: true,
436
+ toolTipContent:"{legendText} {y}",
437
+ dataPoints: data
438
+ }
439
+ ]
440
+ });
441
+ chart.render();
442
+ };
443
+
444
+ var fDrawChartRadialSq = function (data) {
445
+
446
+ // data:
447
+ // [
448
+ // { y: 6, legendText:"", label: "Метров свободно" },
449
+ // { y: 4, legendText:"", label: "Метров занято" }
450
+ // ]
451
+
452
+ var chart = new CanvasJS.Chart("graph_radial_sq",
453
+ {
454
+ animationEnabled: true,
455
+ legend:{
456
+ verticalAlign: "center",
457
+ horizontalAlign: "",
458
+ fontSize: 0,
459
+ fontFamily: "Open Sans"
460
+ },
461
+ theme: "theme",
462
+ data: [
463
+ {
464
+ type: "pie",
465
+ indexLabelFontFamily: "Open Sans",
466
+ indexLabelFontSize: 14,
467
+ indexLabel: "{label}: {y}",
468
+ startAngle:-10,
469
+ showInLegend: true,
470
+ toolTipContent:"{legendText} {y}",
471
+ dataPoints: data
472
+ }
473
+ ]
474
+ });
475
+ chart.render();
476
+ };
477
+
478
+ fInit();
479
+
480
+ };