c80_estate 0.1.0.33 → 0.1.0.34

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54f3f54111b8652b15917d98d7d370854164d342
4
- data.tar.gz: e286d30720313421c5ac97e5c13895f199b950af
3
+ metadata.gz: 832f4348a9023325a7bbb127efb6c10234eb27b8
4
+ data.tar.gz: a716de7341084ea34df0bf2d2b71f7e70c6fd723
5
5
  SHA512:
6
- metadata.gz: 4235806db10ac13f87f3e8969819a9391e30667c0c76d738ffa1e4581282e89ae52040a2bf775d724aa19918ae33a84e37356e2bfaf4b6293d7c8cd87610252c
7
- data.tar.gz: 5b9fc34a08e000fe7bfbc0b1ad0d4b10553110119c0e17ba64f1c1785ad018aaa1c245999bbf58754aa72c6eaf48af2c4176f3ecc62e4d4c33a76e1dcd75372c
6
+ metadata.gz: 273b0fd67f31a3b0d1fa0f5e8ce3ccab77996ceb10546154149cf31fa9ceb27677c8b2c5fd262bc3494dee098a1527309e3c637df71c645492e0624d29e21667
7
+ data.tar.gz: 8b3c499e0e165c338bde6113941723e4477a934cabb5be9b28035dd2100ccd0d53876f3f3dde10aa81b8c025d8396ab37fefe59e18c4043a9377ce289d71bbb5
data/README.md CHANGED
@@ -43,6 +43,7 @@ Or install it yourself as:
43
43
  gem 'friendly_id'
44
44
  gem 'babosa'
45
45
  gem 'bootstrap-select-rails'
