educode_sales 0.9.95 → 0.9.96

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
  SHA256:
3
- metadata.gz: 020e7b13af1f688294cf915903504d046e8abf8f12692a3289612f9fc6d819ea
4
- data.tar.gz: 117b4008223f6735554cd7cfea3915bd7af2bdcb7cbb4da4a4337b6c9efe1e88
3
+ metadata.gz: 63f1a9066c14a86f9c577ae32986fe5f6887b9a24eff3ceb84eee0bd1f35e645
4
+ data.tar.gz: 8caaf272560cd43c59c86747910f4f398ee49be736f0b0b00190636d13ddf6b2
5
5
  SHA512:
6
- metadata.gz: ab7a08287377e7434e47093263c1f61009ae57fb100627af3724f722eb581774e9603dc72ddda6aa82a311816240be1c67ec07bf55c2af4cf0a9a2cc94739466
7
- data.tar.gz: 88a64408c760b08c8621aceac38979f5389db498baa8aed7289b70a29f2d91e6e2edc3af3a6c77209235d4b5a5b7ce3f9556f9cea9fa13ee1757f96ab2c95bbb
6
+ metadata.gz: 48235ecc3dbdec34879a9c4e07bcf0ec2c7e9673308e7ff32f878efda9c88305b405d8c3f38848565e5e5a53e8f97d8579fe229c9dd943f15574b3c57f97f477
7
+ data.tar.gz: dc623573607a70e5ade7dfc55aa4e7f1c18f73d9170d04741ada0c6e2f7e27187978587a3ee068a3a9a2946855082fb680c48e30c8914824fcb0d4617685b189
@@ -170,12 +170,33 @@ module EducodeSales
170
170
  gon.school_tags = SchoolTag.where(for_missions: true).map { |d| {value: d.id, name: d.name } }
171
171
  end
172
172
  format.json do
