c80_estate 0.1.0.9 → 0.1.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/admin/c80_estate/admin_user.rb +4 -1
- data/app/admin/c80_estate/areas.rb +30 -20
- data/app/admin/c80_estate/astatuses.rb +1 -0
- data/app/admin/c80_estate/comments.rb +3 -1
- data/app/admin/c80_estate/dashboard.rb +14 -4
- data/app/admin/c80_estate/properties.rb +1 -1
- data/app/admin/c80_estate/pstats.rb +1 -0
- data/app/assets/javascript/c80_estate/backend/admin/areas.js +180 -19
- data/app/assets/javascript/c80_estate/backend/admin/pstats.js +155 -147
- data/app/assets/javascript/c80_estate/lib/bootstrap-slider.js +1641 -0
- data/app/assets/stylesheets/c80_estate/backend/admin_areas.scss +7 -3
- data/app/assets/stylesheets/c80_estate/backend/admin_pstats.scss +19 -11
- data/app/assets/stylesheets/c80_estate/backend/common.scss +5 -0
- data/app/controllers/c80_estate/ajax_areas_controller.rb +38 -0
- data/app/helpers/c80_estate/app_helper.rb +45 -36
- data/app/models/c80_estate/area.rb +94 -0
- data/app/models/c80_estate/item_prop.rb +4 -2
- data/app/models/c80_estate/owner.rb +8 -2
- data/app/models/c80_estate/pstat.rb +53 -35
- data/app/views/admin/dashboard/_prop_in_list.html.erb +1 -2
- data/app/views/c80_estate/ajax_areas/exel_import.html.erb +1 -0
- data/app/views/c80_estate/ajax_areas/exel_import.js.erb +6 -0
- data/app/views/c80_estate/shared/_form_upload_areas_excel.erb +37 -0
- data/app/views/c80_estate/shared/_table_properties_coef_busy.html.erb +12 -8
- data/app/views/c80_estate/shared/_table_properties_coef_busy_sq.html.erb +12 -8
- data/config/routes.rb +2 -0
- data/lib/c80_estate/version.rb +1 -1
- metadata +7 -3
- data/app/assets/javascript/c80_estate/lib/bootstrap-slider.min.js +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92db0eea3e78217e967bdfecb4b213e0cf85c354
|
4
|
+
data.tar.gz: 5a5abb3d09dce79ea8bd7ee064e71b70c14cd30e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 510854ede032d5d38f084423f800060275eaa1de4c018304380e11e86016e4385904a8ab70c24a783019720f5dfb41320be22702f7ed9100f08f9394b72b7c0b
|
7
|
+
data.tar.gz: b9de54cec83c69cfc02b90e7245cce71f774987405ced9d734e2fe4ab06366b0a3b8043308a4d2aa0aa2dc5cc33ebe457a44c9c09838e25007672b7217dbae5a
|
@@ -20,7 +20,10 @@ ActiveAdmin.register AdminUser do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
# menu :if => proc {current_admin_user.email == "tz007@mail.ru"}
|
23
|
-
menu label: 'Пользователи',
|
23
|
+
menu label: 'Пользователи',
|
24
|
+
:if => proc { current_admin_user.can_view_users? },
|
25
|
+
:priority => 9
|
26
|
+
|
24
27
|
index do
|
25
28
|
selectable_column
|
26
29
|
id_column
|
@@ -2,7 +2,7 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
|
|
2
2
|
|
3
3
|
# scope_to :current_admin_user, association_method: :sites_list
|
4
4
|
|
5
|
-
menu :label =>
|
5
|
+
menu :label => 'Площади', priority: 3
|
6
6
|
|
7
7
|
permit_params :title,
|
8
8
|
:desc,
|
@@ -88,28 +88,30 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
|
|
88
88
|
:as => :string,
|
89
89
|
:label => 'Площадь (м.кв.)',
|
90
90
|
:input_html => {data: {
|
91
|
-
provide: 'slider',
|
91
|
+
# provide: 'slider',
|
92
92
|
slider_ticks: C80Estate::ItemProp.all_uniq_values(9).to_json, #'[0, 1, 2, 3]',
|
93
93
|
slider_labels: C80Estate::ItemProp.all_uniq_values(9).to_json, #'["none", short", "medium","long"]',
|
94
|
-
slider_min: C80Estate::ItemProp.all_uniq_values(9).
|
95
|
-
slider_max: C80Estate::ItemProp.all_uniq_values(9).
|
94
|
+
slider_min: C80Estate::ItemProp.all_uniq_values(9).sort.first,
|
95
|
+
slider_max: C80Estate::ItemProp.all_uniq_values(9).sort.last,
|
96
96
|
slider_step: 1,
|
97
97
|
slider_value: 0,
|
98
|
-
slider_range: true
|
98
|
+
slider_range: true,
|
99
|
+
slider_tooltip: 'hide'
|
99
100
|
}}
|
100
101
|
|
101
102
|
filter :item_prop_price_val_in,
|
102
103
|
:as => :string,
|
103
104
|
:label => 'Цена (руб/м.кв в месяц)',
|
104
105
|
:input_html => {data: {
|
105
|
-
provide: 'slider',
|
106
|
+
#provide: 'slider',
|
106
107
|
slider_ticks: C80Estate::ItemProp.all_uniq_values(1).to_json, #'[0, 1, 2, 3]',
|
107
108
|
slider_labels: C80Estate::ItemProp.all_uniq_values(1).to_json, #'["none", short", "medium","long"]',
|
108
|
-
slider_min: C80Estate::ItemProp.all_uniq_values(1).
|
109
|
-
slider_max: C80Estate::ItemProp.all_uniq_values(1).
|
109
|
+
slider_min: C80Estate::ItemProp.all_uniq_values(1).sort.first,
|
110
|
+
slider_max: C80Estate::ItemProp.all_uniq_values(1).sort.last,
|
110
111
|
slider_step: 1,
|
111
112
|
slider_value: 0,
|
112
|
-
slider_range: true
|
113
|
+
slider_range: true,
|
114
|
+
slider_tooltip: 'hide'
|
113
115
|
}}
|
114
116
|
|
115
117
|
filter :item_prop_oenter_in,
|
@@ -139,26 +141,34 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
|
|
139
141
|
|
140
142
|
index do
|
141
143
|
selectable_column
|
142
|
-
column :title
|
144
|
+
column :title do |area|
|
145
|
+
link_to area.title, "/admin/areas/#{area.id}", title: I18n.t("active_admin.view")
|
146
|
+
end
|
143
147
|
column :atype do |area|
|
144
148
|
area.atype_title
|
145
149
|
end
|
150
|
+
column 'Цена' do |area|
|
151
|
+
"#{area.price_value} руб"
|
152
|
+
end
|
153
|
+
column 'Метраж' do |area|
|
154
|
+
"#{area.square_value} м<sup>2</sup>".html_safe
|
155
|
+
end
|
146
156
|
column :property do |area|
|
147
157
|
"<div class='image_vertical properties_index_logo'>
|
148
|
-
<span></span><img src='#{image_path(area.property.logo_path)}'>
|
149
|
-
</div><span class='properties_index_logo_title'>#{area.property_title}</span>".html_safe
|
158
|
+
<span></span><a href='/admin/areas?utf8=✓&q%5Bproperty_id_eq%5D=#{area.property.id}&commit=Фильтровать&order=id_asc'><img src='#{image_path(area.property.logo_path)}'>
|
159
|
+
</div><span class='properties_index_logo_title'>#{area.property_title}</span></a>".html_safe
|
150
160
|
|
151
161
|
end
|
152
162
|
column :astatuses do |area|
|
153
163
|
"<span class='status_#{area.astatus_tag}'>#{area.astatus_title}</span>".html_safe
|
154
164
|
end
|
155
165
|
column :assigned_person do |area|
|
156
|
-
area.assigned_person_title
|
166
|
+
area.property.assigned_person_title
|
157
167
|
end
|
158
168
|
# actions
|
159
|
-
column '' do |area|
|
160
|
-
|
161
|
-
end
|
169
|
+
# column '' do |area|
|
170
|
+
# link_to I18n.t("active_admin.view"), "/admin/areas/#{area.id}", class: 'member_link'
|
171
|
+
# end
|
162
172
|
column '' do |area|
|
163
173
|
if current_admin_user.can_edit_area?(area)
|
164
174
|
link_to I18n.t("active_admin.edit"), "/admin/areas/#{area.id}/edit", class: 'member_link'
|
@@ -172,10 +182,10 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
|
|
172
182
|
f.input :title
|
173
183
|
f.input :atype, :input_html => {:class => 'selectpicker', 'data-size' => "10", 'data-width' => '400px'}
|
174
184
|
f.input :property, :input_html => {:class => 'selectpicker', 'data-size' => "10", 'data-width' => '400px'}
|
175
|
-
f.input :assigned_person,
|
176
|
-
|
177
|
-
|
178
|
-
f.input :assigned_person_type, :input_html => {:value => "AdminUser"}, as: :hidden
|
185
|
+
# f.input :assigned_person,
|
186
|
+
# :input_html => {:class => 'selectpicker', 'data-size' => "10", 'data-width' => '400px'},
|
187
|
+
# :collection => AdminUser.all.map { |u| ["#{u.email}", u.id] }
|
188
|
+
# f.input :assigned_person_type, :input_html => {:value => "AdminUser"}, as: :hidden
|
179
189
|
f.input :astatuses,
|
180
190
|
:input_html => {:class => 'selectpicker', 'data-size' => "10", 'data-width' => '400px', :multiple => false}
|
181
191
|
f.input :desc, :as => :ckeditor
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# ПОДкатегории строительных материалов
|
2
2
|
ActiveAdmin.register C80Estate::Astatus, :as => 'Astatus' do
|
3
3
|
|
4
|
+
menu :label => "Настройки", :priority => 3#, :if => :foo
|
4
5
|
menu :label => "Статусы", :parent => "Настройки", :if => proc { current_admin_user.can_view_settings? }
|
5
6
|
|
6
7
|
permit_params :title
|
@@ -1,6 +1,8 @@
|
|
1
1
|
ActiveAdmin.register ActiveAdmin::Comment, :as => 'Comment' do
|
2
2
|
|
3
|
-
menu label: 'Комментарии',
|
3
|
+
menu label: 'Комментарии',
|
4
|
+
:if => proc { current_admin_user.can_view_comments? },
|
5
|
+
:priority => 12
|
4
6
|
|
5
7
|
batch_action :destroy, false
|
6
8
|
|
@@ -8,14 +8,14 @@ ActiveAdmin.register_page "Dashboard" do
|
|
8
8
|
|
9
9
|
column do
|
10
10
|
|
11
|
-
panel 'Объекты недвижимости', class:'clearfix' do
|
11
|
+
panel 'Объекты недвижимости', class: 'clearfix' do
|
12
12
|
# para "Объекты недвижимости", class: 'title'
|
13
13
|
C80Estate::Property.all.each do |prop|
|
14
14
|
render partial: 'prop_in_list', locals: {prop: prop}
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
panel 'Типы площадей', class:'clearfix' do
|
18
|
+
panel 'Типы площадей', class: 'clearfix' do
|
19
19
|
# para 'Типы площадей', class: 'title'
|
20
20
|
C80Estate::Atype.all.each do |atype|
|
21
21
|
render partial: 'atype_in_list', locals: {atype: atype}
|
@@ -25,16 +25,26 @@ ActiveAdmin.register_page "Dashboard" do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
column do
|
28
|
-
panel 'Рейтинг занятости', class:'clearfix' do
|
28
|
+
panel 'Рейтинг занятости', class: 'clearfix' do
|
29
29
|
render_table_prop_busy_coef
|
30
30
|
end
|
31
|
-
panel 'Рейтинг занятости в м.кв.', class:'clearfix' do
|
31
|
+
panel 'Рейтинг занятости в м.кв.', class: 'clearfix' do
|
32
32
|
render_table_prop_busy_coef_sq
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
37
37
|
|
38
|
+
section '', if: -> { current_admin_user.email == 'tz007@mail.ru' } do
|
39
|
+
columns do
|
40
|
+
column do
|
41
|
+
panel 'Admin Features', class: 'clearfix' do
|
42
|
+
render_upload_areas_excel_form
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
38
48
|
# div class: "blank_slate_container", id: "dashboard_default_message" do
|
39
49
|
# span class: "blank_slate" do
|
40
50
|
# span I18n.t("active_admin.dashboard_welcome.welcome")
|
@@ -2,6 +2,7 @@ ActiveAdmin.register C80Estate::Pstat, as: 'Pstat' do
|
|
2
2
|
|
3
3
|
# scope_to :current_admin_user, association_method: :sites_list
|
4
4
|
|
5
|
+
menu label: 'Статистика', priority: 6
|
5
6
|
menu :label => "Объекты", :parent => 'Статистика', if: proc{ current_admin_user.can_view_statistics? }
|
6
7
|
|
7
8
|
config.sort_order = 'id_asc'
|
@@ -417,32 +417,193 @@ var fEdit = function () {
|
|
417
417
|
fLoadingShow();
|
418
418
|
};
|
419
419
|
|
420
|
+
//var $slider_square;
|
421
|
+
//var $slider_price;
|
422
|
+
|
420
423
|
var fAreasIndex = function () {
|
421
424
|
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
425
|
+
var csss_input_square = '#q_item_prop_square_val_in';
|
426
|
+
var csss_input_price = '#q_item_prop_price_val_in';
|
427
|
+
|
428
|
+
var $original_input_square;
|
429
|
+
var $original_input_price;
|
430
|
+
|
431
|
+
var square_min;
|
432
|
+
var square_max;
|
433
|
+
var price_min;
|
434
|
+
var price_max;
|
435
|
+
|
436
|
+
var $slider_square;
|
437
|
+
var $slider_price;
|
438
|
+
|
439
|
+
var _fInit = function () {
|
440
|
+
|
441
|
+
$original_input_square = $(csss_input_square);
|
442
|
+
$original_input_price = $(csss_input_price);
|
443
|
+
|
444
|
+
_fTranslateScopes();
|
445
|
+
_fInitSliders();
|
446
|
+
|
447
|
+
// считываем get параметры
|
448
|
+
var rex_square = /item_prop_square_val_in\]=(\d{1,5}),(\d{1,5})/;
|
449
|
+
var rex_price = /item_prop_square_val_in\]=(\d{1,5}),(\d{1,5})/;
|
450
|
+
var url = unescape(window.location.href);
|
451
|
+
|
452
|
+
var match_square = url.match(rex_square);
|
453
|
+
var match_price = url.match(rex_price);
|
454
|
+
|
455
|
+
var min, max, p;
|
456
|
+
|
457
|
+
if (match_square != null) {
|
458
|
+
min = Number(match_square[1]);
|
459
|
+
max = Number(match_square[2]);
|
460
|
+
if (min > max) {
|
461
|
+
p = min;
|
462
|
+
min = max;
|
463
|
+
max = p;
|
464
|
+
}
|
465
|
+
$slider_square.setValue([min, max]);
|
466
|
+
}
|
467
|
+
|
468
|
+
if (match_price != null) {
|
469
|
+
min = Number(match_price[1]);
|
470
|
+
max = Number(match_price[2]);
|
471
|
+
if (min > max) {
|
472
|
+
p = min;
|
473
|
+
min = max;
|
474
|
+
max = p;
|
475
|
+
}
|
476
|
+
$slider_price.setValue([min, max]);
|
477
|
+
}
|
478
|
+
|
479
|
+
//console.log("<_fMakeMinMaxInputs> square = " + param_item_prop_square_val_in + "; price = " + param_item_prop_price_val_in);
|
480
|
+
|
481
|
+
// подставляем начальные значения
|
482
|
+
};
|
483
|
+
|
484
|
+
var _fTranslateScopes = function () {
|
485
|
+
// переведём scope надписи
|
486
|
+
|
487
|
+
var $li, $a, $a_span;
|
488
|
+
|
489
|
+
$li = $('li.scope.all');
|
490
|
+
$a = $li.find(".table_tools_button");
|
491
|
+
$a_span = $a.find('span');
|
492
|
+
$a.html('Все <span class="count">' + $a_span.text() + '</span>');
|
493
|
+
|
494
|
+
$li = $('li.scope.free');
|
495
|
+
$a = $li.find(".table_tools_button");
|
496
|
+
$a_span = $a.find('span');
|
497
|
+
$a.html('Свободные <span class="count">' + $a_span.text() + '</span>');
|
498
|
+
|
499
|
+
$li = $('li.scope.busy');
|
500
|
+
$a = $li.find(".table_tools_button");
|
501
|
+
$a_span = $a.find('span');
|
502
|
+
$a.html('Занятые <span class="count">' + $a_span.text() + '</span>');
|
503
|
+
};
|
504
|
+
|
505
|
+
var _fInitSliders = function () {
|
506
|
+
|
507
|
+
//$slider_square = $original_input_square.bootstrapSlider();
|
508
|
+
//$slider_price = $original_input_price.bootstrapSlider();
|
509
|
+
$slider_square = new Slider(csss_input_square);
|
510
|
+
$slider_price = new Slider(csss_input_price);
|
511
|
+
|
512
|
+
//console.log($original_input_square);
|
513
|
+
//console.log($original_input_price);
|
514
|
+
square_min = $original_input_square.data('slider-min');
|
515
|
+
square_max = $original_input_square.data('slider-max');
|
516
|
+
price_min = $original_input_price.data('slider-min');
|
517
|
+
price_max = $original_input_price.data('slider-max');
|
427
518
|
|
428
|
-
|
519
|
+
_fMakeMinMaxInputs($original_input_square, $slider_square, [square_min,square_max] );
|
520
|
+
_fMakeMinMaxInputs($original_input_price, $slider_price, [price_min, price_max]);
|
429
521
|
|
430
|
-
|
522
|
+
};
|
431
523
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
524
|
+
var _fMakeMinMaxInputs = function ($input, $slider, minmax) {
|
525
|
+
//console.log("<func_normalize_val> minmax = " + minmax);
|
526
|
+
|
527
|
+
// перед этим элементом вставим наши инпуты
|
528
|
+
var $trg = $input.parent().find('div.slider');
|
529
|
+
|
530
|
+
// пофиксим отступ для красоты
|
531
|
+
$input.parent().find('.label').css('margin-bottom','-5px');
|
532
|
+
|
533
|
+
// вставляемые инпуты
|
534
|
+
var $input_min = $('<input type="number" class="min_text_input" placeholder="от"/>');
|
535
|
+
var $input_max = $('<input type="number" class="max_text_input" placeholder="до"/>');
|
536
|
+
$trg.before($input_min);
|
537
|
+
$trg.before($input_max);
|
538
|
+
|
539
|
+
/*взаимодействуя со слайдером - будут меняться значения в текстовых полях*/
|
540
|
+
|
541
|
+
var func_on_change_slider = function () {
|
542
|
+
//console.log("<func_on_change_slider> " + this.value); // #=> 12,333
|
543
|
+
var va = this.value.split(',');
|
544
|
+
var min = va[0];
|
545
|
+
var max = va[1];
|
546
|
+
$input_min.val(min);
|
547
|
+
$input_max.val(max);
|
548
|
+
//$input_min.data('normalized-value',min);
|
549
|
+
//$input_max.data('normalized-value',max);
|
550
|
+
};
|
551
|
+
$input.on('change', func_on_change_slider);
|
552
|
+
$input.change();
|
553
|
+
|
554
|
+
/*взаимодействуя с текстовыми полями - будет меняться слайдер*/
|
555
|
+
|
556
|
+
var func_normalize_val = function (val) {
|
557
|
+
//console.log("<func_normalize_val> val = " + val);
|
558
|
+
//console.log("<func_normalize_val> minmax[0] = " + minmax[0]);
|
559
|
+
//console.log("<func_normalize_val> minmax[1] = " + minmax[1]);
|
560
|
+
|
561
|
+
var v = val;
|
562
|
+
if (v < $input.data('slider-min')) {
|
563
|
+
v = $input.data('slider-min');
|
564
|
+
}
|
565
|
+
if (v > $input.data('slider-max')) {
|
566
|
+
v = $input.data('slider-max');
|
567
|
+
}
|
568
|
+
return Number(v);
|
569
|
+
};
|
570
|
+
|
571
|
+
var func_invalidate_slider = function () {
|
572
|
+
|
573
|
+
//$trg.bootstrapSlider('setValue',[
|
574
|
+
// $input_min.data('normalized-value'),
|
575
|
+
// $input_max.data('normalized-value')
|
576
|
+
//]);
|
577
|
+
|
578
|
+
var arr = [
|
579
|
+
func_normalize_val($input_min.val()),
|
580
|
+
func_normalize_val($input_max.val())
|
581
|
+
];
|
582
|
+
//console.log("<func_invalidate_slider> " + arr);
|
583
|
+
$slider.setValue(arr);
|
584
|
+
|
585
|
+
};
|
586
|
+
|
587
|
+
var func_onblur_min = function () {
|
588
|
+
//console.log(this.value);
|
589
|
+
var v = func_normalize_val(this.value);
|
590
|
+
//$input_min.data('normalized-value',v);
|
591
|
+
func_invalidate_slider();
|
592
|
+
};
|
593
|
+
|
594
|
+
var func_onblur_max = function () {
|
595
|
+
//console.log(this.value);
|
596
|
+
var v = func_normalize_val(this.value);
|
597
|
+
//$input_max.data('normalized-value',v);
|
598
|
+
func_invalidate_slider();
|
599
|
+
};
|
600
|
+
|
601
|
+
$input_min.on('blur', func_onblur_min);
|
602
|
+
$input_max.on('blur', func_onblur_max);
|
436
603
|
|
437
|
-
|
438
|
-
$a = $li.find(".table_tools_button");
|
439
|
-
$a_span = $a.find('span');
|
440
|
-
$a.html('Свободные <span class="count">' + $a_span.text() + '</span>');
|
604
|
+
};
|
441
605
|
|
442
|
-
|
443
|
-
$a = $li.find(".table_tools_button");
|
444
|
-
$a_span = $a.find('span');
|
445
|
-
$a.html('Занятые <span class="count">' + $a_span.text() + '</span>');
|
606
|
+
_fInit();
|
446
607
|
|
447
608
|
};
|
448
609
|
|
@@ -30,14 +30,14 @@ var fPstatsIndex = function () {
|
|
30
30
|
|
31
31
|
var $div_area_text_stats_sq,
|
32
32
|
$ul_props_sq; // здесь выводим текстовые свойства занятости в метрах
|
33
|
-
|
34
|
-
|
35
|
-
var $
|
36
|
-
var $
|
37
|
-
|
38
|
-
|
39
|
-
var $
|
40
|
-
$
|
33
|
+
|
34
|
+
// тут живут круговые графики
|
35
|
+
var $div_graph_radial;
|
36
|
+
var $div_graph_radial_sq;
|
37
|
+
|
38
|
+
// тут живут динамические графики
|
39
|
+
var $div_graph_dynamic,
|
40
|
+
$div_graph_dynamic_sq;
|
41
41
|
|
42
42
|
var $ajax_div, $ajax_div2;
|
43
43
|
|
@@ -66,19 +66,22 @@ var fPstatsIndex = function () {
|
|
66
66
|
$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>");
|
67
67
|
$div_area_text_stats.append($ul_props);
|
68
68
|
|
69
|
+
$div_graph_radial = $("<div id='graph_radial'></div>").appendTo($div_index_adds);
|
70
|
+
|
69
71
|
$div_busy_coef_sq = $("<div id='coef_sq'></div>").appendTo($div_index_adds);
|
70
|
-
|
71
|
-
|
72
|
-
|
72
|
+
$p_busy_coef_sq = $("<p class='val'></p>").appendTo($div_busy_coef_sq);
|
73
|
+
$p_busy_coef_mess_sq = $("<p class='title'><abbr class='abbr_busy_coef_sq' title='TITLE'>Занятость (в м.кв.)</abbr></p>").appendTo($div_busy_coef_sq);
|
74
|
+
$p_busy_coef_comment_sq = $("<p class='comment'></p>").appendTo($div_busy_coef_sq);
|
73
75
|
|
74
76
|
$div_area_text_stats_sq = $("<div id='text_stats_sq'></div>").appendTo($div_index_adds);
|
75
|
-
|
76
|
-
|
77
|
+
$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>");
|
78
|
+
$div_area_text_stats_sq.append($ul_props_sq);
|
77
79
|
|
78
|
-
|
79
|
-
$div_graph2 = $("<div id='graph2'></div>").appendTo($div_index_adds);
|
80
|
+
$div_graph_radial_sq = $("<div id='graph_radial_sq'></div>").appendTo($div_index_adds);
|
80
81
|
|
81
|
-
$
|
82
|
+
$div_graph_dynamic = $("<div id='graph2'></div>").appendTo($div_index_adds);
|
83
|
+
|
84
|
+
$div_graph_dynamic_sq = $("<div id='graph3'></div>").appendTo($div_index_adds);
|
82
85
|
|
83
86
|
$main_content.prepend($ajax_div2);
|
84
87
|
$main_content.prepend($ajax_div);
|
@@ -88,6 +91,7 @@ var fPstatsIndex = function () {
|
|
88
91
|
$main_content.css('opacity', '1.0');
|
89
92
|
};
|
90
93
|
|
94
|
+
// запросим коэф-ты и данные для построения графиков
|
91
95
|
var fRequestCoefs = function () {
|
92
96
|
|
93
97
|
var atype_id = $select_atype.val();
|
@@ -144,12 +148,20 @@ var fPstatsIndex = function () {
|
|
144
148
|
|
145
149
|
}
|
146
150
|
|
147
|
-
if (data["
|
148
|
-
|
151
|
+
if (data["graph_radial"] != undefined) {
|
152
|
+
fDrawChartRadial(data["graph_radial"]);
|
153
|
+
}
|
154
|
+
|
155
|
+
if (data["graph_dynamic"] != undefined) {
|
156
|
+
fDrawChartRadialSq(data["graph_dynamic"]);
|
149
157
|
}
|
150
158
|
|
151
159
|
if (data["graph_dynamic_sq"] != undefined) {
|
152
|
-
|
160
|
+
fDrawChartDynamicSq(data["graph_dynamic_sq"]);
|
161
|
+
}
|
162
|
+
|
163
|
+
if (data["graph_radial_sq"] != undefined) {
|
164
|
+
fDrawChartRadialSq(data["graph_radial_sq"]);
|
153
165
|
}
|
154
166
|
|
155
167
|
$h2_page_title.text(data["title"]);
|
@@ -165,6 +177,8 @@ var fPstatsIndex = function () {
|
|
165
177
|
//fPreloaderShow();
|
166
178
|
};
|
167
179
|
|
180
|
+
// запросим таблицы объектов
|
181
|
+
// результат придёт в виде js и таблицы вставятся сами
|
168
182
|
var fRequestCharts = function () {
|
169
183
|
|
170
184
|
var atype_id = $select_atype.val();
|
@@ -195,141 +209,67 @@ var fPstatsIndex = function () {
|
|
195
209
|
fRequestCharts();
|
196
210
|
};
|
197
211
|
|
198
|
-
|
199
|
-
|
200
|
-
google.charts.load('current', {'packages': ['corechart']});
|
201
|
-
google.charts.setOnLoadCallback(drawChart);
|
202
|
-
|
203
|
-
function drawChart() {
|
204
|
-
|
205
|
-
var data, options, chart;
|
206
|
-
|
207
|
-
if (data_array_rows_radial != undefined) {
|
208
|
-
//data = google.visualization.arrayToDataTable(data_array_rows_radial);
|
209
|
-
//
|
210
|
-
//options = {
|
211
|
-
// title: ''
|
212
|
-
//};
|
212
|
+
// рисуем динамический график занятости
|
213
|
+
var fDrawChartDynamic = function (data_array_rows_dynamic) {
|
213
214
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
//data.addColumn({type:'number', role:'interval'});
|
234
|
-
//data.addColumn({type:'number', role:'interval'});
|
235
|
-
//data.addColumn('number', 'Expenses');
|
236
|
-
|
237
|
-
var i, iob, yearValue, monthValue, dayValue;
|
238
|
-
for (i = 0; i < data_array_rows_dynamic.length; i++) {
|
239
|
-
iob = data_array_rows_dynamic[i];
|
240
|
-
yearValue = iob[0].substr(0, 4);
|
241
|
-
monthValue = iob[0].substr(5, 2) - 1;
|
242
|
-
dayValue = iob[0].substr(8, 2);
|
243
|
-
console.log(iob + " => " + yearValue + "/" + monthValue + "/" + dayValue); // + ": " + data_array_rows_dynamic[i][0]
|
244
|
-
data_array_rows_dynamic[i][0] = new Date(parseInt(yearValue), parseInt(monthValue), parseInt(dayValue));
|
245
|
-
}
|
246
|
-
|
247
|
-
data.addRows(data_array_rows_dynamic);
|
248
|
-
|
249
|
-
options = {
|
250
|
-
title: 'Занятость',
|
251
|
-
vAxis: {title: '', ticks: [0, 1]},
|
252
|
-
ignoreBounds: true,
|
253
|
-
isStacked: false
|
254
|
-
};
|
255
|
-
|
256
|
-
chart = new google.visualization.SteppedAreaChart(document.getElementById('graph2'));
|
257
|
-
|
258
|
-
chart.draw(data, options);
|
259
|
-
}
|
260
|
-
|
261
|
-
if (data_array_rows_dynamic) {
|
262
|
-
|
263
|
-
|
264
|
-
var dataPoints = [];
|
265
|
-
//[
|
266
|
-
// {x: new Date(2012,0), y: 8.3} ,
|
267
|
-
// {x: new Date(2012,1), y: 8.3} ,
|
268
|
-
// {x: new Date(2012,2), y: 8.2} ,
|
269
|
-
// {x: new Date(2012,3), y: 8.1} ,
|
270
|
-
// {x: new Date(2012,4), y: 8.2} ,
|
271
|
-
// {x: new Date(2012,5), y: 8.2} ,
|
272
|
-
// {x: new Date(2012,6), y: 8.2} ,
|
273
|
-
// {x: new Date(2012,7), y: 8.1} ,
|
274
|
-
// {x: new Date(2012,8), y: 7.8} ,
|
275
|
-
// {x: new Date(2012,9), y: 7.9} ,
|
276
|
-
// {x: new Date(2012,10), y:7.8} ,
|
277
|
-
// {x: new Date(2012,11), y:7.8} ,
|
278
|
-
// {x: new Date(2013,0), y:7.9} ,
|
279
|
-
// {x: new Date(2013,1), y:7.7} ,
|
280
|
-
// {x: new Date(2013,2), y:7.6} ,
|
281
|
-
// {x: new Date(2013,3), y:7.5}
|
282
|
-
//]
|
283
|
-
|
284
|
-
var i, iob;
|
285
|
-
for (i = 0; i < data_array_rows_dynamic.length; i ++) {
|
286
|
-
iob = data_array_rows_dynamic[i];
|
287
|
-
dataPoints.push({
|
288
|
-
x: new Date(iob["year"], iob["month"], iob["day"]),
|
289
|
-
y: iob["val"]
|
290
|
-
})
|
291
|
-
}
|
292
|
-
|
293
|
-
var chart = new CanvasJS.Chart("graph2",
|
294
|
-
{
|
295
|
-
title:{
|
296
|
-
text: "Занятость"
|
297
|
-
},
|
298
|
-
animationEnabled: true,
|
299
|
-
axisY:{
|
300
|
-
includeZero: false,
|
301
|
-
interval: 10,
|
302
|
-
valueFormatString: ""
|
303
|
-
},
|
304
|
-
data: [
|
305
|
-
{
|
306
|
-
type: "stepArea",
|
307
|
-
toolTipContent: "{x}: {y}%",
|
308
|
-
markerSize: 5,
|
309
|
-
dataPoints: dataPoints
|
310
|
-
}
|
311
|
-
|
312
|
-
]
|
313
|
-
});
|
314
|
-
|
315
|
-
$('#graph2').css('opacity','1.0').css('display','block');
|
316
|
-
chart.render();
|
317
|
-
}
|
215
|
+
var dataPoints = [];
|
216
|
+
//[
|
217
|
+
// {x: new Date(2012,0), y: 8.3} ,
|
218
|
+
// {x: new Date(2012,1), y: 8.3} ,
|
219
|
+
// {x: new Date(2012,2), y: 8.2} ,
|
220
|
+
// {x: new Date(2012,3), y: 8.1} ,
|
221
|
+
// {x: new Date(2012,4), y: 8.2} ,
|
222
|
+
// {x: new Date(2012,5), y: 8.2} ,
|
223
|
+
// {x: new Date(2012,6), y: 8.2} ,
|
224
|
+
// {x: new Date(2012,7), y: 8.1} ,
|
225
|
+
// {x: new Date(2012,8), y: 7.8} ,
|
226
|
+
// {x: new Date(2012,9), y: 7.9} ,
|
227
|
+
// {x: new Date(2012,10), y:7.8} ,
|
228
|
+
// {x: new Date(2012,11), y:7.8} ,
|
229
|
+
// {x: new Date(2013,0), y:7.9} ,
|
230
|
+
// {x: new Date(2013,1), y:7.7} ,
|
231
|
+
// {x: new Date(2013,2), y:7.6} ,
|
232
|
+
// {x: new Date(2013,3), y:7.5}
|
233
|
+
//]
|
318
234
|
|
235
|
+
var i, iob;
|
236
|
+
for (i = 0; i < data_array_rows_dynamic.length; i ++) {
|
237
|
+
iob = data_array_rows_dynamic[i];
|
238
|
+
dataPoints.push({
|
239
|
+
x: new Date(iob["year"], iob["month"], iob["day"]),
|
240
|
+
y: iob["val"]
|
241
|
+
})
|
319
242
|
}
|
320
243
|
|
321
|
-
|
322
|
-
|
323
|
-
|
244
|
+
var chart = new CanvasJS.Chart("graph2",
|
245
|
+
{
|
246
|
+
title:{
|
247
|
+
text: "Занятость"
|
248
|
+
},
|
249
|
+
animationEnabled: true,
|
250
|
+
axisY:{
|
251
|
+
includeZero: false,
|
252
|
+
interval: 10,
|
253
|
+
valueFormatString: ""
|
254
|
+
},
|
255
|
+
data: [
|
256
|
+
{
|
257
|
+
type: "stepArea",
|
258
|
+
toolTipContent: "{x}: {y}%",
|
259
|
+
markerSize: 5,
|
260
|
+
dataPoints: dataPoints
|
261
|
+
}
|
324
262
|
|
325
|
-
|
326
|
-
|
327
|
-
}
|
263
|
+
]
|
264
|
+
});
|
328
265
|
|
266
|
+
$div_graph_dynamic.css('opacity','1.0').css('display','block');
|
267
|
+
chart.render();
|
268
|
+
|
329
269
|
};
|
330
270
|
|
331
|
-
|
332
|
-
|
271
|
+
// рисуем динамический график занятости в м.кв.
|
272
|
+
var fDrawChartDynamicSq = function (data) {
|
333
273
|
|
334
274
|
var dataPoints = [];
|
335
275
|
//[
|
@@ -382,11 +322,79 @@ var fPstatsIndex = function () {
|
|
382
322
|
]
|
383
323
|
});
|
384
324
|
|
385
|
-
$
|
325
|
+
$div_graph_dynamic_sq.css('opacity','1.0').css('display','block');
|
386
326
|
chart.render();
|
387
327
|
|
388
328
|
};
|
389
329
|
|
330
|
+
var fDrawChartRadial = function (data) {
|
331
|
+
|
332
|
+
// data:
|
333
|
+
// [
|
334
|
+
// { y: 6, legendText:"Свободно", label: "Площадей свободно" },
|
335
|
+
// { y: 4, legendText:"Занято", label: "Площадей занято" }
|
336
|
+
// ]
|
337
|
+
|
338
|
+
var chart = new CanvasJS.Chart("graph_radial",
|
339
|
+
{
|
340
|
+
animationEnabled: true,
|
341
|
+
legend:{
|
342
|
+
verticalAlign: "center",
|
343
|
+
horizontalAlign: "",
|
344
|
+
fontSize: 0,
|
345
|
+
fontFamily: "Open Sans"
|
346
|
+
},
|
347
|
+
theme: "theme",
|
348
|
+
data: [
|
349
|
+
{
|
350
|
+
type: "pie",
|
351
|
+
indexLabelFontFamily: "Open Sans",
|
352
|
+
indexLabelFontSize: 14,
|
353
|
+
indexLabel: "{label}: {y}",
|
354
|
+
startAngle:-10,
|
355
|
+
showInLegend: true,
|
356
|
+
toolTipContent:"{legendText} {y}",
|
357
|
+
dataPoints: data
|
358
|
+
}
|
359
|
+
]
|
360
|
+
});
|
361
|
+
chart.render();
|
362
|
+
};
|
363
|
+
|
364
|
+
var fDrawChartRadialSq = function (data) {
|
365
|
+
|
366
|
+
// data:
|
367
|
+
// [
|
368
|
+
// { y: 6, legendText:"", label: "Метров свободно" },
|
369
|
+
// { y: 4, legendText:"", label: "Метров занято" }
|
370
|
+
// ]
|
371
|
+
|
372
|
+
var chart = new CanvasJS.Chart("graph_radial_sq",
|
373
|
+
{
|
374
|
+
animationEnabled: true,
|
375
|
+
legend:{
|
376
|
+
verticalAlign: "center",
|
377
|
+
horizontalAlign: "",
|
378
|
+
fontSize: 0,
|
379
|
+
fontFamily: "Open Sans"
|
380
|
+
},
|
381
|
+
theme: "theme",
|
382
|
+
data: [
|
383
|
+
{
|
384
|
+
type: "pie",
|
385
|
+
indexLabelFontFamily: "Open Sans",
|
386
|
+
indexLabelFontSize: 14,
|
387
|
+
indexLabel: "{label}: {y}",
|
388
|
+
startAngle:-10,
|
389
|
+
showInLegend: true,
|
390
|
+
toolTipContent:"{legendText} {y}",
|
391
|
+
dataPoints: data
|
392
|
+
}
|
393
|
+
]
|
394
|
+
});
|
395
|
+
chart.render();
|
396
|
+
};
|
397
|
+
|
390
398
|
fInit();
|
391
399
|
|
392
400
|
};
|