c80_map 0.1.0.11 → 0.1.0.12

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b641239264057a4399cc5d23e0567004290e8f4c
4
- data.tar.gz: f605f36904404280f7fdfca8b674a11d577305f5
3
+ metadata.gz: 9254abbdfc9c6de507a5183e0ada19557b624443
4
+ data.tar.gz: 692c738b42315b00dd16bbebc00d6ee8b8437366
5
5
  SHA512:
6
- metadata.gz: 7dc42eb8ddf92e44f678477c513dbc044c3ed8f14174b3c447cddb97b2244634309baf7b2acd6eebb11ebd6e4bd49b1690c483e53e124c2aae76fca0a7e35333
7
- data.tar.gz: a24d4d613ad3f712069dbdbbdb47a806f4b0f9b28e971377e5fc2f1c2c6fb771b4e148cce86f1d373fc722186415de5fe589e00d53e48ac2a505a408f1218b51
6
+ metadata.gz: 50a6b6b39e879869d52286b8f1564e38b2e53492dc333f76174ba8ee74ef7d86ca11908fd8406a7d1d0eab17ed9d378d929382c4dd85071115508e0407b7e417
7
+ data.tar.gz: f1554e684359a960e55398ca6a3a613743deaebbdc65f64015f16f62af6fbb902c074d44eedb3252ad975955149b61ecdc3e13ba090ce849586d49afbdfa5f0a
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
 
3
- // при клике на эту кнопку произойдет показ модального окна _modal_window.html.erb
3
+ // при клике на эту кнопку произойдет:
4
+ // * показ прелоадера,
5
+ // * запрос за несвязанными площадями,
6
+ // * после получения ответа - показ модального окна _modal_window.html.erb куда будет подставлен %modal-title% и %modal-body%
4
7
 