173
- @customers = School.from("(
174
- SELECT schools.id, departments.id AS department_id, COUNT(department_majors.id) AS major_count
175
- FROM schools
176
- LEFT JOIN departments ON schools.id = departments.school_id
177
- LEFT JOIN department_majors ON department_majors.department_id = departments.id
178
- GROUP BY schools.id, departments.id
173
+ @o = EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.id
174
+ @customers = School.from("
175
+ (
176
+ SELECT m.*, sc.school_business_count, de.department_business_count
177
+ FROM
178
+ (
179
+ SELECT schools.id, departments.id AS department_id, COUNT(department_majors.id) AS major_count
180
+ FROM schools
181
+ LEFT JOIN departments ON schools.id = departments.school_id
182
+ LEFT JOIN department_majors ON department_majors.department_id = departments.id
183
+ GROUP BY schools.id, departments.id
184
+ ) AS m
185
+ LEFT JOIN (
186
+ SELECT schools.id, COUNT(educode_sales_businesses.id) AS school_business_count
187
+ FROM schools
188
+ LEFT JOIN educode_sales_businesses ON educode_sales_businesses.school_id = schools.id AND educode_sales_businesses.deleted_at is NULL
189
+ GROUP BY schools.id
190
+ ) AS sc ON m.id = sc.id
191
+ LEFT JOIN (
192
+ SELECT schools.id, departments.id AS department_id, COUNT(d.id) AS department_business_count
193
+ FROM schools
194
+ LEFT JOIN departments ON schools.id = departments.school_id
195
+ LEFT JOIN educode_sales_businesses AS d ON d.department_id = departments.id AND d.deleted_at is NULL
196
+ GROUP BY schools.id, departments.id
197
+ ) AS de ON m.id = de.id AND m.department_id = de.department_id
198
+
199
+
179
200
  ) AS s")
180
201
  if @current_admin.is_admin?
181
202
  # @customers = School.all
@@ -197,6 +218,8 @@ module EducodeSales
197
218
 
198
219
  @customers = @customers.select("
199
220
  schools.*,
221
+ s.school_business_count,
222
+ s.department_business_count,
200
223
  s.major_count,
201
224
  s.department_id,
202
225
  departments.name AS department_name,
@@ -208,9 +231,9 @@ module EducodeSales
208
231
  ")
209
232
 
210
233
  part_a_ids = CustomerFollow.all.pluck(:school_id)
211
- part_b_ids = Business.where(id: EducodeSales::FollowUp.pluck(:business_id)).pluck(:school_id)
234
+ part_b_ids = Business.pluck(:school_id)
212
235
  ids = part_a_ids + part_b_ids + CustomerAdd.all.pluck(:school_id)
213
- @customers = @customers.where(id: ids)
236
+ @customers = @customers.where(id: ids.uniq)
214
237
  if params[:q].present? && params[:q][:name].present?
215
238
  @customers = @customers.where("schools.name like ?", "%#{params[:q][:name]}%")
216
239
  end
@@ -316,7 +339,7 @@ module EducodeSales
316
339
  else
317
340
  @follow_ups = EducodeSales::CustomerFollow.where(school_id: params[:id])
318
341
  end
319
-
342
+
320
343
  @latest = @follow_ups.order(created_at: :desc).first
321
344
  @follow_ups = @follow_ups.order("created_at desc")
322
345
  @follow_ups = @follow_ups.page(params[:page]).per(params[:limit])
@@ -419,7 +442,7 @@ module EducodeSales
419
442
  end
420
443
 
421
444
  SchoolTagMiddle.where(school_id: nil).delete_all
422
-
445
+
423
446
  render json: { succcess: true}
424
447
  end
425
448
 
@@ -432,8 +455,8 @@ module EducodeSales
432
455
  department.department_majors.find_by(id: params[:major_id])&.update(name: params[:major]) if params[:major_id].present?
433
456
  end
434
457
  end
435
-
436
-
458
+
459
+
437
460
  ActiveRecord::Base.transaction do
438
461
  property = SchoolProperty.find_or_create_by!(project_985: params[:project_985].present? ? 1 : 0,
439
462
  project_211: params[:project_211].present? ? 1 : 0,
@@ -447,6 +447,20 @@ module EducodeSales
447
447
  end
448
448
  end
449
449
 
450
+ def user_stat
451
+ respond_to do |format|
452
+ format.html do
453
+
454
+ end
455
+ format.js do
456
+ user_stat = EducodeSales::UserStatService.new
457
+ gon.table_1 = user_stat.table_1
458
+ gon.table_2 = user_stat.table_2(0)
459
+ gon.table_3 = user_stat.table_2(1)
460
+ end
461
+ end
462
+ end
463
+
450
464
  private
451
465
 
452
466
  def sale_trend_params
@@ -0,0 +1,164 @@
1
+ module EducodeSales
2
+ class UserStatService
3
+
4
+ attr_reader :o_type, :school_ids
5
+ def initialize
6
+ @o_type = EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.id
7
+
8
+ part_a_ids = EducodeSales::CustomerFollow.all.pluck(:school_id)
9
+ part_b_ids = EducodeSales::Business.pluck(:school_id)
10
+ @school_ids = (part_a_ids + part_b_ids + EducodeSales::CustomerAdd.all.pluck(:school_id)).uniq
11
+ end
12
+
13
+ def table_1
14
+ # 公有云
15
+ user_years_1 = year_users(1)
16
+ # 私有云
17
+ user_years_2 = year_users(2)
18
+ school_years_1 = school_users(1)
19
+ school_years_2 = school_users(2)
20
+ department_years_1 = department_users(1)
21
+ department_years_2 = department_users(2)
22
+
23
+ years = {}
24
+ (2018..Time.current.year).each do |d|
25
+ years[d] = {
26
+ 'year' => d,
27
+ 'user_1' => user_years_1[d.to_s] || 0,
28
+ 'user_2' => user_years_2[d.to_s] || 0,
29
+ 'school_1' => school_years_1[d.to_s] || 0,
30
+ 'school_2' => school_years_2[d.to_s] || 0,
31
+ 'department_1' => department_years_1[d.to_s] || 0,
32
+ 'department_2' => department_years_2[d.to_s] || 0
33
+ }
34
+ end
35
+
36
+ years.values
37
+ end
38
+
39
+ def table_2(clazz)
40
+ users = {'1-9' => [0, 0, 0], '10-99' => [0, 0, 0], '100-999' => [0, 0, 0], '1000-9999' => [0, 0, 0], '10000-49999' => [0, 0, 0] }
41
+ signed_users = {'1-9' => [0, 0, 0], '10-99' => [0, 0, 0], '100-999' => [0, 0, 0], '1000-9999' => [0, 0, 0], '10000-49999' => [0, 0, 0] }
42
+ schools(clazz).each do |d|
43
+ if d[1] <= 9
44
+ users['1-9'][0] += 1
45
+ elsif d[1] <= 99
46
+ users['10-99'][0] += 1
47
+ elsif d[1] <= 999
48
+ users['100-999'][0] += 1
49
+ elsif d[1] <= 9999
50
+ users['1000-9999'][0] += 1
51
+ elsif d[1] <= 49999
52
+ users['10000-49999'][0] += 1
53
+ end
54
+ end
55
+
56
+ departments(clazz).each do |d|
57
+ if d[1] <= 9
58
+ users['1-9'][1] += 1
59
+ elsif d[1] <= 99
60
+ users['10-99'][1] += 1
61
+ elsif d[1] <= 999
62
+ users['100-999'][1] += 1
63
+ elsif d[1] <= 9999
64
+ users['1000-9999'][1] += 1
65
+ elsif d[1] <= 49999
66
+ users['10000-49999'][1] += 1
67
+ end
68
+ end
69
+
70
+ signed_schools(clazz).each do |d|
71
+ if d[1] <= 9
72
+ signed_users['1-9'][0] += 1
73
+ elsif d[1] <= 99
74
+ signed_users['10-99'][0] += 1
75
+ elsif d[1] <= 999
76
+ signed_users['100-999'][0] += 1
77
+ elsif d[1] <= 9999
78
+ signed_users['1000-9999'][0] += 1
79
+ elsif d[1] <= 49999
80
+ signed_users['10000-49999'][0] += 1
81
+ end
82
+ end
83
+
84
+ signed_departments(clazz).each do |d|
85
+ if d[1] <= 9
86
+ signed_users['1-9'][1] += 1
87
+ elsif d[1] <= 99
88
+ signed_users['10-99'][1] += 1
89
+ elsif d[1] <= 999
90
+ signed_users['100-999'][1] += 1
91
+ elsif d[1] <= 9999
92
+ signed_users['1000-9999'][1] += 1
93
+ elsif d[1] <= 49999
94
+ signed_users['10000-49999'][1] += 1
95
+ end
96
+ end
97
+
98
+
99
+ ['1-9', '10-99', '100-999', '1000-9999', '10000-49999'].map do |d|
100
+ {
101
+ 'num' => d,
102
+ 'schools' => users[d][0],
103
+ 'departments' => users[d][1],
104
+ 'majors' => 0,
105
+ 'signed_schools' => signed_users[d][0],
106
+ 'signed_departments' => signed_users[d][1],
107
+ 'signed_majors' => 0,
108
+ }
109
+ end
110
+ end
111
+
112
+ def year_users(clazz)
113
+ EducodeSales::Business.joins(:last_follow_up).
114
+ joins("join user_extensions ON user_extensions.department_id = educode_sales_businesses.department_id").
115
+ where("educode_sales_follow_ups.o_business_deployment = #{clazz}").
116
+ group("DATE_FORMAT(user_extensions.created_at, '%Y')").
117
+ select("count(*) as count, DATE_FORMAT(user_extensions.created_at, '%Y') as year").
118
+ distinct.count("user_extensions.id")
119
+ end
120
+
121
+ def school_users(clazz)
122
+ EducodeSales::Business.joins(:last_follow_up).
123
+ joins("join schools ON schools.id = educode_sales_businesses.school_id").
124
+ where("educode_sales_follow_ups.o_business_deployment = #{clazz}").
125
+ group("DATE_FORMAT(schools.created_at, '%Y')").
126
+ select("count(*) as count, DATE_FORMAT(schools.created_at, '%Y') as year").
127
+ distinct.count("school_id")
128
+ end
129
+
130
+ def department_users(clazz)
131
+ EducodeSales::Business.joins(:last_follow_up).
132
+ joins("join departments ON departments.id = educode_sales_businesses.department_id").
133
+ where("educode_sales_follow_ups.o_business_deployment = #{clazz}").
134
+ group("DATE_FORMAT(departments.created_at, '%Y')").
135
+ select("count(*) as count, DATE_FORMAT(departments.created_at, '%Y') as year").
136
+ distinct.count("school_id")
137
+ end
138
+
139
+ def schools(clazz)
140
+ School.joins("JOIN user_extensions ON schools.id = user_extensions.school_id AND user_extensions.identity = #{clazz}").
141
+ where(id: @school_ids).group(:id).count
142
+ end
143
+
144
+ def departments(clazz)
145
+ School.joins("JOIN user_extensions ON schools.id = user_extensions.school_id AND user_extensions.identity = #{clazz}").
146
+ where(id: @school_ids).group("user_extensions.department_id").count
147
+ end
148
+
149
+ def signed_schools(clazz)
150
+ School.joins("JOIN user_extensions on schools.id = user_extensions.school_id AND user_extensions.identity = #{clazz}
151
+ JOIN educode_sales_businesses ON educode_sales_businesses.clazz_id = #{@o_type} AND educode_sales_businesses.school_id = schools.id
152
+ ").where(id: @school_ids).group(:id).distinct.count("user_extensions.id")
153
+ end
154
+
155
+ def signed_departments(clazz)
156
+ School.joins("JOIN user_extensions on schools.id = user_extensions.school_id AND user_extensions.identity = #{clazz}
157
+ JOIN educode_sales_businesses ON educode_sales_businesses.clazz_id = #{@o_type} AND educode_sales_businesses.school_id = schools.id
158
+ ").where(id: @school_ids).where("user_extensions.department_id > 0").
159
+ group("user_extensions.department_id").
160
+ distinct.count("user_extensions.id")
161
+ end
162
+ end
163
+
164
+ end
@@ -1,16 +1,16 @@
1
- x = EducodeSales::Common.find_by(extras: EducodeSales::Common::XTYPE)&.id
2
- o = EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.id
3
- business_ids_group_a = EducodeSales::Business.where(department_id: @customers.map(&:department_id)).group_by(&:department_id)
4
- business_ids_group_b = EducodeSales::Business.where(school_id: @customers.map(&:id)).group_by(&:school_id)
1
+
2
+ department_ids = @customers.map(&:department_id).uniq
3
+ customer_ids = @customers.map(&:id).uniq
4
+
5
+ business_ids_group_a = EducodeSales::Business.where(department_id: department_ids).group_by(&:department_id)
6
+ business_ids_group_b = EducodeSales::Business.where(school_id: customer_ids).group_by(&:school_id)
5
7
  all_follow_ups = EducodeSales::FollowUp.where(business_id: business_ids_group_a.values.flatten.map(&:id) + business_ids_group_b.values.flatten.map(&:id))
6
- customer_follows_a = EducodeSales::CustomerFollow.where(department_id: @customers.map(&:department_id)).group_by(&:department_id)
7
- customer_follows_b = EducodeSales::CustomerFollow.where(school_id: @customers.map(&:id)).group_by(&:school_id)
8
- all_school_tags = SchoolTag.joins(:school_tag_middles).where(school_tag_middles: { school_id: @customers.map(&:id) }).select(:school_id, :name, :for_missions)
9
- business_count_group_a = EducodeSales::Business.where(department_id: @customers.map(&:department_id)).group(:department_id).count
10
- business_count_group_b = EducodeSales::Business.where(school_id: @customers.map(&:id)).group(:school_id).count
11
- o_business_count_group_a = EducodeSales::Business.where(department_id: @customers.map(&:department_id)).where("educode_sales_businesses.clazz_id = ?", o).group(:department_id).count
12
- o_business_count_group_b = EducodeSales::Business.where(school_id: @customers.map(&:id)).where("educode_sales_businesses.clazz_id = ?", o).group(:school_id).count
13
- all_staffs_group = EducodeSales::CustomerExtension.where(school_id: @customers.map(&:id)).includes(customer_staff: :user).group_by(&:school_id)
8
+ customer_follows_a = EducodeSales::CustomerFollow.where(department_id: department_ids).group_by(&:department_id)
9
+ customer_follows_b = EducodeSales::CustomerFollow.where(school_id: customer_ids).group_by(&:school_id)
10
+ all_school_tags = SchoolTag.joins(:school_tag_middles).where(school_tag_middles: { school_id: customer_ids }).select(:school_id, :name, :for_missions)
11
+ o_business_count_group_a = EducodeSales::Business.where(department_id: department_ids).where("educode_sales_businesses.clazz_id = ?", @o).group(:department_id).count
12
+ o_business_count_group_b = EducodeSales::Business.where(school_id: customer_ids).where("educode_sales_businesses.clazz_id = ?", @o).group(:school_id).count
13
+ all_staffs_group = EducodeSales::CustomerExtension.where(school_id: customer_ids).includes(customer_staff: :user).group_by(&:school_id)
14
14
 
15
15
  json.data do
16
16
  json.array! @customers do |d|
@@ -35,10 +35,10 @@ json.data do
35
35
  json.area d.province
36
36
  json.property all_school_tags.select { |t| t.school_id == d.id && t.for_missions? }.pluck(:name).join("、")
37
37
  if d['department_id']
38
- json.business business_count_group_a[d['department_id']] || 0
38
+ json.business d['department_business_count'] || 0
39
39
  json.o_business o_business_count_group_a[d['department_id']] || 0
40
40
  else
41
- json.business business_count_group_b[d.id] || 0
41
+ json.business d['school_business_count'] || 0
42
42
  json.o_business o_business_count_group_b[d.id] || 0
43
43
  end
44
44
  json.unit "#{d.name}---#{d['department_name']}"
@@ -0,0 +1,190 @@
1
+ <%= Gon::Base.render_data %>
2
+ <div id="tab_7" lay-filter="test7">
3
+ <div class="" style="padding-right: 50px">
4
+ <table class="layui-hide" id="table_7_year"></table>
5
+ </div>
6
+ <div class="" style="padding-right: 50px">
7
+ <table class="layui-hide" id="table_7_school"></table>
8
+ </div>
9
+ <div class="" style="padding-right: 50px">
10
+ <table class="layui-hide" id="table_7_signed"></table>
11
+ </div>
12
+ </div>
13
+
14
+ <script>
15
+ layui.use('table', function() {
16
+ var table = layui.table;
17
+
18
+ table.render({
19
+ elem: '#table_7_year',
20
+ cols: [
21
+ [
22
+ {
23
+ field: 'year',
24
+ title: '年份',
25
+ align: 'center',
26
+ width: 150,
27
+ rowspan: 2
28
+ }
29
+ , {
30
+ title: '公有云',
31
+ align: 'center',
32
+ width: 220,
33
+ colspan: 3
34
+ }, {
35
+ align: 'center',
36
+ title: '私有云',
37
+ colspan: 3
38
+ }
39
+ ],
40
+ [{
41
+ field: 'user_1',
42
+ title: '用户数',
43
+ align: 'center',
44
+ width: 150
45
+ }, {
46
+ field: 'school_1',
47
+ title: '学校数',
48
+ align: 'center',
49
+ width: 150
50
+ }, {
51
+ field: 'department_1',
52
+ title: '学院数',
53
+ align: 'center',
54
+ width: 150
55
+ },{
56
+ field: 'user_2',
57
+ title: '用户数',
58
+ align: 'center',
59
+ width: 150
60
+ }, {
61
+ field: 'school_2',
62
+ title: '学校数',
63
+ align: 'center',
64
+ width: 150
65
+ }, {
66
+ field: 'department_2',
67
+ align: 'center',
68
+ title: '学院数',
69
+ width: 150
70
+ }]
71
+ ],
72
+ data: gon.table_1,
73
+ page: false
74
+ });
75
+
76
+ table.render({
77
+ elem: '#table_7_school',
78
+ cols: [
79
+ [
80
+ {
81
+ field: 'num',
82
+ title: '用户数分布',
83
+ align: 'center',
84
+ width: 150,
85
+ rowspan: 2
86
+ }
87
+ , {
88
+ title: '客户数',
89
+ align: 'center',
90
+ colspan: 3
91
+ }, {
92
+ align: 'center',
93
+ title: '签单客户数',
94
+ colspan: 3
95
+ }
96
+ ],
97
+ [{
98
+ field: 'schools',
99
+ title: '学校数',
100
+ align: 'center',
101
+ width: 150
102
+ }, {
103
+ field: 'departments',
104
+ title: '学院数',
105
+ align: 'center',
106
+ width: 150
107
+ }, {
108
+ field: 'majors',
109
+ title: '专业数',
110
+ align: 'center',
111
+ width: 150
112
+ },{
113
+ field: 'signed_schools',
114
+ title: '学校数',
115
+ align: 'center',
116
+ width: 150
117
+ }, {
118
+ field: 'signed_departments',
119
+ title: '学院数',
120
+ align: 'center',
121
+ width: 150
122
+ }, {
123
+ field: 'signed_majors',
124
+ align: 'center',
125
+ title: '专业数',
126
+ width: 150
127
+ }]
128
+ ],
129
+ data: gon.table_2,
130
+ page: false
131
+ });
132
+
133
+ table.render({
134
+ elem: '#table_7_signed',
135
+ cols: [
136
+ [
137
+ {
138
+ field: 'num',
139
+ title: '用户数分布',
140
+ align: 'center',
141
+ width: 150,
142
+ rowspan: 2
143
+ }
144
+ , {
145
+ title: '客户数',
146
+ align: 'center',
147
+ colspan: 3
148
+ }, {
149
+ align: 'center',
150
+ title: '签单客户数',
151
+ colspan: 3
152
+ }
153
+ ],
154
+ [{
155
+ field: 'schools',
156
+ title: '学校数',
157
+ align: 'center',
158
+ width: 150
159
+ }, {
160
+ field: 'departments',
161
+ title: '学院数',
162
+ align: 'center',
163
+ width: 150
164
+ }, {
165
+ field: 'majors',
166
+ title: '专业数',
167
+ align: 'center',
168
+ width: 150
169
+ },{
170
+ field: 'signed_schools',
171
+ title: '学校数',
172
+ align: 'center',
173
+ width: 150
174
+ }, {
175
+ field: 'signed_departments',
176
+ title: '学院数',
177
+ align: 'center',
178
+ width: 150
179
+ }, {
180
+ field: 'signed_majors',
181
+ align: 'center',
182
+ title: '专业数',
183
+ width: 150
184
+ }]
185
+ ],
186
+ data: gon.table_3,
187
+ page: false
188
+ });
189
+ });
190
+ </script>
@@ -6,6 +6,7 @@
6
6
  <li class="">商机区域分布</li>
7
7
  <li class="">销售人员跟进分析</li>
8
8
  <li class="">中标预测图</li>
9
+ <li class="">用户分析</li>
9
10
  </ul>
10
11
  <div class="layui-tab-content">
11
12
  <div class="layui-tab-item layui-show">
@@ -234,6 +235,9 @@
234
235
  <div class="layui-tab-item">
235
236
  <div id="page_6"></div>
236
237
  </div>
238
+ <div class="layui-tab-item">
239
+ <div id="page_7"></div>
240
+ </div>
237
241
  </div>
238
242
  </div>
239
243
 
@@ -258,6 +262,8 @@
258
262
  loadPage('/missions/sale_trends/sales_followup_analysis')
259
263
  } else if (data.index == 5 && $("#tab_6").length == 0) {
260
264
  loadPage('/missions/sale_trends/goal_forecast')
265
+ } else if (data.index == 6 && $("#tab_7").length == 0) {
266
+ loadPage('/missions/sale_trends/user_stat')
261
267
  }
262
268
  });
263
269
 
@@ -0,0 +1 @@
1
+ $("#page_7").html("<%= j render 'user_stat' %>");
data/config/routes.rb CHANGED
@@ -130,6 +130,7 @@ EducodeSales::Engine.routes.draw do
130
130
  get :business_area
131
131
  get :sales_followup_analysis
132
132
  get :goal_forecast
133
+ get :user_stat
133
134
  end
134
135
  end
135
136
 
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.9.95'
2
+ VERSION = '0.9.96'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: educode_sales
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.95
4
+ version: 0.9.96
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-17 00:00:00.000000000 Z
11
+ date: 2023-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -105,7 +105,6 @@ files:
105
105
  - app/assets/images/educode_sales/icon-login.png
106
106
  - app/assets/images/educode_sales/icon.png
107
107
  - app/assets/images/educode_sales/indexLogo.png
108
- - app/assets/images/educode_sales/indexlogo.png
109
108
  - app/assets/images/educode_sales/loading-0.gif
110
109
  - app/assets/images/educode_sales/loading-1.gif
111
110
  - app/assets/images/educode_sales/loading-2.gif
@@ -252,6 +251,7 @@ files:
252
251
  - app/models/educode_sales/teacher.rb
253
252
  - app/models/educode_sales/teacher_assign_follow.rb
254
253
  - app/models/educode_sales/teacher_follow.rb
254
+ - app/models/educode_sales/user_stat_service.rb
255
255
  - app/services/return_forecast_service.rb
256
256
  - app/views/educode_sales/activities/_follows.html.erb
257
257
  - app/views/educode_sales/activities/_index.html.erb
@@ -525,6 +525,7 @@ files:
525
525
  - app/views/educode_sales/sale_trends/_goal_forecast.html.erb
526
526
  - app/views/educode_sales/sale_trends/_sales_analysis.html.erb
527
527
  - app/views/educode_sales/sale_trends/_sales_followup_analysis.html.erb
528
+ - app/views/educode_sales/sale_trends/_user_stat.html.erb
528
529
  - app/views/educode_sales/sale_trends/business_area.js.erb
529
530
  - app/views/educode_sales/sale_trends/business_followup_analysis.js.erb
530
531
  - app/views/educode_sales/sale_trends/goal_forecast.js.erb
@@ -533,6 +534,7 @@ files:
533
534
  - app/views/educode_sales/sale_trends/sales_followup_analysis.js.erb
534
535
  - app/views/educode_sales/sale_trends/trends.html.erb
535
536
  - app/views/educode_sales/sale_trends/trends.json.jbuilder
537
+ - app/views/educode_sales/sale_trends/user_stat.js.erb
536
538
  - app/views/educode_sales/sales/index.html.erb
537
539
  - app/views/educode_sales/sales/index.json.jbuilder
538
540
  - app/views/educode_sales/sales/operations.html.erb
@@ -685,7 +687,7 @@ homepage: https://www.educoder.net
685
687
  licenses:
686
688
  - MIT
687
689
  metadata: {}
688
- post_install_message:
690
+ post_install_message:
689
691
  rdoc_options: []
690
692
  require_paths:
691
693
  - lib
@@ -700,8 +702,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
700
702
  - !ruby/object:Gem::Version
701
703
  version: '0'
702
704
  requirements: []
703
- rubygems_version: 3.0.9
704
- signing_key:
705
+ rubygems_version: 3.0.0
706
+ signing_key:
705
707
  specification_version: 4
706
708
  summary: Summary of EducodeSales.
707
709
  test_files: []