educode_sales 0.9.67 → 0.9.68
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/activities_controller.rb +52 -38
- data/app/controllers/educode_sales/businesses_controller.rb +1 -1
- data/app/controllers/educode_sales/operation_plans_controller.rb +8 -4
- data/app/controllers/educode_sales/plans_controller.rb +173 -11
- data/app/controllers/educode_sales/recycles_controller.rb +11 -1
- data/app/controllers/educode_sales/teachers_controller.rb +4 -4
- data/app/controllers/educode_sales/upload_files_controller.rb +9 -2
- data/app/models/educode_sales/activity.rb +4 -0
- data/app/models/educode_sales/assessments_setting.rb +2 -2
- data/app/models/educode_sales/business_info.rb +9 -0
- data/app/models/educode_sales/sale_plan.rb +3 -1
- data/app/models/educode_sales/staff.rb +2 -0
- data/app/views/educode_sales/activities/_follows.html.erb +50 -36
- data/app/views/educode_sales/activities/_index.html.erb +82 -9
- data/app/views/educode_sales/activities/edit.html.erb +25 -68
- data/app/views/educode_sales/activities/files.html.erb +157 -0
- data/app/views/educode_sales/activities/files.json.jbuilder +13 -0
- data/app/views/educode_sales/activities/follow_ups.json.jbuilder +1 -1
- data/app/views/educode_sales/activities/index.json.jbuilder +2 -2
- data/app/views/educode_sales/activities/new.html.erb +21 -60
- data/app/views/educode_sales/activities/upload_file.html.erb +43 -0
- data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +3 -0
- data/app/views/educode_sales/businesses/new.html.erb +1 -1
- data/app/views/educode_sales/plans/_yearPlan.html.erb +234 -0
- data/app/views/educode_sales/plans/business_infos.json.jbuilder +23 -0
- data/app/views/educode_sales/plans/edit_bussiness_info.html.erb +79 -0
- data/app/views/educode_sales/plans/edit_bussiness_info_extra.html.erb +260 -0
- data/app/views/educode_sales/plans/edit_year_plan.html.erb +237 -0
- data/app/views/educode_sales/plans/index.html.erb +8 -0
- data/app/views/educode_sales/plans/new_year.html.erb +204 -0
- data/app/views/educode_sales/plans/plan_business_infos.json.jbuilder +42 -0
- data/app/views/educode_sales/plans/years_plan.json.jbuilder +17 -0
- data/app/views/educode_sales/recycles/_monthly.html.erb +1 -1
- data/app/views/educode_sales/recycles/_yearPlan.html.erb +118 -0
- data/app/views/educode_sales/recycles/index.html.erb +26 -22
- data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +0 -1
- data/app/views/educode_sales/recycles/yearPlan.json.jbuilder +14 -0
- data/config/routes.rb +19 -0
- data/db/migrate/20230330141213_create_educode_sales_activity_follow_ups.rb +6 -0
- data/db/migrate/20230405074036_add_year_to_sale_plans.rb +38 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68edf1ae34edbb71f7c415a1bf1f298683c507681463630bbe54cd9e008a1d18
|
4
|
+
data.tar.gz: f7dc04cdeab6ff2fe4e696265e5175abd99095dda76fd8dbba2263afa103190e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2fed0873dcabcf99b57d6713f2df0e59efc030ffbc27b23e7cacd02e05e81d42db0e3e571663a3230ee43a3885bcc5f3833f0cf3ed601f1a7136f62ace3a3833
|
7
|
+
data.tar.gz: 653629bfc15b4d1ad604462f17b61ddf9512e26d9cc0f806177b8048d2f665ec1ff28d2c33191ed9ef1c7167db9ee895c70239493d45bf03dddae4cfbf426eaf
|
@@ -5,13 +5,17 @@ module EducodeSales
|
|
5
5
|
def index
|
6
6
|
respond_to do |format|
|
7
7
|
format.html do
|
8
|
-
|
8
|
+
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
9
|
+
@staffs = Staff.joins(:user).where(job_type: common.id).where.not(role_id: 11).map { |d| [d.user.real_name, d.id]}
|
10
|
+
|
11
|
+
role = EducodeSales::Role.find_by(name: '生态经理')
|
12
|
+
@staff_manage = Staff.joins(:user).where(role_id: role.id).map { |d| [d.user.real_name, d.id]}
|
9
13
|
end
|
10
14
|
format.json do
|
11
15
|
@activities = Activity
|
12
16
|
if params[:q].present?
|
13
17
|
if params[:q][:staff_id].present?
|
14
|
-
@activities = @activities.where(
|
18
|
+
@activities = @activities.where(sales_id: params[:q][:staff_id])
|
15
19
|
end
|
16
20
|
if params[:q][:clazz_id].present?
|
17
21
|
@activities = @activities.where(clazz_id: params[:q][:clazz_id])
|
@@ -56,8 +60,7 @@ module EducodeSales
|
|
56
60
|
manage_ids = @activity.manages.pluck(:staff_id)
|
57
61
|
assist_ids = @activity.assists.pluck(:staff_id)
|
58
62
|
gon.staff_manage = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: manage_ids.include?(d.id)}}
|
59
|
-
gon.
|
60
|
-
gon.experts = @activity.experts.map { |d| {name: d.name, value: d.user_id || d.name, selected: true}}
|
63
|
+
gon.assistss = @activity.assists.map { |d| {name: d.name, value: d.user_id || d.name, selected: true}}
|
61
64
|
|
62
65
|
gon.invitation_list = @activity.invitations.map { |d| {name: d.name, value: d.user_id || d.name, selected: true}}
|
63
66
|
|
@@ -74,15 +77,13 @@ module EducodeSales
|
|
74
77
|
params[:staff_manage_id].each do |d|
|
75
78
|
EducodeSales::ActivityStaff.create(staff_id: d, clazz_id: 'manage', activity_id: activity.id)
|
76
79
|
end
|
80
|
+
|
77
81
|
params[:staff_assist_id].each do |d|
|
78
|
-
EducodeSales::ActivityStaff.create(staff_id: d, clazz_id: 'assist', activity_id: activity.id)
|
79
|
-
end
|
80
|
-
params[:expert_ids].each do |d|
|
81
82
|
if d[0].to_i > 0
|
82
83
|
u = User.find(d[0].to_i)
|
83
|
-
EducodeSales::ActivityStaff.create(name: u.real_name, clazz_id: '
|
84
|
+
EducodeSales::ActivityStaff.create(name: u.real_name, clazz_id: 'assist', user_id: d[0].to_i, activity_id: activity.id)
|
84
85
|
else
|
85
|
-
EducodeSales::ActivityStaff.create(name: d[1], clazz_id: '
|
86
|
+
EducodeSales::ActivityStaff.create(name: d[1], clazz_id: 'assist', activity_id: activity.id)
|
86
87
|
end
|
87
88
|
end
|
88
89
|
params[:invitation_ids].each do |d|
|
@@ -93,11 +94,6 @@ module EducodeSales
|
|
93
94
|
EducodeSales::ActivityStaff.create(name: d[1], clazz_id: 'invitation', activity_id: activity.id)
|
94
95
|
end
|
95
96
|
end
|
96
|
-
if params[:attachment_id].present?
|
97
|
-
attachment = @current_admin.user.attachments.find(params[:attachment_id])
|
98
|
-
attachment.container = activity
|
99
|
-
attachment.save
|
100
|
-
end
|
101
97
|
render_success
|
102
98
|
else
|
103
99
|
render_failure activity
|
@@ -119,7 +115,6 @@ module EducodeSales
|
|
119
115
|
sales_id: params[:sales_id] || @current_admin.id
|
120
116
|
)
|
121
117
|
manages = []
|
122
|
-
experts = []
|
123
118
|
assists = []
|
124
119
|
invitations = []
|
125
120
|
params[:staff_manage_id].each do |d|
|
@@ -127,14 +122,11 @@ module EducodeSales
|
|
127
122
|
end
|
128
123
|
|
129
124
|
params[:staff_assist_id].each do |d|
|
130
|
-
assists << EducodeSales::ActivityStaff.find_or_initialize_by(staff_id: d, clazz_id: 'assist', activity_id: activity.id)
|
131
|
-
end
|
132
|
-
params[:expert_ids].each do |d|
|
133
125
|
if d[0].to_i > 0
|
134
126
|
u = User.find(d[0].to_i)
|
135
|
-
|
127
|
+
assists << EducodeSales::ActivityStaff.find_or_initialize_by(name: u.real_name, clazz_id: 'assist', user_id: d[0].to_i, activity_id: activity.id)
|
136
128
|
else
|
137
|
-
|
129
|
+
assists << EducodeSales::ActivityStaff.find_or_initialize_by(name: d[1], clazz_id: 'assist', activity_id: activity.id)
|
138
130
|
end
|
139
131
|
end
|
140
132
|
params[:invitation_ids].each do |d|
|
@@ -147,25 +139,8 @@ module EducodeSales
|
|
147
139
|
end
|
148
140
|
activity.manages = manages
|
149
141
|
activity.assists = assists
|
150
|
-
activity.experts = experts
|
151
142
|
activity.invitations = invitations
|
152
|
-
|
153
|
-
if params[:attachment_id].present?
|
154
|
-
if activity.attachment&.id && activity.attachment&.id != params[:attachment_id].to_i
|
155
|
-
file_path = File.join(Rails.root, "public", "files", 'educode_sales', activity.attachment.disk_filename)
|
156
|
-
File.delete(file_path) if File.exist?(file_path)
|
157
|
-
activity.attachment.destroy
|
158
|
-
end
|
159
|
-
attachment = @current_admin.user.attachments.find(params[:attachment_id])
|
160
|
-
attachment.container = activity
|
161
|
-
attachment.save
|
162
|
-
else
|
163
|
-
if activity.attachment
|
164
|
-
file_path = File.join(Rails.root, "public", "files", 'educode_sales', activity.attachment.disk_filename)
|
165
|
-
File.delete(file_path) if File.exist?(file_path)
|
166
|
-
activity.attachment.destroy
|
167
|
-
end
|
168
|
-
end
|
143
|
+
|
169
144
|
if activity.save
|
170
145
|
render_success
|
171
146
|
else
|
@@ -190,6 +165,10 @@ module EducodeSales
|
|
190
165
|
render layout: false
|
191
166
|
end
|
192
167
|
|
168
|
+
def upload_file
|
169
|
+
render layout: false
|
170
|
+
end
|
171
|
+
|
193
172
|
def show_schools
|
194
173
|
respond_to do |format|
|
195
174
|
format.html do
|
@@ -231,6 +210,41 @@ module EducodeSales
|
|
231
210
|
@data = @data.distinct.page(params[:page]).per(params[:limit])
|
232
211
|
end
|
233
212
|
|
213
|
+
def update_advise
|
214
|
+
activity = Activity.find(params[:id])
|
215
|
+
if activity.last_follow_up
|
216
|
+
activity.last_follow_up.update(advise: params[:content])
|
217
|
+
render_success
|
218
|
+
else
|
219
|
+
render_failure '无跟进动态,暂不能添加建议'
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def add_advise
|
224
|
+
followup = ActivityFollowUp.find(params[:id])
|
225
|
+
followup.update(advise: params[:content])
|
226
|
+
render_success
|
227
|
+
end
|
228
|
+
|
229
|
+
|
230
|
+
def files
|
231
|
+
respond_to do |format|
|
232
|
+
format.html do
|
233
|
+
render layout: false
|
234
|
+
end
|
235
|
+
format.json do
|
236
|
+
activity = Activity.find(params[:id])
|
237
|
+
@files = activity.attachments
|
238
|
+
if params[:sort].present? && params[:sort][:field]
|
239
|
+
@files = @files.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
240
|
+
else
|
241
|
+
@files = @files.order("created_on desc")
|
242
|
+
end
|
243
|
+
@files = @files.page(params[:page]).per(params[:limit])
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
234
248
|
private
|
235
249
|
|
236
250
|
def activity_params
|
@@ -395,7 +395,7 @@ module EducodeSales
|
|
395
395
|
|
396
396
|
gon.levels = EducodeSales::BusinessLevel.level_ids.keys.map { |d| {name: d, value: d, selected: levels.include?(d)}}
|
397
397
|
gon.watche_ids = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: staff_ids.include?(d.id)}}
|
398
|
-
gon.department = {value: @business.department_id, name: "#{@business.department
|
398
|
+
gon.department = {value: @business.department_id, name: "#{@business.department&.school&.name}-#{@business.department&.name}"}
|
399
399
|
gon.value = @business.department_id
|
400
400
|
render layout: false
|
401
401
|
end
|
@@ -72,11 +72,15 @@ module EducodeSales
|
|
72
72
|
def create
|
73
73
|
plan = @current_admin.operation_plans.build(plan_params)
|
74
74
|
plan.month = params["month"] + "-1"
|
75
|
-
|
76
|
-
|
77
|
-
|
75
|
+
if (Integer(params[:teacher_id]) rescue nil)
|
76
|
+
plan.teacher_id = @current_admin.teachers.find(params[:teacher_id]).id
|
77
|
+
if plan.save
|
78
|
+
render_success
|
79
|
+
else
|
80
|
+
render_failure plan
|
81
|
+
end
|
78
82
|
else
|
79
|
-
render_failure
|
83
|
+
render_failure '不存在该教师'
|
80
84
|
end
|
81
85
|
end
|
82
86
|
|
@@ -29,9 +29,9 @@ module EducodeSales
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
if params[:clazz] == 'week'
|
32
|
-
@sale_plans = @sale_plans.where.not(weekly: nil)
|
33
|
-
|
34
|
-
@sale_plans = @sale_plans.where(weekly: nil)
|
32
|
+
@sale_plans = @sale_plans.where.not(weekly: nil).where.not(month: nil)
|
33
|
+
elsif params[:clazz] == 'month'
|
34
|
+
@sale_plans = @sale_plans.where(weekly: nil).where.not(month: nil)
|
35
35
|
end
|
36
36
|
if params[:q].present? && params[:q][:staff_id].present?
|
37
37
|
@sale_plans = @sale_plans.where(staff_id: params[:q][:staff_id])
|
@@ -59,13 +59,34 @@ module EducodeSales
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def create
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
if params["year"].present?
|
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])
|
65
|
+
if plan.save
|
66
|
+
render_success
|
67
|
+
else
|
68
|
+
render_failure plan
|
69
|
+
end
|
70
|
+
else
|
71
|
+
plan = @current_admin.sale_plans.build(plan_params)
|
72
|
+
plan.month = params["month"] + "-1"
|
73
|
+
plan.business = Business.find_by(id: params[:business_id])
|
74
|
+
if plan.save
|
75
|
+
render_success
|
76
|
+
else
|
77
|
+
render_failure plan
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
def create_business_info
|
84
|
+
business = Business.find_by(id: params[:business_id])
|
85
|
+
info = @current_admin.business_infos.build(year: params[:year], business_id: business.id, clazz: params[:clazz])
|
86
|
+
if info.save
|
66
87
|
render_success
|
67
88
|
else
|
68
|
-
render_failure
|
89
|
+
render_failure info
|
69
90
|
end
|
70
91
|
end
|
71
92
|
|
@@ -115,6 +136,14 @@ module EducodeSales
|
|
115
136
|
render layout: false
|
116
137
|
end
|
117
138
|
|
139
|
+
def new_year
|
140
|
+
business_ids = EducodeSales::AssignFollowUp.joins(:follow_up).where(staff_id: @current_admin.id).pluck :business_id
|
141
|
+
@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)
|
142
|
+
@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] }
|
143
|
+
@clazz = EducodeSales::SalePlan::CLAZZ_NAME
|
144
|
+
render layout: false
|
145
|
+
end
|
146
|
+
|
118
147
|
def new_monthly
|
119
148
|
d = @current_admin
|
120
149
|
area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
|
@@ -196,11 +225,21 @@ module EducodeSales
|
|
196
225
|
end
|
197
226
|
|
198
227
|
def destroy
|
199
|
-
|
200
|
-
|
228
|
+
if params[:year].present?
|
229
|
+
# 删除年度计划
|
230
|
+
sale_plans = SalePlan.where(year: params[:year], clazz: EducodeSales::SalePlan::CLAZZ_NAME[params[:clazz]])
|
231
|
+
sale_plans.each do |d|
|
232
|
+
EducodeSales::Recycle.create(source: d, deleter_id: @current_admin.id)
|
233
|
+
end
|
234
|
+
sale_plans.update_all(deleted_at: Time.now)
|
201
235
|
render_success
|
202
236
|
else
|
203
|
-
|
237
|
+
sale_plan = SalePlan.find(params[:id])
|
238
|
+
if sale_plan.soft_destroy(@current_admin.id)
|
239
|
+
render_success
|
240
|
+
else
|
241
|
+
render_failure sale_plan
|
242
|
+
end
|
204
243
|
end
|
205
244
|
end
|
206
245
|
|
@@ -242,11 +281,134 @@ module EducodeSales
|
|
242
281
|
@sale_plans = @sale_plans.page(params[:page]).per(params[:limit])
|
243
282
|
end
|
244
283
|
|
284
|
+
def years_plan
|
285
|
+
if @current_admin.is_admin?
|
286
|
+
@sale_plans = SalePlan
|
287
|
+
else
|
288
|
+
level = @current_admin.role.role_areas.find_by(clazz: '销售计划').level
|
289
|
+
case level
|
290
|
+
when '自己'
|
291
|
+
@sale_plans = SalePlan.where(staff_id: @current_admin.id)
|
292
|
+
when '区域'
|
293
|
+
staff_ids = Staff.joins(user: [user_extension: [department: :school]]).where("schools.province in (?)", @current_admin.areas.pluck(:name)).pluck(:id)
|
294
|
+
business_ids = Business.where(school_id: StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id)).pluck(:id)
|
295
|
+
@sale_plans = SalePlan.where("educode_sales_sale_plans.staff_id in (?) OR educode_sales_sale_plans.staff_id = ? OR educode_sales_sale_plans.business_id in (?)", staff_ids, @current_admin.id,business_ids)
|
296
|
+
else
|
297
|
+
@sale_plans = SalePlan
|
298
|
+
end
|
299
|
+
end
|
300
|
+
@sale_plans = @sale_plans.where.not(year: nil)
|
301
|
+
@sale_plans = @sale_plans.select("SUM(last_follow.budget_amount) AS budget_amounts, educode_sales_sale_plans.*, ss.annual")
|
302
|
+
@sale_plans = @sale_plans.joins("
|
303
|
+
JOIN educode_sales_businesses ON educode_sales_businesses.id = educode_sales_sale_plans.business_id
|
304
|
+
LEFT JOIN educode_sales_follow_ups AS last_follow ON educode_sales_businesses.last_follow_up_id = last_follow.id AND last_follow.deleted_at IS NULL
|
305
|
+
LEFT JOIN educode_sales_assessments_settings AS ss ON ss.staff_id = educode_sales_sale_plans.staff_id
|
306
|
+
AND YEAR(ss.assessment_year) = educode_sales_sale_plans.year AND ss.assessment = educode_sales_sale_plans.clazz")
|
307
|
+
|
308
|
+
@sale_plans = @sale_plans.group("educode_sales_sale_plans.staff_id, clazz, year")
|
309
|
+
|
310
|
+
@sale_plans = @sale_plans.where(deleted_at: nil)
|
311
|
+
|
312
|
+
if params[:q].present? && params[:q][:year].present?
|
313
|
+
@sale_plans = @sale_plans.where(year: params[:q][:year])
|
314
|
+
end
|
315
|
+
if params[:q].present? && params[:q][:staff_id].present?
|
316
|
+
@sale_plans = @sale_plans.where(staff_id: params[:q][:staff_id])
|
317
|
+
end
|
318
|
+
if params[:sort].present? && params[:sort][:field]
|
319
|
+
@sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
320
|
+
else
|
321
|
+
@sale_plans = @sale_plans.order("created_at desc")
|
322
|
+
end
|
323
|
+
|
324
|
+
@sale_plans = @sale_plans.page(params[:page]).per(params[:limit])
|
325
|
+
end
|
326
|
+
|
327
|
+
def my_years_plan
|
328
|
+
@sale_plans = SalePlan.where(staff_id: @current_admin.id)
|
329
|
+
end
|
330
|
+
|
331
|
+
def business_infos
|
332
|
+
@data = @current_admin.business_infos.where(sale_plan_id: nil, year: params[:year])
|
333
|
+
|
334
|
+
if params[:sort].present? && params[:sort][:field]
|
335
|
+
@data = @data.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
336
|
+
else
|
337
|
+
@data = @data.order("created_at desc")
|
338
|
+
end
|
339
|
+
@data = @data.page(params[:page]).per(params[:limit])
|
340
|
+
end
|
341
|
+
|
342
|
+
def edit_bussiness_info
|
343
|
+
@business_info = @current_admin.business_infos.find(params[:id])
|
344
|
+
render layout: false
|
345
|
+
end
|
346
|
+
|
347
|
+
def edit_bussiness_info_extra
|
348
|
+
@business_info = @current_admin.business_infos.find(params[:id])
|
349
|
+
render layout: false
|
350
|
+
end
|
351
|
+
|
352
|
+
def plan_business_infos
|
353
|
+
@data = @current_admin.business_infos.where(year: params[:year])
|
354
|
+
|
355
|
+
if params[:sort].present? && params[:sort][:field]
|
356
|
+
@data = @data.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
357
|
+
else
|
358
|
+
@data = @data.order("created_at desc")
|
359
|
+
end
|
360
|
+
@data = @data.page(params[:page]).per(params[:limit])
|
361
|
+
end
|
362
|
+
|
363
|
+
def update_business_info
|
364
|
+
business_info = @current_admin.business_infos.find(params[:id])
|
365
|
+
if business_info.update(business_info_params)
|
366
|
+
render_success
|
367
|
+
else
|
368
|
+
render_failure business_info
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
def update_business_info_extra
|
373
|
+
business_info = @current_admin.business_infos.find(params[:id])
|
374
|
+
if business_info.update(update_business_info_extra_params)
|
375
|
+
render_success
|
376
|
+
else
|
377
|
+
render_failure business_info
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
def create_sales_plan
|
382
|
+
@current_admin.business_infos.where(sale_plan_id: nil).each do |d|
|
383
|
+
plan = @current_admin.sale_plans.create(year: d.year, business_id: d.business_id, clazz: d.clazz)
|
384
|
+
d.update(sale_plan_id: plan.id)
|
385
|
+
end
|
386
|
+
render_success
|
387
|
+
end
|
388
|
+
|
389
|
+
def delete_business_info
|
390
|
+
@current_admin.business_infos.where(id: params[:id]).destroy_all
|
391
|
+
render_success
|
392
|
+
end
|
393
|
+
|
394
|
+
def edit_year_plan
|
395
|
+
render layout: false
|
396
|
+
end
|
397
|
+
|
245
398
|
private
|
246
399
|
|
247
400
|
def plan_params
|
248
401
|
params.permit(:month, :weekly, :content, :finish_rate, :business_id)
|
249
402
|
end
|
250
403
|
|
404
|
+
def business_info_params
|
405
|
+
params.permit(:plan_bid_on, :plan_sign_on, :prepayment_plan_on, :prepayment_amount)
|
406
|
+
end
|
407
|
+
|
408
|
+
def update_business_info_extra_params
|
409
|
+
params.permit(:plan_bid_on, :actual_bidded_on, :bidded_amount, :plan_sign_on, :actual_sign_on, :sign_amount, :plan_deploy_on, :actual_deploy_on, :plan_check_on,
|
410
|
+
:actual_check_on, :prepayment_plan_on, :prepayment_actual_on, :prepayment_amount, :check_fee_plan_on, :check_fee_actual_on, :check_fee, :qa_plan_on, :qa_actual_on, :qa_amount, :account_receivable)
|
411
|
+
end
|
412
|
+
|
251
413
|
end
|
252
414
|
end
|
@@ -83,7 +83,7 @@ module EducodeSales
|
|
83
83
|
end
|
84
84
|
|
85
85
|
def monthPlan
|
86
|
-
@monthPlans = Recycle.where(source_type:"EducodeSales::SalePlan")
|
86
|
+
@monthPlans = Recycle.joins("JOIN educode_sales_sale_plans ON educode_sales_sale_plans.id = educode_sales_recycles.source_id AND educode_sales_sale_plans.month IS NOT NULL AND educode_sales_sale_plans.weekly IS NULL").where(source_type:"EducodeSales::SalePlan")
|
87
87
|
if params[:sort].present? && params[:sort][:field]
|
88
88
|
@monthPlans = @monthPlans.order("created_at #{params[:sort][:order]}")
|
89
89
|
else
|
@@ -91,5 +91,15 @@ module EducodeSales
|
|
91
91
|
end
|
92
92
|
@monthPlans = @monthPlans.page(params[:page]).per(params[:limit])
|
93
93
|
end
|
94
|
+
|
95
|
+
def yearPlan
|
96
|
+
@plans = Recycle.joins("JOIN educode_sales_sale_plans ON educode_sales_sale_plans.id = educode_sales_recycles.source_id AND educode_sales_sale_plans.year IS NOT NULL").where(source_type:"EducodeSales::SalePlan")
|
97
|
+
if params[:sort].present? && params[:sort][:field]
|
98
|
+
@plans = @plans.order("created_at #{params[:sort][:order]}")
|
99
|
+
else
|
100
|
+
@plans = @plans.order("educode_sales_recycles.created_at desc")
|
101
|
+
end
|
102
|
+
@plans = @plans.page(params[:page]).per(params[:limit])
|
103
|
+
end
|
94
104
|
end
|
95
105
|
end
|
@@ -51,22 +51,22 @@ module EducodeSales
|
|
51
51
|
end if role
|
52
52
|
|
53
53
|
if @current_admin.is_admin?
|
54
|
-
@teachers = Teacher
|
54
|
+
@teachers = Teacher
|
55
55
|
else
|
56
56
|
level = @current_admin.role.role_areas.find_by(clazz: '教师运营').level
|
57
57
|
case level
|
58
58
|
when '自己'
|
59
|
-
@teachers = Teacher
|
59
|
+
@teachers = Teacher
|
60
60
|
@teachers = @teachers.where(staff_id: @current_admin.id)
|
61
61
|
teacher_ids = EducodeSales::Teacher.where(staff_id: 0).pluck(:id) - EducodeSales::TeacherAssignFollow.all.pluck(:Teacher_id) + EducodeSales::TeacherAssignFollow.where(staff_id: @current_admin.id).pluck(:teacher_id) + @teachers.ids
|
62
62
|
@teachers = Teacher.where(id: teacher_ids)
|
63
63
|
when '区域'
|
64
64
|
school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id) + StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id)
|
65
|
-
@teachers = Teacher.joins("JOIN departments ON educode_sales_teachers.department_id = departments.id").where(
|
65
|
+
@teachers = 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)
|
66
66
|
teacher_ids = EducodeSales::Teacher.where(staff_id: 0).pluck(:id) - EducodeSales::TeacherAssignFollow.all.pluck(:Teacher_id) + EducodeSales::TeacherAssignFollow.where(staff_id: @current_admin.id).pluck(:teacher_id) + @teachers.ids
|
67
67
|
@teachers = Teacher.where(id: teacher_ids)
|
68
68
|
else
|
69
|
-
@teachers = Teacher
|
69
|
+
@teachers = Teacher
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -33,13 +33,20 @@ module EducodeSales
|
|
33
33
|
if @attachment.blank?
|
34
34
|
@attachment = Attachment.new
|
35
35
|
@attachment.filename = upload_file.original_filename
|
36
|
-
|
36
|
+
if params[:activity_id].present?
|
37
|
+
@attachment.container_id = params[:activity_id]
|
38
|
+
@attachment.container_type = 'EducodeSales::Activity'
|
39
|
+
else
|
40
|
+
@attachment.description = "business"
|
41
|
+
@attachment.container_id = params[:business_id]
|
42
|
+
end
|
43
|
+
|
37
44
|
@attachment.disk_filename = local_path[save_path.size + 1, local_path.size]
|
38
45
|
@attachment.filesize = upload_file.tempfile.size
|
39
46
|
@attachment.content_type = content_type
|
40
47
|
@attachment.digest = digest
|
41
48
|
@attachment.author_id = @current_admin.user_id
|
42
|
-
|
49
|
+
|
43
50
|
@attachment.save!
|
44
51
|
else
|
45
52
|
logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}"
|
@@ -11,6 +11,10 @@ module EducodeSales
|
|
11
11
|
has_many :activity_staffs, dependent: :destroy
|
12
12
|
has_many :activity_follow_ups, dependent: :destroy
|
13
13
|
|
14
|
+
has_many :attachments, as: :container, dependent: :destroy
|
15
|
+
|
16
|
+
belongs_to :last_follow_up, class_name: 'ActivityFollowUp', optional: true
|
17
|
+
|
14
18
|
belongs_to :sales, class_name: 'Staff', optional: true
|
15
19
|
|
16
20
|
has_one :attachment, as: :container, dependent: :destroy
|
@@ -8,7 +8,7 @@ module EducodeSales
|
|
8
8
|
|
9
9
|
|
10
10
|
CLAZZ = {
|
11
|
-
7 => '
|
11
|
+
7 => '商机目标', 18 => '中标目标', 1 => '签单目标', 2 => '回款目标', 3 => '商机跟进', 4 => '商机挖掘-A类商机', 5 => '商机挖掘-B类商机', 6 => '客户拜访-线下拜访', 8 => '客户拜访-线上拜访',
|
12
12
|
9 => '注册数据-学生', 10 => '注册数据-老师', 11 => '会议组织-区域性会议', 12 => '会议组织-单校会议', 13 => '生态合作-虚拟教研室', 14 => '生态合作-特软', 15 => '生态合作-大V合作',
|
13
13
|
16 => '重要事项', 17 => '临时任务'
|
14
14
|
}
|
@@ -17,7 +17,7 @@ module EducodeSales
|
|
17
17
|
|
18
18
|
def unit_name
|
19
19
|
case self.assessment
|
20
|
-
when 1, 2, 7
|
20
|
+
when 1, 2, 7, 18
|
21
21
|
'万元'
|
22
22
|
when 3
|
23
23
|
'条'
|
@@ -5,7 +5,9 @@ module EducodeSales
|
|
5
5
|
belongs_to :staff
|
6
6
|
validates :business_id, presence: true
|
7
7
|
|
8
|
-
validates :month, presence: true
|
8
|
+
# validates :month, presence: true
|
9
|
+
|
10
|
+
CLAZZ_NAME = {'商机目标' => 7, '中标目标' => 18, '签单目标' => 1, '回款目标' => 2}
|
9
11
|
|
10
12
|
default_scope -> {where(deleted_at: nil)}
|
11
13
|
end
|
@@ -25,6 +25,8 @@ module EducodeSales
|
|
25
25
|
|
26
26
|
has_many :staff_school_tags, dependent: :destroy
|
27
27
|
|
28
|
+
has_many :business_infos, dependent: :destroy
|
29
|
+
|
28
30
|
has_many :market_areas, dependent: :destroy
|
29
31
|
has_many :areas, through: :market_areas
|
30
32
|
validates :user_id, uniqueness: { message: '已存在' }
|