educode_sales 1.10.49 → 1.10.58

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/educode_sales/modules/easyeditor/easyeditor.css +1 -1
  3. data/app/controllers/educode_sales/application_controller.rb +10 -0
  4. data/app/controllers/educode_sales/business_courses_controller.rb +58 -33
  5. data/app/controllers/educode_sales/businesses_controller.rb +43 -7
  6. data/app/controllers/educode_sales/contracts_controller.rb +6 -0
  7. data/app/controllers/educode_sales/money_plan_records_controller.rb +6 -2
  8. data/app/controllers/educode_sales/money_plans_controller.rb +3 -0
  9. data/app/controllers/educode_sales/sale_trends_controller.rb +1 -1
  10. data/app/controllers/educode_sales/shixun_dectects_controller.rb +77 -16
  11. data/app/controllers/educode_sales/shixuns_controller.rb +65 -4
  12. data/app/controllers/educode_sales/subject_trends_controller.rb +99 -892
  13. data/app/controllers/educode_sales/subjects_controller.rb +29 -18
  14. data/app/helpers/educode_sales/application_helper.rb +3 -1
  15. data/app/helpers/educode_sales/business_courses_helper.rb +29 -6
  16. data/app/helpers/educode_sales/sale_trends_helper.rb +52 -52
  17. data/app/helpers/educode_sales/subject_helper.rb +5 -1
  18. data/app/models/educode_sales/business.rb +5 -5
  19. data/app/models/educode_sales/business_deliver_subject.rb +3 -2
  20. data/app/models/educode_sales/business_subject.rb +9 -3
  21. data/app/models/educode_sales/business_subject_shixun.rb +37 -8
  22. data/app/models/educode_sales/business_subject_staff.rb +1 -0
  23. data/app/views/educode_sales/business_courses/edit.html.erb +30 -4
  24. data/app/views/educode_sales/business_courses/index.html.erb +34 -12
  25. data/app/views/educode_sales/business_courses/index.json.jbuilder +2 -2
  26. data/app/views/educode_sales/business_courses/list_shixuns.html.erb +132 -64
  27. data/app/views/educode_sales/business_courses/list_shixuns.json.jbuilder +12 -6
  28. data/app/views/educode_sales/business_courses/list_subjects.html.erb +29 -34
  29. data/app/views/educode_sales/business_courses/list_subjects.json.jbuilder +7 -2
  30. data/app/views/educode_sales/business_courses/new.html.erb +45 -20
  31. data/app/views/educode_sales/businesses/index.html.erb +11 -9
  32. data/app/views/educode_sales/contracts/_list.html.erb +16 -1
  33. data/app/views/educode_sales/contracts/index.html.erb +5 -2
  34. data/app/views/educode_sales/contracts/list.js.erb +4 -1
  35. data/app/views/educode_sales/money_plan_records/_index.html.erb +21 -5
  36. data/app/views/educode_sales/money_plan_records/index.js.erb +4 -1
  37. data/app/views/educode_sales/money_plans/list.html.erb +6 -2
  38. data/app/views/educode_sales/sale_trends/_return_money_forecast.html.erb +1 -1
  39. data/app/views/educode_sales/sale_trends/_user_stat.html.erb +1 -1
  40. data/app/views/educode_sales/sale_trends/_visit_analysis.html.erb +1 -1
  41. data/app/views/educode_sales/sale_trends/return_money_forecast.js.erb +1 -1
  42. data/app/views/educode_sales/sale_trends/trends.html.erb +6 -6
  43. data/app/views/educode_sales/sale_trends/user_stat.js.erb +1 -1
  44. data/app/views/educode_sales/sale_trends/visit_analysis.js.erb +1 -1
  45. data/app/views/educode_sales/shixun_dectects/index.html.erb +97 -47
  46. data/app/views/educode_sales/shixun_dectects/index.json.jbuilder +4 -3
  47. data/app/views/educode_sales/shixun_dectects/markdown.html.erb +1 -1
  48. data/app/views/educode_sales/shixuns/edit.html.erb +35 -13
  49. data/app/views/educode_sales/shixuns/index.html.erb +348 -138
  50. data/app/views/educode_sales/shixuns/index.json.jbuilder +9 -5
  51. data/app/views/educode_sales/shixuns/new.html.erb +22 -12
  52. data/app/views/educode_sales/subject_trends/trends.html.erb +177 -575
  53. data/app/views/educode_sales/subjects/edit.html.erb +4 -4
  54. data/app/views/educode_sales/subjects/index.html.erb +50 -12
  55. data/app/views/educode_sales/subjects/index.json.jbuilder +3 -3
  56. data/app/views/educode_sales/subjects/list_shixuns.html.erb +143 -17
  57. data/app/views/educode_sales/subjects/list_shixuns.json.jbuilder +9 -4
  58. data/app/views/educode_sales/subjects/new.html.erb +4 -4
  59. data/app/views/layouts/educode_sales/application.html.erb +1 -1
  60. data/lib/educode_sales/version.rb +1 -1
  61. metadata +6 -7
  62. data/app/assets/images/educode_sales/indexlogo.png +0 -0
