c80_estate 0.1.0.9 → 0.1.0.10
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/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
|
};
|