educode_sales 0.1.0 → 0.1.1

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/activities_controller.rb +7 -1
  3. data/app/controllers/educode_sales/application_controller.rb +0 -1
  4. data/app/controllers/educode_sales/businesses_controller.rb +3 -2
  5. data/app/controllers/educode_sales/operation_plans_controller.rb +155 -0
  6. data/app/controllers/educode_sales/operation_reports_controller.rb +125 -0
  7. data/app/controllers/educode_sales/places_controller.rb +1 -0
  8. data/app/controllers/educode_sales/plans_controller.rb +3 -1
  9. data/app/controllers/educode_sales/sale_reports_controller.rb +2 -1
  10. data/app/controllers/educode_sales/sales_controller.rb +4 -1
  11. data/app/controllers/educode_sales/teacher_follows_controller.rb +6 -0
  12. data/app/controllers/educode_sales/teachers_controller.rb +17 -5
  13. data/app/models/ability.rb +4 -1
  14. data/app/models/educode_sales/common.rb +1 -0
  15. data/app/models/educode_sales/staff.rb +2 -0
  16. data/app/views/educode_sales/activities/index.html.erb +17 -8
  17. data/app/views/educode_sales/businesses/index.html.erb +136 -140
  18. data/app/views/educode_sales/businesses/show_follow.html.erb +18 -3
  19. data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +60 -76
  20. data/app/views/educode_sales/operation_plans/_monthly.html.erb +116 -95
  21. data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +73 -74
  22. data/app/views/educode_sales/operation_plans/_weekly.html.erb +108 -86
  23. data/app/views/educode_sales/operation_plans/edit_month.html.erb +35 -32
  24. data/app/views/educode_sales/operation_plans/edit_week.html.erb +40 -39
  25. data/app/views/educode_sales/operation_plans/index.json.jbuilder +19 -0
  26. data/app/views/educode_sales/operation_plans/my_month.json.jbuilder +18 -0
  27. data/app/views/educode_sales/operation_plans/my_week.json.jbuilder +19 -0
  28. data/app/views/educode_sales/operation_plans/new_month.html.erb +5 -10
  29. data/app/views/educode_sales/operation_plans/new_monthly.html.erb +27 -43
  30. data/app/views/educode_sales/operation_plans/new_week.html.erb +7 -7
  31. data/app/views/educode_sales/operation_plans/new_weekly.html.erb +46 -53
  32. data/app/views/educode_sales/operation_plans/show_month.html.erb +4 -10
  33. data/app/views/educode_sales/operation_plans/show_week.html.erb +20 -25
  34. data/app/views/educode_sales/operation_plans/show_weekly.html.erb +6 -6
  35. data/app/views/educode_sales/operation_reports/audit.html.erb +214 -0
  36. data/app/views/educode_sales/operation_reports/edit.html.erb +237 -0
  37. data/app/views/educode_sales/operation_reports/index.json.jbuilder +17 -0
  38. data/app/views/educode_sales/operation_reports/plans.json.jbuilder +19 -0
  39. data/app/views/educode_sales/operation_reports/show.html.erb +139 -0
  40. data/app/views/educode_sales/operations/trends.html.erb +8 -0
  41. data/app/views/educode_sales/places/index.html.erb +6 -0
  42. data/app/views/educode_sales/plans/_monthPlan.html.erb +8 -0
  43. data/app/views/educode_sales/plans/_monthly.html.erb +8 -0
  44. data/app/views/educode_sales/plans/_weekPlan.html.erb +10 -3
  45. data/app/views/educode_sales/plans/_weekly.html.erb +8 -0
  46. data/app/views/educode_sales/plans/audit_weekly.html.erb +6 -0
  47. data/app/views/educode_sales/plans/edit_monthly.html.erb +8 -0
  48. data/app/views/educode_sales/plans/edit_weekly.html.erb +8 -0
  49. data/app/views/educode_sales/plans/new_monthly.html.erb +8 -0
  50. data/app/views/educode_sales/plans/new_weekly.html.erb +7 -1
  51. data/app/views/educode_sales/sale_trends/trends.html.erb +8 -0
  52. data/app/views/educode_sales/teachers/index.html.erb +3 -5
  53. data/app/views/layouts/educode_sales/application.html.erb +23 -2
  54. data/config/routes.rb +11 -4
  55. data/lib/educode_sales/version.rb +1 -1
  56. metadata +14 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5e839ca204d0d75cfbc7e2aed02d9f851ec1738
