c80_estate 0.1.0.3 → 0.1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/app/admin/c80_estate/dashboard.rb +65 -0
  3. data/app/admin/c80_estate/properties.rb +9 -1
  4. data/app/admin/c80_estate/sevents.rb +18 -12
  5. data/app/assets/images/property_default_logo.png +0 -0
  6. data/app/assets/javascript/c80_estate/backend/admin/pstats.js +231 -40
  7. data/app/assets/javascript/c80_estate/backend/admin/sevents.js +127 -1
  8. data/app/assets/javascript/c80_estate/lib/Chart.bundle.js +14282 -0
  9. data/app/assets/javascript/c80_estate/lib/jquery.canvasjs.min.js +560 -0
  10. data/app/assets/stylesheets/c80_estate/backend/admin_pstats.scss +55 -5
  11. data/app/assets/stylesheets/c80_estate/backend/admin_sevents.scss +5 -0
  12. data/app/assets/stylesheets/c80_estate/backend/dashboard/atype_in_list.scss +29 -0
  13. data/app/assets/stylesheets/c80_estate/backend/dashboard/common.scss +43 -0
  14. data/app/assets/stylesheets/c80_estate/backend/dashboard/prop_in_list.scss +52 -0
  15. data/app/controllers/c80_estate/ajax_view_controller.rb +23 -0
  16. data/app/helpers/c80_estate/app_helper.rb +55 -0
  17. data/app/models/c80_estate/area.rb +40 -15
  18. data/app/models/c80_estate/plogo.rb +6 -0
  19. data/app/models/c80_estate/pphoto.rb +1 -0
  20. data/app/models/c80_estate/property.rb +14 -0
  21. data/app/models/c80_estate/pstat.rb +419 -30
  22. data/app/models/c80_estate/sevent.rb +65 -1
  23. data/app/uploaders/c80_estate/plogo_uploader.rb +25 -0
  24. data/app/views/admin/dashboard/_atype_in_list.html.erb +3 -0
  25. data/app/views/admin/dashboard/_prop_in_list.html.erb +10 -0
  26. data/app/views/c80_estate/ajax_view/table_properties_coef_busy.js.erb +3 -0
  27. data/app/views/c80_estate/ajax_view/table_properties_coef_busy_sq.js.erb +3 -0
  28. data/app/views/c80_estate/shared/_table_properties_coef_busy.html.erb +25 -0
  29. data/app/views/c80_estate/shared/_table_properties_coef_busy_sq.html.erb +25 -0
  30. data/config/routes.rb +4 -0
  31. data/db/migrate/20160630012728_create_c80_estate_plogos.rb +9 -0
  32. data/lib/c80_estate/version.rb +1 -1
  33. metadata +20 -2
@@ -12,7 +12,7 @@ body.admin_pstats {
12
12
  transition: opacity .2s ease-in;
13
13
 
14
14
  div#index_adds {
15
- height: calc(183px + 15px);
15
+ height: calc(483px + 15px);
16
16
  min-height: calc(183px + 15px);
17
17
  margin-bottom: 0;
18
18
 
@@ -24,7 +24,7 @@ body.admin_pstats {
24
24
  height: 183px;
25
25
 
26
26
  &#coef {
27
- width: 200px;
27
+ width: 25%;
28
28
  text-align: center;
29
29
 
30
30
  p {
@@ -39,8 +39,25 @@ body.admin_pstats {
39
39
  }
40
40
  }
41
41
 
42
- &#text_stats {
43
- width: 400px;
42
+ &#coef_sq {
43
+ width: calc(25% - 30px);
44
+ margin-left: 30px;
45
+ text-align: center;
46
+
47
+ p {
48
+ width: 100%;
49
+
50
+ &.val {
51
+ margin-top: 15px;
52
+ margin-bottom: 0;
53
+ font-size: 40px;
54
+ }
55
+
56
+ }
57
+ }
58
+
59
+ &#text_stats, &#text_stats_sq {
60
+ width: calc(25% - 30px);
44
61
  margin-left: 30px;
45
62
 
46
63
  ul {
@@ -54,7 +71,7 @@ body.admin_pstats {
54
71
  }
55
72
 
56
73
  &#graph {
57
- width: calc(100% - 200px - 400px - 30px - 30px);
74
+ width: calc(100% - 200px - 200px - 30px - 30px);
58
75
  /*width: 100%;*/
59
76
  /*height: 200px;*/
60
77
  /*margin-top: 15px;*/
@@ -73,7 +90,32 @@ body.admin_pstats {
73
90
 
74
91
  &#graph2 {
75
92
  width: 100%;
93
+ height: 198px;
94
+
95
+ margin-top: 15px;
96
+ margin-bottom: 15px;
97
+ padding: 0;
98
+ display: none;
99
+ opacity: 0;
100
+
101
+ -webkit-transition: opacity .2s ease-in;
102
+ -moz-transition: opacity .2s ease-in;
103
+ -ms-transition: opacity .2s ease-in;
104
+ -o-transition: opacity .2s ease-in;
105
+ transition: opacity .2s ease-in;
106
+
107
+ #graph2canvas {
108
+ width: 100%;
109
+ }
110
+
111
+ }
112
+
113
+ &#graph3 {
114
+ width: 100%;
115
+ height: 198px;
116
+
76
117
  margin-top: 15px;
118
+ margin-bottom: 15px;
77
119
  padding: 0;
78
120
  display: none;
79
121
  opacity: 0;
@@ -84,6 +126,10 @@ body.admin_pstats {
84
126
  -o-transition: opacity .2s ease-in;
85
127
  transition: opacity .2s ease-in;
86
128
 
129
+ #graph3canvas {
130
+ width: 100%;
131
+ }
132
+
87
133
  }
