educode_sales 0.5.1 → 0.5.5

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/businesses_controller.rb +5 -1
  3. data/app/controllers/educode_sales/follow_ups_controller.rb +2 -1
  4. data/app/controllers/educode_sales/operation_plans_controller.rb +22 -2
  5. data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
  6. data/app/controllers/educode_sales/plans_controller.rb +22 -2
  7. data/app/controllers/educode_sales/roles_controller.rb +5 -0
  8. data/app/controllers/educode_sales/sale_reports_controller.rb +33 -3
  9. data/app/controllers/educode_sales/sale_trends_controller.rb +196 -0
  10. data/app/controllers/educode_sales/sales_controller.rb +4 -0
  11. data/app/controllers/educode_sales/upload_files_controller.rb +33 -26
  12. data/app/models/educode_sales/common.rb +2 -1
  13. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +3 -3
  14. data/app/views/educode_sales/businesses/file.html.erb +4 -5
  15. data/app/views/educode_sales/businesses/index.html.erb +14 -2
  16. data/app/views/educode_sales/businesses/index.json.jbuilder +1 -0
  17. data/app/views/educode_sales/businesses/new_follow_record.html.erb +2 -2
  18. data/app/views/educode_sales/businesses/show_follow_record.html.erb +1 -1
  19. data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
  20. data/app/views/educode_sales/operation_reports/audit.html.erb +5 -3
  21. data/app/views/educode_sales/operation_reports/show.html.erb +4 -7
  22. data/app/views/educode_sales/places/index.html.erb +20 -5
  23. data/app/views/educode_sales/places/index.json.jbuilder +18 -2
  24. data/app/views/educode_sales/plans/index.html.erb +6 -1
  25. data/app/views/educode_sales/roles/index.html.erb +19 -1
  26. data/app/views/educode_sales/roles/rename.html.erb +50 -0
  27. data/app/views/educode_sales/sale_reports/audit.html.erb +5 -3
  28. data/app/views/educode_sales/sale_reports/show.html.erb +3 -6
  29. data/app/views/educode_sales/sale_trends/trends.html.erb +284 -4
  30. data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
  31. data/app/views/educode_sales/sales/index.html.erb +75 -9
  32. data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
  33. data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
  34. data/app/views/educode_sales/staffs/index.html.erb +6 -1
  35. data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
  36. data/app/views/educode_sales/teachers/add_keys.html.erb +1 -1
  37. data/app/views/educode_sales/teachers/index.html.erb +6 -1
  38. data/app/views/educode_sales/teachers/new.html.erb +1 -0
  39. data/app/views/educode_sales/upload_files/index.json.jbuilder +1 -1
  40. data/config/routes.rb +3 -0
  41. data/lib/educode_sales/version.rb +1 -1
  42. metadata +4 -2
@@ -101,7 +101,7 @@
101
101
  <div class="panel layui-bg-number">
102
102
  <div class="panel-body">
103
103
  <div class="panel-title">