4
- data.tar.gz: a17e964f87c735baab65a4f74606c971089d3243
3
+ metadata.gz: 90a0d369409f2ebe29b56d92f7a254eb2704751c
4
+ data.tar.gz: 0ce02076698626fbc2065281c9643069a6454a71
5
5
  SHA512:
6
- metadata.gz: 652f290cc81c82085321724b3f38d5e5aeeecebb5f92be9d30799afb8435785e5476deacf49a32f6280e1ef76a7cb2ccc5ec16bb95183ec142972e907ee55dcf
7
- data.tar.gz: a53d53730c2d7e1a701f2c46b6e60dd1a7c4832987d4f0fe29febeb88cc116b0d391da48d770add7bb4f75d1e75940b174fea63152b8790f0c4ea47d78043a4d
6
+ metadata.gz: 3825dfa734ae7cc135b650630e8a6e018a1e0d7fff9678b18df835922eff20cc04d24550b45eeab273baa03a9401285198cd82afe311c2be8347e90863b83af3
7
+ data.tar.gz: '029f778234ed11d66f786259ffe72a6861ddbf0c10e984d9db30c67fc160435532fe055d6947df9c9c04e4dba749caabc79ceb478b6e0eeb97efde1321c4f28d'
@@ -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,8 +18,8 @@ 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
@@ -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.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 ? (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.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 ? (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 = @current_admin.operation_plans.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
+ 10.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 = @current_admin.operation_plans.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
+ 10.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 = @current_admin.operation_plans.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 = @current_admin.operation_plans.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
@@ -4,6 +4,7 @@ module EducodeSales
4
4
  class PlacesController < ApplicationController
5
5
  def index
6
6
  respond_to do |format|
7
+ authorize! :read, Place
7
8
  format.html do
8
9
  end
9
10
  format.json do
@@ -4,7 +4,7 @@ module EducodeSales
4
4
  class PlansController < ApplicationController
5
5
 
6
6
  def index
7
- authorize! :read, SalePlan
7
+ # authorize! :read, SalePlan
8
8
  respond_to do |format|
9
9
  format.html do
10
10
  common = Common.find_by(clazz: 'staff_type', name: '销售')
@@ -46,6 +46,7 @@ module EducodeSales
46
46
  else
47
47
  @sale_plans = @sale_plans.order("updated_at desc")
48
48
  end
49
+
49
50
  @sale_plans = @sale_plans.page(params[:page]).per(params[:per_page])
50
51
  end
51
52
  end
@@ -66,6 +67,7 @@ module EducodeSales
66
67
  end
67
68
  end
68
69
 
70
+
69
71
  def new_week
70
72
  @business = Business.find_by(id: params[:business_id])
71
73
  week = Time.now.strftime('%W').to_i
@@ -35,8 +35,9 @@ module EducodeSales
35
35
  end
36
36
  end
37
37
 
38
+
38
39
  def index
39
- authorize! :read, SalePlan
40
+ # authorize! :read, SalePlan
40
41
  respond_to do |format|
41
42
  format.html do
42
43
  end
@@ -6,7 +6,7 @@ module EducodeSales
6
6
  # authorize_resource class: false
7
7
 
8
8
  def index
9
- # authorize! :sales, Staff
9
+ authorize! :sales, Staff
10
10
  respond_to do |format|
11
11
  format.html do
12
12
  end
@@ -22,11 +22,13 @@ module EducodeSales
22
22
  end
23
23
 
24
24
  def trends
25
+ authorize! :trends, SaleTrend
25
26
  @year = params[:year] ? params[:year] : Time.now.year
26
27
  @sale_trend = SaleTrend.find_or_create_by(year: @year)
27
28
  end
28
29
 
29
30
  def sale_trends
31
+ authorize! :sale_trends, SaleTrend
30
32
  sale_trend = SaleTrend.find_by(year: params[:year])
31
33
  if sale_trend.update(sale_trend_params)
32
34
  render_success
@@ -36,6 +38,7 @@ module EducodeSales
36
38
  end
37
39
 
38
40
  def operations
41
+ authorize! :operations, Staff
39
42
  respond_to do |format|
40
43
  format.html do
41
44
  end