46
+ gem 'c80_active_record_union'
46
47
  ```
47
48
 
48
49
  ### Seeds
@@ -46,6 +46,29 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
46
46
 
47
47
  config.clear_action_items!
48
48
 
49
+ controller do
50
+
51
+ def scoped_collection
52
+
53
+ # [X] 1. оптимизируем выдачу на index, согласно
54
+ # http://activeadmin.info/docs/2-resource-customization.html#customizing-resource-retrieval
55
+ # https://github.com/activeadmin/activeadmin/commit/f8ef8ca7f9ce6dc70a4761d6269477f0dff448ec
56
+ # http://www.rubydoc.info/gems/activeadmin/file/docs/2-resource-customization.md
57
+
58
+ # [ ]2. решаем задачу с "чужими незанятыми" и "чужими занятыми".
59
+ # * http://stackoverflow.com/a/23788089
60
+ # способ реализации с дописанным кастомным where
61
+ # super.where(account_id: account.id).order(:date_sent)
62
+
63
+ # включаем atypes и properties.logos: http://stackoverflow.com/a/24397716
64
+ C80Estate::Area
65
+ .includes(:astatuses, :atype, property: :plogos) ##[1]
66
+ .all_except_busy_alien(current_admin_user)
67
+
68
+ end
69
+
70
+ end
71
+
49
72
  action_item :new_model, :only => :index do
50
73
  if current_admin_user.can_create_areas?
51
74
  link_to I18n.t("active_admin.new_model"), '/admin/areas/new', method: :get
@@ -72,6 +95,8 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
72
95
 
73
96
  config.sort_order = 'id_asc'
74
97
 
98
+ # before_filter :skip_sidebar!, :only => :index
99
+
75
100
  filter :atype_id,
76
101
  :label => 'Тип площади',
77
102
  :as => :select,
@@ -141,14 +166,15 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
141
166
  scope "All", :all_areas
142
167
  scope "Free", :free_areas
143
168
  scope "Busy", :busy_areas
169
+ # scope 'My', :my_areas
144
170
 
145
171
  index do
146
- selectable_column
172
+ # selectable_column
147
173
  column :title do |area|
148
174
  link_to area.title, "/admin/areas/#{area.id}", title: I18n.t("active_admin.view")
149
175
  end
150
176
  column :atype do |area|
151
- area.atype_title
177
+ area.atype.title
152
178
  end
153
179
  column '<abbr title="За м.кв. в месяц">Цена м.кв.</abbr>'.html_safe do |area|
154
180
  "#{area.price_value.to_s(:rounded, :precision => 2)} руб"
@@ -168,8 +194,7 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
168
194
  column :property do |area|
169
195
  "<div class='image_vertical properties_index_logo'>
170
196
  <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)}'>
171
- </div><span class='properties_index_logo_title'>#{area.property_title}</span></a>".html_safe
172
-
197
+ </div><span class='properties_index_logo_title'>#{area.property.title}</span></a>".html_safe
173
198
  end
174
199
  column :astatuses do |area|
175
200
  "<span class='status_#{area.astatus_tag}'>#{area.astatus_title}</span>".html_safe
@@ -177,10 +202,6 @@ ActiveAdmin.register C80Estate::Area, as: 'Area' do
177
202
  column :assigned_person do |area|
178
203
  area.property.assigned_person_title
179
204
  end
180
- # actions
181
- # column '' do |area|
182
- # link_to I18n.t("active_admin.view"), "/admin/areas/#{area.id}", class: 'member_link'
183
- # end
184
205
  column '' do |area|
185
206
  if current_admin_user.can_edit_area?(area)
186
207
  link_to I18n.t("active_admin.edit"), "/admin/areas/#{area.id}/edit", class: 'member_link'
@@ -42,6 +42,13 @@ module C80Estate
42
42
  self.joins(:astatuses).where(:c80_estate_astatuses => {tag: 'free'})
43
43
  end
44
44
 
45
+ # def self.my_areas
46
+ # self.joins(:property)
47
+ # .where(:c80_estate_properties => {assigned_person_id: current_admin_user.id})
48
+ # end
49
+
50
+ # scope :my_areas, lambda { |t| t.joins(:property).where(:c80_estate_properties => {assigned_person_id: current_admin_user.id}) }
51
+
45
52
  # посчитает кол-во свободных метров
46
53
  def self.free_areas_sq
47
54
  Rails.logger.debug "<Area.free_areas_sq>"
@@ -188,50 +195,99 @@ module C80Estate
188
195
  self.where(:atype_id => atype_id)
189
196
  end
190
197
 
198
+ # Не отображать "чужие" занятые площади (для менеждеров) (задача №1748)
199
+ def self.all_except_busy_alien(admin_user)
200
+ if admin_user.can_view_statistics?
201
+ # админам покажем всё
202
+ self.all
203
+ else
204
+
205
+ # http://stackoverflow.com/questions/9540801/combine-two-activerecordrelation-objects
206
+ # двумя независимыми запросами получим мои площади и немои свободные площади, сложим их, и отдадим
207
+
208
+ =begin
209
+ # ВАРИАНТ 1
210
+
211
+ # извлечём немои свободные площади
212
+ # этот код я написал, смотря на уже существующий where_assigned_person_id
213
+ not_my_free_areas = self.free_areas
214
+ .joins(:property)
215
+ .where.not(:c80_estate_properties => {assigned_person_id: admin_user.id})
216
+
217
+ # извлечём все мои площади
218
+ all_my_areas = self.joins(:property)
219
+ .where(:c80_estate_properties => {assigned_person_id: admin_user.id})
220
+
221
+ # это вернёт только то, что находится в ПЕРЕСЕЧЕНИИ результатов, а нужен union
222
+ not_my_free_areas.merge(all_my_areas)
223
+ =end
224
+
225
+ =begin
226
+ # ВАРИАНТ 2
227
+ # http://stackoverflow.com/a/28358592
228
+ # User.where(
229
+ # User.arel_table[:first_name].eq('Tobias').or(
230
+ # User.arel_table[:last_name].eq('Fünke')
231
+ # )
232
+ # )
233
+ =end
234
+
235
+ =begin
236
+ # ВАРИАНТ 3
237
+ # http://stackoverflow.com/a/31528499
238
+ # first_name_relation = User.where(:first_name => 'Tobias') # ActiveRecord::Relation
239
+ # last_name_relation = User.where(:last_name => 'Fünke') # ActiveRecord::Relation
240
+ #
241
+ # all_name_relations = User.none
242
+ # first_name_relation.each do |ar|
243
+ # all_name_relations.new(ar)
244
+ # end
245
+ # last_name_relation.each do |ar|
246
+ # all_name_relations.new(ar)
247
+ # end
248
+ =end
249
+
250
+ # попробуем 3-й вариант
251
+ not_my_free_areas = self.free_areas
252
+ .joins(:property)
253
+ .where.not(:c80_estate_properties => {assigned_person_id: admin_user.id})
254
+
255
+ all_my_areas = self.joins(:property)
256
+ .where(:c80_estate_properties => {assigned_person_id: admin_user.id})
257
+
258
+ all_my_areas.union(not_my_free_areas)
259
+
260
+ end
261
+ end
262
+
191
263
  def has_astatus?
192
264
  errors.add_to_base 'Укажите статус площади' if self.astatuses.blank?
193
265
  end
194
266
 
267
+ # --------
268
+
195
269
  def atype_title
196
- res = "-"
197
- if atype.present?
198
- res = atype.title
199
- end
200
- res
270
+ atype.title
201
271
  end
202
272
 
203
273
  def property_title
204
- res = "-"
205
- if property.present?
206
- res = property.title
207
- end
208
- res
274
+ property.title
209
275
  end
210
276
 
211
277
  def astatus_title
212
- res = "-"
213
- if astatuses.count > 0
214
- res = astatuses.first.title
215
- end
216
- res
278
+ astatuses.first.title
217
279
  end
218
280
 
219
281
  def astatus_id
220
- res = -1
221
- if astatuses.count > 0
222
- res = astatuses.first.id
223
- end
224
- res
282
+ astatuses.first.id
225
283
  end
226
284
 
227
285
  def astatus_tag
228
- res = -1
229
- if astatuses.count > 0
230
- res = astatuses.first.tag
231
- end
232
- res
286
+ astatuses.first.tag
233
287
  end
234
288
 
289
+ # --------
290
+
235
291
  def is_free?
236
292
  astatus_tag == 'free'
237
293
  end
@@ -261,6 +317,7 @@ module C80Estate
261
317
  end
262
318
 
263
319
  # выдать цену за м.кв. в месяц
320
+ # TODO_MY:: добавить модели Area столбец price_value и before_update метод, который высчитывал бы значение
264
321
  def price_value
265
322
 
266
323
  res = 0.0
@@ -298,6 +355,7 @@ module C80Estate
298
355
  res
299
356
  end
300
357
 
358
+ # TODO_MY:: добавить модели Area столбец square_value и before_update метод, который высчитывал бы значение
301
359
  def square_value
302
360
  res = 0.0
303
361
  p = item_props.where(:prop_name_id => 9)
@@ -308,6 +366,7 @@ module C80Estate
308
366
  res
309
367
  end
310
368
 
369
+ # TODO_MY:: добавить модели Area столбец power_price_value и before_update метод, который высчитывал бы значение
311
370
  def power_price_value
312
371
  price_value * 1.0 * square_value
313
372
  end
@@ -166,6 +166,7 @@ module C80Estate
166
166
  res
167
167
  end
168
168
 
169
+ # TODO:: при построении индексной таблицы из 100 строк происходит 100 запросов к базе типа COUNT(*). Добавить before_update метод и поле logo_path и вычислять путь к лого в before update
169
170
  def logo_path
170
171
  url = 'property_default_logo.png'
171
172
  if plogos.count > 0
@@ -7,7 +7,7 @@
7
7
  <div class="clearfix">
8
8
  <div id="div_main_show_area" class="clearfix">
9
9
  <%= link_to image_tag('w227x182px.gif',
10
- :alt=>item_title,
10
+ :alt => item_title,
11
11
  :data => {:original => image_path(@item.main_image_url)},
12
12
  :class => 'lazy'),
13
13
  image_path(@item.main_image_url),
@@ -37,15 +37,17 @@
37
37
  <%= ph_render_tech_props(@item) %>
38
38
  </div>
39
39
 
40
- <div id="div_all_areas_table" class="wrap_collapse">
41
- <button type="button" class="btn" data-toggle="collapse" data-target="#iid">
42
- <span class="fa fa-chevron-right"></span>
43
- Площади объекта <%= @item.title %> (<%= @item.areas.count %>)
44
- </button>
45
- <div class="collapse" id="iid">
46
- <%= ph_render_areas_table(@item) %>
47
- </div>
48
- </div>
40
+ <% if current_admin_user.can_edit_property?(@item) %>
41
+ <div id="div_all_areas_table" class="wrap_collapse">
42
+ <button type="button" class="btn" data-toggle="collapse" data-target="#iid">
43
+ <span class="fa fa-chevron-right"></span>
44
+ Площади объекта <%= @item.title %> (<%= @item.areas.count %>)
45
+ </button>
46
+ <div class="collapse" id="iid">
47
+ <%= ph_render_areas_table(@item) %>
48
+ </div>
49
+ </div>
50
+ <% end %>
49
51
 
50
52
  <div id="related_items" class="hidden">
51
53
  <%# smiph_render_related_items(@item) %>
@@ -1,3 +1,3 @@
1
1
  module C80Estate
2
- VERSION = '0.1.0.33'
2
+ VERSION = '0.1.0.34'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_estate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.33
4
+ version: 0.1.0.34
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-08 00:00:00.000000000 Z
11
+ date: 2016-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler