educode_sales 0.1.0 → 0.1.4

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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/educode_sales/app.css +2 -1
  3. data/app/controllers/educode_sales/activities_controller.rb +7 -1
  4. data/app/controllers/educode_sales/application_controller.rb +0 -1
  5. data/app/controllers/educode_sales/businesses_controller.rb +16 -9
  6. data/app/controllers/educode_sales/follow_ups_controller.rb +12 -8
  7. data/app/controllers/educode_sales/operation_plans_controller.rb +155 -0
  8. data/app/controllers/educode_sales/operation_reports_controller.rb +125 -0
  9. data/app/controllers/educode_sales/places_controller.rb +3 -4
  10. data/app/controllers/educode_sales/plans_controller.rb +12 -10
  11. data/app/controllers/educode_sales/roles_controller.rb +11 -0
  12. data/app/controllers/educode_sales/sale_reports_controller.rb +5 -4
  13. data/app/controllers/educode_sales/sales_controller.rb +4 -1
  14. data/app/controllers/educode_sales/sessions_controller.rb +2 -1
  15. data/app/controllers/educode_sales/teacher_follows_controller.rb +146 -0
  16. data/app/controllers/educode_sales/teachers_controller.rb +113 -11
  17. data/app/models/ability.rb +0 -1
  18. data/app/models/educode_sales/activity.rb +2 -1
  19. data/app/models/educode_sales/business.rb +0 -1
  20. data/app/models/educode_sales/common.rb +1 -0
  21. data/app/models/educode_sales/course_subject.rb +1 -1
  22. data/app/models/educode_sales/money_plan.rb +3 -3
  23. data/app/models/educode_sales/operation_plan.rb +2 -0
  24. data/app/models/educode_sales/place.rb +1 -0
  25. data/app/models/educode_sales/sale_plan.rb +2 -0
  26. data/app/models/educode_sales/staff.rb +5 -3
  27. data/app/models/educode_sales/teacher.rb +20 -1
  28. data/app/views/educode_sales/activities/edit.html.erb +4 -4
  29. data/app/views/educode_sales/activities/index.html.erb +23 -8
  30. data/app/views/educode_sales/activities/index.json.jbuilder +1 -1
  31. data/app/views/educode_sales/activities/new.html.erb +4 -3
  32. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +2 -2
  33. data/app/views/educode_sales/businesses/edit_plan.html.erb +12 -7
  34. data/app/views/educode_sales/businesses/index.html.erb +137 -141
  35. data/app/views/educode_sales/businesses/index.json.jbuilder +2 -1
  36. data/app/views/educode_sales/businesses/new.html.erb +1 -1
  37. data/app/views/educode_sales/businesses/show_follow.html.erb +18 -3
  38. data/app/views/educode_sales/businesses/show_follow_record.html.erb +1 -1
  39. data/app/views/educode_sales/home/search_users.json.jbuilder +1 -1
  40. data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +82 -88
  41. data/app/views/educode_sales/operation_plans/_monthly.html.erb +126 -97
  42. data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +103 -90
  43. data/app/views/educode_sales/operation_plans/_weekly.html.erb +116 -87
  44. data/app/views/educode_sales/operation_plans/edit_month.html.erb +44 -32
  45. data/app/views/educode_sales/operation_plans/edit_monthly.html.erb +1 -1
  46. data/app/views/educode_sales/operation_plans/edit_week.html.erb +49 -39
  47. data/app/views/educode_sales/operation_plans/edit_weekly.html.erb +1 -1
  48. data/app/views/educode_sales/operation_plans/index.html.erb +35 -5
  49. data/app/views/educode_sales/operation_plans/index.json.jbuilder +19 -0
  50. data/app/views/educode_sales/operation_plans/my_month.json.jbuilder +18 -0
  51. data/app/views/educode_sales/operation_plans/my_week.json.jbuilder +19 -0
  52. data/app/views/educode_sales/operation_plans/new_month.html.erb +13 -10
  53. data/app/views/educode_sales/operation_plans/new_monthly.html.erb +162 -72
  54. data/app/views/educode_sales/operation_plans/new_week.html.erb +14 -7
  55. data/app/views/educode_sales/operation_plans/new_weekly.html.erb +205 -120
  56. data/app/views/educode_sales/operation_plans/show_month.html.erb +4 -10
  57. data/app/views/educode_sales/operation_plans/show_week.html.erb +20 -25
  58. data/app/views/educode_sales/operation_plans/show_weekly.html.erb +6 -6
  59. data/app/views/educode_sales/operation_reports/audit.html.erb +214 -0
  60. data/app/views/educode_sales/operation_reports/edit.html.erb +234 -0
  61. data/app/views/educode_sales/operation_reports/index.json.jbuilder +18 -0
  62. data/app/views/educode_sales/operation_reports/plans.json.jbuilder +19 -0
  63. data/app/views/educode_sales/operation_reports/show.html.erb +139 -0
  64. data/app/views/educode_sales/operations/trends.html.erb +8 -0
  65. data/app/views/educode_sales/places/index.html.erb +6 -0
  66. data/app/views/educode_sales/places/index.json.jbuilder +1 -1
  67. data/app/views/educode_sales/plans/_monthPlan.html.erb +9 -1
  68. data/app/views/educode_sales/plans/_monthly.html.erb +10 -2
  69. data/app/views/educode_sales/plans/_weekPlan.html.erb +17 -5
  70. data/app/views/educode_sales/plans/_weekly.html.erb +10 -2
  71. data/app/views/educode_sales/plans/audit_weekly.html.erb +6 -0
  72. data/app/views/educode_sales/plans/edit_monthly.html.erb +8 -0
  73. data/app/views/educode_sales/plans/edit_week.html.erb +8 -2
  74. data/app/views/educode_sales/plans/edit_weekly.html.erb +8 -0
  75. data/app/views/educode_sales/plans/index.json.jbuilder +1 -1
  76. data/app/views/educode_sales/plans/my_month.json.jbuilder +1 -1
  77. data/app/views/educode_sales/plans/my_week.json.jbuilder +1 -1
  78. data/app/views/educode_sales/plans/new_month.html.erb +7 -3
  79. data/app/views/educode_sales/plans/new_monthly.html.erb +8 -0
  80. data/app/views/educode_sales/plans/new_week.html.erb +8 -2
  81. data/app/views/educode_sales/plans/new_weekly.html.erb +7 -1
  82. data/app/views/educode_sales/roles/index.html.erb +33 -2
  83. data/app/views/educode_sales/sale_reports/index.json.jbuilder +1 -1
  84. data/app/views/educode_sales/sale_trends/trends.html.erb +8 -0
  85. data/app/views/educode_sales/sales/index.html.erb +2 -1
  86. data/app/views/educode_sales/sales/operations.html.erb +5 -2
  87. data/app/views/educode_sales/sessions/login.html.erb +1 -1
  88. data/app/views/educode_sales/staffs/edit.html.erb +2 -3
  89. data/app/views/educode_sales/staffs/index.html.erb +4 -4
  90. data/app/views/educode_sales/staffs/new.html.erb +1 -1
  91. data/app/views/educode_sales/teachers/add_courses.html.erb +100 -19
  92. data/app/views/educode_sales/teachers/course_subject.json.jbuilder +10 -0
  93. data/app/views/educode_sales/teachers/edit.html.erb +54 -18
  94. data/app/views/educode_sales/teachers/edit_follow_record.html.erb +49 -30
  95. data/app/views/educode_sales/teachers/index.html.erb +20 -11
  96. data/app/views/educode_sales/teachers/index.json.jbuilder +2 -0
  97. data/app/views/educode_sales/teachers/new.html.erb +8 -6
  98. data/app/views/educode_sales/teachers/new_follow_record.html.erb +54 -29
  99. data/app/views/educode_sales/teachers/show_follow.html.erb +150 -170
  100. data/app/views/educode_sales/teachers/show_follow.json.jbuilder +20 -0
  101. data/app/views/educode_sales/teachers/show_follow_record.html.erb +11 -42
  102. data/app/views/educode_sales/teachers/unfinish_plans.json.jbuilder +14 -0
  103. data/app/views/layouts/educode_sales/application.html.erb +23 -2
  104. data/config/routes.rb +22 -4
  105. data/db/migrate/20210915061738_add_students_count_teacher_follow_ups.rb +9 -0
  106. data/lib/educode_sales/version.rb +1 -1
  107. metadata +19 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5e839ca204d0d75cfbc7e2aed02d9f851ec1738