104
- <h5>已中标<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
104
+ <h5>已中标(总额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
105
105
  </div>
106
106
  <div class="panel-content y-t-10">
107
107
  <h1 class="no-margins"><%= @goal_amount %>万</h1>
@@ -114,7 +114,7 @@
114
114
  <div class="panel layui-bg-number">
115
115
  <div class="panel-body">
116
116
  <div class="panel-title">
117
- <h5>已签单<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></h5>
117
+ <h5>已签单(总额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></h5>
118
118
  </div>
119
119
  <div class="panel-content y-t-10">
120
120
  <h1 class="no-margins"><%= @service_amount %>万</h1>
@@ -148,6 +148,32 @@
148
148
  </div>
149
149
  </div>
150
150
  </div>
151
+ <div class="layui-col-xs3">
152
+ <div class="panel layui-bg-number">
153
+ <div class="panel-body">
154
+ <div class="panel-title">
155
+ <h5>已中标(合同额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已中标商机)" style="color: #0000FF;float: right">查看商机</a></h5>
156
+ </div>
157
+ <div class="panel-content y-t-10">
158
+ <h1 class="no-margins"><%= @actual_goal_amount %>万</h1>
159
+ </div>
160
+ </div>
161
+ </div>
162
+ </div>
163
+
164
+ <div class="layui-col-xs3">
165
+ <div class="panel layui-bg-number">
166
+ <div class="panel-body">
167
+ <div class="panel-title">
168
+ <h5>已签单(合同额)<a href="/missions/businesses?name=(销售态势-<%=@year %>-已签单商机)" style="color: #0000FF;float: right">查看商机</a></h5>
169
+ </div>
170
+ <div class="panel-content y-t-10">
171
+ <h1 class="no-margins"><%= @actual_service_amount %>万</h1>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </div>
176
+
151
177
  <div class="layui-row layui-col-space30" >
152
178
  <div class="layui-col-xs3">
153
179
  <div class="panel layui-bg-number">
@@ -168,12 +194,146 @@
168
194
  </div>
169
195
  </div>
170
196
  </form>
197
+ <br>
198
+ <div class="layui-tab layui-tab-card" id="商机跟进数">
199
+ <ul class="layui-tab-title">
200
+ <li class="layui-this">商机跟进数</li>
201
+ </ul>
202
+ <div class="layui-tab-content" style="padding-right: 50px">
203
+ <div class="layui-tab-item layui-show " style="padding-left: 20px">
204
+ <div style="margin: 10px 10px 10px 10px">
205
+ <form class="layui-form layui-form-pane" lay-filter="search_form">
206
+ <div class="layui-form-item">
207
+ <div class="layui-inline m-t-10">
208
+ <label class="layui-form-label">视图</label>
209
+ <div class="layui-input-inline">
210
+ <%= select_tag "follow_count_range", options_for_select([['按周','week'],['按天','day'],['按月','month'],['按年','year']],params[:follow_count_range]), {'lay-filter': 'follow_count'}%>
211
+ </div>
212
+ </div>
213
+ <div class="layui-inline">
214
+ <label class="layui-form-label">时间范围</label>
215
+ <div class="layui-input-inline">
216
+ <input type="text" class="layui-input month layui-hide" id="date_month" name="date_month" placeholder=" - " value="<%=params[:date_month] %>" >
217
+ <input type="text" class="layui-input year layui-hide" id="date_year" name="date_year" placeholder=" - " value="<%=params[:date_year] %>">
218
+ <input type="text" class="layui-input week " id="date_week" name="date_week" placeholder=" - " value="<%=params[:date_week].present? ? params[:date_week] : (Time.now - 30.days).to_s(:date) + ' - ' + Time.now.to_s(:date) %>">
219
+ <input type="text" class="layui-input day layui-hide" id="date" name="date" placeholder=" - " value="<%=params[:date] %>">
220
+ </div>
221
+ </div>
222
+ <div class="layui-inline">
223
+ <button type="submit" id="search_bt" class=" follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
224
+ </button>
225
+ </div>
226
+ </div>
227
+ </form>
228
+ </div>
229
+ <canvas id="myChart" width="960" height="200"></canvas>
230
+ </div>
231
+ </div>
232
+ </div>
233
+ <br>
234
+ <br>
235
+ <div class="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
236
+ <ul class="layui-tab-title">
237
+ <li class="layui-this">销售额分析</li>
238
+ </ul>
239
+ <div class="layui-tab-content" style="padding-right: 50px">
240
+ <div class="layui-tab-item layui-show" style="padding-left: 20px">
241
+ <div style="margin: 10px 10px 10px 10px">
242
+ <form class="layui-form layui-form-pane" lay-filter="search_form">
243
+ <div class="layui-form-item">
244
+ <div class="layui-inline m-t-10">
245
+ <label class="layui-form-label">维度</label>
246
+ <div class="layui-input-inline">
247
+ <%= select_tag "count_type", options_for_select([['按合同额统计','actual_amount'],['按总额统计','total_amount']],params[:count_type]), {'lay-filter': 'count_type'}%>
248
+ </div>
249
+ </div>
250
+ <div class="layui-inline m-t-10">
251
+ <label class="layui-form-label">视图</label>
252
+ <div class="layui-input-inline">
253
+ <%= select_tag "goal_count_range", options_for_select([['按月','month'],['按年','year']],params[:goal_count_range]), {'lay-filter': 'goal_count'}%>
254
+ </div>
255
+ </div>
256
+ <div class="layui-inline">
257
+ <label class="layui-form-label">时间范围</label>
258
+ <div class="layui-input-inline">
259
+ <input type="text" class="layui-input goal_month " id="goal_date_month" name="goal_date_month" placeholder=" - " value="<%=params[:goal_date_month].present? ? params[:goal_date_month] : Time.now.year.to_s + "-01" + " - " + Time.now.strftime("%Y-%m") %>">
260
+ <input type="text" class="layui-input goal_year layui-hide" id="goal_date_year" name="goal_date_year" placeholder=" - " value="<%=params[:goal_date_year] %>">
261
+ </div>
262
+ </div>
263
+ <div class="layui-inline">
264
+ <button type="submit" id="search_bt" class="follow_count_bt layui-btn layui-btn-primary" lay-submit lay-filter="search_bussiness">确定
265
+ </button>
266
+ </div>
267
+ </div>
268
+ </form>
269
+ </div>
270
+ <canvas id="myChart2" width="960" height="200"></canvas>
271
+ </div>
272
+
273
+ </div>
274
+ </div>
275
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
276
+ <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
171
277
  <script>
278
+ follow_type = "<%=@follow_count_range %>"
279
+ goal_type = "<%=@goal_count_range %>"
280
+ follow_flag = <%=params[:follow_count_range].present? %>
281
+ if(follow_flag){
282
+ window.location.href = "#商机跟进数"
283
+ }
284
+
285
+ goal_flag = <%=params[:goal_count_range].present? %>
286
+ if(goal_flag){
287
+ window.location.href = "#销售额分析"
288
+ }
172
289
  layui.use(['form', 'jquery', 'request'], function () {
173
290
  var $ = layui.jquery,
174
291
  form = layui.form,
175
292
  request = layui.request;
176
293
  var year = "<%= @year %>";
294
+ var element = layui.element;
295
+ laydate = layui.laydate;
296
+
297
+ $(document).ready(function () {
298
+ $(".follow_count_bt").click(function () {
299
+ layer.msg("图表绘制中...", {
300
+ offset:['40%','46%']
301
+ })
302
+ layer.load(0, {});
303
+ setTimeout(function () {
304
+ layer.closeAll('loading');
305
+ }, 3000);
306
+ });
307
+ });
308
+ if(follow_type == "day"){
309
+ $(".year").addClass('layui-hide')
310
+ $(".month").addClass('layui-hide')
311
+ $(".week").addClass('layui-hide')
312
+ $(".day").removeClass('layui-hide')
313
+ }else if(follow_type == "month"){
314
+ $(".year").addClass('layui-hide')
315
+ $(".week").addClass('layui-hide')
316
+ $(".month").removeClass('layui-hide')
317
+ $(".day").addClass('layui-hide')
318
+ }else if(follow_type == "week"){
319
+ $(".year").addClass('layui-hide')
320
+ $(".day").addClass('layui-hide')
321
+ $(".week").removeClass('layui-hide')
322
+ $(".month").addClass('layui-hide')
323
+ }else {
324
+ $(".year").removeClass('layui-hide')
325
+ $(".month").addClass('layui-hide')
326
+ $(".day").addClass('layui-hide')
327
+ $(".week").addClass('layui-hide')
328
+ }
329
+
330
+ if(goal_type == "year"){
331
+ $(".goal_year").removeClass('layui-hide')
332
+ $(".goal_month").addClass('layui-hide')
333
+ }else{
334
+ $(".goal_year").addClass('layui-hide')
335
+ $(".goal_month").removeClass('layui-hide')
336
+ }
177
337
 
178
338
  function editForm(el) {
179
339
  $("#" + el + "_edit").click(function() {
@@ -205,18 +365,138 @@
205
365
  })
206
366
  }
207
367
 
368
+ // 时间选择器
369
+ laydate.render({
370
+ elem: '#date',
371
+ range: true
372
+ });
373
+ laydate.render({
374
+ elem: '#date_week',
375
+ range: true
376
+ });
377
+ laydate.render({
378
+ type: 'month',
379
+ elem: '#date_month',
380
+ range: true
381
+ });
382
+ laydate.render({
383
+ type: 'year',
384
+ elem: '#date_year',
385
+ range: true
386
+ });
387
+ laydate.render({
388
+ type: 'year',
389
+ elem: '#goal_date_year',
390
+ range: true
391
+ });
392
+ laydate.render({
393
+ type: 'month',
394
+ elem: '#goal_date_month',
395
+ range: true
396
+ });
397
+
398
+
208
399
  form.on('select(year)', function(data){
209
400
  console.log(data, )
210
401
  year = data.value
211
402
  window.location.href = "/missions/sale_trends/trends?year=" + data.value
212
403
  })
213
-
404
+ form.on('select(follow_count)', function(data){
405
+ console.log(data, )
406
+ const value = data.value;
407
+ if(value == "month"){
408
+ $(".year").addClass('layui-hide')
409
+ $(".day").addClass('layui-hide')
410
+ $(".week").addClass('layui-hide')
411
+ $(".month").removeClass('layui-hide')
412
+ }else if(value == "year"){
413
+ $(".month").addClass('layui-hide')
414
+ $(".day").addClass('layui-hide')
415
+ $(".week").addClass('layui-hide')
416
+ $(".year").removeClass('layui-hide')
417
+ }else if(value == "week"){
418
+ $(".month").addClass('layui-hide')
419
+ $(".day").addClass('layui-hide')
420
+ $(".week").removeClass('layui-hide')
421
+ $(".year").addClass('layui-hide')
422
+ }else {
423
+ $(".month").addClass('layui-hide')
424
+ $(".year").addClass('layui-hide')
425
+ $(".day").removeClass('layui-hide')
426
+ $(".week").addClass('layui-hide')
427
+
428
+ }
429
+ })
430
+
431
+ form.on('select(goal_count)', function(data){
432
+ console.log(data, )
433
+ const value = data.value;
434
+ if(value == "month"){
435
+ $(".goal_year").addClass('layui-hide')
436
+ $(".goal_month").removeClass('layui-hide')
437
+ }else {
438
+ $(".goal_month").addClass('layui-hide')
439
+ $(".goal_year").removeClass('layui-hide')
440
+ }
441
+ })
442
+
214
443
  editForm("chance_money");
215
444
  editForm("ballot_money");
216
445
  editForm("sign_money");
217
446
  editForm("returned_money");
218
447
 
219
-
448
+ element.on('tab(test1)', function(){
449
+ window.location.href = "#销售额分析"
450
+ });
451
+
452
+ var ctx = document.getElementById('myChart');
453
+ var myChart = new Chart(ctx, {
454
+ type: 'line',
455
+ data: <%=raw @follow_count_data.to_json %>,
456
+ options: {
457
+ elements: {
458
+ line: {
459
+ tension: 0
460
+ }
461
+ }
462
+ }
463
+ });
464
+
465
+
466
+ var opt = {
467
+ events: false,
468
+ tooltips: {
469
+ enabled: false
470
+ },
471
+ hover: {
472
+ animationDuration: 0
473
+ },
474
+ animation: {
475
+ duration: 1,
476
+ onComplete: function () {
477
+ var chartInstance = this.chart,
478
+ ctx = chartInstance.ctx;
479
+ ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
480
+ ctx.textAlign = 'center';
481
+ ctx.textBaseline = 'bottom';
482
+
483
+ this.data.datasets.forEach(function (dataset, i) {
484
+ var meta = chartInstance.controller.getDatasetMeta(i);
485
+ meta.data.forEach(function (bar, index) {
486
+ var data = dataset.data[index];
487
+ ctx.fillText(data, bar._model.x, bar._model.y - 5);
488
+ });
489
+ });
490
+ }
491
+ }
492
+ };
493
+
220
494
 
495
+ var ctx = document.getElementById('myChart2');
496
+ var myChart2 = new Chart(ctx, {
497
+ type: 'bar',
498
+ data: <%=raw @goal_count_data.to_json %>,
499
+ options: opt
500
+ });
221
501
  })
222
502
  </script>
@@ -0,0 +1,14 @@
1
+ my_array = [1,2,3,4,5]
2
+ json.data do
3
+ json.labels my_array
4
+ json.datasets do
5
+ json.array! [1,2] do |d|
6
+ json.label '人名'
7
+ json.backgroundColor "#fff"
8
+ json.borderColor "#36A2EB"
9
+ json.pointBackgroundColor "#36A2EB"
10
+ json.pointBorderColor "#fff"
11
+ json.data my_array
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,7 @@
1
1
  <div class="section">
2
2
  <h4><span>销售人员列表</span></h4>
3
3
  <hr>
4
- <table class="layui-hide" id="table"></table>
4
+ <table class="layui-hide" id="table" lay-filter="table" ></table>
5
5
  </div>
6
6
  <script type="text/html" id="toolbarDemo">
7
7
  <div class="layui-btn-container">
@@ -18,6 +18,26 @@
18
18
  <a href="/missions/businesses?clazz_id={{d.b_clazz_id}}&staff_id={{d.id}}">{{d.business_b}}</a>
19
19
  </div>
20
20
  </script>
21
+ <script type="text/html" id="business_c">
22
+ <div class="layui-text">
23
+ <a href="/missions/businesses?clazz_id={{d.c_clazz_id}}&staff_id={{d.id}}">{{d.business_c}}</a>
24
+ </div>
25
+ </script>
26
+ <script type="text/html" id="business_d">
27
+ <div class="layui-text">
28
+ <a href="/missions/businesses?clazz_id={{d.d_clazz_id}}&staff_id={{d.id}}">{{d.business_d}}</a>
29
+ </div>
30
+ </script>
31
+ <script type="text/html" id="business_e">
32
+ <div class="layui-text">
33
+ <a href="/missions/businesses?clazz_id={{d.e_clazz_id}}&staff_id={{d.id}}">{{d.business_e}}</a>
34
+ </div>
35
+ </script>
36
+ <script type="text/html" id="business_o">
37
+ <div class="layui-text">
38
+ <a href="/missions/businesses?clazz_id={{d.o_clazz_id}}&staff_id={{d.id}}">{{d.business_o}}</a>
39
+ </div>
40
+ </script>
21
41
  <script>
22
42
  layui.use('table', function () {
23
43
  var table = layui.table;
@@ -45,22 +65,53 @@
45
65
  title: 'A类商机',
46
66
  templet: "#business_a",
47
67
  totalRow:true,
48
- width: 120
49
- }, {
68
+ sort:true,
69
+ width: 100
70
+ },
71
+ {
50
72
  field: 'business_b',
51
73
  title: 'B类商机',
52
74
  templet: "#business_b",
53
- totalRow:true,
54
- width: 120
55
- }, {
75
+ totalRow:true,sort:true,
76
+ width: 100
77
+ },
78
+ {
79
+ field: 'business_c',
80
+ title: 'C类商机',
81
+ templet: "#business_c",
82
+ totalRow:true,sort:true,
83
+ width: 100
84
+ },
85
+ {
86
+ field: 'business_d',
87
+ title: 'D类商机',
88
+ templet: "#business_d",
89
+ totalRow:true,sort:true,
90
+ width: 100
91
+ },
92
+ {
93
+ field: 'business_e',
94
+ title: 'E类商机',
95
+ templet: "#business_e",
96
+ totalRow:true,sort:true,
97
+ width: 100
98
+ },
99
+ {
100
+ field: 'business_o',
101
+ title: 'O类商机',
102
+ templet: "#business_o",
103
+ totalRow:true,sort:true,
104
+ width: 100
105
+ },
106
+ {
56
107
  field: 'goal',
57
108
  title: '中标金额',
58
- totalRow:true,
109
+ totalRow:true,sort:true,
59
110
  width: 120
60
111
  }, {
61
112
  field: 'return_money',
62
- title: '回款',
63
- totalRow:true,
113
+ title: '回款金额',
114
+ totalRow:true,sort:true,
64
115
  width: 120
65
116
  }
66
117
  ]
@@ -69,5 +120,20 @@
69
120
  limits: [10,15,20,30,40,50,60,70,80,90],
70
121
  page: true
71
122
  });