5
8
  function AreaLinkButton() {
6
9
 
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ // при клике на эту кнопку произойдет:
4
+ // * показ прелоадера,
5
+ // * запрос за несвязанными ЗДАНИЯМИ,
6
+ // * после получения ответа - показ модального окна _modal_window.html.erb куда будет подставлен %modal-title% и %modal-body%
7
+
8
+ function BuildingLinkButton() {
9
+
10
+ var _map = null;
11
+ var _this = this;
12
+ _this.el = null;
13
+
14
+ var show_modal_window = function () {
15
+
16
+ //var $dialog = $('#modal_window');
17
+ //$dialog.find("h4").text($t.data("wtitle"));
18
+ //$dialog.find("#form_comment").css('display','block');
19
+ //$dialog.find("input#comment_part_id").val(partid);
20
+ //$dialog.find("input#comment_author").val(author);
21
+
22
+ var $m = $('#modal_window');
23
+ var $cc = $m.find('.modal-body');
24
+ $m.find('.modal-title').text('Укажите здание, соответствующее полигону на карте');
25
+
26
+ setTimeout(function () {
27
+ $("select#unlinked_buildings").selectpicker({size: 50, tickIcon: 'hidden'});
28
+ }, 1);
29
+
30
+ setTimeout(function () {
31
+ //console.log($cc.find("button"));
32
+ $cc.find("button").on('click', function () {
33
+ if ($(this).attr('id') == "submit_building_link") {
34
+ _map.link_building();
35
+ }
36
+ });
37
+ }, 1000);
38
+
39
+ $link_show_modal_window.click();
40
+
41
+ };
42
+
43
+ var fetch_free_buildings = function () {
44
+ $.ajax({
45
+ url:'/ajax/fetch_unlinked_buildings',
46
+ type:'POST',
47
+ data: {building_id:"building_id"},
48
+ dataType:'script'
49
+ }).done(fetch_free_buildings_done);
50
+ };
51
+ var fetch_free_buildings_done = function (data, result) {
52
+ _map.save_preloader_klass.hide();
53
+ show_modal_window();
54
+ };
55
+
56
+ var $link_show_modal_window = null;
57
+
58
+ _this.onClick = function (e) {
59
+ if (_this.el.hasClass('disabled')) return;
60
+ e.preventDefault();
61
+
62
+ console.log("<BuildingLinkButton.click>");
63
+
64
+ _map.save_preloader_klass.show();
65
+
66
+ fetch_free_buildings();
67
+ };
68
+
69
+ _this.init = function (button_css_selector, link_to_map) {
70
+ _map = link_to_map;
71
+ _this.el = $(button_css_selector);
72
+ _this.el.on('click', _this.onClick);
73
+ _this.hide();
74
+
75
+ // найдем кнопку, клик по которой покажет окно [_modal_window.html.erb]
76
+ $link_show_modal_window = $('.show_modal_window');
77
+
78
+ //console.log("<BuildingLinkButton.init>");
79
+ //console.log(this.el);
80
+ };
81
+
82
+ _this.hide = function () {
83
+ _this.el.css('display','none');
84
+ };
85
+
86
+ _this.show = function () {
87
+ console.log("<BuildingLinkButton.show>");
88
+ _this.el.css('display','block');
89
+ };
90
+
91
+ }
@@ -200,6 +200,7 @@ function Building() {
200
200
  _map = link_to_map;
201
201
  _options = options;
202
202
  _this.options = options;
203
+ _this.id = options["id"];
203
204
 
204
205
  // [56dfaw1]
205
206
  for (var i=0; i<_this.options.coords.length; i++) {
@@ -235,6 +236,7 @@ function Building() {
235
236
  _map.svgRemoveAllNodes();
236
237
 
237
238
  _map.current_building = _this;
239
+ //console.log("<Building.enter> id: " + _this.id);
238
240
  _map.mark_virgin = false;
239
241
 
240
242
  };
@@ -225,6 +225,10 @@ var clog = function () {
225
225
  self.area_link_button_klass = new AreaLinkButton();
226
226
  self.area_link_button_klass.init('.mapplic-area-link-button', self);
227
227
 
228
+ // при клике на эту кнопку произойдет показ модального окна, в котором можно будет указать здание, соответствующее полигону
229
+ self.building_link_button_klass = new BuildingLinkButton();
230
+ self.building_link_button_klass.init('.mapplic-building-link-button', self);
231
+
228
232
  $('[data-toggle="tooltip"]').tooltip();
229
233
 
230
234
  });
@@ -951,6 +955,8 @@ var clog = function () {
951
955
 
952
956
  // показать инфо о здании
953
957
  self.showBuildingInfo = function (building_hash) {
958
+ console.log("<main.showBuildingInfo> id = " + building_hash.id);
959
+
954
960
  //"building_hash": {
955
961
  // "id": 2,
956
962
  // "title": "Здание 2",
@@ -964,16 +970,20 @@ var clog = function () {
964
970
  // "price": "от 155 руб/кв.м в месяц"
965
971
  // }
966
972
 
967
- $building_info.find("h2").text(building_hash["title"]);
968
-
969
- var v;
970
- for (var p in building_hash["props"]) {
971
- v = building_hash["props"][p];
972
- $building_info.find("#" + p).find('span').text(v);
973
- }
973
+ if (building_hash.id == undefined) {
974
+ $building_info.css('display','none');
975
+ } else {
976
+ $building_info.css('display','block');
977
+ $building_info.find("h2").text(building_hash["title"]);
974
978
 
975
- $building_info.find("#square_free").css('height', 'auto');
979
+ var v;
980
+ for (var p in building_hash["props"]) {
981
+ v = building_hash["props"][p];
982
+ $building_info.find("#" + p).find('span').text(v);
983
+ }
976
984
 
985
+ $building_info.find("#square_free").css('height', 'auto');
986
+ }
977
987
  };
978
988
 
979
989
  // показать инфо о просматриваемой площади
@@ -1031,17 +1041,24 @@ var clog = function () {
1031
1041
  // выбранный в окне _modal_window.html.erb
1032
1042
  self.link_area = function () {
1033
1043
 
1044
+ // фиксируем компоненты модального окна
1034
1045
  var $m = $('#modal_window');
1035
1046
  var $b = $m.find('.modal-footer').find('.btn');
1036
1047
  var $s = $m.find('select');
1037
1048
 
1049
+ // извлекаем значения
1038
1050
  var rent_area_id = $s.val();
1039
1051
  var map_area_id = self.current_area.id;
1040
1052
  console.log("<Map.link_area> rent_area_id = " + rent_area_id + "; map_area_id = " + map_area_id);
1041
1053
 
1054
+ // нажимаем кнопку "закрыть"
1042
1055
  $b.click();
1056
+
1057
+ // показываем прелоадер
1043
1058
  self.save_preloader_klass.show();
1044
1059
 
1060
+ // отправляем запрос на сервер
1061
+ // TODO_MY:: реализовать обработчик ошибок
1045
1062
  $.ajax({
1046
1063
  url:'/ajax/link_area',
1047
1064
  type:'POST',
@@ -1055,6 +1072,44 @@ var clog = function () {
1055
1072
  self.data = data["updated_locations_json"];
1056
1073
  });
1057
1074
 
1075
+ };
1076
+
1077
+ // взять C80Map::current_building и назначить ему Rent::building.id,
1078
+ // выбранный в окне _modal_window.html.erb
1079
+ self.link_building = function () {
1080
+ console.log('<Map.link_building> ');
1081
+
1082
+ // фиксируем компоненты модального окна
1083
+ var $m = $('#modal_window');
1084
+ var $b = $m.find('.modal-footer').find('.btn');
1085
+ var $s = $m.find('select');
1086
+
1087
+ // извлекаем значения
1088
+ var rent_building_id = $s.val();
1089
+ var map_building_id = self.current_building.id;
1090
+ console.log("<Map.link_area> rent_building_id = " + rent_building_id + "; map_building_id = " + map_building_id);
1091
+
1092
+ // нажимаем кнопку "закрыть"
1093
+ $b.click();
1094
+
1095
+ // показываем прелоадер
1096
+ self.save_preloader_klass.show();
1097
+
1098
+ // отправляем запрос на сервер
1099
+ // TODO_MY:: реализовать обработчик ошибок
1100
+ $.ajax({
1101
+ url:'/ajax/link_building',
1102
+ type:'POST',
1103
+ data: {
1104
+ rent_building_id: rent_building_id,
1105
+ map_building_id: map_building_id
1106
+ },
1107
+ dataType:"json"
1108
+ }).done(function (data, result) {
1109
+ self.save_preloader_klass.hide();
1110
+ self.data = data["updated_locations_json"];
1111
+ });
1112
+
1058
1113
  }
1059
1114
 
1060
1115
  };
@@ -186,6 +186,13 @@ function StateController() {
186
186
 
187
187
  // вошли в здание
188
188
  case "view_building":
189
+
190
+ // покажем кнопку "обратно на карту"
191
+ _map.back_to_map_button_klass.show();
192
+
193
+ // скроем кнопку "связать здание с полигоном"
194
+ _map.building_link_button_klass.hide();
195
+
189
196
  // спрячем надписи "цена за метр" и адрес с телефоном
190
197
  _this.left_side.css("top", -300);
191
198
  _this.right_side.css("top", -300);
@@ -194,7 +201,6 @@ function StateController() {
194
201
  _this.svg_overlay.css('display', 'block');
195
202
 
196
203
  _this.building_info.css("top", _this.building_info.data("init"));
197
- _map.back_to_map_button_klass.show();
198
204
  _this.masked.addClass('hiddn');
199
205
 
200
206
  _this.area_order_button.css('display', 'none');
@@ -215,6 +221,9 @@ function StateController() {
215
221
  // спрячем кнопку "обратно на карту"
216
222
  _map.back_to_map_button_klass.hide();
217
223
 
224
+ // покажем кнопку "связать здание с полигоном"
225
+ _map.building_link_button_klass.show();
226
+
218
227
  // т.к. этот слой используется испключительно в помощь при рисовании обводки площадей
219
228
  // и перехватывает клики при dnd, то тут он нам не нужен
220
229
  _this.svg_overlay.css('display', 'none');
@@ -263,6 +272,7 @@ function StateController() {
263
272
  _this.area_order_button.css('display', 'block');
264
273
  _map.edit_button_klass.setState('view_area', true); // [a1x7]
265
274
 
275
+ // скроем кнопку "связать площадь с полигоном"
266
276
  _map.area_link_button_klass.hide();
267
277
 
268
278
  OpacityButtonsUtils.hide(_this.new_button);
@@ -499,7 +499,7 @@
499
499
 
500
500
  }
501
501
 
502
- &.mapplic-area-link-button {
502
+ &.mapplic-area-link-button, &.mapplic-building-link-button {
503
503
  border-radius: 0 0 1px 1px;
504
504
  border-top: none;
505
505
  background-color: #a10000;
@@ -1,6 +1,7 @@
1
1
  module C80Map
2
2
  class Building < ActiveRecord::Base
3
3
  has_many :areas, :class_name => 'C80Map::Area', :dependent => :destroy
4
+ belongs_to :building_representator, :polymorphic => true
4
5
  validates :coords, uniqueness: true
5
6
  after_save :update_json
6
7
  mount_uploader :img_bg, C80Map::BuildingImageUploader
@@ -0,0 +1,67 @@
1
+ module C80Map
2
+
3
+ module BuildingRepresentator
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ # ERROR: Cannot define multiple 'included' blocks for a Concern
8
+ # included do
9
+ #
10
+ # end
11
+
12
+ def self.included(klass)
13
+ klass.extend ClassMethods
14
+ klass.send(:include, InstanceMethods)
15
+ end
16
+
17
+ module ClassMethods
18
+
19
+ def acts_as_map_building_representator
20
+ class_eval do
21
+
22
+ has_many :map_buildings, :as => :building_representator, :class_name => 'C80Map::Building', :dependent => :destroy
23
+ after_save :update_json
24
+
25
+ def self.unlinked_buildings
26
+ res = []
27
+ self.all.each do |building|
28
+ # if building.map_buildings.count == 0
29
+ res << building
30
+ # end
31
+ end
32
+ res
33
+ end
34
+
35
+ def update_json
36
+ MapJson.update_json
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+
43
+ module InstanceMethods
44
+
45
+ def to_hash
46
+ res = {
47
+ id: id,
48
+ title: title,
49
+ props: {
50
+ square: square,
51
+ floor_height: floor_height,
52
+ gate_type: gate_type,
53
+ desc: desc,
54
+ # column_step: column_step,
55
+ # communications: communications,
56
+ price: price_string
57
+ }
58
+ }
59
+ res
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+ end
66
+
67
+ ActiveRecord::Base.send :include, C80Map::BuildingRepresentator
@@ -20,6 +20,7 @@ module C80Map
20
20
  b.areas.each do |area|
21
21
  # Rails.logger.debug "<MapJson.update_json> area #{area}"
22
22
 
23
+ # соберём хэш привязанной к полигону площади
23
24
  har = {}
24
25
  if area.area_representator.present?
25
26
  har = area.area_representator.to_hash
@@ -48,23 +49,31 @@ module C80Map
48
49
  childs << ab
49
50
  end
50
51
 
52
+ # соберём хэш привязанного к полигону здания
53
+ hbu = {}
54
+ if b.building_representator.present?
55
+ hbu = b.building_representator.to_hash
56
+ # har["is_free"] = area.area_representator.is_free?
57
+ end
58
+
51
59
  ob = {
52
60
  id: b.id,
53
61
  object_type: 'building',
54
62
  coords: b.coords.split(","),
55
- building_hash: {
56
- id: 2,
57
- title: "Здание 2",
58
- props: {
59
- square: "1234 кв.м.",
60
- square_free: "124 кв. м",
61
- floor_height: "6 кв. м",
62
- column_step: "2 м",
63
- gate_type: "рaспашные",
64
- communications: "Интернет, электричество, водоснабжение",
65
- price: "от 155 руб/кв.м в месяц"
66
- }
67
- },
63
+ building_hash: hbu,
64
+ # building_hash: {
65
+ # id: 2,
66
+ # title: "Здание 2",
67
+ # props: {
68
+ # square: "1234 кв.м.",
69
+ # square_free: "124 кв. м",
70
+ # floor_height: "6 кв. м",
71
+ # column_step: "2 м",
72
+ # gate_type: "рaспашные",
73
+ # communications: "Интернет, электричество, водоснабжение",
74
+ # price: "от 155 руб/кв.м в месяц"
75
+ # }
76
+ # },
68
77
  img: {
69
78
  bg: {
70
79
  src: b.img_bg.url
@@ -0,0 +1,6 @@
1
+ class AddBuildingRepresentatorToC80MapBuildings < ActiveRecord::Migration
2
+ def change
3
+ add_reference :c80_map_buildings, :building_representator, index: true
4
+ add_column :c80_map_buildings, :building_representator_type, :string, :default => 'Rent::Building'
5
+ end
6
+ end
@@ -1,3 +1,3 @@
1
1
  module C80Map
2
- VERSION = "0.1.0.11"
2
+ VERSION = "0.1.0.12"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_map
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.11
4
+ version: 0.1.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-26 00:00:00.000000000 Z
11
+ date: 2016-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,6 +69,7 @@ files:
69
69
  - app/admin/c80_map/buildings.rb
70
70
  - app/admin/c80_map/settings.rb
71
71
  - app/assets/javascripts/buttons/admin_buttons/button_area_link.js
72
+ - app/assets/javascripts/buttons/admin_buttons/button_building_link.js
72
73
  - app/assets/javascripts/buttons/admin_buttons/button_cancel_create.js
73
74
  - app/assets/javascripts/buttons/admin_buttons/button_cancel_remove.js
74
75
  - app/assets/javascripts/buttons/admin_buttons/button_complete_create.js
@@ -102,6 +103,7 @@ files:
102
103
  - app/models/c80_map/area.rb
103
104
  - app/models/c80_map/area_representator.rb
104
105
  - app/models/c80_map/building.rb
106
+ - app/models/c80_map/building_representator.rb
105
107
  - app/models/c80_map/map_json.rb
106
108
  - app/models/c80_map/setting.rb
107
109
  - app/uploaders/c80_map/building_image_uploader.rb
@@ -117,6 +119,7 @@ files:
117
119
  - db/migrate/20160617130000_create_c80_map_settings.rb
118
120
  - db/migrate/20160620040217_create_c80_map_buildings.rb
119
121
  - db/migrate/20160620040225_create_c80_map_areas.rb
122
+ - db/migrate/20160901153030_add_building_representator_to_c80_map_buildings.rb
120
123
  - db/seeds/801_fill_map_settings.rb
121
124
  - lib/c80_map.rb
122
125
  - lib/c80_map/engine.rb