@@ -5,7 +5,7 @@ module EducodeSales
5
5
 
6
6
  # 实践课程管理
7
7
  class SubjectsController < ApplicationController
8
- before_action :subject_members
8
+ before_action :subject_members, :subject_url
9
9
 
10
10
  def index
11
11
  authorize! :subject, BusinessDeliverSubject
@@ -13,11 +13,20 @@ module EducodeSales
13
13
  format.html do
14
14
  end
15
15
  format.json do
16
- # d.last_follow_up&.assign_follow_ups.present? ? (d.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.staff&.user&.real_name
17
- business_subject = BusinessSubject.joins(:subject).left_joins(business_deliver_subject: [:manages, business: [:last_follow_up]])
18
- if params[:q] && params[:q][:shixun].present?
19
- business_subject = business_subject.joins("INNER JOIN educode_sales_business_subject_shixuns ON educode_sales_business_subject_shixuns.business_subject_id = educode_sales_business_subjects.id")
20
- .where("educode_sales_business_subject_shixuns.name like '%#{params[:q][:shixun]}%'")
16
+
17
+ if is_commissioner_above?
18
+ business_subject = BusinessSubject
19
+ else
20
+ deliver_staffs = BusinessSubject.joins(business_deliver_subject: [manages: :staff])
21
+ business_subject_ids = deliver_staffs.where("educode_sales_staffs.id = #{@current_admin.id} ").ids
22
+ subject_staffs = BusinessSubject.where(id: BusinessSubject.ids - deliver_staffs.ids).joins(manages: :staff).where("educode_sales_staffs.id = #{@current_admin.id} ")
23
+ business_subject = BusinessSubject.where(id: business_subject_ids + subject_staffs.ids )
24
+ end
25
+
26
+
27
+ business_subject = business_subject.joins(:subject).left_joins(business_deliver_subject: [:manages, business: [:last_follow_up]])
28
+ if params[:q] && params[:q][:business_name].present?
29
+ business_subject = business_subject.joins(:business).where("educode_sales_businesses.name like '%#{params[:q][:business_name]}%' ")
21
30
  end
22
31
  # 查询条件 实践课程名称
23
32
  if params[:q] && params[:q][:subjects_name].present?
