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.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/businesses_controller.rb +5 -1
- data/app/controllers/educode_sales/follow_ups_controller.rb +2 -1
- data/app/controllers/educode_sales/operation_plans_controller.rb +22 -2
- data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
- data/app/controllers/educode_sales/plans_controller.rb +22 -2
- data/app/controllers/educode_sales/roles_controller.rb +5 -0
- data/app/controllers/educode_sales/sale_reports_controller.rb +33 -3
- data/app/controllers/educode_sales/sale_trends_controller.rb +196 -0
- data/app/controllers/educode_sales/sales_controller.rb +4 -0
- data/app/controllers/educode_sales/upload_files_controller.rb +33 -26
- data/app/models/educode_sales/common.rb +2 -1
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +3 -3
- data/app/views/educode_sales/businesses/file.html.erb +4 -5
- data/app/views/educode_sales/businesses/index.html.erb +14 -2
- data/app/views/educode_sales/businesses/index.json.jbuilder +1 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +2 -2
- data/app/views/educode_sales/businesses/show_follow_record.html.erb +1 -1
- data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
- data/app/views/educode_sales/operation_reports/audit.html.erb +5 -3
- data/app/views/educode_sales/operation_reports/show.html.erb +4 -7
- data/app/views/educode_sales/places/index.html.erb +20 -5
- data/app/views/educode_sales/places/index.json.jbuilder +18 -2
- data/app/views/educode_sales/plans/index.html.erb +6 -1
- data/app/views/educode_sales/roles/index.html.erb +19 -1
- data/app/views/educode_sales/roles/rename.html.erb +50 -0
- data/app/views/educode_sales/sale_reports/audit.html.erb +5 -3
- data/app/views/educode_sales/sale_reports/show.html.erb +3 -6
- data/app/views/educode_sales/sale_trends/trends.html.erb +284 -4
- data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
- data/app/views/educode_sales/sales/index.html.erb +75 -9
- data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
- data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
- data/app/views/educode_sales/staffs/index.html.erb +6 -1
- data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
- data/app/views/educode_sales/teachers/add_keys.html.erb +1 -1
- data/app/views/educode_sales/teachers/index.html.erb +6 -1
- data/app/views/educode_sales/teachers/new.html.erb +1 -0
- data/app/views/educode_sales/upload_files/index.json.jbuilder +1 -1
- data/config/routes.rb +3 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +4 -2
@@ -35,7 +35,7 @@
|
|
35
35
|
<div class="layui-inline">
|
36
36
|
<label class="layui-form-label">渠道名称</label>
|
37
37
|
<div class="layui-input-inline">
|
38
|
-
<%= select_tag "place_id", options_for_select(EducodeSales::Place.pluck(:name, :id)), { include_blank: true } %>
|
38
|
+
<%= select_tag "place_id", options_for_select(EducodeSales::Place.pluck(:name, :id),params[:place_id]), { include_blank: true } %>
|
39
39
|
</div>
|
40
40
|
</div>
|
41
41
|
<div class="layui-inline">
|
@@ -194,6 +194,13 @@
|
|
194
194
|
totalRow: true,
|
195
195
|
sort: true
|
196
196
|
},
|
197
|
+
{
|
198
|
+
field: 'actual_amount',
|
199
|
+
width: 100,
|
200
|
+
title: '合同额',
|
201
|
+
totalRow: true,
|
202
|
+
sort: true
|
203
|
+
},
|
197
204
|
{
|
198
205
|
field: 'return_money',
|
199
206
|
width: 100,
|
@@ -614,4 +621,9 @@
|
|
614
621
|
});
|
615
622
|
|
616
623
|
});
|
617
|
-
</script>
|
624
|
+
</script>
|
625
|
+
<style>
|
626
|
+
.layui-table-tool-temp{
|
627
|
+
padding-right: 30px; !important;
|
628
|
+
}
|
629
|
+
</style>
|
@@ -17,6 +17,7 @@ json.data do
|
|
17
17
|
json.bidded_date d.last_follow_up&.bidded_date.to_s
|
18
18
|
json.signed_date d.last_follow_up&.signed_date.to_s
|
19
19
|
json.total_amount d.last_follow_up&.total_amount
|
20
|
+
json.actual_amount d.last_follow_up&.actual_amount
|
20
21
|
json.return_money d.return_money
|
21
22
|
json.place d.last_follow_up&.place&.name
|
22
23
|
json.last_follow_person d.last_follow_up.present? ? d.last_follow_up.staff.user.real_name : EducodeSales::Staff.find(d.staff_id).user.real_name
|
@@ -90,14 +90,14 @@
|
|
90
90
|
</div>
|
91
91
|
</div>
|
92
92
|
<div class="layui-inline">
|
93
|
-
<label class="layui-form-label"
|
93
|
+
<label class="layui-form-label">渠道分成(万)</label>
|
94
94
|
<div class="layui-input-inline">
|
95
95
|
<input name="divide_amount" class="layui-input" value="<%= @last_follow_up&.divide_amount%>">
|
96
96
|
</div>
|
97
97
|
</div>
|
98
98
|
<div class="layui-form-item">
|
99
99
|
<label class="layui-form-label">指定跟进人</label>
|
100
|
-
<div class="layui-input-inline" style="z-index:
|
100
|
+
<div class="layui-input-inline" style="z-index: 100">
|
101
101
|
<div id="assign_follow" style="width: 512px;"></div>
|
102
102
|
</div>
|
103
103
|
<div class="layui-inline" style="padding: 9px 15px">
|
@@ -64,9 +64,11 @@
|
|
64
64
|
<%end %>
|
65
65
|
<br>
|
66
66
|
<div class="layui-inline m-t-10">
|
67
|
+
<% if (can? :level1_audit, EducodeSales::OperationReport) || (can? :level2_audit, EducodeSales::OperationReport) || (can? :level3_audit, EducodeSales::OperationReport) %>
|
67
68
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
|
68
69
|
style="margin-left: 18px">提交
|
69
70
|
</button>
|
71
|
+
<%end %>
|
70
72
|
</div>
|
71
73
|
</div>
|
72
74
|
</form>
|
@@ -91,7 +93,7 @@
|
|
91
93
|
rate.render({
|
92
94
|
elem: '#weekStar4',
|
93
95
|
half: true,
|
94
|
-
value: "<%= @sale_report.level1_score %>",
|
96
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
95
97
|
length: 5,
|
96
98
|
choose: function(value){
|
97
99
|
level1_score = value
|
@@ -100,7 +102,7 @@
|
|
100
102
|
rate.render({
|
101
103
|
elem: '#weekStar5',
|
102
104
|
half: true,
|
103
|
-
value: "<%= @sale_report.level2_score %>",
|
105
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%>"),
|
104
106
|
length: 5,
|
105
107
|
choose: function(value){
|
106
108
|
level2_score = value
|
@@ -109,7 +111,7 @@
|
|
109
111
|
rate.render({
|
110
112
|
elem: '#weekStar6',
|
111
113
|
half: true,
|
112
|
-
value: "<%= @sale_report.level3_score %>",
|
114
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
113
115
|
length: 5,
|
114
116
|
choose: function(value){
|
115
117
|
level3_score = value
|
@@ -84,28 +84,25 @@
|
|
84
84
|
$ = layui.jquery,
|
85
85
|
miniPage = layui.miniPage,
|
86
86
|
request = layui.request;
|
87
|
-
table = layui.table
|
87
|
+
table = layui.table
|
88
88
|
|
89
89
|
rate.render({
|
90
90
|
elem: '#weekStar4',
|
91
91
|
half: true,
|
92
92
|
readonly: true,
|
93
|
-
value: "<%= @sale_report.level1_score %>",
|
94
|
-
length: "<%= @sale_report.level1_score %>"
|
93
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
95
94
|
})
|
96
95
|
rate.render({
|
97
96
|
elem: '#weekStar5',
|
98
97
|
half: true,
|
99
98
|
readonly: true,
|
100
|
-
value: "<%= @sale_report.level2_score %>",
|
101
|
-
length: "<%= @sale_report.level2_score %>"
|
99
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%>"),
|
102
100
|
})
|
103
101
|
rate.render({
|
104
102
|
elem: '#weekStar6',
|
105
103
|
half: true,
|
106
104
|
readonly: true,
|
107
|
-
value: "<%= @sale_report.level3_score %>",
|
108
|
-
length: "<%= @sale_report.level3_score %>"
|
105
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
109
106
|
})
|
110
107
|
|
111
108
|
|
@@ -17,6 +17,11 @@
|
|
17
17
|
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
18
18
|
<% end %>
|
19
19
|
</script>
|
20
|
+
<script type="text/html" id="business_a">
|
21
|
+
<div class="layui-text">
|
22
|
+
<a href="/missions/businesses?place_id={{d.id}}">{{d.businesses_count}}</a>
|
23
|
+
</div>
|
24
|
+
</script>
|
20
25
|
|
21
26
|
<script type="text/html" id="showchance">
|
22
27
|
<a href="/missions/businesses" class="layui-table-link">{{ d.chance }}</a>
|
@@ -56,20 +61,25 @@
|
|
56
61
|
{
|
57
62
|
field: 'businesses_count',
|
58
63
|
width: 120,
|
59
|
-
totalRow:
|
60
|
-
|
64
|
+
totalRow: true,
|
65
|
+
sort: true,
|
66
|
+
title: '商机',
|
67
|
+
templet: "#business_a",
|
68
|
+
|
61
69
|
},
|
62
70
|
{
|
63
71
|
field: 'amount',
|
64
72
|
width: 120,
|
65
73
|
totalRow:true,
|
66
|
-
|
74
|
+
sort: true,
|
75
|
+
title: '中标金额'
|
67
76
|
},
|
68
77
|
{
|
69
78
|
field: 'return_mount',
|
70
79
|
width: 120,
|
71
80
|
totalRow:true,
|
72
|
-
|
81
|
+
sort: true,
|
82
|
+
title: '回款金额',
|
73
83
|
},
|
74
84
|
{
|
75
85
|
title: '操作',
|
@@ -146,4 +156,9 @@
|
|
146
156
|
});
|
147
157
|
|
148
158
|
});
|
149
|
-
</script>
|
159
|
+
</script>
|
160
|
+
<style>
|
161
|
+
.layui-table-tool-temp{
|
162
|
+
padding-right: 0px; !important;
|
163
|
+
}
|
164
|
+
</style>
|
@@ -1,13 +1,29 @@
|
|
1
|
+
all_businesses_count = 0
|
2
|
+
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
1
3
|
json.data do
|
2
4
|
json.array! @places do |d|
|
3
5
|
json.id d.id
|
4
6
|
json.name d.name
|
5
|
-
json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
6
|
-
|
7
|
+
# json.area_id d.areas.present? ? d.areas.pluck(:name).join("、") : ''
|
8
|
+
if d.areas.present?
|
9
|
+
if d.areas.ids.sort.to_s == area_ids
|
10
|
+
json.area_id '全国'
|
11
|
+
else
|
12
|
+
json.area_id d.areas.pluck(:name).join("、")
|
13
|
+
end
|
14
|
+
else
|
15
|
+
json.area_id ''
|
16
|
+
end
|
17
|
+
business_count = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").count
|
18
|
+
json.businesses_count business_count
|
19
|
+
all_businesses_count += business_count
|
7
20
|
json.amount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id} AND educode_sales_follow_ups.stage_id IN (?)", @stage_ids).sum(:profit_amount).round(2)
|
8
21
|
json.return_mount EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", @x).where("educode_sales_follow_ups.place_id = #{d.id}").sum(:return_money).round(2)
|
9
22
|
end
|
10
23
|
end
|
11
24
|
|
25
|
+
json.totalRow do
|
26
|
+
json.businesses_count all_businesses_count.to_s
|
27
|
+
end
|
12
28
|
json.code 0
|
13
29
|
json.count @places.total_count
|
@@ -8,6 +8,7 @@
|
|
8
8
|
</div>
|
9
9
|
</script>
|
10
10
|
<script type="text/html" id="role_bar">
|
11
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="rename">重命名</a>
|
11
12
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
12
13
|
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
|
13
14
|
</script>
|
@@ -35,7 +36,6 @@
|
|
35
36
|
field: 'name',
|
36
37
|
title: '角色',
|
37
38
|
width: 120,
|
38
|
-
edit: 'text'
|
39
39
|
}, {
|
40
40
|
field: 'permissions',
|
41
41
|
title: '模块浏览权限',
|
@@ -124,6 +124,24 @@
|
|
124
124
|
layer.full(index);
|
125
125
|
});
|
126
126
|
return false;
|
127
|
+
}else if (obj.event === 'rename') {
|
128
|
+
id = data.id
|
129
|
+
var content = miniPage.getHrefContent('/missions/roles/rename?id='+id);
|
130
|
+
var openWH = miniPage.getOpenWidthHeight();
|
131
|
+
rename_index = layer.open({
|
132
|
+
title: '重命名',
|
133
|
+
type: 1,
|
134
|
+
shade: 0.2,
|
135
|
+
maxmin: true,
|
136
|
+
shadeClose: true,
|
137
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
138
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
139
|
+
content: content,
|
140
|
+
});
|
141
|
+
$(window).on("resize", function () {
|
142
|
+
layer.full(index);
|
143
|
+
});
|
144
|
+
return false;
|
127
145
|
} else if (obj.event === 'delete') {
|
128
146
|
layer.confirm('确定删除' + data.name, function (index) {
|
129
147
|
request.delete('missions/roles/'+ data.id, {}, function(res) {
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<form class="layui-form " action="">
|
2
|
+
<div class="layui-form-item" style="padding: 25px">
|
3
|
+
<div class="layui-inline">
|
4
|
+
<label class="layui-form-label required">角色名称</label>
|
5
|
+
<div class="layui-input-block" style="line-height: 36px;">
|
6
|
+
<input type="text" name="name" id="name" required lay-verify="required" autocomplete="off"
|
7
|
+
class="layui-input" value="<%=@name %>">
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="layui-inline" style="padding-left: 30px">
|
11
|
+
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="submits">提交
|
12
|
+
</button>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
</form>
|
16
|
+
|
17
|
+
|
18
|
+
<script>
|
19
|
+
|
20
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'selectInput', 'transfer'], function () {
|
21
|
+
var form = layui.form,
|
22
|
+
layer = layui.layer,
|
23
|
+
table = layui.table,
|
24
|
+
transfer = layui.transfer,
|
25
|
+
laytpl = layui.laytpl,
|
26
|
+
request = layui.request,
|
27
|
+
$ = layui.$;
|
28
|
+
|
29
|
+
form.render();
|
30
|
+
|
31
|
+
// 当前弹出层,防止ID被覆盖
|
32
|
+
var parentIndex = layer.index;
|
33
|
+
|
34
|
+
//监听提交
|
35
|
+
form.on('submit(submits)', function (data) {
|
36
|
+
console.log(data);
|
37
|
+
request.authPut('missions/roles/' + parent.id + '/update_role/', data.field,
|
38
|
+
function(res) {
|
39
|
+
if (res.success) {
|
40
|
+
table.reload('role');
|
41
|
+
layer.close(parent.rename_index)
|
42
|
+
} else {
|
43
|
+
layer.alert(res.msg)
|
44
|
+
}
|
45
|
+
|
46
|
+
})
|
47
|
+
return false;
|
48
|
+
});
|
49
|
+
});
|
50
|
+
</script>
|
@@ -71,9 +71,11 @@
|
|
71
71
|
|
72
72
|
<br>
|
73
73
|
<div class="layui-inline m-t-10">
|
74
|
+
<% if (can? :level1_audit, EducodeSales::SaleReport) || (can? :level2_audit, EducodeSales::SaleReport) || (can? :level3_audit, EducodeSales::SaleReport) %>
|
74
75
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
|
75
76
|
style="margin-left: 18px">提交
|
76
77
|
</button>
|
78
|
+
<% end %>
|
77
79
|
</div>
|
78
80
|
</div>
|
79
81
|
</form>
|
@@ -98,7 +100,7 @@
|
|
98
100
|
rate.render({
|
99
101
|
elem: '#weekStar4',
|
100
102
|
half: true,
|
101
|
-
|
103
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
102
104
|
length: 5,
|
103
105
|
choose: function(value){
|
104
106
|
level1_score = value
|
@@ -107,7 +109,7 @@
|
|
107
109
|
rate.render({
|
108
110
|
elem: '#weekStar5',
|
109
111
|
half: true,
|
110
|
-
|
112
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%>"),
|
111
113
|
length: 5,
|
112
114
|
choose: function(value){
|
113
115
|
level2_score = value
|
@@ -116,7 +118,7 @@
|
|
116
118
|
rate.render({
|
117
119
|
elem: '#weekStar6',
|
118
120
|
half: true,
|
119
|
-
|
121
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
120
122
|
length: 5,
|
121
123
|
choose: function(value){
|
122
124
|
level3_score = value
|
@@ -84,22 +84,19 @@
|
|
84
84
|
elem: '#weekStar4',
|
85
85
|
half: true,
|
86
86
|
readonly: true,
|
87
|
-
|
88
|
-
length: "<%= @sale_report.level1_score %>"
|
87
|
+
value: parseFloat("<%= @sale_report.level1_score || 0%>"),
|
89
88
|
})
|
90
89
|
rate.render({
|
91
90
|
elem: '#weekStar5',
|
92
91
|
half: true,
|
93
92
|
readonly: true,
|
94
|
-
|
95
|
-
length: "<%= @sale_report.level2_score %>"
|
93
|
+
value: parseFloat("<%= @sale_report.level2_score || 0%> "),
|
96
94
|
})
|
97
95
|
rate.render({
|
98
96
|
elem: '#weekStar6',
|
99
97
|
half: true,
|
100
98
|
readonly: true,
|
101
|
-
|
102
|
-
length: "<%= @sale_report.level3_score %>"
|
99
|
+
value: parseFloat("<%= @sale_report.level3_score || 0%>"),
|
103
100
|
})
|
104
101
|
|
105
102
|
table.on('tool(showWeeklyTable)', function (obj) {
|