educode_sales 1.10.29 → 1.10.31
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/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
|