4
- data.tar.gz: a17e964f87c735baab65a4f74606c971089d3243
3
+ metadata.gz: e11b0c160f2894e96d39dff5b6f90e895950940a
4
+ data.tar.gz: fcb96df55ddd39ed2dc9e67e4cd6313cdd6c8259
5
5
  SHA512:
6
- metadata.gz: 652f290cc81c82085321724b3f38d5e5aeeecebb5f92be9d30799afb8435785e5476deacf49a32f6280e1ef76a7cb2ccc5ec16bb95183ec142972e907ee55dcf
7
- data.tar.gz: a53d53730c2d7e1a701f2c46b6e60dd1a7c4832987d4f0fe29febeb88cc116b0d391da48d770add7bb4f75d1e75940b174fea63152b8790f0c4ea47d78043a4d
6
+ metadata.gz: f5fba1e9ca510c1803807abb69e41a1482a0858b4e7e54757fdf894ae5460b110ae8bd1faf0559de01cc108f47594bdc2f8cd0e4f90c91e59054a47f7f99d5b8
7
+ data.tar.gz: 0c6e805fe44da4508bc033bbf63846bda0bd24248a3f8face88ae839fc06ceabb90e9dbb061f6f8cae7fd91b711806f0c841b0c9aa2fcc9541166e77cbce4e7a
@@ -243,7 +243,8 @@ td .layui-table-cell .layui-form-select {
243
243
  margin-top: 5px;
244
244
  }
