educode_sales 0.9.69 → 0.9.71
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 +16 -2
- data/app/controllers/educode_sales/customers_controller.rb +51 -14
- data/app/controllers/educode_sales/plans_controller.rb +69 -19
- data/app/controllers/educode_sales/projects_controller.rb +3 -0
- data/app/controllers/educode_sales/teachers_controller.rb +11 -1
- data/app/models/educode_sales/customer_follow.rb +1 -0
- data/app/models/educode_sales/eco_staff.rb +6 -0
- data/app/models/educode_sales/sale_plan.rb +2 -0
- data/app/views/educode_sales/businesses/index.html.erb +45 -12
- data/app/views/educode_sales/businesses/index.json.jbuilder +2 -1
- data/app/views/educode_sales/businesses/time_line.html.erb +2 -1
- data/app/views/educode_sales/customers/edit_major.html.erb +5 -1
- data/app/views/educode_sales/customers/list.html.erb +66 -23
- data/app/views/educode_sales/customers/list.json.jbuilder +22 -10
- data/app/views/educode_sales/customers/show_customer_follow.html.erb +175 -0
- data/app/views/educode_sales/customers/show_customer_follow.json.jbuilder +13 -0
- data/app/views/educode_sales/customers/show_majors.html.erb +146 -0
- data/app/views/educode_sales/plans/_yearPlan.html.erb +6 -3
- data/app/views/educode_sales/plans/business_infos.json.jbuilder +10 -4
- data/app/views/educode_sales/plans/edit_bussiness_info.html.erb +13 -8
- data/app/views/educode_sales/plans/edit_bussiness_info_extra.html.erb +16 -73
- data/app/views/educode_sales/plans/edit_year_plan.html.erb +64 -5
- data/app/views/educode_sales/plans/new_year.html.erb +51 -3
- data/app/views/educode_sales/plans/plan_business_infos.json.jbuilder +7 -0
- data/app/views/educode_sales/plans/years_plan.json.jbuilder +43 -3
- data/app/views/educode_sales/projects/detail.html.erb +10 -6
- data/app/views/educode_sales/projects/index.html.erb +38 -8
- data/app/views/educode_sales/teachers/_index.html.erb +26 -5
- data/app/views/educode_sales/teachers/edit.html.erb +10 -3
- data/app/views/educode_sales/teachers/index.json.jbuilder +8 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20230414031409_add_major_educode_sales_customer_follows.rb +12 -0
- data/db/migrate/20230414035655_create_educode_sales_eco_staffs.rb +11 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +12 -8
- data/app/assets/images/educode_sales/indexlogo.png +0 -0
- data/db/migrate/20230411134203_add_realname_to_teacher.rb +0 -5
@@ -1,5 +1,5 @@
|
|
1
1
|
<form class="layui-form ">
|
2
|
-
<div class="layui-form-item">
|
2
|
+
<div class="layui-form-item" style="padding: 25px">
|
3
3
|
<div class="layui-inline">
|
4
4
|
<label class="layui-form-label required" style="width: 180px;">计划投标时间</label>
|
5
5
|
<div class="layui-input-inline">
|
@@ -7,29 +7,23 @@
|
|
7
7
|
</div>
|
8
8
|
</div>
|
9
9
|
<div class="layui-inline">
|
10
|
-
<label class="layui-form-label required" style="width: 180px;"
|
10
|
+
<label class="layui-form-label required" style="width: 180px;">计划签单时间</label>
|
11
11
|
<div class="layui-input-inline">
|
12
|
-
<input type="text" class="layui-input" id="
|
12
|
+
<input type="text" class="layui-input" id="plan_sign_on" autocomplete="off" name="plan_sign_on">
|
13
13
|
</div>
|
14
14
|
</div>
|
15
15
|
<div class="layui-inline">
|
16
|
-
<label class="layui-form-label required" style="width: 180px;"
|
16
|
+
<label class="layui-form-label required" style="width: 180px;">计划验收时间</label>
|
17
17
|
<div class="layui-input-inline">
|
18
|
-
<input type="text" class="layui-input"
|
18
|
+
<input type="text" class="layui-input" id="plan_check_on" autocomplete="off" name="plan_check_on">
|
19
19
|
</div>
|
20
20
|
</div>
|
21
21
|
</div>
|
22
22
|
<div class="layui-form-item">
|
23
23
|
<div class="layui-inline">
|
24
|
-
<label class="layui-form-label required" style="width: 180px;"
|
24
|
+
<label class="layui-form-label required" style="width: 180px;">计划金额</label>
|
25
25
|
<div class="layui-input-inline">
|
26
|
-
<input type="text" class="layui-input"
|
27
|
-
</div>
|
28
|
-
</div>
|
29
|
-
<div class="layui-inline">
|
30
|
-
<label class="layui-form-label required" style="width: 180px;">实际签单时间</label>
|
31
|
-
<div class="layui-input-inline">
|
32
|
-
<input type="text" class="layui-input" id="actual_sign_on" autocomplete="off" name="actual_sign_on">
|
26
|
+
<input type="text" class="layui-input" autocomplete="off" name="bidded_amount" value="<%= @business_info.bidded_amount %>">
|
33
27
|
</div>
|
34
28
|
</div>
|
35
29
|
<div class="layui-inline">
|
@@ -38,54 +32,15 @@
|
|
38
32
|
<input type="text" class="layui-input" autocomplete="off" name="sign_amount" value="<%= @business_info.sign_amount %>">
|
39
33
|
</div>
|
40
34
|
</div>
|
35
|
+
|
41
36
|
</div>
|
42
|
-
<div class="layui-form-item">
|
43
|
-
<div class="layui-inline">
|
44
|
-
<label class="layui-form-label required" style="width: 180px;">计划部署时间</label>
|
45
|
-
<div class="layui-input-inline">
|
46
|
-
<input type="text" class="layui-input" id="plan_deploy_on" autocomplete="off" name="plan_deploy_on">
|
47
|
-
</div>
|
48
|
-
</div>
|
49
|
-
<div class="layui-inline">
|
50
|
-
<label class="layui-form-label required" style="width: 180px;">实际部署时间</label>
|
51
|
-
<div class="layui-input-inline">
|
52
|
-
<input type="text" class="layui-input" id="actual_deploy_on" autocomplete="off" name="actual_deploy_on">
|
53
|
-
</div>
|
54
|
-
</div>
|
55
|
-
<div class="layui-inline">
|
56
|
-
<label class="layui-form-label required" style="width: 180px;">计划验收时间</label>
|
57
|
-
<div class="layui-input-inline">
|
58
|
-
<input type="text" class="layui-input" id="plan_check_on" autocomplete="off" name="plan_check_on">
|
59
|
-
</div>
|
60
|
-
</div>
|
61
|
-
</div>
|
62
37
|
<div class="layui-form-item">
|
63
|
-
<div class="layui-inline">
|
64
|
-
<label class="layui-form-label required" style="width: 180px;">实际验收时间</label>
|
65
|
-
<div class="layui-input-inline">
|
66
|
-
<input type="text" class="layui-input" id="actual_check_on" autocomplete="off" name="actual_check_on">
|
67
|
-
</div>
|
68
|
-
</div>
|
69
38
|
<div class="layui-inline">
|
70
39
|
<label class="layui-form-label required" style="width: 180px;">预收款计划回款时间</label>
|
71
40
|
<div class="layui-input-inline">
|
72
41
|
<input type="text" class="layui-input" id="prepayment_plan_on" autocomplete="off" name="prepayment_plan_on">
|
73
42
|
</div>
|
74
43
|
</div>
|
75
|
-
<div class="layui-inline">
|
76
|
-
<label class="layui-form-label required" style="width: 180px;">预收款实际回款时间</label>
|
77
|
-
<div class="layui-input-inline">
|
78
|
-
<input type="text" class="layui-input" id="prepayment_actual_on" autocomplete="off" name="prepayment_actual_on">
|
79
|
-
</div>
|
80
|
-
</div>
|
81
|
-
</div>
|
82
|
-
<div class="layui-form-item">
|
83
|
-
<div class="layui-inline">
|
84
|
-
<label class="layui-form-label required" style="width: 180px;">预收款</label>
|
85
|
-
<div class="layui-input-inline">
|
86
|
-
<input type="text" class="layui-input" autocomplete="off" name="prepayment_amount" value="<%= @business_info.prepayment_amount %>">
|
87
|
-
</div>
|
88
|
-
</div>
|
89
44
|
<div class="layui-inline">
|
90
45
|
<label class="layui-form-label required" style="width: 180px;">验收款计划回款时间</label>
|
91
46
|
<div class="layui-input-inline">
|
@@ -93,45 +48,33 @@
|
|
93
48
|
</div>
|
94
49
|
</div>
|
95
50
|
<div class="layui-inline">
|
96
|
-
<label class="layui-form-label required" style="width: 180px;"
|
51
|
+
<label class="layui-form-label required" style="width: 180px;">质保金计划回款时间</label>
|
97
52
|
<div class="layui-input-inline">
|
98
|
-
<input type="text" class="layui-input" id="
|
53
|
+
<input type="text" class="layui-input" id="qa_plan_on" autocomplete="off" name="qa_plan_on">
|
99
54
|
</div>
|
100
55
|
</div>
|
101
56
|
</div>
|
102
57
|
<div class="layui-form-item">
|
103
58
|
<div class="layui-inline">
|
104
|
-
<label class="layui-form-label required" style="width: 180px;"
|
59
|
+
<label class="layui-form-label required" style="width: 180px;">计划预收款</label>
|
105
60
|
<div class="layui-input-inline">
|
106
|
-
<input type="text" class="layui-input" autocomplete="off" name="
|
61
|
+
<input type="text" class="layui-input" autocomplete="off" name="prepayment_amount" value="<%= @business_info.prepayment_amount %>">
|
107
62
|
</div>
|
108
63
|
</div>
|
109
64
|
<div class="layui-inline">
|
110
|
-
<label class="layui-form-label required" style="width: 180px;"
|
65
|
+
<label class="layui-form-label required" style="width: 180px;">计划验收款</label>
|
111
66
|
<div class="layui-input-inline">
|
112
|
-
<input type="text" class="layui-input"
|
67
|
+
<input type="text" class="layui-input" autocomplete="off" name="check_fee" value="<%= @business_info.check_fee %>">
|
113
68
|
</div>
|
114
69
|
</div>
|
115
70
|
<div class="layui-inline">
|
116
|
-
<label class="layui-form-label required" style="width: 180px;"
|
71
|
+
<label class="layui-form-label required" style="width: 180px;">计划质保金</label>
|
117
72
|
<div class="layui-input-inline">
|
118
|
-
<input type="text" class="layui-input"
|
73
|
+
<input type="text" class="layui-input" autocomplete="off" name="qa_amount" value="<%= @business_info.qa_amount %>">
|
119
74
|
</div>
|
120
75
|
</div>
|
121
76
|
</div>
|
122
77
|
<div class="layui-form-item">
|
123
|
-
<div class="layui-inline">
|
124
|
-
<label class="layui-form-label required" style="width: 180px;">质保金</label>
|
125
|
-
<div class="layui-input-inline">
|
126
|
-
<input type="text" class="layui-input" autocomplete="off" name="qa_amount" value="<%= @business_info.qa_amount %>">
|
127
|
-
</div>
|
128
|
-
</div>
|
129
|
-
<div class="layui-inline">
|
130
|
-
<label class="layui-form-label required" style="width: 180px;">应收款</label>
|
131
|
-
<div class="layui-input-inline">
|
132
|
-
<input type="text" class="layui-input" autocomplete="off" name="account_receivable" value="<%= @business_info.account_receivable %>">
|
133
|
-
</div>
|
134
|
-
</div>
|
135
78
|
<div class="layui-form-item m-t-20">
|
136
79
|
<div class="layui-input-block">
|
137
80
|
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="update_bussiness_info">提交</button>
|
@@ -1,4 +1,31 @@
|
|
1
1
|
|
2
|
+
<div class="layui-form layuimini-form">
|
3
|
+
<div class="layui-form-item" style="padding: 25px">
|
4
|
+
<div class="layui-inline">
|
5
|
+
<label class="layui-form-label">目标类型</label>
|
6
|
+
<div class="layui-input-inline">
|
7
|
+
<%= select_tag "clazz", options_for_select(@clazz), {include_blank: true} %>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="layui-inline">
|
11
|
+
<label class="layui-form-label">单位</label>
|
12
|
+
<div class="layui-input-inline" style="width: 400px">
|
13
|
+
<input type="text" class="layui-input" autocomplete="off" name="department">
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
<div class="layui-inline">
|
17
|
+
<label class="layui-form-label">年度</label>
|
18
|
+
<div class="layui-input-inline" style="width: 150px">
|
19
|
+
<input type="text" class="layui-input" id="year_search_plan_date" autocomplete="off" name="year_search">
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<div class="layui-inline">
|
23
|
+
<div class="layui-input-inline">
|
24
|
+
<button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="search">搜索</button>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</div>
|
2
29
|
<div>
|
3
30
|
<table class="layui-hide" id="yearTable" lay-filter="yearTable"></table>
|
4
31
|
</div>
|
@@ -26,9 +53,14 @@
|
|
26
53
|
})
|
27
54
|
})
|
28
55
|
|
56
|
+
laydate.render({
|
57
|
+
elem: '#year_search_plan_date',
|
58
|
+
type: 'year'
|
59
|
+
});
|
60
|
+
|
29
61
|
table.render({
|
30
62
|
elem: '#yearTable',
|
31
|
-
url: '/missions/plans/plan_business_infos?year=' + parent.year,
|
63
|
+
url: '/missions/plans/plan_business_infos?year=' + parent.year + "&q[clazz]=" + parent.clazz + "&staff_id=" + parent.staff_id,
|
32
64
|
height: 400,
|
33
65
|
defaultToolbar: ['filter'],
|
34
66
|
initSort: {
|
@@ -49,6 +81,21 @@
|
|
49
81
|
width: 160,
|
50
82
|
title: '商机名称',
|
51
83
|
},
|
84
|
+
{
|
85
|
+
field: 'year',
|
86
|
+
width: 100,
|
87
|
+
title: '年度',
|
88
|
+
},
|
89
|
+
{
|
90
|
+
field: 'business_clazz',
|
91
|
+
width: 160,
|
92
|
+
title: '商机类别',
|
93
|
+
},
|
94
|
+
{
|
95
|
+
field: 'property',
|
96
|
+
width: 200,
|
97
|
+
title: '客户类型',
|
98
|
+
},
|
52
99
|
{
|
53
100
|
field: 'school',
|
54
101
|
width: 150,
|
@@ -102,7 +149,7 @@
|
|
102
149
|
{
|
103
150
|
field: 'bidded_amount',
|
104
151
|
width: 170,
|
105
|
-
title: '
|
152
|
+
title: '计划金额',
|
106
153
|
},
|
107
154
|
{
|
108
155
|
field: 'plan_sign_on',
|
@@ -152,7 +199,7 @@
|
|
152
199
|
{
|
153
200
|
field: 'prepayment_amount',
|
154
201
|
width: 170,
|
155
|
-
title: '
|
202
|
+
title: '计划预收款',
|
156
203
|
},
|
157
204
|
{
|
158
205
|
field: 'check_fee_plan_on',
|
@@ -167,7 +214,7 @@
|
|
167
214
|
{
|
168
215
|
field: 'check_fee',
|
169
216
|
width: 170,
|
170
|
-
title: '
|
217
|
+
title: '计划验收款',
|
171
218
|
},
|
172
219
|
{
|
173
220
|
field: 'qa_plan_on',
|
@@ -182,7 +229,7 @@
|
|
182
229
|
{
|
183
230
|
field: 'qa_amount',
|
184
231
|
width: 170,
|
185
|
-
title: '
|
232
|
+
title: '计划质保金',
|
186
233
|
},
|
187
234
|
{
|
188
235
|
field: 'account_receivable',
|
@@ -203,6 +250,18 @@
|
|
203
250
|
page: true,
|
204
251
|
});
|
205
252
|
|
253
|
+
form.on('submit(search)', function (data) {
|
254
|
+
search = data.field
|
255
|
+
table.reload('yearTable', {
|
256
|
+
page: {
|
257
|
+
curr: 1
|
258
|
+
},
|
259
|
+
where: {q: search}
|
260
|
+
}, 'data');
|
261
|
+
|
262
|
+
return false;
|
263
|
+
});
|
264
|
+
|
206
265
|
table.on('tool(yearTable)', function (obj) {
|
207
266
|
var data = obj.data;
|
208
267
|
id = data.id;
|
@@ -9,7 +9,7 @@
|
|
9
9
|
<div class="layui-inline">
|
10
10
|
<label class="layui-form-label required">选择商机</label>
|
11
11
|
<div class="layui-input-inline" style="width: 400px">
|
12
|
-
|
12
|
+
<%= select_tag "business_id", options_for_select(@businesses, @business&.id), {"lay-verify": "required", include_blank: true, "lay-search": "" } %>
|
13
13
|
</div>
|
14
14
|
</div>
|
15
15
|
<div class="layui-inline">
|
@@ -37,13 +37,44 @@
|
|
37
37
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
38
38
|
<a class="layui-btn layui-btn-danger layui-btn-xs data-count-delete" lay-event="delete">删除</a>
|
39
39
|
</script>
|
40
|
+
|
41
|
+
<script type="text/html" id="plan_bid_on">
|
42
|
+
{{# if (['回款目标' ,'签单目标', '商机目标'].includes(d.clazz)) { }}
|
43
|
+
<div style="color: red;text-align: center;">--</div>
|
44
|
+
{{# } else { }}
|
45
|
+
{{ d.plan_bid_on }}</a>
|
46
|
+
{{# } }}
|
47
|
+
</script>
|
48
|
+
<script type="text/html" id="plan_sign_on">
|
49
|
+
{{# if (['回款目标' ,'中标目标', '商机目标'].includes(d.clazz)) { }}
|
50
|
+
<div style="color: red;text-align: center;">--</div>
|
51
|
+
{{# } else { }}
|
52
|
+
{{ d.plan_sign_on }}</a>
|
53
|
+
{{# } }}
|
54
|
+
</script>
|
55
|
+
<script type="text/html" id="prepayment_plan_on">
|
56
|
+
{{# if (['签单目标' ,'中标目标', '商机目标'].includes(d.clazz)) { }}
|
57
|
+
<div style="color: red;text-align: center;">--</div>
|
58
|
+
{{# } else { }}
|
59
|
+
{{ d.prepayment_plan_on }}</a>
|
60
|
+
{{# } }}
|
61
|
+
</script>
|
62
|
+
<script type="text/html" id="prepayment_amount">
|
63
|
+
{{# if (['签单目标' ,'中标目标', '商机目标'].includes(d.clazz)) { }}
|
64
|
+
<div style="color: red;text-align: center;">--</div>
|
65
|
+
{{# } else { }}
|
66
|
+
{{ d.prepayment_amount }}</a>
|
67
|
+
{{# } }}
|
68
|
+
</script>
|
69
|
+
|
40
70
|
<script>
|
41
|
-
layui.use(['form', 'table', 'laytpl', 'request', 'laydate'], function () {
|
71
|
+
layui.use(['form', 'table', 'laytpl', 'request', 'laydate', 'selectInput'], function () {
|
42
72
|
var form = layui.form,
|
43
73
|
layer = layui.layer,
|
44
74
|
table = layui.table,
|
45
75
|
request = layui.request,
|
46
76
|
laydate = layui.laydate,
|
77
|
+
selectInput = layui.selectInput,
|
47
78
|
$ = layui.$;
|
48
79
|
laydate.render({
|
49
80
|
elem: '#new_year_field',
|
@@ -51,6 +82,7 @@
|
|
51
82
|
});
|
52
83
|
form.render();
|
53
84
|
|
85
|
+
|
54
86
|
var parentIndex = layer.index;
|
55
87
|
|
56
88
|
form.on('submit(add_year_plan)', function (data) {
|
@@ -68,7 +100,9 @@
|
|
68
100
|
});
|
69
101
|
form.on('submit(add_y_plan)', function (data) {
|
70
102
|
request.authPost("missions/plans/create_sales_plan", {}, function (res) {
|
71
|
-
|
103
|
+
<% unless @business %>
|
104
|
+
table.reload('yearPlanTable');
|
105
|
+
<% end %>
|
72
106
|
layer.close(parent.yindex);
|
73
107
|
})
|
74
108
|
})
|
@@ -96,6 +130,16 @@
|
|
96
130
|
width: 160,
|
97
131
|
title: '商机名称',
|
98
132
|
},
|
133
|
+
{
|
134
|
+
field: 'business_clazz',
|
135
|
+
width: 160,
|
136
|
+
title: '商机类别',
|
137
|
+
},
|
138
|
+
{
|
139
|
+
field: 'property',
|
140
|
+
width: 200,
|
141
|
+
title: '客户类型',
|
142
|
+
},
|
99
143
|
{
|
100
144
|
field: 'school',
|
101
145
|
width: 150,
|
@@ -140,21 +184,25 @@
|
|
140
184
|
field: 'plan_bid_on',
|
141
185
|
width: 170,
|
142
186
|
title: '计划投标时间',
|
187
|
+
templet: "#plan_bid_on"
|
143
188
|
},
|
144
189
|
{
|
145
190
|
field: 'plan_sign_on',
|
146
191
|
width: 170,
|
147
192
|
title: '计划签单时间',
|
193
|
+
templet: "#plan_sign_on"
|
148
194
|
},
|
149
195
|
{
|
150
196
|
field: 'prepayment_plan_on',
|
151
197
|
width: 170,
|
152
198
|
title: '计划回款时间',
|
199
|
+
templet: "#prepayment_plan_on"
|
153
200
|
},
|
154
201
|
{
|
155
202
|
field: 'prepayment_amount',
|
156
203
|
width: 170,
|
157
204
|
title: '计划回款额',
|
205
|
+
templet: "#prepayment_amount"
|
158
206
|
},
|
159
207
|
{
|
160
208
|
title: '操作',
|
@@ -35,6 +35,13 @@ json.data do
|
|
35
35
|
json.account_receivable_clazz d.account_receivable_clazz
|
36
36
|
json.invoice_amount d.invoice_amount
|
37
37
|
|
38
|
+
json.business_clazz d.business.clazz&.name || ""
|
39
|
+
if d.business&.department&.school
|
40
|
+
json.property d.business.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
|
41
|
+
else
|
42
|
+
json.property ''
|
43
|
+
end
|
44
|
+
|
38
45
|
end
|
39
46
|
end
|
40
47
|
|
@@ -2,14 +2,54 @@ json.data do
|
|
2
2
|
json.array! @sale_plans do |d|
|
3
3
|
json.id d.id
|
4
4
|
json.staff d.staff.user.real_name
|
5
|
+
json.staff_id d.staff_id
|
5
6
|
json.clazz EducodeSales::SalePlan::CLAZZ_NAME.invert[d.clazz]
|
6
7
|
json.year d.year
|
8
|
+
json.clazz_id d.clazz
|
7
9
|
json.target_money d['annual'] || 0
|
8
|
-
json.plan_money d['budget_amounts']&.round(2) || 0
|
10
|
+
# json.plan_money d['budget_amounts']&.round(2) || 0
|
9
11
|
json.minimum_money d['annual'].present? ? (d['annual'].to_f * 0.8).round(2) : 0
|
10
|
-
|
11
|
-
|
12
|
+
|
13
|
+
# if d.clazz == 1
|
14
|
+
# # 签单计划的预算额
|
15
|
+
# json.finish_money d.business_infos.where.not(plan_sign_on: nil).sum(:budget_amount)
|
16
|
+
# elsif d.clazz == 18
|
17
|
+
# # 中标目标
|
18
|
+
# json.finish_money d.business_infos.where.not(plan_bid_on: nil).sum(:budget_amount)
|
19
|
+
# elsif d.clazz == 2
|
20
|
+
# # 回款目标
|
21
|
+
# json.finish_money d.business_infos.where.not(plan_bid_on: nil).sum(:budget_amount)
|
22
|
+
# elsif d.clazz == 7
|
23
|
+
# # 商机目标
|
24
|
+
# json.finish_money d.business_infos.sum(:budget_amount)
|
25
|
+
# end
|
26
|
+
if d.clazz == 1
|
27
|
+
# 签单计划的预算额
|
28
|
+
json.plan_money d['clazz_1'] || 0
|
29
|
+
json.finish_money d['finish_sign']
|
30
|
+
json.finish_rate (d['finish_sign'] * 100 / (d['clazz_1'] || 0).to_f).round(2)
|
31
|
+
elsif d.clazz == 18
|
32
|
+
# 中标目标
|
33
|
+
json.plan_money d['clazz_18'] || 0
|
34
|
+
json.finish_money d['finish_bid']
|
35
|
+
json.finish_rate (d['finish_bid'] * 100 / (d['clazz_18'] || 0).to_f).round(2)
|
36
|
+
elsif d.clazz == 2
|
37
|
+
# 回款目标
|
38
|
+
json.plan_money d['clazz_2'] || 0
|
39
|
+
json.finish_money d['finish_return_money']
|
40
|
+
json.finish_rate (d['finish_return_money'] * 100 / (d['clazz_2'] || 0).to_f).round(2)
|
41
|
+
elsif d.clazz == 7
|
42
|
+
# 商机目标
|
43
|
+
json.plan_money d['clazz_7'] || 0
|
44
|
+
json.finish_money d['clazz_7'] || 0
|
45
|
+
json.finish_rate 100
|
46
|
+
end
|
47
|
+
|
12
48
|
json.updated_at d.updated_at.to_s
|
49
|
+
json.clazz_1 d['clazz_1']
|
50
|
+
json.clazz_2 d['clazz_2']
|
51
|
+
json.clazz_7 d['clazz_7']
|
52
|
+
json.clazz_18 d['clazz_18']
|
13
53
|
end
|
14
54
|
end
|
15
55
|
|
@@ -125,7 +125,7 @@
|
|
125
125
|
</div>
|
126
126
|
</div>
|
127
127
|
</div>
|
128
|
-
<div class="layui-row" style="padding-top: 5px
|
128
|
+
<div class="layui-row" style="padding-top: 5px">
|
129
129
|
<div class="layui-col-md6">
|
130
130
|
<labeL class="layui-form-label">实际验收时间:</labeL>
|
131
131
|
<div class="layui-input-block">
|
@@ -139,15 +139,15 @@
|
|
139
139
|
</div>
|
140
140
|
</div>
|
141
141
|
</div>
|
142
|
-
<div class="layui-row" style="padding-top: 5px
|
142
|
+
<div class="layui-row" style="padding-top: 5px">
|
143
143
|
<div class="layui-col-md6">
|
144
144
|
<labeL class="layui-form-label">实际回款时间:</labeL>
|
145
145
|
<div class="layui-input-block">
|
146
|
-
<input type="text" id="
|
146
|
+
<input type="text" id="edit_p_actual_money_time" name="p_actual_money_time" autocomplete="off" placeholder="请选择时间" value="<%= @project&.p_actual_money_time&.to_s(:date) %>" class="layui-input">
|
147
147
|
</div>
|
148
148
|
</div>
|
149
149
|
<div class="layui-col-md6">
|
150
|
-
<labeL class="layui-form-label"
|
150
|
+
<labeL class="layui-form-label">回款百分比(%):</labeL>
|
151
151
|
<div class="layui-input-block">
|
152
152
|
<input type="text" name="p_money" autocomplete="off" placeholder="请输入" value="<%= @project&.p_money %>" class="layui-input">
|
153
153
|
</div>
|
@@ -195,11 +195,15 @@
|
|
195
195
|
elem: '#p_accept_time'
|
196
196
|
});
|
197
197
|
laydate.render({
|
198
|
-
elem: '#
|
198
|
+
elem: '#p_actual_money_time'
|
199
199
|
});
|
200
200
|
laydate.render({
|
201
|
-
elem: '#
|
201
|
+
elem: '#edit_p_actual_money_time'
|
202
202
|
});
|
203
|
+
laydate.render({
|
204
|
+
elem: '#p_pre_money_time'
|
205
|
+
});
|
206
|
+
|
203
207
|
form.render();
|
204
208
|
|
205
209
|
|
@@ -48,13 +48,13 @@
|
|
48
48
|
<div class="layui-inline show_item_contract">
|
49
49
|
<label class="layui-form-label">指派人</label>
|
50
50
|
<div class="layui-input-inline">
|
51
|
-
<%= select_tag "
|
51
|
+
<%= select_tag "p_staff_id", options_for_select(EducodeSales::Staff.where(id: EducodeSales::Project.all.pluck(:p_staff_id)).map { |d| [d.user&.real_name, d.id] }, @project&.p_special), { 'lay-filter': 'p_special', include_blank: true } %>
|
52
52
|
</div>
|
53
53
|
</div>
|
54
54
|
<div class="layui-inline show_item_contract">
|
55
55
|
<label class="layui-form-label">销售经理</label>
|
56
56
|
<div class="layui-input-inline">
|
57
|
-
<%= select_tag "
|
57
|
+
<%= select_tag "p_sale_staff_id", options_for_select(EducodeSales::Staff.where(id: EducodeSales::Project.all.pluck(:p_sale_staff_id)).map { |d| [d.user&.real_name, d.id] }, @project&.p_special), { 'lay-filter': 'p_special', include_blank: true } %>
|
58
58
|
</div>
|
59
59
|
</div>
|
60
60
|
<div class="layui-inline show_item_contract">
|
@@ -476,8 +476,18 @@
|
|
476
476
|
form.on('submit(reset_business_search)', function (data) {
|
477
477
|
var field = data.field;
|
478
478
|
form.val('search_form', {
|
479
|
-
name: '',
|
480
|
-
|
479
|
+
name: '',
|
480
|
+
department: '',
|
481
|
+
bidded_date: '',
|
482
|
+
signed_date: '',
|
483
|
+
search_p_actual_money_time: '',
|
484
|
+
p_stage: '',
|
485
|
+
p_state: '',
|
486
|
+
p_special: '',
|
487
|
+
p_difficulty: '',
|
488
|
+
o_business_deployment: '',
|
489
|
+
p_staff_id: '',
|
490
|
+
p_sale_staff_id: ''
|
481
491
|
})
|
482
492
|
// business_type_list.setValue([])
|
483
493
|
// business_step_list.setValue([])
|
@@ -642,8 +652,18 @@
|
|
642
652
|
where: {q: search, sort: sort}
|
643
653
|
}, 'data');
|
644
654
|
form.val('search_form', {
|
645
|
-
name: '',
|
646
|
-
|
655
|
+
name: '',
|
656
|
+
department: '',
|
657
|
+
bidded_date: '',
|
658
|
+
signed_date: '',
|
659
|
+
search_p_actual_money_time: '',
|
660
|
+
p_stage: '',
|
661
|
+
p_state: '',
|
662
|
+
p_special: '',
|
663
|
+
p_difficulty: '',
|
664
|
+
o_business_deployment: '',
|
665
|
+
p_staff_id: '',
|
666
|
+
p_sale_staff_id: ''
|
647
667
|
})
|
648
668
|
$(".my-btn").addClass("selected-btn");
|
649
669
|
return false;
|
@@ -659,8 +679,18 @@
|
|
659
679
|
where: {q: search, sort: sort}
|
660
680
|
}, 'data');
|
661
681
|
form.val('search_form', {
|
662
|
-
name: '',
|
663
|
-
|
682
|
+
name: '',
|
683
|
+
department: '',
|
684
|
+
bidded_date: '',
|
685
|
+
signed_date: '',
|
686
|
+
search_p_actual_money_time: '',
|
687
|
+
p_stage: '',
|
688
|
+
p_state: '',
|
689
|
+
p_special: '',
|
690
|
+
p_difficulty: '',
|
691
|
+
o_business_deployment: '',
|
692
|
+
p_staff_id: '',
|
693
|
+
p_sale_staff_id: ''
|
664
694
|
})
|
665
695
|
$(".project_list-btn").addClass("selected-btn");
|
666
696
|
return false;
|
@@ -7,6 +7,12 @@
|
|
7
7
|
<input type="text" name="name" class="layui-input">
|
8
8
|
</div>
|
9
9
|
</div>
|
10
|
+
<div class="layui-inline">
|
11
|
+
<label class="layui-form-label">真实姓名</label>
|
12
|
+
<div class="layui-input-inline">
|
13
|
+
<input type="text" name="realname" class="layui-input">
|
14
|
+
</div>
|
15
|
+
</div>
|
10
16
|
<div class="layui-inline">
|
11
17
|
<label class="layui-form-label">单位</label>
|
12
18
|
<div class="layui-input-inline">
|
@@ -178,6 +184,11 @@
|
|
178
184
|
fixed: 'left',
|
179
185
|
templet: "#name"
|
180
186
|
},
|
187
|
+
{
|
188
|
+
field: 'realname',
|
189
|
+
width: 100,
|
190
|
+
title: '真实姓名',
|
191
|
+
},
|
181
192
|
{
|
182
193
|
field: 'school',
|
183
194
|
width: 160,
|
@@ -185,11 +196,6 @@
|
|
185
196
|
templet:'<div><span title="{{d.school}}">{{d.school}}</span></div>'
|
186
197
|
|
187
198
|
},
|
188
|
-
{
|
189
|
-
field: 'area',
|
190
|
-
width: 80,
|
191
|
-
title: '区域',
|
192
|
-
},
|
193
199
|
{
|
194
200
|
field: 'department',
|
195
201
|
width: 130,
|
@@ -201,6 +207,16 @@
|
|
201
207
|
width: 160,
|
202
208
|
title: '专业',
|
203
209
|
},
|
210
|
+
{
|
211
|
+
field: 'area',
|
212
|
+
width: 80,
|
213
|
+
title: '区域',
|
214
|
+
},
|
215
|
+
{
|
216
|
+
field: 'business_count',
|
217
|
+
width: 120,
|
218
|
+
title: '单位商机数',
|
219
|
+
},
|
204
220
|
{
|
205
221
|
field: 'professional_title',
|
206
222
|
title: '职称',
|
@@ -237,6 +253,11 @@
|
|
237
253
|
totalRow:true,
|
238
254
|
templet: "#follow"
|
239
255
|
},
|
256
|
+
{
|
257
|
+
field: 'sales_manage',
|
258
|
+
width: 160,
|
259
|
+
title: '销售经理',
|
260
|
+
},
|
240
261
|
{
|
241
262
|
field: 'staff_manage',
|
242
263
|
width: 160,
|