educode_sales 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/businesses_controller.rb +3 -0
  3. data/app/controllers/educode_sales/contracts_controller.rb +17 -1
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +13 -12
  5. data/app/controllers/educode_sales/home_controller.rb +14 -0
  6. data/app/controllers/educode_sales/key_person_controller.rb +1 -1
  7. data/app/controllers/educode_sales/money_plan_records_controller.rb +103 -0
  8. data/app/controllers/educode_sales/money_plans_controller.rb +32 -28
  9. data/app/controllers/educode_sales/sales_details_controller.rb +1 -1
  10. data/app/controllers/educode_sales/teachers_controller.rb +7 -2
  11. data/app/models/educode_sales/business.rb +3 -0
  12. data/app/models/educode_sales/key_person.rb +1 -1
  13. data/app/models/educode_sales/money_plan.rb +27 -0
  14. data/app/models/educode_sales/money_plan_claim.rb +7 -0
  15. data/app/models/educode_sales/money_plan_record.rb +7 -0
  16. data/app/views/educode_sales/businesses/edit_plan.html.erb +1 -1
  17. data/app/views/educode_sales/businesses/key_person.json.jbuilder +1 -1
  18. data/app/views/educode_sales/follow_ups/index.json.jbuilder +1 -1
  19. data/app/views/educode_sales/follow_ups/teachers.json.jbuilder +1 -1
  20. data/app/views/educode_sales/home/search_contracts.json.jbuilder +9 -0
  21. data/app/views/educode_sales/home/search_money_plans.json.jbuilder +9 -0
  22. data/app/views/educode_sales/money_plan_records/_index.html.erb +231 -0
  23. data/app/views/educode_sales/money_plan_records/add.html.erb +101 -0
  24. data/app/views/educode_sales/money_plan_records/confirm_plan.html.erb +167 -0
  25. data/app/views/educode_sales/money_plan_records/index.js.erb +1 -0
  26. data/app/views/educode_sales/money_plan_records/index.json.jbuilder +26 -0
  27. data/app/views/educode_sales/money_plans/{index.html.erb → _index.html.erb} +119 -65
  28. data/app/views/educode_sales/money_plans/add.html.erb +147 -0
  29. data/app/views/educode_sales/money_plans/index.json.jbuilder +41 -8
  30. data/app/views/educode_sales/money_plans/list.html.erb +55 -0
  31. data/app/views/educode_sales/sales_details/edit.html.erb +6 -0
  32. data/app/views/educode_sales/teachers/add_keys.html.erb +2 -2
  33. data/app/views/layouts/educode_sales/application.html.erb +1 -1
  34. data/config/routes.rb +16 -1
  35. data/db/migrate/20230527150102_add_category_to_educode_sales_money_plans.rb +7 -0
  36. data/db/migrate/20230528115654_create_educode_sales_money_plan_records.rb +13 -0
  37. data/db/migrate/20230529022020_create_educode_sales_money_plan_claims.rb +12 -0
  38. data/lib/educode_sales/version.rb +1 -1
  39. 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="search_teachers">
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">所属商机</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">单位</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
- <script type="text/html" id="toolbarDemo">
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="place" lay-filter="place"></table>
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: '#place',
60
+ elem: '#money_plan_table',
79
61
  url: '/missions/money_plans',
80
- toolbar: '#toolbarDemo',
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
- field: 'date_at',
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
- sort: true,
99
- title: '回款时间'
93
+ title: '销售经理'
94
+ },
95
+ {
96
+ field: 'category',
97
+ width: 120,
98
+ title: '回款类别',
100
99
  },
101
100
  {
102
101
  field: 'amount',
103
- width: 200,
102
+ width: 120,
104
103
  sort: true,
105
- totalRow:true,
106
- title: '回款金额',
104
+ title: '金额',
107
105
  },
108
106
  {
109
- field: 'clazz',
107
+ field: 'rate',
110
108
  width: 100,
111
- title: '状态',
109
+ title: '比例',
112
110
  },
113
111
  {
114
- field: 'business',
115
- title: '所属商机',
116
- templet: "#business",
117
-
112
+ field: 'payment_clause',
113
+ width: 200,
114
+ title: '付款条款',
118
115
  },
119
116
  {
120
- field: 'school',
121
- title: '单位',
122
- templet: "#school",
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: 'staff',
126
- width: 90,
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(place)', function (obj) {
161
+ table.on('sort(money_plan_table)', function (obj) {
138
162
  sort.field = obj.field;
139
163
  sort.order = obj.type;
140
- table.reload('place', {
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('place', {
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('tool(place)', function (obj) {
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 === 'add_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
- .layui-table-tool-temp{
220
- padding-right: 0px; !important;
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.follow_up.business.name
10
- json.business_id d.follow_up.business.id
11
- json.school School.find(d.follow_up.business.school_id).name
12
- json.school_id School.find(d.follow_up.business.school_id).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
- var user_input = selectInput.render({
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', 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>
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
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '1.0.2'
2
+ VERSION = '1.0.3'
3
3
  end