educode_sales 1.10.29 → 1.10.31
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/contracts_controller.rb +17 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +1 -1
- data/app/controllers/educode_sales/money_plans_controller.rb +20 -0
- data/app/views/educode_sales/businesses/edit_follow_record.html.erb +48 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +0 -3
- data/app/views/educode_sales/contracts/_list.html.erb +31 -1
- data/app/views/educode_sales/ideas/_index.html.erb +6 -2
- data/app/views/educode_sales/money_plans/_index.html.erb +33 -3
- data/app/views/educode_sales/money_plans/index.json.jbuilder +6 -0
- data/app/views/educode_sales/teachers/_index.html.erb +3 -1
- data/lib/educode_sales/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c50f4a81ef08d88a240f765076b16084ce5bba548f47b95b6d39fd925415194e
|
4
|
+
data.tar.gz: 63383b652e3dde1d55bb984050643cb10f9f496d343bd2ee5713de1c5815823f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37b0e90d7eb6706824767e754501cd3c41531ef6d5fbf506e0808d5fc7714a61f1b4fe6cf86328ca2dc5f116dc646031d74bf3b58ac52642f0ecc98f37414edc
|
7
|
+
data.tar.gz: 61ff8dba4f84ce8ab9c91d4914edbacd0bfc666245b395e20356c4c493c060baf5cfa2e4fb574c9c19e3a2c8866da471d1bcd06a8eb24dc8ca2535e39acd4cd6
|
@@ -77,6 +77,23 @@ module EducodeSales
|
|
77
77
|
@businesses = @businesses.joins(follow_ups: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x_id).where.not("educode_sales_money_plans.clazz!= 1").where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", date[0] + " 00:00:00", date[1] + " 23:59:59").distinct
|
78
78
|
end
|
79
79
|
|
80
|
+
if params[:q].present? && params[:q][:property].present?
|
81
|
+
# 客户类型
|
82
|
+
@businesses = @businesses.joins(department: [school: :school_tags]).where("school_tags.id = ?", params[:q][:property])
|
83
|
+
end
|
84
|
+
|
85
|
+
if params[:q] && params[:q][:reception_at].present?
|
86
|
+
date = params[:q][:reception_at].split(" - ")
|
87
|
+
@businesses = @businesses.joins("
|
88
|
+
JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
|
89
|
+
").where("educode_sales_follow_ups.reception_at >= ? AND educode_sales_follow_ups.reception_at <= ?", date[0], date[1])
|
90
|
+
end
|
91
|
+
|
92
|
+
if params[:q] && params[:q][:p_deploy_time].present?
|
93
|
+
date = params[:q][:p_deploy_time].split(" - ")
|
94
|
+
@businesses = @businesses.where("p_deploy_time >= ? AND p_deploy_time <= ?", date[0], date[1])
|
95
|
+
end
|
96
|
+
|
80
97
|
if params[:q] && params[:q][:bidded_date].present?
|
81
98
|
date = params[:q][:bidded_date].split(" - ")
|
82
99
|
@businesses = @businesses.joins("
|
@@ -189,7 +189,7 @@ module EducodeSales
|
|
189
189
|
end
|
190
190
|
business.update(last_follow_up: business.follow_ups.last, return_money: MoneyPlan.where(clazz: '实际回款', follow_up_id: business.follow_ups.last&.id).sum(:amount))
|
191
191
|
# 合同里签到日期全同步到最新跟进
|
192
|
-
follow_up.contract_date_lists.update_all(
|
192
|
+
follow_up.contract_date_lists.update_all(follow_up_id: business.follow_ups.last.id) if business.follow_ups.last.present?
|
193
193
|
end
|
194
194
|
render_success
|
195
195
|
else
|
@@ -29,6 +29,14 @@ module EducodeSales
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
if params[:q].present? && params[:q][:staff_manages].present?
|
33
|
+
# 销售经理
|
34
|
+
@money_plans = @money_plans.joins(:business).joins("
|
35
|
+
LEFT JOIN educode_sales_follow_ups AS last_follow_up ON educode_sales_businesses.last_follow_up_id = last_follow_up.id AND last_follow_up.deleted_at IS NULL
|
36
|
+
LEFT JOIN educode_sales_assign_follow_ups ON educode_sales_assign_follow_ups.follow_up_id = last_follow_up.id").
|
37
|
+
where("(educode_sales_assign_follow_ups.id IS NOT NULL AND educode_sales_assign_follow_ups.staff_id = ?) OR (educode_sales_assign_follow_ups.id IS NULL AND educode_sales_businesses.staff_id = ?)", params[:q][:staff_manages], params[:q][:staff_manages])
|
38
|
+
end
|
39
|
+
|
32
40
|
if params[:q].present? && params[:q][:business].present?
|
33
41
|
@money_plans = @money_plans.where("educode_sales_businesses.name like ?", "%#{params[:q][:business]}%")
|
34
42
|
end
|
@@ -36,6 +44,16 @@ module EducodeSales
|
|
36
44
|
@money_plans = @money_plans.joins(business: :school).where("schools.name like ?", "%#{params[:q][:school]}%")
|
37
45
|
end
|
38
46
|
|
47
|
+
if params[:q].present? && params[:q][:property].present?
|
48
|
+
# 客户类型
|
49
|
+
@money_plans = @money_plans.joins(business: [department: [school: :school_tags]]).where("school_tags.id = ?", params[:q][:property])
|
50
|
+
end
|
51
|
+
|
52
|
+
if params[:q] && params[:q][:date_at].present?
|
53
|
+
date = params[:q][:date_at].split(" - ")
|
54
|
+
@money_plans = @money_plans.where("date_at >= ? AND date_at <= ?", date[0], date[1])
|
55
|
+
end
|
56
|
+
|
39
57
|
if params[:sort].present? && params[:sort][:field]
|
40
58
|
@money_plans = @money_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
41
59
|
else
|
@@ -53,6 +71,8 @@ module EducodeSales
|
|
53
71
|
format.html do
|
54
72
|
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
55
73
|
@staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]}
|
74
|
+
|
75
|
+
gon.staffs = Staff.joins(:user).where(job_type: common.id).map { |d| {name: d.user.real_name, value: d.id } }
|
56
76
|
gon.edit_money_plan = can?(:update, EducodeSales::MoneyPlan)
|
57
77
|
gon.edit_money_plan_self = can?(:update_self, EducodeSales::MoneyPlan)
|
58
78
|
gon.staff_id = @current_admin.id
|
@@ -34,6 +34,21 @@
|
|
34
34
|
</div>
|
35
35
|
</div>
|
36
36
|
<br>
|
37
|
+
<div class="layui-inline">
|
38
|
+
<label class="layui-form-label">计划A类时间</label>
|
39
|
+
<div class="layui-input-inline">
|
40
|
+
<input type="text" class="layui-input" name="plan_a_date" autocomplete="off" id="plan_a_date"
|
41
|
+
value="<%= @follow_up&.plan_a_date %>"
|
42
|
+
placeholder="请选择日期">
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
<div class="layui-inline">
|
46
|
+
<label class="layui-form-label">计划A类金额(万)</label>
|
47
|
+
<div class="layui-input-inline">
|
48
|
+
<input name="plan_a_money" class="layui-input" value="<%= @follow_up&.plan_a_money.to_f.round(6) %>">
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
<br>
|
37
52
|
<div class="layui-inline">
|
38
53
|
<label class="layui-form-label">计划投标时间</label>
|
39
54
|
<div class="layui-input-inline">
|
@@ -41,6 +56,28 @@
|
|
41
56
|
id="invitation_at_edit" placeholder="请选择日期">
|
42
57
|
</div>
|
43
58
|
</div>
|
59
|
+
<div class="layui-inline">
|
60
|
+
<label class="layui-form-label">计划投标金额(万)</label>
|
61
|
+
<div class="layui-input-inline">
|
62
|
+
<input name="invitation_money" class="layui-input" value="<%= @follow_up&.invitation_money.to_f.round(6) %>">
|
63
|
+
</div>
|
64
|
+
</div>
|
65
|
+
</br>
|
66
|
+
<div class="layui-inline">
|
67
|
+
<label class="layui-form-label">计划回款时间</label>
|
68
|
+
<div class="layui-input-inline">
|
69
|
+
<input type="text" class="layui-input" name="plan_return_date" autocomplete="off" id="plan_return_date"
|
70
|
+
value="<%= @follow_up&.plan_return_date %>"
|
71
|
+
placeholder="请选择日期">
|
72
|
+
</div>
|
73
|
+
</div>
|
74
|
+
<div class="layui-inline">
|
75
|
+
<label class="layui-form-label">计划回款金额(万)</label>
|
76
|
+
<div class="layui-input-inline">
|
77
|
+
<input name="plan_return_money" class="layui-input" value="<%= @follow_up&.plan_return_money.to_f.round(6) %>">
|
78
|
+
</div>
|
79
|
+
</div>
|
80
|
+
</br>
|
44
81
|
<div class="layui-inline">
|
45
82
|
<label class="layui-form-label">中标时间</label>
|
46
83
|
<div class="layui-input-inline">
|
@@ -237,6 +274,14 @@
|
|
237
274
|
type: 'year'
|
238
275
|
})
|
239
276
|
|
277
|
+
laydate.render({
|
278
|
+
elem: '#plan_a_date'
|
279
|
+
})
|
280
|
+
|
281
|
+
laydate.render({
|
282
|
+
elem: '#plan_return_date'
|
283
|
+
})
|
284
|
+
|
240
285
|
laydate.render({
|
241
286
|
elem: '#reception_at_edit'
|
242
287
|
});
|
@@ -354,4 +399,7 @@
|
|
354
399
|
width: 300px;
|
355
400
|
!important;
|
356
401
|
}
|
402
|
+
.layui-form-label {
|
403
|
+
width: 120px;
|
404
|
+
}
|
357
405
|
</style>
|
@@ -87,6 +87,24 @@
|
|
87
87
|
</select>
|
88
88
|
</div>
|
89
89
|
</div>
|
90
|
+
<div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
91
|
+
<label class="layui-form-label">客户类型</label>
|
92
|
+
<div class="layui-input-inline">
|
93
|
+
<%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
|
94
|
+
</div>
|
95
|
+
</div>
|
96
|
+
<div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
97
|
+
<label class="layui-form-label">验收时间</label>
|
98
|
+
<div class="layui-input-inline">
|
99
|
+
<input type="text" class="layui-input" id="reception_at" name="reception_at" placeholder=" - " autocomplete="off">
|
100
|
+
</div>
|
101
|
+
</div>
|
102
|
+
<div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
103
|
+
<label class="layui-form-label">部署时间</label>
|
104
|
+
<div class="layui-input-inline">
|
105
|
+
<input type="text" class="layui-input" id="p_deploy_time" name="p_deploy_time" placeholder=" - " autocomplete="off">
|
106
|
+
</div>
|
107
|
+
</div>
|
90
108
|
<div class="layui-inline">
|
91
109
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
92
110
|
</button>
|
@@ -110,7 +128,9 @@
|
|
110
128
|
<% if can? :assign_contract, EducodeSales::Business %>
|
111
129
|
<a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="assign">指派售后</a>
|
112
130
|
<% end %>
|
113
|
-
|
131
|
+
<% if can? :new_sales_detail, EducodeSales::Business %>
|
132
|
+
<a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="add_sales">添加销售明细</a>
|
133
|
+
<% end %>
|
114
134
|
|
115
135
|
</script>
|
116
136
|
|
@@ -139,6 +159,16 @@
|
|
139
159
|
range: true
|
140
160
|
});
|
141
161
|
|
162
|
+
laydate.render({
|
163
|
+
elem: '#reception_at',
|
164
|
+
range: true
|
165
|
+
});
|
166
|
+
|
167
|
+
laydate.render({
|
168
|
+
elem: '#p_deploy_time',
|
169
|
+
range: true
|
170
|
+
});
|
171
|
+
|
142
172
|
laydate.render({
|
143
173
|
elem: '#bidded_date',
|
144
174
|
range: true,
|
@@ -102,8 +102,12 @@
|
|
102
102
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="idea_recycle_s">恢复</a>
|
103
103
|
<% end %>
|
104
104
|
{{# }else{}}
|
105
|
-
|
106
|
-
|
105
|
+
<% if can? :assign, EducodeSales::Idea %>
|
106
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign">指派协作人</a>
|
107
|
+
<%end %>
|
108
|
+
<% if can? :assign_sale_staff, EducodeSales::Idea %>
|
109
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign_sale_staff">指派方案经理</a>
|
110
|
+
<% end %>
|
107
111
|
<% if can? :add_follow, EducodeSales::Idea %>
|
108
112
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-add_follow" lay-event="add_follows">添加跟进</a>
|
109
113
|
<% end %>
|
@@ -14,6 +14,24 @@
|
|
14
14
|
<input type="text" name="school" class="layui-input">
|
15
15
|
</div>
|
16
16
|
</div>
|
17
|
+
<div class="layui-inline">
|
18
|
+
<label class="layui-form-label">销售经理</label>
|
19
|
+
<div class="layui-input-inline">
|
20
|
+
<div id="plan_staff_manages" style="width: 190px;"></div>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
<div class="layui-inline">
|
24
|
+
<label class="layui-form-label">客户类型</label>
|
25
|
+
<div class="layui-input-inline">
|
26
|
+
<%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
<div class="layui-inline">
|
30
|
+
<label class="layui-form-label" style="width: 120px">计划回款时间</label>
|
31
|
+
<div class="layui-input-inline">
|
32
|
+
<input type="text" name="date_at" class="layui-input" id="date">
|
33
|
+
</div>
|
34
|
+
</div>
|
17
35
|
<div class="layui-inline">
|
18
36
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
19
37
|
</button>
|
@@ -47,10 +65,11 @@
|
|
47
65
|
</script>
|
48
66
|
|
49
67
|
<script>
|
50
|
-
layui.use(['form', 'table', 'miniPage', 'element', 'request'], function() {
|
68
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'request', 'xmSelect'], function() {
|
51
69
|
var $ = layui.jquery,
|
52
70
|
form = layui.form,
|
53
71
|
request = layui.request,
|
72
|
+
xmSelect = layui.xmSelect,
|
54
73
|
miniPage = layui.miniPage;
|
55
74
|
laydate = layui.laydate;
|
56
75
|
table = layui.table;
|
@@ -61,7 +80,12 @@
|
|
61
80
|
});
|
62
81
|
|
63
82
|
|
64
|
-
|
83
|
+
var staff_manages_list = xmSelect.render({
|
84
|
+
el: '#plan_staff_manages',
|
85
|
+
data: gon.staffs,
|
86
|
+
filterable: true,
|
87
|
+
radio: true,
|
88
|
+
})
|
65
89
|
table.render({
|
66
90
|
elem: '#money_plan_table',
|
67
91
|
url: '/missions/money_plans',
|
@@ -89,6 +113,11 @@
|
|
89
113
|
field: 'school',
|
90
114
|
width: 180,
|
91
115
|
title: '客户名称'
|
116
|
+
},
|
117
|
+
{
|
118
|
+
field: 'property',
|
119
|
+
width: 150,
|
120
|
+
title: '客户类型',
|
92
121
|
}, {
|
93
122
|
field: 'staff_manages',
|
94
123
|
width: 120,
|
@@ -176,7 +205,8 @@
|
|
176
205
|
|
177
206
|
// 监听搜索操作
|
178
207
|
form.on('submit(search_teachers)', function(data) {
|
179
|
-
search = data.field
|
208
|
+
search = data.field;
|
209
|
+
search.staff_manages = staff_manages_list.getValue('valueStr');
|
180
210
|
table.reload('money_plan_table', {
|
181
211
|
page: {
|
182
212
|
curr: 1
|
@@ -34,6 +34,12 @@ json.data do
|
|
34
34
|
end
|
35
35
|
json.claim_num d['claim_num']
|
36
36
|
|
37
|
+
if d.business.department&.school
|
38
|
+
json.property d.business.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
|
39
|
+
else
|
40
|
+
json.property ''
|
41
|
+
end
|
42
|
+
|
37
43
|
json.return_money (d['return_money'] || 0).round(6)
|
38
44
|
json.residue_money ((d.amount - d['return_money'].to_f) > 0 ? d.amount - d['return_money'].to_f : 0).round(6)
|
39
45
|
if d['claim_num'] > 0
|
@@ -122,7 +122,9 @@
|
|
122
122
|
<% if can? :create, EducodeSales::TeacherFollow %>
|
123
123
|
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add_event">添加跟进记录</a>
|
124
124
|
<% end %>
|
125
|
-
|
125
|
+
<% if can? :assign, EducodeSales::Teacher %>
|
126
|
+
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign">指派生态经理</a>
|
127
|
+
<% end %>
|
126
128
|
<% if @more %>
|
127
129
|
<a class="layui-btn-xs data-count-edit more-btn" data-name={{d.name}} data-id={{d.id}}>更多<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
|
128
130
|
<% end %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: educode_sales
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.10.
|
4
|
+
version: 1.10.31
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- anke1460
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-07-
|
11
|
+
date: 2023-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|