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.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/admin/c80_estate/admin_user.rb +4 -1
  3. data/app/admin/c80_estate/areas.rb +30 -20
  4. data/app/admin/c80_estate/astatuses.rb +1 -0
  5. data/app/admin/c80_estate/comments.rb +3 -1
  6. data/app/admin/c80_estate/dashboard.rb +14 -4
  7. data/app/admin/c80_estate/properties.rb +1 -1
  8. data/app/admin/c80_estate/pstats.rb +1 -0
  9. data/app/assets/javascript/c80_estate/backend/admin/areas.js +180 -19
  10. data/app/assets/javascript/c80_estate/backend/admin/pstats.js +155 -147
  11. data/app/assets/javascript/c80_estate/lib/bootstrap-slider.js +1641 -0
  12. data/app/assets/stylesheets/c80_estate/backend/admin_areas.scss +7 -3
  13. data/app/assets/stylesheets/c80_estate/backend/admin_pstats.scss +19 -11
  14. data/app/assets/stylesheets/c80_estate/backend/common.scss +5 -0
  15. data/app/controllers/c80_estate/ajax_areas_controller.rb +38 -0
  16. data/app/helpers/c80_estate/app_helper.rb +45 -36
  17. data/app/models/c80_estate/area.rb +94 -0
  18. data/app/models/c80_estate/item_prop.rb +4 -2
  19. data/app/models/c80_estate/owner.rb +8 -2
  20. data/app/models/c80_estate/pstat.rb +53 -35
  21. data/app/views/admin/dashboard/_prop_in_list.html.erb +1 -2
  22. data/app/views/c80_estate/ajax_areas/exel_import.html.erb +1 -0
  23. data/app/views/c80_estate/ajax_areas/exel_import.js.erb +6 -0
  24. data/app/views/c80_estate/shared/_form_upload_areas_excel.erb +37 -0
  25. data/app/views/c80_estate/shared/_table_properties_coef_busy.html.erb +12 -8
  26. data/app/views/c80_estate/shared/_table_properties_coef_busy_sq.html.erb +12 -8
  27. data/config/routes.rb +2 -0
  28. data/lib/c80_estate/version.rb +1 -1
  29. metadata +7 -3
  30. 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: 557d89464d2f0e0c81468e06bb4ecd5de9e18cf4
4
- data.tar.gz: e3b7a1cee868213682dd2733f93e3dbff12c0274
3
+ metadata.gz: 92db0eea3e78217e967bdfecb4b213e0cf85c354
4
+ data.tar.gz: 5a5abb3d09dce79ea8bd7ee064e71b70c14cd30e
5
5
  SHA512:
6
- metadata.gz: 4a97a9f531a70748a06eb1f2c22eb6b7c5f0d0a296d0e44a8c4f077d25405a38971f8da7781d74b082c294da3369e68f0310de5ca37879fc80217bec3c568a7f
7
- data.tar.gz: bf0e24cd2c983f4970fa72d61d4db99c379cc2a0c76fa1a8d1fc3626d31ac1eeb22593811e23107c714592dd08218490f8600ed09e46f23cc51526064c68eec1
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: 'Пользователи', :if => proc { current_admin_user.can_view_users? }
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).last,
95
- slider_max: C80Estate::ItemProp.all_uniq_values(9).first,
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).last,
109
- slider_max: C80Estate::ItemProp.all_uniq_values(1).first,
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
- link_to I18n.t("active_admin.view"), "/admin/areas/#{area.id}", class: 'member_link'
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
- :input_html => {:class => 'selectpicker', 'data-size' => "10", 'data-width' => '400px'},
177
- :collection => AdminUser.all.map { |u| ["#{u.email}", u.id] }
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: 'Комментарии', :if => proc { current_admin_user.can_view_comments? }
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,7 +2,7 @@ ActiveAdmin.register C80Estate::Property, as: 'Property' do
2
2
 
3
3
  # scope_to :current_admin_user, association_method: :sites_list
4
4
 
5
- menu :label => "Объекты недвижимости"
5
+ menu :label => "Объекты недвижимости", priority: 2
6
6
 
7
7
  permit_params :title,
8
8
  :desc,
@@ -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
- //var $input_square_min = $('<input type="text" class="min_text_input"/>')
423
- // .appendTo($("#q_item_prop_square_val_in").parent());
424
- //
425
- //var $input_square_max = $('<input type="text" class="max_text_input"/>')
426
- // .appendTo($("#q_item_prop_square_val_in").parent());
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
- // переведём scope надписи
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
- var $li, $a, $a_span;
522
+ };
431
523
 
432
- $li = $('li.scope.all');
433
- $a = $li.find(".table_tools_button");
434
- $a_span = $a.find('span');
435
- $a.html('Все <span class="count">' + $a_span.text() + '</span>');
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
- $li = $('li.scope.free');
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
- $li = $('li.scope.busy');
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 $div_graph; // в этом div живет график занятости
36
- var $div_graph2, // в этом div живет график занятости
37
- $div_graph2canvas;
38
-
39
- var $div_graph3, // в этом div живет график занятости в метрах
40
- $div_graph3canvas;
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
- $p_busy_coef_sq = $("<p class='val'></p>").appendTo($div_busy_coef_sq);
71
- $p_busy_coef_mess_sq = $("<p class='title'><abbr class='abbr_busy_coef_sq' title='TITLE'>Занятость (в м.кв.)</abbr></p>").appendTo($div_busy_coef_sq);
72
- $p_busy_coef_comment_sq = $("<p class='comment'></p>").appendTo($div_busy_coef_sq);
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
- $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>");
76
- $div_area_text_stats_sq.append($ul_props_sq);
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
- //$div_graph = $("<div id='graph'></div>").appendTo($div_index_adds);
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
- $div_graph3 = $("<div id='graph3'></div>").appendTo($div_index_adds);
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["graph"] != undefined || data["graph_dynamic"] != undefined) {
148
- fDrawChart(data["graph"], data["graph_dynamic"]);
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
- fDrawChartSq(data["graph_dynamic_sq"]);
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
- var fDrawChart = function (data_array_rows_radial, data_array_rows_dynamic) {
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
- //chart = new google.visualization.PieChart(document.getElementById('graph'));
215
- //
216
- //chart.draw(data, options);
217
- }
218
-
219
- if (data_array_rows_dynamic != undefined && false) {
220
- //data_array = [
221
- // ['Director (Year)', 'Rotten Tomatoes', 'IMDB'],
222
- // ['Alfred Hitchcock (1935)', 8.4, 7.9],
223
- // ['Ralph Thomas (1959)', 6.9, 6.5],
224
- // ['Don Sharp (1978)', 6.5, 6.4],
225
- // ['James Hawes (2008)', 4.4, 6.2]
226
- //]
227
-
228
- //var data = google.visualization.arrayToDataTable(data_array_rows_dynamic);
229
-
230
- data = new google.visualization.DataTable();
231
- data.addColumn('date', ''); // Implicit domain column.
232
- data.addColumn('number', ''); // Implicit data column.
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
- if (data_array_rows_radial != undefined) {
322
- $('#graph').css('opacity', '1.0').css('display', 'block');
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
- if (data_array_rows_dynamic != undefined) {
326
- $('#graph2').css('opacity', '1.0').css('display', 'block');
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
- var fDrawChartSq = function (data) {
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
- $('#graph3').css('opacity','1.0').css('display','block');
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
  };