educode_sales 1.0.9 → 1.10.0
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 +2 -0
- data/app/controllers/educode_sales/home_controller.rb +1 -1
- data/app/controllers/educode_sales/money_plan_records_controller.rb +1 -0
- data/app/controllers/educode_sales/money_plans_controller.rb +13 -1
- data/app/models/educode_sales/money_plan.rb +1 -1
- data/app/views/educode_sales/businesses/index.html.erb +39 -91
- data/app/views/educode_sales/home/search_money_plans.json.jbuilder +1 -1
- data/app/views/educode_sales/money_plans/_index.html.erb +12 -8
- data/app/views/educode_sales/money_plans/add.html.erb +25 -9
- data/app/views/educode_sales/money_plans/edit.html.erb +1 -1
- data/lib/educode_sales/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00f95a116861234dd0fca5a1714c085e1bec0bddc43a23eb887d52486ac72d16
|
4
|
+
data.tar.gz: 771c88244cbf37b3521d6ca60d9571d10bc22d90ae698ebf885608aeb4560a59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a81d2f314ed6071cf408581e4725e337fdfcca85873d90945b6fd2b26016437b497c91e34ddfc41deb0602898d150572b7f4a5cf13e4189fb50d9b7414863aa
|
7
|
+
data.tar.gz: 5dfc28b6e674a4241e2c2e717d84fc2b6cf3d3825794d96be7edbb771718cab0841ee055a87b6df43a40b6c97ba1b4d61b280d9184c1e8b4cee44d64c19dfb63
|
@@ -70,6 +70,8 @@ module EducodeSales
|
|
70
70
|
gon.menus << { title: '添加年计划', event: 'year' }
|
71
71
|
end
|
72
72
|
|
73
|
+
gon.menus << { title: '添加回款计划', event: 'money_plan' }
|
74
|
+
|
73
75
|
gon.menus << { title: '关注', event: 'following' }
|
74
76
|
gon.menus << { title: '跟进时间线', event: 'time_line' }
|
75
77
|
if can?(:show_file, EducodeSales::Business)
|
@@ -80,7 +80,7 @@ module EducodeSales
|
|
80
80
|
def search_contracts
|
81
81
|
@data = Business
|
82
82
|
if params[:q].present?
|
83
|
-
@data = @data.where("name like :q ", q: "%#{params[:q]}%").limit(20)
|
83
|
+
@data = @data.joins(:school).where("educode_sales_businesses.name like :q OR educode_sales_businesses.number like :q OR schools.name like :q ", q: "%#{params[:q]}%").limit(20)
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
@@ -42,7 +42,7 @@ module EducodeSales
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def list
|
45
|
-
follow_up_ids = Business.pluck(:last_follow_up_id)
|
45
|
+
# follow_up_ids = Business.pluck(:last_follow_up_id)
|
46
46
|
authorize! :read, MoneyPlan
|
47
47
|
respond_to do |format|
|
48
48
|
format.html do
|
@@ -54,6 +54,12 @@ module EducodeSales
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def add
|
57
|
+
if params[:business_id].present?
|
58
|
+
@business = Business.find(params[:business_id])
|
59
|
+
gon.business_id_source = @business.id
|
60
|
+
else
|
61
|
+
gon.business_id_source = ""
|
62
|
+
end
|
57
63
|
render layout: false
|
58
64
|
end
|
59
65
|
|
@@ -82,6 +88,12 @@ module EducodeSales
|
|
82
88
|
render_success
|
83
89
|
end
|
84
90
|
|
91
|
+
def destroy
|
92
|
+
money_plan = MoneyPlan.find(params[:id])
|
93
|
+
money_plan.destroy
|
94
|
+
render_success
|
95
|
+
end
|
96
|
+
|
85
97
|
private
|
86
98
|
def money_plan_params
|
87
99
|
params.permit(:category, :amount, :payment_clause, :date_at)
|
@@ -397,13 +397,7 @@
|
|
397
397
|
totalRowText: '合计',
|
398
398
|
fixed: "left"
|
399
399
|
},
|
400
|
-
|
401
|
-
field: 'number',
|
402
|
-
width: 120,
|
403
|
-
title: '编号',
|
404
|
-
fixed: 'left',
|
405
|
-
hide: gon.filter.number
|
406
|
-
},
|
400
|
+
|
407
401
|
{
|
408
402
|
field: 'name',
|
409
403
|
width: 170,
|
@@ -522,48 +516,12 @@
|
|
522
516
|
hide: gon.filter.invitation_at
|
523
517
|
},
|
524
518
|
{
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
},
|
531
|
-
{
|
532
|
-
field: 'signed_date',
|
533
|
-
width: 105,
|
534
|
-
title: '签单时间',
|
535
|
-
sort: true,
|
536
|
-
hide: gon.filter.signed_date
|
537
|
-
},
|
538
|
-
{
|
539
|
-
field: 'reception_at',
|
540
|
-
width: 105,
|
541
|
-
title: '验收时间',
|
542
|
-
sort: true,
|
543
|
-
hide: gon.filter.reception_at
|
544
|
-
},
|
545
|
-
{
|
546
|
-
field: 'service_end_time',
|
547
|
-
width: 200,
|
548
|
-
title: '服务期',
|
549
|
-
sort: true,
|
550
|
-
hide: gon.filter.service_end_time
|
551
|
-
},
|
552
|
-
{
|
553
|
-
field: 'o_business_deployment',
|
554
|
-
width: 150,
|
555
|
-
title: '部署类型',
|
556
|
-
sort: true,
|
557
|
-
hide: gon.filter.o_business_deployment
|
558
|
-
},
|
559
|
-
{
|
560
|
-
field: 'p_deploy_time',
|
561
|
-
width: 150,
|
562
|
-
title: '部署时间',
|
563
|
-
sort: true,
|
564
|
-
hide: gon.filter.p_deploy_time
|
519
|
+
field: 'bidded_date',
|
520
|
+
width: 105,
|
521
|
+
title: '中标时间',
|
522
|
+
sort: true,
|
523
|
+
hide: gon.filter.bidded_date
|
565
524
|
},
|
566
|
-
|
567
525
|
{
|
568
526
|
field: 'budget_amount',
|
569
527
|
width: 105,
|
@@ -573,42 +531,12 @@
|
|
573
531
|
hide: gon.filter.budget_amount
|
574
532
|
},
|
575
533
|
{
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
},
|
583
|
-
{
|
584
|
-
field: 'actual_amount',
|
585
|
-
width: 100,
|
586
|
-
title: '合同额',
|
587
|
-
totalRow: true,
|
588
|
-
sort: true,
|
589
|
-
hide: gon.filter.actual_amount
|
590
|
-
},
|
591
|
-
{
|
592
|
-
field: 'return_money',
|
593
|
-
width: 100,
|
594
|
-
title: '回款',
|
595
|
-
sort: true,
|
596
|
-
totalRow: true,
|
597
|
-
hide: gon.filter.return_money
|
598
|
-
},
|
599
|
-
{
|
600
|
-
field: 'wait_return_money',
|
601
|
-
width: 100,
|
602
|
-
title: '待回款',
|
603
|
-
sort: true,
|
604
|
-
totalRow: true,
|
605
|
-
hide: gon.filter.wait_return_money
|
606
|
-
},
|
607
|
-
{
|
608
|
-
field: 'return_money_days',
|
609
|
-
width: 150,
|
610
|
-
title: '首次回款周期(天)',
|
611
|
-
hide: gon.filter.return_money_days
|
534
|
+
field: 'total_amount',
|
535
|
+
width: 100,
|
536
|
+
title: '中标额',
|
537
|
+
totalRow: true,
|
538
|
+
sort: true,
|
539
|
+
hide: gon.filter.total_amount
|
612
540
|
},
|
613
541
|
{
|
614
542
|
field: 'divide_rate',
|
@@ -617,13 +545,7 @@
|
|
617
545
|
sort: true,
|
618
546
|
hide: gon.filter.divide_rate
|
619
547
|
},
|
620
|
-
|
621
|
-
field: 'divide_money',
|
622
|
-
width: 160,
|
623
|
-
title: '渠道分成金额',
|
624
|
-
sort: true,
|
625
|
-
hide: gon.filter.divide_money
|
626
|
-
},
|
548
|
+
|
627
549
|
{
|
628
550
|
field: 'place',
|
629
551
|
width: 160,
|
@@ -751,6 +673,9 @@
|
|
751
673
|
case 'following':
|
752
674
|
following(id);
|
753
675
|
break;
|
676
|
+
case 'money_plan':
|
677
|
+
money_plan(id);
|
678
|
+
break;
|
754
679
|
}
|
755
680
|
}
|
756
681
|
});
|
@@ -786,6 +711,9 @@
|
|
786
711
|
case 'following':
|
787
712
|
following(id);
|
788
713
|
break;
|
714
|
+
case 'money_plan':
|
715
|
+
money_plan(id);
|
716
|
+
break;
|
789
717
|
}
|
790
718
|
}
|
791
719
|
});
|
@@ -808,7 +736,9 @@
|
|
808
736
|
case 'export_records':
|
809
737
|
export_records();
|
810
738
|
break;
|
739
|
+
|
811
740
|
}
|
741
|
+
|
812
742
|
}
|
813
743
|
});
|
814
744
|
}
|
@@ -1005,6 +935,24 @@
|
|
1005
935
|
});
|
1006
936
|
}
|
1007
937
|
|
938
|
+
function money_plan(business_id) {
|
939
|
+
var content = miniPage.getHrefContent('/missions/money_plans/add?business_id=' + business_id);
|
940
|
+
var openWH = miniPage.getOpenWidthHeight();
|
941
|
+
sindex = layer.open({
|
942
|
+
title: '添加回款计划',
|
943
|
+
type: 1,
|
944
|
+
shade: 0.2,
|
945
|
+
maxmin: true,
|
946
|
+
shadeClose: true,
|
947
|
+
area: [openWH[0] + 'px', openWH[1] + 'px'],
|
948
|
+
offset: [openWH[2] + 'px', openWH[3] + 'px'],
|
949
|
+
content: content,
|
950
|
+
});
|
951
|
+
$(window).on("resize", function () {
|
952
|
+
layer.full(sindex);
|
953
|
+
});
|
954
|
+
}
|
955
|
+
|
1008
956
|
function month(id) {
|
1009
957
|
var content = miniPage.getHrefContent('/missions/plans/new_month?business_id=' + id);
|
1010
958
|
var openWH = miniPage.getOpenWidthHeight();
|
@@ -1,7 +1,7 @@
|
|
1
1
|
json.data do
|
2
2
|
json.array! @data do |d|
|
3
3
|
json.value d.id
|
4
|
-
json.name "#{d.business.number} / #{d.business.department&.school&.name.to_s}#{d.business.department&.name.to_s} / #{d.business.name} / #{d.business.last_follow_up&.actual_amount}万 /
|
4
|
+
json.name "#{d.business.number} / #{d.business.department&.school&.name.to_s}#{d.business.department&.name.to_s} / #{d.business.name} / #{d.business.last_follow_up&.actual_amount}万 / #{d.business.last_follow_up&.return_money}万 /#{d.date_at.to_s(:date)}"
|
5
5
|
end
|
6
6
|
end
|
7
7
|
json.count @data.size
|
@@ -2,7 +2,7 @@
|
|
2
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>
|
@@ -33,6 +33,7 @@
|
|
33
33
|
</script>
|
34
34
|
<script type="text/html" id="currentTableBarmoney_plan">
|
35
35
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
|
36
|
+
<a class="layui-btn layui-btn-danger layui-btn-xs data-count-edit" lay-event="delete">删除</a>
|
36
37
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="apply">开票申请</a>
|
37
38
|
<!-- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">催款提醒</a> -->
|
38
39
|
|
@@ -76,7 +77,7 @@
|
|
76
77
|
}, {
|
77
78
|
field: 'business_name',
|
78
79
|
width: 150,
|
79
|
-
title: '
|
80
|
+
title: '商机名称'
|
80
81
|
}, {
|
81
82
|
field: 'school',
|
82
83
|
width: 180,
|
@@ -130,6 +131,7 @@
|
|
130
131
|
field: 'created_at',
|
131
132
|
width: 170,
|
132
133
|
title: '添加计划时间',
|
134
|
+
sort: true,
|
133
135
|
}, {
|
134
136
|
title: '操作',
|
135
137
|
minWidth: 200,
|
@@ -174,12 +176,7 @@
|
|
174
176
|
|
175
177
|
form.on('submit(reset_business_search)', function(data) {
|
176
178
|
var field = data.field;
|
177
|
-
form.val('
|
178
|
-
area: "",
|
179
|
-
date: "",
|
180
|
-
staff_id: "",
|
181
|
-
clazz: "",
|
182
|
-
professional_title: "",
|
179
|
+
form.val('search_plans', {
|
183
180
|
school: "",
|
184
181
|
business: ""
|
185
182
|
});
|
@@ -245,6 +242,13 @@
|
|
245
242
|
$(window).on("resize", function() {
|
246
243
|
layer.full(sindex);
|
247
244
|
});
|
245
|
+
} else if (obj.event == 'delete') {
|
246
|
+
layer.confirm('确定删除商机' + data.business_name + "的回款计划", function (index) {
|
247
|
+
request.delete('missions/money_plans/' + data.id, {}, function (res) {
|
248
|
+
layer.close(index);
|
249
|
+
table.reload("money_plan_table");
|
250
|
+
})
|
251
|
+
});
|
248
252
|
}
|
249
253
|
});
|
250
254
|
|
@@ -1,10 +1,18 @@
|
|
1
|
+
<%= Gon::Base.render_data %>
|
1
2
|
<div style="padding:10px">
|
2
3
|
<div class="layui-form layuimini-form" lay-filter="searchform">
|
3
4
|
<div class="layui-form-item">
|
4
|
-
<label class="layui-form-label required" style="width: 80px !important;"
|
5
|
+
<label class="layui-form-label required" style="width: 80px !important;">商机名称:</label>
|
6
|
+
<% if @business.present? %>
|
7
|
+
<div class="layui-input-inline" style="line-height: 38px;">
|
8
|
+
<%= @business.name %>
|
9
|
+
</div>
|
10
|
+
<% else %>
|
5
11
|
<div class="layui-input-inline">
|
6
12
|
<div id="business" style="width:600px;"></div>
|
7
13
|
</div>
|
14
|
+
<% end %>
|
15
|
+
|
8
16
|
</div>
|
9
17
|
<div class="layui-form-item">
|
10
18
|
<div class="layui-inline">
|
@@ -22,7 +30,7 @@
|
|
22
30
|
<div class="layui-inline">
|
23
31
|
<label class="layui-form-label required" style="width: 110px;">计划回款时间:</label>
|
24
32
|
<div class="layui-input-inline">
|
25
|
-
<input type="text" name="date_at[0]" value="" class="layui-input" lay-verify="required" id="
|
33
|
+
<input type="text" name="date_at[0]" value="" class="layui-input" lay-verify="required" id="money_plan_date_at">
|
26
34
|
</div>
|
27
35
|
</div>
|
28
36
|
<div class="layui-inline">
|
@@ -86,19 +94,22 @@
|
|
86
94
|
form.render();
|
87
95
|
|
88
96
|
laydate.render({
|
89
|
-
elem: '#
|
97
|
+
elem: '#money_plan_date_at',
|
90
98
|
});
|
91
99
|
|
92
|
-
|
93
|
-
|
94
|
-
|
100
|
+
|
101
|
+
if (gon.business_id_source) {
|
102
|
+
var business_id = gon.business_id_source;
|
103
|
+
} else {
|
104
|
+
var business_id = "";
|
105
|
+
var business_select = selectInput.render({
|
95
106
|
elem: '#business',
|
96
107
|
name: 'bussiness_name', // 渲染的input的name值
|
97
108
|
layFilter: 'test', //同layui form参数lay-filter
|
98
109
|
layVerType: 'tips', // 同layui form参数lay-verType
|
99
110
|
layReqText: '请填写文本', //同layui form参数lay-ReqText
|
100
111
|
hasSelectIcon: false,
|
101
|
-
placeholder: '
|
112
|
+
placeholder: '请输入商机名称、客户名称或合同编号', // 渲染的inputplaceholder值
|
102
113
|
remoteSearch: true, // 是否启用远程搜索 默认是false,和远程搜索回调保存同步
|
103
114
|
remoteMethod: function (value, cb) { // 远程搜索的回调函数
|
104
115
|
if (!value) {
|
@@ -114,7 +125,7 @@
|
|
114
125
|
})
|
115
126
|
}
|
116
127
|
});
|
117
|
-
|
128
|
+
}
|
118
129
|
|
119
130
|
var num = 0;
|
120
131
|
$("#addInput").on("click", function() {
|
@@ -132,7 +143,12 @@
|
|
132
143
|
|
133
144
|
form.on('submit(saveBtn)', function(data) {
|
134
145
|
data.field.num = num;
|
135
|
-
|
146
|
+
if (gon.business_id_source == "") {
|
147
|
+
data.field.business_id = business_select.getValue() || business_id;
|
148
|
+
} else {
|
149
|
+
data.field.business_id = business_id;
|
150
|
+
}
|
151
|
+
|
136
152
|
if (data.field.business_id == '') {
|
137
153
|
layer.msg('请选择合同')
|
138
154
|
return false;
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div style="padding:10px">
|
3
3
|
<div class="layui-form layuimini-form" lay-filter="searchform">
|
4
4
|
<div class="layui-form-item">
|
5
|
-
<label class="layui-form-label required" style="width: 80px !important;"
|
5
|
+
<label class="layui-form-label required" style="width: 80px !important;">商机名称:</label>
|
6
6
|
<div class="layui-input-inline">
|
7
7
|
<%= hidden_field_tag :id, @money_plan.id %>
|
8
8
|
<div id="business" style="line-height:38px;">
|