educode_sales 1.10.23 → 1.10.25
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/businesses_controller.rb +13 -0
- data/app/controllers/educode_sales/contracts_controller.rb +55 -0
- data/app/controllers/educode_sales/follow_ups_controller.rb +34 -0
- data/app/controllers/educode_sales/idea_follows_controller.rb +146 -0
- data/app/controllers/educode_sales/ideas_controller.rb +37 -0
- data/app/controllers/educode_sales/money_plan_records_controller.rb +14 -10
- data/app/controllers/educode_sales/money_plans_controller.rb +5 -3
- data/app/controllers/educode_sales/plans_controller.rb +28 -5
- data/app/helpers/educode_sales/sale_trends_helper.rb +11 -1
- data/app/models/educode_sales/common.rb +3 -1
- data/app/models/educode_sales/money_plan_claim.rb +1 -1
- data/app/models/educode_sales/permission.rb +2 -1
- data/app/models/educode_sales/sale_plan.rb +2 -0
- data/app/views/educode_sales/businesses/index.html.erb +123 -80
- data/app/views/educode_sales/ideas/_follows.html.erb +3 -2
- data/app/views/educode_sales/ideas/_index.html.erb +37 -7
- data/app/views/educode_sales/ideas/edit_follow_record.html.erb +67 -49
- data/app/views/educode_sales/ideas/follow_list.html.erb +252 -0
- data/app/views/educode_sales/ideas/follow_list.json.jbuilder +16 -0
- data/app/views/educode_sales/ideas/follow_ups.json.jbuilder +2 -1
- data/app/views/educode_sales/ideas/index.json.jbuilder +1 -0
- data/app/views/educode_sales/ideas/new_follow_up.html.erb +2 -0
- data/app/views/educode_sales/ideas/show_follow.html.erb +72 -491
- data/app/views/educode_sales/money_plans/index.json.jbuilder +4 -4
- data/app/views/educode_sales/plans/_monthPlan.html.erb +5 -0
- data/app/views/educode_sales/plans/_weekPlan.html.erb +5 -0
- data/app/views/educode_sales/plans/_yearPlan.html.erb +4 -4
- data/app/views/educode_sales/plans/edit_month.html.erb +6 -0
- data/app/views/educode_sales/plans/edit_week.html.erb +6 -0
- data/app/views/educode_sales/plans/index.json.jbuilder +1 -0
- data/app/views/educode_sales/plans/new_month.html.erb +14 -0
- data/app/views/educode_sales/plans/new_week.html.erb +14 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20230629130033_add_clazz_to_money_plans.rb +6 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96a6775767542fb19b07af8d6e33230a59840d0de8cebe92fce6d415a6709b98
|
4
|
+
data.tar.gz: b67442d07ea5b753f6f617553b43685916ab979e30d6a6b5574aadd7ed3dfdcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91d38ed9783a320d29546f6143ffc1e9db8583a05730b698993456b0d4038c59530d26d77b9d64519a85078166aec0fb49d29145d5c7fa60c129de4dcb40e9f1
|
7
|
+
data.tar.gz: 229ad3617584f13d20d2bdf058855519858dd856afeff9fda580bf0abb3d3041bb57613896ebd6d28ef8f7c3ccd8dbdc3d51000981ae201f2c461cf7a1aab54a
|
@@ -15,6 +15,7 @@ module EducodeSales
|
|
15
15
|
# @more = can?(:create, EducodeSales::SalePlan) || can?(:update, EducodeSales::Business) || can?(:destroy, EducodeSales::Business) || can?(:show_file, EducodeSales::Business)
|
16
16
|
@more = true
|
17
17
|
gon.menus = []
|
18
|
+
gon.assign_menus = []
|
18
19
|
gon.export_menus = []
|
19
20
|
gon.place = params[:place_id].present? ? [{ value: params[:place_id], name: EducodeSales::Place.find(params[:place_id]).name }] : []
|
20
21
|
|
@@ -70,18 +71,30 @@ module EducodeSales
|
|
70
71
|
gon.menus << { title: '添加年计划', event: 'year' }
|
71
72
|
end
|
72
73
|
|
74
|
+
if can?(:assign, EducodeSales::SalePlan)
|
75
|
+
gon.assign_menus << { title: '指派周计划', event: 'week' }
|
76
|
+
gon.assign_menus << { title: '指派月计划', event: 'month' }
|
77
|
+
gon.assign_menus << { title: '指派年计划', event: 'year' }
|
78
|
+
end
|
79
|
+
|
73
80
|
gon.menus << { title: '添加回款计划', event: 'money_plan' }
|
81
|
+
gon.assign_menus << { title: '添加回款计划', event: 'money_plan' }
|
74
82
|
|
75
83
|
gon.menus << { title: '关注', event: 'following' }
|
76
84
|
gon.menus << { title: '跟进时间线', event: 'time_line' }
|
85
|
+
|
86
|
+
gon.assign_menus << { title: '关注', event: 'following' }
|
87
|
+
gon.assign_menus << { title: '跟进时间线', event: 'time_line' }
|
77
88
|
if can?(:show_file, EducodeSales::Business)
|
78
89
|
gon.menus << { title: '附件管理', event: 'file' }
|
90
|
+
gon.assign_menus << { title: '附件管理', event: 'file' }
|
79
91
|
end
|
80
92
|
if can?(:update, EducodeSales::Business)
|
81
93
|
# gon.menus << { title: '编辑', event: 'edit' }
|
82
94
|
end
|
83
95
|
if can?(:destroy, EducodeSales::Business)
|
84
96
|
gon.menus << { title: '删除', event: 'delete' }
|
97
|
+
gon.assign_menus << { title: '删除', event: 'delete' }
|
85
98
|
end
|
86
99
|
if can?(:export_business, EducodeSales::Business)
|
87
100
|
gon.export_menus << { title: '导出到Csv文件', event: 'export_csv' }
|
@@ -328,6 +328,17 @@ module EducodeSales
|
|
328
328
|
def add_follow_ups
|
329
329
|
@business = Business.find(params[:business_id])
|
330
330
|
last_follow_up = @business.last_follow_up
|
331
|
+
|
332
|
+
# 计划交货时间
|
333
|
+
current_1_plan = nil
|
334
|
+
# 计划验收时间
|
335
|
+
current_2_plan = nil
|
336
|
+
# 实际交货时间
|
337
|
+
current_1_actual = nil
|
338
|
+
# 实际验收时间
|
339
|
+
current_2_actual = nil
|
340
|
+
|
341
|
+
|
331
342
|
|
332
343
|
data = []
|
333
344
|
6.times do |i|
|
@@ -340,9 +351,20 @@ module EducodeSales
|
|
340
351
|
end
|
341
352
|
params["#{i+1}_plan_date"].each do |d, v|
|
342
353
|
data[i][d.to_i] << v
|
354
|
+
if i == 0 && v.present?
|
355
|
+
current_1_plan = v.to_date
|
356
|
+
elsif i == 1 && v.present?
|
357
|
+
current_2_plan = v
|
358
|
+
end
|
343
359
|
end
|
344
360
|
params["#{i+1}_actual_date"].each do |d, v|
|
345
361
|
data[i][d.to_i] << v
|
362
|
+
if i == 0 && v.present?
|
363
|
+
current_1_actual = v.to_date
|
364
|
+
elsif i == 1 && v.present?
|
365
|
+
current_2_actual = v
|
366
|
+
end
|
367
|
+
|
346
368
|
if i == 1 && last_follow_up
|
347
369
|
# 验收时间
|
348
370
|
last_follow_up.reception_at = v
|
@@ -357,6 +379,39 @@ module EducodeSales
|
|
357
379
|
# data.each do |d|
|
358
380
|
# d.select! { |d| d.delete_if{|f| f == ''}.present? }
|
359
381
|
# end
|
382
|
+
current_week = Time.now.strftime('%W')
|
383
|
+
staff_manage_ids = @business&.last_follow_up&.assign_follow_ups.present? ? @business.last_follow_up.assign_follow_ups.pluck(:staff_id) : [@business.staff_id]
|
384
|
+
if current_1_plan && current_1_plan.to_date.strftime('%W') == current_week
|
385
|
+
unless EducodeSales::SalePlan.where(weekly: current_week, content: "提醒:请补充交付计划内容!", business: @business, staff_id: staff_manage_ids, finish_rate: 0).exists?
|
386
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '交付计划')&.id
|
387
|
+
staff_manage_ids.each do |staff_id|
|
388
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, weekly: current_week, content: "提醒:请补充交付计划内容!", business: @business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
389
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, content: "提醒:请补充交付计划内容!", business: @business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
if current_2_plan && current_2_plan.to_date.strftime('%W') == current_week
|
395
|
+
unless EducodeSales::SalePlan.where(weekly: current_week, content: "提醒:请补充验收计划内容!", business: @business, staff_id: staff_manage_ids, finish_rate: 0).exists?
|
396
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '验收计划')&.id
|
397
|
+
staff_manage_ids.each do |staff_id|
|
398
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, weekly: current_week, content: "提醒:请补充验收计划内容!", business: @business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
399
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, content: "提醒:请补充验收计划内容!", business: @business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
400
|
+
end
|
401
|
+
end
|
402
|
+
end
|
403
|
+
|
404
|
+
# 更新对应的计划完成度
|
405
|
+
if current_2_plan.present? && current_2_plan.to_date.strftime('%W') == current_week
|
406
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '交付计划')&.id
|
407
|
+
EducodeSales::SalePlan.where(month: Time.now.beginning_of_month, business: @business, staff_id: staff_manage_ids, finish_rate: 0, common_id: common_id).update_all(finish_rate: 100)
|
408
|
+
end
|
409
|
+
|
410
|
+
if current_2_actual.present? && current_2_actual.to_date.strftime('%W') == current_week
|
411
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '验收计划')&.id
|
412
|
+
EducodeSales::SalePlan.where(month: Time.now.beginning_of_month, business: @business, staff_id: staff_manage_ids, finish_rate: 0, common_id: common_id).update_all(finish_rate: 100)
|
413
|
+
end
|
414
|
+
|
360
415
|
|
361
416
|
follow_up = last_follow_up.dup
|
362
417
|
|
@@ -119,6 +119,17 @@ module EducodeSales
|
|
119
119
|
business_clazz_change.save unless business_clazz_change.persisted?
|
120
120
|
end
|
121
121
|
end
|
122
|
+
|
123
|
+
# 计划投标时间有变化且是当前周的话,添加当周/当月的销售计划
|
124
|
+
current_week = Time.now.strftime('%W').to_i
|
125
|
+
if follow_up.invitation_at&.strftime('%W').to_i == current_week
|
126
|
+
if last_follow_up && last_follow_up.invitation_at&.strftime('%W').to_i == current_week
|
127
|
+
current_week = nil
|
128
|
+
end
|
129
|
+
else
|
130
|
+
current_week = nil
|
131
|
+
end
|
132
|
+
|
122
133
|
if follow_up.save
|
123
134
|
if last_follow_up.present?
|
124
135
|
last_follow_up.key_person.each do |d|
|
@@ -136,6 +147,29 @@ module EducodeSales
|
|
136
147
|
last_follow_up.contract_date_lists.update_all(follow_up_id: follow_up.id)
|
137
148
|
end
|
138
149
|
@business.update(last_follow_up_id: follow_up.id, clazz_id: follow_up.clazz_id, p_deploy_time: params[:deploy_time])
|
150
|
+
|
151
|
+
if current_week.present?
|
152
|
+
staff_manage_ids = @business&.last_follow_up&.assign_follow_ups.present? ? @business.last_follow_up.assign_follow_ups.pluck(:staff_id) : [@business.staff_id]
|
153
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '中标计划')&.id
|
154
|
+
staff_manage_ids.each do |staff_id|
|
155
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, weekly: current_week, content: "提醒:请补充中标计划内容!", business: @business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
156
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, content: "提醒:请补充中标计划内容!", business: @business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
# 更新对应的计划完成度
|
161
|
+
if follow_up.bidded_date.present?
|
162
|
+
staff_manage_ids = @business&.last_follow_up&.assign_follow_ups.present? ? @business.last_follow_up.assign_follow_ups.pluck(:staff_id) : [@business.staff_id]
|
163
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '中标计划')&.id
|
164
|
+
if follow_up.bidded_date.strftime('%W') == Time.now.strftime('%W')
|
165
|
+
EducodeSales::SalePlan.where(month: Time.now.beginning_of_month, weekly: Time.now.strftime('%W').to_i, business: @business, staff_id: staff_manage_ids, finish_rate: 0, common_id: common_id).update_all(finish_rate: 100)
|
166
|
+
end
|
167
|
+
if follow_up.bidded_date.strftime('%Y-%m') == Time.now.strftime('%Y-%m')
|
168
|
+
EducodeSales::SalePlan.where(month: Time.now.beginning_of_month, weekly: nil, business: @business, staff_id: staff_manage_ids, finish_rate: 0, common_id: common_id).update_all(finish_rate: 100)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
139
173
|
# 增加o商机编号
|
140
174
|
add_business_number
|
141
175
|
update_department
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require_dependency "educode_sales/application_controller"
|
2
|
+
|
3
|
+
module EducodeSales
|
4
|
+
class IdeaFollowsController < ApplicationController
|
5
|
+
def create
|
6
|
+
load_teacher
|
7
|
+
follow_up = @teacher.teacher_follows.build(follow_up_params)
|
8
|
+
follow_up.staff = @current_admin
|
9
|
+
if @teacher.user_id.present?
|
10
|
+
course_ids = CourseMember.joins(:course).where(user_id: @teacher.user_id, courses: { is_delete: 0 }).where.not(role: 4).pluck(:course_id)
|
11
|
+
follow_up.course_shixuns_count = CourseMember.joins(course: :practice_homework_shixuns).where(course_id: course_ids).pluck(:shixun_id).uniq.count
|
12
|
+
follow_up.shixuns_count = ShixunMember.where(user_id: @teacher.user_id).count
|
13
|
+
follow_up.students_count = CourseMember.where(course_id: course_ids, role: 4).count
|
14
|
+
follow_up.evaluates_count = Course.where(id: course_ids).inject(0) { |i, d| i += d.evaluate_count }
|
15
|
+
follow_up.courses_count = course_ids.size
|
16
|
+
end
|
17
|
+
if follow_up.save
|
18
|
+
@teacher.update(follow_up_id: follow_up.id, followup_at: Time.now)
|
19
|
+
render_success
|
20
|
+
else
|
21
|
+
render_failure follow_up
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def destroy
|
26
|
+
follow_up = IdeaFollow.find(params[:id])
|
27
|
+
if follow_up.destroy
|
28
|
+
render_success
|
29
|
+
else
|
30
|
+
render_failure follow_up
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def update
|
35
|
+
# follow_up = IdeaFollow.new(idea_id: idea.id, staff_id: @current_admin.id, money: params[:money], content: params[:content], status: params[:status], advise: params[:advise], sale_staff_id: params[:sale_staff_id], idea_staff_id: params[:idea_staff_id])
|
36
|
+
|
37
|
+
follow_up = IdeaFollow.find(params[:id])
|
38
|
+
follow_up.money = params[:money]
|
39
|
+
follow_up.content = params[:content]
|
40
|
+
follow_up.status = params[:status]
|
41
|
+
follow_up.advise = params[:advise]
|
42
|
+
follow_up.sale_staff_id = params[:sale_staff_id]
|
43
|
+
follow_up.idea_staff_id = params[:idea_staff_id]
|
44
|
+
if follow_up.save
|
45
|
+
render_success
|
46
|
+
else
|
47
|
+
render_failure follow_up
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def index
|
52
|
+
@staff_manages = {}
|
53
|
+
role = EducodeSales::Role.find_by(name: '生态经理')
|
54
|
+
EducodeSales::Common.joins(market_areas: :staff).includes(market_areas: :staff).where(clazz: '区域').where("educode_sales_staffs.role_id = #{role.id}").each do |d|
|
55
|
+
@staff_manages[d.name] = d.market_areas.map { |d| d.staff&.name }.uniq.compact
|
56
|
+
end if role
|
57
|
+
|
58
|
+
if @current_admin.is_admin?
|
59
|
+
@follow_ups = TeacherFollow.all
|
60
|
+
else
|
61
|
+
level = @current_admin.role.role_areas.find_by(clazz: '教师运营').level
|
62
|
+
case level
|
63
|
+
when '自己'
|
64
|
+
@follow_ups = TeacherFollow.where(staff_id: @current_admin.id)
|
65
|
+
when '区域'
|
66
|
+
school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
|
67
|
+
teacher_ids = EducodeSales::Teacher.joins("JOIN departments ON educode_sales_teachers.department_id = departments.id").where("departments.school_id in (?) OR educode_sales_teachers.staff_id = #{@current_admin.id}", school_ids).pluck(:id)
|
68
|
+
@follow_ups = TeacherFollow.where(teacher_id: teacher_ids)
|
69
|
+
else
|
70
|
+
@follow_ups = TeacherFollow.all
|
71
|
+
end
|
72
|
+
end
|
73
|
+
if params[:q].present? && params[:q][:name].present?
|
74
|
+
@follow_ups = @follow_ups.joins(:teacher).where("educode_sales_teachers.name LIKE ?", "%#{params[:q][:name]}%")
|
75
|
+
end
|
76
|
+
|
77
|
+
if params[:q].present? && params[:q][:staff_id].present?
|
78
|
+
staff = Staff.find(params[:q][:staff_id])
|
79
|
+
school_ids = School.where(province: staff.areas.pluck(:name)).pluck(:id)
|
80
|
+
teacher_ids = EducodeSales::Teacher.joins("JOIN departments ON educode_sales_teachers.department_id = departments.id").where("departments.school_id in (?)", school_ids).pluck(:id)
|
81
|
+
@follow_ups = @follow_ups.where(teacher_id: teacher_ids)
|
82
|
+
end
|
83
|
+
|
84
|
+
if params[:q].present? && params[:q][:department].present?
|
85
|
+
departments_ids = Department.joins(:school).where("schools.name like ?", "%#{params[:q][:department]}%").pluck(:id)
|
86
|
+
@follow_ups = @follow_ups.joins(:teacher).where("department_id in (?)", departments_ids)
|
87
|
+
end
|
88
|
+
|
89
|
+
if params[:q].present? && params[:q][:area].present?
|
90
|
+
p = EducodeSales::Common.find(params[:q][:area]).name
|
91
|
+
# if @current_admin.is_admin?
|
92
|
+
@follow_ups = @follow_ups.joins(:teacher).joins("
|
93
|
+
JOIN departments ON educode_sales_teachers.department_id = departments.id
|
94
|
+
JOIN schools ON departments.school_id = schools.id
|
95
|
+
").where("province = ?", p)
|
96
|
+
# else
|
97
|
+
# level = @current_admin.role.role_areas.find_by(clazz: '教师运营').level
|
98
|
+
# if level == "区域"
|
99
|
+
# school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
|
100
|
+
# @follow_ups = @follow_ups.joins(:teacher).joins("
|
101
|
+
# JOIN departments ON educode_sales_teachers.department_id = departments.id
|
102
|
+
# JOIN schools ON departments.school_id = schools.id
|
103
|
+
# ").where("province = ? AND departments.school_id in (?)", p, school_ids)
|
104
|
+
# else
|
105
|
+
# @follow_ups = @follow_ups.joins(:teacher).joins("
|
106
|
+
# JOIN departments ON educode_sales_teachers.department_id = departments.id
|
107
|
+
# JOIN schools ON departments.school_id = schools.id
|
108
|
+
# ").where("province = ?", p)
|
109
|
+
# end
|
110
|
+
# end
|
111
|
+
end
|
112
|
+
|
113
|
+
if params[:q].present? && params[:q][:attitude_id].present?
|
114
|
+
@follow_ups = @follow_ups.where("educode_sales_teacher_follows.attitude_id = ?", "#{params[:q][:attitude_id]}")
|
115
|
+
end
|
116
|
+
|
117
|
+
if params[:q].present? && params[:q][:description].present?
|
118
|
+
@follow_ups = @follow_ups.where("educode_sales_teacher_follows.description LIKE ?", "%#{params[:q][:description]}%")
|
119
|
+
end
|
120
|
+
|
121
|
+
if params[:q].present? && params[:q][:follows_date].present?
|
122
|
+
date = params[:q][:follows_date].split(" - ")
|
123
|
+
@follow_ups = @follow_ups.where("educode_sales_teacher_follows.created_at > ? AND educode_sales_teacher_follows.created_at < ?", date[0], date[1] + ' 23:59:59')
|
124
|
+
end
|
125
|
+
|
126
|
+
@follow_ups = @follow_ups.includes(:teacher, :attitude, :staff)
|
127
|
+
if params[:sort].present? && params[:sort][:field]
|
128
|
+
@follow_ups = @follow_ups.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
129
|
+
else
|
130
|
+
@follow_ups = @follow_ups.order("educode_sales_teacher_follows.created_at desc")
|
131
|
+
end
|
132
|
+
@follow_ups = @follow_ups.page(params[:page]).per(params[:limit])
|
133
|
+
end
|
134
|
+
|
135
|
+
private
|
136
|
+
|
137
|
+
def load_teacher
|
138
|
+
@teacher = Teacher.find(params[:teacher_id])
|
139
|
+
end
|
140
|
+
|
141
|
+
def follow_up_params
|
142
|
+
params.permit(:attitude_id, :follow_id, :course_plan_id, :course_build_id, :description, :advise, :is_contact)
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
end
|
@@ -221,6 +221,43 @@ module EducodeSales
|
|
221
221
|
render layout: false
|
222
222
|
end
|
223
223
|
|
224
|
+
def show_follow
|
225
|
+
@idea_follow = IdeaFollow.find(params[:id])
|
226
|
+
staffs = Staff.where.not(role_id: 11).includes(:user)
|
227
|
+
gon.sale_staffs = staffs.map { |d| { name: d.user.real_name, value: d.id, selected: d.id == @idea_follow.sale_staff_id } }
|
228
|
+
gon.idea_staffs = staffs.map { |d| { name: d.user.real_name, value: d.id, selected: d.id == @idea_follow.idea_staff_id } }
|
229
|
+
respond_to do |format|
|
230
|
+
format.html do
|
231
|
+
render layout: false
|
232
|
+
end
|
233
|
+
format.json do
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def follow_list
|
239
|
+
@idea = Idea.find(params[:id])
|
240
|
+
respond_to do |format|
|
241
|
+
format.html do
|
242
|
+
render layout: false
|
243
|
+
end
|
244
|
+
format.json do
|
245
|
+
@follow_ups = @idea.idea_follows.includes(:staff, :sale_staff, :idea_staff).order(id: :desc)
|
246
|
+
@latest = @follow_ups.order(id: :desc).first
|
247
|
+
@follow_ups = @follow_ups.page(params[:page]).per(params[:limit])
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
def edit_follow_record
|
253
|
+
@idea_follow = IdeaFollow.find(params[:id])
|
254
|
+
@idea = @idea_follow.idea
|
255
|
+
staffs = Staff.where.not(role_id: 11).includes(:user)
|
256
|
+
gon.sale_staffs = staffs.map { |d| { name: d.user.real_name, value: d.id, selected: d.id == @idea_follow.sale_staff_id } }
|
257
|
+
gon.idea_staffs = staffs.map { |d| { name: d.user.real_name, value: d.id, selected: d.id == @idea_follow.idea_staff_id } }
|
258
|
+
render layout: false
|
259
|
+
end
|
260
|
+
|
224
261
|
def follow_up
|
225
262
|
idea = Idea.find(params[:id])
|
226
263
|
follow_up = IdeaFollow.new(idea_id: idea.id, staff_id: @current_admin.id, money: params[:money], content: params[:content], status: params[:status], advise: params[:advise], sale_staff_id: params[:sale_staff_id], idea_staff_id: params[:idea_staff_id])
|
@@ -6,7 +6,7 @@ module EducodeSales
|
|
6
6
|
def index
|
7
7
|
respond_to do |format|
|
8
8
|
format.html do
|
9
|
-
|
9
|
+
|
10
10
|
end
|
11
11
|
format.js do
|
12
12
|
gon.edit_record = can?(:update_record, EducodeSales::MoneyPlan)
|
@@ -50,7 +50,7 @@ module EducodeSales
|
|
50
50
|
elsif params[:q][:state] == '无对应合同'
|
51
51
|
@money_plan_records = @money_plan_records.having("claim_num = 0 AND business_id IS NULL")
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
end
|
55
55
|
|
56
56
|
if params[:q].present? && params[:q][:staff_manages].present?
|
@@ -60,7 +60,7 @@ module EducodeSales
|
|
60
60
|
LEFT JOIN educode_sales_assign_follow_ups ON educode_sales_assign_follow_ups.follow_up_id = last_follow_up.id").
|
61
61
|
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])
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
if params[:q].present? && params[:q][:amount].present?
|
65
65
|
@money_plan_records = @money_plan_records.where(amount: params[:q][:amount])
|
66
66
|
end
|
@@ -119,7 +119,7 @@ module EducodeSales
|
|
119
119
|
business_id = Business.find_by(number: ods.row(r+2)[3].to_s.strip)&.id
|
120
120
|
EducodeSales::MoneyPlanRecord.create(payer_name: ods.row(r+2)[0].to_s.strip, amount: ods.row(r+2)[1].to_s.strip, date_at: ods.row(r+2)[2].to_s.strip, business_id: business_id, staff_id: @current_admin.id) if business_id
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
render json: { succcess: true}
|
124
124
|
end
|
125
125
|
|
@@ -163,15 +163,15 @@ module EducodeSales
|
|
163
163
|
# last_follow_up = business.last_follow_up
|
164
164
|
# if last_follow_up.present?
|
165
165
|
# follow_up = last_follow_up.dup
|
166
|
-
|
166
|
+
|
167
167
|
# follow_up.description = "认领了回款记录"
|
168
|
-
|
168
|
+
|
169
169
|
# follow_up.staff = @current_admin
|
170
|
-
|
170
|
+
|
171
171
|
# last_follow_up.assign_follow_ups.each do |d|
|
172
172
|
# follow_up.assign_follow_ups.build(staff_id: d.staff_id)
|
173
173
|
# end
|
174
|
-
|
174
|
+
|
175
175
|
# if follow_up.save!
|
176
176
|
# last_follow_up.key_person.each do |d|
|
177
177
|
# key_person = d.dup
|
@@ -187,9 +187,13 @@ module EducodeSales
|
|
187
187
|
# end
|
188
188
|
end
|
189
189
|
end
|
190
|
-
|
191
190
|
businesses.uniq.each do |d|
|
192
|
-
d.update(return_money: d.money_plans.joins(:money_plan_claims).sum("educode_sales_money_plan_claims.amount") )
|
191
|
+
d.update(return_money: d.money_plans.joins(:money_plan_claims).sum("educode_sales_money_plan_claims.amount").round(6) )
|
192
|
+
|
193
|
+
# 更新对应的计划完成度
|
194
|
+
staff_manage_ids = d&.last_follow_up&.assign_follow_ups.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : [d.staff_id]
|
195
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '回款计划')&.id
|
196
|
+
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)
|
193
197
|
end
|
194
198
|
render_success
|
195
199
|
end
|
@@ -92,16 +92,18 @@ module EducodeSales
|
|
92
92
|
data = []
|
93
93
|
week = Time.now.strftime('%W').to_i
|
94
94
|
current_week = ""
|
95
|
-
|
95
|
+
|
96
96
|
(params[:num].to_i+1).times do |i|
|
97
97
|
_week = params["date_at[#{i}]"].to_date.strftime('%W').to_i
|
98
98
|
current_week = _week if _week == week
|
99
99
|
business.money_plans.create(category: params["category[#{i}]"], amount: params["amount[#{i}]"], payment_clause: params["payment_clause[#{i}]"], date_at: params["date_at[#{i}]"], follow_up_id: business.last_follow_up_id, staff_id: @current_admin.id )
|
100
100
|
end
|
101
101
|
if current_week.present?
|
102
|
+
staff_manage_ids = business&.last_follow_up&.assign_follow_ups.present? ? business.last_follow_up.assign_follow_ups.pluck(:staff_id) : [business.staff_id]
|
103
|
+
common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '回款计划')&.id
|
102
104
|
staff_manage_ids.each do |staff_id|
|
103
|
-
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, weekly: week, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0' )
|
104
|
-
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0' )
|
105
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, weekly: week, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
106
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0', common_id: common_id )
|
105
107
|
end
|
106
108
|
end
|
107
109
|
render_success
|
@@ -61,7 +61,11 @@ module EducodeSales
|
|
61
61
|
def create
|
62
62
|
if params["year"].present?
|
63
63
|
business = Business.find_by(id: params[:business_id])
|
64
|
-
plan = @current_admin.sale_plans.build(year: params[:year], business_id: business.id, clazz: params[:clazz])
|
64
|
+
plan = @current_admin.sale_plans.build(year: params[:year], business_id: business.id, clazz: params[:clazz], common_id: params[:common_id] )
|
65
|
+
if params[:assign_id].present?
|
66
|
+
plan.staff_id = params[:assign_id]
|
67
|
+
plan.assign_id = @current_admin.id
|
68
|
+
end
|
65
69
|
if plan.save
|
66
70
|
render_success
|
67
71
|
else
|
@@ -71,6 +75,11 @@ module EducodeSales
|
|
71
75
|
plan = @current_admin.sale_plans.build(plan_params)
|
72
76
|
plan.month = params["month"] + "-1"
|
73
77
|
plan.business = Business.find_by(id: params[:business_id])
|
78
|
+
|
79
|
+
if params[:assign_id].present?
|
80
|
+
plan.staff_id = params[:assign_id]
|
81
|
+
plan.assign_id = @current_admin.id
|
82
|
+
end
|
74
83
|
if plan.save
|
75
84
|
render_success
|
76
85
|
else
|
@@ -93,6 +102,10 @@ module EducodeSales
|
|
93
102
|
|
94
103
|
def new_week
|
95
104
|
@business = Business.find_by(id: params[:business_id])
|
105
|
+
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
106
|
+
@staffs = Staff.includes(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id] }
|
107
|
+
|
108
|
+
|
96
109
|
@week = Time.now.strftime('%W').to_i
|
97
110
|
week = Time.now.strftime('%W').to_i
|
98
111
|
if week > 3
|
@@ -102,6 +115,7 @@ module EducodeSales
|
|
102
115
|
else
|
103
116
|
@weeks = [[week.to_s + ' 本周',week]]
|
104
117
|
end
|
118
|
+
@commons = Common.where(clazz: '计划类型').pluck(:name, :id)
|
105
119
|
business_ids = EducodeSales::AssignFollowUp.joins(:follow_up).where(staff_id: @current_admin.id).pluck :business_id
|
106
120
|
@businesses = Business.includes(:department, :last_follow_up).where("educode_sales_businesses.id in (?) or educode_sales_businesses.staff_id = ?", business_ids, @current_admin.id).order(created_at: :desc)
|
107
121
|
@businesses = @businesses.map { |b| [b.name + "(#{b.department&.school&.name} #{b.department&.name})" + "---" + "最新跟进:" + (b.last_follow_up.present? ? b.last_follow_up.created_at.to_s : b.created_at.to_s), b.id] }
|
@@ -129,6 +143,10 @@ module EducodeSales
|
|
129
143
|
end
|
130
144
|
|
131
145
|
def new_month
|
146
|
+
@commons = Common.where(clazz: '计划类型').pluck(:name, :id)
|
147
|
+
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
148
|
+
@staffs = Staff.includes(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id] }
|
149
|
+
|
132
150
|
@business = Business.find_by(id: params[:business_id])
|
133
151
|
business_ids = EducodeSales::AssignFollowUp.joins(:follow_up).where(staff_id: @current_admin.id).pluck :business_id
|
134
152
|
@businesses =Business.includes(:department, :last_follow_up).where("educode_sales_businesses.id in (?) or educode_sales_businesses.staff_id = ?", business_ids, @current_admin.id).order(created_at: :desc)
|
@@ -201,10 +219,14 @@ module EducodeSales
|
|
201
219
|
end
|
202
220
|
|
203
221
|
def edit_week
|
222
|
+
@commons = Common.where(clazz: '计划类型').pluck(:name, :id)
|
204
223
|
business_ids = EducodeSales::AssignFollowUp.joins(:follow_up).where(staff_id: @current_admin.id).pluck :business_id
|
205
|
-
@businesses = Business.includes(:department, :last_follow_up).where("educode_sales_businesses.id in (?) or educode_sales_businesses.staff_id = ?", business_ids, @current_admin.id).order(created_at: :desc)
|
206
|
-
@businesses = @businesses.map { |b| [b.name + "(" + b.department.school.name + ")" + "---" + "最新跟进:" + (b.last_follow_up.present? ? b.last_follow_up.created_at.to_s : b.created_at.to_s), b.id] }
|
207
224
|
@sale_plan = SalePlan.find(params[:id])
|
225
|
+
# 加入指派的商机id
|
226
|
+
business_ids << @sale_plan.business_id
|
227
|
+
@businesses = Business.includes(:department, :last_follow_up).where("educode_sales_businesses.id in (?) or educode_sales_businesses.staff_id = ?", business_ids, @current_admin.id).order(created_at: :desc)
|
228
|
+
@businesses = @businesses.map { |b| [b.name + "(" + b.department&.school&.name.to_s + ")" + "---" + "最新跟进:" + (b.last_follow_up.present? ? b.last_follow_up.created_at.to_s : b.created_at.to_s), b.id] }
|
229
|
+
|
208
230
|
if @sale_plan.weekly.present?
|
209
231
|
week = Time.now.strftime('%W').to_i
|
210
232
|
if week > 3
|
@@ -267,9 +289,10 @@ module EducodeSales
|
|
267
289
|
end
|
268
290
|
|
269
291
|
def edit_month
|
292
|
+
@commons = Common.where(clazz: '计划类型').pluck(:name, :id)
|
270
293
|
business_ids = EducodeSales::AssignFollowUp.joins(:follow_up).where(staff_id: @current_admin.id).pluck :business_id
|
271
294
|
@businesses = Business.includes(:department, :last_follow_up).where("educode_sales_businesses.id in (?) or educode_sales_businesses.staff_id = ?", business_ids, @current_admin.id).order(created_at: :desc)
|
272
|
-
@businesses = @businesses.map { |b| [b.name + "(" + b.department
|
295
|
+
@businesses = @businesses.map { |b| [b.name + "(" + b.department&.school&.name.to_s + ")" + "---" + "最新跟进:" + (b.last_follow_up.present? ? b.last_follow_up.created_at.to_s : b.created_at.to_s), b.id] }
|
273
296
|
@sale_plan = SalePlan.find(params[:id])
|
274
297
|
@finish_rates = []
|
275
298
|
11.times { |d| @finish_rates << ["#{d*10}%", d * 10]}
|
@@ -448,7 +471,7 @@ module EducodeSales
|
|
448
471
|
private
|
449
472
|
|
450
473
|
def plan_params
|
451
|
-
params.permit(:month, :weekly, :content, :finish_rate, :business_id)
|
474
|
+
params.permit(:month, :weekly, :content, :finish_rate, :business_id, :common_id, :assign_id)
|
452
475
|
end
|
453
476
|
|
454
477
|
def business_info_params
|
@@ -248,7 +248,17 @@ module EducodeSales
|
|
248
248
|
end
|
249
249
|
|
250
250
|
def visit_analysis_charts(visit_count_year, visit_count_season, visit_count_month, visit_count_week, visit_type, title_names)
|
251
|
-
|
251
|
+
if visit_type.present? && visit_type.include?("1")
|
252
|
+
names = visit_count_year.map{|d| d[0]}
|
253
|
+
elsif visit_type.present? && visit_type.include?("2")
|
254
|
+
names = visit_count_season.map{|d| d[0]}
|
255
|
+
elsif visit_type.present? && visit_type.include?("3")
|
256
|
+
names = visit_count_month.map{|d| d[0]}
|
257
|
+
elsif visit_type.present? && visit_type.include?("4")
|
258
|
+
names = visit_count_week.map{|d| d[0]}
|
259
|
+
else
|
260
|
+
names = visit_count_year.map{|d| d[0]}
|
261
|
+
end
|
252
262
|
|
253
263
|
visit_count_season_data = []
|
254
264
|
names.each do |name|
|
@@ -3,6 +3,7 @@ module EducodeSales
|
|
3
3
|
acts_as_list scope: [:clazz]
|
4
4
|
|
5
5
|
has_many :market_areas, class_name: 'MarketArea', foreign_key: 'area_id'
|
6
|
+
has_many :sale_plans, dependent: :nullify
|
6
7
|
|
7
8
|
XTYPE = "x_class"
|
8
9
|
OTYPE = 'o_class'
|
@@ -24,7 +25,8 @@ module EducodeSales
|
|
24
25
|
'跟进手段': 'contact',
|
25
26
|
'人员类型': 'staff_type',
|
26
27
|
'开课计划': 'course_plan',
|
27
|
-
'区域': 'area'
|
28
|
+
'区域': 'area',
|
29
|
+
'计划类型': 'plan_type'
|
28
30
|
}
|
29
31
|
|
30
32
|
def self.job_type_name
|
@@ -11,7 +11,7 @@ module EducodeSales
|
|
11
11
|
|
12
12
|
def update_return_money
|
13
13
|
amount = self.money_plan.business.money_plans.joins(:money_plan_claims).sum("educode_sales_money_plan_claims.amount")
|
14
|
-
self.money_plan.business.update(return_money: amount)
|
14
|
+
self.money_plan.business.update(return_money: amount.round(6))
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|