123
+
124
+ // var sort = {}, search = {};
125
+ // table.on('sort(table)', function (obj) {
126
+ // sort.field = obj.field;
127
+ // sort.order = obj.type;
128
+ // table.reload('table', {
129
+ // initSort: obj,
130
+ // where: {
131
+ // sort: sort,
132
+ // q: search
133
+ // }
134
+ // });
135
+ // })
136
+
137
+
72
138
  });
73
139
  </script>
@@ -1,5 +1,10 @@
1
1
  businesses_a_count = 0
2
2
  businesses_b_count = 0
3
+ businesses_c_count = 0
4
+ businesses_d_count = 0
5
+ businesses_e_count = 0
6
+ businesses_o_count = 0
7
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
3
8
  json.data do
4
9
  json.array! @staffs do |d|
5
10
  part_a_ids = EducodeSales::Business.where("educode_sales_businesses.last_follow_up_id is null AND staff_id = ?",d.id).ids
@@ -11,23 +16,52 @@ json.data do
11
16
  json.id d.id
12
17
  json.name d.user.real_name
13
18
  json.role d.role&.name
14
- json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
19
+ # json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
20
+ if d.areas.present?
21
+ if d.areas.ids.sort.to_s == area_ids
22
+ json.area '全国'
23
+ else
24
+ json.area d.areas.pluck(:name).join("、")
25
+ end
26
+ else
27
+ json.area ''
28
+ end
15
29
  business_a = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @a_clazz&.id).count