@@ -30,23 +39,22 @@ module EducodeSales
30
39
  business_subject = business_subject.where("educode_sales_business_subjects.deliver_date BETWEEN '#{start_time}' AND '#{end_time}' OR
31
40
  educode_sales_follow_ups.reception_at BETWEEN'#{start_time}' AND '#{end_time}'")
32
41
  end
33
-
34
42
  business_subject_schools = {}
35
43
  business_subject_manges = {}
36
44
  business_subject_staffs = {}
37
- BusinessSubject.includes(:school, :manages, :subject, :staffs, business_deliver_subject: [:manages, business: [:school, last_follow_up: :assign_follow_ups] ]).each do |d|
45
+ BusinessSubject.includes(:school, :manages, :subject, :staffs, business_deliver_subject: [:manages, business: [:school, last_follow_up: :assign_follow_ups] ]).find_each do |d|
38
46
  b_d_s = d.business_deliver_subject
39
47
 
40
- b_d_s.present? ? business_subject_schools.merge!({ "#{d.id}": d.business.school_name }) : business_subject_schools.merge!({"#{d.id}": d.school_name })
48
+ b_d_s.present? ? business_subject_schools.merge!({ "#{d.id}": d.business.school.name }) : business_subject_schools.merge!({"#{d.id}": d.school_name })
41
49
  b_d_s.present? ? business_subject_manges.merge!({ "#{d.id}": b_d_s.subject_manages}) : business_subject_manges.merge!({"#{d.id}": d.manges_name })
42
- b_d_s.present? ? business_subject_staffs.merge!({ "#{d.id}": d.business.staff_name }) : business_subject_staffs.merge!({"#{d.id}": "--" }) # 先暂时处理
50
+ b_d_s.present? ? business_subject_staffs.merge!({ "#{d.id}": d.business.staff_name }) : business_subject_staffs.merge!({"#{d.id}": d.staffs_name })
43
51
 
44
52
  end
45
53
  @business_subject_schools = business_subject_schools.stringify_keys
46
54
  @business_subject_staffs = business_subject_staffs.stringify_keys
47
55
  @business_subject_manges = business_subject_manges.stringify_keys
48
-
49
56
  business_subject = business_subject.select("subjects.name s_name,
57
+ subjects.identifier s_identifier,
50
58
  subjects.status status,
51
59
  subjects.public public,
52
60
  educode_sales_business_subjects.id,
@@ -95,7 +103,7 @@ module EducodeSales
95
103
  }
96
104
  new_object = BusinessSubject.create(attr)
97
105
 
98
- subject.add_subject_shixuns(params[:shixun_ids].split(',').map(&:to_i))
106
+ new_object.add_subject_shixuns(params[:shixun_ids].split(',').map(&:to_i))
99
107
 
100
108
 
101
109
  BusinessSubjectStaff.bulk_insert(:staff_id, :container_id, :container_type, :created_at, :updated_at, :category) do |d|
@@ -145,7 +153,7 @@ module EducodeSales
145
153
  def shixun_list
146
154
  respond_to do |format|
147
155
  format.json do
148
- @list = Shixun.unhidden.where.not(id: BusinessSubjectShixun.joins(:business_subject).pluck(:shixun_id) ) # 1先创建实践项目下,通过实践课程无法选该实践项目
156
+ @list = Shixun.where(hidden: 0).where.not(id: BusinessSubjectShixun.joins(:business_subject).pluck(:shixun_id) ) # 1先创建实践项目下,通过实践课程无法选该
149
157
  if params[:q].present?
150
158
  @list = @list.where("name like '%#{params[:q]}%'").page(params[:page]).per(10)
151
159
  end
@@ -174,9 +182,10 @@ module EducodeSales
174
182
  end
175
183
 
176
184
  def list_shixuns
177
- if params[:id].present?
178
- @shixuns = BusinessSubjectShixun.where("business_subject_id = #{params[:id]}")
179
- .joins(:shixun)
185
+ @shixuns = BusinessSubjectShixun.left_joins(:last_dectect)
186
+ .left_joins(:shixun)
187
+ .where("business_subject_id = #{params[:id]}")
188
+
180
189
  if params[:q].present? && params[:q][:shixun_name].present?
181
190
  @shixuns = @shixuns.where("shixuns.name like '%#{params[:q][:shixun_name]}%'")
182
191
  end
@@ -191,10 +200,12 @@ module EducodeSales
191
200
  @shixuns = @shixuns.where(category: params[:q][:category])
192
201
  end
193
202
  @shixuns = @shixuns.select("educode_sales_business_subject_shixuns.*,
194
- shixuns.name as shixun_name")
203
+ shixuns.name as shixun_name,
204
+ shixuns.identifier,
205
+ educode_sales_shixun_dectects.created_at as shixun_dectects_time,
206
+ educode_sales_shixun_dectects.content as dectects_content")
195
207
  .page(params[:page])
196
208
  .per(params[:limit])
197
- end
198
209
  render layout: false
199
210
  end
200
211
 
@@ -16,7 +16,9 @@ module EducodeSales
16
16
  def handled_time_data(item)
17
17
  item.blank? ? "--" : item.strftime("%Y-%m-%d")
18
18
  end
19
-
19
+ def handled_time_data_accurate(item)
20
+ item.blank? ? "--" : item.strftime("%Y-%m-%d %H:%M:%S")
21
+ end
20
22
  def url_to_avatar(source)
21
23
  return "" if source.blank?
22
24
  if File.exist?(disk_filename(source&.class, source&.id)) && File.file?(disk_filename(source&.class, source&.id))
@@ -1,20 +1,19 @@
1
1
  module EducodeSales
2
2
  module BusinessCoursesHelper
3
3
 
4
- def real_shixun_type(type)
5
- case type.to_i
4
+ def real_shixun_category(categor)
5
+ case categor.to_i
6
6
  when 1
7
7
  "管培"
8
8
  when 2
9
- "专职"
10
- when 3
11
9
  "全职"
10
+ when 3
11
+ "专职"
12
12
  else
13
13
  "管培"
14
14
  end
15
15
  end
16
16
 
17
-
18
17
  def real_shixun_level(level)
19
18
  case level.to_i
20
19
  when 1
@@ -22,7 +21,7 @@ module EducodeSales
22
21
  when 2
23
22
  "重要紧急"
24
23
  when 3
25
- "建设重要不紧急中"
24
+ "重要不紧急"
26
25
  when 4
27
26
  "不重要紧急"
28
27
  when 5
@@ -31,6 +30,30 @@ module EducodeSales
31
30
  "不明确"
32
31
  end
33
32
  end
33
+ # 项目状态: 待建设(constructed) 已签协议(signed) 建设中(construction) 审核中(review),返修中(repair) 已内部公开(public), 已公开发布(published) 已经付费(paid)
34
+ def real_shixun_status(status)
35
+ case status.to_i
36
+ when 1
37
+ "待建设"
38
+ when 2
39
+ "已签协议"
40
+ when 3
41
+ "建设中"
42
+ when 4
43
+ "审核中"
44
+ when 5
45
+ "返修中"
46
+ when 6
47
+ "已内部发布"
48
+ when 7
49
+ "已公开发布"
50
+ when 8
51
+ "已付费用"
52
+ when 9
53
+ "审核通过"
54
+ end
55
+
56
+ end
34
57
 
35
58
 
36
59
  end
@@ -1,7 +1,7 @@
1
1
  module EducodeSales
2
2
  module SaleTrendsHelper
3
3
  NAMES = %w[计划投标额 计划投标额累计 实际中标额 实际中标额累计]
4
- RETURN_NAMES = %w[实际回款额 计划回款额 实际回款 计划回款额-全部 计划回款额-o类]
4
+ RETURN_NAMES = %w[计划回款额 计划回款额-全部 实际回款额 实际回款额-累计 计划回款额-O类]
5
5
 
6
6
  def goal_forecast_quarter(labels, selects, staff_id = nil, property)
7
7
  plan_get = plan_get(staff_id, labels, "quarter", property)
@@ -349,7 +349,7 @@ module EducodeSales
349
349
  week = d.split("-").last
350
350
  year = d.split("-").first
351
351
  yearweek = "#{year}#{week}".to_i
352
- actual_return[yearweek].to_f.round(3)
352
+ plan_return[yearweek].to_f.round(3)
353
353
  end
354
354
  elsif select == RETURN_NAMES[1]
355
355
  arr = labels.map do |d|
@@ -367,12 +367,13 @@ module EducodeSales
367
367
  actual_return[yearweek].to_f.round(3)
368
368
  end
369
369
  elsif select == RETURN_NAMES[3]
370
- labels.map do |d|
370
+ arr = labels.map do |d|
371
371
  week = d.split("-").last
372
372
  year = d.split("-").first
373
373
  yearweek = "#{year}#{week}".to_i
374
- plan_return[yearweek].to_f.round(3)
374
+ actual_return[yearweek].to_f.round(3)
375
375
  end
376
+ arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
376
377
  elsif select == RETURN_NAMES[4]
377
378
  arr = labels.map do |d|
378
379
  week = d.split("-").last
@@ -382,16 +383,15 @@ module EducodeSales
382
383
  end
383
384
  arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
384
385
  end
385
- type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[1]
386
+ type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
386
387
  'bar'
387
388
  else
388
389
  "line"
389
390
  end
390
- backgroundColor = if select == RETURN_NAMES[0] || select == RETURN_NAMES[1]
391
- 'rgba(54, 162, 235, 1)'
392
- else
391
+ backgroundColor = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
393
392
  SaleTrend::COLORS[i]
394
- 'rgba(54, 162, 235, 0)'
393
+ else
394
+ 'rgba(54, 162, 235, 0.2)'
395
395
  end
396
396
  {
397
397
  type: type,
@@ -405,11 +405,11 @@ module EducodeSales
405
405
 
406
406
  hash_a = {
407
407
  labels: labels,
408
- datasets: [datasets[0], datasets[1]]
408
+ datasets: [datasets[0], datasets[2]]
409
409
  }
410
410
  hash_b = {
411
411
  labels: labels,
412
- datasets: [datasets[2], datasets[3], datasets[4]]
412
+ datasets: [datasets[1], datasets[4], datasets[3]]
413
413
  }
414
414
  [hash_a, hash_b]
415
415
  end
@@ -423,7 +423,7 @@ module EducodeSales
423
423
  labels.map do |d|
424
424
  quarter = d.split("-").last.to_i
425
425
  year = d.split("-").first.to_i
426
- actual_return[[year, quarter]]&.pluck(:amount)&.reject(&:blank?)&.sum.to_f.round(3)
426
+ plan_return[[year, quarter]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
427
427
  end
428
428
  elsif select == RETURN_NAMES[1]
429
429
  arr = labels.map do |d|
@@ -439,11 +439,12 @@ module EducodeSales
439
439
  actual_return[[year, quarter]]&.pluck(:amount)&.reject(&:blank?)&.sum.to_f.round(3)
440
440
  end
441
441
  elsif select == RETURN_NAMES[3]
442
- labels.map do |d|
442
+ arr = labels.map do |d|
443
443
  quarter = d.split("-").last.to_i
444
444
  year = d.split("-").first.to_i
445
- plan_return[[year, quarter]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
445
+ actual_return[[year, quarter]]&.pluck(:amount)&.reject(&:blank?)&.sum.to_f.round(3)
446
446
  end
447
+ arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
447
448
  elsif select == RETURN_NAMES[4]
448
449
  arr = labels.map do |d|
449
450
  quarter = d.split("-").last.to_i
@@ -452,16 +453,15 @@ module EducodeSales
452
453
  end
453
454
  arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
454
455
  end
455
- type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[1]
456
+ type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
456
457
  'bar'
457
458
  else
458
459
  "line"
459
460
  end
460
- backgroundColor = if select == RETURN_NAMES[0] || select == RETURN_NAMES[1]
461
- 'rgba(54, 162, 235, 1)'
462
- else
461
+ backgroundColor = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
463
462
  SaleTrend::COLORS[i]
464
- 'rgba(54, 162, 235, 0)'
463
+ else
464
+ 'rgba(54, 162, 235, 0.2)'
465
465
  end
466
466
  {
467
467
  type: type,
@@ -475,11 +475,11 @@ module EducodeSales
475
475
 
476
476
  hash_a = {
477
477
  labels: labels,
478
- datasets: [datasets[0], datasets[1]]
478
+ datasets: [datasets[0], datasets[2]]
479
479
  }
480
480
  hash_b = {
481
481
  labels: labels,
482
- datasets: [datasets[2], datasets[3], datasets[4]]
482
+ datasets: [datasets[1], datasets[4], datasets[3]]
483
483
  }
484
484
  [hash_a, hash_b]
485
485
  end
@@ -492,47 +492,47 @@ module EducodeSales
492
492
  datasets = selects.map.with_index do |select, i|
493
493
  data = if select == RETURN_NAMES[0]
494
494
  labels.map do |d|
495
- quarter = d.split("-").last.to_i
495
+ month = d.split("-").last.to_i
496
496
  year = d.split("-").first.to_i
497
- actual_return[[year, quarter]]&.pluck(:amount)&.reject(&:blank?)&.sum.to_f.round(3)
497
+ plan_return[[year, month]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
498
498
  end
499
499
  elsif select == RETURN_NAMES[1]
500
500
  arr = labels.map do |d|
501
- quarter = d.split("-").last.to_i
501
+ month = d.split("-").last.to_i
502
502
  year = d.split("-").first.to_i
503
- plan_return[[year, quarter]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
503
+ plan_return[[year, month]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
504
504
  end
505
505
  arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
506
506
  elsif select == RETURN_NAMES[2]
507
507
  labels.map do |d|
508
- quarter = d.split("-").last.to_i
508
+ month = d.split("-").last.to_i
509
509
  year = d.split("-").first.to_i
510
- actual_return[[year, quarter]]&.pluck(:amount)&.reject(&:blank?)&.sum.to_f.round(3)
510
+ actual_return[[year, month]]&.pluck(:amount)&.reject(&:blank?)&.sum.to_f.round(3)
511
511
  end
512
512
  elsif select == RETURN_NAMES[3]
513
- labels.map do |d|
514
- quarter = d.split("-").last.to_i
513
+ arr = labels.map do |d|
514
+ month = d.split("-").last.to_i
515
515
  year = d.split("-").first.to_i
516
- plan_return[[year, quarter]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
516
+ actual_return[[year, month]]&.pluck(:amount)&.reject(&:blank?)&.sum.to_f.round(3)
517
517
  end
518
+ arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
518
519
  elsif select == RETURN_NAMES[4]
519
520
  arr = labels.map do |d|
520
- quarter = d.split("-").last.to_i
521
+ month = d.split("-").last.to_i
521
522
  year = d.split("-").first.to_i
522
- plan_return_by_o[[year, quarter]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
523
+ plan_return_by_o[[year, month]]&.pluck(:plan_return_money)&.reject(&:blank?)&.sum.to_f.round(3)
523
524
  end
524
525
  arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
525
526
  end
526
- type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[1]
527
+ type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
527
528
  'bar'
528
529
  else
529
530
  "line"
530
531
  end
531
- backgroundColor = if select == RETURN_NAMES[0] || select == RETURN_NAMES[1]
532
- 'rgba(54, 162, 235, 1)'
533
- else
532
+ backgroundColor = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
534
533
  SaleTrend::COLORS[i]
535
- 'rgba(54, 162, 235, 0)'
534
+ else
535
+ 'rgba(54, 162, 235, 0.2)'
536
536
  end
537
537
  {
538
538
  type: type,
@@ -546,11 +546,11 @@ module EducodeSales
546
546
 
547
547
  hash_a = {
548
548
  labels: labels,
549
- datasets: [datasets[0], datasets[1]]
549
+ datasets: [datasets[0], datasets[2]]
550
550
  }
551
551
  hash_b = {
552
552
  labels: labels,
553
- datasets: [datasets[2], datasets[3], datasets[4]]
553
+ datasets: [datasets[1], datasets[4], datasets[3]]
554
554
  }
555
555
  [hash_a, hash_b]
556
556
  end
@@ -561,29 +561,29 @@ module EducodeSales
561
561
  plan_return_by_o = plan_return_by_o(staff_id, labels, "year", property)
562
562
  datasets = selects.map.with_index do |select, i|
563
563
  data = if select == RETURN_NAMES[0]
564
- labels.map { |d| actual_return[d.to_i] || 0 }
564
+ labels.map { |d| plan_return[d.to_i] || 0 }
565
565
  elsif select == RETURN_NAMES[1]
566
566
  arr = labels.map { |d| plan_return[d.to_i] || 0 }
567
567
  arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
568
568
  elsif select == RETURN_NAMES[2]
569
569
  labels.map { |d| actual_return[d.to_i] || 0 }
570
570
  elsif select == RETURN_NAMES[3]
571
- labels.map { |d| plan_return[d.to_i] || 0 }
571
+ arr = labels.map { |d| actual_return[d.to_i] || 0 }
572
+ arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
572
573
  elsif select == RETURN_NAMES[4]
573
574
  arr = labels.map { |d| plan_return_by_o[d.to_i] || 0 }
574
575
  arr.map.with_index(1) { |num, i| arr.first(i).inject(:+) }
575
576
  end
576
577
 
577
- type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[1]
578
+ type = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
578
579
  'bar'
579
580
  else
580
581
  "line"
581
582
  end
582
- backgroundColor = if RETURN_NAMES[0] || select == RETURN_NAMES[1]
583
- 'rgba(54, 162, 235, 1)'
584
- else
583
+ backgroundColor = if select == RETURN_NAMES[0] || select == RETURN_NAMES[2]
585
584
  SaleTrend::COLORS[i]
586
- 'rgba(54, 162, 235, 0)'
585
+ else
586
+ 'rgba(54, 162, 235, 0.2)'
587
587
  end
588
588
  {
589
589
  type: type,
@@ -597,11 +597,11 @@ module EducodeSales
597
597
 
598
598
  hash_a = {
599
599
  labels: labels,
600
- datasets: [datasets[0], datasets[1]]
600
+ datasets: [datasets[0], datasets[2]]
601
601
  }
602
602
  hash_b = {
603
603
  labels: labels,
604
- datasets: [datasets[2], datasets[3], datasets[4]]
604
+ datasets: [datasets[1], datasets[4], datasets[3]]
605
605
  }
606
606
  [hash_a, hash_b]
607
607
  end
@@ -725,7 +725,7 @@ module EducodeSales
725
725
  time_range.last.split("-").first + "-12-31"
726
726
  end
727
727
  staff_id = staff_id.present? ? Array(staff_id) : nil
728
- data = Business.joins(:last_follow_up)
728
+ data = Business.joins(:last_follow_up).where("educode_sales_businesses.deleted_at is null")
729
729
  .where("educode_sales_follow_ups.plan_return_date >= ? and educode_sales_follow_ups.plan_return_date <= ?", start_time, end_time)
730
730
  if staff_id.present?
731
731
  data = data.joins("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
@@ -773,14 +773,14 @@ module EducodeSales
773
773
  time_range.last.split("-").first + "-12-31"
774
774
  end
775
775
  staff_id = staff_id.present? ? Array(staff_id) : nil
776
- data = MoneyPlanRecord.joins(business: [department: [school: :school_tags]]).where("educode_sales_money_plan_records.date_at >= ? and educode_sales_money_plan_records.date_at <= ?", start_time, end_time)
776
+ data = MoneyPlanRecord.where("educode_sales_money_plan_records.date_at >= ? and educode_sales_money_plan_records.date_at <= ?", start_time, end_time)
777
777
  if staff_id.present?
778
778
  data = data.joins("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
779
779
  LEFT JOIN educode_sales_assign_follow_ups ON educode_sales_assign_follow_ups.follow_up_id = last_follow_up.id").
780
780
  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 = ?)", staff_id, staff_id)
781
781
  end
782
782
  if property.present?
783
- data = data.where("school_tags.id = ?", property)
783
+ data = data.joins(business: [department: [school: :school_tags]]).where("school_tags.id = ?", property)
784
784
  end
785
785
  case type
786
786
  when "week"
@@ -820,7 +820,7 @@ module EducodeSales
820
820
  time_range.last.split("-").first + "-12-31"
821
821
  end
822
822
  staff_id = staff_id.present? ? Array(staff_id) : nil
823
- data = Business.joins(:last_follow_up).where("educode_sales_businesses.clazz_id = ?", clazz_id)
823
+ data = Business.joins(:last_follow_up).where("educode_sales_businesses.deleted_at is null").where("educode_sales_businesses.clazz_id = ?", clazz_id)
824
824
  .where("educode_sales_follow_ups.plan_return_date >= ? and educode_sales_follow_ups.plan_return_date <= ?", start_time, end_time)
825
825
  if staff_id.present?
826
826
  data = data.joins("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
@@ -2,12 +2,16 @@ module EducodeSales
2
2
  module SubjectHelper
3
3
 
4
4
 
5
+ def status(d)
6
+ d.public == 2 ? "已公开" : d.public == 1 ? "待审核" : d.status == 2 ? "已发布" : "编辑中"
7
+ end
8
+
5
9
  def school_name(item)
6
10
  item.business ? item.business.school.name : item.school_name
7
11
  end
8
12
 
9
13
  # def deliver_date(item)
10
- # item.business ? item.business.p_course_time : item.deliver_date.strftime("%Y-%m-%d")
14
+ # item.business ? item.business.p_course_time : item.deliver_date.strft审核中ime("%Y-%m-%d")
11
15
  # end
12
16
 
13
17
 
@@ -82,11 +82,11 @@ module EducodeSales
82
82
  # 创建商机交付课程数据
83
83
  def change_diliver
84
84
 
85
- if previous_changes["last_follow_up_id"].present?
86
- last_clazz_id = previous_changes["last_follow_up_id"][-1]
87
- common_type = FollowUp.find_by(id: last_clazz_id)&.stage&.name == "已中标"
88
- BusinessDeliverSubject.find_or_create_by(business_id: self.id) if common_type
89
- end
85
+ # if previous_changes["last_follow_up_id"].present?
86
+ # last_clazz_id = previous_changes["last_follow_up_id"][-1]
87
+ # common_type = FollowUp.find_by(id: last_clazz_id)&.stage&.name == "已中标"
88
+ # BusinessDeliverSubject.find_or_create_by(business_id: self.id) if common_type
89
+ # end
90
90
  end
91
91
 
92
92
  def school_name
@@ -9,17 +9,18 @@ module EducodeSales
9
9
  # constructed:待建设, signed: 已签协议,construction: 建设中,completed: 已完成,delivered: 已交付, accepted: 已验收
10
10
  enum status: { constructed:1, signed:2, construction: 3, completed:4, delivered: 5, accepted: 6 }
11
11
 
12
+ scope :undelivered, -> {where.not(status: "delivered")}
12
13
  # 实践课程完成统计
13
14
  def subject_competed_count
14
15
  all_count = subjects.count
15
- completed_count = subjects.where("subjects.status = 2 and subjects.public = 2").count
16
+ completed_count = subjects.where("subjects.status = 2 or subjects.public = 2").count
16
17
 
17
18
  " #{completed_count} / #{all_count} "
18
19
  end
19
20
 
20
21
  # 实训项目完成进度
21
22
  def shixun_competed_count
22
- " #{subjects.joins(:shixuns).where("shixuns.status =2 and shixuns.public = 2").count} / #{subjects.joins(:shixuns).count} "
23
+ " #{business_subjects.joins(:business_subject_shixuns).where("educode_sales_business_subject_shixuns.shixun_status in (6,7,8)").count } / #{business_subjects.joins(:business_subject_shixuns).count} "
23
24
  end
24
25
 
25
26
  # 课程经理
@@ -12,7 +12,13 @@ module EducodeSales
12
12
 
13
13
  # 销售名称
14
14
  def staffs_name
15
- staffs.joins(staff: :user).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
15
+ staff_names = BusinessSubjectStaff.joins(staff: :user)
16
+ .where("educode_sales_business_subject_staffs.category = #{ BusinessSubjectStaff::CATEGORY_TYPES::SUBJECT_STAFF } and educode_sales_business_subject_staffs.container_id = #{self.id} and
17
+ educode_sales_business_subject_staffs.container_type = #{BusinessSubjectStaff::CONTAINER_TYPES::SUBJECT} ")
18
+ .pluck("DISTINCT CONCAT(users.lastname, users.firstname) ")
19
+ .join(",")
20
+ # staffs.joins(staff: :user).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
21
+ staff_names
16
22
  end
17
23
 
18
24
  # 课程经理名称
@@ -22,7 +28,7 @@ module EducodeSales
22
28
 
23
29
  # 实训完成统计
24
30
  def shixun_compeled_count
25
- " #{business_subject_shixuns.joins(:shixun).where("shixuns.status=2 and shixuns.public = 2").count} / #{business_subject_shixuns.count}"
31
+ " #{business_subject_shixuns.where("educode_sales_business_subject_shixuns.shixun_status in (6,7,8)").count} / #{business_subject_shixuns.count}"
26
32
  end
27
33
 
28
34
  def school_name
@@ -48,7 +54,7 @@ module EducodeSales
48
54
 
49
55
 
50
56
  def add_subject_shixuns(shixun_ids=[]) # 1先创建实践项目下,通过实践课程无法选该实践项目
51
- shixuns = Shixun.where.not(id: BusinessSubjectShixun.joins(:business_subject).pluck(:shixun_id)).unhidden # 1先创建实践项目下,通过实践课程无法选该实践项目
57
+ shixuns = Shixun.where.not(id: BusinessSubjectShixun.joins(:business_subject).pluck(:shixun_id)) # 1先创建实践项目下,通过实践课程无法选该实践项目
52
58
  shixun_ids.each do |item|
53
59
  now_shixun = shixuns.find_by(id: item)
54
60
  if now_shixun.present?
@@ -5,39 +5,68 @@ module EducodeSales
5
5
  belongs_to :school, optional: true
6
6
  belongs_to :shixun, optional: true
7
7
  has_many :staffs, as: :container, dependent: :destroy, class_name: "EducodeSales::BusinessSubjectStaff"
8
+ has_many :shixun_members, as: :container, dependent: :destroy, class_name: "EducodeSales::BusinessSubjectStaff"
9
+ has_many :shixun_producer, ->{ shixun_producer }, as: :container, dependent: :destroy, class_name: "EducodeSales::BusinessSubjectStaff"
8
10
  belongs_to :last_dectect, foreign_key: :shixun_dectect_id, class_name: "EducodeSales::ShixunDectect", optional: true
9
11
 
10
12
  module CATEGORY_TYPE
11
13
  TRAINING = 1 # 管培
12
- WORKER = 2 # 全职
14
+ WORKER = 2 # 全职
13
15
  PLURALIST = 3 # 兼职
14
16
  end
15
17
 
18
+ scope :search_type, ->(type) {where(shixun_type: type.to_i) if type.to_i != 0}
19
+ scope :search_level, ->(level) {where(level: level.to_i) if level.to_i != 0}
20
+ scope :search_status, ->(status) {where(shixun_status: status.to_i) if status.to_i != 0}
21
+ scope :search_category, ->(category) {where(category: category.to_i) if category.to_i != 0}
22
+ scope :training, -> {where(category: CATEGORY_TYPE::TRAINING)}
23
+ scope :worker, -> {where(category: CATEGORY_TYPE::WORKER)}
24
+ scope :pluralist, -> {where(category: CATEGORY_TYPE::PLURALIST)}
25
+ scope :completed, -> {where(shixun_status: [6,7,8])}
26
+ scope :un_completed, -> {where.not(shixun_status: [6,7,8])}
16
27
  # 项目状态: 待建设(constructed) 已签协议(signed) 建设中(construction) 审核中(review),返修中(repair) 已内部公开(public), 已公开发布(published) 已经付费(paid)
17
- # enum status: { constructed: 1, signed: 2, construction: 3, review: 4, repair: 5, public: 6, published: 7,paid: 8}
28
+ # enum shixun_status: { constructed: 1, signed: 2, construction: 3, review: 4, repair: 5, public: 6, published: 7,paid: 8}
18
29
 
19
30
  def shixun_manages
20
- staffs.joins(staff: :user).where(category:BusinessSubjectStaff::CATEGORY_TYPES::SHIXUN_MANAGE).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
31
+ staffs.joins(staff: :user).where(category: BusinessSubjectStaff::CATEGORY_TYPES::SHIXUN_MANAGE).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
21
32
  end
33
+
22
34
  def shixun_producer
23
- staffs.joins(staff: :user).where(category:BusinessSubjectStaff::CATEGORY_TYPES::SHIXUN_PRODUCER).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
35
+ staffs.joins(staff: :user).where(category: BusinessSubjectStaff::CATEGORY_TYPES::SHIXUN_PRODUCER).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
24
36
  end
37
+
25
38
  def shixun_staff
26
- return business_subject.manges unless business_subject.nil?
27
- staffs.joins(staff: :user).where(category:BusinessSubjectStaff::CATEGORY_TYPES::SHIXUN_STAFF).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
39
+ staffs.joins(staff: :user).where(category: BusinessSubjectStaff::CATEGORY_TYPES::SHIXUN_STAFF).pluck("CONCAT(users.lastname, users.firstname) ").join(",")
40
+ end
41
+ def all_staff
42
+ staffs.joins(staff: :user).distinct.select("users.id")
43
+ end
44
+ def shixun_school
45
+ name = ""
46
+ shixuns = BusinessSubjectShixun.find(id)
47
+ if shixuns.school.present?
48
+ name = shixuns.school.name
49
+ end
50
+ if shixuns.business_subject.present?
51
+ if shixuns.business_subject.business.present?
52
+ name = shixuns.business_subject.business.school.name
53
+ end
54
+ end
55
+ p name
28
56
  end
29
-
30
57
 
31
58
  # 查询审核历史和审核人
32
59
  def audit_history
33
60
  ShixunDectect.joins("join educode_sales_staffs on educode_sales_staffs.id = educode_sales_shixun_dectects.reviewed_id
34
61
  join users on users.id = educode_sales_staffs.user_id")
35
- .where(business_subject_shixun_id:id)
62
+ .where(business_subject_shixun_id: id)
36
63
  .where("dectect_type != 0")
37
64
  .select("educode_sales_shixun_dectects.*,
38
65
  CONCAT(users.lastname, users.firstname) as examine_name")
66
+ .order("created_at desc")
39
67
  .all
40
68
  end
69
+
41
70
  # def school_name
42
71
  # business_subject ? business_subject.school_name : school.name
43
72
  # end
@@ -29,6 +29,7 @@ module EducodeSales
29
29
 
30
30
  scope :subject_staffs, ->{where(category: CATEGORY_TYPES::SUBJECT_STAFF)}
31
31
  scope :subject_manges, ->{where(category: CATEGORY_TYPES::SUBJECT_MANAGE)}
32
+ scope :shixun_producer, ->{where(category: CATEGORY_TYPES::SHIXUN_PRODUCER)}
32
33
 
33
34
  end
34
35