educode_sales 0.5.9 → 0.6.3

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/businesses_controller.rb +7 -4
  3. data/app/controllers/educode_sales/customers_controller.rb +45 -34
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +1 -1
  5. data/app/controllers/educode_sales/places_controller.rb +5 -1
  6. data/app/controllers/educode_sales/sale_trends_controller.rb +16 -1
  7. data/app/controllers/educode_sales/staffs_controller.rb +2 -2
  8. data/app/controllers/educode_sales/teachers_controller.rb +13 -2
  9. data/app/models/educode_sales/permission.rb +1 -1
  10. data/app/views/educode_sales/businesses/_follows.html.erb +4 -1
  11. data/app/views/educode_sales/businesses/edit.html.erb +3 -0
  12. data/app/views/educode_sales/businesses/index.html.erb +22 -16
  13. data/app/views/educode_sales/businesses/index.json.jbuilder +1 -0
  14. data/app/views/educode_sales/businesses/show_follow.html.erb +1 -1
  15. data/app/views/educode_sales/businesses/time_line.html.erb +1 -1
  16. data/app/views/educode_sales/customers/edit.html.erb +54 -21
  17. data/app/views/educode_sales/customers/edit_department.html.erb +4 -2
  18. data/app/views/educode_sales/customers/edit_follow_record.html.erb +7 -7
  19. data/app/views/educode_sales/customers/index.html.erb +26 -19
  20. data/app/views/educode_sales/customers/index.json.jbuilder +3 -4
  21. data/app/views/educode_sales/customers/new.html.erb +30 -24
  22. data/app/views/educode_sales/customers/new_department.html.erb +5 -2
  23. data/app/views/educode_sales/customers/new_follow_record.html.erb +9 -9
  24. data/app/views/educode_sales/customers/show_follow.html.erb +8 -5
  25. data/app/views/educode_sales/customers/show_follow.json.jbuilder +1 -1
  26. data/app/views/educode_sales/customers/show_follow_record.html.erb +5 -4
  27. data/app/views/educode_sales/follow_ups/index.json.jbuilder +1 -0
  28. data/app/views/educode_sales/places/index.html.erb +64 -0
  29. data/app/views/educode_sales/roles/edit.html.erb +1 -1
  30. data/app/views/educode_sales/sale_trends/trends.html.erb +20 -0
  31. data/app/views/educode_sales/sales/index.html.erb +34 -16
  32. data/app/views/educode_sales/sales/index.json.jbuilder +27 -2
  33. data/app/views/educode_sales/teachers/index.html.erb +4 -11
  34. data/app/views/educode_sales/teachers/index.json.jbuilder +1 -1
  35. data/db/migrate/20211220102720_add_position_to_commons.rb +12 -0
  36. data/db/migrate/20211221075146_add_school_id_to_educode_sales_businesses.rb +8 -0
  37. data/lib/educode_sales/version.rb +1 -1
  38. metadata +4 -2
@@ -16,20 +16,20 @@
16
16
  <div class="layui-inline">
17
17
  <label class="layui-form-label">负责人</label>
18
18
  <div class="layui-input-inline">
19
- <%= select_tag "staff_id", options_for_select(@staffs), { include_blank: true } %>
20
- </div>
21
- </div>
22
- <div class="layui-inline">
23
- <label class="layui-form-label">最后跟进</label>
24
- <div class="layui-input-inline">
25
- <input type="text" class="layui-input" id="date" name="date" placeholder=" - ">
19
+ <%= select_tag "staff_id", options_for_select(@staffs,params[:staff_id]), { include_blank: true } %>
26
20
  </div>
27
21
  </div>
22
+ <!-- <div class="layui-inline">-->
23
+ <!-- <label class="layui-form-label">最后跟进</label>-->
24
+ <!-- <div class="layui-input-inline">-->
25
+ <!-- <input type="text" class="layui-input" id="date" name="date" placeholder=" - ">-->
26
+ <!-- </div>-->
27
+ <!-- </div>-->
28
28
 
29
29
  <div class="layui-inline">
30
30
  <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
31
31
  </button>
32
- <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="search_teachers">搜 索
32
+ <button type="submit" class="layui-btn layui-btn-primary" id="search_bt" lay-submit lay-filter="search_teachers">搜 索
33
33
  </button>
34
34
  </div>
35
35
  </div>