16
30
  businesses_a_count += business_a
17
31
  json.business_a business_a
18
32
  business_b = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @b_clazz&.id).count
19
33
  businesses_b_count += business_b
20
34
  json.business_b business_b
35
+ business_c = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @c_clazz&.id).count
36
+ businesses_c_count += business_c
37
+ json.business_c business_c
38
+ business_d = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @d_clazz&.id).count
39
+ businesses_d_count += business_d
40
+ json.business_d business_b
41
+ business_e = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @e_clazz&.id).count
42
+ businesses_e_count += business_e
43
+ json.business_e business_b
44
+ business_o = @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id = ?", @o_clazz&.id).count
45
+ businesses_o_count += business_o
46
+ json.business_o business_o
21
47
  json.goal @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id != ? AND educode_sales_follow_ups.stage_id in (?)", @x, @step_ids).sum(:total_amount).round(2)
22
48
  json.return_money @businesses.joins("JOIN educode_sales_follow_ups on educode_sales_follow_ups.id = educode_sales_businesses.last_follow_up_id").where("educode_sales_follow_ups.clazz_id != ?", @x).sum("educode_sales_businesses.return_money").round(2)
23
49
  json.a_clazz_id @a_clazz&.id
24
50
  json.b_clazz_id @b_clazz&.id