88
134
 
89
135
  }
@@ -126,6 +172,10 @@ body.admin_pstats {
126
172
  display: none !important;
127
173
  }
128
174
 
175
+ #collection_selection {
176
+ display: none !important;
177
+ }
178
+
129
179
  }
130
180
 
131
181
  }
@@ -69,6 +69,11 @@ body.admin_sevents {
69
69
  -ms-transition: opacity .2s ease-in;
70
70
  -o-transition: opacity .2s ease-in;
71
71
  transition: opacity .2s ease-in;
72
+
73
+ #graph_canvas {
74
+ width: 100%;
75
+ }
76
+
72
77
  }
73
78
 
74
79
  }
@@ -0,0 +1,29 @@
1
+ a.atype_in_list {
2
+ display: block;
3
+ float: left;
4
+ min-width: 150px;
5
+ margin-right: 30px;
6
+ border: 2px solid #ededed;
7
+ border-radius: 3px;
8
+ line-height: 44px;
9
+ padding: 0 20px;
10
+ margin-bottom: 10px;
11
+
12
+ text-align: center;
13
+ white-space: nowrap;
14
+ text-decoration: none;
15
+ font-weight: bold;
16
+ color: #288feb;
17
+ font-size: 15px;
18
+
19
+ &:hover { color: #2990ed; background-color: #e4e4e4; text-decoration: none;}
20
+ &:active { color: #18558c; }
21
+ &:focus { color: #164f82; }
22
+
23
+ -webkit-transition: all .2s ease-in;
24
+ -moz-transition: all .2s ease-in;
25
+ -ms-transition: all .2s ease-in;
26
+ -o-transition: all .2s ease-in;
27
+ transition: all .2s ease-in;
28
+
29
+ }
@@ -0,0 +1,43 @@
1
+ body.admin_dashboard {
2
+
3
+ p.title {
4
+ font-size: 17px;
5
+ }
6
+
7
+ .columns {
8
+ margin-bottom: 30px;
9
+ }
10
+
11
+ .panel {
12
+ -webkit-box-shadow: none !important;
13
+ box-shadow: none !important;
14
+
15
+ > h3 {
16
+ background-color: #5e7188 !important;
17
+ background-image: none !important;
18
+ text-shadow: none !important;
19
+ border: none !important;
20
+ box-shadow: none !important;
21
+ line-height: 30px !important;;
22
+ margin-bottom: 0.5em;
23
+ color: #ffffff !important;
24
+ padding: 5px 10px 3px 10px;
25
+ }
26
+
27
+ .panel_contents {
28
+ padding: 10px 0 !important;
29
+ border-bottom: none !important;
30
+ }
31
+
32
+ table {
33
+ th {
34
+ background-color: #ffffff !important;
35
+ border-bottom: 1px solid #cecece !important;
36
+ line-height: 5px !important;
37
+ background-image: none !important;
38
+ color: #288feb !important;
39
+ }
40
+ }
41
+ }
42
+
43
+ }
@@ -0,0 +1,52 @@
1
+ div.prop_in_list {
2
+ float: left;
3
+ width: 200px;
4
+ height: 214px;
5
+ margin-right: 30px;
6
+ margin-bottom: 15px;
7
+ border: 2px solid #ededed;
8
+ border-radius: 3px;
9
+
10
+ > a {
11
+ width: 100px;
12
+ height: 100px;
13
+ display: block;
14
+ position: relative;
15
+ margin: 0 46px;
16
+ top: 35px;
17
+ text-align: center; /*!*/
18
+ white-space: nowrap; /*!*/
19
+
20
+ span {
21
+ display: inline-block; /*!*/
22
+ vertical-align: middle; /*!*/
23
+ height: 100%; /*!*/
24
+ }
25
+
26
+ img {
27
+ max-width: 100%;
28
+ vertical-align: middle; /*!*/
29
+ }
30
+
31
+ }
32
+
33
+ .text_content {
34
+ margin-top: 45px;
35
+ padding: 0 35px;
36
+ text-align: center;
37
+
38
+ h4 {
39
+ > a {
40
+ font-weight: bold;
41
+ color: #288feb;
42
+ text-decoration: none;
43
+ font-size: 15px;
44
+ &:hover { color: #1c62a1; }
45
+ &:active { color: #18558c; }
46
+ &:focus { color: #164f82; }
47
+ }
48
+ }
49
+
50
+ }
51
+
52
+ }
@@ -0,0 +1,23 @@
1
+ module C80Estate
2
+ class AjaxViewController < ActionController::Base
3
+
4
+ def table_properties_coef_busy
5
+
6
+ @atype_id = request.params[:atype_id] == "" ? nil:request.params[:atype_id]
7
+
8
+ respond_to do |format|
9
+ format.js
10
+ end
11
+ end
12
+
13
+ def table_properties_coef_busy_sq
14
+
15
+ @atype_id = request.params[:atype_id] == "" ? nil:request.params[:atype_id]
16
+
17
+ respond_to do |format|
18
+ format.js
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,55 @@
1
+ module C80Estate
2
+ module AppHelper
3
+
4
+ def render_table_prop_busy_coef(atype_id: nil)
5
+ # Rails.logger.debug "<render_table_prop_busy_coef> atype_id = #{atype_id}"
6
+
7
+ props = Property.all
8
+ list = []
9
+
10
+ props.all.each do |prop|
11
+ pp = Pstat.busy_coef(prop_id: prop.id, atype_id: atype_id)
12
+ # Rails.logger.debug "<render_table_prop_busy_coef> pp = #{pp}"
13
+ busy_coef = pp[:busy_coef]
14
+ props = pp[:raw_props]
15
+ list << {
16
+ title: prop.title,
17
+ busy_coef: busy_coef,
18
+ props: props
19
+ }
20
+ # Rails.logger.debug "<render_table_prop_busy_coef> #{prop.title}"
21
+ end
22
+
23
+ render :partial => 'c80_estate/shared/table_properties_coef_busy',
24
+ :locals => {
25
+ list: list
26
+ }
27
+ end
28
+
29
+ def render_table_prop_busy_coef_sq(atype_id: nil)
30
+ Rails.logger.debug "<render_table_prop_busy_coef_sq> atype_id = #{atype_id}"
31
+
32
+ props = Property.all
33
+ list = []
34
+
35
+ props.all.each do |prop|
36
+ pp = Pstat.busy_coef(prop_id: prop.id, atype_id: atype_id)
37
+ # Rails.logger.debug "<render_table_prop_busy_coef> pp = #{pp}"
38
+ busy_coef_sq = pp[:busy_coef_sq]
39
+ props = pp[:raw_props_sq]
40
+ list << {
41
+ title: prop.title,
42
+ busy_coef: busy_coef_sq,
43
+ props: props
44
+ }
45
+ # Rails.logger.debug "<render_table_prop_busy_coef> #{prop.title}"
46
+ end
47
+
48
+ render :partial => 'c80_estate/shared/table_properties_coef_busy_sq',
49
+ :locals => {
50
+ list: list
51
+ }
52
+ end
53
+
54
+ end
55
+ end
@@ -14,14 +14,14 @@ module C80Estate
14
14
  !attributes[:prop_name_id].present?
15
15
  },
16
16
  :allow_destroy => true
17
- has_many :aphotos, :dependent => :destroy # одна или несколько фоток
17
+ has_many :aphotos, :dependent => :destroy # одна или несколько фоток
18
18
  accepts_nested_attributes_for :aphotos,
19
19
  :reject_if => lambda { |attributes|
20
20
  !attributes.present?
21
21
  },
22
22
  :allow_destroy => true
23
- has_many :comments, :dependent => :destroy # площадь можно прокомментировать
24
- has_and_belongs_to_many :astatuses, # единственный статус: либо занята, либо свободна
23
+ has_many :comments, :dependent => :destroy # площадь можно прокомментировать
24
+ has_and_belongs_to_many :astatuses, # единственный статус: либо занята, либо свободна
25
25
  :join_table => 'c80_estate_areas_astatuses'
26
26
 
27
27
  has_many :sevents, :dependent => :destroy
@@ -34,21 +34,46 @@ module C80Estate
34
34
  end
35
35
 
36
36
  def self.free_areas
37
- self.joins(:astatuses).where(:c80_estate_astatuses => { tag: 'free'})
37
+ self.joins(:astatuses).where(:c80_estate_astatuses => {tag: 'free'})
38
38
  end
39
39
 
40
40
  # посчитает кол-во свободных метров
41
41
  def self.free_areas_sq
42
- 1
42
+ sum = 0
43
+ self.free_areas.each do |area|
44
+ area_prop_square = area.item_props.where(:prop_name_id => 9)
45
+ if area_prop_square.present?
46
+ sum += area_prop_square.first.value.to_i
47
+ end
48
+ end
49
+ sum
43
50
  end
44
51
 
45
52
  def self.busy_areas
46
- self.joins(:astatuses).where(:c80_estate_astatuses => { tag: 'busy'})
53
+ self.joins(:astatuses).where(:c80_estate_astatuses => {tag: 'busy'})
47
54
  end
48
55
 
49
56
  # посчитает кол-во занятых метров
50
57
  def self.busy_areas_sq
51
- 1
58
+ sum = 0
59
+ self.busy_areas.each do |area|
60
+ area_prop_square = area.item_props.where(:prop_name_id => 9)
61
+ if area_prop_square.present?
62
+ sum += area_prop_square.first.value.to_i
63
+ end
64
+ end
65
+ sum
66
+ end
67
+
68
+ def self.all_areas_sq
69
+ sum = 0
70
+ self.all.each do |area|
71
+ area_prop_square = area.item_props.where(:prop_name_id => 9)
72
+ if area_prop_square.present?
73
+ sum += area_prop_square.first.value.to_i
74
+ end
75
+ end
76
+ sum
52
77
  end
53
78
 
54
79
  def atype_title
@@ -110,14 +135,14 @@ module C80Estate
110
135
  Rails.logger.debug "<Area.create_initial_sevent> aga: self.astatuses.first.title = #{self.astatuses.first.title}"
111
136
 
112
137
  s = Sevent.create!({
113
- area_id: self.id,
114
- atype_id: self.atype_id,
115
- property_id: self.property_id,
116
- astatus_id: self.astatus_id,
117
- auser_id: self.owner_id, # инициатор события - создатель Площади
118
- auser_type: 'AdminUser',
119
- created_at: self.created_at
120
- })
138
+ area_id: self.id,
139
+ atype_id: self.atype_id,
140
+ property_id: self.property_id,
141
+ astatus_id: self.astatus_id,
142
+ auser_id: self.owner_id, # инициатор события - создатель Площади
143
+ auser_type: 'AdminUser',
144
+ created_at: self.created_at
145
+ })
121
146
 
122
147
  # см [*]
123
148
  # if last_known_sevent == ''
@@ -0,0 +1,6 @@
1
+ module C80Estate
2
+ class Plogo < ActiveRecord::Base
3
+ belongs_to :property
4
+ mount_uploader :image, PlogoUploader
5
+ end
6
+ end
@@ -1,5 +1,6 @@
1
1
  module C80Estate
2
2
  class Pphoto < ActiveRecord::Base
3
+ belongs_to :property
3
4
  mount_uploader :image, PphotoUploader
4
5
  end
5
6
  end
@@ -10,6 +10,12 @@ module C80Estate
10
10
  !attributes.present?
11
11
  },
12
12
  :allow_destroy => true
13
+ has_many :plogos, :dependent => :destroy # одна или несколько фоток
14
+ accepts_nested_attributes_for :plogos,
15
+ :reject_if => lambda { |attributes|
16
+ !attributes.present?
17
+ },
18
+ :allow_destroy => true
13
19
  has_many :areas, :dependent => :destroy
14
20
  has_many :comments, :dependent => :destroy
15
21
  has_many :sevents, :dependent => :destroy
@@ -23,5 +29,13 @@ module C80Estate
23
29
  res
24
30
  end
25
31
 
32
+ def logo_path
33
+ url = 'property_default_logo.png'
34
+ if plogos.count > 0
35
+ url = plogos.first.image.thumb256
36
+ end
37
+ url
38
+ end
39
+
26
40
  end
27
41
  end