@@ -40,7 +40,7 @@
40
40
  <div class="layui-btn-container">
41
41
  <span class="table-label">客户列表</span>
42
42
  <% if can? :create, EducodeSales::Customer %>
43
- <!-- <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add">添加客户</button>-->
43
+ <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add">添加客户</button>
44
44
  <% end %>
45
45
  <% if can? :give, EducodeSales::Customer %>
46
46
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="give">分配/移交</button>
@@ -59,14 +59,14 @@
59
59
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add_follow">添加跟进记录</a>
60
60
  <% end %>
61
61
  <% if can? :update, EducodeSales::Customer %>
62
- <!--<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>-->
62
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
63
63
  <% end %>
64
64
  </script>
65
65
  <script type="text/html" id="business">
66
66
  <a href="/missions/businesses?school={{d.name}}" class="layui-table-link">{{ d.business }}</a>
67
67
  </script>
68
68
  <script type="text/html" id="name">
69
- <a href="javascript:void(0);" lay-event="name" class="layui-table-link">{{ d.name }}</a>
69
+ <a href="<%= base_url%>/colleges/{{d.id}}/statistics" class="layui-table-link" target="_blank">{{ d.name }}</a>
70
70
  </script>
71
71
  <script type="text/html" id="department">
72
72
  <a href="javascript:void(0);" lay-event="department" class="layui-table-link">{{ d.department }}</a>
@@ -87,6 +87,13 @@
87
87
 
88
88
  var laydate = layui.laydate;
89
89
 
90
+ // function hn(){
91
+ // $("#search_bt").trigger("click");
92
+ // }
93
+ // $(document).ready(function(){
94
+ // window.onload=hn;
95
+ // });
96
+
90
97
  laydate.render({
91
98
  elem: '#date',
92
99
  range: true
@@ -99,22 +106,21 @@
99
106
  table.render({
100
107
  elem: '#customers_table',
101
108
  url: '/missions/customers',
102
- // where: {q: form.val('search_form')},
109
+ where: {q: form.val('search_teachers')},
103
110
  toolbar: '#toolbarDemo',
104
111
  // totalRow:true,
105
112
  defaultToolbar: ['filter'],
106
113
  cols: [
107
114
  [
108
- {type:'checkbox'},
115
+ {type: 'checkbox'},
109
116
  {
110
117
  field: 'id',
111
118
  width: 60,
112
- title:'序号',type: 'numbers',
119
+ title: '序号', type: 'numbers',
113
120
 
114
121
  },
115
122
  {
116
123
  field: 'name',
117
- width: 160,
118
124
  title: '客户名称',
119
125
  templet: "#name"
120
126
  },
@@ -143,7 +149,7 @@
143
149
  },
144
150
  {
145
151
  field: 'last_follow_time',
146
- width: 160,
152
+ width: 170,
147
153
  title: '最后跟进时间',
148
154
  },
149
155
  {
@@ -153,7 +159,7 @@
153
159
  },
154
160
  {
155
161
  title: '操作',
156
- minWidth: 170,
162
+ width: 300,
157
163
  toolbar: '#currentTableBar',
158
164
  align: "center",
159
165
  fixed: 'right'
@@ -251,11 +257,12 @@
251
257
  name: "",
252
258
  professional_title: "",
253
259
  regist_at: "",
260
+ staff_id: "",
254
261
  status: "",
255
262
  school: "",
256
263
  assist: "",
257
264
  teacher_source: ""
258
- })
265
+ });
259
266
  return false;
260
267
  });