51
+ json.c_clazz_id @c_clazz&.id
52
+ json.d_clazz_id @d_clazz&.id
53
+ json.e_clazz_id @e_clazz&.id
54
+ json.o_clazz_id @o_clazz&.id
25
55
  end
26
56
  end
27
57
 
28
58
  json.totalRow do
29
59
  json.business_a businesses_a_count.to_s
30
60
  json.business_b businesses_b_count.to_s
61
+ json.business_c businesses_c_count.to_s
62
+ json.business_d businesses_d_count.to_s
63
+ json.business_e businesses_e_count.to_s
64
+ json.business_o businesses_o_count.to_s
31
65
  end
32
66
  json.code 0
33
67
  json.count @staffs.total_count
@@ -1,12 +1,22 @@
1
1
  departments_count = 0
2
2
  schools_count = 0
3
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
3
4
  json.data do
4
5
  json.array! @staffs do |d|
5
6
  json.id d.id
6
7
  json.name d.user.real_name
7
8
  json.role d.role&.name
8
9
  json.job_type EducodeSales::Common.job_type_name[d.job_type]
9
- json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
10
+ # json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
11
+ if d.areas.present?
12
+ if d.areas.ids.sort.to_s == area_ids
13
+ json.area '全国'
14
+ else
15
+ json.area d.areas.pluck(:name).join("、")
16
+ end
17
+ else
18
+ json.area ''
19
+ end
10
20
  departments = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.staff_id = #{d.id}").select("COUNT(educode_sales_follow_ups.staff_id) AS count")[0]&.send('count') + EducodeSales::Teacher.joins(:follow_up).where("educode_sales_teacher_follows.staff_id = #{d.id}").select("COUNT(educode_sales_teacher_follows.staff_id) AS count")[0]&.send('count') || 0
