educode_sales 1.0.1 → 1.0.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.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/businesses_controller.rb +3 -0
- data/app/controllers/educode_sales/contracts_controller.rb +19 -2
- data/app/controllers/educode_sales/follow_ups_controller.rb +13 -12
- data/app/controllers/educode_sales/home_controller.rb +14 -0
- data/app/controllers/educode_sales/key_person_controller.rb +1 -1
- data/app/controllers/educode_sales/money_plan_records_controller.rb +103 -0
- data/app/controllers/educode_sales/money_plans_controller.rb +32 -28
- data/app/controllers/educode_sales/sales_details_controller.rb +1 -1
- data/app/controllers/educode_sales/teachers_controller.rb +7 -2
- data/app/models/educode_sales/business.rb +3 -0
- data/app/models/educode_sales/key_person.rb +1 -1
- data/app/models/educode_sales/money_plan.rb +27 -0
- data/app/models/educode_sales/money_plan_claim.rb +7 -0
- data/app/models/educode_sales/money_plan_record.rb +7 -0
- data/app/views/educode_sales/businesses/edit_plan.html.erb +1 -1
- data/app/views/educode_sales/businesses/key_person.json.jbuilder +1 -1
- data/app/views/educode_sales/follow_ups/index.json.jbuilder +1 -1
- data/app/views/educode_sales/follow_ups/teachers.json.jbuilder +1 -1
- data/app/views/educode_sales/home/search_contracts.json.jbuilder +9 -0
- data/app/views/educode_sales/home/search_money_plans.json.jbuilder +9 -0
- data/app/views/educode_sales/money_plan_records/_index.html.erb +231 -0
- data/app/views/educode_sales/money_plan_records/add.html.erb +101 -0
- data/app/views/educode_sales/money_plan_records/confirm_plan.html.erb +167 -0
- data/app/views/educode_sales/money_plan_records/index.js.erb +1 -0
- data/app/views/educode_sales/money_plan_records/index.json.jbuilder +26 -0
- data/app/views/educode_sales/money_plans/{index.html.erb → _index.html.erb} +119 -65
- data/app/views/educode_sales/money_plans/add.html.erb +147 -0
- data/app/views/educode_sales/money_plans/index.json.jbuilder +41 -8
- data/app/views/educode_sales/money_plans/list.html.erb +55 -0
- data/app/views/educode_sales/sales_details/edit.html.erb +6 -0
- data/app/views/educode_sales/teachers/add_keys.html.erb +2 -2
- data/app/views/layouts/educode_sales/application.html.erb +1 -1
- data/config/routes.rb +16 -1
- data/db/migrate/20230527150102_add_category_to_educode_sales_money_plans.rb +7 -0
- data/db/migrate/20230528115654_create_educode_sales_money_plan_records.rb +13 -0
- data/db/migrate/20230529022020_create_educode_sales_money_plan_claims.rb +12 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +18 -3
@@ -1,36 +1,18 @@
|
|
1
|
-
<div style="margin: 10px 10px 10px 10px">
|
2
|
-
<form class="layui-form layui-form-pane" lay-filter="
|
1
|
+
<div style="margin: 10px 10px 10px 10px" id="money_plan_list">
|
2
|
+
<form class="layui-form layui-form-pane" lay-filter="search_plans">
|
3
3
|
<div class="layui-form-item">
|
4
4
|
<div class="layui-inline">
|
5
|
-
<label class="layui-form-label"
|
5
|
+
<label class="layui-form-label">合同名称</label>
|
6
6
|
<div class="layui-input-inline">
|
7
7
|
<input type="text" name="business" class="layui-input">
|
8
8
|
</div>
|
9
9
|
</div>
|
10
10
|
<div class="layui-inline">
|
11
|
-
<label class="layui-form-label"
|
11
|
+
<label class="layui-form-label">客户名称</label>
|
12
12
|
<div class="layui-input-inline">
|
13
13
|
<input type="text" name="school" class="layui-input">
|
14
14
|
</div>
|
15
15
|
</div>
|
16
|
-
<div class="layui-inline">
|
17
|
-
<label class="layui-form-label">负责人</label>
|
18
|
-
<div class="layui-input-inline">
|
19
|
-
<%= select_tag "staff_id", options_for_select(@staffs, params[:staff_id]), { 'lay-filter': 'staff_id', 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
|
-
<%= select_tag "clazz", options_for_select(['实际回款','计划回款']), { include_blank: true } %>
|
26
|
-
</div>
|
27
|
-
</div>
|
28
|
-
<div class="layui-inline">
|
29
|
-
<label class="layui-form-label">回款时间</label>
|
30
|
-
<div class="layui-input-inline">
|
31
|
-
<input type="text" class="layui-input" id="date" name="date" placeholder=" - " autocomplete="off">
|
32
|
-
</div>
|
33
|
-
</div>
|
34
16
|
<div class="layui-inline">
|
35
17
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
36
18
|
</button>
|
@@ -40,45 +22,44 @@
|
|
40
22
|
</div>
|
41
23
|
</form>
|
42
24
|
</div>
|
43
|
-
|
44
|
-
<
|
45
|
-
<div class="layui-btn-container">
|
46
|
-
<span class="table-label">回款计划</span>
|
47
|
-
</div>
|
25
|
+
<script type="text/html" id="toolbar_money_plan">
|
26
|
+
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" style="margin-left: 20px;" lay-event="addMoney">添加回款计划</button>
|
48
27
|
</script>
|
49
28
|
|
50
|
-
<table class="layui-hide" id="
|
29
|
+
<table class="layui-hide" id="money_plan_table" lay-filter="money_plan_table"></table>
|
30
|
+
|
51
31
|
|
52
|
-
<script type="text/html" id="currentTableBar">
|
53
|
-
</script>
|
54
|
-
<script type="text/html" id="business">
|
55
|
-
<a href="javascript:void(0);" lay-event="business" class="layui-table-link">{{ d.business }}</a>
|
56
|
-
</script>
|
57
32
|
|
58
33
|
<script type="text/html" id="school">
|
59
34
|
<a href="<%= base_url%>/colleges/{{d.school_id}}/statistics" class="layui-table-link" target="_blank">{{ d.school }}</a>
|
60
35
|
</script>
|
61
36
|
|
37
|
+
<script type="text/html" id="currentTableBarmoney_plan">
|
38
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add">开票申请</a>
|
39
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">催款提醒</a>
|
40
|
+
|
41
|
+
</script>
|
42
|
+
|
62
43
|
<script>
|
63
44
|
layui.use(['form', 'table', 'miniPage', 'element', 'request'], function () {
|
64
45
|
var $ = layui.jquery,
|
65
46
|
form = layui.form,
|
66
|
-
table = layui.table,
|
67
47
|
request = layui.request,
|
68
48
|
miniPage = layui.miniPage;
|
69
49
|
laydate = layui.laydate;
|
70
|
-
|
50
|
+
table = layui.table;
|
71
51
|
|
72
52
|
laydate.render({
|
73
53
|
elem: '#date',
|
74
54
|
range: true
|
75
55
|
});
|
76
56
|
|
57
|
+
|
58
|
+
|
77
59
|
table.render({
|
78
|
-
elem: '#
|
60
|
+
elem: '#money_plan_table',
|
79
61
|
url: '/missions/money_plans',
|
80
|
-
toolbar: '#
|
81
|
-
totalRow: true,
|
62
|
+
toolbar: '#toolbar_money_plan',
|
82
63
|
defaultToolbar: ['filter'],
|
83
64
|
initSort: {
|
84
65
|
field: 'date_at' //排序字段,对应 cols 设定的各字段名
|
@@ -90,42 +71,85 @@
|
|
90
71
|
field: 'id',
|
91
72
|
width: 80,
|
92
73
|
title:'序号',type: 'numbers',
|
93
|
-
totalRowText:'本页/总计'
|
94
74
|
},
|
95
75
|
{
|
96
|
-
|
76
|
+
field: 'number',
|
77
|
+
width: 120,
|
78
|
+
title: '合同编号'
|
79
|
+
},
|
80
|
+
{
|
81
|
+
field: 'business_name',
|
82
|
+
width: 150,
|
83
|
+
title: '合同名称'
|
84
|
+
},
|
85
|
+
{
|
86
|
+
field: 'school',
|
87
|
+
width: 180,
|
88
|
+
title: '客户名称'
|
89
|
+
},
|
90
|
+
{
|
91
|
+
field: 'staff_manages',
|
97
92
|
width: 120,
|
98
|
-
|
99
|
-
|
93
|
+
title: '销售经理'
|
94
|
+
},
|
95
|
+
{
|
96
|
+
field: 'category',
|
97
|
+
width: 120,
|
98
|
+
title: '回款类别',
|
100
99
|
},
|
101
100
|
{
|
102
101
|
field: 'amount',
|
103
|
-
width:
|
102
|
+
width: 120,
|
104
103
|
sort: true,
|
105
|
-
|
106
|
-
title: '回款金额',
|
104
|
+
title: '金额',
|
107
105
|
},
|
108
106
|
{
|
109
|
-
field: '
|
107
|
+
field: 'rate',
|
110
108
|
width: 100,
|
111
|
-
title: '
|
109
|
+
title: '比例',
|
112
110
|
},
|
113
111
|
{
|
114
|
-
field: '
|
115
|
-
|
116
|
-
|
117
|
-
|
112
|
+
field: 'payment_clause',
|
113
|
+
width: 200,
|
114
|
+
title: '付款条款',
|
118
115
|
},
|
119
116
|
{
|
120
|
-
|
121
|
-
|
122
|
-
|
117
|
+
field: 'date_at',
|
118
|
+
width: 150,
|
119
|
+
title: '计划回款时间',
|
120
|
+
},
|
121
|
+
{
|
122
|
+
field: 'return_period',
|
123
|
+
width: 120,
|
124
|
+
title: '回款周期',
|
125
|
+
},
|
126
|
+
{
|
127
|
+
field: 'state',
|
128
|
+
width: 100,
|
129
|
+
title: '回款状态',
|
130
|
+
},
|
131
|
+
{
|
132
|
+
field: 'stage',
|
133
|
+
width: 100,
|
134
|
+
title: '阶段',
|
123
135
|
},
|
124
136
|
{
|
125
|
-
field: '
|
126
|
-
width:
|
127
|
-
title: '
|
137
|
+
field: 'accounts_state',
|
138
|
+
width: 150,
|
139
|
+
title: '应收款类型',
|
128
140
|
},
|
141
|
+
{
|
142
|
+
field: 'busireceipt_state',
|
143
|
+
width: 120,
|
144
|
+
title: '开票状态',
|
145
|
+
},
|
146
|
+
{
|
147
|
+
title: '操作',
|
148
|
+
minWidth: 200,
|
149
|
+
toolbar: '#currentTableBarmoney_plan',
|
150
|
+
align: "center",
|
151
|
+
fixed: 'right'
|
152
|
+
}
|
129
153
|
]
|
130
154
|
],
|
131
155
|
limit: 20,
|
@@ -134,10 +158,10 @@
|
|
134
158
|
});
|
135
159
|
|
136
160
|
var sort = {}, search = {};
|
137
|
-
table.on('sort(
|
161
|
+
table.on('sort(money_plan_table)', function (obj) {
|
138
162
|
sort.field = obj.field;
|
139
163
|
sort.order = obj.type;
|
140
|
-
table.reload('
|
164
|
+
table.reload('money_plan_table', {
|
141
165
|
initSort: obj,
|
142
166
|
where: {
|
143
167
|
sort: sort,
|
@@ -149,7 +173,7 @@
|
|
149
173
|
// 监听搜索操作
|
150
174
|
form.on('submit(search_teachers)', function (data) {
|
151
175
|
search = data.field
|
152
|
-
table.reload('
|
176
|
+
table.reload('money_plan_table', {
|
153
177
|
page: {
|
154
178
|
curr: 1
|
155
179
|
},
|
@@ -172,10 +196,31 @@
|
|
172
196
|
return false;
|
173
197
|
});
|
174
198
|
|
175
|
-
table.on('
|
199
|
+
table.on('toolbar(money_plan_table)', function ( obj) {
|
200
|
+
console.log(111)
|
201
|
+
if (obj.event == 'addMoney') {
|
202
|
+
var content = miniPage.getHrefContent('/missions/money_plans/add')
|
203
|
+
var openWH = miniPage.getOpenWidthHeight();
|
204
|
+
sindex = layer.open({
|
205
|
+
title: '添加回款计划',
|
206
|
+
type: 1,
|
207
|
+
shade: 0.2,
|
208
|
+
maxmin: true,
|
209
|
+
shadeClose: true,
|
210
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
211
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
212
|
+
content: content
|
213
|
+
});
|
214
|
+
$(window).on("resize", function () {
|
215
|
+
layer.full(sindex);
|
216
|
+
});
|
217
|
+
}
|
218
|
+
})
|
219
|
+
|
220
|
+
table.on('tool(money_plan_table)', function (obj) {
|
176
221
|
var data = obj.data;
|
177
222
|
id = data.id
|
178
|
-
if (obj.event === '
|
223
|
+
if (obj.event === 'add_money_plan') { // 监听添加操作
|
179
224
|
var content = miniPage.getHrefContent('/missions/businesses/show_follow_record?follow_up_id=' + data.id);
|
180
225
|
var openWH = miniPage.getOpenWidthHeight();
|
181
226
|
show_index = layer.open({
|
@@ -216,7 +261,16 @@
|
|
216
261
|
});
|
217
262
|
</script>
|
218
263
|
<style>
|
219
|
-
|
220
|
-
|
221
|
-
|
264
|
+
.layui-table-tool-temp {
|
265
|
+
padding-right: 30px;
|
266
|
+
!important;
|
267
|
+
}
|
268
|
+
|
269
|
+
.layui-table-fixed .layui-table-body {
|
270
|
+
height: auto!important;
|
271
|
+
}
|
272
|
+
|
273
|
+
.layui-table-fixed.layui-hide {
|
274
|
+
display: block!important;
|
275
|
+
}
|
222
276
|
</style>
|
@@ -0,0 +1,147 @@
|
|
1
|
+
<div style="padding:10px">
|
2
|
+
<div class="layui-form layuimini-form" lay-filter="searchform">
|
3
|
+
<div class="layui-form-item">
|
4
|
+
<label class="layui-form-label required" style="width: 80px !important;">合同名称:</label>
|
5
|
+
<div class="layui-input-inline">
|
6
|
+
<div id="business" style="width:600px;"></div>
|
7
|
+
</div>
|
8
|
+
</div>
|
9
|
+
<div class="layui-form-item">
|
10
|
+
<div class="layui-inline">
|
11
|
+
<label class="layui-form-label required">回款类别:</label>
|
12
|
+
<div class="layui-input-inline">
|
13
|
+
<%= select_tag "category[0]", options_for_select(EducodeSales::MoneyPlan.categories.keys), { 'lay-filter': 'category', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
<div class="layui-inline">
|
17
|
+
<label class="layui-form-label required" style="width:50px;">金额:</label>
|
18
|
+
<div class="layui-input-inline">
|
19
|
+
<input type="text" name="amount[0]" value="" class="layui-input" lay-verify="required">
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
<div class="layui-inline">
|
23
|
+
<label class="layui-form-label required" style="width: 110px;">计划回款时间:</label>
|
24
|
+
<div class="layui-input-inline">
|
25
|
+
<input type="text" name="date_at[0]" value="" class="layui-input" lay-verify="required" id="date_at">
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
<div class="layui-inline">
|
29
|
+
<label class="layui-form-label">付款条件:</label>
|
30
|
+
<div class="layui-input-inline">
|
31
|
+
<input type="text" name="payment_clause[0]" value="" class="layui-input">
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
<div class="layui-inline">
|
35
|
+
<button class="layui-btn" id="addInput">+</button>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
<div id="wraper"></div>
|
39
|
+
<div class="layui-form-item">
|
40
|
+
<div class="layui-input-block">
|
41
|
+
<button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">保存</button>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
<script type="text/html" id="input_wraper">
|
47
|
+
<div class="layui-form-item">
|
48
|
+
<div class="layui-inline">
|
49
|
+
<label class="layui-form-label required">回款类别:</label>
|
50
|
+
<div class="layui-input-inline">
|
51
|
+
<%= select_tag "category[{{d.num}}]", options_for_select(EducodeSales::MoneyPlan.categories.keys), { 'lay-filter': 'category', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<div class="layui-inline">
|
55
|
+
<label class="layui-form-label required" style="width:50px;">金额:</label>
|
56
|
+
<div class="layui-input-inline">
|
57
|
+
<input type="text" name="amount[{{d.num}}]" value="" class="layui-input" lay-verify="required">
|
58
|
+
</div>
|
59
|
+
</div>
|
60
|
+
<div class="layui-inline">
|
61
|
+
<label class="layui-form-label required" style="width: 110px;">计划回款时间:</label>
|
62
|
+
<div class="layui-input-inline">
|
63
|
+
<input type="text" name="date_at[{{d.num}}]" value="" class="layui-input date_{{d.num}}" lay-verify="required">
|
64
|
+
</div>
|
65
|
+
</div>
|
66
|
+
<div class="layui-inline">
|
67
|
+
<label class="layui-form-label">付款条件:</label>
|
68
|
+
<div class="layui-input-inline">
|
69
|
+
<input type="text" name="payment_clause[{{d.num}}]" value="" class="layui-input">
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
</div>
|
73
|
+
</script>
|
74
|
+
|
75
|
+
<script>
|
76
|
+
|
77
|
+
layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'laydate', 'selectInput'], function() {
|
78
|
+
var form = layui.form,
|
79
|
+
layer = layui.layer,
|
80
|
+
table = layui.table,
|
81
|
+
laydate = layui.laydate,
|
82
|
+
laytpl = layui.laytpl,
|
83
|
+
request = layui.request,
|
84
|
+
selectInput = layui.selectInput,
|
85
|
+
$ = layui.$;
|
86
|
+
form.render();
|
87
|
+
|
88
|
+
laydate.render({
|
89
|
+
elem: '#date_at',
|
90
|
+
});
|
91
|
+
|
92
|
+
|
93
|
+
var business_id = "";
|
94
|
+
var business_select = selectInput.render({
|
95
|
+
elem: '#business',
|
96
|
+
name: 'bussiness_name', // 渲染的input的name值
|
97
|
+
layFilter: 'test', //同layui form参数lay-filter
|
98
|
+
layVerType: 'tips', // 同layui form参数lay-verType
|
99
|
+
layReqText: '请填写文本', //同layui form参数lay-ReqText
|
100
|
+
hasSelectIcon: false,
|
101
|
+
placeholder: '请输入合同名称', // 渲染的inputplaceholder值
|
102
|
+
remoteSearch: true, // 是否启用远程搜索 默认是false,和远程搜索回调保存同步
|
103
|
+
remoteMethod: function (value, cb) { // 远程搜索的回调函数
|
104
|
+
if (!value) {
|
105
|
+
business_id = "";
|
106
|
+
return cb([]);
|
107
|
+
}
|
108
|
+
request.get('missions/search_contracts?q=' + value, {}, function (res) {
|
109
|
+
if (res.data.length == 0) {
|
110
|
+
business_select.emptyValue();
|
111
|
+
return cb([])
|
112
|
+
}
|
113
|
+
return cb(res)
|
114
|
+
})
|
115
|
+
}
|
116
|
+
});
|
117
|
+
|
118
|
+
|
119
|
+
var num = 0;
|
120
|
+
$("#addInput").on("click", function() {
|
121
|
+
num += 1;
|
122
|
+
var getTpl = input_wraper.innerHTML, view = document.getElementById('wraper');
|
123
|
+
laytpl(getTpl).render({num: num}, function(html){
|
124
|
+
$(view).append(html);
|
125
|
+
});
|
126
|
+
form.render();
|
127
|
+
laydate.render({
|
128
|
+
elem: '.date_' + num,
|
129
|
+
});
|
130
|
+
})
|
131
|
+
|
132
|
+
|
133
|
+
form.on('submit(saveBtn)', function(data) {
|
134
|
+
data.field.num = num;
|
135
|
+
data.field.business_id = business_select.getValue() || business_id;
|
136
|
+
if (data.field.business_id == '') {
|
137
|
+
layer.msg('请选择合同')
|
138
|
+
return false;
|
139
|
+
}
|
140
|
+
request.post("missions/money_plans/", data.field, function(res) {
|
141
|
+
layer.close(parent.sindex)
|
142
|
+
parent.table.reload('money_plan_table')
|
143
|
+
})
|
144
|
+
return false;
|
145
|
+
});
|
146
|
+
});
|
147
|
+
</script>
|
@@ -2,20 +2,53 @@ total_amount = 0
|
|
2
2
|
json.data do
|
3
3
|
json.array! @money_plans do |d|
|
4
4
|
json.id d.id
|
5
|
+
json.business_name d.business.name
|
5
6
|
json.date_at (d&.date_at&.to_s(:date) || "")
|
6
7
|
json.amount d.amount
|
7
|
-
total_amount += d.amount
|
8
8
|
json.clazz d.clazz
|
9
|
-
json.business d.
|
10
|
-
json.business_id d.
|
11
|
-
json.school
|
12
|
-
json.school_id
|
9
|
+
json.business d.business.name
|
10
|
+
json.business_id d.business.id
|
11
|
+
json.school d.business.school.name
|
12
|
+
json.school_id d.business.school_id
|
13
13
|
json.staff d.staff.user.real_name
|
14
|
+
json.number d.business.number
|
15
|
+
json.category d.category || ''
|
16
|
+
json.payment_clause d.payment_clause
|
17
|
+
json.stage d.business&.last_follow_up&.stage&.name || ''
|
18
|
+
json.return_period d.return_period
|
19
|
+
json.signed_date d.business&.last_follow_up&.signed_date
|
20
|
+
json.actual_amount d.business&.last_follow_up&.actual_amount
|
21
|
+
json.rate d.business&.last_follow_up&.actual_amount ? (d.amount / d.business.last_follow_up.actual_amount * 100.0).round(2) : ''
|
22
|
+
json.staff_manages d.business&.last_follow_up&.assign_follow_ups.present? ? (d.business.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.business.staff&.user&.real_name
|
23
|
+
if d['claim_num'] > 0
|
24
|
+
json.state '已回款'
|
25
|
+
elsif d['claim_num'] == 0 && d.date_at < Time.now
|
26
|
+
json.state '正常'
|
27
|
+
else
|
28
|
+
json.state '已逾期'
|
29
|
+
end
|
30
|
+
if d['claim_num'] > 0
|
31
|
+
json.accounts_state ''
|
32
|
+
else
|
33
|
+
case d.business&.last_follow_up&.stage&.name
|
34
|
+
when '已中标'
|
35
|
+
json.accounts_state '中标应收款'
|
36
|
+
when '已签单'
|
37
|
+
json.accounts_state '合同应收款'
|
38
|
+
when '已部署'
|
39
|
+
json.accounts_state '部署应收款'
|
40
|
+
when '已验收'
|
41
|
+
json.accounts_state '验收应收款'
|
42
|
+
when '已回款'
|
43
|
+
json.accounts_state '质保金'
|
44
|
+
when '已开票'
|
45
|
+
json.accounts_state '开票应收款'
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
14
50
|
end
|
15
51
|
end
|
16
52
|
|
17
|
-
json.totalRow do
|
18
|
-
json.amount total_amount.round(2).to_s + '/' + @total_amount.round(2).to_s
|
19
|
-
end
|
20
53
|
json.code 0
|
21
54
|
json.count @money_plans.total_count
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
2
|
+
<div class="layui-tab" lay-filter="money_plan_tab">
|
3
|
+
<ul class="layui-tab-title">
|
4
|
+
<li class="layui-this">回款计划</li>
|
5
|
+
<li class="">回款记录</li>
|
6
|
+
<li class="">开票记录</li>
|
7
|
+
</ul>
|
8
|
+
<div class="layui-tab-content">
|
9
|
+
<div class="layui-tab-item layui-show">
|
10
|
+
<%=render 'index' %>
|
11
|
+
</div>
|
12
|
+
<div class="layui-tab-item">
|
13
|
+
<div id="monley_plan_record_wraper"></div>
|
14
|
+
</div>
|
15
|
+
<div class="layui-tab-item">
|
16
|
+
<div id="invoice_wraper"></div>
|
17
|
+
</div>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<script>
|
22
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request', 'laydate', 'element'], function() {
|
23
|
+
var $ = layui.jquery,
|
24
|
+
form = layui.form,
|
25
|
+
request = layui.request,
|
26
|
+
dropdown = layui.dropdown,
|
27
|
+
miniPage = layui.miniPage,
|
28
|
+
element = layui.element,
|
29
|
+
laydate = layui.laydate;
|
30
|
+
var laydate = layui.laydate;
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
element.render();
|
35
|
+
element.on('tab(money_plan_tab)', function(data) {
|
36
|
+
if (data.index == 1 && $("#money_plan_record").length == 0) {
|
37
|
+
loadPage('/missions/money_plan_records')
|
38
|
+
} else if (data.index == 2 && $("#invoice_wraper").length == 0) {
|
39
|
+
}
|
40
|
+
});
|
41
|
+
|
42
|
+
|
43
|
+
function loadPage(url) {
|
44
|
+
var layer_index = layer.load(0, {shade: [0.1, '#fff']});
|
45
|
+
Rails.ajax({
|
46
|
+
url: url,
|
47
|
+
type: 'GET',
|
48
|
+
dataType: "script",
|
49
|
+
success: function (res) {
|
50
|
+
layer.close(layer_index);
|
51
|
+
}
|
52
|
+
});
|
53
|
+
}
|
54
|
+
})
|
55
|
+
</script>
|
@@ -45,6 +45,12 @@
|
|
45
45
|
<input type="text" name="delivery_date" value="<%= @sale_detail.delivery_date %>" class="layui-input" lay-verify="required" id="delivery_date">
|
46
46
|
</div>
|
47
47
|
</div>
|
48
|
+
<div class="layui-inline">
|
49
|
+
<label class="layui-form-label required">知识产权归属:</label>
|
50
|
+
<div class="layui-input-inline">
|
51
|
+
<%= select_tag "proprietorship", options_for_select(EducodeSales::SalesDetail.proprietorships.keys, @sale_detail.proprietorship), { 'lay-filter': 'proprietorship', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
|
52
|
+
</div>
|
53
|
+
</div>
|
48
54
|
</div>
|
49
55
|
<div class="layui-form-item">
|
50
56
|
<div class="layui-input-block">
|
@@ -160,7 +160,7 @@
|
|
160
160
|
});
|
161
161
|
});
|
162
162
|
|
163
|
-
|
163
|
+
user_input = selectInput.render({
|
164
164
|
elem: '#teacher',
|
165
165
|
name: 'name', // 渲染的input的name值
|
166
166
|
layFilter: 'teacher',
|
@@ -201,7 +201,7 @@
|
|
201
201
|
form.on('submit(add_keys)', function (data) {
|
202
202
|
data.field.name = user_input.getValue()
|
203
203
|
if (data.field.name == "") {
|
204
|
-
data.field.name = gon.teacher;
|
204
|
+
data.field.name = $("#"+user_input._input).val() // gon.teacher;
|
205
205
|
}
|
206
206
|
|
207
207
|
request.authPost("missions/follow_ups/" + parent.follow_up_id + "/add_keys", data.field, function (res) {
|
@@ -72,7 +72,7 @@
|
|
72
72
|
</dd>
|
73
73
|
<% end %>
|
74
74
|
<% if can? :read, EducodeSales::MoneyPlan %>
|
75
|
-
<dd><a href="/missions/money_plans" class="<%= current?('layui-this',
|
75
|
+
<dd><a href="/missions/money_plans/list" class="<%= current?('layui-this', list_money_plans_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/money_plans.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>回款管理</a>
|
76
76
|
</dd>
|
77
77
|
<% end %>
|
78
78
|
<% if can? :read, EducodeSales::Customer %>
|
data/config/routes.rb
CHANGED
@@ -19,7 +19,8 @@ EducodeSales::Engine.routes.draw do
|
|
19
19
|
get :filter, to: "application#filter"
|
20
20
|
get :search_activity, to: "home#search_activity"
|
21
21
|
get :search_customer, to: "home#search_customer"
|
22
|
-
|
22
|
+
get :search_contracts, to: "home#search_contracts"
|
23
|
+
get :search_money_plans, to: "home#search_money_plans"
|
23
24
|
|
24
25
|
resources :sessions do
|
25
26
|
end
|
@@ -62,6 +63,20 @@ EducodeSales::Engine.routes.draw do
|
|
62
63
|
resources :customer_follows do
|
63
64
|
end
|
64
65
|
resources :money_plans do
|
66
|
+
collection do
|
67
|
+
get :list
|
68
|
+
get :add
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
resources :money_plan_records do
|
73
|
+
collection do
|
74
|
+
get :add
|
75
|
+
get :confirm_plan
|
76
|
+
end
|
77
|
+
member do
|
78
|
+
post :confirm
|
79
|
+
end
|
65
80
|
end
|
66
81
|
|
67
82
|
resources :customers do
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class AddCategoryToEducodeSalesMoneyPlans < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
add_column :educode_sales_money_plans, :category, :integer
|
4
|
+
add_column :educode_sales_money_plans, :payment_clause, :string
|
5
|
+
add_column :educode_sales_money_plans, :business_id, :integer
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateEducodeSalesMoneyPlanRecords < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
create_table :educode_sales_money_plan_records do |t|
|
4
|
+
t.references :business
|
5
|
+
t.date :date_at
|
6
|
+
t.float :amount
|
7
|
+
t.string :payer_name
|
8
|
+
t.references :staff
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateEducodeSalesMoneyPlanClaims < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
create_table :educode_sales_money_plan_claims do |t|
|
4
|
+
t.references :money_plan
|
5
|
+
t.references :money_plan_record
|
6
|
+
t.references :staff
|
7
|
+
t.float :amount
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|