c80_estate 0.1.0.14 → 0.1.0.15

Sign up to get free protection for your applications and to get access to all the features.
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
+ };