11
21
  json.departments departments
12
22
  schools = EducodeSales::Business.joins(:last_follow_up, :department).where("educode_sales_follow_ups.staff_id = #{d.id}").select("COUNT(distinct(departments.school_id)) AS count")[0]['count'] + EducodeSales::Teacher.joins(:follow_up, :department).where("educode_sales_teacher_follows.staff_id = #{d.id}").select("COUNT(distinct(departments.school_id)) AS count")[0]['count']
@@ -137,4 +137,9 @@
137
137
  });
138
138
 
139
139
  });
140
- </script>
140
+ </script>
141
+ <style>
142
+ .layui-table-tool-temp{
143
+ padding-right: 0px; !important;
144
+ }
145
+ </style>
@@ -1,15 +1,25 @@
1
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
1
2
  json.data do
2
3
  json.array! @staffs do |d|
3
4
  json.id d.id
4
5
  json.name d.user.real_name
5
6
  json.role d.role&.name
6
- json.area d.areas.present? ? d.areas.pluck(:name).join("、") : ''
7
7
  json.job_type EducodeSales::Common.job_type_name[d.job_type]
8
8
  json.month d.month
9
9
  json.enabled_at d.enabled_at ? d.enabled_at.to_s(:date) : ''
10
10
  json.expired_at d.enabled_at ? "#{d.enabled_at.to_s(:date)}-#{d.expired_at.to_s(:date)}" : ''
