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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/activities_controller.rb +52 -38
  3. data/app/controllers/educode_sales/businesses_controller.rb +1 -1
  4. data/app/controllers/educode_sales/operation_plans_controller.rb +8 -4
  5. data/app/controllers/educode_sales/plans_controller.rb +173 -11
  6. data/app/controllers/educode_sales/recycles_controller.rb +11 -1
  7. data/app/controllers/educode_sales/teachers_controller.rb +4 -4
  8. data/app/controllers/educode_sales/upload_files_controller.rb +9 -2
  9. data/app/models/educode_sales/activity.rb +4 -0
  10. data/app/models/educode_sales/assessments_setting.rb +2 -2
  11. data/app/models/educode_sales/business_info.rb +9 -0
  12. data/app/models/educode_sales/sale_plan.rb +3 -1
  13. data/app/models/educode_sales/staff.rb +2 -0
  14. data/app/views/educode_sales/activities/_follows.html.erb +50 -36
  15. data/app/views/educode_sales/activities/_index.html.erb +82 -9
  16. data/app/views/educode_sales/activities/edit.html.erb +25 -68
  17. data/app/views/educode_sales/activities/files.html.erb +157 -0
  18. data/app/views/educode_sales/activities/files.json.jbuilder +13 -0
  19. data/app/views/educode_sales/activities/follow_ups.json.jbuilder +1 -1
  20. data/app/views/educode_sales/activities/index.json.jbuilder +2 -2
  21. data/app/views/educode_sales/activities/new.html.erb +21 -60
  22. data/app/views/educode_sales/activities/upload_file.html.erb +43 -0
  23. data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +3 -0
  24. data/app/views/educode_sales/businesses/new.html.erb +1 -1
  25. data/app/views/educode_sales/plans/_yearPlan.html.erb +234 -0
  26. data/app/views/educode_sales/plans/business_infos.json.jbuilder +23 -0
  27. data/app/views/educode_sales/plans/edit_bussiness_info.html.erb +79 -0
  28. data/app/views/educode_sales/plans/edit_bussiness_info_extra.html.erb +260 -0
  29. data/app/views/educode_sales/plans/edit_year_plan.html.erb +237 -0
  30. data/app/views/educode_sales/plans/index.html.erb +8 -0
  31. data/app/views/educode_sales/plans/new_year.html.erb +204 -0
  32. data/app/views/educode_sales/plans/plan_business_infos.json.jbuilder +42 -0
  33. data/app/views/educode_sales/plans/years_plan.json.jbuilder +17 -0
  34. data/app/views/educode_sales/recycles/_monthly.html.erb +1 -1
  35. data/app/views/educode_sales/recycles/_yearPlan.html.erb +118 -0
  36. data/app/views/educode_sales/recycles/index.html.erb +26 -22
  37. data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +0 -1
  38. data/app/views/educode_sales/recycles/yearPlan.json.jbuilder +14 -0
  39. data/config/routes.rb +19 -0
  40. data/db/migrate/20230330141213_create_educode_sales_activity_follow_ups.rb +6 -0
  41. data/db/migrate/20230405074036_add_year_to_sale_plans.rb +38 -0
  42. data/lib/educode_sales/version.rb +1 -1
  43. metadata +18 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5df645421c2aa112db563a37427dc4371924632bbca76efa21b74acec0911793
4
- data.tar.gz: bcc515a472ec5c92f66b9bb833dcfe4ca4e2330634df6bfb0b9b058501a90f90
3
+ metadata.gz: 68edf1ae34edbb71f7c415a1bf1f298683c507681463630bbe54cd9e008a1d18
4
+ data.tar.gz: f7dc04cdeab6ff2fe4e696265e5175abd99095dda76fd8dbba2263afa103190e
5
5
  SHA512:
6
- metadata.gz: ee2b4439e08af8c4ca6810fc5fe5ef04d0d410c38a6bc32c8ca3bdcc0caea46e1ce3ac29b178c2c632f5edddd5190046f47e00605a1c33496e7e7a4c9aeb7c89
7
- data.tar.gz: 41c923fe3dd2dd68df2c141add67467fd52b1ffc5bc5ac36a010272cb38b75d1cab760f6e136b24d32c22642dee5f19f84da10c279d9b22d12eb728e4b66d4e9
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
- @staffs = Staff.all.map { |d| [ d.user&.real_name, d.id ]}
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(staff_id: params[:q][:staff_id])
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.assists = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: assist_ids.include?(d.id)}}
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: 'expert', user_id: d[0].to_i, activity_id: activity.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: 'expert', activity_id: activity.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
- experts << EducodeSales::ActivityStaff.find_or_initialize_by(name: u.real_name, clazz_id: 'expert', user_id: d[0].to_i, activity_id: activity.id)
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
- experts << EducodeSales::ActivityStaff.find_or_initialize_by(name: d[1], clazz_id: 'expert', activity_id: activity.id)
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.school.name}-#{@business.department.name}"}
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
- plan.teacher_id = @current_admin.teachers.find(params[:teacher_id]).id
76
- if plan.save
77
- render_success
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 plan
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
- else
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
- plan = @current_admin.sale_plans.build(plan_params)
63
- plan.month = params["month"] + "-1"
64
- plan.business = Business.find_by(id: params[:business_id])
65
- if plan.save
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 plan
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
- sale_plan = SalePlan.find(params[:id])
200
- if sale_plan.soft_destroy(@current_admin.id)
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
- render_failure sale_plan
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.where(is_key: false)
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.where(is_key: false)
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(is_key: false).where("departments.school_id in (?) OR educode_sales_teachers.staff_id = #{@current_admin.id}", school_ids)
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.where(is_key: false)
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
- @attachment.description = "business"
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
- @attachment.container_id = params[:business_id]
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 => '销售指标', 1 => '签单指标', 2 => '回款指标', 3 => '商机跟进', 4 => '商机挖掘-A类商机', 5 => '商机挖掘-B类商机', 6 => '客户拜访-线下拜访', 8 => '客户拜访-线上拜访',
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
  '条'
@@ -0,0 +1,9 @@
1
+ module EducodeSales
2
+ class BusinessInfo < ApplicationRecord
3
+ belongs_to :staff
4
+ belongs_to :business
5
+ belongs_to :sale_plan, optional: true
6
+ end
7
+
8
+ end
9
+
@@ -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: '已存在' }