245
245
 
246
- .edit-table .layui-table-body.layui-table-main {
246
+ .edit-table .layui-table-body.layui-table-main,
247
+ .min-height-table .layui-table-body.layui-table-main {
247
248
  min-height: 200px;
248
249
  }
249
250
 
@@ -7,7 +7,13 @@ module EducodeSales
7
7
  format.html do
8
8
  end
9
9
  format.json do
10
- @activities = Activity.page(params[:page]).per(params[:per_page])
10
+ @activities = Activity
11
+ if params[:sort].present? && params[:sort][:field]
12
+ @activities = @activities.order("#{params[:sort][:field]} #{params[:sort][:order]}")
13
+ else
14
+ @activities = @activities.order("created_at desc")
15
+ end
16
+ @activities = @activities.page(params[:page]).per(params[:per_page])
11
17
  end
12
18
  end
13
19
  end
@@ -12,7 +12,6 @@ module EducodeSales
12
12
  end
13
13
 
14
14
  def current_user
15
- @current_admin = Staff.first
16
15
  @current_admin ||= Staff.find_by_id(session[:admin_id])
17
16
  end
18
17
 
@@ -4,6 +4,7 @@ module EducodeSales
4
4
  class BusinessesController < ApplicationController
5
5
 
6
6
  def index
7
+ authorize! :read, Business
7
8
  respond_to do |format|
8
9
  format.html do
9
10
  @staffs = Staff.joins(:user).map { |d| [d.user.real_name, d.id]}
@@ -17,20 +18,14 @@ module EducodeSales
17
18
  when '自己'
18
19
  @businesses = Business.where(staff_id: @current_admin.id)
19
20
  when '区域'
20
- schools = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
21
- @businesses = Business.joins("JOIN departments ON businesses.department_id = departments.id").where("departments.school_id in ?", school_ids)
21
+ school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
22
+ @businesses = Business.joins("JOIN departments ON educode_sales_businesses.department_id = departments.id").where("departments.school_id in (?) OR educode_sales_businesses.staff_id = #{@current_admin.id}", school_ids)
22
23
  else
23
24
  @businesses = Business
24
25
  end
25
26
  end
26
27
 
27
- @businesses = @businesses.select("
28
- educode_sales_businesses.*,
29
- last_follow.invitation_at,
30
- last_follow.reception_at,
31
- last_follow.total_amount").joins("
32
- LEFT JOIN educode_sales_follow_ups AS last_follow ON educode_sales_businesses.last_follow_up_id = last_follow.id
33
- ")
28
+ @businesses = @businesses
34
29
  if params[:q].present? && params[:q][:name].present?
35
30
  @businesses = @businesses.where("educode_sales_businesses.name like ?", "%#{params[:q][:name]}%")
36
31
  end
@@ -69,11 +64,23 @@ module EducodeSales
69
64
  @businesses = @businesses.where("created_at > ? AND created_at < ?", date[0], date[1])
70
65
  end
71
66
 
67
+ @businesses = @businesses.page(params[:page]).per(params[:per_page])
68
+
72
69
  if params[:sort].present? && params[:sort][:field]
73
70
  @businesses = @businesses.order("#{params[:sort][:field]} #{params[:sort][:order]}")
74
71
  else
75
72
  @businesses = @businesses.order("created_at desc")
76
73
  end
74
+
75
+ @business_count = @businesses.count
76
+
77
+ @businesses = @businesses.select("
78
+ educode_sales_businesses.*,
79
+ last_follow.invitation_at,
80
+ last_follow.reception_at,
81
+ last_follow.total_amount").joins("
82
+ LEFT JOIN educode_sales_follow_ups AS last_follow ON educode_sales_businesses.last_follow_up_id = last_follow.id
83
+ ").page(params[:page]).per(params[:per_page])
77
84
  end
78
85
  end
79
86
  end
@@ -17,8 +17,12 @@ module EducodeSales
17
17
  end
18
18
 
19
19
  def destroy
20
- follow_up = @current_admin.follow_ups.find(params[:id])
20
+ follow_up = FollowUp.find(params[:id])
21
+ business = follow_up.business
21
22
  if follow_up.destroy
23
+ if follow_up.id == business.last_follow_up_id
24
+ business.update(last_follow_up: follow_ups.last, return_money: MoneyPlan.where(clazz: '已完成', follow_up_id: follow_ups.last&.id).sum(:amount))
25
+ end
22
26
  render_success
23
27
  else
24
28
  render_failure follow_up
@@ -26,7 +30,7 @@ module EducodeSales
26
30
  end
27
31
 
28
32
  def update
29
- follow_up = @current_admin.follow_ups.find(params[:id])
33
+ follow_up = FollowUp.find(params[:id])
30
34
  follow_up.assign_attributes(follow_up_params)
31
35
  follow_up.profit_amount = follow_up.actual_amount * (100-follow_up.divide_rate.to_i) * 0.01 if follow_up.actual_amount
32
36
  if follow_up.save
@@ -37,7 +41,7 @@ module EducodeSales
37
41
  end
38
42
 
39
43
  def teachers
40
- follow_up = @current_admin.follow_ups.find_by(id: params[:id])
44
+ follow_up = FollowUp.find_by(id: params[:id])
41
45
  if follow_up.present?
42
46
  @teachers = follow_up.key_person.includes(:teacher).page(params[:page]).per(params[:per_page])
43
47
  else
@@ -46,12 +50,12 @@ module EducodeSales
46
50
  end
47
51
 
48
52
  def money_plans
49
- follow_up = @current_admin.follow_ups.find_by(id: params[:id])
53
+ follow_up = FollowUp.find_by(id: params[:id])
50
54
  @money_plans = follow_up.money_plans.page(params[:page]).per(params[:per_page])
51
55
  end
52
56
 
53
57
  def add_money
54
- follow_up = @current_admin.follow_ups.find(params[:id])
58
+ follow_up = FollowUp.find(params[:id])
55
59
  money_plan = follow_up.money_plans.build(date_at: params[:date_at], amount: params[:amount], clazz: params[:clazz])
56
60
  money_plan.staff = @current_admin
57
61
  if money_plan.save
@@ -62,7 +66,7 @@ module EducodeSales
62
66
  end
63
67
 
64
68
  def update_money
65
- follow_up = @current_admin.follow_ups.find_by(id: params[:id])
69
+ follow_up = FollowUp.find_by(id: params[:id])
66
70
  money_plan = follow_up.money_plans.find(params[:plan_id])
67
71
  if money_plan.update(date_at: params[:date_at], amount: params[:amount], clazz: params[:clazz])
68
72
  render_success
@@ -72,7 +76,7 @@ module EducodeSales
72
76
  end
73
77
 
74
78
  def delete_money
75
- follow_up = @current_admin.follow_ups.find_by(id: params[:id])
79
+ follow_up = FollowUp.find_by(id: params[:id])
76
80
  money_plan = follow_up.money_plans.find(params[:plan_id])
77
81
  if money_plan.destroy
78
82
  render_success
@@ -82,7 +86,7 @@ module EducodeSales
82
86
  end
83
87
 
84
88
  def add_keys
85
- follow_up = @current_admin.follow_ups.find(params[:id])
89
+ follow_up = FollowUp.find(params[:id])
86
90
  if params[:name].blank?
87
91
  return render_failure '请从平台里选择教师'
88
92
  end
@@ -2,23 +2,104 @@ require_dependency "educode_sales/application_controller"
2
2
 
3
3
  module EducodeSales
4
4
  class OperationPlansController < ApplicationController
5
+ def index
6
+ # authorize! :read, SalePlan
7
+ respond_to do |format|
8
+ format.html do
9
+ common = Common.find_by(clazz: 'staff_type', name: '运营')
10
+ @staffs = Staff.includes(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id] }
11
+ @years = (1..(Time.now.year - 2020)).map { |d| 2020 + d }
12
+ @months = (1..12).map { |d| d }
13
+ end
14
+ format.json do
15
+ if @current_admin.is_admin?
16
+ @sale_plans = OperationPlan
17
+ else
18
+ level = @current_admin.role.role_areas.find_by(clazz: '销售计划').level
19
+ case level
20
+ when '自己'
21
+ @sale_plans = OperationPlan.where(staff_id: @current_admin.id)
22
+ when '区域'
23
+ staff_ids = Staff.joins(department: :school).where("school.province in ?", staff.areas.pluck(:name)).pluck(:id)
24
+ @sale_plans = OperationPlan.where("staff_id in ?", staff_ids)
25
+ else
26
+ @sale_plans = OperationPlan
27
+ end
28
+ end
29
+ if params[:clazz] == 'week'
30
+ @sale_plans = @sale_plans.where.not(weekly: nil)
31
+ else
32
+ @sale_plans = @sale_plans.where(weekly: nil)
33
+
34
+ end
35
+ if params[:q].present? && params[:q][:staff_id].present?
36
+ @sale_plans = @sale_plans.where(staff_id: params[:q][:staff_id])
37
+ end
38
+ if params[:q].present? && params[:q][:year].present?
39
+ @sale_plans = @sale_plans.where("month >= ? and month <= ?", "#{params[:q][:year]}-01-01 00:00:00".to_date, "#{params[:q][:year]}-12-31 23:59:00".to_date)
40
+ end
41
+ if params[:q].present? && params[:q][:month].present?
42
+ @sale_plans = @sale_plans.where("month = ?", "#{params[:q][:month]}-01 00:00:00".to_date)
43
+ end
44
+ if params[:sort].present? && params[:sort][:field]
45
+ @sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
46
+ else
47
+ @sale_plans = @sale_plans.order("updated_at desc")
48
+ end
49
+ @sale_plans = @sale_plans.page(params[:page]).per(params[:per_page])
50
+ end
51
+ end
52
+ end
5
53
  def new_week
54
+ @teacher = Teacher.find_by(id: params[:teacher_id])
55
+ week = Time.now.strftime('%W').to_i
56
+ if week > 3
57
+ @weeks = [week, week - 1, week - 2]
58
+ elsif week == 2
59
+ @weeks = [week, week - 1]
60
+ else
61
+ @weeks = [week]
62
+ end
63
+ @teachers = @current_admin.teachers.where(is_key: 0).pluck(:name, :id)
6
64
  render layout: false
7
65
  end
8
66
 
67
+
68
+ def create
69
+ plan = @current_admin.operation_plans.build(plan_params)
70
+ plan.month = params["month"] + "-1"
71
+ plan.teacher_id = @current_admin.teachers.find(params[:teacher_id]).id
72
+ if plan.save
73
+ render_success
74
+ else
75
+ render_failure plan
76
+ end
77
+ end
78
+
9
79
  def new_weekly
80
+ sale_plans = OperationPlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: Time.now.strftime('%W').to_i, staff_id: @current_admin.id)
81
+ @rate = sale_plans.present? ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
82
+ @departments_count = sale_plans.joins(:teacher).count("distinct(department_id)")
83
+ # @departments_count = 1
10
84
  render layout: false
85
+
11
86
  end
12
87
 
13
88
  def new_month
89
+ @teacher = Teacher.find_by(id: params[:teacher_id])
90
+ @teachers = @current_admin.teachers.where(is_key: 0).pluck(:name, :id)
14
91
  render layout: false
15
92
  end
16
93
 
17
94
  def new_monthly
95
+ sale_plans = OperationPlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", staff_id: @current_admin.id, weekly: nil)
96
+ @rate = sale_plans.present? ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
97
+ @departments_count = sale_plans.joins(:teacher).count("distinct(department_id)")
18
98
  render layout: false
19
99
  end
20
100
 
21
101
  def show_week
102
+ @sale_plan = OperationPlan.find(params[:id])
22
103
  render layout: false
23
104
  end
24
105
 
@@ -35,6 +116,26 @@ module EducodeSales
35
116
  end
36
117
 
37
118
  def edit_week
119
+ @teacher = Teacher.find_by(id: params[:teacher_id])
120
+ @teachers = @current_admin.teachers.pluck(:name, :id)
121
+ @sale_plan = OperationPlan.find(params[:id])
122
+ if @sale_plan.weekly.present?
123
+ week = Time.now.strftime('%W').to_i
124
+ if week > 3
125
+ @weeks = [week, week - 1, week - 2]
126
+ elsif week == 2
127
+ @weeks = [week, week - 1]
128
+ else
129
+ @weeks = [week]
130
+ end
131
+ @weeks << @sale_plan.weekly
132
+ @weeks = @weeks.uniq.sort
133
+ end
134
+ @months = [Time.now.strftime("%Y-%m"), Time.now.months_ago(1).strftime("%Y-%m")]
135
+ @months << @sale_plan.month.strftime("%Y-%m")
136
+ @months = @months.uniq.sort
137
+ @finish_rates = []
138
+ 11.times { |d| @finish_rates << ["#{d * 10}%", d * 10] }
38
139
  render layout: false
39
140
  end
40
141
 
@@ -43,11 +144,65 @@ module EducodeSales
43
144
  end
44
145
 
45
146
  def edit_month
147
+ @teacher = Teacher.find_by(id: params[:teacher_id])
148
+ @teachers = @current_admin.teachers.pluck(:name, :id)
149
+ @sale_plan = OperationPlan.find(params[:id])
150
+ @months = [Time.now.strftime("%Y-%m"), Time.now.months_ago(1).strftime("%Y-%m")]
151
+ @months << @sale_plan.month.strftime("%Y-%m")
152
+ @months = @months.uniq.sort
153
+ @finish_rates = []
154
+ 11.times { |d| @finish_rates << ["#{d * 10}%", d * 10] }
46
155
  render layout: false
47
156
  end
48
157
 
49
158
  def edit_monthly
50
159
  render layout: false
51
160
  end
161
+
162
+ def my_week
163
+ @sale_plans = OperationPlan.where(staff_id: @current_admin.id, month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: Time.now.strftime('%W').to_i)
164
+ if params[:sort].present? && params[:sort][:field]
165
+ @sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
166
+ else
167
+ @sale_plans = @sale_plans.order("updated_at desc")
168
+ end
169
+ @sale_plans = @sale_plans.page(params[:page]).per(params[:per_page])
170
+ end
171
+
172
+ def my_month
173
+ @sale_plans = OperationPlan.where(staff_id: @current_admin.id, month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: nil)
174
+ if params[:sort].present? && params[:sort][:field]
175
+ @sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
176
+ else
177
+ @sale_plans = @sale_plans.order("updated_at desc")
178
+ end
179
+ @sale_plans = @sale_plans.page(params[:page]).per(params[:per_page])
180
+ end
181
+
182
+ def update
183
+ operation_plan = OperationPlan.find(params[:id])
184
+ params["month"] = params["month"] + "-1"
185
+ if operation_plan.update(params.permit(:month, :weekly, :content, :finish_rate, :teacher_id))
186
+ render_success
187
+ else
188
+ render_failure operation_plan
189
+ end
190
+ end
191
+
192
+ def destroy
193
+ operation_plan = OperationPlan.find(params[:id])
194
+ operation_plan.destroy
195
+ render_success
196
+ end
197
+
198
+
199
+
200
+
201
+
202
+ private
203
+
204
+ def plan_params
205
+ params.permit(:month, :weekly, :content, :finish_rate)
206
+ end
52
207
  end
53
208
  end
@@ -2,5 +2,130 @@ require_dependency "educode_sales/application_controller"
2
2
 
3
3
  module EducodeSales
4
4
  class OperationReportsController < ApplicationController
5
+
6
+ def index
7
+ # authorize! :read, SalePlan
8
+ respond_to do |format|
9
+ format.html do
10
+ end
11
+ format.json do
12
+ if @current_admin.is_admin?
13
+ @sale_reports = OperationReport
14
+ else
15
+ level = @current_admin.role.role_areas.find_by(clazz: '销售计划').level
16
+ case level
17
+ when '自己'
18
+ @sale_reports = OperationReport.where(staff_id: @current_admin.id)
19
+ when '区域'
20
+ staff_ids = Staff.joins(department: :school).where("school.province in ?", staff.areas.pluck(:name)).pluck(:id)
21
+ @sale_reports = OperationReport.where("staff_id in ?", staff_ids)
22
+ else
23
+ @sale_reports = OperationReport
24
+ end
25
+ end
26
+ if params[:clazz] == 'week'
27
+ @sale_reports = @sale_reports.where.not(weekly: nil)
28
+ else
29
+ @sale_reports = @sale_reports.where(weekly: nil)
30
+ end
31
+ if params[:q].present? && params[:q][:staff_id].present?
32
+ @sale_reports = @sale_reports.where(staff_id: params[:q][:staff_id])
33
+ end
34
+ if params[:q].present? && params[:q][:year].present?
35
+ @sale_reports = @sale_reports.where("month >= ? and month <= ?", "#{params[:q][:year]}-01-01 00:00:00".to_date, "#{params[:q][:year]}-12-31 23:59:00".to_date)
36
+ end
37
+ if params[:q].present? && params[:q][:month].present?
38
+ @sale_reports = @sale_reports.where("month = ?", "#{params[:q][:month]}-01 00:00:00".to_date)
39
+ end
40
+ if params[:sort].present? && params[:sort][:field]
41
+ @sale_reports = @sale_reports.order("#{params[:sort][:field]} #{params[:sort][:order]}")
42
+ else
43
+ @sale_reports = @sale_reports.order("updated_at desc")
44
+ end
45
+ @sale_reports = @sale_reports.page(params[:page]).per(params[:per_page])
46
+ end
47
+ end
48
+ end
49
+
50
+
51
+ def create
52
+ if params[:month].present?
53
+ sale_report = @current_admin.operation_reports.build(month: Date.today.beginning_of_month)
54
+ else
55
+ sale_report = @current_admin.operation_reports.build(month: Date.today.beginning_of_month, weekly: Time.now.strftime('%W').to_i)
56
+ end
57
+
58
+ sale_report.finish_rate = params[:finish_rate]
59
+ sale_report.client = params[:client]
60
+ sale_report.content = params[:content]
61
+ if sale_report.save
62
+ render_success
63
+ else
64
+ render_failure sale_report
65
+ end
66
+ end
67
+
68
+ def show
69
+ @sale_report = OperationReport.find(params[:id])
70
+ render layout: false
71
+ end
72
+
73
+ def destroy
74
+ sale_report = @current_admin.operation_reports.find(params[:id])
75
+ sale_report.destroy
76
+ render_success
77
+ end
78
+
79
+ def edit
80
+ @sale_report = @current_admin.operation_reports.find(params[:id])
81
+ render layout: false
82
+ end
83
+
84
+ def update
85
+ sale_report = @current_admin.operation_reports.find(params[:id])
86
+ sale_report.content = params[:content]
87
+ if sale_report.save
88
+ render_success
89
+ else
90
+ render_failure sale_report
91
+ end
92
+ end
93
+
94
+ def update_audit
95
+ authorize! :audit, EducodeSales::OperationReport
96
+ sale_report = OperationReport.find(params[:id])
97
+ sale_report.assign_attributes(audit_params)
98
+ if sale_report.level1_opinion_changed? || sale_report.level1_score_changed?
99
+ sale_report.audit1_user_id = @current_admin.id
100
+ end
101
+ if sale_report.level2_opinion_changed? || sale_report.level2_score_changed?
102
+ sale_report.audit2_user_id = @current_admin.id
103
+ end
104
+ if sale_report.level3_opinion_changed? || sale_report.level3_score_changed?
105
+ sale_report.audit3_user_id = @current_admin.id
106
+ end
107
+ if sale_report.save
108
+ render_success
109
+ else
110
+ render_failure sale_report
111
+ end
112
+ end
113
+
114
+ def audit
115
+ @sale_report = OperationReport.find(params[:id])
116
+ render layout: false
117
+ end
118
+
119
+ def plans
120
+ sale_report = OperationReport.find(params[:id])
121
+ @sale_plans = OperationPlan.where(staff_id: sale_report.staff_id, month: sale_report.month, weekly: sale_report.weekly).order("updated_at desc").page(params[:page]).per(params[:per_page])
122
+ end
123
+
124
+ private
125
+ def audit_params
126
+ params.permit(:level1_opinion, :level2_opinion, :level3_opinion, :level1_score, :level2_score, :level3_score)
127
+ end
128
+
129
+
5
130
  end
6
131
  end