11
+ if d.areas.present?
12
+ if d.areas.ids.sort.to_s == area_ids
13
+ json.area '全国'
14
+ else
15
+ json.area d.areas.pluck(:name).join("、")
16
+ end
17
+ else
18
+ json.area ''
19
+ end
11
20
  end
12
21
  end
13
22
 
23
+
14
24
  json.code 0
15
25
  json.count @staffs.total_count
@@ -144,7 +144,7 @@
144
144
  $(document).on('click','#new_teacher1',function(){
145
145
  var content = miniPage.getHrefContent('/missions/teachers/new');
146
146
  var openWH = miniPage.getOpenWidthHeight();
147
- sindex = layer.open({
147
+ teacher_uni_index = layer.open({
148
148
  id:"a",
149
149
  title: '添加老师',
150
150
  type: 1,
@@ -588,4 +588,9 @@
588
588
  });
589
589
 
590
590
  });
591
- </script>
591
+ </script>
592
+ <style>
593
+ .layui-table-tool-temp{
594
+ padding-right: 30px; !important;
595
+ }
596
+ </style>
@@ -156,6 +156,7 @@
156
156
  table.reload('teachers_table');
157
157
  layer.close(parent.index)
158
158
  layer.close(parent.sindex)
159
+ layer.close(parent.teacher_uni_index)
159
160
  }
160
161
  })
161
162
  return false;
@@ -4,7 +4,7 @@ json.data do
4
4
  json.name d.filename
5
5
  json.size d.filesize < 1000000 ? (d.filesize.to_f / 1000).round(2).to_s + 'KB' : (d.filesize.to_f / 1000000).round(2).to_s + 'MB'
6
6
  json.created_on d.created_on.to_s
7
- json.upload_person EducodeSales::Staff.find(d.author_id).user.real_name
7
+ json.upload_person d.author.real_name
8
8
  json.disk_filename d.disk_filename
9
9
  json.content_type d.content_type
10
10
  end
data/config/routes.rb CHANGED
@@ -203,6 +203,9 @@ EducodeSales::Engine.routes.draw do
203
203
  end
204
204
 
205
205
  resources :roles do
206
+ collection do
207
+ get :rename
208
+ end
206
209
  member do
207
210
  put :view
208
211
  put :update_role
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.5.1'
2
+ VERSION = '0.5.5'
3
3
  end