261
268
  /**
@@ -330,7 +337,7 @@
330
337
  var data = obj.data;
331
338
  id = data.id
332
339
  if (obj.event === 'edit') { // 监听添加操作
333
- var content = miniPage.getHrefContent('/missions/customers' + data.id + '/edit');
340
+ var content = miniPage.getHrefContent('/missions/customers/' + data.id + '/edit');
334
341
  var openWH = miniPage.getOpenWidthHeight();
335
342
  sale_plan_index = layer.open({
336
343
  title: '编辑客户',
@@ -1,11 +1,10 @@
1
1
  json.data do
2
2
  json.array! @customers do |d|
3
- department_ids = d.departments.ids
4
- business_ids = EducodeSales::Business.where(department_id: department_ids).ids
3
+ business_ids = EducodeSales::Business.where(school_id: d.id).ids
5
4
  follow_ups = EducodeSales::FollowUp.where(business_id: business_ids)
6
5
  customer_follows = EducodeSales::CustomerFollow.where(school_id: d.id)
7
- a_last_follow_time = follow_ups.last&.created_at&.to_s(:date)
8
- b_last_follow_time = customer_follows.last&.created_at&.to_s(:date)
6
+ a_last_follow_time = follow_ups.last&.created_at&.to_s
7
+ b_last_follow_time = customer_follows.last&.created_at&.to_s
9
8
  if a_last_follow_time.present? && b_last_follow_time.present?
10
9
  json.last_follow_time a_last_follow_time < b_last_follow_time ? b_last_follow_time : a_last_follow_time
11
10
  else
@@ -1,17 +1,32 @@
1
- <form class="layui-form " action="">
1
+ <form class="layui-form layuimini-form" action="">
2
2
  <div class="layui-form-item" style="padding: 25px">
3
3
  <div class="layui-inline">
4
- <label class="layui-form-label required">学校:</label>
5
- <div class="layui-input-block">
6
- <input type="text" name="name" required lay-verify="required" placeholder="请输入学校" autocomplete="off"
4
+ <label class="layui-form-label required">客户:</label>
5
+ <div class="layui-input-block" style="width: 500px;">
6
+ <input type="text" name="name" lay-verify="required" placeholder="请输入客户" autocomplete="off"
7
7
  class="layui-input" id="inputFocus">
8
8
  </div>
9
9
  </div>
10
10
  <br>
11
11
  <div class="layui-inline">
12
- <label class="layui-form-label required">地址:</label>
12
+ <label class="layui-form-label required">省:</label>
13
+ <div class="layui-input-block">
14
+ <%= select_tag "province", options_for_select(EducodeSales::Common.where(clazz: 'area').pluck(:name)), { include_blank: true } %>
15
+ </div>
16
+ </div>
17
+ <br>
18
+ <div class="layui-inline">
19
+ <label class="layui-form-label ">市:</label>
13
20
  <div class="layui-input-block">
14
- <input type="text" name="address" required lay-verify="required" autocomplete="off"
21
+ <input type="text" name="city" style="width: 223px;" autocomplete="off"
22
+ class="layui-input" placeholder="请输入市" >
23
+ </div>
24
+ </div>
25
+ <br>
26
+ <div class="layui-inline">
27
+ <label class="layui-form-label ">地址:</label>
28
+ <div class="layui-input-block" style="width: 500px;">
29
+ <input type="text" name="address" autocomplete="off"
15
30
  class="layui-input" placeholder="请输入地址" >
16
31
  </div>
17
32
  </div>
@@ -35,7 +50,7 @@
35
50
  <input type="checkbox" name="enterprise" lay-skin="primary" value="1" title="企业">
36
51
  </div>
37
52
  </div>
38
- <div class="layui-inline" style="padding-left: 30px">
53
+ <div class="layui-inline" style="padding-left: 120px">
39
54
  <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="data-reset-btn">提交
40
55
  </button>
41
56
  </div>
@@ -66,23 +81,14 @@
66
81
  //监听提交
67
82
  form.on('submit(data-reset-btn)', function (data) {
68
83
  console.log(data.field);
69
- // var area_ids = []
70
- // layui.each(transfer.getData('area_list'), function (i, v) {
71
- // area_ids.push(v.value)
72
- // })
73
- // if (area_ids.length === 0) {
74
- // layer.alert("请选择负责区域");
75
- // return false;
76
- // }
77
- // data.field['area_ids'] = area_ids;
78
- // request.authPost("missions/places", data.field, function (res) {
79
- // if (res.success === false) {
80
- // layer.alert(res.msg)
81
- // } else {
82
- // layer.closeAll(); //关闭所有层
83
- // table.reload('place')
84
- // }
85
- // })
84
+ request.authPost("missions/customers", data.field, function (res) {
85
+ if (res.success === false) {
86
+ layer.alert(res.msg)
87
+ } else {
88
+ layer.closeAll(); //关闭所有层
89
+ parent.table.reload('customers_table')
90
+ }
91
+ })
86
92
  return false;
87
93
  });
88
94
  });
@@ -1,14 +1,16 @@
1
1
  <div class="layuimini-main">
2
2
  <form class="layui-form layuimini-form" action="">
3
+ <div class="layui-form-item" style="padding: 25px">
3
4
  <div class="layui-form-item" style="padding: 25px">
4
5
  <div class="layui-inline">
5
6
  <label class="layui-form-label required">部门名称</label>
6
- <div class="layui-input-block">
7
+ <div class="layui-input-block" style="width: 300px;">
7
8
  <input type="text" name="department_name" required lay-verify="required" autocomplete="off" placeholder="请输入"
8
9
  class="layui-input" id="inputFocus">
9
10
  </div>
10
11
  </div>
11
- <div class="layui-inline" style="padding-left: 30px">
12
+ </div>
13
+ <div class="layui-form-item" style="padding-left: 130px">
12
14
  <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="data-reset-btn">提交
13
15
  </button>
14
16
  </div>
@@ -45,6 +47,7 @@
45
47
  } else {
46
48
  layer.close(parent.new_department_index); //关闭所有层
47
49
  table.reload('sale_plan_follow_table')
50
+ parent.table.reload('customers_table')
48
51
  }
49
52
  })
50
53
  return false;
@@ -1,18 +1,18 @@
1
1
  <h1 class="text-center" style="padding: 25px"><%=@school.name %></h1>
2
- <form class="layui-form " action="">
3
- <div class="layui-form-item layui-form-text">
4
- <label class="layui-form-label">跟进内容</label>
2
+ <form class="layui-form layuimini-form " action="">
3
+ <div class="layui-form-item layui-form-text" style="padding-right: 30px">
4
+ <label class="layui-form-label required" >跟进内容</label>
5
5
  <div class="layui-input-block">
6
- <textarea name="content" placeholder="请输入跟进内容" class="layui-textarea"></textarea>
6
+ <textarea name="content" placeholder="请输入跟进内容" lay-verify="required" style="height: 200px" class="layui-textarea"></textarea>
7
7
  </div>
8
8
  </div>
9
- <div class="layui-inline">
10
- <label class="layui-form-label required">跟进部门</label>
11
- <div class="layui-input-inline">
12
- <%= select_tag "department_id",options_for_select(@school.departments.pluck(:name, :id)), {"lay-verify": "required", include_blank: true}%>
9
+ <div class="layui-form-item ">
10
+ <label class="layui-form-label ">跟进部门</label>
11
+ <div class="layui-input-inline" style="width: 300px">
12
+ <%= select_tag "department_id",options_for_select(@school.departments.pluck(:name, :id)), { include_blank: true}%>
13
13
  </div>
14
14
  </div>
15
- <div class="layui-inline" style="padding-left: 50px">
15
+ <div class="layui-form-item " style="padding-left: 110px">
16
16
  <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="add_follow_up">提交
17
17
  </button>
18
18
  </div>
@@ -54,7 +54,7 @@
54
54
  },
55
55
  {
56
56
  title: '操作',
57
- minWidth: 190,
57
+ width: 190,
58
58
  toolbar: '#currentTableBar_follow',
59
59
  align: "center",
60
60
  fixed: 'right'
@@ -251,8 +251,9 @@
251
251
  },
252
252
  {
253
253
  field: 'created_at',
254
- width: 300,
255
- title: '时间'
254
+ width: 180,
255
+ title: '时间',
256
+ sort: true
256
257
  },
257
258
  {
258
259
  field: 'staff',
@@ -266,11 +267,12 @@
266
267
  },
267
268
  {
268
269
  field: 'content',
269
- width: 100,
270
- title: '跟进内容'
270
+ title: '跟进内容',
271
+ templet:'<div><span title="{{d.content}}">{{d.content}}</span></div>'
271
272
  },
272
273
  {
273
274
  title: '操作',
275
+ width: 300,
274
276
  toolbar: '#currentTableBar1234',
275
277
  align: "center"
276
278
  }
@@ -365,6 +367,7 @@
365
367
  layer.confirm('确定删除ID为' + data.id + "的记录", function (index) {
366
368
  request.authDelete("missions/customer_follows/" + data.id, {}, function() {
367
369
  obj.del();
370
+ parent.table.reload('customers_table')
368
371
  layer.close(index);
369
372
  })
370
373
 
@@ -3,7 +3,7 @@ json.data do
3
3
  json.id d.id
4
4
  json.created_at d.created_at.to_s
5
5
  json.staff d.staff.user.real_name
6
- json.department Department.find(d.department_id)&.name
6
+ json.department d.department_id.present? ? Department.find(d.department_id)&.name : ''
7
7
  json.content d.content
8
8
  json.is_latest d.id == @latest.id
9
9
  end
@@ -1,16 +1,17 @@
1
1
  <h1 class="text-center" style="padding: 25px"><%=@school.name %></h1>
2
2
  <form class="layui-form form-value" action="">
3
3
  <div class="layui-form-item" style="padding: 25px">
4
- <div class="layui-inline">
4
+ <div class="layui-form-item layui-form-text">
5
5
  <label class="layui-form-label">跟进内容:</label>
6
- <div class="layui-input-inline">
7
- <span><%= @follow_up.content%></span>
6
+ <div class="layui-input-block" style="padding-right: 20px;">
7
+ <pre><%= @follow_up.content %></pre>
8
8
  </div>
9
9
  </div>
10
+ <br>
10
11
  <div class="layui-inline">
11
12
  <label class="layui-form-label">跟进部门:</label>
12
13
  <div class="layui-input-inline">
13
- <span><%= Department.find(@follow_up.department_id)&.name %></span>
14
+ <span><%= Department.find(@follow_up.department_id)&.name if @follow_up.department_id.present? %></span>
14
15
  </div>
15
16
  </div>
16
17
  </div>
@@ -7,6 +7,7 @@ json.data do
7
7
  json.description d.description
8
8
  json.advise d.advise
9
9
  json.school d.business.department.school.name
10
+ json.school_id d.business.department.school.id
10
11
  json.created_at d.created_at.to_s
11
12
  json.business d.business.name
12
13
  json.business_id d.business.id
@@ -1,3 +1,22 @@
1
+ <div style="margin: 10px 10px 10px 10px">
2
+ <form class="layui-form layui-form-pane" lay-filter="search_teachers">
3
+ <div class="layui-form-item">
4
+ <div class="layui-inline">
5
+ <label class="layui-form-label">渠道名称</label>
6
+ <div class="layui-input-inline">
7
+ <input type="text" name="name" autocomplete="off" class="layui-input">
8
+ </div>
9
+ </div>
10
+ <div class="layui-inline">
11
+ <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
12
+ </button>
13
+ <button type="submit" class="layui-btn layui-btn-primary" id="search_bt" lay-submit lay-filter="search_teachers">搜 索
14
+ </button>
15
+ </div>
16
+ </div>
17
+ </form>
18
+ </div>
19
+
1
20
  <script type="text/html" id="toolbarDemo">
2
21
  <div class="layui-btn-container">
3
22
  <span class="table-label">渠道列表</span>
@@ -35,6 +54,51 @@
35
54
  request = layui.request,
36
55
  miniPage = layui.miniPage;
37
56
 
57
+
58
+
59
+ var sort = {}, search = {};
60
+ table.on('sort(place)', function (obj) {
61
+ sort.field = obj.field;
62
+ sort.order = obj.type;
63
+ table.reload('place', {
64
+ initSort: obj,
65
+ where: {
66
+ sort: sort,
67
+ q: search
68
+ }
69
+ });
70
+ })
71
+
72
+ // 监听搜索操作
73
+ form.on('submit(search_teachers)', function (data) {
74
+ search = data.field
75
+ table.reload('place', {
76
+ page: {
77
+ curr: 1
78
+ },
79
+ where: {q: search, sort: sort}
80
+ }, 'data');
81
+ return false;
82
+ });
83
+
84
+ form.on('submit(reset_business_search)', function (data) {
85
+ var field = data.field;
86
+ form.val('search_teachers', {
87
+ area: "",
88
+ date: "",
89
+ attitude: "",
90
+ name: "",
91
+ professional_title: "",
92
+ regist_at: "",
93
+ staff_id: "",
94
+ status: "",
95
+ school: "",
96
+ assist: "",
97
+ teacher_source: ""
98
+ });
99
+ return false;
100
+ });
101
+
38
102
  table.render({
39
103
  elem: '#place',
40
104
  url: '/missions/places',
@@ -7,7 +7,7 @@
7
7
  <div class="layui-tab-item layui-show">
8
8
  <form class="layui-form line" action="">
9
9
  <% id = 0 %>
10
- <% EducodeSales::Permission.all.group_by{ |d| d.clazz}.each do |k, d| %>
10
+ <% EducodeSales::Permission.all.order(position: :asc).group_by{ |d| d.clazz}.each do |k, d| %>
11
11
  <div class="layui-form-item">
12
12
  <label class="layui-form-label"><%= k %></label>
13
13
  <div class="layui-input-block">
@@ -272,6 +272,19 @@
272
272
 
273
273
  </div>
274
274
  </div>
275
+ <br>
276
+ <br>
277
+ <div class="layui-tab layui-tab-card " id="销售额分析" lay-filter="test1">
278
+ <ul class="layui-tab-title">
279
+ <li class="layui-this">商机区域分布</li>
280
+ </ul>
281
+ <div class="layui-tab-content" style="padding-right: 50px">
282
+ <div class="layui-tab-item layui-show" style="padding-left: 20px">
283
+ <canvas id="myChart3" width="960" height="200"></canvas>
284
+ </div>
285
+
286
+ </div>
287
+ </div>
275
288
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.css">
276
289
  <script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.1/dist/Chart.min.js"></script>
277
290
  <script>
@@ -498,5 +511,12 @@
498
511
  data: <%=raw @goal_count_data.to_json %>,
499
512
  options: opt
500
513
  });
514
+
515
+ var ctx = document.getElementById('myChart3');
516
+ var myChart3 = new Chart(ctx, {
517
+ type: 'bar',
518
+ data: <%=raw @business_data.to_json %>,
519
+ options: opt
520
+ });
501
521
  })
502
522
  </script>
@@ -1,6 +1,6 @@
1
1
  <div class="section">
2
2
  <form class="layui-form select_year" action="">
3
- <span>销售人员列表</span>
3
+ <!-- <span>销售人员列表</span>-->
4
4
  <div class="layui-input-inline" style="float: right">
5
5
  <%= select_tag "years", options_for_select(@years,@year), {'lay-filter': 'year' } %>
6
6
  </div>
@@ -44,6 +44,16 @@
44
44
  <a href="/missions/businesses?clazz_id={{d.o_clazz_id}}&staff_id={{d.id}}">{{d.business_o}}</a>
45
45
  </div>
46
46
  </script>
47
+ <script type="text/html" id="school_count">
48
+ <div class="layui-text">
49
+ <a href="/missions/customers?staff_id={{d.id}}">{{d.school_count}}</a>
50
+ </div>
51
+ </script>
52
+ <script type="text/html" id="bussinessBar">
53
+ <span>销售人员列表</span>
54
+ <div class="layui-btn-container">
55
+ </div>
56
+ </script>
47
57
  <script>
48
58
  layui.use('table', function () {
49
59
  var form = layui.form,
@@ -58,7 +68,9 @@
58
68
  table.render({
59
69
  elem: '#table',
60
70
  url: '/missions/sales?year=<%= @year %>',
61
- cellMinWidth: 80,
71
+ defaultToolbar: ['filter'],
72
+ cellMinWidth: 80,
73
+ toolbar: '#bussinessBar',
62
74
  totalRow:true,
63
75
  cols: [
64
76
  [{
@@ -132,33 +144,39 @@
132
144
  {
133
145
  field: 'school_count',
134
146
  title: '负责学校数',
135
- totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
147
+ sort:true,
148
+ totalRow:true,
149
+ templet: "#school_count",
136
150
  width: 120
137
151
  },
138
152
  {
139
153
  field: 'follow_school_count',
140
154
  title: '跟进学校数',
155
+ sort:true,
141
156
  totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
142
157
  width: 120
143
158
  },
144
159
  {
145
160
  field: 'follow_school_counts',
146
161
  title: '跟进学校次数',
162
+ sort:true,
147
163
  totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
148
- width: 120
149
- },
150
- {
151
- field: 'follow_school_rate',
152
- title: '学校覆盖率',
153
- totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
154
- width: 120
155
- },
156
- {
157
- field: 'follow_department_rate',
158
- title: '学院覆盖率',
159
- totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
160
- width: 120
164
+ width: 130
161
165
  },
166
+ // {
167
+ // field: 'follow_school_rate',
168
+ // title: '学校覆盖率',
169
+ // sort:true,
170
+ // totalRow:true,
171
+ // width: 120
172
+ // },
173
+ // {
174
+ // field: 'follow_department_rate',
175
+ // title: '学院覆盖率',
176
+ // sort:true,
177
+ // totalRow:true,
178
+ // width: 120
179
+ // },
162
180
  ]
163
181
  ],
164
182
  limit: 20,
@@ -4,6 +4,9 @@ businesses_c_count = 0
4
4
  businesses_d_count = 0
5
5
  businesses_e_count = 0
6
6
  businesses_o_count = 0
7
+ school_counts = 0
8
+ follow_school_rates = 0
9
+ follow_department_rates = 0
7
10
  area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
8
11
  json.data do
9
12
  json.array! @staffs do |d|
@@ -33,9 +36,17 @@ json.data do
33
36
  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
34
37
  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
35
38
  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
39
+ school_count = EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
36
40
  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)
37
41
  json.return_money @businesses.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).sum(:amount).round(2)
38
- json.school_count EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
42
+ json.school_count school_count
43
+ follow_school_count = (EducodeSales::CustomerFollow.where(staff_id: d.id).pluck(:school_id) + EducodeSales::Business.where(id: EducodeSales::FollowUp.where(staff_id: d.id).pluck(:business_id).uniq).pluck(:school_id)).uniq.size
44
+ json.follow_school_count follow_school_count
45
+ json.follow_school_counts EducodeSales::CustomerFollow.where(staff_id: d.id).size + EducodeSales::FollowUp.where(staff_id: d.id).size
46
+ follow_school_rate = (follow_school_count!=0 ? school_count.to_f * 100 / follow_school_count : 0).round(2)
47
+ json.follow_school_rate follow_school_rate.to_s + '%'
48
+ follow_department_rate = (follow_school_count!=0 ? school_count.to_f * 110 / follow_school_count : 0).round(2)
49
+ json.follow_department_rate follow_department_rate.to_s + '%'
39
50
  else
40
51
  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).where("educode_sales_follow_ups.year = ?", @year).count
41
52
  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).where("educode_sales_follow_ups.year = ?", @year).count
@@ -43,9 +54,17 @@ json.data do
43
54
  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).where("educode_sales_follow_ups.year = ?", @year).count
44
55
  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).where("educode_sales_follow_ups.year = ?", @year).count
45
56
  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).where("educode_sales_follow_ups.year = ?", @year).count
57
+ school_count = EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
46
58
  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).where("educode_sales_follow_ups.bidded_date >= ? AND educode_sales_follow_ups.bidded_date <= ?", "#{@year}-01-01", "#{@year}-12-31").sum(:total_amount).round(2)
47
59
  json.return_money @businesses.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", @x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").sum(:amount).round(2)
48
- json.school_count EducodeSales::CustomerExtension.where(customer_staff_id: d.id).size
60
+ json.school_count school_count
61
+ follow_school_count = (EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").pluck(:school_id) + EducodeSales::Business.where(id: EducodeSales::FollowUp.where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").where(staff_id: d.id).pluck(:business_id).uniq).pluck(:school_id)).uniq.size
62
+ json.follow_school_count follow_school_count
63
+ json.follow_school_counts EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size + EducodeSales::FollowUp.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size
64
+ follow_school_rate = (follow_school_count!=0 ? school_count.to_f * 100 / follow_school_count : 0).round(2)
65
+ json.follow_school_rate follow_school_rate.to_s + '%'
66
+ follow_department_rate = (follow_school_count!=0 ? school_count.to_f * 110 / follow_school_count : 0).round(2)
67
+ json.follow_department_rate follow_department_rate.to_s + '%'
49
68
  end
50
69
 
51
70
  json.business_a business_a
@@ -67,6 +86,9 @@ json.data do
67
86
  businesses_d_count += business_d
68
87
  businesses_e_count += business_e
69
88
  businesses_o_count += business_o
89
+ school_counts += school_count
90
+ follow_school_rates += follow_school_rate
91
+ follow_department_rates += follow_department_rate
70
92
  end
71
93
  end
72
94
 
@@ -77,6 +99,9 @@ json.totalRow do
77
99
  json.business_d businesses_d_count.to_s
78
100
  json.business_e businesses_e_count.to_s
79
101
  json.business_o businesses_o_count.to_s
102
+ json.school_count school_counts.to_s
103
+ json.follow_school_rate (follow_school_rates.to_f / @staffs.size).round(2).to_s + '%'
104
+ json.follow_department_rate (follow_department_rates.to_f / @staffs.size).round(2).to_s + '%'
80
105
  end
81
106
  json.code 0
82
107
  json.count @staffs.total_count