educode_sales 1.10.30 → 1.10.33
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 +14 -0
- data/app/controllers/educode_sales/contracts_controller.rb +17 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +4 -0
- data/app/controllers/educode_sales/money_plan_records_controller.rb +40 -29
- data/app/controllers/educode_sales/money_plans_controller.rb +20 -0
- data/app/controllers/educode_sales/sale_trends_controller.rb +5 -2
- data/app/views/educode_sales/businesses/_follows.html.erb +11 -0
- data/app/views/educode_sales/businesses/index.html.erb +31 -4
- data/app/views/educode_sales/contracts/_list.html.erb +31 -1
- data/app/views/educode_sales/follow_ups/index.json.jbuilder +5 -0
- data/app/views/educode_sales/ideas/_index.html.erb +6 -2
- data/app/views/educode_sales/money_plan_records/_index.html.erb +17 -1
- data/app/views/educode_sales/money_plan_records/edit.html.erb +38 -1
- data/app/views/educode_sales/money_plan_records/index.json.jbuilder +5 -0
- data/app/views/educode_sales/money_plans/_index.html.erb +33 -3
- data/app/views/educode_sales/money_plans/index.json.jbuilder +7 -1
- data/app/views/educode_sales/teachers/_index.html.erb +3 -1
- data/lib/educode_sales/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22b7976d2189b10d3280296023ca6d52fbb050307cf59d6b83c81547d5fee47e
|
4
|
+
data.tar.gz: 4c81b96887d55e9bc415d2a0f0359884cb196a1dc900d9fc56b837585f6f882b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3697ec424b22d9ed64d8aa5d8e10665c719826651441a597376170287e0b9e54b565ec6ec0d5c545755a6899f5ea9ce5d530ab92daf36a92f843ffbd9d035f47
|
7
|
+
data.tar.gz: c8a57001d38e3ca5f824167565b668228de6e089be99b44bd07b92732a6971fb3aa296b2abd0f945311b01dfa019887faf7a0a1e60b1924a0560d84b7979c329
|
@@ -293,6 +293,20 @@ module EducodeSales
|
|
293
293
|
JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
|
294
294
|
").where("educode_sales_follow_ups.invitation_at > ? AND educode_sales_follow_ups.invitation_at < ?", date[0] + '00:00:00', date[1] + '23:59:59')
|
295
295
|
end
|
296
|
+
|
297
|
+
if params[:q].present? && params[:q][:plan_return_date].present?
|
298
|
+
date = params[:q][:plan_return_date].split(" - ")
|
299
|
+
@businesses = @businesses.joins("
|
300
|
+
JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
|
301
|
+
").where("educode_sales_follow_ups.plan_return_date > ? AND educode_sales_follow_ups.plan_return_date < ?", date[0] + '00:00:00', date[1] + '23:59:59')
|
302
|
+
end
|
303
|
+
|
304
|
+
if params[:q].present? && params[:q][:plan_a_date].present?
|
305
|
+
date = params[:q][:plan_a_date].split(" - ")
|
306
|
+
@businesses = @businesses.joins("
|
307
|
+
JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
|
308
|
+
").where("educode_sales_follow_ups.plan_a_date > ? AND educode_sales_follow_ups.plan_a_date < ?", date[0] + '00:00:00', date[1] + '23:59:59')
|
309
|
+
end
|
296
310
|
|
297
311
|
# 根据编号获取商机
|
298
312
|
if params[:q].present? && params[:q][:number].present?
|
@@ -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("
|
@@ -55,6 +55,10 @@ module EducodeSales
|
|
55
55
|
date = params[:q][:follows_date].split(" - ")
|
56
56
|
@follow_ups = @follow_ups.where("educode_sales_follow_ups.created_at > ? AND educode_sales_follow_ups.created_at < ?", date[0], date[1] + '23:59:59')
|
57
57
|
end
|
58
|
+
if params[:q].present? && params[:q][:property].present?
|
59
|
+
# 客户类型
|
60
|
+
@follow_ups = @follow_ups.joins(business: [department: [school: :school_tags]]).where("school_tags.id = ?", params[:q][:property])
|
61
|
+
end
|
58
62
|
if params[:q].present? && params[:q][:staff_id].present?
|
59
63
|
@follow_ups = @follow_ups.where(staff_id: params[:q][:staff_id])
|
60
64
|
end
|
@@ -57,6 +57,11 @@ module EducodeSales
|
|
57
57
|
|
58
58
|
end
|
59
59
|
|
60
|
+
if params[:q].present? && params[:q][:property].present?
|
61
|
+
# 客户类型
|
62
|
+
@money_plan_records = @money_plan_records.joins(business: [department: [school: :school_tags]]).where("school_tags.id = ?", params[:q][:property])
|
63
|
+
end
|
64
|
+
|
60
65
|
if params[:q].present? && params[:q][:staff_manages].present?
|
61
66
|
# 销售经理
|
62
67
|
@money_plan_records = @money_plan_records.joins(:business).joins("
|
@@ -161,34 +166,6 @@ module EducodeSales
|
|
161
166
|
businesses << business
|
162
167
|
money_plan_record.update(business_id: business.id)
|
163
168
|
# business.update(return_money: claim.money_plan.money_plan_claims.sum(:amount))
|
164
|
-
|
165
|
-
|
166
|
-
# # 生成跟进信息
|
167
|
-
# last_follow_up = business.last_follow_up
|
168
|
-
# if last_follow_up.present?
|
169
|
-
# follow_up = last_follow_up.dup
|
170
|
-
|
171
|
-
# follow_up.description = "认领了回款记录"
|
172
|
-
|
173
|
-
# follow_up.staff = @current_admin
|
174
|
-
|
175
|
-
# last_follow_up.assign_follow_ups.each do |d|
|
176
|
-
# follow_up.assign_follow_ups.build(staff_id: d.staff_id)
|
177
|
-
# end
|
178
|
-
|
179
|
-
# if follow_up.save!
|
180
|
-
# last_follow_up.key_person.each do |d|
|
181
|
-
# key_person = d.dup
|
182
|
-
# key_person.follow_up_id = follow_up.id
|
183
|
-
# key_person.save
|
184
|
-
# end
|
185
|
-
# last_follow_up.money_plans.each do |d|
|
186
|
-
# d.follow_up_id = follow_up.id
|
187
|
-
# d.save
|
188
|
-
# end
|
189
|
-
# business.update(last_follow_up_id: follow_up.id)
|
190
|
-
# end
|
191
|
-
# end
|
192
169
|
end
|
193
170
|
end
|
194
171
|
businesses.uniq.each do |d|
|
@@ -198,6 +175,40 @@ module EducodeSales
|
|
198
175
|
staff_manage_ids = d&.last_follow_up&.assign_follow_ups.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : [d.staff_id]
|
199
176
|
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '回款计划')&.id
|
200
177
|
EducodeSales::SalePlan.where(month: Time.now.beginning_of_month, business: d, staff_id: staff_manage_ids, common_id: common_id).update_all(finish_rate: 100)
|
178
|
+
|
179
|
+
|
180
|
+
# 生成跟进信息
|
181
|
+
last_follow_up = d.last_follow_up
|
182
|
+
if last_follow_up.present?
|
183
|
+
follow_up = last_follow_up.dup
|
184
|
+
follow_up.description = "认领了回款记录"
|
185
|
+
follow_up.staff = @current_admin
|
186
|
+
|
187
|
+
last_follow_up.assign_follow_ups.each do |d|
|
188
|
+
follow_up.assign_follow_ups.build(staff_id: d.staff_id)
|
189
|
+
end
|
190
|
+
|
191
|
+
if follow_up.save!
|
192
|
+
last_follow_up.key_person.each do |d|
|
193
|
+
key_person = d.dup
|
194
|
+
key_person.follow_up_id = follow_up.id
|
195
|
+
key_person.save
|
196
|
+
end
|
197
|
+
|
198
|
+
last_follow_up.money_plans.each do |d|
|
199
|
+
money = d.dup
|
200
|
+
money.staff = @current_admin
|
201
|
+
money.follow_up_id = follow_up.id
|
202
|
+
money.save
|
203
|
+
end
|
204
|
+
|
205
|
+
# 合同里签到日期全同步到最新跟进
|
206
|
+
last_follow_up.contract_date_lists.update_all(follow_up_id: follow_up.id)
|
207
|
+
|
208
|
+
follow_up.follow_up_trends.create(clazz: '跟进信息', content: "认领了回款记录", staff_id: @current_admin.id)
|
209
|
+
d.update(last_follow_up_id: follow_up.id)
|
210
|
+
end
|
211
|
+
end
|
201
212
|
end
|
202
213
|
render_success
|
203
214
|
end
|
@@ -205,7 +216,7 @@ module EducodeSales
|
|
205
216
|
private
|
206
217
|
|
207
218
|
def money_plan_record_params
|
208
|
-
params.permit(:amount, :payer_name, :date_at)
|
219
|
+
params.permit(:amount, :payer_name, :date_at, :business_id)
|
209
220
|
end
|
210
221
|
end
|
211
222
|
end
|
@@ -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
|
@@ -23,7 +23,9 @@ module EducodeSales
|
|
23
23
|
@service_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.stage_id IN (?)", s_stage_ids).sum(:total_amount).round(2)
|
24
24
|
@actual_service_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.stage_id IN (?)", s_stage_ids).sum(:actual_amount).round(2)
|
25
25
|
|
26
|
-
|
26
|
+
|
27
|
+
@return_amount = EducodeSales::MoneyPlanRecord.joins(:money_plan_claims).sum(:amount).round(2)
|
28
|
+
# @return_amount = Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).sum(:amount).round(2)
|
27
29
|
# # @return_amount = total_return[0]['return_money']&.round(2) || 0
|
28
30
|
# @receivable_amount = @goal_amount - @return_amount
|
29
31
|
|
@@ -50,8 +52,9 @@ module EducodeSales
|
|
50
52
|
s_stage_ids = Common.where(clazz: '商机阶段', name: ['已签单', '已验收', '回款中', '服务中', '已结束']).pluck(:id)
|
51
53
|
@service_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.signed_date >= ? AND educode_sales_follow_ups.signed_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{@year}-01-01", "#{@year}-12-31", s_stage_ids).sum(:total_amount).round(2)
|
52
54
|
@actual_service_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.signed_date >= ? AND educode_sales_follow_ups.signed_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{@year}-01-01", "#{@year}-12-31", s_stage_ids).sum(:actual_amount).round(2)
|
53
|
-
@return_amount = Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", year_time, year_over_time).sum(:amount).round(2)
|
55
|
+
# @return_amount = Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", year_time, year_over_time).sum(:amount).round(2)
|
54
56
|
|
57
|
+
@return_amount = EducodeSales::MoneyPlanRecord.joins(:money_plan_claims).where("educode_sales_money_plan_records.date_at >= ? AND educode_sales_money_plan_records.date_at <= ? ", year_time, year_over_time).sum(:amount).round(2)
|
55
58
|
# 往年累计已中标合同
|
56
59
|
# @former_goal_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.bidded_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{@year}-12-31", stage_ids).sum(:actual_amount).round(2)
|
57
60
|
# # 往年累计已回款
|
@@ -13,6 +13,12 @@
|
|
13
13
|
<input type="text" name="department" 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 "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
|
20
|
+
</div>
|
21
|
+
</div>
|
16
22
|
<div class="layui-inline">
|
17
23
|
<label class="layui-form-label">销售人员</label>
|
18
24
|
<div class="layui-input-inline">
|
@@ -121,6 +127,11 @@
|
|
121
127
|
title: '单位',
|
122
128
|
templet:'#school'
|
123
129
|
},
|
130
|
+
{
|
131
|
+
field: 'property',
|
132
|
+
width: 150,
|
133
|
+
title: '客户类型',
|
134
|
+
},
|
124
135
|
{
|
125
136
|
field: 'clazz',
|
126
137
|
width: 80,
|
@@ -80,11 +80,12 @@
|
|
80
80
|
</div>
|
81
81
|
</div>
|
82
82
|
<div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
83
|
-
<label class="layui-form-label">计划投标时间</label>
|
83
|
+
<label class="layui-form-label" style="width: 120px;">计划投标时间</label>
|
84
84
|
<div class="layui-input-inline">
|
85
85
|
<input type="text" class="layui-input" id="invitation_at" name="invitation_at" placeholder=" - " autocomplete="off">
|
86
86
|
</div>
|
87
87
|
</div>
|
88
|
+
|
88
89
|
<div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
89
90
|
<label class="layui-form-label">中标时间</label>
|
90
91
|
<div class="layui-input-inline">
|
@@ -129,6 +130,18 @@
|
|
129
130
|
<%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
|
130
131
|
</div>
|
131
132
|
</div>
|
133
|
+
<div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
134
|
+
<label class="layui-form-label" style="width: 120px;">计划A类时间</label>
|
135
|
+
<div class="layui-input-inline">
|
136
|
+
<input type="text" class="layui-input" id="plan_a_date" name="plan_a_date" placeholder=" - " autocomplete="off">
|
137
|
+
</div>
|
138
|
+
</div>
|
139
|
+
<div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
|
140
|
+
<label class="layui-form-label" style="width: 120px;">计划回款时间</label>
|
141
|
+
<div class="layui-input-inline">
|
142
|
+
<input type="text" class="layui-input" id="plan_return_date" name="plan_return_date" placeholder=" - " autocomplete="off">
|
143
|
+
</div>
|
144
|
+
</div>
|
132
145
|
<div class="layui-inline">
|
133
146
|
<button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
|
134
147
|
</button>
|
@@ -265,7 +278,17 @@
|
|
265
278
|
range: true,
|
266
279
|
value: gon.bidded_date
|
267
280
|
});
|
268
|
-
|
281
|
+
|
282
|
+
laydate.render({
|
283
|
+
elem: '#plan_a_date',
|
284
|
+
range: true,
|
285
|
+
});
|
286
|
+
|
287
|
+
laydate.render({
|
288
|
+
elem: '#plan_return_date',
|
289
|
+
range: true,
|
290
|
+
});
|
291
|
+
|
269
292
|
|
270
293
|
form.on('select(source_id_select)', function(data){
|
271
294
|
setSourceWay(data.value);
|
@@ -535,6 +558,7 @@
|
|
535
558
|
width: 150,
|
536
559
|
title: '计划A类金额',
|
537
560
|
sort: true,
|
561
|
+
totalRow: true,
|
538
562
|
hide: gon.filter.plan_a_money
|
539
563
|
},
|
540
564
|
{
|
@@ -549,6 +573,7 @@
|
|
549
573
|
width: 150,
|
550
574
|
title: '计划投标金额',
|
551
575
|
sort: true,
|
576
|
+
totalRow: true,
|
552
577
|
hide: gon.filter.invitation_money
|
553
578
|
},
|
554
579
|
{
|
@@ -563,6 +588,7 @@
|
|
563
588
|
width: 135,
|
564
589
|
title: '计划回款金额',
|
565
590
|
sort: true,
|
591
|
+
totalRow: true,
|
566
592
|
hide: gon.filter.plan_return_money
|
567
593
|
},
|
568
594
|
{
|
@@ -1119,8 +1145,9 @@
|
|
1119
1145
|
form.on('submit(reset_business_search)', function (data) {
|
1120
1146
|
var field = data.field;
|
1121
1147
|
form.val('search_form', {
|
1122
|
-
name: '', department: '', staff_id: '', business_type: '', business_step: '',
|
1123
|
-
place_id: '', date: '', area: '', invitation_at: '', business_year: '', number: ''
|
1148
|
+
name: '', department: '', staff_id: '', business_type: '', business_step: '', bidded_date: '', source_way: '',
|
1149
|
+
place_id: '', date: '', area: '', invitation_at: '', business_year: '', number: '', property: '', level_id: '', source_name: '',
|
1150
|
+
invitation_money: '', plan_a_date: '', plan_a_money: '', plan_return_date: '', plan_return_money: ''
|
1124
1151
|
})
|
1125
1152
|
business_type_list.setValue([])
|
1126
1153
|
business_step_list.setValue([])
|
@@ -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,
|
@@ -17,6 +17,11 @@ json.data do
|
|
17
17
|
json.tel d.key_person.pluck(:tel).select { |d| d.present? }.join("、")
|
18
18
|
json.key_people d.key_person.map { |d| d.name }.join("、")# key_people(teacher_ids)
|
19
19
|
|
20
|
+
if d.business.department&.school
|
21
|
+
json.property d.business.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
|
22
|
+
else
|
23
|
+
json.property ''
|
24
|
+
end
|
20
25
|
end
|
21
26
|
end
|
22
27
|
|
@@ -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 %>
|
@@ -26,6 +26,12 @@
|
|
26
26
|
<input type="text" name="school" class="layui-input">
|
27
27
|
</div>
|
28
28
|
</div>
|
29
|
+
<div class="layui-inline">
|
30
|
+
<label class="layui-form-label">客户类型</label>
|
31
|
+
<div class="layui-input-inline">
|
32
|
+
<%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
|
33
|
+
</div>
|
34
|
+
</div>
|
29
35
|
<div class="layui-inline">
|
30
36
|
<label class="layui-form-label required">匹配状态</label>
|
31
37
|
<div class="layui-input-inline">
|
@@ -140,6 +146,11 @@
|
|
140
146
|
width: 220,
|
141
147
|
title: '对应客户名称',
|
142
148
|
},
|
149
|
+
{
|
150
|
+
field: 'property',
|
151
|
+
width: 150,
|
152
|
+
title: '客户类型',
|
153
|
+
},
|
143
154
|
{
|
144
155
|
field: 'state',
|
145
156
|
width: 120,
|
@@ -205,7 +216,12 @@
|
|
205
216
|
clazz: "",
|
206
217
|
professional_title: "",
|
207
218
|
school: "",
|
208
|
-
business: ""
|
219
|
+
business: "",
|
220
|
+
property: "",
|
221
|
+
date_at: "",
|
222
|
+
amount: "",
|
223
|
+
payer_name: "",
|
224
|
+
state: ""
|
209
225
|
});
|
210
226
|
staff_manages_list.setValue([]);
|
211
227
|
return false;
|
@@ -3,7 +3,13 @@
|
|
3
3
|
<div class="layui-form-item">
|
4
4
|
<label class="layui-form-label" style="width: 80px !important;">合同名称:</label>
|
5
5
|
<div class="layui-input-inline" style="line-height: 38px;">
|
6
|
-
|
6
|
+
<% if @money_plan_record.business %>
|
7
|
+
<%= @money_plan_record.business&.name %>
|
8
|
+
<% else %>
|
9
|
+
<div id="business" style="width:600px;"></div>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
|
7
13
|
</div>
|
8
14
|
</div>
|
9
15
|
<div class="layui-form-item">
|
@@ -41,13 +47,44 @@
|
|
41
47
|
table = layui.table,
|
42
48
|
laydate = layui.laydate,
|
43
49
|
request = layui.request,
|
50
|
+
selectInput = layui.selectInput,
|
44
51
|
$ = layui.$;
|
45
52
|
form.render();
|
46
53
|
laydate.render({
|
47
54
|
elem: '#date_at',
|
48
55
|
});
|
56
|
+
|
57
|
+
if ($("#business").length > 0) {
|
58
|
+
var business_id = "";
|
59
|
+
var business_select = selectInput.render({
|
60
|
+
elem: '#business',
|
61
|
+
name: 'bussiness_name', // 渲染的input的name值
|
62
|
+
layFilter: 'test', //同layui form参数lay-filter
|
63
|
+
layVerType: 'tips', // 同layui form参数lay-verType
|
64
|
+
layReqText: '请填写文本', //同layui form参数lay-ReqText
|
65
|
+
hasSelectIcon: false,
|
66
|
+
placeholder: '请输入合同名称', // 渲染的inputplaceholder值
|
67
|
+
remoteSearch: true, // 是否启用远程搜索 默认是false,和远程搜索回调保存同步
|
68
|
+
remoteMethod: function(value, cb) { // 远程搜索的回调函数
|
69
|
+
if (!value) {
|
70
|
+
business_id = "";
|
71
|
+
return cb([]);
|
72
|
+
}
|
73
|
+
request.get('missions/search_contracts?q=' + value, {}, function(res) {
|
74
|
+
if (res.data.length == 0) {
|
75
|
+
business_select.emptyValue();
|
76
|
+
return cb([])
|
77
|
+
}
|
78
|
+
return cb(res)
|
79
|
+
})
|
80
|
+
}
|
81
|
+
});
|
82
|
+
}
|
49
83
|
|
50
84
|
form.on('submit(saveBtn)', function(data) {
|
85
|
+
if ($("#business").length > 0) {
|
86
|
+
data.field.business_id = business_select.getValue()
|
87
|
+
}
|
51
88
|
request.put("missions/money_plan_records/" + parent.id, data.field, function(res) {
|
52
89
|
layer.close(parent.sindex)
|
53
90
|
parent.table.reload('money_plan_record_table')
|
@@ -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
|
@@ -20,7 +20,7 @@ json.data do
|
|
20
20
|
json.signed_date d.business&.last_follow_up&.signed_date
|
21
21
|
json.actual_amount d.business&.last_follow_up&.actual_amount
|
22
22
|
json.rate d.business&.last_follow_up&.actual_amount ? (d.amount / d.business.last_follow_up.actual_amount * 100.0).round(2) : ''
|
23
|
-
json.staff_manages d.business&.last_follow_up&.assign_follow_ups.present? ? (d.business.last_follow_up.assign_follow_ups.map{ |d| d.staff
|
23
|
+
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
|
24
24
|
if d['claim_num'] > 0
|
25
25
|
if d['return_money'].to_f >= d.amount
|
26
26
|
json.state '已回款'
|
@@ -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.33
|
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-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -772,7 +772,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
772
772
|
- !ruby/object:Gem::Version
|
773
773
|
version: '0'
|
774
774
|
requirements: []
|
775
|
-
rubygems_version: 3.0.
|
775
|
+
rubygems_version: 3.0.0
|
776
776
|
signing_key:
|
777
777
|
specification_version: 4
|
778
778
|
summary: Summary of EducodeSales.
|