educode_sales 0.7.8 → 0.8.2
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 +4 -4
- data/app/controllers/educode_sales/application_controller.rb +14 -0
- data/app/controllers/educode_sales/assessments_controller.rb +126 -259
- data/app/controllers/educode_sales/businesses_controller.rb +66 -2
- data/app/controllers/educode_sales/customers_controller.rb +0 -3
- data/app/helpers/educode_sales/application_helper.rb +2 -2
- data/app/models/educode_sales/business.rb +8 -0
- data/app/models/educode_sales/business_relation_ship.rb +6 -0
- data/app/models/educode_sales/customer_follow.rb +1 -0
- data/app/models/educode_sales/filter.rb +15 -0
- data/app/models/educode_sales/follow_up.rb +2 -0
- data/app/models/educode_sales/role_area.rb +1 -1
- data/app/views/educode_sales/assessments/_setup.html.erb +92 -22
- data/app/views/educode_sales/assessments/edit.html.erb +3 -2
- data/app/views/educode_sales/assessments/index.html.erb +1 -2
- data/app/views/educode_sales/assessments/index.json.jbuilder +1 -1
- data/app/views/educode_sales/assessments/new.html.erb +2 -1
- data/app/views/educode_sales/assessments/progress.json.jbuilder +2 -198
- data/app/views/educode_sales/businesses/following_businesses.jbuilder +44 -0
- data/app/views/educode_sales/businesses/index.html.erb +189 -33
- data/app/views/educode_sales/businesses/index.json.jbuilder +1 -0
- data/app/views/educode_sales/businesses/show_follow.html.erb +1 -3
- data/app/views/educode_sales/money_plans/index.json.jbuilder +1 -1
- data/app/views/layouts/educode_sales/application.html.erb +1 -1
- data/config/routes.rb +4 -0
- data/db/migrate/20220420071909_create_educode_sales_business_relation_ships.rb +10 -0
- data/db/migrate/20220507020149_create_filter.rb +10 -0
- data/db/migrate/20220507091959_change_educode_sales_filter_column_length.rb +5 -0
- data/db/migrate/20220509073936_update_educode_sales_filters_filter_data.rb +9 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +9 -2
@@ -2,6 +2,7 @@ require_dependency "educode_sales/application_controller"
|
|
2
2
|
|
3
3
|
module EducodeSales
|
4
4
|
class BusinessesController < ApplicationController
|
5
|
+
skip_before_action :verify_authenticity_token,only: [:following]
|
5
6
|
|
6
7
|
|
7
8
|
def index
|
@@ -20,13 +21,16 @@ module EducodeSales
|
|
20
21
|
end
|
21
22
|
|
22
23
|
gon.type = params[:clazz_id].present? ? [{ value: params[:clazz_id], name: Common.find(params[:clazz_id]).name }] : []
|
23
|
-
gon.business_step = Common.where(clazz: 'business_step').map do |d|
|
24
|
+
gon.business_step = Common.where(clazz: 'business_step').order("position").map do |d|
|
24
25
|
{value: d.id, name: d.name}
|
25
26
|
end
|
27
|
+
|
26
28
|
if can?(:create, EducodeSales::SalePlan)
|
27
29
|
gon.menus << { title: '添加周计划', event: 'week' }
|
28
30
|
gon.menus << { title: '添加月计划', event: 'month' }
|
29
31
|
end
|
32
|
+
|
33
|
+
gon.menus << { title: '关注', event: 'following' }
|
30
34
|
gon.menus << { title: '跟进时间线', event: 'time_line' }
|
31
35
|
if can?(:show_file, EducodeSales::Business)
|
32
36
|
gon.menus << { title: '附件管理', event: 'file' }
|
@@ -42,6 +46,12 @@ module EducodeSales
|
|
42
46
|
gon.export_menus << { title: '导出到Excel文件', event: 'export_excel' }
|
43
47
|
end
|
44
48
|
gon.export_menus << { title: '导出记录', event: 'export_records' }
|
49
|
+
filter = Filter.find_or_create_by(staff_id: @current_admin.id, clazz: "businesses_list")
|
50
|
+
if filter.extras.present?
|
51
|
+
gon.filter = filter.extras
|
52
|
+
else
|
53
|
+
gon.filter = {}
|
54
|
+
end
|
45
55
|
end
|
46
56
|
format.json do
|
47
57
|
if @current_admin.is_admin?
|
@@ -222,11 +232,13 @@ module EducodeSales
|
|
222
232
|
last_follow.created_at as latest_time,
|
223
233
|
last_follow.actual_amount,
|
224
234
|
(last_follow.actual_amount - educode_sales_businesses.return_money) as wait_return_money,
|
225
|
-
last_follow.total_amount
|
235
|
+
last_follow.total_amount
|
236
|
+
").joins("
|
226
237
|
LEFT JOIN educode_sales_follow_ups AS last_follow ON educode_sales_businesses.last_follow_up_id = last_follow.id
|
227
238
|
").page(params[:page]).per(params[:limit])
|
228
239
|
|
229
240
|
end
|
241
|
+
|
230
242
|
end
|
231
243
|
end
|
232
244
|
|
@@ -581,6 +593,54 @@ module EducodeSales
|
|
581
593
|
end
|
582
594
|
end
|
583
595
|
end
|
596
|
+
#关注接口
|
597
|
+
def following
|
598
|
+
if brs=follow_business(@current_admin.user_id,params[:business_id])
|
599
|
+
if brs.delete
|
600
|
+
render json: {code:200,msg:"已取消关注"}
|
601
|
+
else
|
602
|
+
render json: {code:300,msg:"操作失败"}
|
603
|
+
end
|
604
|
+
else
|
605
|
+
brs=BusinessRelationShip.new(user_id:@current_admin.user_id, business_id:params[:business_id])
|
606
|
+
if brs.save
|
607
|
+
render json: {code:200,msg:"关注成功"}
|
608
|
+
else
|
609
|
+
render json: {code:300,msg:"操作失败"}
|
610
|
+
end
|
611
|
+
end
|
612
|
+
end
|
613
|
+
|
614
|
+
#我已关注的商机
|
615
|
+
def following_businesses
|
616
|
+
p=[]
|
617
|
+
BusinessRelationShip.select(:business_id).where(user_id:@current_admin.user_id).to_a.each { |d| p << d.business_id}
|
618
|
+
@businesses=Business.where(id:p)
|
619
|
+
@businesses=@businesses.select("
|
620
|
+
educode_sales_businesses.*,
|
621
|
+
last_follow.invitation_at,
|
622
|
+
last_follow.reception_at,
|
623
|
+
last_follow.service_time_long,
|
624
|
+
last_follow.service_end_time,
|
625
|
+
last_follow.service_start_time,
|
626
|
+
last_follow.bidded_date,
|
627
|
+
last_follow.signed_date,
|
628
|
+
last_follow.created_at as latest_time,
|
629
|
+
last_follow.actual_amount,
|
630
|
+
(last_follow.actual_amount - educode_sales_businesses.return_money) as wait_return_money,
|
631
|
+
last_follow.total_amount").joins("
|
632
|
+
LEFT JOIN educode_sales_follow_ups AS last_follow ON educode_sales_businesses.last_follow_up_id = last_follow.id
|
633
|
+
").page(params[:page]).per(params[:limit])
|
634
|
+
end
|
635
|
+
|
636
|
+
def followed
|
637
|
+
if brs=follow_business(@current_admin.user_id,params[:business_id])
|
638
|
+
render json: {msg:'确定取消关注?'}
|
639
|
+
else
|
640
|
+
render json: {msg:'确定关注?'}
|
641
|
+
end
|
642
|
+
end
|
643
|
+
|
584
644
|
|
585
645
|
private
|
586
646
|
|
@@ -595,5 +655,9 @@ module EducodeSales
|
|
595
655
|
def edu_setting name
|
596
656
|
EduSetting.get(name)
|
597
657
|
end
|
658
|
+
|
659
|
+
def follow_business(user_id,business_id)
|
660
|
+
BusinessRelationShip.where(user_id:user_id,business_id:business_id).first
|
661
|
+
end
|
598
662
|
end
|
599
663
|
end
|
@@ -68,9 +68,6 @@ module EducodeSales
|
|
68
68
|
@customers = @customers.where("schools.province = ?", "#{params[:q][:area]}")
|
69
69
|
end
|
70
70
|
if params[:q].present? && params[:q][:staff_id].present?
|
71
|
-
p "--------------------------------------------------------------------------------------"
|
72
|
-
p params[:q][:staff_id]
|
73
|
-
p "--------------------------------------------------------------------------------------"
|
74
71
|
school_ids = EducodeSales::CustomerExtension.where(customer_staff_id: params[:q][:staff_id]).pluck(:school_id)
|
75
72
|
@customers = @customers.where(id: school_ids)
|
76
73
|
end
|
@@ -83,7 +83,7 @@ module EducodeSales
|
|
83
83
|
#新增商机数 得分规则
|
84
84
|
def add_businesses_score(staff_id,start_time,end_time)
|
85
85
|
if @current_admin.is_admin?
|
86
|
-
@businesses = Business
|
86
|
+
@businesses = Business.all
|
87
87
|
else
|
88
88
|
level = @current_admin.role.role_areas.find_by(clazz: '商机管理').level
|
89
89
|
case level
|
@@ -96,7 +96,7 @@ module EducodeSales
|
|
96
96
|
business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
|
97
97
|
@businesses = Business.joins("JOIN departments ON educode_sales_businesses.department_id = departments.id").where("departments.school_id in (?) OR educode_sales_businesses.staff_id = #{@current_admin.id} OR educode_sales_businesses.id in (?)", school_ids, business_ids)
|
98
98
|
else
|
99
|
-
@businesses = Business
|
99
|
+
@businesses = Business.all
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -8,6 +8,10 @@ module EducodeSales
|
|
8
8
|
has_many :sale_plans
|
9
9
|
has_many :follow_ups
|
10
10
|
|
11
|
+
#关联关注
|
12
|
+
has_many :users,:class_name => 'EducodeSales::BusinessRelationShip',foreign_key: 'business_id',:dependent => :destroy
|
13
|
+
|
14
|
+
|
11
15
|
#每次查询时 默认的查询条件
|
12
16
|
default_scope -> {where(deleted_at: nil)}
|
13
17
|
|
@@ -20,5 +24,9 @@ module EducodeSales
|
|
20
24
|
EducodeSales::Recycle.create(source: self, deleter_id: user_id)
|
21
25
|
end
|
22
26
|
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
23
31
|
end
|
24
32
|
end
|
@@ -93,96 +93,115 @@
|
|
93
93
|
title: '序号',
|
94
94
|
width: 100,
|
95
95
|
sort: true,
|
96
|
-
fixed: 'left'
|
96
|
+
fixed: 'left',
|
97
97
|
},
|
98
98
|
{
|
99
99
|
field: 'username',
|
100
100
|
title: '考核人员',
|
101
101
|
width: 100,
|
102
|
-
fixed: 'left'
|
102
|
+
fixed: 'left',
|
103
|
+
hide: gon.filter["username"],
|
103
104
|
},
|
104
105
|
{
|
105
106
|
field: 'annual',
|
106
107
|
title: '全年',
|
107
108
|
width: 100,
|
109
|
+
hide: gon.filter["annual"],
|
108
110
|
},
|
109
111
|
{
|
110
112
|
field: 'first_quarter',
|
111
113
|
title: '第1季度',
|
112
114
|
width: 100,
|
115
|
+
hide: gon.filter["first_quarter"],
|
113
116
|
},
|
114
117
|
{
|
115
118
|
field: 'january',
|
116
119
|
title: '1月',
|
120
|
+
width: 70,
|
121
|
+
hide: gon.filter.january,
|
117
122
|
},
|
118
123
|
{
|
119
124
|
field: 'february',
|
120
125
|
title: '2月',
|
121
126
|
width: 70,
|
127
|
+
hide: gon.filter.february,
|
122
128
|
},
|
123
129
|
{
|
124
130
|
field: 'march',
|
125
131
|
title: '3月',
|
126
132
|
width: 70,
|
133
|
+
hide: gon.filter.march,
|
127
134
|
},
|
128
135
|
{
|
129
136
|
field: 'second_quarter',
|
130
137
|
title: '第2季度',
|
131
138
|
width: 100,
|
139
|
+
hide: gon.filter.second_quarter,
|
132
140
|
},
|
133
141
|
{
|
134
142
|
field: 'april',
|
135
143
|
title: '4月',
|
144
|
+
hide: gon.filter.april,
|
136
145
|
},
|
137
146
|
{
|
138
147
|
field: 'may',
|
139
148
|
title: '5月',
|
140
149
|
width: 70,
|
150
|
+
hide: gon.filter.may,
|
141
151
|
},
|
142
152
|
{
|
143
153
|
field: 'june',
|
144
154
|
title: '6月',
|
145
155
|
width: 70,
|
156
|
+
hide: gon.filter.june,
|
146
157
|
},
|
147
158
|
{
|
148
159
|
field: 'third_quarter',
|
149
160
|
title: '第3季度',
|
150
161
|
width: 100,
|
162
|
+
hide: gon.filter.third_quarter,
|
151
163
|
},
|
152
164
|
{
|
153
165
|
field: 'july',
|
154
166
|
title: '7月',
|
155
167
|
width: 70,
|
168
|
+
hide: gon.filter.july,
|
156
169
|
},
|
157
170
|
{
|
158
171
|
field: 'august',
|
159
172
|
title: '8月',
|
160
173
|
width: 70,
|
174
|
+
hide: gon.filter.august,
|
161
175
|
},
|
162
176
|
{
|
163
177
|
field: 'september',
|
164
178
|
title: '9月',
|
165
179
|
width: 70,
|
180
|
+
hide: gon.filter.september,
|
166
181
|
},
|
167
182
|
{
|
168
183
|
field: 'fourth_quarter',
|
169
184
|
title: '第4季度',
|
170
185
|
width: 100,
|
186
|
+
hide: gon.filter.fourth_quarter,
|
171
187
|
},
|
172
188
|
{
|
173
189
|
field: 'october',
|
174
190
|
title: '10月',
|
175
191
|
width: 70,
|
192
|
+
hide: gon.filter.october,
|
176
193
|
},
|
177
194
|
{
|
178
195
|
field: 'november',
|
179
196
|
title: '11月',
|
180
197
|
width: 70,
|
198
|
+
hide: gon.filter.november,
|
181
199
|
},
|
182
200
|
{
|
183
201
|
field: 'december',
|
184
202
|
title: '12月',
|
185
203
|
width: 70,
|
204
|
+
hide: gon.filter.december,
|
186
205
|
},
|
187
206
|
{
|
188
207
|
field: 'option',
|
@@ -237,7 +256,9 @@
|
|
237
256
|
})
|
238
257
|
|
239
258
|
|
259
|
+
|
240
260
|
table.on('tool(assessments)', function (obj) {
|
261
|
+
|
241
262
|
var data = obj.data;
|
242
263
|
console.log(obj)
|
243
264
|
console.log(data)
|
@@ -275,8 +296,55 @@
|
|
275
296
|
});
|
276
297
|
|
277
298
|
// * toolbar事件监听
|
278
|
-
|
279
|
-
|
299
|
+
table.on('toolbar(assessments)', function (obj) {
|
300
|
+
// switch (obj.event) {
|
301
|
+
// case 'LAYTABLE_COLS':
|
302
|
+
// layui.form.on('checkbox(LAY_TABLE_TOOL_COLS)', function(obj) {
|
303
|
+
// var value = obj.elem.checked
|
304
|
+
// var name = obj.elem.attributes[1].value
|
305
|
+
// $.ajax({
|
306
|
+
// url: "filter",
|
307
|
+
// type: "GET",
|
308
|
+
// data: "type=assessments_setup&name=" + name + "&hidden=" + value,
|
309
|
+
// success: function (data){
|
310
|
+
// let hide_type = "[data-field='"+name+"']"
|
311
|
+
// if (data.hidden === '1'){
|
312
|
+
// $(hide_type).addClass('layui-hide');
|
313
|
+
// }else{
|
314
|
+
// $(hide_type).removeClass('layui-hide');
|
315
|
+
// }
|
316
|
+
// },
|
317
|
+
// dataType: 'Json'
|
318
|
+
// })
|
319
|
+
// });
|
320
|
+
// break;
|
321
|
+
//
|
322
|
+
// }
|
323
|
+
|
324
|
+
if (obj.event === 'LAYTABLE_COLS'){
|
325
|
+
layui.form.on('checkbox(LAY_TABLE_TOOL_COLS)', function(obj) {
|
326
|
+
var value = obj.elem.checked
|
327
|
+
var name = obj.elem.attributes[1].value
|
328
|
+
$.ajax({
|
329
|
+
url: "filter",
|
330
|
+
type: "GET",
|
331
|
+
data: "type=assessments_setup&name=" + name + "&check=" + value,
|
332
|
+
success: function (data){
|
333
|
+
let hide_type = "[data-field='"+name+"']"
|
334
|
+
if (data.hidden === 1){
|
335
|
+
$(hide_type).addClass('layui-hide');
|
336
|
+
}else if (data.hidden === 0){
|
337
|
+
$(hide_type).removeClass('layui-hide');
|
338
|
+
}
|
339
|
+
},
|
340
|
+
error: function (data){
|
341
|
+
layer.msg("操作失败")
|
342
|
+
},
|
343
|
+
dataType: 'Json'
|
344
|
+
})
|
345
|
+
});
|
346
|
+
}else if( obj.event === 'add'){
|
347
|
+
// 监听添加操作
|
280
348
|
var content = miniPage.getHrefContent('/missions/assessments/new');
|
281
349
|
var openWH = miniPage.getOpenWidthHeight();
|
282
350
|
var index = layer.open({
|
@@ -289,28 +357,30 @@
|
|
289
357
|
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
290
358
|
content: content,
|
291
359
|
success: function (layero, index) {
|
292
|
-
|
360
|
+
// 重新加载select下拉框(绩效考核标准)
|
293
361
|
form.render('select')
|
294
|
-
|
295
|
-
staffs.setValue([
|
362
|
+
// clear上次弹层中的多选人员数据 // staffs不清楚为什么要写在单独的script下才有效
|
363
|
+
staffs.setValue([])
|
296
364
|
|
297
365
|
}
|
298
366
|
});
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
367
|
+
// 这样写无法实现 要写在success中记住(open弹出层) 294
|
368
|
+
// document.getElementById('clear_staffs').onclick = function() {
|
369
|
+
// console.log("delete")
|
370
|
+
// staffs.setValue([ {name:'', value:''} ])
|
371
|
+
// // console.log(staffs)
|
372
|
+
// // alert(staffs.setValue([ {name:'', value:''} ]))
|
373
|
+
// // staffs.setValue([ ])
|
374
|
+
// // alert(staffs.setValue([ ]))
|
375
|
+
// clear(staffs)
|
376
|
+
// console.log("ok")
|
377
|
+
// };
|
378
|
+
|
379
|
+
// 目前不清除有什么用
|
380
|
+
// $(window).on("resize", function () {
|
381
|
+
// layer.full(index);
|
382
|
+
// });
|
383
|
+
}
|
314
384
|
});
|
315
385
|
|
316
386
|
|
@@ -127,7 +127,7 @@
|
|
127
127
|
<div class="layui-input-inline">
|
128
128
|
<label class="layui-form-label ">12月(万)</label>
|
129
129
|
<div class="layui-input-block" style="width: 200px;">
|
130
|
-
<input type="text" name="december" value="<%= @assessment.december %>" autocomplete="off" class="layui-input" lay-verify="number
|
130
|
+
<input type="text" name="december" value="<%= @assessment.december %>" autocomplete="off" class="layui-input" lay-verify="data|number" id="month12" onkeyup="sum()">
|
131
131
|
</div>
|
132
132
|
</div>
|
133
133
|
</div>
|
@@ -179,7 +179,8 @@
|
|
179
179
|
layer.alert(res.msg)
|
180
180
|
} else {
|
181
181
|
layer.closeAll();
|
182
|
-
table.reload("assessments")
|
182
|
+
table.reload("assessments");
|
183
|
+
table.reload("progressTable");
|
183
184
|
}
|
184
185
|
})
|
185
186
|
return false;
|
@@ -183,7 +183,7 @@
|
|
183
183
|
// 单独写在这里配合upen(才实现打开open时清空select中数据)
|
184
184
|
// staffs(select多选)
|
185
185
|
// 因为new是弹出层 所以可以获取index页面的gon.demo数据
|
186
|
-
var test = gon.
|
186
|
+
var test = gon.staff_ids;
|
187
187
|
var staffs = xmSelect.render({
|
188
188
|
el: '#staffs',
|
189
189
|
data: test,
|
@@ -244,6 +244,7 @@
|
|
244
244
|
layer.closeAll();
|
245
245
|
layer.alert("添加成功");
|
246
246
|
table.reload("assessments");
|
247
|
+
table.reload("progressTable");
|
247
248
|
}
|
248
249
|
});
|
249
250
|
return false;
|